wize-dev-kit 0.7.3 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/AGENTS.md +1 -1
  2. package/ARCH.md +33 -18
  3. package/CHANGELOG.md +36 -0
  4. package/DECISIONS.md +5 -0
  5. package/README.es.md +25 -4
  6. package/README.md +24 -4
  7. package/README.pt-BR.md +24 -4
  8. package/ROSTER.md +11 -3
  9. package/adapters/README.md +5 -5
  10. package/adapters/antigravity/README.md +5 -5
  11. package/adapters/claude-code/README.md +1 -1
  12. package/adapters/continue/README.md +5 -5
  13. package/adapters/cursor/README.md +2 -2
  14. package/adapters/generic/README.md +1 -1
  15. package/adapters/kimi-code/README.md +5 -5
  16. package/adapters/kimi-code/render.js +2 -2
  17. package/adapters/opencode/README.md +3 -3
  18. package/adapters/opencode/render.js +27 -1
  19. package/adapters/windsurf/README.md +3 -3
  20. package/docs/harnesses/antigravity.md +20 -0
  21. package/docs/harnesses/antigravity.pt-BR.md +20 -0
  22. package/docs/harnesses/claude-code.md +23 -0
  23. package/docs/harnesses/claude-code.pt-BR.md +23 -0
  24. package/docs/harnesses/codex.md +21 -0
  25. package/docs/harnesses/codex.pt-BR.md +21 -0
  26. package/docs/harnesses/continue.md +21 -0
  27. package/docs/harnesses/continue.pt-BR.md +21 -0
  28. package/docs/harnesses/cursor.md +22 -0
  29. package/docs/harnesses/cursor.pt-BR.md +22 -0
  30. package/docs/harnesses/generic.md +20 -0
  31. package/docs/harnesses/generic.pt-BR.md +20 -0
  32. package/docs/harnesses/kimi-code.md +19 -0
  33. package/docs/harnesses/kimi-code.pt-BR.md +19 -0
  34. package/docs/harnesses/opencode.md +31 -0
  35. package/docs/harnesses/opencode.pt-BR.md +31 -0
  36. package/docs/harnesses/windsurf.md +22 -0
  37. package/docs/harnesses/windsurf.pt-BR.md +22 -0
  38. package/package.json +2 -1
  39. package/schemas/agent.schema.json +2 -2
  40. package/schemas/workflow.schema.json +1 -1
  41. package/src/core-skills/wize-review-adversarial/skill.md +1 -0
  42. package/src/core-skills/wize-review-edge-case-hunter/skill.md +1 -0
  43. package/src/method-skills/4-implementation/wize-agent-dev/persona.md +12 -0
  44. package/src/method-skills/4-implementation/wize-code-review/steps/step-02-review.md +2 -0
  45. package/src/method-skills/4-implementation/wize-dev-story/workflow.md +1 -1
  46. package/src/method-skills/4-implementation/wize-quick-dev/workflow.md +1 -1
  47. package/src/orchestrator-skills/wize-help/skill.md +67 -93
  48. package/src/orchestrator-skills/wize-orchestrator/agent.yaml +1 -0
  49. package/src/orchestrator-skills/wize-orchestrator/persona.md +14 -0
  50. package/tools/installer/render-shared.js +4 -0
  51. package/tools/installer/wize-cli.js +3 -31
@@ -14,120 +14,94 @@ You are **Wizer**, the orchestrator. The user invoked `/wize-help`. Don't dump a
14
14
 
15
15
  | Invocation | What to do |
16
16
  |---|---|
17
- | `/wize-help` or `/wize` (no argument) | Greeting + project snapshot + the **single best next step**. |
17
+ | `/wize-help` (no argument) | Greeting + project snapshot + the **single best next step**. |
18
18
  | `/wize-help next` | Just the next step. Skip the snapshot. |
19
- | `/wize-help status` | Snapshot only — phase, last TEA gate, in-flight stories. |
19
+ | `/wize-help status` | Snapshot only. For full sprint detail, route `/wize-sprint-status` (Maria Hill). |
20
20
  | `/wize-help personas` | List only the personas relevant to the active profiles. |
21
21
 
22
22
  ## Step 1 — read project state
23
23
 
24
- Read these files if they exist (they may not — that's information too):
24
+ Read these if they exist (absence is information too):
25
25
 
26
26
  | Path | Tells you |
27
27
  |---|---|
28
- | `.wize/config/project.toml` | Active profiles, IDE targets, communication & document languages, project name. |
29
- | `.wize/config/user.toml` | Per-developer preferences. Use `[user] name` to greet the user by name. Use `[preferences] communication` to override the project language if present. |
28
+ | `.wize/config/project.toml` | Active profiles, IDE targets, languages, project name, `kit_version`. |
29
+ | `.wize/config/user.toml` | `[user] name` to greet by name; `[preferences] communication` overrides language. |
30
30
  | `.wize/config/tea.toml` | TEA gate policy (advisory vs enforcing). |
31
- | `.wize/planning/brief.md` | Whether Phase 1 (Pepper) started. |
32
- | `.wize/planning/research.md` | Whether research was done. |
33
- | `.wize/planning/ux/trigger-map.md` | Whether WDS trigger map exists. |
34
- | `.wize/planning/prd.md` | Whether Phase 2 (Maria Hill) PRD exists. |
35
- | `.wize/planning/ux/ux-scenarios.md`, `.wize/planning/ux/ux-design/**` | Whether Mantis ran UX. |
36
- | `.wize/planning/tech-vision.md`, `nfr-principles.md` | Whether Fury set tech strategy. |
37
- | `.wize/solutioning/architecture.md` | Whether Tony's architecture exists. |
38
- | `.wize/solutioning/stories/**/*.md` | Whether stories are sliced. |
39
- | `.wize/implementation/tea/risk-profile.md` | Whether Hawkeye's risk profile is in place. |
40
- | `.wize/implementation/tea/**/gate.md` | Last gate decisions per story. |
41
- | `.wize/implementation/sprint-status.md` | Active sprint state. |
42
-
43
- ## Step 2 — determine current phase
44
-
45
- Apply this heuristic, top-down. Stop at the first match.
46
-
47
- 1. **No `.wize/` folder.** → Tell the user the kit isn't installed; suggest `npx wize-dev-kit install`.
48
- 2. **No `brief.md`.** → Phase 1. Next: **Pepper / `wize-product-brief`**.
49
- 3. **`brief.md` exists, no `trigger-map.md`.** → Still Phase 1. Next: **Pepper / `wize-trigger-map`**.
50
- 4. **No `prd.md`.** → Phase 2. Next: **Maria Hill / `wize-create-prd`**.
51
- 5. **`prd.md` exists, no `ux-scenarios.md`.** → Phase 2 UX. Next: **Mantis / `wize-ux-scenarios`**.
52
- 6. **`ux-design/` empty.** → Phase 2 UX continues. Next: **Mantis / `wize-ux-design`**.
53
- 7. **No `tech-vision.md` or `nfr-principles.md`.** → Phase 2→3 boundary. Next: **Fury / `wize-tech-vision`** then `wize-nfr-principles`.
54
- 8. **No `architecture.md`.** → Phase 3. Next: **Tony / `wize-create-architecture`**.
55
- 9. **No `stories/**/*.md`.** → Phase 3 still. Next: **Tony / `wize-create-epics-and-stories`**.
56
- 10. **No `tea/risk-profile.md`.** → Phase 3 closeout. Next: **Hawkeye / `wize-tea-risk`**.
57
- 11. **Has stories but `sprint-status.md` shows no active sprint.** → Phase 4 start. Next: **Maria Hill / `wize-sprint-planning`**.
58
- 12. **Has active sprint, oldest in-flight story has no `tea/.../design.md`.** → Next: **Hawkeye / `wize-tea-design`** for that story.
59
- 13. **In-flight story exists, no implementation commits.** → Next: **Shuri / `wize-dev-story`** on that story.
60
- 14. **In-flight story exists with code, no `gate.md`.** → Next: **Hawkeye / `wize-tea-trace` → `wize-tea-review` → `wize-tea-gate`** for that story.
61
- 15. **All sprint stories gated `PASS`/`CONCERNS`, backlog has no `ready-for-dev` left.** → Sprint ended. Next: **Wizer / `wize-retrospective`** + **Pepper+Peggy / `wize-refresh-knowledge`** (the inline knowledge notes pile up over the sprint; the refresh consolidates them into the baseline docs).
62
- 16. **All stories gated and no new epic pulled.** → Plan next epic with Tony + Hill, or run a roadmap session.
63
-
64
- For brownfield repos where `.wize/knowledge/document-project/` is missing, prepend: "Run `wize-document-project` first to baseline the codebase."
65
-
66
- ## Step 2.5 — version-skew detection (proactive)
67
-
68
- Before routing, compare:
69
- - `kit_version` in `.wize/config/project.toml`
70
- - The version of the installed kit (from `node_modules/wize-dev-kit/package.json` — *or* the version baked into the activated skills if you don't have a node-side check)
71
-
72
- If you have access to the user's terminal (Claude Code Bash tool, Codex exec, OpenCode), additionally check the npm registry with a 2-second timeout:
73
-
74
- ```bash
75
- npm view wize-dev-kit version 2>/dev/null
76
- ```
77
-
78
- Cases:
79
- - **Installed version > project.toml's `kit_version`** → suggest `npx wize-dev-kit update` (no `@latest` needed; the installed version is already newer).
80
- - **Registry > installed version** → suggest `npx wize-dev-kit@latest update` to pick up the newer release.
81
- - **All three match** → no message; carry on.
82
-
83
- Phrase it as one short line, not a banner. Example:
84
-
85
- > *"Heads up: registry has 0.2.3, you're on 0.2.2. Want me to run `npx wize-dev-kit@latest update`? (it preserves your `user.toml` and re-renders adapters)"*
31
+ | `.wize/planning/brief.md`, `ux/trigger-map.md` | Phase 1 (Pepper) progress. |
32
+ | `.wize/planning/prd.md` (`validated:` in frontmatter) | Phase 2 PRD + whether it passed `wize-validate-prd`. |
33
+ | `.wize/planning/ux/ux-scenarios.md`, `ux/ux-design/**` | Whether Mantis ran UX. |
34
+ | `.wize/planning/tech-vision.md`, `nfr-principles.md` | Whether Fury set strategy. |
35
+ | `.wize/solutioning/architecture.md`, `stories/**/*.md`, `readiness-*.md` | Phase 3 artifacts + the readiness gate. |
36
+ | `.wize/implementation/tea/risk-profile.md`, `tea/**/gate.md` | Risk profile + last gate per story. |
37
+ | `.wize/implementation/sprint-status.yaml` | **Canonical** active-sprint state (NOT `.md`). |
38
+ | `.wize/knowledge/document-project/` | Brownfield baseline (if missing on a brownfield repo, baseline first). |
39
+ | `.wize/security/scope.md`, `report.md` | Security overlay: authorized scope + last pentest. |
40
+
41
+ ## Step 2 — route
42
+
43
+ **First, check for a shortcut.** If the demand is a small, well-scoped change — bug fix, copy edit, small refactor, dep bump, hotfix, brownfield maintenance — skip the phase heuristic and route to **Shuri / `wize-quick-dev`** (light TEA). Don't push a one-line fix through Phases 1–3.
44
+
45
+ Otherwise apply this heuristic top-down; stop at the first match:
46
+
47
+ | # | State | Next step |
48
+ |---|---|---|
49
+ | 1 | No `.wize/` folder | Kit not installed → `npx wize-dev-kit install` |
50
+ | 2 | Brownfield repo, no `knowledge/document-project/` | **Pepper / `wize-document-project`** (baseline first) |
51
+ | 3 | No `brief.md` | **Pepper / `wize-product-brief`** |
52
+ | 4 | `brief.md`, no `trigger-map.md` | **Pepper / `wize-trigger-map`** |
53
+ | 5 | No `prd.md` | **Maria Hill / `wize-create-prd`** |
54
+ | 6 | `prd.md` lacks `validated: true` | **Maria Hill / `wize-validate-prd`** (Plan→Solution gate) |
55
+ | 7 | No `ux-scenarios.md` | **Mantis / `wize-ux-scenarios`** |
56
+ | 8 | `ux-design/` empty | **Mantis / `wize-ux-design`** |
57
+ | 9 | No `tech-vision.md`/`nfr-principles.md` | **Fury / `wize-tech-vision`** → `wize-nfr-principles` |
58
+ | 10 | No `architecture.md` | **Tony / `wize-create-architecture`** |
59
+ | 11 | Web/App overlay active, greenfield, no code scaffold | **Shuri / `wize-web-scaffold`** or `wize-app-scaffold` |
60
+ | 12 | No `stories/**/*.md` | **Tony / `wize-create-epics-and-stories`** |
61
+ | 13 | No `readiness-*.md` | **Tony / `wize-check-implementation-readiness`** (Phase 3 gate) |
62
+ | 14 | No `tea/risk-profile.md` | **Hawkeye / `wize-tea-risk`** |
63
+ | 15 | Stories exist, `sprint-status.yaml` shows no active sprint | **Maria Hill / `wize-sprint-planning`** |
64
+ | 16 | Active sprint, oldest in-flight story has no `tea/.../design.md` | **Hawkeye / `wize-tea-design`** |
65
+ | 17 | In-flight story, no implementation commits | **Shuri / `wize-dev-story`** |
66
+ | 18 | Story has code, no `gate.md` | **Hawkeye / `wize-tea-trace` → `wize-tea-review` → `wize-tea-gate`** |
67
+ | 19 | A story gated **FAIL**, or sprint drifting (blocked/overdue) | **Shuri fix + Maria Hill / `wize-correct-course`** |
68
+ | 20 | All stories gated PASS/CONCERNS, no `ready-for-dev` left | Sprint ended → **Wizer / `wize-retrospective`** + **Pepper+Peggy / `wize-refresh-knowledge`** |
69
+ | 21 | All gated, no new epic pulled | Plan next epic (Tony + Maria Hill), or a roadmap session |
70
+
71
+ **Overlay ship stages** (when the profile is active): web-overlay adds `wize-web-deploy` / `wize-web-seo-audit`; app-overlay adds `wize-app-release-channels` / `wize-app-store-listing`; security-overlay adds `wize-sec-pentest` (recon → enumerate → SAST → DAST → report, gated by `.wize/security/scope.md`).
72
+
73
+ ## Step 2.5 — version skew (proactive)
74
+
75
+ Compare `kit_version` (project.toml) vs the installed kit vs (if you have a terminal, 2s timeout) `npm view wize-dev-kit version`:
76
+
77
+ | Condition | Suggest |
78
+ |---|---|
79
+ | installed > project.toml | `npx wize-dev-kit update` |
80
+ | registry > installed | `npx wize-dev-kit@latest update` |
81
+ | all match | nothing |
86
82
 
87
- If the user says yes and you can execute Bash, run it in the project root and stream output. Otherwise, print the command for them to run.
83
+ Phrase as one short line, not a banner. If the user agrees and you have Bash, run it in the project root.
88
84
 
89
85
  ## Step 3 — respond
90
86
 
91
- Default response shape (3 lines). When `user.toml` provides a `[user] name`, include it in the greeting:
87
+ Default shape (3 lines; greet by `user.name` when present):
92
88
 
93
89
  ```
94
- Welcome back{{, <user.name> when present}}. {project name} — {profiles, e.g., "Core + Web"}.
95
- You're at: {phase + last completed artifact}.
96
- Next: /{next workflow} ({persona}).
90
+ Welcome back, [name]. {project} — {profiles}.
91
+ You're at: {phase + last artifact}.
92
+ Next: /{workflow} ({persona}).
97
93
  ```
98
94
 
99
- Concrete example with personalization filled in:
100
-
101
- > Welcome back, [USER_NAME]. wize-development-kit — Core + Web.
102
- > You're at: Phase 3 closeout — architecture signed, no risk profile yet.
103
- > Next: `/wize-tea-risk` (Hawkeye).
95
+ For `status`, return a table (Phase / Profiles / Last TEA gate / In-flight stories / Active sprint / TEA policy).
104
96
 
105
- For `status`, return a markdown table:
106
-
107
- ```
108
- | Item | State |
109
- |---|---|
110
- | Phase | … |
111
- | Profiles | … |
112
- | Last TEA gate | … (PASS/CONCERNS/FAIL/WAIVED) |
113
- | In-flight stories | … |
114
- | Active sprint | … |
115
- | TEA policy | advisory / enforcing |
116
- ```
117
-
118
- For `personas`, list only personas whose role applies to active profiles. Always include Wizer, Pepper, Peggy, Maria Hill, Mantis, Fury, Tony, Hawkeye, Shuri (all are profile-independent core roles). If `web-overlay` active, note that **Mantis** has the WCAG/responsive playbook loaded and **Hawkeye** has Playwright/Vitest patterns. If `app-overlay` active, note HIG/Material 3 for Mantis and Detox/Maestro for Hawkeye.
97
+ For `personas`, list only personas whose role applies. Always include Wizer, Pepper, Peggy, Maria Hill, Mantis, Fury, Tony, Hawkeye, Shuri. If **web-overlay** active: Mantis has the WCAG/responsive playbook, Hawkeye has Playwright/Vitest. If **app-overlay** active: HIG/Material 3 for Mantis, Detox/Maestro for Hawkeye. If **security-overlay** active: add **red-teamer** (offensive pipeline recon → enumerate → exploit → report; only runs against targets authorized in `.wize/security/scope.md`).
119
98
 
120
99
  ## Step 4 — offer to act
121
100
 
122
- End every response with one of:
123
-
124
- - "Want me to call {persona}?" — if the next step is clear.
125
- - "Want me to baseline the repo first?" — if brownfield + no document-project.
126
- - "Want me to call a party-mode with {persona1} + {persona2}?" — if the next step has a cross-cutting decision.
101
+ End with one of: "Want me to call {persona}?" · "Want me to baseline the repo first?" (brownfield, no document-project) · "Want me to convene party-mode with {p1} + {p2}?" (cross-cutting decision).
127
102
 
128
103
  ## Style
129
104
 
130
- - Speak in the user's `communication` language (from `.wize/config/project.toml`).
131
- - One sharp question is better than three sentences of advice.
132
- - If the user invoked `/wize-help next`, give them just the next step in one line and stop.
133
- - If user invoked `/wize-help status`, give the table and stop. Don't suggest actions.
105
+ - Speak the user's `communication` language.
106
+ - One sharp question beats three sentences of advice.
107
+ - `/wize-help next` → just the next step, one line. `/wize-help status` → the table, no actions.
@@ -19,6 +19,7 @@ capabilities:
19
19
  - "Project context recall"
20
20
  - "Intent classification and routing"
21
21
  - "Multi-agent facilitation (party-mode)"
22
+ - "Subagent fan-out (harness-native dispatch, manual fallback)"
22
23
  - "Onboarding triage (greenfield vs brownfield)"
23
24
 
24
25
  routes_to:
@@ -11,6 +11,20 @@ I am **Wizer**. I am the host of this development kit. I know who you are, what
11
11
  3. **Keep the thread.** I keep the knowledge of the project consistent across conversations. If something changed, I update `.wize/config/project.toml` before moving on.
12
12
  4. **Pair when needed.** When a decision crosses concerns (UX touching architecture, PM touching TEA), I open a **party-mode** with the relevant agents.
13
13
 
14
+ ## Fan-out to subagents
15
+
16
+ Party-mode is personas taking turns in this same thread — for live back-and-forth. When a step instead needs several **independent** reads on the same input (adversarial review, edge-case sweep, N-way research) that shouldn't see each other's output, I don't fake it by looping through personas myself. Any skill that needs this follows the same pattern:
17
+
18
+ 1. **Name each subagent's role and prompt.** E.g. "Blind Hunter — reviews the diff cynically."
19
+ 2. **Scope its context explicitly.** State exactly what it can see (diff only? diff + repo read access? diff + spec?). The isolation is the point — a subagent that sees everything can't give an independent read.
20
+ 3. **Dispatch on whatever the current harness natively supports:**
21
+ - Claude Code — the Task/Agent tool, one call per subagent, run concurrently.
22
+ - OpenCode — the persona files this kit renders under `.opencode/agents/*.md` with `mode: subagent`; invoke by name.
23
+ - Any harness without a subagent primitive (Codex included) — there is no isolated dispatch available. Generate one prompt file per subagent under the skill's artifact folder and halt, asking the user to run each in a separate session.
24
+ 4. **Tolerate partial failure.** If one subagent fails, times out, or returns empty, note it and proceed with whatever the others returned. Don't block on one flaky layer.
25
+
26
+ `wize-code-review` is the reference implementation (see its step-02).
27
+
14
28
  ## Voice
15
29
 
16
30
  - Warm welcome. One sharp question. Then I get out of the way.
@@ -123,6 +123,8 @@ function collectAssets(kitRoot, { profiles = ['core'] } = {}) {
123
123
  description: `${fm.phase || fm.gate || 'workflow'}: ${fm.name || fm.code}`,
124
124
  body: bodyAfterFrontmatter(content),
125
125
  overlay: fm.overlay || null,
126
+ owner: fm.owner || null,
127
+ subtask: fm.subtask === 'true',
126
128
  srcDir: path.dirname(wfPath)
127
129
  });
128
130
  }
@@ -142,6 +144,8 @@ function collectAssets(kitRoot, { profiles = ['core'] } = {}) {
142
144
  description: fm.module ? `${fm.module} skill: ${fm.name || fm.code}` : (fm.name || fm.code),
143
145
  body: bodyAfterFrontmatter(content),
144
146
  overlay: fm.overlay || null,
147
+ owner: fm.owner || null,
148
+ subtask: fm.subtask === 'true',
145
149
  srcDir: path.dirname(skPath)
146
150
  });
147
151
  }
@@ -21,7 +21,7 @@ const { cmdSync: cmdSyncReal } = require('./commands/sync.js');
21
21
  const { cmdAgentList, cmdAgentCreate, cmdAgentEdit } = require('./commands/agent.js');
22
22
  const { cmdDoctor } = require('./commands/doctor.js');
23
23
  const { cmdDocumentProject } = require('./commands/document-project.js');
24
- const { detectHarnessCli, manualInstructions } = require('./baseline.js');
24
+ const { compose: composeOnboarding } = require('./onboarding.js');
25
25
 
26
26
  const INTERACTIVE = process.stdout.isTTY && process.stdin.isTTY;
27
27
 
@@ -536,39 +536,11 @@ async function cmdInstall(args) {
536
536
  }
537
537
  }
538
538
 
539
- // Offer to open a detected AI harness interactively.
540
- if (INTERACTIVE) {
541
- const ideTargetCodes = targets.map(t => t.code);
542
- const harnesses = detectHarnessCli({ preferIde: ideTargetCodes });
543
- if (harnesses.length) {
544
- const primary = harnesses[0];
545
- const { cmd, args } = primary.buildCmd('/wize-orchestrator');
546
- const shown = `${cmd} ${args.map(a => /\s/.test(a) ? '"' + a + '"' : a).join(' ')}`;
547
- const openHarness = await confirm(
548
- `\nA harness was detected: ${primary.code} (${primary.path}).\n` +
549
- `Open it now with Wizer? (runs: ${shown})`,
550
- true
551
- );
552
- if (openHarness) {
553
- const { spawnSync } = require('node:child_process');
554
- console.log(`\nLaunching ${shown}...`);
555
- spawnSync(cmd, args, { cwd, stdio: 'inherit' });
556
- } else {
557
- console.log(manualInstructions(primary).replace('/wize-document-project', '/wize-orchestrator'));
558
- }
559
- } else {
560
- console.log('\nNo AI harness CLI detected on PATH (claude / codex / opencode).');
561
- console.log('Open your IDE in this repo and run: /wize-orchestrator');
562
- }
563
- }
564
-
565
539
  console.log('\n──────────────────────────────────────────────────────────────');
566
540
  console.log('Done.');
567
541
  console.log('');
568
- console.log('Next steps:');
569
- console.log(' 1. ⚠ Restart your IDE — many harnesses load skills only at startup.');
570
- console.log(' 2. Activate Wizer and say: "Brief me on this project."');
571
- console.log(' (or use any /wize-* slash command from the auto-complete list)');
542
+ console.log('⚠ Restart your IDE — many harnesses load skills only at startup.');
543
+ console.log(composeOnboarding(detection, profiles));
572
544
  console.log('');
573
545
  console.log('Keep the kit in sync over time:');
574
546
  console.log(' • `npx wize-dev-kit update` refresh adapters after a new kit version');