@jenga-ai/agent 1.3.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +97 -92
  2. package/agents/developer.md +9 -8
  3. package/agents/scrum-master.md +57 -23
  4. package/agents/tester.md +51 -5
  5. package/hooks/on_session_end.sh +13 -1
  6. package/lib/generate-agent-context.js +18 -1
  7. package/lib/generate-copilot-instructions.js +18 -1
  8. package/lib/generate-skill-allow-list.js +191 -0
  9. package/lib/skill-allow-list.json +43 -0
  10. package/package.json +18 -4
  11. package/scripts/apply-j-prefix.sh +230 -0
  12. package/scripts/consume-context-digest.sh +103 -0
  13. package/scripts/postinstall.js +25 -0
  14. package/scripts/sweep-stale-context-digests.sh +132 -0
  15. package/scripts/validate-board.sh +5 -0
  16. package/scripts/write-context-digest.sh +230 -0
  17. package/skills/brainstorm/SKILL.md +1 -1
  18. package/skills/btw/SKILL.md +1 -1
  19. package/skills/clearify/SKILL.md +1 -1
  20. package/skills/close-story/SKILL.md +78 -6
  21. package/skills/close-story/scripts/check-privatized.sh +345 -0
  22. package/skills/commit/SKILL.md +1 -1
  23. package/skills/continue/SKILL.md +1 -1
  24. package/skills/deep-dive/SKILL.md +1 -1
  25. package/skills/dev-done/SKILL.md +1 -1
  26. package/skills/distribute/SKILL.md +1 -1
  27. package/skills/do/SKILL.md +100 -10
  28. package/skills/doc/README.md +155 -0
  29. package/skills/doc/SKILL.md +43 -13
  30. package/skills/doc/authoring-notes.md +72 -0
  31. package/skills/doc/scripts/resolve_last_update.py +149 -0
  32. package/skills/doc-sync/SKILL.md +1 -1
  33. package/skills/dooo/SKILL.md +1 -1
  34. package/skills/error/SKILL.md +1 -1
  35. package/skills/evaluate/SKILL.md +1 -1
  36. package/skills/examplify/SKILL.md +1 -1
  37. package/skills/help/SKILL.md +1 -1
  38. package/skills/idea/SKILL.md +1 -1
  39. package/skills/improve/SKILL.md +1 -1
  40. package/skills/init/SKILL.md +1 -1
  41. package/skills/init/assets/scope-thresholds_template.json +3 -3
  42. package/skills/j-init/SKILL.md +168 -0
  43. package/skills/j-init/assets/.gitignore_template +15 -0
  44. package/skills/j-init/assets/PROJECT_SUMMARY_template.md +13 -0
  45. package/skills/j-init/assets/directory_structure.txt +14 -0
  46. package/skills/j-init/assets/scope-thresholds_template.json +7 -0
  47. package/skills/j-init/assets/strategy_stub_template.md +38 -0
  48. package/skills/j-init/assets/test-config_template.json +4 -0
  49. package/skills/j-init/assets/workflow_template.json +30 -0
  50. package/skills/j-init/scripts/apply-project-visibility.sh +176 -0
  51. package/skills/j-init/scripts/detect-existing-codebase.sh +166 -0
  52. package/skills/j-init/scripts/init.sh +116 -0
  53. package/skills/jbp/SKILL.md +1 -1
  54. package/skills/jenga/SKILL.md +1 -1
  55. package/skills/jenga/scripts/render-confirmation.sh +55 -18
  56. package/skills/jenga-permission-level/SKILL.md +1 -1
  57. package/skills/lgtm/SKILL.md +1 -1
  58. package/skills/pi-plan/SKILL.md +1 -1
  59. package/skills/proceed/SKILL.md +1 -1
  60. package/skills/publish/SKILL.md +1 -1
  61. package/skills/publish/adapters/npm-ci.md +26 -4
  62. package/skills/publish/scripts/npm_ci_pipeline.sh +21 -1
  63. package/skills/reconcile/SKILL.md +1 -1
  64. package/skills/reconcile-origin/SKILL.md +1 -1
  65. package/skills/redo/SKILL.md +1 -1
  66. package/skills/skillify/SKILL.md +1 -1
  67. package/skills/spinoff/SKILL.md +1 -1
  68. package/skills/status/SKILL.md +1 -1
  69. package/skills/todo/SKILL.md +40 -3
  70. package/skills/todo/scripts/add_trivial_task.sh +216 -0
  71. package/skills/todo/scripts/update_story_tasks.py +87 -0
  72. package/skills/uncharted/SKILL.md +1 -1
  73. package/skills/wtf/SKILL.md +1 -1
  74. package/templates/SCRUM_BOARD_SCHEMA.md +33 -2
  75. package/templates/agent-context.md.tpl +32 -9
  76. package/templates/copilot-instructions.md.tpl +25 -8
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Jenga AI
2
2
 
3
- **A structured multi-agent development workflow that works with any AI agent or AI-native IDE.** Three specialised AI agents — Scrum Master, Developer, and Tester — collaborate through a shared scrum board, an event-driven trigger queue, and 28 slash-command skills to take a project from idea to verified, committed code — across as many sessions as it takes.
3
+ > ⚠️ **Upgrading from a prior version?** Earlier releases could hit a command-collision bug: some host tools (e.g. GitHub Copilot) ship their own built-in `/init` command, which could silently shadow Jenga's own `/init` skill. This release adds **`/j-init`** — an identical, collision-safe copy of `/init` — so you always have a guaranteed-unshadowed way to scaffold a project. If `/init` isn't behaving as documented, run `/j-init` instead.
4
+
5
+ **A structured multi-agent development workflow that works with any AI agent or AI-native IDE.** Three specialised AI agents — Scrum Master, Developer, and Tester — collaborate through a shared scrum board, an event-driven trigger queue, and a coordinated pipeline of `j:`-prefixed skills that hand work between them — to take a project from idea to verified, committed code — across as many sessions as it takes.
4
6
 
5
7
  [![npm version](https://img.shields.io/npm/v/@jenga-ai/agent.svg)](https://www.npmjs.com/package/@jenga-ai/agent)
6
8
  [![license](https://img.shields.io/npm/l/@jenga-ai/agent.svg)](LICENSE)
@@ -9,14 +11,35 @@
9
11
  npm install @jenga-ai/agent
10
12
  ```
11
13
 
14
+ ## The Problem It Solves
15
+
16
+ Without a framework like Jenga AI, AI-assisted development has serious structural weaknesses:
17
+
18
+ [![How AI Coding Agents Understand Your Codebase & Developer Tools](https://img.youtube.com/vi/zAe-sau06io/maxresdefault.jpg)](https://www.youtube.com/watch?v=zAe-sau06io)
19
+
20
+ *"How AI Coding Agents Understand Your Codebase & Developer Tools" — IBM Technology on the same gap in session memory and tooling context that Jenga AI's board and agent contracts are built to close.*
21
+
22
+ | Problem | Reality |
23
+ |---|---|
24
+ | **AI has no session memory** | Every AI agent session starts from scratch — no awareness of open tasks, past decisions, or what was already tested |
25
+ | **No role separation** | The AI writes *and* "tests" code in the same context, leading to hallucinated test results and self-affirming bugs |
26
+ | **No structured planning** | Work happens ad-hoc — no Epic → Story → Task hierarchy to organise or track progress |
27
+ | **No handoff protocol** | Switching from implementing to testing means manually re-explaining context every time |
28
+ | **No audit trail** | You can't replay *why* something was built, by which agent, based on which task |
29
+ | **Sessions just end** | Work-in-progress, unresolved problems, and incomplete stories silently vanish |
30
+
31
+ Jenga AI solves each of these with structure: persistent board state, strict agent roles, typed inter-agent contracts, and session-end hooks that preserve context between sessions.
32
+
33
+ ---
34
+
12
35
  ## What You Get
13
36
 
14
37
  - **Three specialised agents** — Scrum Master, Developer, Tester — each with a distinct role and no self-graded work
15
38
  - **A persistent scrum board** — Epics, Stories, and Tasks tracked as Markdown files with structured frontmatter, surviving every session boundary
16
- - **28 slash-command skills** — from planning (`/pi-plan`, `/todo`) to execution (`/do`, `/dooo`) to review (`/status`, `/reconcile`)
39
+ - **A coordinated skill pipeline, not a command list** — planning skills (`j:pi-plan`, `j:todo`) hand off to execution skills (`j:do`, `j:dooo`), which hand off to review skills (`j:status`, `j:reconcile`), each stage reading and writing the same board state — the old bare `/<name>` form still works everywhere as a permanent alias
17
40
  - **An event-driven trigger queue** — async handoffs between agents with a full audit trail in `project/logs/events.json`
18
41
  - **Isolated git worktrees per task** — the Developer never works directly on your main branch
19
- - **Works with any AI agent or IDE** — Claude Code, GitHub Copilot, Warp, and Codex CLI are all supported today
42
+ - **Works with any AI agent or IDE** — Claude Code, GitHub Copilot, and Codex CLI are all supported today
20
43
 
21
44
  > 📖 **Full reference:** [project/.wiki/documentation.md](project/.wiki/documentation.md) | [Intro Guide](project/.wiki/intro-guide.md)
22
45
 
@@ -24,30 +47,13 @@ npm install @jenga-ai/agent
24
47
 
25
48
  | Agent | Skills & Agents | Root Context File |
26
49
  |---|---|---|
27
- | **Claude Code** | `.claude/` — mirrored automatically on install | `CLAUDE.md` — generated by `/init` today |
50
+ | **Claude Code** | `.claude/` — mirrored automatically on install | `CLAUDE.md` — generated by `j:init` today |
28
51
  | **GitHub Copilot** | `.agents/` — mirrored automatically on install | `.github/copilot-instructions.md` — bootstrapped at `npm install` time, refined by `jenga init` |
29
- | **Codex** | `.agents/` — mirrored automatically on install | `AGENTS.md` — generated by `/init` today |
52
+ | **Codex** | `.agents/` — mirrored automatically on install | `AGENTS.md` — generated by `j:init` today |
30
53
 
31
- `CLAUDE.md` and `AGENTS.md` are generated unconditionally by `/init` — every agent gets a real, populated root-level context file out of the box, not just a pointer. If either file already exists as a genuine pre-existing user file, Jenga writes its own copy as `J-CLAUDE.md` / `J-AGENTS.md` instead and inserts a short reference into the existing file, leaving it otherwise untouched.
54
+ `CLAUDE.md` and `AGENTS.md` are generated unconditionally by `j:init` — every agent gets a real, populated root-level context file out of the box, not just a pointer. If either file already exists as a genuine pre-existing user file, Jenga writes its own copy as `J-CLAUDE.md` / `J-AGENTS.md` instead and inserts a short reference into the existing file, leaving it otherwise untouched.
32
55
 
33
- `.github/copilot-instructions.md` follows a different path: `scripts/postinstall.js` writes it unconditionally and non-interactively the moment `npm install` finishes, so Copilot has working `/skill-name` routing instructions even if a consumer's very first action is a Copilot slash command, before the separate `jenga init` CLI wizard has ever run. Running `jenga init` afterward refines the same file using the user's actual chosen skills path — it is never generated by the `/init` skill itself.
34
-
35
- ---
36
-
37
- ## The Problem It Solves
38
-
39
- Without a framework like Jenga AI, AI-assisted development has serious structural weaknesses:
40
-
41
- | Problem | Reality |
42
- |---|---|
43
- | **AI has no session memory** | Every AI agent session starts from scratch — no awareness of open tasks, past decisions, or what was already tested |
44
- | **No role separation** | The AI writes *and* "tests" code in the same context, leading to hallucinated test results and self-affirming bugs |
45
- | **No structured planning** | Work happens ad-hoc — no Epic → Story → Task hierarchy to organise or track progress |
46
- | **No handoff protocol** | Switching from implementing to testing means manually re-explaining context every time |
47
- | **No audit trail** | You can't replay *why* something was built, by which agent, based on which task |
48
- | **Sessions just end** | Work-in-progress, unresolved problems, and incomplete stories silently vanish |
49
-
50
- Jenga AI solves each of these with structure: persistent board state, strict agent roles, typed inter-agent contracts, and session-end hooks that preserve context between sessions.
56
+ `.github/copilot-instructions.md` follows a different path: `scripts/postinstall.js` writes it unconditionally and non-interactively the moment `npm install` finishes, so Copilot has working `j:<name>` routing instructions (the bare `/<name>` form also still resolves, as a permanent alias) even if a consumer's very first action is a Copilot slash command, before the separate `jenga init` CLI wizard has ever run. Running `jenga init` afterward refines the same file using the user's actual chosen skills path — it is never generated by the `j:init` skill itself.
51
57
 
52
58
  ---
53
59
 
@@ -67,16 +73,16 @@ AI agent: "I don't have context from the previous session."
67
73
 
68
74
  **With Jenga AI:**
69
75
  ```
70
- /todo → "Add user authentication" → linked to E01_S02
71
- /do → Developer creates worktree E01_S02_T01-auth
72
- → implements, commits at milestones
73
- → hands off to Tester with sender object
76
+ j:todo → "Add user authentication" → linked to E01_S02
77
+ j:do → Developer creates worktree E01_S02_T01-auth
78
+ → implements, commits at milestones
79
+ → hands off to Tester with sender object
74
80
 
75
81
  Tester → runs tests, updates board status to ✅ Passed
76
82
  SessionEnd → writes status_review trigger to queue
77
83
 
78
84
  Next session:
79
- /status → "E01_S02 ✅ complete — E01_S03 pending"
85
+ j:status → "E01_S02 ✅ complete — E01_S03 pending"
80
86
  ```
81
87
 
82
88
  ---
@@ -87,35 +93,35 @@ Imagine you're building a REST API with auth, rate limiting, and an admin dashbo
87
93
 
88
94
  **Planning**
89
95
  ```
90
- /init → scaffolds project/, board/, workflow.json
91
- /pi-plan → Scrum Master helps shape the auth epic into stories
92
- /todo → "Add JWT auth" → E01_S01, "Add refresh tokens" → E01_S02
96
+ j:init → scaffolds project/, board/, workflow.json
97
+ j:pi-plan → Scrum Master helps shape the auth epic into stories
98
+ j:todo → "Add JWT auth" → E01_S01, "Add refresh tokens" → E01_S02
93
99
  ```
94
100
 
95
101
  **Implementation**
96
102
  ```
97
- /do → Developer picks up E01_S01_T01-jwt-middleware
103
+ j:do → Developer picks up E01_S01_T01-jwt-middleware
98
104
  → creates isolated worktree, implements, commits
99
105
  → Tester validates, marks Passed, triggers rollup
100
- /status → E01_S01 ✅, E01_S02 Pending
101
- /continue → picks up E01_S02 automatically
102
- /proceed → resumes project plan from current board state
106
+ j:status → E01_S01 ✅, E01_S02 Pending
107
+ j:continue → picks up E01_S02 automatically
108
+ j:proceed → resumes project plan from current board state
103
109
  ```
104
110
 
105
111
  **New idea mid-session**
106
112
  ```
107
113
  You: "Actually, let's also add API rate limiting while we're at it"
108
- /btw → captures "rate limiting" as E02 without losing E01 context
114
+ j:btw → captures "rate limiting" as E02 without losing E01 context
109
115
  → returns focus to E01_S02
110
- /spinoff → captures a diverging topic mid-conversation, saves as /todo
116
+ j:spinoff → captures a diverging topic mid-conversation, saves as j:todo
111
117
  → returns focus to primary thread
112
118
  ```
113
119
 
114
120
  **Parallel work**
115
121
  ```
116
- /jenga → interactive board orchestrator: pick or scope, confirm, then execute (`/jenga *` for the original fully automated, no-prompts run)
117
- /dooo → orchestrates E01_S02 and E02_S01 in parallel sub-agents
118
- /reconcile → syncs board with actual git history after parallel merges
122
+ j:jenga → interactive board orchestrator: pick or scope, confirm, then execute (`j:jenga *` for the original fully automated, no-prompts run)
123
+ j:dooo → orchestrates E01_S02 and E02_S01 in parallel sub-agents
124
+ j:reconcile → syncs board with actual git history after parallel merges
119
125
  ```
120
126
 
121
127
  The board, the audit log, and `PROJECT_SUMMARY.md` survive every session boundary. You never re-explain context.
@@ -125,8 +131,8 @@ The board, the audit log, and `PROJECT_SUMMARY.md` survive every session boundar
125
131
  ## How It Works
126
132
 
127
133
  ```
128
- /init → /pi-plan → /todo → /do
129
- │
134
+ j:init → j:pi-plan → j:todo → j:do
135
+ │
130
136
  Developer agent
131
137
  (isolated worktree, commits)
132
138
  │
@@ -167,7 +173,6 @@ Each agent is defined in `.agents/agents/`. They communicate exclusively through
167
173
  **Prerequisites:** An AI agent or AI-native IDE. Supported platforms include:
168
174
  - [Claude Code](https://docs.anthropic.com/en/docs/claude-code)
169
175
  - GitHub Copilot (VS Code extension or CLI)
170
- - [Warp](https://www.warp.dev/)
171
176
  - Codex CLI
172
177
 
173
178
  **Install from npm:**
@@ -178,12 +183,12 @@ npm install -g @jenga-ai/agent
178
183
  Or clone directly:
179
184
 
180
185
  1. **Clone or copy this repo** into your project's `.agents/` directory (or wherever you keep project tooling).
181
- 2. **Run `/init`** — scaffolds `project/`, creates `workflow.json`, `PROJECT_SUMMARY.md`, and makes an initial commit.
182
- 3. **Run `/pi-plan`** — define your project goals and initial epics.
183
- 4. **Run `/todo`** — describe features to implement; they're linked to the board automatically.
184
- 5. **Run `/do`** — picks the first task and drives the full implement → test → commit loop.
186
+ 2. **Run `j:init`** — scaffolds `project/`, creates `workflow.json`, `PROJECT_SUMMARY.md`, and makes an initial commit.
187
+ 3. **Run `j:pi-plan`** — define your project goals and initial epics.
188
+ 4. **Run `j:todo`** — describe features to implement; they're linked to the board automatically.
189
+ 5. **Run `j:do`** — picks the first task and drives the full implement → test → commit loop.
185
190
 
186
- Run `/status` at any time to see where the project stands.
191
+ Run `j:status` at any time to see where the project stands.
187
192
 
188
193
  ---
189
194
 
@@ -195,7 +200,6 @@ Jenga AI has been tested with:
195
200
  |---|---|
196
201
  | [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | AI coding agent |
197
202
  | [GitHub Copilot](https://github.com/features/copilot) | AI coding assistant |
198
- | [Warp](https://www.warp.dev/) | AI-native terminal |
199
203
  | Codex CLI | AI coding agent |
200
204
 
201
205
  The framework is platform-agnostic by design — any AI agent that can read Markdown files and execute slash commands can use it.
@@ -204,70 +208,70 @@ The framework is platform-agnostic by design — any AI agent that can read Mark
204
208
 
205
209
  ## Skills (Slash Commands)
206
210
 
207
- Skills live in `.agents/skills/<name>/SKILL.md`. Invoke with `/<name>` in your AI agent or IDE's command interface.
211
+ Skills live in `.agents/skills/<name>/SKILL.md`. Invoke with `j:<name>` in your AI agent or IDE's command interface — the old bare `/<name>` form also keeps working permanently as an alias.
208
212
 
209
213
  ### Setup & Planning
210
214
 
211
215
  | Command | Description |
212
216
  |---|---|
213
- | `/init` | Scaffold project directories, `workflow.json`, `PROJECT_SUMMARY.md`, initial git commit |
214
- | `/jbp` | Scaffold using the [JengaBasePlate](https://github.com/samwelmunga/JengaBasePlate.git) boilerplate |
215
- | `/jenga` | Interactive-by-default board orchestrator — bare shows a picker + confirmation tree, `<ids>` scopes and confirms, `*` runs fully automated with no prompts |
216
- | `/pi-plan` | Define or expand Epics in `PROJECT_SUMMARY.md` — use at start or when adding major new work |
217
- | `/brainstorm` | Focused planning session with the Scrum Master before committing anything to the board |
218
- | `/deep-dive` | Multi-phase investigation — gathers info, brainstorms, scrutinises, and produces a refined output |
219
- | `/uncharted` | Entry point for code with no board provenance — `segment` (a file or directory), `import` (an external source), `onboard` (a whole pre-existing codebase) |
220
- | `/todo` | Add missions to `project/todo.md` linked to epics and stories |
221
- | `/btw` | Capture a mid-flow idea, classify it into epic/story structure, implement now or defer |
222
- | `/spinoff` | Capture a diverging topic without losing your current thread |
217
+ | `j:init` | Scaffold project directories, `workflow.json`, `PROJECT_SUMMARY.md`, initial git commit |
218
+ | `j:jbp` | Scaffold using the [JengaBasePlate](https://github.com/samwelmunga/JengaBasePlate.git) boilerplate |
219
+ | `j:jenga` | Interactive-by-default board orchestrator — bare shows a picker + confirmation tree, `<ids>` scopes and confirms, `*` runs fully automated with no prompts |
220
+ | `j:pi-plan` | Define or expand Epics in `PROJECT_SUMMARY.md` — use at start or when adding major new work |
221
+ | `j:brainstorm` | Focused planning session with the Scrum Master before committing anything to the board |
222
+ | `j:deep-dive` | Multi-phase investigation — gathers info, brainstorms, scrutinises, and produces a refined output |
223
+ | `j:uncharted` | Entry point for code with no board provenance — `segment` (a file or directory), `import` (an external source), `onboard` (a whole pre-existing codebase) |
224
+ | `j:todo` | Add missions to `project/todo.md` linked to epics and stories |
225
+ | `j:btw` | Capture a mid-flow idea, classify it into epic/story structure, implement now or defer |
226
+ | `j:spinoff` | Capture a diverging topic without losing your current thread |
223
227
 
224
228
  ### Execution
225
229
 
226
230
  | Command | Description |
227
231
  |---|---|
228
- | `/do` | Execute tasks from the scrum board, drives the Developer agent through the full loop |
229
- | `/dooo` | Parallel execution orchestrator — runs multiple tasks simultaneously via sub-agents |
230
- | `/redo` | Rework a previous implementation by commit SHA or Epic/Story number |
231
- | `/publish` | Configure, validate, and orchestrate scaffolded release workflows — `setup`, `deploy`, `stage` (npm/npm-ci pre-approval staged publishing), `history`, `release-notes` |
232
- | `/error` | Guided troubleshooting — gathers context, investigates, and drives a fix |
233
- | `/train` | Scaffold and run ML training jobs (new job from template or run existing) |
232
+ | `j:do` | Execute tasks from the scrum board, drives the Developer agent through the full loop |
233
+ | `j:dooo` | Parallel execution orchestrator — runs multiple tasks simultaneously via sub-agents |
234
+ | `j:redo` | Rework a previous implementation by commit SHA or Epic/Story number |
235
+ | `j:publish` | Configure, validate, and orchestrate scaffolded release workflows — `setup`, `deploy`, `stage` (npm/npm-ci pre-approval staged publishing), `history`, `release-notes` |
236
+ | `j:error` | Guided troubleshooting — gathers context, investigates, and drives a fix |
237
+ | `j:train` | Scaffold and run ML training jobs (new job from template or run existing) |
234
238
 
235
239
  ### Status & Review
236
240
 
237
241
  | Command | Description |
238
242
  |---|---|
239
- | `/status` | Print a full scrum board overview — epics, stories, tasks, rapports, queue depth |
240
- | `/jenga-permission-level` | Report or switch the current session's 5-tier permission level (Locked/Guarded/Standard/Elevated/Unrestricted) without hand-editing settings.json |
241
- | `/continue` | Check project status and pick up the next incomplete item |
242
- | `/proceed` | Review progress and resume executing the project plan |
243
- | `/reconcile` | Sync the board with actual git history — fixes drift, merges orphaned worktrees |
244
- | `/reconcile-origin` | Sync the current or specified branch with origin via rebase. Presents conflict reports with resolution options. |
243
+ | `j:status` | Print a full scrum board overview — epics, stories, tasks, rapports, queue depth |
244
+ | `j:jenga-permission-level` | Report or switch the current session's 5-tier permission level (Locked/Guarded/Standard/Elevated/Unrestricted) without hand-editing settings.json |
245
+ | `j:continue` | Check project status and pick up the next incomplete item |
246
+ | `j:proceed` | Review progress and resume executing the project plan |
247
+ | `j:reconcile` | Sync the board with actual git history — fixes drift, merges orphaned worktrees |
248
+ | `j:reconcile-origin` | Sync the current or specified branch with origin via rebase. Presents conflict reports with resolution options. |
245
249
 
246
250
  ### Committing & Maintenance
247
251
 
248
252
  | Command | Description |
249
253
  |---|---|
250
- | `/commit` | Commit completed work using the EST naming convention |
251
- | `/lgtm` | Approve current work, commit, and continue — chains `/commit` + `/continue` |
252
- | `/distribute` | Propagate workflow changes to all registered consumer projects |
253
- | `/doc` | Generate or update a documentation file from codebase evidence |
254
- | `/doc-sync` | Compare project state with documentation and update stale docs |
255
- | `/skillify` | Refactor a skill — extract assets, offload scripts, clean up the body |
256
- | `/route` | Intelligently route a prompt to the best-matching skill |
257
- | `/improve` | Analyse a codebase and produce a structured improvement plan |
258
- | `/evaluate` | Analyse example files against a target goal and produce an evaluation rapport |
259
- | `/examplify` | Explain a concept, feature, or pattern with grounded examples |
260
- | `/help` | List all available skills with descriptions |
261
- | `/customize-cloud-agent` | Configure the Copilot cloud agent environment (`copilot-setup-steps.yml`, preinstalls, runners) |
254
+ | `j:commit` | Commit completed work using the EST naming convention |
255
+ | `j:lgtm` | Approve current work, commit, and continue — chains `j:commit` + `j:continue` |
256
+ | `j:distribute` | Propagate workflow changes to all registered consumer projects |
257
+ | `j:doc` | Generate or update a documentation file from codebase evidence |
258
+ | `j:doc-sync` | Compare project state with documentation and update stale docs |
259
+ | `j:skillify` | Refactor a skill — extract assets, offload scripts, clean up the body |
260
+ | `j:route` | Intelligently route a prompt to the best-matching skill |
261
+ | `j:improve` | Analyse a codebase and produce a structured improvement plan |
262
+ | `j:evaluate` | Analyse example files against a target goal and produce an evaluation rapport |
263
+ | `j:examplify` | Explain a concept, feature, or pattern with grounded examples |
264
+ | `j:help` | List all available skills with descriptions |
265
+ | `j:customize-cloud-agent` | Configure the Copilot cloud agent environment (`copilot-setup-steps.yml`, preinstalls, runners) |
262
266
 
263
267
  ---
264
268
 
265
269
  ## Distributing the Workflow
266
270
 
267
- Jenga AI can propagate its workflow files to other projects on your machine via `/distribute`.
271
+ Jenga AI can propagate its workflow files to other projects on your machine via `j:distribute`.
268
272
 
269
- 1. **Register consumer projects** — add each consuming project to `distribute.config.json` at the repo root (or pass a path directly: `/distribute /path/to/project`).
270
- 2. **Run `/distribute`** — choose `major`, `minor`, `patch`, or `amend` release type; the skill handles versioning, dry-run preview, file copy, and a version bump commit.
273
+ 1. **Register consumer projects** — add each consuming project to `distribute.config.json` at the repo root (or pass a path directly: `j:distribute /path/to/project`).
274
+ 2. **Run `j:distribute`** — choose `major`, `minor`, `patch`, or `amend` release type; the skill handles versioning, dry-run preview, file copy, and a version bump commit.
271
275
 
272
276
  Each consuming project holds a `jenga.config.json` tracking the distributed version, last distribution date, and source. To exclude specific files per consumer project, add a `.jenga_ignore` at the consumer root (never overwritten by distribute).
273
277
 
@@ -325,7 +329,7 @@ Each consuming project holds a `jenga.config.json` tracking the distributed vers
325
329
  ├── .jenga_paths ← Machine-local consumer paths (git-ignored)
326
330
  └── RELEASE_NOTE.md
327
331
 
328
- project/ ← Created by /init inside your software project
332
+ project/ ← Created by j:init inside your software project
329
333
  ├── board/
330
334
  │ ├── epics/ ← E##_<slug>.md
331
335
  │ ├── stories/ ← E##_S##_<slug>.md
@@ -350,7 +354,7 @@ project/ ← Created by /init inside your software project
350
354
  │ └── events.json ← Append-only inter-agent event log
351
355
  └── PROJECT_SUMMARY.md ← Project source of truth (owned by Scrum Master)
352
356
 
353
- CHANGELOG.md ← Created by /init at the project's repo root; maintained by /publish
357
+ CHANGELOG.md ← Created by j:init at the project's repo root; maintained by j:publish
354
358
  ```
355
359
 
356
360
  ---
@@ -369,12 +373,13 @@ Every inter-agent call passes a typed **sender object**:
369
373
  "epic_id": "<E##>",
370
374
  "date": "<ISO 8601 UTC>",
371
375
  "paths": ["<commit SHA>", "..."],
372
- "worktree": "<absolute path to worktree>"
376
+ "worktree": "<absolute path to worktree>",
377
+ "resolved_context": "<optional: path to a digest file under project/queue/context/>"
373
378
  }
374
379
  }
375
380
  ```
376
381
 
377
- All agents log every incoming sender object to `project/logs/events.json` as their **first action** on every invocation.
382
+ All agents log every incoming sender object to `project/logs/events.json` as their **first action** on every invocation. `resolved_context` is optional — a size-capped digest of what the sending agent already resolved (relevant schema fields, skill precedent, prior decisions), written via `scripts/write-context-digest.sh` so the receiving agent doesn't have to cold-re-read source docs its parent already navigated. It's a starting point, never a restriction — the receiver can still read full source files.
378
383
 
379
384
  ---
380
385
 
@@ -160,7 +160,7 @@ Commit at defined milestones within a task — not after every line, and not onl
160
160
 
161
161
  Write clear, descriptive commit messages. Your commit messages serve as a guide for the tester — they should communicate what changed and why, not just what files were touched.
162
162
 
163
- Use the `/commit` skill to commit.
163
+ Use the `j:commit` skill to commit.
164
164
 
165
165
  ### Crucial Tier: `advisory`
166
166
 
@@ -213,11 +213,11 @@ This list is fixed and verbatim across both this file and `agents/tester.md` —
213
213
 
214
214
  **Trigger.** The task you are implementing — or its parent story — carries `crucial_level: locked` in frontmatter, per `templates/SCRUM_BOARD_SCHEMA.md`'s "Crucial Flag Fields (Story, Task)" section.
215
215
 
216
- **Effect — forced inline scope.** `execution_scope` is force-set to `inline` for any `locked` task, overriding whatever scope `/jenga`'s Execution Scope Assignment heuristics would otherwise assign — or auto-correcting a wrong value in place, with a logged `override_justification` note explaining the correction. The concrete mechanism is `skills/jenga/SKILL.md` Phase 0.5's **Rule 4 — `crucial_level: locked` forces `execution_scope: inline`** (added by E39_S03_T03).
216
+ **Effect — forced inline scope.** `execution_scope` is force-set to `inline` for any `locked` task, overriding whatever scope `j:jenga`'s Execution Scope Assignment heuristics would otherwise assign — or auto-correcting a wrong value in place, with a logged `override_justification` note explaining the correction. The concrete mechanism is `skills/jenga/SKILL.md` Phase 0.5's **Rule 4 — `crucial_level: locked` forces `execution_scope: inline`** (added by E39_S03_T03).
217
217
 
218
- **Effect — dispatch-time rejection of backgrounding.** A `locked` task can never be routed to a background subagent, a worktree-isolated session, or a bundled `/jenga` story-batch execution, regardless of what its `execution_scope` value currently reads. This is enforced at two separate points, both added by E39_S03_T04: `skills/jenga/SKILL.md` Phase 3.5 step 5's **Guard: locked-task disqualifier (defense-in-depth)**, which disqualifies any story containing a `locked` task from the bundle path before dispatch, and `skills/do/SKILL.md` Section 4.2's **Locked-task dispatch guard (defense-in-depth)**, which forces the inline execution path (no worktree, no developer subagent) at the point of dispatch even if `execution_scope` somehow still reads something other than `inline`.
218
+ **Effect — dispatch-time rejection of backgrounding.** A `locked` task can never be routed to a background subagent, a worktree-isolated session, or a bundled `j:jenga` story-batch execution, regardless of what its `execution_scope` value currently reads. This is enforced at two separate points, both added by E39_S03_T04: `skills/jenga/SKILL.md` Phase 3.5 step 5's **Guard: locked-task disqualifier (defense-in-depth)**, which disqualifies any story containing a `locked` task from the bundle path before dispatch, and `skills/do/SKILL.md` Section 4.2's **Locked-task dispatch guard (defense-in-depth)**, which forces the inline execution path (no worktree, no developer subagent) at the point of dispatch even if `execution_scope` somehow still reads something other than `inline`.
219
219
 
220
- **No agent-discretion obligation.** Unlike `advisory` (a reporting-cadence habit you must remember to keep up) and `gated` (a confirmation you must actively pause and perform), `locked` requires no judgment call from you at all. It is fully enforced by pre-flight validation (Rule 4) and dispatch-time guards (the Phase 3.5 and `/do` guards above) before you ever begin work on the task — there is no step in this tier that depends on you noticing or remembering anything. Your only obligation is to recognize that a `locked` task will always run in the current foreground session, and to never manually route around that guarantee — for example, do not spin up your own background subagent or a separate worktree-isolated session to "help" with a `locked` task, even if it seems more efficient. If a locked task ever reaches you already running in a background or worktree-isolated context, treat that as a guard failure worth flagging (see Rapport System), not something to quietly work through.
220
+ **No agent-discretion obligation.** Unlike `advisory` (a reporting-cadence habit you must remember to keep up) and `gated` (a confirmation you must actively pause and perform), `locked` requires no judgment call from you at all. It is fully enforced by pre-flight validation (Rule 4) and dispatch-time guards (the Phase 3.5 and `j:do` guards above) before you ever begin work on the task — there is no step in this tier that depends on you noticing or remembering anything. Your only obligation is to recognize that a `locked` task will always run in the current foreground session, and to never manually route around that guarantee — for example, do not spin up your own background subagent or a separate worktree-isolated session to "help" with a `locked` task, even if it seems more efficient. If a locked task ever reaches you already running in a background or worktree-isolated context, treat that as a guard failure worth flagging (see Rapport System), not something to quietly work through.
221
221
 
222
222
  ---
223
223
 
@@ -225,7 +225,7 @@ This list is fixed and verbatim across both this file and `agents/tester.md` —
225
225
 
226
226
  You do not run tests. Before calling the tester agent, **write an execution summary** to `project/documentation/summaries/<E##_S##_T##>-summary.md` using `templates/EXECUTION_SUMMARY_TEMPLATE.md`. Fill in all sections — what was implemented, files changed, commit SHAs, acceptance criteria coverage, and any concerns for the tester. This step is mandatory before every tester invocation.
227
227
 
228
- When you reach a meaningful milestone within a task where verification is appropriate — or when the task is complete — call the tester agent. Always pass the following sender object when invoking the tester:
228
+ When you reach a meaningful milestone within a task where verification is appropriate — or when the task is complete — call the tester agent. Before invoking the tester, compose a short `resolved_context` digest of what you already resolved during implementation — which files you touched and why, which acceptance criteria map to which changes, any conventions or precedent you followed — and persist it by calling `scripts/write-context-digest.sh --agent developer --session-id <session_id> --task-id <task_id>` with that content (stays under the ~100-line/few-hundred-token cap defined in `templates/SCRUM_BOARD_SCHEMA.md`'s `resolved_context` subsection; the script rejects oversized input rather than truncating it). Place the script's returned path in the sender object's `resolved_context` field. Always pass the following sender object when invoking the tester:
229
229
 
230
230
  ```json
231
231
  {
@@ -237,12 +237,13 @@ When you reach a meaningful milestone within a task where verification is approp
237
237
  "epic_id": "<E##>",
238
238
  "date": "<ISO 8601 UTC timestamp>",
239
239
  "paths": ["<list of commit SHAs for this work>"],
240
- "worktree": "<absolute path to the worktree>"
240
+ "worktree": "<absolute path to the worktree>",
241
+ "resolved_context": "<path returned by scripts/write-context-digest.sh, or omit if no digest was written>"
241
242
  }
242
243
  }
243
244
  ```
244
245
 
245
- All fields must be present. In addition to the sender object, include a short plain-text implementation summary: what was implemented, which files changed, and any known edge cases or concerns. Reference the execution summary at `project/documentation/summaries/<E##_S##_T##>-summary.md` for full detail.
246
+ All fields must be present except `resolved_context`, which is optional. This digest is a starting point only, never a restriction: the tester may and should still read the full execution summary, the diff itself, or any other source file when the digest doesn't cover what it needs. In addition to the sender object, include a short plain-text implementation summary: what was implemented, which files changed, and any known edge cases or concerns. Reference the execution summary at `project/documentation/summaries/<E##_S##_T##>-summary.md` for full detail.
246
247
 
247
248
  Wait for the tester's response before continuing. If the tester returns `"failed"` or `"error"`, address the findings before proceeding.
248
249
 
@@ -289,7 +290,7 @@ See `templates/PROBLEM_RAPPORT_TEMPLATE.md` for the required format. Commit the
289
290
 
290
291
  ## Investigative Mode
291
292
 
292
- **Trigger.** You are sometimes dispatched not to implement a task, but purely to build understanding of existing code — e.g. by the scrum-master during `/uncharted`'s conversational architecture elicitation, when it needs to know what a named flow or target actually does before proposing graph nodes or asking the user to confirm/correct an understanding. This is a distinct dispatch mode from the standard Task Intake flow above, and it is recognized by the request itself (you are asked to *trace* or *investigate*, not to *implement*), not by any board field.
293
+ **Trigger.** You are sometimes dispatched not to implement a task, but purely to build understanding of existing code — e.g. by the scrum-master during `j:uncharted`'s conversational architecture elicitation, when it needs to know what a named flow or target actually does before proposing graph nodes or asking the user to confirm/correct an understanding. This is a distinct dispatch mode from the standard Task Intake flow above, and it is recognized by the request itself (you are asked to *trace* or *investigate*, not to *implement*), not by any board field.
293
294
 
294
295
  **Hard constraints.** Investigative Mode is strictly read-only:
295
296
  - No worktree is created for write purposes, no application code is written or modified, no dependency installs or generated artifacts.
@@ -63,7 +63,7 @@ This is the **very first thing** you do at the start of every session — before
63
63
 
64
64
  ## Drain Scrum Triggers Queue
65
65
 
66
- This is a self-contained procedure, not a session-start-only step. It may be invoked automatically at session start (see "Session Start — Queue Processing" below) **or** explicitly, mid-session, by another skill — for example `/jenga`'s Phase 4 loop, which runs as one long-lived scrum-master session and needs rollups to happen promptly after each wave of background agent completions rather than waiting for a future session start. Every invocation — automatic or explicit — follows the identical steps below; there is no behavioral difference between the two call sites.
66
+ This is a self-contained procedure, not a session-start-only step. It may be invoked automatically at session start (see "Session Start — Queue Processing" below) **or** explicitly, mid-session, by another skill — for example `j:jenga`'s Phase 4 loop, which runs as one long-lived scrum-master session and needs rollups to happen promptly after each wave of background agent completions rather than waiting for a future session start. Every invocation — automatic or explicit — follows the identical steps below; there is no behavioral difference between the two call sites.
67
67
 
68
68
  1. **Check `project/queue/scrum_triggers.jsonl`** — If the file exists and is non-empty, process each trigger in order:
69
69
  - `rapport_review`: Read each rapport file in `rapport_files` (skipping `*.IGNORE.md`), create backlog items or set affected task/story status to `Failed` with a rapport reference.
@@ -76,7 +76,7 @@ This is a self-contained procedure, not a session-start-only step. It may be inv
76
76
  6. **This is the only path** by which a mid-task agent request results in a `crucial_level` board write. Developer and tester never write `crucial_level`, `crucial_set_by`, or `crucial_note` directly to a board file themselves under any circumstance — they may only *request* the change via a `crucial_escalation` rapport, and the actual frontmatter write happens here, exclusively by scrum-master, closing the loop described in E39's Purpose section ("the actual frontmatter write still goes through scrum-master, never the subagent itself").
77
77
  - `status_review`: Review the scrum board for any tasks or stories whose status should be updated based on recent activity.
78
78
  - `story_rollup`: Check all tasks under the referenced story; if all are `Passed` or `Passed with remarks`, update the story status to `Passed` (or `Passed with remarks` if any remark exists). Then check epic rollup (see Rollup Logic).
79
- - `elicitation_resume`: A `/uncharted` conversational architecture elicitation session (`onboard`'s default flow, or `segment --mode investigate` — E20_S08_T03) ended mid-run without converging. Read `state_file` (`project/queue/elicitation-state/<elicitation_id>.json`, written by `skills/uncharted/scripts/elicitation-state.sh`) to see exactly where it left off — which nodes already converged, which are still pending or flagged, and any directory-triage/checkpoint data already confirmed — then resume the conversational flow documented in `skills/uncharted/SKILL.md`'s Multi-Session Persistence subsection from that point rather than restarting the elicitation from scratch. If the state file is missing or unreadable, report that to the user rather than silently starting a fresh elicitation under the same id.
79
+ - `elicitation_resume`: A `j:uncharted` conversational architecture elicitation session (`onboard`'s default flow, or `segment --mode investigate` — E20_S08_T03) ended mid-run without converging. Read `state_file` (`project/queue/elicitation-state/<elicitation_id>.json`, written by `skills/uncharted/scripts/elicitation-state.sh`) to see exactly where it left off — which nodes already converged, which are still pending or flagged, and any directory-triage/checkpoint data already confirmed — then resume the conversational flow documented in `skills/uncharted/SKILL.md`'s Multi-Session Persistence subsection from that point rather than restarting the elicitation from scratch. If the state file is missing or unreadable, report that to the user rather than silently starting a fresh elicitation under the same id.
80
80
  - After processing all triggers, **clear the file** by writing an empty file — do not leave processed triggers.
81
81
 
82
82
  2. **Check `project/queue/project_summary_updates.jsonl`** — If non-empty, review each proposed update and apply, revise, or reject it with a short note. Clear the file after processing.
@@ -197,6 +197,16 @@ Before writing each task file to `project/board/tasks/`, verify:
197
197
  4. `scope_rationale` is specific — not generic filler.
198
198
  5. If items 3 or 4 fail, change `execution_scope` to `task` and rewrite `scope_rationale` to reflect that fallback honestly.
199
199
 
200
+ ### Task-Folding Check
201
+
202
+ **Before creating a sibling task, verify it has independent work of its own.** This check is required before writing any task file to `project/board/tasks/`, in addition to the Breakdown Checklist above.
203
+
204
+ Ask: will this deliverable get done anyway as a side effect of an already-planned sibling task in the same story (e.g. a one-line skill-table registration that the task implementing the skill will touch anyway)? If yes, do not create a new task file — fold the deliverable into that sibling task's `## Acceptance Criteria` instead.
205
+
206
+ **Motivating example:** `E42_S04_T02` ("register `j:dev-done` in `CLAUDE.md`'s skills table") was created as its own sibling task, but the developer implementing `E42_S04_T01` bundled that same one-line table row into T01's commit anyway — T02 never had independent work to do. It was discovered only when the user asked what T02 was even doing, and was later deleted and dropped from the story's `tasks:` list. See `project/rapports/analysis/E42_S04-execution-overhead-postmortem.md`, Finding 4.
207
+
208
+ This check applies regardless of the sibling task's `execution_scope`.
209
+
200
210
  ---
201
211
 
202
212
  ## Execution Scope Assignment
@@ -213,6 +223,27 @@ Assign `inline` when **all** of the following are true:
213
223
 
214
224
  `needs_docs` for every `inline`-scoped task is always `false`.
215
225
 
226
+ ### `light` scope
227
+
228
+ `light` sits between `inline` and `task`: a single developer subagent pass with no worktree, self-verified via `scripts/smoke-harness.sh` in lieu of a separate tester invocation. If the smoke harness fails, execution falls back to `task` scope automatically at runtime — see `templates/SCRUM_BOARD_SCHEMA.md`'s Execution Scope Fields section for the full runtime contract.
229
+
230
+ Assign `light` when **any** of the following are true:
231
+ - The task exceeds `inline_max_files` or `inline_max_lines` (per `project/configs/scope-thresholds.json`), but remains a single, tightly-bounded change (one file, or a small handful of directly related files)
232
+ - The change is purely additive or config-level, like `inline`, but its estimated diff exceeds `inline_max_lines`
233
+ - The task introduces minor branching or a small conditional (not "non-trivial architecture" — that still requires `task`) that would otherwise disqualify it from `inline`, but the change is still self-contained enough to verify with a smoke-harness pass rather than a full tester cycle
234
+
235
+ **Distinguishing `light` from `inline`:** `light` is for changes too big or too branchy for `inline`'s caps (`inline_max_files`, `inline_max_lines`) — if the change fits within those caps with no logic branches, use `inline` instead.
236
+
237
+ **Distinguishing `light` from `task`:** assign `light`, not `task`, only when **all** of the following also hold:
238
+ - The task does **not** require worktree isolation — it can be implemented directly by a single developer subagent pass
239
+ - The task does **not** require independent tester verification — a `scripts/smoke-harness.sh` self-check is sufficient to catch regressions
240
+ - No shared-infrastructure contention exists (same contention concept as the `story` scope's mandatory contention check below — e.g. `package.json`, `settings.json`, `pyproject.toml`)
241
+ - The task has no cross-story dependencies and tester validation is not sensitive to the specific implementation approach chosen
242
+
243
+ If any of the `task`-scope triggers below apply (branching beyond "minor," shared infrastructure, cross-story dependencies, contention, or general uncertainty), do not assign `light` — use `task` instead.
244
+
245
+ **Fallback rule:** if the evidence for `light` isn't concrete — i.e. you cannot point to a specific reason the task exceeds `inline`'s caps while still being confidently worktree-free and tester-free — default to `task`, exactly as the general Fallback Rule above prescribes. Never assign `light` speculatively.
246
+
216
247
  ### `story` scope
217
248
 
218
249
  Assign `story` when **all** of the following are true:
@@ -339,12 +370,12 @@ When a request comes in:
339
370
  ### 3. Finalizing Items
340
371
  Once an item is sufficiently defined:
341
372
  - Use the appropriate command to register it on the scrum board:
342
- - `/todo` — add a new item
373
+ - `j:todo` — add a new item
343
374
  - `/amend` — update or refine an existing item
344
- - `/redo` — scrap and restart an item
375
+ - `j:redo` — scrap and restart an item
345
376
  - **Flag user-action prerequisites** — If the item requires the user to perform any action outside agent scope before or during implementation (e.g. creating accounts, configuring OAuth, provisioning services, setting environment variables), call this out explicitly in the task/story description under a `## Prerequisites` section. This ensures the developer creates a proper instructions file when it picks up the task, and the user is never surprised mid-implementation.
346
- - **Annotate documentation provenance when relevant** — When an epic, story, or task directly results in user-facing documentation updates, add an optional `docs` frontmatter field listing the affected documentation targets. This powers provenance tracking for the `/doc` skill.
347
- - **Purpose:** link board work to documentation files so `/doc` can resolve `last_update` frontmatter from real board history.
377
+ - **Annotate documentation provenance when relevant** — When an epic, story, or task directly results in user-facing documentation updates, add an optional `docs` frontmatter field listing the affected documentation targets. This powers provenance tracking for the `j:doc` skill.
378
+ - **Purpose:** link board work to documentation files so `j:doc` can resolve `last_update` frontmatter from real board history.
348
379
  - **When to add it:** use it when the item is expected to change docs such as `README.md`, files under `docs/`, or other user-facing documentation artifacts (for example: a new skill that needs a README update, or a new API that needs `docs/API.md`).
349
380
  - **How to populate it:** use repo-relative paths from the repository root, e.g. `docs: ["README.md", "docs/API.md"]`.
350
381
  - **Optionality:** do not add `docs` when no documentation target is directly affected; omitted `docs` is valid.
@@ -373,7 +404,7 @@ Before writing any new or amended story file to `project/board/stories/`, valida
373
404
  This gate applies to **all story creation and amendment operations** — no story file may be written to the board without passing all three checks.
374
405
 
375
406
  #### Triggering the Developer
376
- When board items are committed **and the user intends them for immediate implementation**, write a session handoff file to `project/queue/handoffs/scrum-master-<session_id>-<task_id>.json` — a unique path keyed by this session, not the old shared `project/queue/.session_handoff.json` slot, so that a session ending close to another agent's session can never clobber its handoff. Use the first entry of `task_ids` as `<task_id>` in the filename (or the literal string `batch` if `task_ids` is empty). `on_session_end.sh` forwards the work to the developer queue:
407
+ When board items are committed **and the user intends them for immediate implementation**, write a session handoff file to `project/queue/handoffs/scrum-master-<session_id>-<task_id>.json` — a unique path keyed by this session, not the old shared `project/queue/.session_handoff.json` slot, so that a session ending close to another agent's session can never clobber its handoff. Use the first entry of `task_ids` as `<task_id>` in the filename (or the literal string `batch` if `task_ids` is empty). Before writing the handoff, compose a short `resolved_context` digest of what was already resolved during breakdown for this task — which `templates/SCRUM_BOARD_SCHEMA.md` fields apply, which skill precedent governs, which epic/story-placement decisions were already made — and persist it by calling `scripts/write-context-digest.sh --agent scrum-master --session-id <session_id> --task-id <task_id>` with that content (stays under the ~100-line/few-hundred-token cap defined in `templates/SCRUM_BOARD_SCHEMA.md`'s `resolved_context` subsection; the script rejects oversized input rather than truncating it). Place the script's returned path in the handoff's `resolved_context` field. `on_session_end.sh` forwards the work to the developer queue:
377
408
 
378
409
  ```json
379
410
  {
@@ -383,10 +414,13 @@ When board items are committed **and the user intends them for immediate impleme
383
414
  "task_ids": ["<E##_S##_T##>", "..."],
384
415
  "story_id": "<E##_S##>",
385
416
  "epic_id": "<E##>",
417
+ "resolved_context": "<path returned by scripts/write-context-digest.sh, or omit if no digest was written>",
386
418
  "date": "<ISO 8601 UTC timestamp>"
387
419
  }
388
420
  ```
389
421
 
422
+ This digest is a starting point only, never a restriction: the developer may and should still read the full `templates/SCRUM_BOARD_SCHEMA.md`, relevant skill docs, or `CLAUDE.md` when the digest doesn't cover what it needs.
423
+
390
424
  If the user wants to defer implementation (e.g., brainstorming only, or items are backlogged for later), do **not** write the handoff file.
391
425
 
392
426
  ### 4. Definition of Done
@@ -407,7 +441,7 @@ If the user wants to defer implementation (e.g., brainstorming only, or items ar
407
441
 
408
442
  ## Brainstorm Mode
409
443
 
410
- When invoked via the `/brainstorm` skill, switch into **Brainstorm Mode**. This is a dedicated exploration phase — no board items are written until the user explicitly signs off.
444
+ When invoked via the `j:brainstorm` skill, switch into **Brainstorm Mode**. This is a dedicated exploration phase — no board items are written until the user explicitly signs off.
411
445
 
412
446
  In Brainstorm Mode, amplify the following behaviours:
413
447
 
@@ -454,28 +488,28 @@ Clarifications, follow-up details, and edge cases that serve the current story a
454
488
  When you detect a divergence, stop advancing the current thread and present the structured choice below. Use a calm, neutral tone — the goal is to keep the user in control, not to interrupt them:
455
489
 
456
490
  It looks like we're moving into a new topic. How would you like to handle it?
457
- 1. Capture the **new topic** as a `/todo` (I'll return to what we were working on)
458
- 2. Capture the **current topic** as a `/todo` (I'll continue with the new topic)
459
- 3. Capture **both** as `/todo` items (you choose which to continue first)
491
+ 1. Capture the **new topic** as a `j:todo` (I'll return to what we were working on)
492
+ 2. Capture the **current topic** as a `j:todo` (I'll continue with the new topic)
493
+ 3. Capture **both** as `j:todo` items (you choose which to continue first)
460
494
  4. Ignore it — tell me which topic to continue with
461
495
 
462
496
  ### Option A — Capture the Diverging Topic
463
- 1. Draft a `/todo` for the diverging topic. Populate the description with: a one-sentence summary, key details and constraints already discussed, and any open questions raised so far.
464
- 2. Before finalising, offer `/brainstorm` to fill in any missing **Prerequisites** (e.g. third-party accounts, environment setup, external approvals).
465
- 3. Once the `/todo` is saved, return to the primary story/epic context exactly where it was paused.
497
+ 1. Draft a `j:todo` for the diverging topic. Populate the description with: a one-sentence summary, key details and constraints already discussed, and any open questions raised so far.
498
+ 2. Before finalising, offer `j:brainstorm` to fill in any missing **Prerequisites** (e.g. third-party accounts, environment setup, external approvals).
499
+ 3. Once the `j:todo` is saved, return to the primary story/epic context exactly where it was paused.
466
500
 
467
501
  ### Option B — Capture the Primary Topic
468
- 1. Draft a `/todo` for the primary topic using the same context-surfacing approach: summary, details, open questions.
469
- 2. Offer `/brainstorm` to fill in missing Prerequisites before finalising.
470
- 3. Once the `/todo` is saved, pivot to the diverging topic.
502
+ 1. Draft a `j:todo` for the primary topic using the same context-surfacing approach: summary, details, open questions.
503
+ 2. Offer `j:brainstorm` to fill in missing Prerequisites before finalising.
504
+ 3. Once the `j:todo` is saved, pivot to the diverging topic.
471
505
 
472
506
  ### Option C — Capture Both
473
- 1. Create a `/todo` for the diverging topic (context summary + Prerequisites offer).
474
- 2. Create a `/todo` for the primary topic (context summary + Prerequisites offer).
507
+ 1. Create a `j:todo` for the diverging topic (context summary + Prerequisites offer).
508
+ 2. Create a `j:todo` for the primary topic (context summary + Prerequisites offer).
475
509
  3. Ask the user which topic to continue first.
476
510
 
477
511
  ### Context Surfacing
478
- Every `/todo` created through this flow must include in its description:
512
+ Every `j:todo` created through this flow must include in its description:
479
513
  - A one-sentence summary of the topic
480
514
  - Key details, constraints, or decisions already discussed
481
515
  - Open questions or unknowns raised so far
@@ -483,8 +517,8 @@ Every `/todo` created through this flow must include in its description:
483
517
  This is non-negotiable — it is the mechanism that prevents context loss.
484
518
 
485
519
  ### Edge Cases
486
- - **User declines both options (selects "Ignore it")**: Do not create any `/todo` items. Acknowledge briefly, then ask which topic to continue. Follow the user's direction without pressure.
487
- - **User wants to pursue both in parallel**: Treat as Option C — create both `/todo` items with full context summaries, then ask which to continue first.
520
+ - **User declines both options (selects "Ignore it")**: Do not create any `j:todo` items. Acknowledge briefly, then ask which topic to continue. Follow the user's direction without pressure.
521
+ - **User wants to pursue both in parallel**: Treat as Option C — create both `j:todo` items with full context summaries, then ask which to continue first.
488
522
  ---
489
523
 
490
524
  ## Mediator Mode
@@ -495,7 +529,7 @@ Activate Mediator Mode whenever the user is working on AI/ML model setup, traini
495
529
  - User asks which model architecture to use
496
530
  - User needs help choosing training hyperparameters or a framework
497
531
  - User wants to understand model evaluation results
498
- - User is about to run or configure a training job via the `/train` skill
532
+ - User is about to run or configure a training job via the `j:train` skill
499
533
 
500
534
  You do not need explicit instruction to enter Mediator Mode — detect the context and activate it automatically.
501
535