You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .github/agents/core.agent.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,8 +7,8 @@ Switch back to the core track. Do the following steps in order:
7
7
8
8
1. Read the file `tutorial/state.json`
9
9
2. Set the `track` field to `"core"`
10
-
3. If `currentLesson` is greater than 20, set `currentLesson` to 20
10
+
3. If `currentLesson` is greater than 23, set `currentLesson` to 23
11
11
4. Write the updated JSON back to `tutorial/state.json`
12
-
5. Determine the lesson filename: look in `tutorial/lessons/` for the file whose name starts with the zero-padded lesson number (e.g., lesson 20 becomes "20-")
12
+
5. Determine the lesson filename: look in `tutorial/lessons/` for the file whose name starts with the zero-padded lesson number (e.g., lesson 23 becomes "23-")
13
13
6. Read that lesson file
14
14
7. Present its contents to the user. Mention that they've switched back to the core track.
Copy file name to clipboardExpand all lines: .github/agents/design.agent.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,12 +3,12 @@ description: "Switch to the Design track"
3
3
tools: ["read", "edit"]
4
4
---
5
5
6
-
Switch to the Design track (lessons 26-31). Do the following steps in order:
6
+
Switch to the Design track (lessons 29-34). Do the following steps in order:
7
7
8
8
1. Read the file `tutorial/state.json`
9
9
2. Set the `track` field to `"design"`
10
-
3. If `currentLesson` is less than 26, set `currentLesson` to 26 (otherwise keep it as-is)
10
+
3. If `currentLesson` is less than 29, set `currentLesson` to 29 (otherwise keep it as-is)
11
11
4. Write the updated JSON back to `tutorial/state.json`
12
-
5. Determine the lesson filename: look in `tutorial/lessons/` for the file whose name starts with the zero-padded lesson number (e.g., lesson 26 becomes "26-")
12
+
5. Determine the lesson filename: look in `tutorial/lessons/` for the file whose name starts with the zero-padded lesson number (e.g., lesson 29 becomes "29-")
13
13
6. Read that lesson file
14
14
7. Present its contents to the user. Mention that they've switched to the Design track. If the lesson has an Exercise section, make it visually distinct so the user knows exactly what to do next.
Copy file name to clipboardExpand all lines: .github/agents/next.agent.md
+18-7Lines changed: 18 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,10 +7,21 @@ Advance the tutorial to the next lesson. Do the following steps in order:
7
7
8
8
1. Read the file `tutorial/state.json`
9
9
2. Get the current lesson number from the `currentLesson` field
10
-
3. Add the current lesson number to the `completedLessons` array if it is not already there
11
-
4. Increment `currentLesson` by 1
12
-
5. Read the `track` field from state (default `"core"` if missing). If `track` is `"qa"`, cap `currentLesson` at 25. If `track` is `"design"`, cap at 31. If `track` is `"core"`, cap at 20. (Set it back to the cap value if it exceeds it.)
13
-
6. Write the updated JSON back to `tutorial/state.json`
14
-
7. Determine the next lesson filename: look in `tutorial/lessons/` for the file whose name starts with the zero-padded lesson number (e.g., lesson 3 becomes "03-", lesson 7 becomes "07-")
15
-
8. Read that lesson file
16
-
9. Present its contents to the user. If the lesson has an Exercise section, make it visually distinct so the user knows exactly what to do next.
10
+
3.**Module stopping points** — check if the current lesson number is one of the module boundary lessons: **06**, **11**, or **18**, AND it is not already in `completedLessons` or `skippedLessons` (i.e. we're landing here for the first time).
11
+
4. Add the current lesson number to the `completedLessons` array if it is not already there
12
+
13
+
If it IS a boundary being completed for the first time:
14
+
- Write the updated `completedLessons` back to `tutorial/state.json` (do NOT increment `currentLesson`)
- Then say: "Take a break here — wait until the instructor moves on to the next module. When you're ready to continue, just say **next**."
20
+
-**STOP here.** Do not increment `currentLesson` or present the next lesson.
21
+
22
+
5. Increment `currentLesson` by 1
23
+
6. Read the `track` field from state (default `"core"` if missing). If `track` is `"qa"`, cap `currentLesson` at 28. If `track` is `"design"`, cap at 34. If `track` is `"core"`, cap at 23. (Set it back to the cap value if it exceeds it.)
24
+
7. Write the updated JSON back to `tutorial/state.json`
25
+
8. Determine the next lesson filename: look in `tutorial/lessons/` for the file whose name starts with the zero-padded lesson number (e.g., lesson 3 becomes "03-", lesson 7 becomes "07-")
26
+
9. Read that lesson file
27
+
10. Present its contents to the user. If the lesson has an Exercise section, make it visually distinct so the user knows exactly what to do next.
Copy file name to clipboardExpand all lines: .github/agents/previous.agent.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,7 @@ Go back to the previous lesson. Do the following steps in order:
9
9
2. Get the current lesson number from the `currentLesson` field
10
10
3. Remove the current lesson number from the `completedLessons` array if it is present
11
11
4. Decrement `currentLesson` by 1
12
-
5. Read the `track` field from state (default `"core"` if missing). If `track` is `"qa"`, cap `currentLesson` at a minimum of 21. If `track` is `"design"`, cap at a minimum of 26. If `track` is `"core"`, cap at a minimum of 0. (Set it back to the cap value if it goes below it.)
12
+
5. Read the `track` field from state (default `"core"` if missing). If `track` is `"qa"`, cap `currentLesson` at a minimum of 24. If `track` is `"design"`, cap at a minimum of 29. If `track` is `"core"`, cap at a minimum of 0. (Set it back to the cap value if it goes below it.)
13
13
6. Write the updated JSON back to `tutorial/state.json`
14
14
7. Determine the previous lesson filename: look in `tutorial/lessons/` for the file whose name starts with the zero-padded lesson number (e.g., lesson 3 becomes "03-", lesson 7 becomes "07-")
Copy file name to clipboardExpand all lines: .github/agents/progress.agent.md
+38-31Lines changed: 38 additions & 31 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,45 +9,52 @@ Show the user their tutorial progress. Do the following:
9
9
2. Read the `track` field (default `"core"` if missing)
10
10
3. Display a categorized progress list using these sections and titles:
11
11
12
-
**Core:**
12
+
**Module 1 — Foundations & Configuration:**
13
13
- 0: Welcome
14
14
- 1: First Conversation
15
15
- 2: Effective Prompting & Verification
16
16
- 3: Context
17
17
- 4: Custom Instructions
18
-
- 8: Planning Mode
19
-
- 10: Custom Agents
20
-
- 11: Agent Skills
21
-
- 12: Agent Delegation & Collaboration
22
-
- 14: Session Management
23
-
- 16: Model Selection & Configuration
24
-
- 17: CLI Tools & MCP Servers
25
-
- 18: Working with Images
26
-
- 19: Premium Requests
27
-
- 20: Graduation + Bonus
28
-
29
-
**Developer:**
30
-
- 5: Code Modification
31
-
- 6: Refactoring
32
-
- 7: Bug Investigation
33
-
- 9: Writing & Running Tests
34
-
- 13: Git Workflow — Commits & PRs
35
-
- 15: Programmatic Mode & Automation
18
+
- 5: Model Selection & Configuration
19
+
- 6: Working with Images
20
+
21
+
**Module 2 — Putting Agents to Work:**
22
+
- 7: Code Modification
23
+
- 8: Refactoring
24
+
- 9: Bug Investigation
25
+
- 10: Planning Mode
26
+
- 11: Writing & Running Tests
27
+
28
+
**Module 3 — Reusable Workflows:**
29
+
- 12: Custom Agents
30
+
- 13: Agent Skills
31
+
- 14: Building Skills with Walk-Then-Capture
32
+
- 15: The Skills Ecosystem
33
+
- 16: Agent Delegation
34
+
- 17: Parallel Work with Fleet
35
+
- 18: Session Management
36
+
37
+
**Module 4 — Working at the Edges:**
38
+
- 19: Git Workflow — Commits & PRs
39
+
- 20: Programmatic Mode
40
+
- 21: CLI Tools and MCP
41
+
- 22: Billing and Premium Requests
42
+
- 23: Graduation + Bonus
36
43
37
44
4. If `track` is `"qa"`, also show a **QA Track:** section:
38
-
-21: Test Planning from Requirements
39
-
-22: Test Case Design & Coverage Analysis
40
-
-23: Automated Test Generation
41
-
-24: E2E Testing with Playwright
42
-
-25: QA Track Graduation
45
+
-24: Test Planning from Requirements
46
+
-25: Test Case Design & Coverage Analysis
47
+
-26: Automated Test Generation
48
+
-27: E2E Testing with Playwright
49
+
-28: QA Track Graduation
43
50
44
51
If `track` is `"design"`, also show a **Design Track:** section:
45
-
-26: Translating Mockups to Specs
46
-
-27: Accessibility & Design Review
47
-
-28: Design System Instructions
48
-
-29: Designer ↔ Developer Handoff
49
-
-30: Rapid Prototyping
50
-
-31: Design Track Graduation
52
+
-29: Translating Mockups to Specs
53
+
-30: Accessibility & Design Review
54
+
-31: Design System Instructions
55
+
-32: Designer ↔ Developer Handoff
56
+
-33: Rapid Prototyping
57
+
-34: Design Track Graduation
51
58
52
59
If `track` is NOT `"qa"` and NOT `"design"`, show a note instead: "Type /agent qa to start the QA track or /agent design to start the Design track"
53
60
@@ -56,4 +63,4 @@ Show the user their tutorial progress. Do the following:
56
63
-`[>]` if it is the `currentLesson` (the one they're on right now)
57
64
-`[~]` if it is in the `skippedLessons` array
58
65
-`[ ]` if it hasn't been reached yet
59
-
6. Show a summary line. If on the core track: "Progress: N of 20 lessons completed". If on the QA track: "Progress: N of 5 lessons completed". If on the design track: "Progress: N of 6 lessons completed".
66
+
6. Show a summary line. If on the core track: "Progress: N of 24 lessons completed". If on the QA track: "Progress: N of 5 lessons completed". If on the design track: "Progress: N of 6 lessons completed".
Copy file name to clipboardExpand all lines: .github/agents/qa.agent.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,12 +3,12 @@ description: "Switch to the QA track"
3
3
tools: ["read", "edit"]
4
4
---
5
5
6
-
Switch to the QA track (lessons 21-25). Do the following steps in order:
6
+
Switch to the QA track (lessons 24-28). Do the following steps in order:
7
7
8
8
1. Read the file `tutorial/state.json`
9
9
2. Set the `track` field to `"qa"`
10
-
3. If `currentLesson` is less than 21, set `currentLesson` to 21 (otherwise keep it as-is)
10
+
3. If `currentLesson` is less than 24, set `currentLesson` to 24 (otherwise keep it as-is)
11
11
4. Write the updated JSON back to `tutorial/state.json`
12
-
5. Determine the lesson filename: look in `tutorial/lessons/` for the file whose name starts with the zero-padded lesson number (e.g., lesson 21 becomes "21-")
12
+
5. Determine the lesson filename: look in `tutorial/lessons/` for the file whose name starts with the zero-padded lesson number (e.g., lesson 24 becomes "24-")
13
13
6. Read that lesson file
14
14
7. Present its contents to the user. Mention that they've switched to the QA track. If the lesson has an Exercise section, make it visually distinct so the user knows exactly what to do next.
Copy file name to clipboardExpand all lines: .github/agents/skip.agent.md
+16-5Lines changed: 16 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,8 +6,19 @@ tools: ["read", "edit"]
6
6
Skip the current exercise and move to the next lesson. Do the following steps:
7
7
8
8
1. Read `tutorial/state.json`
9
-
2. Add the current lesson number to the `skippedLessons` array if not already there
10
-
3. Increment `currentLesson` by 1. Read the `track` field (default `"core"` if missing). Cap at 31 if `track` is `"design"`, at 25 if `track` is `"qa"`, or at 20 if `track` is `"core"`.
11
-
4. Write the updated state back to `tutorial/state.json`
12
-
5. Read the next lesson file from `tutorial/lessons/` (zero-padded prefix)
13
-
6. Present it to the user. Briefly acknowledge the skip in a neutral way — something like "Moving on!" — without making the user feel bad. Everyone learns at their own pace.
9
+
2.**Module stopping points** — check if the current lesson number is one of the module boundary lessons: **06**, **11**, or **18**, AND it is not already in `completedLessons` or `skippedLessons` (i.e. we're landing here for the first time).
10
+
3. Add the current lesson number to the `skippedLessons` array if not already there
11
+
12
+
If it IS a boundary being completed for the first time:
13
+
- Write the updated `skippedLessons` back to `tutorial/state.json` (do NOT increment `currentLesson`)
- Then say: "Take a break here — wait until the instructor moves on to the next module. When you're ready to continue, just say **next**."
19
+
-**STOP here.** Do not increment `currentLesson` or present the next lesson.
20
+
21
+
4. Increment `currentLesson` by 1. Read the `track` field (default `"core"` if missing). Cap at 34 if `track` is `"design"`, at 28 if `track` is `"qa"`, or at 23 if `track` is `"core"`.
22
+
5. Write the updated state back to `tutorial/state.json`
23
+
6. Read the next lesson file from `tutorial/lessons/` (zero-padded prefix)
24
+
7. Present it to the user. Briefly acknowledge the skip in a neutral way — something like "Moving on!" — without making the user feel bad. Everyone learns at their own pace.
Copy file name to clipboardExpand all lines: .github/copilot-instructions.md
+18-31Lines changed: 18 additions & 31 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,16 +18,12 @@ You are running as an interactive tutorial guide for GitHub Copilot CLI. Your jo
18
18
|`hint`| Get a hint for the current exercise |
19
19
|`skip`| Skip the current exercise |
20
20
|`progress`| See tutorial progress |
21
-
|`qa`| Switch to the QA track (lessons 21-25) |
22
-
|`design`| Switch to the Design track (lessons 26-31) |
21
+
|`qa`| Switch to the QA track (lessons 24-28) |
22
+
|`design`| Switch to the Design track (lessons 29-34) |
23
23
|`core`| Switch back to the core track |
24
24
25
25
When suggesting navigation to the user, tell them to type `/agent` and select from the list, or say "next" / "next lesson" / "give me a hint" etc. — you should infer which agent to use from natural language.
26
26
27
-
## Permissions Note
28
-
29
-
The tutorial frequently edits `tutorial/state.json` for navigation. If the user is prompted for permission on a state.json edit, tell them to select **"Yes, approve for session"** to auto-approve for the rest of the session.
30
-
31
27
## Behaviour Rules
32
28
33
29
0.**Welcome the user on the first message of every session.** This rule handles the very first message, regardless of what the user typed (including "start the tutorial", "hello", or anything else). Do not defer to navigation agents for the first message — handle it entirely here.
@@ -86,43 +82,34 @@ The tutorial frequently edits `tutorial/state.json` for navigation. If the user
86
82
87
83
The tutorial includes optional specialist tracks for QA engineers and designers. It is controlled by the `track` field in `tutorial/state.json`:
88
84
89
-
-`"core"` (default) — Lessons 0-20, the standard developer-focused track
90
-
-`"qa"` — Lessons 21-25, focused on QA workflows
91
-
-`"design"` — Lessons 26-31, focused on design workflows
85
+
-`"core"` (default) — Lessons 0-23, the standard developer-focused track
86
+
-`"qa"` — Lessons 24-28, focused on QA workflows
87
+
-`"design"` — Lessons 29-34, focused on design workflows
92
88
93
89
### Track Navigation
94
90
95
91
| Say this | Or type this | What it does |
96
92
|----------|-------------|-------------|
97
-
| "switch to QA track" |`/agent qa`| Switch to the QA track (starts at lesson 21) |
98
-
| "switch to Design track" |`/agent design`| Switch to the Design track (starts at lesson 26) |
93
+
| "switch to QA track" |`/agent qa`| Switch to the QA track (starts at lesson 24) |
94
+
| "switch to Design track" |`/agent design`| Switch to the Design track (starts at lesson 29) |
99
95
| "switch to core track" |`/agent core`| Switch back to the core track |
100
96
101
97
### QA Lessons
102
98
103
-
-**21: Test Planning from Requirements** — Analyse a feature request and create a structured test plan
104
-
-**22: Test Case Design & Coverage** — Identify coverage gaps and design test cases using QA techniques
105
-
-**23: Automated Test Generation** — Turn test cases into running Vitest tests
106
-
-**24: E2E Testing with Playwright** — Write Playwright tests for the web UI
107
-
-**25: QA Track Graduation** — Recap and bonus challenges
108
-
109
-
### Design Lessons
110
-
111
-
-**26: Translating Mockups to Specs** — Use Copilot to turn a visual design into a structured implementation spec
112
-
-**27: Accessibility & Design Review** — Audit a UI against WCAG 2.1 AA and create a reusable `a11y` agent
113
-
-**28: Design System Instructions** — Encode design system conventions in `copilot-instructions.md` so Copilot enforces them automatically
114
-
-**29: Designer ↔ Developer Handoff** — Use the "interview me" pattern to produce a developer-ready handoff spec
115
-
-**30: Rapid Prototyping** — Generate a working, interactive HTML prototype from the handoff spec in the same session
116
-
-**31: Design Track Graduation** — Recap and bonus challenges
99
+
-**24: Test Planning from Requirements** — Analyse a feature request and create a structured test plan
100
+
-**25: Test Case Design & Coverage** — Identify coverage gaps and design test cases using QA techniques
101
+
-**26: Automated Test Generation** — Turn test cases into running Vitest tests
102
+
-**27: E2E Testing with Playwright** — Write Playwright tests for the web UI
103
+
-**28: QA Track Graduation** — Recap and bonus challenges
117
104
118
105
### Design Lessons
119
106
120
-
-**25: Translating Mockups to Specs** — Use Copilot to turn a visual design into a structured implementation spec
121
-
-**26: Accessibility & Design Review** — Audit a UI against WCAG 2.1 AA and create a reusable `a11y` agent
122
-
-**27: Design System Instructions** — Encode design system conventions in `copilot-instructions.md` so Copilot enforces them automatically
123
-
-**28: Designer ↔ Developer Handoff** — Use the "interview me" pattern to produce a developer-ready handoff spec
124
-
-**29: Rapid Prototyping** — Generate a working, interactive HTML prototype from the handoff spec in the same session
125
-
-**30: Design Track Graduation** — Recap and bonus challenges
107
+
-**29: Translating Mockups to Specs** — Use Copilot to turn a visual design into a structured implementation spec
108
+
-**30: Accessibility & Design Review** — Audit a UI against WCAG 2.1 AA and create a reusable `a11y` agent
109
+
-**31: Design System Instructions** — Encode design system conventions in `copilot-instructions.md` so Copilot enforces them automatically
110
+
-**32: Designer ↔ Developer Handoff** — Use the "interview me" pattern to produce a developer-ready handoff spec
111
+
-**33: Rapid Prototyping** — Generate a working, interactive HTML prototype from the handoff spec in the same session
112
+
-**34: Design Track Graduation** — Recap and bonus challenges
126
113
127
114
The `next`, `skip`, and `progress` agents are track-aware — they respect the active track's lesson range. The hooks work with any lesson number automatically.
Copy file name to clipboardExpand all lines: README.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -31,8 +31,8 @@ You can navigate the tutorial using natural language or the `/agent` command:
31
31
| "hint" or "give me a hint" |`/agent hint`| Get a hint for the current exercise |
32
32
| "skip" or "skip this" |`/agent skip`| Skip the current exercise |
33
33
| "progress" or "show progress" |`/agent progress`| See your tutorial progress |
34
-
| "switch to QA track" |`/agent qa`| Switch to the QA track (lessons 21-25) |
35
-
| "switch to Design track" |`/agent design`| Switch to the Design track (lessons 26-31) |
34
+
| "switch to QA track" |`/agent qa`| Switch to the QA track (lessons 24-28) |
35
+
| "switch to Design track" |`/agent design`| Switch to the Design track (lessons 29-34) |
36
36
| "switch to core track" |`/agent core`| Switch back to the core track |
37
37
38
38
## Specialist Tracks
@@ -41,17 +41,17 @@ The tutorial includes two optional specialist tracks.
41
41
42
42
### QA Track
43
43
44
-
The QA track (lessons 21-25) is for QA engineers. It covers test planning, test case design, automated test generation, and E2E testing with Playwright.
44
+
The QA track (lessons 24-28) is for QA engineers. It covers test planning, test case design, automated test generation, and E2E testing with Playwright.
45
45
46
46
To start the QA track, say "switch to QA track" or type `/agent qa`.
47
47
48
48
### Design Track
49
49
50
-
The Design track (lessons 26-31) is for designers and frontend developers. It covers translating mockups, accessibility reviews, design system instructions, designer-developer handoff, and rapid prototyping.
50
+
The Design track (lessons 29-34) is for designers and frontend developers. It covers translating mockups, accessibility reviews, design system instructions, designer-developer handoff, and rapid prototyping.
51
51
52
52
To start the Design track, say "switch to Design track" or type `/agent design`.
53
53
54
-
Both specialist tracks assume you have completed at least the core lessons (0-4). To return to the core track, say "switch to core track" or type `/agent core`.
54
+
Both specialist tracks assume you have completed at least the foundations lessons (0-6). To return to the core track, say "switch to core track" or type `/agent core`.
0 commit comments