Generated banner for Code Tour
Generated logo for Code Tour

Code Tour

GitHubOfficialFirst committed by vaddisrinivasDistributed by GitHub

  • Skill
  • Content generator
  • Agent tooling
  • MIT
  • Low risk
  • Has scripts

From the author

Use this skill to create CodeTour .tour files — persona-targeted, step-by-step walkthroughs that link to real files and line numbers. Trigger for: "create a tour", "make a code tour", "generate a tour", "onboarding tour", "tour for this PR", "tour for this bug", "RCA tour", "architecture tour", "explain how X works", "vibe check", "PR review tour", "contributor guide", "help someone ramp up", or any request for a structured walkthrough through code. Supports 20 developer personas (new joiner, bug fixer, architect, PR reviewer, vibecoder, security reviewer, and more), all CodeTour step types (file/line, selection, pattern, uri, commands, view), and tour-level fields (ref, isPrimary, nextTour). Works with any repository in any language.
— the description by vaddisrinivas

From the skill’s files

Taken from the skill’s own files (its description, section headings and stated usage). Not an AutoGineer summary, and not written by the author as one.

Use this skill to create CodeTour .tour files — persona-targeted, step-by-step walkthroughs that link to real files and line numbers. Trigger for: "create a tour", "make a code tour", "generate a tour", "onboarding tour", "tour for this PR", "tour for this bug", "RCA tour", "architecture tour", "explain how X works", "vibe check", "PR review tour", "contributor guide", "help someone ramp up", or any request for a structured walkthrough through code. Supports 20 developer personas (new joiner, bug fixer, architect, PR reviewer, vibecoder, security reviewer, and more), all CodeTour step types (file/line, selection, pattern, uri, commands, view), and tour-level fields (ref, isPrimary, nextTour). Works with any repository in any language. You are creating a CodeTour — a persona-targeted, step-by-step walkthrough of a codebase that links directly to files and line numbers. CodeTour files…

What it does

  • Step 1: Discover the repo
  • Step 2: Read the intent — infer everything you can, ask only what you can't
  • Step 3: Read the actual files — no exceptions
  • Step 4: Write the tour
  • Narrative arc — every tour, every persona
  • The 20 personas

When to use it

  • Use this skill to create CodeTour .tour files — persona-targeted, step-by-step walkthroughs that link to real files and line numbers.
  • Trigger for: "create a tour", "make a code tour", "generate a tour", "onboarding tour", "tour for this PR", "tour for this bug", "RCA tour", "architecture tour", "explain how X works", "vibe check"…

Advantages

The skill’s files do not state this.

Usage examples

The skill’s files do not state this.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/github/code-tour-xs73/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip code-tour.zip -d .agents/skills

Documentation by vaddisrinivas

Code Tour Skill

You are creating a CodeTour — a persona-targeted, step-by-step walkthrough of a codebase that links directly to files and line numbers. CodeTour files live in .tours/ and work with the VS Code CodeTour extension.

Two scripts are bundled in scripts/:

  • scripts/validate_tour.py — run after writing any tour. Checks JSON validity, file/directory existence, line numbers within bounds, pattern matches, nextTour cross-references, and narrative arc. Run it: python ~/.agents/skills/code-tour/scripts/validate_tour.py .tours/<name>.tour --repo-root .

  • scripts/generate_from_docs.py — when the user asks to generate from README/docs, run this first to extract a skeleton, then fill it in. Run it: python ~/.agents/skills/code-tour/scripts/generate_from_docs.py --persona new-joiner --output .tours/skeleton.tour

Two reference files are bundled:

  • references/codetour-schema.json — the authoritative JSON schema. Read it to verify any field name or type. Every field you use must conform to it.

  • references/examples.md — 8 real-world CodeTour tours from production repos with annotated techniques. Read it when you want to see how a specific feature (commands, selection, view, pattern, isPrimary, multi-tour series) is used in practice.

Real-world .tour files on GitHub

These are confirmed production .tour files. Fetch one when you need a working example of a specific step type, tour-level field, or narrative structure — don't write from memory when the real thing is one fetch away.

Find more with the GitHub code search: https://github.com/search?q=path%3A**%2F*.tour+&type=code

By step type / technique demonstrated
What to studyFile URL
directory + file+line (contributor onboarding)https://github.com/coder/code-server/blob/main/.tours/contributing.tour
selection + file+line + intro content step (accessibility project)https://github.com/a11yproject/a11yproject.com/blob/main/.tours/code-tour.tour
Minimal tutorial — tight file+line narration for interactive learninghttps://github.com/lostintangent/rock-paper-scissors/blob/master/main.tour
Multi-tour repo with nextTour chaining (cloud native OCI walkthroughs)https://github.com/lucasjellema/cloudnative-on-oci-2021/blob/main/.tours/introduction.tour
isPrimary: true (marks the onboarding entry point)https://github.com/nickvdyck/webbundlr/blob/main/.tours/getting-started.tour
pattern instead of line (regex-anchored steps)https://github.com/nickvdyck/webbundlr/blob/main/.tours/architecture.tour

Raw content tip: Prefix raw.githubusercontent.com and drop /blob/ for raw JSON access.

A great tour is not just annotated files. It is a narrative — a story told to a specific person about what matters, why it matters, and what to do next. Your goal is to write the tour that the right person would wish existed when they first opened this repo.

CRITICAL: Only create .tour JSON files. Never create, modify, or scaffold any other files.


Step 1: Discover the repo

Before asking the user anything, explore the codebase:

  • List the root directory, read the README, and check key config files (package.json, pyproject.toml, go.mod, Cargo.toml, composer.json, etc.)

  • Identify the language(s), framework(s), and what the project does

  • Map the folder structure 1–2 levels deep

  • Find entry points: main files, index files, app bootstrapping

  • Note which files actually exist — every path you write in the tour must be real

If the repo is sparse or empty, say so and work with what exists.

If the user says "generate from README" or "use the docs": run the skeleton generator first, then fill in every [TODO: ...] by reading the actual files:

python skills/code-tour/scripts/generate_from_docs.py \
  --persona new-joiner \
  --output .tours/skeleton.tour
Entry points by language/framework

Don't read everything — start here, then follow imports.

StackEntry points to read first
Node.js / TSindex.js/ts, server.js, app.js, src/main.ts, package.json (scripts)
Pythonmain.py, app.py, __main__.py, manage.py (Django), app/__init__.py (Flask/FastAPI)
Gomain.go, cmd/<name>/main.go, internal/
Rustsrc/main.rs, src/lib.rs, Cargo.toml
Java / Kotlin*Application.java, src/main/java/.../Main.java, build.gradle
Rubyconfig/application.rb, config/routes.rb, app/controllers/application_controller.rb
PHPindex.php, public/index.php, bootstrap/app.php (Laravel)
Repo type variants — adjust focus accordingly

The same persona asks for different things depending on what kind of repo this is:

Repo typeWhat to emphasizeTypical anchor files
Service / APIRequest lifecycle, auth, error contractsrouter, middleware, handler, schema
Library / SDKPublic API surface, extension points, versioningindex/exports, types, changelog
CLI toolCommand parsing, config loading, output formattingmain, commands/, config
MonorepoPackage boundaries, shared contracts, build graphroot package.json/pnpm-workspace, shared/, packages/
FrameworkPlugin system, lifecycle hooks, escape hatchescore/, plugins/, lifecycle
Data pipelineSource → transform → sink, schema ownershipingest/, transform/, schema/, dbt models
Frontend appComponent hierarchy, state management, routingpages/, store/, router, api/

For monorepos: identify the 2–3 packages most relevant to the persona's goal. Don't try to tour everything — open the tour with a step that explains how to navigate the workspace, then stay focused.

Large repo strategy

For repos with 100+ files: don't try to read everything.

  1. Read entry points and the README first

  2. Build a mental model of the top 5–7 modules

  3. For the requested persona, identify the 2–3 modules that matter most and read those deeply

  4. For modules you're not covering, mention them in the intro step as "out of scope for this tour"

  5. Use directory steps for areas you mapped but didn't read — they orient without requiring full knowledge

A focused 10-step tour of the right files beats a scattered 25-step tour of everything.


Step 2: Read the intent — infer everything you can, ask only what you can't

One message from the user should be enough. Read their request and infer persona, depth, and focus before asking anything.

Intent map
User says→ Persona→ Depth→ Action
"tour for this PR" / "PR review" / "#123"pr-reviewerstandardAdd uri step for the PR; use ref for the branch
"why did X break" / "RCA" / "incident"rca-investigatorstandardTrace the failure causality chain
"debug X" / "bug tour" / "find the bug"bug-fixerstandardEntry → fault points → tests
"onboarding" / "new joiner" / "ramp up"new-joinerstandardDirectories, setup, business context
"quick tour" / "vibe check" / "just the gist"vibecoderquick5–8 steps, fast path only
"explain how X works" / "feature tour"feature-explainerstandardUI → API → backend → storage
"architecture" / "tech lead" / "system design"architectdeepBoundaries, decisions, tradeoffs
"security" / "auth review" / "trust boundaries"security-reviewerstandardAuth flow, validation, sensitive sinks
"refactor" / "safe to extract?"refactorerstandardSeams, hidden deps, extraction order
"performance" / "bottlenecks" / "slow path"performance-optimizerstandardHot path, N+1, I/O, caches
"contributor" / "open source onboarding"external-contributorquickSafe areas, conventions, landmines
"concept" / "explain pattern X"concept-learnerstandardConcept → implementation → rationale
"test coverage" / "where to add tests"test-writerstandardContracts, seams, coverage gaps
"how do I call the API"api-consumerstandardPublic surface, auth, error semantics

Infer silently: persona, depth, focus area, whether to add uri/ref, isPrimary.

Ask only if you genuinely can't infer:

  • "bug tour" but no bug described → ask for the bug description

  • "feature tour" but no feature named → ask which feature

  • "specific files" explicitly requested → honor them as required stops

Never ask about nextTour, commands, when, or stepMarker unless the user mentioned them.

PR tour recipe

For PR tours: set "ref" to the branch, open with a uri step for the PR, cover changed files first, then unchanged-but-critical files, close with a reviewer checklist.

User-provided customization — always honor these
User saysWhat to do
"cover src/auth.ts and config/db.yml"Those files are required stops
"pin to the v2.3.0 tag" / "this commit: abc123"Set "ref": "v2.3.0"
"link to PR #456" / pastes a URLAdd a uri step at the right narrative moment
"lead into the security tour when done"Set "nextTour": "Security Review"
"make this the main onboarding tour"Set "isPrimary": true
"open a terminal at this step"Add "commands": ["workbench.action.terminal.focus"]
"deep" / "thorough" / "5 steps" / "quick"Override depth accordingly

Step 3: Read the actual files — no exceptions

Every file path and line number in the tour must be verified by reading the file. A tour pointing to the wrong file or a non-existent line is worse than no tour.

For every planned step:

  1. Read the file

  2. Find the exact line of the code you want to highlight

  3. Understand it well enough to explain it to the target persona

If a user-requested file doesn't exist, say so — don't silently substitute another.


Step 4: Write the tour

Save to .tours/<persona>-<focus>.tour. Read references/codetour-schema.json for the authoritative field list. Every field you use must appear in that schema.

Tour root
{
  "$schema": "https://aka.ms/codetour-schema",
  "title": "Descriptive Title — Persona / Goal",
  "description": "One sentence: who this is for and what they'll understand after.",
  "ref": "main",
  "isPrimary": false,
  "nextTour": "Title of follow-up tour",
  "steps": []
}

Omit any field that doesn't apply to this tour.

when — conditional display. A JavaScript expression evaluated at runtime. Only show this tour if the condition is true. Useful for persona-specific auto-launching, or hiding advanced tours until a simpler one is complete.

{ "when": "workspaceFolders[0].name === 'api'" }

stepMarker — embed step anchors directly in source code comments. When set, CodeTour looks for // <stepMarker> comments in files and uses them as step positions instead of (or alongside) line numbers. Useful for tours on actively changing code where line numbers shift constantly. Example: set "stepMarker": "CT" and put // CT in the source file. Don't suggest this unless the user asks — it requires editing source files, which is unusual.


Step types — full reference

All step types: content (intro/closing, max 2), directory, file+line (workhorse), selection (code block), pattern (regex match), uri (external link), view (focus VS Code panel), commands (run VS Code commands).

Path rule: "file" and "directory" must be relative to repo root. No absolute paths, no leading ./.


When to use each step type
SituationStep type
Tour intro or closingcontent
"Here's what lives in this folder"directory
One line tells the whole storyfile + line
A function/class body is the pointselection
Line numbers shift, file is volatilepattern
PR / issue / doc gives the "why"uri
Reader should open terminal or explorerview or commands

Step count calibration

Match steps to depth and persona. These are targets, not hard limits.

DepthTotal stepsCore path stepsNotes
Quick5–83–5Vibecoder, fast explorer — cut ruthlessly
Standard9–136–9Most personas — breadth + enough detail
Deep14–1810–13Architect, RCA — every tradeoff surfaced

Scale with repo size too. A 3-file CLI doesn't get 15 steps. A 200-file monolith shouldn't be squeezed into 5.

Repo sizeRecommended standard depth
Tiny (< 20 files)5–8 steps
Small (20–80 files)8–11 steps
Medium (80–300 files)10–13 steps
Large (300+ files)12–15 steps (scoped to relevant subsystem)

Writing excellent descriptions — the SMIG formula

Every description should answer four questions in order. You don't need four paragraphs — but every description needs all four elements, even briefly.

S — Situation: What is the reader looking at? One sentence grounding them in context. M — Mechanism: How does this code work? What pattern, rule, or design is in play? I — Implication: Why does this matter for this persona's goal specifically? G — Gotcha: What would a smart person get wrong here? What's non-obvious, fragile, or surprising?

Descriptions should tell the reader something they couldn't learn by reading the file themselves. Name the pattern, explain the design decision, flag failure modes, and cross-reference related context.


Narrative arc — every tour, every persona

  1. Orientation — must be a file or directory step, never content-only. Use "file": "README.md", "line": 1 or "directory": "src" and put your welcome text in the description. A content-only first step (no file, directory, or uri) renders as a blank page in VS Code CodeTour — this is a known VS Code extension behaviour, not configurable.

  2. High-level map (1–3 directory or uri steps) — major modules and how they relate. Not every folder — just what this persona needs to know.

  3. Core path (file/line, selection, pattern, uri steps) — the specific code that matters. This is the heart of the tour. Read and narrate. Don't skim.

  4. Closing (content) — what the reader now understands, what they can do next, 2–3 suggested follow-up tours. If nextTour is set, reference it by name here.

Closing steps

Don't summarize — the reader just read it. Instead, tell them what they can now do, what to avoid, and suggest 2-3 follow-up tours.


The 20 personas

PersonaGoalMust coverAvoid
VibecoderGet the vibe fastEntry point, request flow, main modules. Max 8 steps.Deep dives, edge cases
New joinerStructured ramp-upDirectories, setup, business context, service boundaries.Advanced internals
Bug fixerRoot cause fastUser action → trigger → fault points. Repro hints + test locations.Architecture tours
RCA investigatorWhy did it failCausality chain, side effects, race conditions, observability.Happy path
Feature explainerOne feature end-to-endUI → API → backend → storage. Feature flags, edge cases.Unrelated features
PR reviewerReview the change correctlyChange story, invariants, risky areas, reviewer checklist. URI step for PR.Unrelated context
Security reviewerTrust boundariesAuth flow, input validation, secret handling, sensitive sinks.Unrelated business logic
RefactorerSafe restructuringSeams, hidden deps, coupling hotspots, safe extraction order.Feature explanations
External contributorContribute without breakingSafe areas, code style, architecture landmines.Deep internals
Tech lead / architectShape and rationaleModule boundaries, design tradeoffs, risk hotspots.Line-by-line walkthroughs

Designing a tour series

When a codebase is complex enough that one tour can't cover it well, design a series. The nextTour field chains them: when the reader finishes one tour, VS Code offers to launch the next automatically.

Plan the series before writing any tour. A good series has:

  • A clear escalation path (broad → narrow, orientation → deep-dive)

  • No duplicate steps between tours

  • Each tour standalone enough to be useful on its own

Set nextTour in each tour to the title of the next one (must match exactly). Each tour should be standalone enough to be useful on its own.


What CodeTour cannot do

If asked for any of these, say clearly that it's not supported — do not suggest a workaround that doesn't exist:

RequestReality
Auto-advance to next step after X secondsNot supported. Navigation is always manual — the reader clicks Next. There is no timer, delay, or autoplay step mechanic in CodeTour.
Embed a video or GIF in a stepNot supported. Descriptions are Markdown text only.
Run arbitrary shell commandsNot supported. commands only executes VS Code commands (e.g. workbench.action.terminal.focus), not shell commands.
Branch / conditional next stepNot supported. Tours are linear. when controls whether a tour is shown, not which step follows which.
Show a step without opening a filePartially — content-only steps work, but step 1 must have a file or directory anchor or VS Code shows a blank page.

Anti-patterns

Anti-patternFix
File listing — visiting files with "this file contains..."Tell a story; each step should depend on the previous one
Generic descriptionsName the specific pattern/gotcha unique to this codebase
Line number guessingNever write a line number you didn't verify by reading the file
Ignoring the personaCut every step that doesn't serve their specific goal
Hallucinated filesIf a file doesn't exist, skip the step

Quality checklist — verify before writing the file

  • [ ] Every file path is relative to the repo root (no leading / or ./)

  • [ ] Every file path read and confirmed to exist

  • [ ] Every line number verified by reading the file (not guessed)

  • [ ] Every directory is relative to the repo root and confirmed to exist

  • [ ] Every pattern regex would match a real line in the file

  • [ ] Every uri is a complete, real URL (https://...)

  • [ ] ref is a real branch/tag/commit if set

  • [ ] nextTour exactly matches the title of another .tour file if set

  • [ ] Only .tour JSON files created — no source code touched

  • [ ] First step has a file or directory anchor (content-only first step = blank page in VS Code)

  • [ ] Tour ends with a closing content step that tells the reader what they can do next

  • [ ] Every description answers SMIG — Situation, Mechanism, Implication, Gotcha

  • [ ] Persona's priorities drive step selection (cut everything that doesn't serve their goal)

  • [ ] Step count matches requested depth and repo size (see calibration table)

  • [ ] At most 2 content-only steps (intro + closing)

  • [ ] All fields conform to references/codetour-schema.json


Step 5: Validate the tour

Always run the validator immediately after writing the tour file. Do not skip this step.

python ~/.agents/skills/code-tour/scripts/validate_tour.py .tours/<name>.tour --repo-root .

The validator checks:

  • JSON validity

  • Every file path exists and every line is within file bounds

  • Every directory exists

  • Every pattern regex compiles and matches at least one line in the file

  • Every uri starts with https://

  • nextTour matches an existing tour title in .tours/

  • Content-only step count (warns if > 2)

  • Narrative arc (warns if no orientation or closing step)

Fix every error before proceeding. Re-run until the validator reports ✓ or only warnings. Warnings are advisory — use your judgment. Do not show the user the tour until validation passes.

Common VS Code issues: Content-only first step renders blank (anchor to file/directory instead). Absolute or ./-prefixed paths silently fail. Out-of-bounds line numbers scroll nowhere.

If you can't run scripts, manually verify: step 1 has file/directory, all paths exist, all line numbers are in bounds, nextTour matches exactly.

Autoplay: isPrimary: true + .vscode/settings.json with { "codetour.promptForPrimaryTour": true } prompts on repo open. Omit ref for tours that should appear on any branch.

Share: For public repos, users can open tours at https://vscode.dev/github.com/<owner>/<repo> with no install.


Step 6: Summarize

After writing the tour, tell the user:

  • File path (.tours/<name>.tour)

  • One-paragraph summary of what the tour covers and who it's for

  • The vscode.dev URL if the repo is public (so they can share it immediately)

  • 2–3 suggested follow-up tours (or the next tour in the series if one was planned)

  • Any user-requested files that didn't exist (be explicit — don't quietly substitute)


File naming

<persona>-<focus>.tour — kebab-case, communicates both:

onboarding-new-joiner.tour
bug-fixer-payment-flow.tour
architect-overview.tour
vibecoder-quickstart.tour
pr-review-auth-refactor.tour
security-auth-boundaries.tour
concept-dependency-injection.tour
rca-login-outage.tour

Files

references/examples.md

Real-World CodeTour Examples

Reference this file when you want to see how real repos use CodeTour features. Each example is sourced from a public GitHub repo with a direct link to the .tour file.


microsoft/codetour — Contributor orientation

Tour file: https://github.com/microsoft/codetour/blob/main/.tours/intro.tour Persona: New contributor Steps: ~5 · Depth: Standard

What makes it good:

  • Intro step with an embedded SVG architecture diagram (raw GitHub URL inside the description)

  • Rich markdown per step with emoji section headers (### 🎥 Tour Player)

  • Inline cross-file links inside descriptions: [Gutter decorator](./src/player/decorator.ts)

  • Uses the top-level description field as a subtitle for the tour itself

Technique to copy: Embed images and cross-links in descriptions to make them self-contained.

{
  "file": "src/player/index.ts",
  "line": 436,
  "description": "### 🎥 Tour Player\n\nThe CodeTour player ...\n\n![Architecture](https://raw.githubusercontent.com/.../overview.svg)\n\nSee also: [Gutter decorator](./src/player/decorator.ts)"
}

a11yproject/a11yproject.com — New contributor onboarding

Tour file: https://github.com/a11yproject/a11yproject.com/blob/main/.tours/code-tour.tour Persona: External contributor Steps: 26 · Depth: Deep

What makes it good:

  • Almost entirely directory steps — orients to every src/ subdirectory without getting lost in files

  • Conversational, beginner-friendly tone throughout

  • selection on the opening step to highlight the exact entry in package.json

  • Closes with a genuine thank-you and call-to-action

Technique to copy: Use directory steps as the skeleton of an onboarding tour — they teach structure without requiring the author to explain every file.

{
  "directory": "src/_data",
  "description": "This folder contains the **data files** for the site. Think of them as a lightweight database — YAML files that power the resource listings, posts index, and nav."
}

github/codespaces-codeql — The most technically complete example

Tour file: https://github.com/github/codespaces-codeql/blob/main/.tours/codeql-tutorial.tour Persona: Security engineer / concept learner Steps: 12 · Depth: Standard

What makes it good:

  • isPrimary: true — auto-launches when the Codespace opens

  • commands array to run real VS Code commands mid-tour: the tour literally executes codeQL.runQuery when the reader arrives at that step

  • view property to switch the sidebar panel ("view": "codeQLDatabases")

  • pattern instead of line for resilient matching: "pattern": "import tutorial.*"

  • selection to highlight the exact select clause in a query file

This is the canonical reference for commands, view, and pattern.

{
  "file": "tutorial.ql",
  "pattern": "import tutorial.*",
  "view": "codeQLDatabases",
  "commands": ["codeQL.setDefaultTourDatabase", "codeQL.runQuery"],
  "title": "Run your first query",
  "description": "Click the **▶ Run** button above. The results appear in the CodeQL Query Results panel."
}

github/codespaces-learn-with-me — Minimal interactive tutorial

Tour file: https://github.com/github/codespaces-learn-with-me/blob/main/.tours/main.tour Persona: Total beginner Steps: 4 · Depth: Quick

What makes it good:

  • Only 4 steps — proves that less is more for quick/vibecoder personas

  • isPrimary: true for auto-launch

  • Each step tells the reader to do something (edit a string, change a color) — not just read

  • Ends with a tangible outcome: "your page is live"

Technique to copy: For quick/vibecoder tours, cut mercilessly. Four steps that drive action beat twelve that explain everything.


blackgirlbytes/copilot-todo-list — 28-step interactive tutorial

Tour file: https://github.com/blackgirlbytes/copilot-todo-list/blob/main/.tours/main.tour Persona: Concept learner / hands-on tutorial Steps: 28 · Depth: Deep

What makes it good:

  • Uses content-only checkpoint steps (no file key) as progress milestones: "Check out your page! 🎉" and "Try it out!" between coding tasks

  • Terminal inline commands in descriptions: >> npm install uuid; npm install styled-components

  • Each file step shows the exact code the user should accept, in a markdown code fence, so they know the expected output

Technique to copy: Checkpoint steps (content-only, milestone title) break up long tours and give the reader a sense of progress.

{
  "title": "Check out your page! 🎉",
  "description": "Open the **Simple Browser** tab to see your to-do list. You should see all three tasks rendering from your data array.\n\nOnce you're happy with it, continue to add interactivity."
}

lucasjellema/cloudnative-on-oci-2021 — Multi-tour architecture series

Tour files:

Persona: Platform engineer / architect Steps: 12 per tour · Depth: Standard

What makes it good:

  • Three separate tours for three separate concerns (function code, IaC, CI/CD pipeline) — each standalone but linked via nextTour

  • selection coordinates used heavily in Terraform files where a block (not a single line) is the point

  • Steps include markdown links to official OCI documentation inline

  • Designed to be browsed via vscode.dev/github.com/... without cloning

Technique to copy: For complex systems, write one tour per layer and chain them with nextTour. Don't try to cover infrastructure + application code + CI/CD in one tour.


SeleniumHQ/selenium — Monorepo build system onboarding

Tour files:

  • .tours/bazel.tour — Bazel workspace and build target orientation

  • .tours/building-and-testing-the-python-bindings.tour — Python bindings BUILD.bazel walkthrough

Persona: External contributor (build system focus) Steps: ~10 per tour

What makes it good:

  • Targets a non-obvious entry point — not the product code but the build system

  • Proves that "contributor onboarding" tours don't have to start with main() — they start with whatever is confusing about this specific repo

  • Used in a large, mature OSS project at scale


Technique quick-reference

FeatureWhen to useReal example
isPrimary: trueAuto-launch tour when repo opens (Codespace, vscode.dev)codespaces-learn-with-me, codespaces-codeql
commands: [...]Run a VS Code command when reader arrives at this stepcodespaces-codeql (codeQL.runQuery)
view: "terminal"Switch VS Code sidebar/panel at this stepcodespaces-codeql (codeQLDatabases)
pattern: "regex"Match by line content, not number — use for volatile filescodespaces-codeql
selection: {start, end}Highlight a block (function body, config section, type def)a11yproject, oci-2021, codespaces-codeql
directory: "path/"Orient to a folder without reading every filea11yproject, codespaces-codeql
uri: "https://..."Link to PR, issue, RFC, ADR, external docAny PR review tour
nextTour: "Title"Chain tours in a seriesoci-2021 (3-part series)
Checkpoint steps (content-only)Progress milestones in long interactive tourscopilot-todo-list
>> command in descriptionTerminal inline command link in VS Codecopilot-todo-list
Embedded image in descriptionArchitecture diagrams, screenshotsmicrosoft/codetour

Discover more real tours on GitHub

Search all .tour files on GitHub: https://github.com/search?q=path%3A**%2F*.tour+&type=code

This search returns every .tour file committed to a public GitHub repo. Use it to:

  • Find tours for repos in the same language/framework as the one you're working on

  • Study how other authors handle the same personas or step types

  • Look up how a specific field (commands, selection, pattern) is used in the wild

Filter by language or keyword to narrow results — e.g. add language:TypeScript or fastapi to the query.


Further reading

Requirements and compatibility

Written for: GitHub Copilot

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs Python, Needs Node.js

Security

What our scanner noticed· Low risk

  • Scripts that your agent may run

This skill includes scripts that your agent may run. Read them before you use it.

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

First committed by
GitHub avatar of vaddisrinivasvaddisrinivas
Publisher
GitHub (Official)
Distributed by
GitHub
Source
github/awesome-copilot · skills/code-tour · commit 797337f
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced
Contributors
vaddisrinivas

AutoGineer is not affiliated with or endorsed by vaddisrinivas or GitHub.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download code-tour.zip