@jenga-ai/agent 2.0.0 → 3.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 +75 -243
- package/agents/developer.md +5 -5
- package/agents/scrum-master.md +23 -23
- package/agents/tester.md +5 -5
- package/lib/generate-skill-allow-list.js +9 -3
- package/lib/skill-allow-list.json +2 -3
- package/package.json +15 -25
- package/scripts/apply-j-prefix.sh +25 -12
- package/scripts/generate-j-alias.sh +333 -0
- package/skills/{brainstorm → j-brainstorm}/SKILL.md +9 -2
- package/skills/{btw → j-btw}/SKILL.md +9 -2
- package/skills/{clearify → j-clearify}/SKILL.md +9 -2
- package/skills/{close-story → j-close-story}/SKILL.md +17 -10
- package/skills/{close-story → j-close-story}/scripts/check-privatized.sh +2 -2
- package/skills/{close-story → j-close-story}/scripts/check-story-closeable.sh +1 -1
- package/skills/{close-story → j-close-story}/scripts/extract-task-diff-stats.sh +1 -1
- package/skills/{commit → j-commit}/SKILL.md +9 -2
- package/skills/j-continue/SKILL.md +36 -0
- package/skills/{deep-dive → j-deep-dive}/SKILL.md +9 -8
- package/skills/{dev-done → j-dev-done}/SKILL.md +11 -4
- package/skills/{dev-done → j-dev-done}/scripts/classify-commit-outcome.sh +4 -4
- package/skills/{distribute → j-distribute}/SKILL.md +17 -10
- package/skills/{distribute → j-distribute}/scripts/distribute-changes.sh +1 -1
- package/skills/{do → j-do}/SKILL.md +12 -5
- package/skills/{doc → j-doc}/README.md +5 -5
- package/skills/{doc → j-doc}/SKILL.md +15 -8
- package/skills/{doc → j-doc}/authoring-notes.md +1 -1
- package/skills/{doc-sync → j-doc-sync}/SKILL.md +9 -2
- package/skills/{dooo → j-dooo}/SKILL.md +9 -2
- package/skills/j-error/SKILL.md +36 -0
- package/skills/{evaluate → j-evaluate}/SKILL.md +9 -2
- package/skills/j-examplify/SKILL.md +49 -0
- package/skills/{help → j-help}/SKILL.md +9 -2
- package/skills/{idea → j-idea}/SKILL.md +10 -3
- package/skills/{idea → j-idea}/assets/idea_handoff_template.md +1 -1
- package/skills/{improve → j-improve}/SKILL.md +9 -2
- package/skills/j-init/SKILL.md +2 -2
- package/skills/j-jbp/SKILL.md +32 -0
- package/skills/j-lgtm/SKILL.md +28 -0
- package/skills/{pi-plan → j-pi-plan}/SKILL.md +10 -3
- package/skills/{proceed → j-proceed}/SKILL.md +9 -2
- package/skills/{publish → j-publish}/SKILL.md +47 -40
- package/skills/{publish → j-publish}/adapters/droplet.md +1 -1
- package/skills/{publish → j-publish}/adapters/mobile-ios.md +3 -3
- package/skills/{publish → j-publish}/adapters/npm-ci.md +3 -3
- package/skills/{publish → j-publish}/adapters/npm.md +8 -8
- package/skills/{publish → j-publish}/assets/ci-contract.md +2 -2
- package/skills/{publish → j-publish}/schemas/publish.schema.json +1 -1
- package/skills/{publish → j-publish}/scripts/npm_stage_inspect.sh +34 -1
- package/skills/{publish → j-publish}/scripts/npm_stage_pipeline.sh +9 -4
- package/skills/{publish → j-publish}/scripts/publish_deploy.sh +4 -4
- package/skills/{publish → j-publish}/scripts/validate_npm_stage_env.sh +1 -1
- package/skills/{publish → j-publish}/wizards/droplet.md +1 -1
- package/skills/{publish → j-publish}/wizards/mobile-ios.md +1 -1
- package/skills/{publish → j-publish}/wizards/npm-ci.md +1 -1
- package/skills/{publish → j-publish}/wizards/npm.md +1 -1
- package/skills/{reconcile → j-reconcile}/SKILL.md +12 -5
- package/skills/{reconcile → j-reconcile}/scripts/detect-unlinked-code.sh +2 -2
- package/skills/{reconcile → j-reconcile}/scripts/resolve-reconcile-scope.sh +3 -3
- package/skills/{reconcile-origin → j-reconcile-origin}/SKILL.md +13 -6
- package/skills/{redo → j-redo}/SKILL.md +9 -2
- package/skills/{skillify → j-skillify}/SKILL.md +10 -3
- package/skills/{spinoff → j-spinoff}/SKILL.md +9 -2
- package/skills/{status → j-status}/SKILL.md +9 -2
- package/skills/{todo → j-todo}/SKILL.md +10 -3
- package/skills/{todo → j-todo}/assets/todo_handoff_template.md +1 -1
- package/skills/{todo → j-todo}/scripts/add_trivial_task.sh +3 -3
- package/skills/{todo → j-todo}/scripts/update_story_tasks.py +2 -2
- package/skills/{uncharted → j-uncharted}/SKILL.md +35 -28
- package/skills/{uncharted → j-uncharted}/assets/UNDERSTANDING_DOC_TEMPLATE.md +2 -2
- package/skills/{uncharted → j-uncharted}/scripts/detect-dependencies.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/detect-tests.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/directory-triage.sh +3 -3
- package/skills/{uncharted → j-uncharted}/scripts/elicitation-state.sh +3 -3
- package/skills/{uncharted → j-uncharted}/scripts/enumerate-target.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/import-source.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/inspect-provenance.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/resolve-segment-target.sh +5 -5
- package/skills/{uncharted → j-uncharted}/scripts/run-engine.sh +1 -1
- package/skills/{uncharted → j-uncharted}/scripts/validate-proposed-items.sh +2 -2
- package/skills/{uncharted → j-uncharted}/scripts/write-backfilled-epics.sh +1 -1
- package/skills/j-wtf/SKILL.md +27 -0
- package/skills/jenga/SKILL.md +1 -1
- package/skills/jenga-permission-level/SKILL.md +1 -1
- package/templates/SCRUM_BOARD_SCHEMA.md +1 -1
- package/templates/agent-context.md.tpl +10 -10
- package/templates/copilot-instructions.md.tpl +57 -19
- package/skills/continue/SKILL.md +0 -29
- package/skills/error/SKILL.md +0 -29
- package/skills/examplify/SKILL.md +0 -42
- package/skills/init/SKILL.md +0 -155
- package/skills/init/assets/scope-thresholds_template.json +0 -7
- package/skills/init/assets/strategy_stub_template.md +0 -38
- package/skills/init/assets/workflow_template.json +0 -30
- package/skills/init/scripts/apply-project-visibility.sh +0 -176
- package/skills/init/scripts/detect-existing-codebase.sh +0 -166
- package/skills/init/scripts/init.sh +0 -116
- package/skills/jbp/SKILL.md +0 -25
- package/skills/lgtm/SKILL.md +0 -21
- package/skills/skillify/assets/init-new/assets/.gitignore_template +0 -15
- package/skills/skillify/assets/init-new/assets/PROJECT_SUMMARY_template.md +0 -13
- package/skills/skillify/assets/init-new/assets/directory_structure.txt +0 -14
- package/skills/skillify/assets/init-new/assets/test-config_template.json +0 -4
- package/skills/wtf/SKILL.md +0 -20
- /package/skills/{close-story → j-close-story}/scripts/compute-scope-divergence.sh +0 -0
- /package/skills/{close-story → j-close-story}/scripts/extract-diff-stats.sh +0 -0
- /package/skills/{close-story → j-close-story}/scripts/update-task-frontmatter.sh +0 -0
- /package/skills/{commit → j-commit}/assets/user_instructions_template.md +0 -0
- /package/skills/{distribute → j-distribute}/CONFIG_SCHEMA.md +0 -0
- /package/skills/{distribute → j-distribute}/scripts/check-version.sh +0 -0
- /package/skills/{distribute → j-distribute}/scripts/commit-version-bump.sh +0 -0
- /package/skills/{do → j-do}/assets/intent-vs-diff-prompt.md +0 -0
- /package/skills/{do → j-do}/assets/sender_template.json +0 -0
- /package/skills/{doc → j-doc}/assets/path-objectives.yaml +0 -0
- /package/skills/{doc → j-doc}/scripts/resolve_last_update.py +0 -0
- /package/skills/{doc-sync → j-doc-sync}/assets/default_excludes.txt +0 -0
- /package/skills/{doc-sync → j-doc-sync}/assets/doc_targets.md +0 -0
- /package/skills/{evaluate → j-evaluate}/assets/evaluation_invokation_template.yml +0 -0
- /package/skills/{evaluate → j-evaluate}/assets/evaluation_rapport_template.md +0 -0
- /package/skills/{idea → j-idea}/assets/idea_template.md +0 -0
- /package/skills/{pi-plan → j-pi-plan}/assets/epic.json +0 -0
- /package/skills/{pi-plan → j-pi-plan}/assets/story_template.md +0 -0
- /package/skills/{publish → j-publish}/assets/ExportOptions.plist.template +0 -0
- /package/skills/{publish → j-publish}/assets/ownership-matrix.md +0 -0
- /package/skills/{publish → j-publish}/assets/publish.example.json +0 -0
- /package/skills/{publish → j-publish}/assets/publish.example.npm-ci.json +0 -0
- /package/skills/{publish → j-publish}/assets/publish.example.npm.json +0 -0
- /package/skills/{publish → j-publish}/assets/secrets-guide.md +0 -0
- /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-minimal.json +0 -0
- /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-with-empty-secrets.json +0 -0
- /package/skills/{publish → j-publish}/schemas/fixtures/npm-ci-with-workflow-path.json +0 -0
- /package/skills/{publish → j-publish}/scripts/check_target_config.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/droplet_pipeline.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/finalize_changelog.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/generate_release_notes.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/ios_pipeline.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/npm_ci_pipeline.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/npm_pipeline.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/publish_common.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/reconcile_tags.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/run_gates.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/setup_wizard.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/show_history.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/suggest_semver_bump.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_config.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_droplet_env.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_ios_env.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_npm_ci_env.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/validate_npm_env.sh +0 -0
- /package/skills/{publish → j-publish}/scripts/write_ledger_entry.sh +0 -0
- /package/skills/{reconcile → j-reconcile}/assets/report_format.md +0 -0
- /package/skills/{reconcile-origin → j-reconcile-origin}/scripts/reconcile-origin.sh +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/SKILL.md +0 -0
- /package/skills/{init → j-skillify/assets/init-new}/assets/.gitignore_template +0 -0
- /package/skills/{init → j-skillify/assets/init-new}/assets/PROJECT_SUMMARY_template.md +0 -0
- /package/skills/{init → j-skillify/assets/init-new}/assets/directory_structure.txt +0 -0
- /package/skills/{init → j-skillify/assets/init-new}/assets/test-config_template.json +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/assets/workflow_template.json +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-new/scripts/init.sh +0 -0
- /package/skills/{skillify → j-skillify}/assets/init-old/SKILL.md +0 -0
- /package/skills/{status → j-status}/assets/output_format.md +0 -0
- /package/skills/{todo → j-todo}/assets/todo_template.md +0 -0
- /package/skills/{uncharted → j-uncharted}/assets/SEGMENT_PROPOSAL_TEMPLATE.md +0 -0
- /package/skills/{uncharted → j-uncharted}/scripts/apply-subsystem-cap.sh +0 -0
- /package/skills/{uncharted → j-uncharted}/scripts/discover-subsystems.sh +0 -0
package/README.md
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# Jenga AI
|
|
2
|
+
### No agent merges its own code.
|
|
2
3
|
|
|
3
|
-
|
|
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
|
+
Jenga AI is an agentic software engineering framework for AI-assisted development: it splits work across three role-bounded agents — a Scrum Master that plans, a Developer that implements in an isolated git worktree, and a Tester that runs your test suite and owns the board status. Work survives session boundaries as Epics, Stories, and Tasks on a Markdown board your agent reads at the start of every session.
|
|
6
5
|
|
|
7
6
|
[](https://www.npmjs.com/package/@jenga-ai/agent)
|
|
8
7
|
[](LICENSE)
|
|
@@ -13,125 +12,107 @@ npm install @jenga-ai/agent
|
|
|
13
12
|
|
|
14
13
|
## The Problem It Solves
|
|
15
14
|
|
|
16
|
-
Without a framework like Jenga AI, AI-assisted development has serious structural weaknesses:
|
|
15
|
+
You've had this happen: Claude wrote the feature, said it worked, and the session ended. Next session it had no idea any of it existed. Without a framework like Jenga AI, AI-assisted development has serious structural weaknesses:
|
|
17
16
|
|
|
18
17
|
[](https://www.youtube.com/watch?v=zAe-sau06io)
|
|
19
18
|
|
|
20
|
-
*"How AI Coding Agents Understand Your Codebase & Developer Tools" — IBM Technology on the same gap in
|
|
19
|
+
*"How AI Coding Agents Understand Your Codebase & Developer Tools" — IBM Technology on the same gap in persistent development context and tooling context that Jenga AI's board and agent contracts are built to close.*
|
|
21
20
|
|
|
22
21
|
| Problem | Reality |
|
|
23
22
|
|---|---|
|
|
24
|
-
| **
|
|
23
|
+
| **No persistent engineering context** | Every AI agent session starts from scratch — no awareness of open tasks, past decisions, or what was already tested |
|
|
25
24
|
| **No role separation** | The AI writes *and* "tests" code in the same context, leading to hallucinated test results and self-affirming bugs |
|
|
26
25
|
| **No structured planning** | Work happens ad-hoc — no Epic → Story → Task hierarchy to organise or track progress |
|
|
27
26
|
| **No handoff protocol** | Switching from implementing to testing means manually re-explaining context every time |
|
|
28
27
|
| **No audit trail** | You can't replay *why* something was built, by which agent, based on which task |
|
|
29
28
|
| **Sessions just end** | Work-in-progress, unresolved problems, and incomplete stories silently vanish |
|
|
30
29
|
|
|
31
|
-
Jenga AI solves each of these with structure: persistent board state, strict agent roles, typed inter-agent contracts, and session-end hooks that
|
|
30
|
+
Jenga AI solves each of these with structure: persistent engineering context maintained via board state, strict agent roles, typed inter-agent contracts, and session-end hooks that carry that context between sessions.
|
|
32
31
|
|
|
33
32
|
---
|
|
34
33
|
|
|
35
34
|
## What You Get
|
|
36
35
|
|
|
37
36
|
- **Three specialised agents** — Scrum Master, Developer, Tester — each with a distinct role and no self-graded work
|
|
38
|
-
- **A persistent scrum board** — Epics, Stories, and Tasks tracked as Markdown files with structured frontmatter, surviving every session boundary
|
|
39
|
-
- **A coordinated skill pipeline, not a command list** — planning skills (`j
|
|
37
|
+
- **A persistent, Kanban-style scrum board** — Epics, Stories, and Tasks tracked as Markdown files with structured frontmatter, surviving every session boundary
|
|
38
|
+
- **A coordinated skill pipeline — one agentic workflow, 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
|
|
40
39
|
- **An event-driven trigger queue** — async handoffs between agents with a full audit trail in `project/logs/events.json`
|
|
41
40
|
- **Isolated git worktrees per task** — the Developer never works directly on your main branch
|
|
42
|
-
- **Works with any AI agent or IDE** — Claude Code, GitHub Copilot, and Codex CLI are all supported today
|
|
41
|
+
- **Works with any AI coding agent or AI-native IDE** — Claude Code, GitHub Copilot, and Codex CLI are all supported today
|
|
43
42
|
|
|
44
43
|
> 📖 **Full reference:** [project/.wiki/documentation.md](project/.wiki/documentation.md) | [Intro Guide](project/.wiki/intro-guide.md)
|
|
45
44
|
|
|
45
|
+
### "Isn't this just an LLM grading another LLM?"
|
|
46
|
+
|
|
47
|
+
The Tester doesn't read your code and form an opinion about it. It executes the test suite you configure in `project/configs/test-config.json` and reports pass or fail — in this repo, `bats` for unit and integration, `shellcheck` for SAST. What Jenga guarantees structurally is that the agent that wrote the code is not the agent that decides it's done, and doesn't get to write its own status onto the board. What comes out of that gate depends on what you wire into it — the same as any CI pipeline.
|
|
48
|
+
|
|
46
49
|
## Platform Support
|
|
47
50
|
|
|
48
51
|
| Agent | Skills & Agents | Root Context File |
|
|
49
52
|
|---|---|---|
|
|
50
|
-
| **Claude Code** | `.claude/` — mirrored automatically on install | `CLAUDE.md` — generated by `j
|
|
53
|
+
| **Claude Code** | `.claude/` — mirrored automatically on install | `CLAUDE.md` — generated by `j.init` today |
|
|
51
54
|
| **GitHub Copilot** | `.agents/` — mirrored automatically on install | `.github/copilot-instructions.md` — bootstrapped at `npm install` time, refined by `jenga init` |
|
|
52
|
-
| **Codex** | `.agents/` — mirrored automatically on install | `AGENTS.md` — generated by `j
|
|
55
|
+
| **Codex** | `.agents/` — mirrored automatically on install | `AGENTS.md` — generated by `j.init` today |
|
|
53
56
|
|
|
54
|
-
`CLAUDE.md` and `AGENTS.md` are generated unconditionally by `j
|
|
57
|
+
`CLAUDE.md` and `AGENTS.md` are generated unconditionally by `j.init` — every agent gets a real, populated root-level context file, not just a pointer. If either file already exists as a genuine pre-existing user file, Jenga leaves it untouched, writes its own copy as `J-CLAUDE.md` / `J-AGENTS.md`, and inserts a short reference line into the original.
|
|
55
58
|
|
|
56
|
-
`.github/copilot-instructions.md` follows a different path: `scripts/postinstall.js
|
|
59
|
+
`.github/copilot-instructions.md` follows a different path, because Copilot needs it before `j.init` may ever run: `npm install` triggers `scripts/postinstall.js`, which writes it unconditionally and non-interactively, so `j.<name>` routing (the bare `/<name>` form still resolves too, as a permanent alias) works from a consumer's very first Copilot command. A later `jenga init` run refines that same file using the project's actual chosen skills path.
|
|
57
60
|
|
|
58
61
|
---
|
|
59
62
|
|
|
60
63
|
## Examples
|
|
61
64
|
|
|
62
|
-
###
|
|
65
|
+
### A Real Session, On This Repo
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
You: "Add user authentication"
|
|
67
|
-
AI agent: [writes auth code, declares it works, session ends]
|
|
67
|
+
Not a demo — this is what actually produced the section you're reading.
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
You: "What's the status of auth?"
|
|
71
|
-
AI agent: "I don't have context from the previous session."
|
|
72
|
-
```
|
|
69
|
+
The conversation starts with a request to align this README's language and content with a positioning plan drafted for this epic (E41):
|
|
73
70
|
|
|
74
|
-
**With Jenga AI:**
|
|
75
71
|
```
|
|
76
|
-
j:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
72
|
+
j.improve E41: I want to make some adjustments to the README in both
|
|
73
|
+
language as well as content to better match [the E41 positioning plan]
|
|
74
|
+
[...]
|
|
75
|
+
```
|
|
80
76
|
|
|
81
|
-
|
|
82
|
-
SessionEnd → writes status_review trigger to queue
|
|
77
|
+
That plan already existed, so the copy gets edited directly — no need to re-run a fresh analysis pass just to re-derive it. A few edits later, ten more issues surface, one with an `j.brainstorm` request attached:
|
|
83
78
|
|
|
84
|
-
|
|
85
|
-
j
|
|
79
|
+
```
|
|
80
|
+
Then do a j.todo on this, as there are more places that should be
|
|
81
|
+
edited based on that scrutiny rapport:
|
|
82
|
+
* Remove warning banner about Copilot conflict
|
|
83
|
+
[...]
|
|
84
|
+
* Fewer, better and more relatable examples, we should
|
|
85
|
+
j.brainstorm this so I can send examples from real world usecases
|
|
86
|
+
[...]
|
|
87
|
+
* Should we really display the entire Skill list here?
|
|
88
|
+
[...]
|
|
86
89
|
```
|
|
87
90
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
### Real-World Scenario: Building a Feature Across Sessions
|
|
91
|
+
`j.todo` classifies the ten items into two stories: nine mechanical README fixes (`E41_S10`), and the Examples section you're reading right now (`E41_S11`) — carved out and held back specifically because of that `j.brainstorm` request, since a real example had to come from the user, not be invented.
|
|
91
92
|
|
|
92
|
-
|
|
93
|
+
Once `E41_S10` is on the board, it's picked to run first. The Scrum Master reads the story and decomposes it into seven tasks, executed through `j.do`. Five are small, single-file text fixes deemed `--trivial` — they run inline, smoke-tested and committed directly, no worktree needed. Two need an editorial call — one of them being which skills are "foundational" enough to stay inline — those escalate to a real git worktree with a Developer and a Tester. The Tester independently re-verifies the diff, catches one file the Developer missed, fixes it, and queues the story for rollup. The Scrum Master processes that queue next: `E41_S10` → `Passed`. Epic `E41` stays `In Progress` — three other stories are still open.
|
|
93
94
|
|
|
94
|
-
|
|
95
|
-
```
|
|
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
|
|
99
|
-
```
|
|
95
|
+
Then, circling back to the deferred request:
|
|
100
96
|
|
|
101
|
-
**Implementation**
|
|
102
|
-
```
|
|
103
|
-
j:do → Developer picks up E01_S01_T01-jwt-middleware
|
|
104
|
-
→ creates isolated worktree, implements, commits
|
|
105
|
-
→ Tester validates, marks Passed, triggers rollup
|
|
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
|
|
109
97
|
```
|
|
98
|
+
Jenga AI: [...] Remaining open thread from this session: E41_S11
|
|
99
|
+
(Examples rework) is on the board but not started — it's gated on
|
|
100
|
+
a j.brainstorm session where you supply real-world use cases. Want
|
|
101
|
+
to do that now, or leave it queued?
|
|
110
102
|
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
You: "Actually, let's also add API rate limiting while we're at it"
|
|
114
|
-
j:btw → captures "rate limiting" as E02 without losing E01 context
|
|
115
|
-
→ returns focus to E01_S02
|
|
116
|
-
j:spinoff → captures a diverging topic mid-conversation, saves as j:todo
|
|
117
|
-
→ returns focus to primary thread
|
|
103
|
+
You: do it now
|
|
118
104
|
```
|
|
119
105
|
|
|
120
|
-
|
|
121
|
-
```
|
|
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
|
|
125
|
-
```
|
|
106
|
+
`j.brainstorm` opens for the gated story — the session you're reading right now, working out what this example should even say.
|
|
126
107
|
|
|
127
|
-
The board, the
|
|
108
|
+
Nobody hand-wrote this task breakdown. The board did it, the routing rules decided what needed a real worktree versus what could run inline, and the Tester — not the agent that made the edits — decided when each piece was actually done. The board entries are real: `E41_S10` and `E41_S11`.
|
|
128
109
|
|
|
129
110
|
---
|
|
130
111
|
|
|
131
|
-
## How
|
|
112
|
+
## How Jenga AI's Agentic Workflow Works
|
|
132
113
|
|
|
133
114
|
```
|
|
134
|
-
j
|
|
115
|
+
j.init → j.pi-plan → j.todo → j.do
|
|
135
116
|
│
|
|
136
117
|
Developer agent
|
|
137
118
|
(isolated worktree, commits)
|
|
@@ -172,7 +153,7 @@ Each agent is defined in `.agents/agents/`. They communicate exclusively through
|
|
|
172
153
|
|
|
173
154
|
**Prerequisites:** An AI agent or AI-native IDE. Supported platforms include:
|
|
174
155
|
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code)
|
|
175
|
-
- GitHub Copilot (VS Code extension or CLI)
|
|
156
|
+
- [GitHub Copilot](https://github.com/features/copilot) (VS Code extension or CLI)
|
|
176
157
|
- Codex CLI
|
|
177
158
|
|
|
178
159
|
**Install from npm:**
|
|
@@ -182,13 +163,13 @@ npm install -g @jenga-ai/agent
|
|
|
182
163
|
|
|
183
164
|
Or clone directly:
|
|
184
165
|
|
|
185
|
-
1. **Clone or copy this repo** into your project's
|
|
186
|
-
2. **Run `j
|
|
187
|
-
3. **Run `j
|
|
188
|
-
4. **Run `j
|
|
189
|
-
5. **Run `j
|
|
166
|
+
1. **Clone or copy this repo** into your project's root.
|
|
167
|
+
2. **Run `j.init`** — scaffolds `project/`, creates `workflow.json`, `PROJECT_SUMMARY.md`, and makes an initial commit.
|
|
168
|
+
3. **Run `j.pi-plan`** — define your project goals and initial epics.
|
|
169
|
+
4. **Run `j.todo`** — describe features to implement; they're linked to the board automatically.
|
|
170
|
+
5. **Run `j.do`** — picks the first task and drives the full implement → test → commit loop.
|
|
190
171
|
|
|
191
|
-
Run `j
|
|
172
|
+
Run `j.status` at any time to see where the project stands.
|
|
192
173
|
|
|
193
174
|
---
|
|
194
175
|
|
|
@@ -208,189 +189,40 @@ The framework is platform-agnostic by design — any AI agent that can read Mark
|
|
|
208
189
|
|
|
209
190
|
## Skills (Slash Commands)
|
|
210
191
|
|
|
211
|
-
Skills live in `.agents/skills/<name>/SKILL.md`. Invoke with `j
|
|
212
|
-
|
|
213
|
-
### Setup & Planning
|
|
214
|
-
|
|
215
|
-
| Command | Description |
|
|
216
|
-
|---|---|
|
|
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 |
|
|
227
|
-
|
|
228
|
-
### Execution
|
|
229
|
-
|
|
230
|
-
| Command | Description |
|
|
231
|
-
|---|---|
|
|
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) |
|
|
192
|
+
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. A handful of the most foundational commands:
|
|
238
193
|
|
|
239
|
-
|
|
194
|
+
> ⚠️ **Command collision with a host tool?** Some host tools ship their own built-in command that can
|
|
195
|
+
> shadow one of Jenga's — e.g. GitHub Copilot's own built-in `/init`, which could silently shadow
|
|
196
|
+
> Jenga's `/init` skill. Every skill (except `init`, already handled) has a collision-safe `/j-<name>`
|
|
197
|
+
> directory-twin form — e.g. `/j-init` — that always resolves to the genuine Jenga skill regardless of
|
|
198
|
+
> what else is installed. This is separate from the `j.<name>` prefix form above: it's a real duplicate
|
|
199
|
+
> directory under a distinct name, not a routing alias, generated and kept in sync via
|
|
200
|
+
> `scripts/generate-j-alias.sh`. If a `j.<name>` or bare `/<name>` command isn't behaving as
|
|
201
|
+
> documented, try its `/j-<name>` form instead.
|
|
240
202
|
|
|
241
203
|
| Command | Description |
|
|
242
204
|
|---|---|
|
|
243
|
-
| `j
|
|
244
|
-
| `j
|
|
245
|
-
| `j
|
|
246
|
-
| `j
|
|
247
|
-
| `j
|
|
248
|
-
| `j:reconcile-origin` | Sync the current or specified branch with origin via rebase. Presents conflict reports with resolution options. |
|
|
205
|
+
| `j.init` | Scaffold project directories, `workflow.json`, `PROJECT_SUMMARY.md`, initial git commit |
|
|
206
|
+
| `j.jenga` | Interactive-by-default board orchestrator — bare shows a picker + confirmation tree, `<ids>` scopes and confirms, `*` runs fully automated with no prompts |
|
|
207
|
+
| `j.todo` | Add missions to `project/todo.md` linked to epics and stories |
|
|
208
|
+
| `j.do` | Execute tasks from the scrum board, drives the Developer agent through the full loop |
|
|
209
|
+
| `j.status` | Print a full scrum board overview — epics, stories, tasks, rapports, queue depth |
|
|
249
210
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
| Command | Description |
|
|
253
|
-
|---|---|
|
|
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) |
|
|
266
|
-
|
|
267
|
-
---
|
|
268
|
-
|
|
269
|
-
## Distributing the Workflow
|
|
270
|
-
|
|
271
|
-
Jenga AI can propagate its workflow files to other projects on your machine via `j:distribute`.
|
|
272
|
-
|
|
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.
|
|
275
|
-
|
|
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).
|
|
277
|
-
|
|
278
|
-
---
|
|
279
|
-
|
|
280
|
-
## Directory Structure
|
|
281
|
-
|
|
282
|
-
```
|
|
283
|
-
.agents/ ← Workflow root (place this in your project)
|
|
284
|
-
├── agents/
|
|
285
|
-
│ ├── scrum-master.md
|
|
286
|
-
│ ├── developer.md
|
|
287
|
-
│ └── tester.md
|
|
288
|
-
├── hooks/
|
|
289
|
-
│ └── on_session_end.sh
|
|
290
|
-
├── mcp/
|
|
291
|
-
│ ├── help/
|
|
292
|
-
│ └── execute-ticket/
|
|
293
|
-
├── skills/
|
|
294
|
-
│ ├── brainstorm/
|
|
295
|
-
│ ├── btw/
|
|
296
|
-
│ ├── commit/
|
|
297
|
-
│ ├── continue/
|
|
298
|
-
│ ├── deep-dive/
|
|
299
|
-
│ ├── distribute/
|
|
300
|
-
│ ├── do/
|
|
301
|
-
│ ├── doc/
|
|
302
|
-
│ ├── doc-sync/
|
|
303
|
-
│ ├── dooo/
|
|
304
|
-
│ ├── error/
|
|
305
|
-
│ ├── evaluate/
|
|
306
|
-
│ ├── examplify/
|
|
307
|
-
│ ├── help/
|
|
308
|
-
│ ├── improve/
|
|
309
|
-
│ ├── init/
|
|
310
|
-
│ ├── pi-plan/
|
|
311
|
-
│ ├── jbp/
|
|
312
|
-
│ ├── jenga/
|
|
313
|
-
│ ├── lgtm/
|
|
314
|
-
│ ├── proceed/
|
|
315
|
-
│ ├── reconcile/
|
|
316
|
-
│ ├── redo/
|
|
317
|
-
│ ├── route/
|
|
318
|
-
│ ├── skillify/
|
|
319
|
-
│ ├── spinoff/
|
|
320
|
-
│ ├── status/
|
|
321
|
-
│ ├── todo/
|
|
322
|
-
│ └── train/
|
|
323
|
-
├── templates/
|
|
324
|
-
│ ├── SCRUM_BOARD_SCHEMA.md
|
|
325
|
-
│ ├── PROBLEM_RAPPORT_TEMPLATE.md
|
|
326
|
-
│ └── JENGA_CONFIG_TEMPLATE.json
|
|
327
|
-
├── settings.json
|
|
328
|
-
├── jenga.config.json ← Workflow version source
|
|
329
|
-
├── .jenga_paths ← Machine-local consumer paths (git-ignored)
|
|
330
|
-
└── RELEASE_NOTE.md
|
|
331
|
-
|
|
332
|
-
project/ ← Created by j:init inside your software project
|
|
333
|
-
├── board/
|
|
334
|
-
│ ├── epics/ ← E##_<slug>.md
|
|
335
|
-
│ ├── stories/ ← E##_S##_<slug>.md
|
|
336
|
-
│ └── tasks/ ← E##_S##_T##_<slug>.md
|
|
337
|
-
├── configs/
|
|
338
|
-
│ ├── workflow.json ← Shared constants (statuses, paths, agents)
|
|
339
|
-
│ └── test-config.json ← Test tool stack (owned by Tester, user-approved)
|
|
340
|
-
├── data/
|
|
341
|
-
│ └── baselines.json ← Analytics baselines (owned by Tester)
|
|
342
|
-
├── documentation/
|
|
343
|
-
│ ├── plans/ ← Pre-execution plans by Developer
|
|
344
|
-
│ └── summaries/ ← Post-execution summaries by Developer
|
|
345
|
-
├── queue/
|
|
346
|
-
│ ├── scrum_triggers.jsonl
|
|
347
|
-
│ ├── developer_triggers.jsonl
|
|
348
|
-
│ ├── tester_triggers.jsonl
|
|
349
|
-
│ └── project_summary_updates.jsonl
|
|
350
|
-
├── rapports/
|
|
351
|
-
│ ├── problems/ ← Problem rapports (Developer + Tester)
|
|
352
|
-
│ └── analysis/ ← Analysis rapports (Tester)
|
|
353
|
-
├── logs/
|
|
354
|
-
│ └── events.json ← Append-only inter-agent event log
|
|
355
|
-
└── PROJECT_SUMMARY.md ← Project source of truth (owned by Scrum Master)
|
|
356
|
-
|
|
357
|
-
CHANGELOG.md ← Created by j:init at the project's repo root; maintained by j:publish
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
---
|
|
361
|
-
|
|
362
|
-
## Agent Communication Contract
|
|
363
|
-
|
|
364
|
-
Every inter-agent call passes a typed **sender object**:
|
|
365
|
-
|
|
366
|
-
```json
|
|
367
|
-
{
|
|
368
|
-
"sender": {
|
|
369
|
-
"agent": "<scrum-master | developer | tester | orchestrator>",
|
|
370
|
-
"session_id": "<session id>",
|
|
371
|
-
"task_id": "<E##_S##_T##>",
|
|
372
|
-
"story_id": "<E##_S##>",
|
|
373
|
-
"epic_id": "<E##>",
|
|
374
|
-
"date": "<ISO 8601 UTC>",
|
|
375
|
-
"paths": ["<commit SHA>", "..."],
|
|
376
|
-
"worktree": "<absolute path to worktree>",
|
|
377
|
-
"resolved_context": "<optional: path to a digest file under project/queue/context/>"
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
```
|
|
381
|
-
|
|
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.
|
|
211
|
+
> 📖 **Full skill list** (planning, review, committing & maintenance commands): [project/.wiki/documentation.md](project/.wiki/documentation.md#skills)
|
|
383
212
|
|
|
384
213
|
---
|
|
385
214
|
|
|
386
215
|
## When to Use Jenga AI
|
|
387
216
|
|
|
388
217
|
**Use it when:**
|
|
389
|
-
- You're building a non-trivial project across multiple sessions
|
|
390
|
-
- You want
|
|
218
|
+
- You're building a non-trivial project across multiple sessions and need persistent engineering context instead of re-explaining it every time
|
|
219
|
+
- You want an agentic development workflow with separate planning, coding, testing, and review agents — not one model self-grading its own work
|
|
391
220
|
- You need traceability — who did what, when, on which task
|
|
392
|
-
- You
|
|
221
|
+
- You're working across more than one AI coding agent or AI-native IDE and want one workflow, not a separate setup per tool
|
|
222
|
+
- You want to reuse and propagate the same agentic workflow across multiple projects (`j.distribute`)
|
|
393
223
|
|
|
394
224
|
**You might not need it when:**
|
|
395
225
|
- You're doing a quick one-off script or single-session experiment
|
|
396
226
|
- Your project has no meaningful test surface
|
|
227
|
+
|
|
228
|
+
📖 **Full reference:** [project/.wiki/documentation.md](project/.wiki/documentation.md)
|
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 `j
|
|
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 `j
|
|
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 `j
|
|
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 `j
|
|
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
|
|
|
@@ -290,7 +290,7 @@ See `templates/PROBLEM_RAPPORT_TEMPLATE.md` for the required format. Commit the
|
|
|
290
290
|
|
|
291
291
|
## Investigative Mode
|
|
292
292
|
|
|
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
|
|
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.
|
|
294
294
|
|
|
295
295
|
**Hard constraints.** Investigative Mode is strictly read-only:
|
|
296
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 `j
|
|
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 `j
|
|
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.
|
|
@@ -203,7 +203,7 @@ Before writing each task file to `project/board/tasks/`, verify:
|
|
|
203
203
|
|
|
204
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
205
|
|
|
206
|
-
**Motivating example:** `E42_S04_T02` ("register `j
|
|
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
207
|
|
|
208
208
|
This check applies regardless of the sibling task's `execution_scope`.
|
|
209
209
|
|
|
@@ -370,12 +370,12 @@ When a request comes in:
|
|
|
370
370
|
### 3. Finalizing Items
|
|
371
371
|
Once an item is sufficiently defined:
|
|
372
372
|
- Use the appropriate command to register it on the scrum board:
|
|
373
|
-
- `j
|
|
373
|
+
- `j.todo` — add a new item
|
|
374
374
|
- `/amend` — update or refine an existing item
|
|
375
|
-
- `j
|
|
375
|
+
- `j.redo` — scrap and restart an item
|
|
376
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.
|
|
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
|
|
378
|
-
- **Purpose:** link board work to documentation files so `j
|
|
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.
|
|
379
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`).
|
|
380
380
|
- **How to populate it:** use repo-relative paths from the repository root, e.g. `docs: ["README.md", "docs/API.md"]`.
|
|
381
381
|
- **Optionality:** do not add `docs` when no documentation target is directly affected; omitted `docs` is valid.
|
|
@@ -441,7 +441,7 @@ If the user wants to defer implementation (e.g., brainstorming only, or items ar
|
|
|
441
441
|
|
|
442
442
|
## Brainstorm Mode
|
|
443
443
|
|
|
444
|
-
When invoked via the `j
|
|
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.
|
|
445
445
|
|
|
446
446
|
In Brainstorm Mode, amplify the following behaviours:
|
|
447
447
|
|
|
@@ -488,28 +488,28 @@ Clarifications, follow-up details, and edge cases that serve the current story a
|
|
|
488
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:
|
|
489
489
|
|
|
490
490
|
It looks like we're moving into a new topic. How would you like to handle it?
|
|
491
|
-
1. Capture the **new topic** as a `j
|
|
492
|
-
2. Capture the **current topic** as a `j
|
|
493
|
-
3. Capture **both** as `j
|
|
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)
|
|
494
494
|
4. Ignore it — tell me which topic to continue with
|
|
495
495
|
|
|
496
496
|
### Option A — Capture the Diverging Topic
|
|
497
|
-
1. Draft a `j
|
|
498
|
-
2. Before finalising, offer `j
|
|
499
|
-
3. Once the `j
|
|
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.
|
|
500
500
|
|
|
501
501
|
### Option B — Capture the Primary Topic
|
|
502
|
-
1. Draft a `j
|
|
503
|
-
2. Offer `j
|
|
504
|
-
3. Once the `j
|
|
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.
|
|
505
505
|
|
|
506
506
|
### Option C — Capture Both
|
|
507
|
-
1. Create a `j
|
|
508
|
-
2. Create a `j
|
|
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).
|
|
509
509
|
3. Ask the user which topic to continue first.
|
|
510
510
|
|
|
511
511
|
### Context Surfacing
|
|
512
|
-
Every `j
|
|
512
|
+
Every `j.todo` created through this flow must include in its description:
|
|
513
513
|
- A one-sentence summary of the topic
|
|
514
514
|
- Key details, constraints, or decisions already discussed
|
|
515
515
|
- Open questions or unknowns raised so far
|
|
@@ -517,8 +517,8 @@ Every `j:todo` created through this flow must include in its description:
|
|
|
517
517
|
This is non-negotiable — it is the mechanism that prevents context loss.
|
|
518
518
|
|
|
519
519
|
### Edge Cases
|
|
520
|
-
- **User declines both options (selects "Ignore it")**: Do not create any `j
|
|
521
|
-
- **User wants to pursue both in parallel**: Treat as Option C — create both `j
|
|
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.
|
|
522
522
|
---
|
|
523
523
|
|
|
524
524
|
## Mediator Mode
|
|
@@ -529,7 +529,7 @@ Activate Mediator Mode whenever the user is working on AI/ML model setup, traini
|
|
|
529
529
|
- User asks which model architecture to use
|
|
530
530
|
- User needs help choosing training hyperparameters or a framework
|
|
531
531
|
- User wants to understand model evaluation results
|
|
532
|
-
- User is about to run or configure a training job via the `j
|
|
532
|
+
- User is about to run or configure a training job via the `j.train` skill
|
|
533
533
|
|
|
534
534
|
You do not need explicit instruction to enter Mediator Mode — detect the context and activate it automatically.
|
|
535
535
|
|