Download a lab. Keep your work separate.
One exercise, one learner kit, one disposable workspace. Start with the material you need instead of cloning every language, installing every dependency or copying an instructor’s finished solution.
[!TIP] First visit? Choose 01 — Context and interface below. You need Node 24 for its local tests; Copilot access is separate. No GitHub repository or cloud subscription is required for the local exercise.
| Your goal | Start here |
|---|---|
| Install tools or prepare personal accounts | Prerequisites and accounts, including all three CLI operating systems |
| Practice a professional scenario | A hands-on kit below |
| Follow the fantasy learning path | An adventure kit below |
| Understand the sequence first | Curriculum map |
| Choose a runtime or solve setup problems | Environment guide |
| Verify a download | Checksums and kit inventory |
What a kit contains
| File or folder | Use it for |
|---|---|
KIT-START.md |
Runtime, workspace root, baseline command and expected starting state |
KIT-LESSON.md |
Snapshot of the complete exercise instructions |
| Original project files | Starter code, existing tests, synthetic data and configuration |
.workshop/ |
Local prerequisites, setup guidance and the lesson’s bundled images |
KIT-MANIFEST.json |
Per-file sizes and SHA-256 hashes |
KIT-VERIFY.cjs |
Integrity check before you change the starter |
KIT-LICENSE.txt |
License accompanying the redistributed material |
Kits exclude the instructor reference directory, Git history, dependencies,
caches and local environment files. They do not include accounts, runtimes or
credentials. The canonical lesson and code remain in English inside the package;
the learning site also offers Spanish and Brazilian Portuguese reading views.
External official references still need an internet connection.
[!IMPORTANT] A starter is not a completed application. Some first checks deliberately fail. Follow the expected state in
KIT-START.md; a missing runtime, an import error or an empty test run is not a successful reproduction of an intentional failure.
1. Select and download
On the learning site, a ZIP link downloads the archive directly. On GitHub, if the link opens a file preview, select Download raw file. Download the matching checksum inventory from the same reviewed revision.
Hands-on kits
The five preparation guides reuse the associated exercise kit; they do not need five duplicate archives. Choose either the C# or Python variant for language-paired labs, not both at once.
| Lab | Download | First local check |
|---|---|---|
| 01 — Context and interface | 01-interface.zip | Greeting tests |
| 02 — Analyze C# | 02-csharp.zip | Library tests |
| 02 — Analyze Python | 02-python.zip | Library tests |
| 03 — Develop C# | 03-csharp.zip | Existing library tests |
| 03 — Develop Python | 03-python.zip | Existing library tests |
| 04 — xUnit | 04-xunit.zip | Existing service tests |
| 04 — pytest | 04-pytest.zip | Dependency-free unittest baseline |
| 05 — Refactor C# | 05-csharp.zip | Characterization tests |
| 05 — Refactor Python | 05-python.zip | Characterization tests |
| 06 — Shopping prototype | 06-prototype.zip | Cart domain tests, not UI completion |
| 07 — Duplication | 07-duplication.zip | Selected project build |
| 08 — Large functions | 08-functions.zip | Console project build |
| 09 — Decision rules | 09-conditionals.zip | Pricing project build |
| 10 — Bounded profiling | 10-profiling.zip | Analyzer build; no load test |
| 11 — Issues | 11-issues.zip | Baseline passes; regression is initially red |
| 12 — Secret remediation | 12-secrets.zip | Offline policy tests |
| 13 — Greenfield | 13-greenfield.zip | Intentional unfinished-store failure |
| 14 — Brownfield feature | 14-brownfield.zip | Old contract passes; feature is initially red |
| 15 — Customization | 15-customization.zip | Inventory tests |
| 16 — Copilot SDK | 16-sdk.zip | Offline application tests |
| 17 — Modernization | 17-modernization.zip | CSV baseline; migration is initially red |
Adventure kits
Each kit contains the lab, its verifier and the adventure instructions. A verifier rejects an unfinished exercise unless the table says otherwise. Host discovery and live integrations require separate evidence.
| Level | Download | What the local work establishes |
|---|---|---|
| Foundations | portals-of-nexus.zip | Role, harness, target and environment mapping |
| Foundations | context-mirrors.zip | Passing sequence baseline for controlled experiments |
| Basics | tempora-loop.zip | Bounded convergence behavior |
| Basics | eldoria-laws.zip | Repository instruction contract |
| Intermediate | algora-skills.zip | Focused skill structure |
| Intermediate | stellaris-agents.zip | Custom-agent profile and handoff definition |
| Intermediate | stonevale-guardrails.zip | Deterministic command policy |
| Advanced | cartographer-mcp.zip | Local read-only MCP exchange |
| Advanced | lumoria-graph.zip | Cycle-safe dependency traversal |
| Advanced | mythos-parallel.zip | Parallel task execution and ordered results |
| Surfaces | cloud-citadel.zip | Bounded cloud-task contract, not a cloud run |
| Surfaces | terminal-gate.zip | Safe command parser, not CLI authentication |
| Surfaces | automaton-foundry.zip | SDK structure and evaluation plan; live run separate |
| Capstone | convergence-of-three-realms.zip | Traceable cross-environment workflow contract |
2. Verify and extract on your system
Choose an existing project/work drive with enough space. The paths below are examples: replace them with your approved work location. Never extract over an existing repository. On the shared workshop Mac, use the T9 work drive.
| System | Check the downloaded ZIP | Extract into a new directory |
|---|---|---|
| Windows PowerShell | Get-FileHash .\01-interface.zip -Algorithm SHA256 |
Right-click ZIP → Extract All; choose a new work-drive folder |
| macOS | shasum -a 256 01-interface.zip |
Finder → double-click the ZIP in your chosen work-drive directory |
| Linux | sha256sum 01-interface.zip |
File manager → Extract Here, in your chosen work-drive directory |
Compare the full hash with the entry in SHA256SUMS.txt. A hash from inside an
untrusted archive does not authenticate that archive. Review the repository and
download origin before executing any code.
Open the extracted folder and read KIT-START.md. It specifies whether VS Code
should open the kit root or starter/. Use File → Open Folder in a new window.
Do not leave another repository in a multi-root workspace.
Checkpoint: you can find the source, lesson and manifest on disk outside the
ZIP viewer. If Node 24 is installed, node KIT-VERIFY.cjs from the kit root checks
that extraction preserved the packaged files.
3. Run only the selected baseline
- Read the runtime requirement in
KIT-START.md. - Select the matching interpreter/SDK. Do not install all language stacks.
- Use the working directory printed beside the baseline command.
- Record the command, discovered tests, exit code and actual output.
- Compare the result with expected pass or intentional starter failure.
- Continue with
KIT-LESSON.md: concepts, Ask, Plan, Agent, negative checks and review.
Local contract tests do not need Copilot authentication. A live agent, CLI, SDK or cloud exercise may require account access and can consume usage. Keep it separate.
Use VS Code or Insiders from the extracted kit
-
Read the workspace value in
KIT-START.md. Hands-on kits open at the kit root; adventure customizations open understarter/. -
Use File > Open Folder in your chosen edition, or open a terminal in that workspace and run one editor command:
code .For Insiders instead:
code-insiders . -
Check the active GitHub account and profile in that edition. Review Workspace Trust and the supplied customizations before authorizing tools.
-
Follow the lesson’s Ask, Plan, Agent and review stages. From an adventure’s
starter/terminal, the verifier is one directory above:node ../verify.jsFrom the adventure kit root instead:
node verify.js
These two commands are alternatives based on the working directory, not two different tests. Hands-on kits use the baseline printed in their own first-run guide. Do not substitute an adventure verifier for a language-specific test.
Use Copilot CLI from the extracted kit
-
Complete CLI installation and authentication for your operating system. No VS Code installation is necessary for terminal-only code work.
-
Open a terminal in the extracted kit root. For an adventure, enter its
starter/directory first; for a hands-on kit, stay at the kit root:cd starterRun the directory-change command only for an adventure. Then start the standalone agent:
copilot -
Use the lesson’s investigation prompt without edits first. Then request a plan with file scope, positive and negative checks, and reset. These are responsibilities, not a promise of identical VS Code controls in the CLI.
-
Approve only the reviewed change. Do not grant access to the whole parent repository or disable permission prompts to make a test convenient.
-
Keep a separate ordinary terminal for tests. Run the commands in
KIT-START.mdfrom its stated directory; do not paste test commands into the agent as if that were an executed terminal result. -
Review the real diff and outputs. If you initialized Git at the kit root, these read-only commands show the changes:
git status --short git diff -
Record the actual surface, version, permissions and limitations in your evidence. Exit the learning session when finished; do not leave an unattended agent with broad authority.
| Lesson surface | What terminal-only work can and cannot prove |
|---|---|
| Local code and contract checks in all kits | Run the declared baseline and implementation checks with the required runtime |
| VS Code interface, editor testing and debugger tasks | CLI tests do not prove editor interaction; complete those tasks in VS Code or mark them not performed |
| Instructions, skills, custom agents and MCP | Review files locally; discovery, tool permissions and handoffs must be checked in the specific documented host |
| Terminal Gate | Its parser verifier is not proof that a live Copilot CLI session authenticated or executed |
| SDK and cloud-agent lessons | Offline checks do not prove authenticated inference, a remote assignment or a pull request; complete the separate live route only with authorized access |
The same starter can support different environments without making their capabilities interchangeable. Azure credit is not required for these local checks or for GitHub Copilot CLI authentication.
4. Create a local repository, if needed
Run these commands inside the extracted kit root, after inspecting its files:
git init -b training
git status --short
Review the file list. Exclude dependencies, environment files and runtime data in
the local .gitignore before staging. If Git needs an identity, configure it for
this repository only, with your own approved name and email.
git config user.name "YOUR NAME"
git config user.email "YOUR APPROVED EMAIL"
git add .
git commit -m "Record untouched learning baseline"
The two identity values are placeholders, not commands to copy unchanged. Creating this local baseline does not create a repository on GitHub.
5. Optionally publish to your own GitHub repository
[!CAUTION] Publishing transfers files to GitHub. Review licenses and every staged file. Never upload credentials, real personal data or instructor-private material. A private repository is a sensible default, not permission to upload secrets.
- Sign in to GitHub using your authorized account.
- Select New repository and choose an owner you are allowed to use.
- Enter a unique training name and choose the appropriate visibility.
- Leave initialization with README, license and
.gitignoreunchecked: the local kit already has files and a commit. - Create the empty repository and copy its HTTPS URL.
- In the kit root, inspect
git remote -v. If there is already anorigin, stop and confirm which repository it identifies; do not replace it automatically. - Add the copied URL and push the training branch:
git remote add origin https://github.com/YOUR-OWNER/YOUR-TRAINING-REPOSITORY.git
git push -u origin training
Replace the URL placeholders. Use GitHub’s approved authentication flow; do not place an access token in the URL or a document. Check the branch and files on GitHub. A cloud-agent assignment or pull request is a later, separately reviewed action.
Finish, troubleshoot and reset
| Symptom | Next action |
|---|---|
| A file is missing after extraction | Download again and compare the archive hash; do not invent a replacement |
KIT-VERIFY.cjs fails after editing |
Expected when hashes changed; use the lesson tests for implementation evidence |
| Command not found | Install/select only the runtime named by the chosen kit |
| Python cannot find a module | Check the kit’s library working directory and interpreter |
| A customization is not discovered | Open the specified root, including starter/ where required |
| GitHub push is rejected | Verify owner, URL, authentication and branch; do not force-push |
| An advanced feature is unavailable | Record the blocker and use the documented local/paper alternative |
- Keep the original archive as a clean baseline.
- Save the diff, executed checks and limitations.
- Stop only processes and sessions created for the exercise.
- Extract into a new unused directory for another attempt.
- Close only exercise-owned remote resources after reviewing what must be preserved.
Maintainer reproducibility
From the curriculum checkout, run npm run build:kits after changing a packaged
lesson, fixture or image. npm run check:kits rejects missing/stale artifacts.
The generator uses Node’s standard library, sorted entries, fixed ZIP timestamps,
bundled licenses, file manifests and SHA-256 inventory. It never runs learner code.
This is reproducibility for the declared package format, not a security certification.
ZIP entries use the uncompressed STORE method, so checksums do not depend on the runtime’s compression library. Archives are larger than compressed ZIPs, but keep the same extracted files and deterministic bytes across supported environments.