@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.
- package/README.md +97 -92
- package/agents/developer.md +9 -8
- package/agents/scrum-master.md +57 -23
- package/agents/tester.md +51 -5
- package/hooks/on_session_end.sh +13 -1
- package/lib/generate-agent-context.js +18 -1
- package/lib/generate-copilot-instructions.js +18 -1
- package/lib/generate-skill-allow-list.js +191 -0
- package/lib/skill-allow-list.json +43 -0
- package/package.json +18 -4
- package/scripts/apply-j-prefix.sh +230 -0
- package/scripts/consume-context-digest.sh +103 -0
- package/scripts/postinstall.js +25 -0
- package/scripts/sweep-stale-context-digests.sh +132 -0
- package/scripts/validate-board.sh +5 -0
- package/scripts/write-context-digest.sh +230 -0
- package/skills/brainstorm/SKILL.md +1 -1
- package/skills/btw/SKILL.md +1 -1
- package/skills/clearify/SKILL.md +1 -1
- package/skills/close-story/SKILL.md +78 -6
- package/skills/close-story/scripts/check-privatized.sh +345 -0
- package/skills/commit/SKILL.md +1 -1
- package/skills/continue/SKILL.md +1 -1
- package/skills/deep-dive/SKILL.md +1 -1
- package/skills/dev-done/SKILL.md +1 -1
- package/skills/distribute/SKILL.md +1 -1
- package/skills/do/SKILL.md +100 -10
- package/skills/doc/README.md +155 -0
- package/skills/doc/SKILL.md +43 -13
- package/skills/doc/authoring-notes.md +72 -0
- package/skills/doc/scripts/resolve_last_update.py +149 -0
- package/skills/doc-sync/SKILL.md +1 -1
- package/skills/dooo/SKILL.md +1 -1
- package/skills/error/SKILL.md +1 -1
- package/skills/evaluate/SKILL.md +1 -1
- package/skills/examplify/SKILL.md +1 -1
- package/skills/help/SKILL.md +1 -1
- package/skills/idea/SKILL.md +1 -1
- package/skills/improve/SKILL.md +1 -1
- package/skills/init/SKILL.md +1 -1
- package/skills/init/assets/scope-thresholds_template.json +3 -3
- package/skills/j-init/SKILL.md +168 -0
- package/skills/j-init/assets/.gitignore_template +15 -0
- package/skills/j-init/assets/PROJECT_SUMMARY_template.md +13 -0
- package/skills/j-init/assets/directory_structure.txt +14 -0
- package/skills/j-init/assets/scope-thresholds_template.json +7 -0
- package/skills/j-init/assets/strategy_stub_template.md +38 -0
- package/skills/j-init/assets/test-config_template.json +4 -0
- package/skills/j-init/assets/workflow_template.json +30 -0
- package/skills/j-init/scripts/apply-project-visibility.sh +176 -0
- package/skills/j-init/scripts/detect-existing-codebase.sh +166 -0
- package/skills/j-init/scripts/init.sh +116 -0
- package/skills/jbp/SKILL.md +1 -1
- package/skills/jenga/SKILL.md +1 -1
- package/skills/jenga/scripts/render-confirmation.sh +55 -18
- package/skills/jenga-permission-level/SKILL.md +1 -1
- package/skills/lgtm/SKILL.md +1 -1
- package/skills/pi-plan/SKILL.md +1 -1
- package/skills/proceed/SKILL.md +1 -1
- package/skills/publish/SKILL.md +1 -1
- package/skills/publish/adapters/npm-ci.md +26 -4
- package/skills/publish/scripts/npm_ci_pipeline.sh +21 -1
- package/skills/reconcile/SKILL.md +1 -1
- package/skills/reconcile-origin/SKILL.md +1 -1
- package/skills/redo/SKILL.md +1 -1
- package/skills/skillify/SKILL.md +1 -1
- package/skills/spinoff/SKILL.md +1 -1
- package/skills/status/SKILL.md +1 -1
- package/skills/todo/SKILL.md +40 -3
- package/skills/todo/scripts/add_trivial_task.sh +216 -0
- package/skills/todo/scripts/update_story_tasks.py +87 -0
- package/skills/uncharted/SKILL.md +1 -1
- package/skills/wtf/SKILL.md +1 -1
- package/templates/SCRUM_BOARD_SCHEMA.md +33 -2
- package/templates/agent-context.md.tpl +32 -9
- package/templates/copilot-instructions.md.tpl +25 -8
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Jenga AI
|
|
2
2
|
|
|
3
|
-
|
|
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
|
[](https://www.npmjs.com/package/@jenga-ai/agent)
|
|
6
8
|
[](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
|
+
[](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
|
-
- **
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
114
|
+
j:btw → captures "rate limiting" as E02 without losing E01 context
|
|
109
115
|
→ returns focus to E01_S02
|
|
110
|
-
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
|
|
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
|
|
182
|
-
3. **Run
|
|
183
|
-
4. **Run
|
|
184
|
-
5. **Run
|
|
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
|
|
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
|
|
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
|
-
|
|
|
214
|
-
|
|
|
215
|
-
|
|
|
216
|
-
|
|
|
217
|
-
|
|
|
218
|
-
|
|
|
219
|
-
|
|
|
220
|
-
|
|
|
221
|
-
|
|
|
222
|
-
|
|
|
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
|
-
|
|
|
229
|
-
|
|
|
230
|
-
|
|
|
231
|
-
|
|
|
232
|
-
|
|
|
233
|
-
|
|
|
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
|
-
|
|
|
240
|
-
|
|
|
241
|
-
|
|
|
242
|
-
|
|
|
243
|
-
|
|
|
244
|
-
|
|
|
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
|
-
|
|
|
251
|
-
|
|
|
252
|
-
|
|
|
253
|
-
|
|
|
254
|
-
|
|
|
255
|
-
|
|
|
256
|
-
|
|
|
257
|
-
|
|
|
258
|
-
|
|
|
259
|
-
|
|
|
260
|
-
|
|
|
261
|
-
|
|
|
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
|
|
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:
|
|
270
|
-
2. **Run
|
|
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
|
|
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
|
|
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
|
|
package/agents/developer.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
package/agents/scrum-master.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
-
|
|
373
|
+
- `j:todo` — add a new item
|
|
343
374
|
- `/amend` — update or refine an existing item
|
|
344
|
-
-
|
|
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
|
|
347
|
-
- **Purpose:** link board work to documentation files so
|
|
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
|
|
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
|
|
458
|
-
2. Capture the **current topic** as a
|
|
459
|
-
3. Capture **both** as
|
|
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
|
|
464
|
-
2. Before finalising, offer
|
|
465
|
-
3. Once the
|
|
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
|
|
469
|
-
2. Offer
|
|
470
|
-
3. Once the
|
|
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
|
|
474
|
-
2. Create a
|
|
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
|
|
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
|
|
487
|
-
- **User wants to pursue both in parallel**: Treat as Option C — create both
|
|
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
|
|
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
|
|