Add Advanced Copilot CLI course to the Learning Hub - #2800
Conversation
Publish the "Advanced Copilot CLI" course into the awesome-copilot Learning Hub, mirroring the copilot-workshops / cli-for-beginners precedent. - Add content-sync agentic workflow (.github/workflows/advanced-copilot-cli-sync.md + compiled .lock.yml). Runs read-only against the now-public github-samples/advanced-copilot-cli and opens PRs for human review. staged:true removed (flip-to-live). - Seed the mirrored course tree: course landing + multi-stack track overview + nine module pages (00-08) under website/src/content/docs/learning-hub/advanced-copilot-cli/, plus five images under website/public/images/learning-hub/advanced-copilot-cli/. - Wire navigation: "Advanced Copilot CLI" sidebar group (nested "Multi-stack (AssetTrack)") in website/astro.config.mjs after "Copilot Workshops", and a course entry in learning-hub/index.md. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Publishes the Advanced Copilot CLI course in the Learning Hub and adds weekly upstream synchronization.
Changes:
- Adds nine course modules and five diagrams.
- Adds navigation and course discovery.
- Adds and compiles the synchronization workflow.
Show a summary per file
| File | Description |
|---|---|
.github/aw/actions-lock.json |
Updates agentic workflow action pins. |
.github/workflows/advanced-copilot-cli-sync.md |
Defines weekly course synchronization. |
.github/workflows/advanced-copilot-cli-sync.lock.yml |
Compiles the synchronization workflow. |
website/astro.config.mjs |
Adds course sidebar navigation. |
website/src/content/docs/learning-hub/index.md |
Links the new course. |
website/src/content/docs/learning-hub/advanced-copilot-cli/index.md |
Adds the course landing page. |
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/index.md |
Adds the module index. |
.../multi-stack/00-prerequisites.md |
Adds environment setup. |
.../multi-stack/01-working-with-copilot-cli.md |
Introduces Copilot CLI fundamentals. |
.../multi-stack/02-building-ai-infrastructure.md |
Covers instructions, agents, and skills. |
.../multi-stack/03-test-suite-remote-delegation.md |
Covers testing and delegation. |
.../multi-stack/04-lifecycle-hooks.md |
Covers lifecycle hooks. |
.../multi-stack/05-add-feature-barcode.md |
Adds the feature-development exercise. |
.../multi-stack/06-modernize-apps.md |
Adds modernization exercises. |
.../multi-stack/07-manage-infrastructure.md |
Covers MCP servers and plugins. |
.../multi-stack/08-wrap-up.md |
Concludes the course. |
.../03-test-evidence-loop.png |
Illustrates the testing feedback loop. |
.../03-test-backed-workflow.png |
Illustrates the test-backed workflow. |
.../03-delegation-handoff-flow.png |
Illustrates delegated work. |
.../03-copilot-work-surfaces.png |
Compares Copilot work surfaces. |
.../03-remote-control-flow.png |
Illustrates remote session control. |
Review details
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Suppressed comments (1)
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/02-building-ai-infrastructure.md:13
- Correct the misspelling; the repository's codespell check will flag it.
Every time you start a fresh Copilot CLI session, the agent only sees your raw files in the working directory. Without shared instructions, guidlines and codified conventions, you have to keep re-explaining your stacks and re-establishing your coding standards. That repetition makes sessions much slower and produces inconsistent output, so in this module, we build the **AI infrastructure** that makes future interactions with Copilot faster and more accurate.
- Files reviewed: 15/21 changed files
- Comments generated: 21
- Review effort level: Balanced
| "github/gh-aw-actions/setup@v0.81.6": { | ||
| "repo": "github/gh-aw-actions/setup", | ||
| "version": "v0.84.3", | ||
| "sha": "c863074b673419603d146aab585e2986ef08deec" | ||
| "version": "v0.81.6", | ||
| "sha": "ba6380cc6e5be5d21677bebe04d52fb48e3abec7" |
| cache-memory: true | ||
| safe-outputs: | ||
| create-pull-request: | ||
| labels: [automated-update, learning-hub, advanced-copilot-cli] |
| > [!CAUTION] | ||
| > This workflow ships with `safe-outputs.staged: true` set. In staged mode the agent runs normally but **no pull request is opened** — the intended PR is emitted as a run artifact for preview only. This is deliberate while the upstream source repo `github-samples/advanced-copilot-cli` is still internal. **To go live**, remove the `staged: true` line once the source repo is public and the mirror is ready to receive real PRs. See `PUBLISHING.md` in `github-samples/advanced-copilot-cli` for the flip-to-live checklist. |
| - Supporting assets in `content/images/` | ||
| - Any change to module structure, order, or titles | ||
|
|
||
| 4. If a local mirror **already exists** and **no commits** were found since the last sync, do **not** immediately no-op on the strength of the cached SHA alone. The cached `last_synced_sha` is only advanced optimistically when a PR is opened (see Step 5), so a previously opened sync PR that was later **closed or rejected** can leave the cache pointing at a commit whose content never actually reached `main`. Before short-circuiting, **verify the checked-out mirror is genuinely consistent with the current upstream content** (spot-check that every upstream module and image is present in the mirror and not obviously stale). Only if the mirror both is up to date on SHA **and** matches upstream should you call the `noop` safe output with a message like: "No new commits found in `github-samples/advanced-copilot-cli@main` since last sync (`<last_synced_sha>`), and the local mirror matches upstream. No action needed." If the SHA suggests nothing changed but the mirror is actually missing or stale, proceed to Step 2+ and open a PR anyway so a rejected/closed earlier PR cannot permanently hide the update. |
| 3. Select **Create a new repository**. | ||
| 4. Under **Owner**, select your personal GitHub account. | ||
| 5. For **Repository name**, enter `AssetTrack`. | ||
| 6. Leave the remaining options at their defaults. |
|
|
||
| 1. host the marketplace where the whole organization can reach it, | ||
| 2. make the plugin install automatically through enterprise-managed plugin standards, | ||
| 3. and govern org-wide personas through enterprise custom agents.| |
| | [← Previous: Modernizing apps with Copilot CLI][previous-lesson] | [Next: Wrap-up →][next-lesson] | | ||
| |:--|--:| | ||
|
|
||
| Everything so far has been scoped to a single repository, or to you as the individual developer. The instructions, custom agents, agent skills, and lifecycle hooks you committed to AssetTrack do travel to anyone who clones it — but they stop at that repo's boundary. The MCP configuration was saved to your user settings. In practice, though, there are always rules, agents, skills, and shared resources that shouldn't belong to single repository; they encode how the whole organization works, and every developer at Contoso should get them automatically. This module moves that setup to the enterprise level: a custom MCP server that exposes a shared resource, a plugin that bundles your AI infrastructure into a single installable unit, and enterprise standards that push it to every developer without anyone cloning a repo or copying a file. |
| > git checkout start-of-module-07 | ||
| > ``` | ||
| > | ||
| > The plugin and MCP work in this module targets your fork only, but the patterns are written for org-wide rollout. |
|
|
||
| ## Agent skills | ||
|
|
||
| Custom agents introduce *specialized personas*. **Agent skills** change what Copilot *knows* to do. A skill is a packaged capability, could include an instruction set, optional scripts and resources - that the agent can invoke **at runtime** when the task matches its trigger. Skills live in `.copilot/skills/` (for repo-scoped) or `~/.copilot/skills/` (for user-scoped) and in Copilot CLI, you use `/skills` to view and manage them. |
| 6. Fill out the form, using <kbd>Tab</kbd> to move between fields, with the following information: | ||
| - **Server Name**: `playwright` | ||
| - **Server type**: **STDIO** | ||
| - **Command**: `npx @playwright/mcp@latest` |
The [!CAUTION] block describing safe-outputs.staged:true mode is now contradictory since the workflow runs live (staged:true was removed from the config). Drop the block from the markdown body; regenerate the lock file's body_hash to match. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Review details
Suppressed comments (1)
.github/aw/actions-lock.json:26
- This downgrades the shared action lock from gh-aw v0.84.3 to v0.81.6 and removes the existing setup-cli entry, while the repository's other generated workflow locks still require setup v0.84.3. Recompile this workflow with the repository's current gh-aw v0.84.3 so both this registry and
advanced-copilot-cli-sync.lock.ymlare generated consistently.
"github/gh-aw-actions/setup@v0.81.6": {
"repo": "github/gh-aw-actions/setup",
"version": "v0.81.6",
"sha": "ba6380cc6e5be5d21677bebe04d52fb48e3abec7"
- Files reviewed: 15/21 changed files
- Comments generated: 3
- Review effort level: Balanced
| create-pull-request: | ||
| labels: [automated-update, learning-hub, advanced-copilot-cli] | ||
| title-prefix: "[bot] " | ||
| base-branch: main |
|
|
||
| ```bash | ||
| curl -o .github/hooks/scripts/test-router.sh \ | ||
| https://raw.githubusercontent.com/GeekTrainer/advanced-copilot-cli/main/assets/04/.github/hooks/scripts/test-router.sh |
| 1. In your main session, have Copilot find the representative plan in the course repository and save it into your repo. Copilot CLI ships with the GitHub MCP server, so it can locate the file by repository and name rather than a brittle raw URL: | ||
|
|
||
| ```text | ||
| Using the built-in GitHub MCP server, find the audit-svc migration plan in the GeekTrainer/advanced-copilot-cli repository — it's the resource file under content/resources for modernizing audit-svc. Read its contents and save them to docs/modernization/audit-svc-plan.md in this repo. Save it as-is — don't summarize or reformat it. |
There was a problem hiding this comment.
Review details
Suppressed comments (6)
Previously missed (3) — in code that hasn't changed since the last review.
.github/workflows/advanced-copilot-cli-sync.md:28
- The declared source is already ahead of the seeded mirror. Current
mainusesgithub-samples/contoso-inventoryin Modules 0, 3, and 8 andgithub-samples/advanced-copilot-cliin the Module 4 download and Module 6 MCP prompt, while the added pages still reference the old GeekTrainer repositories. Refresh the seed from current upstream before publishing so the initial mirror satisfies the PR's alignment claim.
- **Repository:** [`github-samples/advanced-copilot-cli`](https://github.com/github-samples/advanced-copilot-cli)
- **Branch / ref to read from:** `main` (the repository's default branch)
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/02-building-ai-infrastructure.md:202
.copilot/skills/is not a supported repository-level Agent Skills location, and this statement contradicts the working.github/skills/path used in step 5. Learners following this explanation can create a skill that Copilot CLI does not discover.
Custom agents introduce *specialized personas*. **Agent skills** change what Copilot *knows* to do. A skill is a packaged capability, could include an instruction set, optional scripts and resources - that the agent can invoke **at runtime** when the task matches its trigger. Skills live in `.copilot/skills/` (for repo-scoped) or `~/.copilot/skills/` (for user-scoped) and in Copilot CLI, you use `/skills` to view and manage them.
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/06-modernize-apps.md:82
- This renders as a standalone ordered-list item numbered “2,” because the preceding LSP explanation is a normal paragraph rather than item 1. Remove the
2.prefix (or make both extension points a real two-item list) so the section is not visibly misnumbered. Apply the correction upstream as well to preserve mirror fidelity.
This issue also appears on line 258 of the same file.
2. **An MCP server** extends what Copilot can *do*; a documentation MCP server points that extension at first-party docs. [Model Context Protocol (MCP)][mcp-concept] is an open standard for giving a model access to external tools and data, and Copilot CLI ships with the GitHub MCP server built in. For a Spring Boot major upgrade the documentation that matters is the frameworks' own, and the most direct way to reach it is [GitMCP][gitmcp], an open-source server that turns any public GitHub repository into a documentation surface. Point it at `spring-projects/spring-boot` and Copilot reads Spring's own docs straight from the source, with no account or API key — and because it's open source you can self-host it. Pointing Copilot at a live docs surface is what keeps its framework claims tied to current guidance instead of whatever version happened to be current when its training data was frozen. For a framework major upgrade where the whole point is that things changed, that freshness is the difference between advice you can trust and advice you have to re-verify by hand.
.github/workflows/advanced-copilot-cli-sync.md:18
create-pull-requestcurrently permits patches to any repository path. This sync agent only needs the course mirror, images, navigation, and optional codespell allowlist, so leaving the output unrestricted unnecessarily expands the blast radius of upstream prompt content.
create-pull-request:
labels: [automated-update, learning-hub, advanced-copilot-cli]
title-prefix: "[bot] "
base-branch: main
.github/aw/actions-lock.json:26
- This recompilation downgrades the repository-wide gh-aw action pin from v0.84.3 to v0.81.6 and removes the v0.84.3
setup-clientry, although existing generated workflows andcopilot-setup-steps.ymlstill use those v0.84.3 actions. Recompile this workflow with the repository's current gh-aw version and regenerate both lock artifacts without replacing the shared pins with an older runtime.
"github/gh-aw-actions/setup@v0.81.6": {
"repo": "github/gh-aw-actions/setup",
"version": "v0.81.6",
"sha": "ba6380cc6e5be5d21677bebe04d52fb48e3abec7"
website/src/content/docs/learning-hub/advanced-copilot-cli/multi-stack/06-modernize-apps.md:258
- Calling Jackson 3.1.4 “still-vulnerable” appears backwards: the published 3.1.x Jackson advisories identify 3.1.4 as the fixed release (for example, GHSA-5jmj-h7xm-6q6v affects versions before 3.1.4). Either cite a newer advisory whose affected range includes 3.1.4 or remove the forced BOM override; otherwise learners are instructed to change dependency management based on an unsupported security claim.
Watch the agent work the loop: it bumps the `spring-boot-starter-parent` to Spring Boot `4.1.0` and the `java.version` from `17` to `21`, re-points the `jackson-bom` currency pin at a CVE-clean Jackson 3 (Boot 4.1.0 otherwise resolves a still-vulnerable Jackson `3.1.4`), and builds and tests after each phase. When the LSP is active, notice that it locates callers and symbols precisely rather than grepping.
- Files reviewed: 15/21 changed files
- Comments generated: 1
- Review effort level: Balanced
| > [!NOTE] | ||
| > You'll start Copilot CLI with `--yolo`, which auto-approves every edit, command, and tool call so the work doesn't stop for permission on each step — useful once the `/fleet` build is running. That's appropriate here because a codespace is the kind of sandboxed, disposable container that [Module 1][m01] called out as the right home for YOLO mode. Treat it as the exception: on your own machine, or anywhere near real credentials or unreviewed code, start Copilot with plain `copilot` and approve actions deliberately. | ||
|
|
||
| 1. Return to your codespace. If you closed it, navigate to your repository on GitHub.com, select **Code** > **Codespaces**, then reopen your existing codespace. | ||
| 2. Open a terminal window by selecting <kbd>Ctrl</kbd> + <kbd>`</kbd>. | ||
| 3. Create and switch to a feature branch with `git switch -c feat/barcode-support`. | ||
| 4. Start Copilot CLI in YOLO mode from the repository root: | ||
|
|
||
| ```bash | ||
| copilot --yolo | ||
| ``` |
aaronpowell
left a comment
There was a problem hiding this comment.
Two fixes identified in the comments.
I'm a little unsure on is the terminology "AssetTrack" - is this a product or something that readers should be familiar with when they come to the section of the website?
| "sha": "c863074b673419603d146aab585e2986ef08deec" | ||
| }, | ||
| "github/gh-aw-actions/setup@v0.84.3": { | ||
| "github/gh-aw-actions/setup@v0.81.6": { |
There was a problem hiding this comment.
This is a downgrade of the AW action - can it be reverted.
|
|
||
| When doing standard development, the first step is often to fork or clone the repository you'll be contributing to. For our course, since you'll be working through the exercises on your own, you'll grab a separate copy of the project. You'll do this by creating a new instance of the repository by using a [template repository][github-template-docs] on your own personal GitHub account. | ||
|
|
||
| 1. In your browser, navigate to [https://github.com/geektrainer/legacy-app](https://github.com/geektrainer/legacy-app). |
There was a problem hiding this comment.
This link appears broken
Note
For human review — please do not auto-merge. This PR publishes a new Learning Hub course and its content-sync workflow into
github/awesome-copilot.Summary
Publishes the Advanced Copilot CLI course into the awesome-copilot Learning Hub, mirroring the established
copilot-workshops/cli-for-beginnersprecedent. Three parts: a content-sync agentic workflow, the seeded course mirror, and navigation wiring.1. Content-sync workflow (new)
Adds
.github/workflows/advanced-copilot-cli-sync.md(+ compiledadvanced-copilot-cli-sync.lock.yml) — a third sibling tocopilot-workshops-syncandcli-for-beginners-sync.workflow_dispatch; permissionscontents: read,copilot-requests: write.github-samples/advanced-copilot-cliand opens incremental PRs to keep the mirror aligned.safe-outputs.staged: truehas been removed (flip-to-live): the source repo is public, so real PRs are now allowed. PRs are labelledautomated-update, learning-hub, advanced-copilot-cliand are for human review (never auto-merged).gh aw compile(v0.81.6).2. Seeded mirror
Deterministically seeded from the pre-reviewed dry-run preview (already transformed: frontmatter, GitHub admonitions preserved, site-absolute image paths, trailing-slash internal links):
learning-hub/advanced-copilot-cli/index.md("choose your track").../multi-stack/index.md.../multi-stack/00-prerequisites.md…08-wrap-up.mdwebsite/public/images/learning-hub/advanced-copilot-cli/3. Navigation wiring
website/astro.config.mjs: new "Advanced Copilot CLI" sidebar group (with nested "Multi-stack (AssetTrack)" sub-group) placed after "Copilot Workshops", matching its exact style.website/src/content/docs/learning-hub/index.md: new course entry.Validation
gh aw compilesucceeded — lock file committed.npm run website:build(readme + marketplace + website data +astro build) passed; all 11 new pages render and every sidebar slug maps to a real file.