lab-runthrough
Skill152 starsChanged 7 days agoMITView on GitHub
Run an MCS Labs hands-on lab (classic or guided missions format) step by step in a real browser on a training or demo tenant, the way an attendee would, to find steps, UI labels, prompts and screenshots that no longer match the product. Logs every step as pass, drift, defect, variance or blocked with evidence, and recaptures drifted screenshots, including light and dark pairs. Use when asked to test, run, walk through, dry-run, validate or smoke-test a lab, check whether a lab still works after a product update, or refresh a lab's screenshots. Needs a person to sign in; never stores credentials. Hand the log to lab-update for the fix PR.
- Installs packages
In this repository7 other files it gives its agents.
- .github/copilot-instructions.mdCopilot instructions
- lab-createSkill
- lab-reviewSkill
- lab-updateSkill
- liftline-dispatchSkill
- zava-stock-policySkill
- hotel-operations-briefingSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. About 0 are common, 5 are distinctive, and 9 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 13
Training or demo tenants only: Never use a customer or production tenant, or your own work account, unless the owner explicitly says so.
- Distinctive: line 15
Credentials: Ask the person to sign in themselves in the launched window.
- Very specific: line 18
Separate browser profile: Use scripts/capture.cjs launch, which starts a fresh temporary Edge or Chrome profile in a normal desktop window.
- Distinctive: line 21
No real outreach: Keep customer emails as drafts.
- Distinctive: line 25
Connections: Do not disconnect or delete a working connection unless the environment owner allows it, and restore it afterwards.
- Very specific: line 35
Run npm run audit:labs -- <slug> and fix nothing yet.
- Very specific: line 36
Read both copies: labs/<slug>/README.md and _labs/<slug>.md.
- Very specific: line 42
Run npm ci once if node_modules/puppeteer is missing, and pip install pillow if you will crop screenshots.
- Very specific: line 51
Ask the person to sign in to the training account in the window that opens, then confirm with capture.cjs pages.
- Very specific: line 59
Do exactly what the text says.
- Very specific: line 91
Write a crop spec ({"<name>": [left, top, right, bottom]}) using control boxes from controls, then crop into the lab folder in the format …
- Very specific: line 98
Use --format png for classic PNG images, and --max-width when the capture is wider than the page needs.
- Distinctive: line 111
Remove test records and drafts the lab says to delete.
- Very specific: line 114
Run capture.cjs close to shut the browser and delete its temporary profile.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Run through a lab
A run-through is the only way to know a lab still works. Follow the instructions exactly as an attendee would, write down what really happens, and leave the tenant as you found it.
Safety rules
- Training or demo tenants only. Never use a customer or production tenant, or your own work account, unless the owner explicitly says so.
- Credentials. Ask the person to sign in themselves in the launched window. If they give you a password, type it only into the sign-in page. Never write it to a file, log, command line, commit, PR body or chat summary.
- Separate browser profile. Use
scripts/capture.cjs launch, which starts a fresh temporary Edge or Chrome profile in a normal desktop window. Do not use an embedded or side-panel browser: it shares your session and the script cannot drive it. - No real outreach. Keep customer emails as drafts. Do not send messages, invites or posts to anyone except the signed-in test user.
- Stop what you start. Pause or delete scheduled tasks and automations the lab creates, and confirm after a page reload. Delete test records when the lab says to.
- Connections. Do not disconnect or delete a working connection unless the environment owner allows it, and restore it afterwards.
- Cost. Cowork and other agents consume credits. Record
/cost(or the product's equivalent) in the log. - Raw captures stay out of the repository. They show names, mail and chats.
capture.cjsrefuses an output folder inside the repo. Check every crop for personal data that is not part of the training scenario before it is committed.
1. Prepare
- Run
npm run audit:labs -- <slug>and fix nothing yet; note anything that already fails. - Read both copies:
labs/<slug>/README.mdand_labs/<slug>.md. For a missions lab, the front mattermissionslist holds the prompts, steps, checks and screenshots. - List the prerequisites (licenses, tenant, plugins, connections, sample data) and confirm with the person which tenant and account to use.
- Copy
templates/runthrough-log.mdto a folder outside the repository (for example the session files folder) and fill in the header. - Run
npm cionce ifnode_modules/puppeteeris missing, andpip install pillowif you will crop screenshots.
2. Launch and sign in
node .github/skills/lab-runthrough/scripts/capture.cjs launch "<lab start URL>"Ask the person to sign in to the training account in the window that opens, then confirm
with capture.cjs pages. references/browser-session.md lists every command, the options
and the product quirks seen so far.
3. Execute every step as written
For each step or mission, in order:
- Do exactly what the text says. Use
controls "<regex>"to find a control by its accessible name andclick "<name>"to use it. If the label in the lab is not on screen, that is a finding: do not quietly use the new label. - Enter prompts verbatim from the lab: save the prompt text to a file outside the repo and
run
prompt <file>, thenwait "<text you expect>". - Compare the result with the lab's expected outcome, screenshot, check answer or reveal.
- Log one row: instruction, expected, actual, status, evidence (
shot <name>, quoted UI text) and a proposed fix.
| Status | Meaning | Example |
| pass | Works as written | Button and result match |
| drift | The product changed; the lab is now wrong | "Plugins" is now "Agents & Plugins" |
| defect | The lab was wrong or unclear all along | Step skips a required toggle |
| variance | AI output differs but meets the goal | Different wording, same three slides |
| blocked | The environment stopped you | Missing license, plugin not installed |
Variance is normal for generative output; only log drift when the lab's claim or screenshot would mislead an attendee. Work around a blocked step only if the lab offers a path for it; otherwise log it and continue where possible. Time each mission or use case against its stated minutes.
4. Recapture screenshots that drifted
- Find the screenshot's file name in both copies; reuse it so no Markdown changes.
- Missions labs publish light and dark WebP pairs (
srcandsrc_dark). Set the product theme to System first:pairemulates the operating-system color scheme, which an explicit Light or Dark setting overrides. (Microsoft Copilot, November 2026: bottom-left Settings and more gear > Settings > General > Preferences > Theme.) Then runpair <name> --scheme-attr data-color-scheme, and restore the person's theme afterwards. Classic labs use a single image, usually PNG: runshot <name>. Write a crop spec (
{"<name>": [left, top, right, bottom]}) using control boxes fromcontrols, then crop into the lab folder in the format the lab already uses:python .github/skills/lab-runthrough/scripts/crop_images.py spec.json <raw folder> labs/<slug>/images --format webp --sheets <raw folder>/sheetsUse
--format pngfor classic PNG images, and--max-widthwhen the capture is wider than the page needs.- Open the contact sheets and crops. Check: the step's subject is visible and legible, both themes frame the same content, no personal data outside the scenario.
- Note the printed width and height. Missions front matter needs
widthandheightto match the file. Updatealtwhen the state shown changed.
Recapturing is part of the fix, so hand the new files to lab-update rather than committing
them here.
5. Clean up and hand off
- Pause or delete scheduled tasks and automations; reload and confirm.
- Remove test records and drafts the lab says to delete; leave connections as you found them.
- Record
/costif the lab used credits. - Run
capture.cjs closeto shut the browser and delete its temporary profile. - Finish the log: verdict, counts per status, screenshots to replace, and proposed PRs.
Hand it to
lab-update. Do not commit the log or raw captures.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

