@jamie-tam/forge 6.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/LICENSE +21 -0
- package/README.md +389 -0
- package/agents/architect.md +92 -0
- package/agents/builder.md +122 -0
- package/agents/code-reviewer.md +107 -0
- package/agents/concept-designer.md +207 -0
- package/agents/craft-reviewer.md +132 -0
- package/agents/critic.md +130 -0
- package/agents/doc-writer.md +85 -0
- package/agents/dreamer.md +129 -0
- package/agents/e2e-runner.md +89 -0
- package/agents/gotcha-hunter.md +127 -0
- package/agents/prototype-builder.md +193 -0
- package/agents/prototype-codifier.md +204 -0
- package/agents/prototype-reviewer.md +163 -0
- package/agents/security-reviewer.md +108 -0
- package/agents/spec-reviewer.md +94 -0
- package/agents/tracer.md +98 -0
- package/agents/wireframer.md +109 -0
- package/commands/abort.md +25 -0
- package/commands/bugfix.md +151 -0
- package/commands/evolve.md +118 -0
- package/commands/feature.md +236 -0
- package/commands/forge.md +100 -0
- package/commands/greenfield.md +185 -0
- package/commands/hotfix.md +98 -0
- package/commands/refactor.md +147 -0
- package/commands/resume.md +25 -0
- package/commands/setup.md +201 -0
- package/commands/status.md +27 -0
- package/commands/task-force.md +110 -0
- package/commands/validate.md +12 -0
- package/dist/__tests__/active-manifest.test.js +272 -0
- package/dist/__tests__/copy.test.js +96 -0
- package/dist/__tests__/gate-check.test.js +384 -0
- package/dist/__tests__/wiki.test.js +472 -0
- package/dist/__tests__/work-manifest.test.js +304 -0
- package/dist/active-manifest.js +229 -0
- package/dist/cli.js +158 -0
- package/dist/copy.js +124 -0
- package/dist/gate-check.js +326 -0
- package/dist/hooks.js +60 -0
- package/dist/init.js +140 -0
- package/dist/manifest.js +90 -0
- package/dist/merge.js +77 -0
- package/dist/paths.js +36 -0
- package/dist/uninstall.js +216 -0
- package/dist/update.js +158 -0
- package/dist/verify-manifest.js +65 -0
- package/dist/verify.js +98 -0
- package/dist/wiki-ui.js +310 -0
- package/dist/wiki.js +364 -0
- package/dist/work-manifest.js +798 -0
- package/hooks/config/gate-requirements.json +79 -0
- package/hooks/hooks.json +143 -0
- package/hooks/scripts/analyze-telemetry.sh +114 -0
- package/hooks/scripts/gate-enforcer.sh +164 -0
- package/hooks/scripts/pre-compact.sh +90 -0
- package/hooks/scripts/session-start.sh +81 -0
- package/hooks/scripts/telemetry.sh +41 -0
- package/hooks/scripts/wiki-lint.sh +87 -0
- package/hooks/templates/AGENTS.md.template +48 -0
- package/hooks/templates/CLAUDE.md.template +45 -0
- package/package.json +55 -0
- package/protocols/README.md +40 -0
- package/protocols/codex.md +151 -0
- package/protocols/graphify.md +156 -0
- package/references/common/agent-coordination.md +65 -0
- package/references/common/coding-standards.md +54 -0
- package/references/common/feature-tracking.md +21 -0
- package/references/common/io-protocol.md +36 -0
- package/references/common/phases.md +57 -0
- package/references/common/quality-gates.md +130 -0
- package/references/common/skill-authoring.md +154 -0
- package/references/common/skill-compliance.md +30 -0
- package/references/python/standards.md +44 -0
- package/references/react/standards.md +61 -0
- package/references/typescript/standards.md +42 -0
- package/rules/common/forge-system.md +59 -0
- package/rules/common/git-workflow.md +40 -0
- package/rules/common/guardrails.md +37 -0
- package/rules/common/quality-gates.md +18 -0
- package/rules/common/security.md +50 -0
- package/rules/common/skill-selection.md +78 -0
- package/rules/common/testing.md +58 -0
- package/rules/common/verification.md +39 -0
- package/skills/build-pr-workflow/SKILL.md +301 -0
- package/skills/build-pr-workflow/references/pr-template.md +62 -0
- package/skills/build-pr-workflow/references/subagent-merge.md +47 -0
- package/skills/build-pr-workflow/references/worktree-setup.md +125 -0
- package/skills/build-prototype/SKILL.md +264 -0
- package/skills/build-scaffold/SKILL.md +340 -0
- package/skills/build-tdd/SKILL.md +89 -0
- package/skills/build-wireframe/SKILL.md +110 -0
- package/skills/build-wireframe/assets/baseline-template.html +486 -0
- package/skills/build-wireframe/references/demo-walkthroughs.md +170 -0
- package/skills/build-wireframe/references/gotchas.md +188 -0
- package/skills/build-wireframe/references/legend-lines.md +141 -0
- package/skills/concept-slides/SKILL.md +192 -0
- package/skills/deliver-db-migration/SKILL.md +466 -0
- package/skills/deliver-deploy/SKILL.md +407 -0
- package/skills/deliver-onboarding/SKILL.md +198 -0
- package/skills/deliver-onboarding/references/document-templates.md +393 -0
- package/skills/deliver-onboarding/templates/getting-started.md +122 -0
- package/skills/discover-codebase-analysis/SKILL.md +448 -0
- package/skills/discover-requirements/SKILL.md +418 -0
- package/skills/discover-requirements/templates/prd.md +99 -0
- package/skills/discover-requirements/templates/technical-spec.md +123 -0
- package/skills/discover-requirements/templates/user-stories.md +76 -0
- package/skills/harden/SKILL.md +214 -0
- package/skills/iterate-prototype/SKILL.md +241 -0
- package/skills/plan-architecture/SKILL.md +457 -0
- package/skills/plan-architecture/templates/adr-template.md +52 -0
- package/skills/plan-architecture/templates/api-contract.md +99 -0
- package/skills/plan-architecture/templates/db-schema.md +81 -0
- package/skills/plan-architecture/templates/system-design.md +111 -0
- package/skills/plan-brainstorm/SKILL.md +433 -0
- package/skills/plan-design-system/SKILL.md +279 -0
- package/skills/plan-task-decompose/SKILL.md +454 -0
- package/skills/quality-code-review/SKILL.md +286 -0
- package/skills/quality-security-audit/SKILL.md +292 -0
- package/skills/quality-security-audit/references/audit-report-template.md +89 -0
- package/skills/quality-security-audit/references/owasp-checks.md +178 -0
- package/skills/quality-test-execution/SKILL.md +435 -0
- package/skills/quality-test-plan/SKILL.md +297 -0
- package/skills/quality-test-plan/references/test-type-guide.md +263 -0
- package/skills/quality-test-plan/templates/e2e-test-plan.md +72 -0
- package/skills/quality-test-plan/templates/integration-test-plan.md +74 -0
- package/skills/quality-test-plan/templates/load-test-plan.md +111 -0
- package/skills/quality-test-plan/templates/smoke-test-plan.md +68 -0
- package/skills/quality-test-plan/templates/unit-test-plan.md +56 -0
- package/skills/quality-uiux/SKILL.md +481 -0
- package/skills/support-debug/SKILL.md +464 -0
- package/skills/support-dream/SKILL.md +213 -0
- package/skills/support-gotcha/SKILL.md +249 -0
- package/skills/support-runtime-reachability/SKILL.md +190 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-01-passes-app-use/src/app.ts +7 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-01-passes-app-use/src/handlers/cases.ts +7 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-02-orphan-no-app-use/src/app.ts +8 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-02-orphan-no-app-use/src/handlers/cases.ts +7 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-03-orphan-import-only/src/App.tsx +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-03-orphan-import-only/src/components/RingingBanner.tsx +7 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-03-orphan-import-only/src/hooks/useTwilio.ts +6 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-04-jsx-component-rendered/src/App.tsx +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-04-jsx-component-rendered/src/components/MyComp.tsx +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-05-jsx-component-not-rendered/src/App.tsx +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-05-jsx-component-not-rendered/src/components/Orphan.tsx +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-06-class-instantiated/src/lib/Service.ts +6 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-06-class-instantiated/src/main.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-07-class-not-instantiated/src/lib/Lonely.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-07-class-not-instantiated/src/main.ts +2 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-08-default-export-imported-and-called/src/handler.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-08-default-export-imported-and-called/src/main.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-09-default-export-orphan/src/handler.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-09-default-export-orphan/src/main.ts +2 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-10-aliased-named-export/src/lib.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-10-aliased-named-export/src/main.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-11-re-export-chain/src/lib/index.ts +1 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-11-re-export-chain/src/lib/internal.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-11-re-export-chain/src/main.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-12-test-only-caller/src/util.test.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-12-test-only-caller/src/util.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-13-gated-pending-annotation/src/future.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-14-untraceable-annotation/src/decorated.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-15-untraceable-empty/src/lazy.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-16-python-module/src/lib.py +15 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-16-python-module/src/main.py +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-17-router-use/src/parent.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-17-router-use/src/routes/cases.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-18-shadowed-name-fp/src/lib/foo.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-18-shadowed-name-fp/src/other.ts +8 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-19-same-name-different-module/src/handlers/cases.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-19-same-name-different-module/src/handlers/users.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-19-same-name-different-module/src/main.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-20-aliased-import-usage/src/handlers/cases.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-20-aliased-import-usage/src/main.ts +4 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-21-mixed-default-and-named/src/lib.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-21-mixed-default-and-named/src/main.ts +5 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-22-dynamic-import-then-caller/src/lib.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-22-dynamic-import-then-caller/src/main.ts +8 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-23-dynamic-import-with-space/src/lib.ts +3 -0
- package/skills/support-runtime-reachability/scripts/__fixtures__/case-23-dynamic-import-with-space/src/main.ts +7 -0
- package/skills/support-runtime-reachability/scripts/check.mjs +638 -0
- package/skills/support-runtime-reachability/scripts/check.test.mjs +244 -0
- package/skills/support-skill-validator/SKILL.md +194 -0
- package/skills/support-skill-validator/references/false-positives.md +59 -0
- package/skills/support-skill-validator/references/validation-checks.md +280 -0
- package/skills/support-system-guide/SKILL.md +311 -0
- package/skills/support-task-force/SKILL.md +265 -0
- package/skills/support-task-force/references/dispatch-pattern.md +178 -0
- package/skills/support-task-force/references/synthesis-template.md +126 -0
- package/skills/support-wiki-bootstrap/SKILL.md +37 -0
- package/skills/support-wiki-lint/SKILL.md +196 -0
- package/skills/support-wiki-lint/scripts/lint.mjs +488 -0
- package/skills/support-wiki-lint/scripts/lint.test.mjs +196 -0
- package/templates/README.md +23 -0
- package/templates/aiwiki/CLAUDE.md.template +78 -0
- package/templates/aiwiki/schemas/architecture.md +118 -0
- package/templates/aiwiki/schemas/convention.md +112 -0
- package/templates/aiwiki/schemas/decision.md +144 -0
- package/templates/aiwiki/schemas/gotcha.md +118 -0
- package/templates/aiwiki/schemas/oracle.md +105 -0
- package/templates/aiwiki/schemas/session.md +125 -0
- package/templates/manifests/bugfix.yaml +41 -0
- package/templates/manifests/feature.yaml +69 -0
- package/templates/manifests/greenfield.yaml +61 -0
- package/templates/manifests/hotfix.yaml +45 -0
- package/templates/manifests/refactor.yaml +44 -0
- package/templates/manifests/v5/SCHEMA.md +327 -0
- package/templates/manifests/v5/feature.yaml +77 -0
- package/templates/manifests/v6/SCHEMA.md +199 -0
- package/templates/wiki-html/dream-detail.html +378 -0
- package/templates/wiki-html/dreams-list.html +155 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: support-task-force
|
|
3
|
+
description: "Use when the user prompts a punch list of independent tasks (numbered or bulleted, ≥3 items) OR explicitly invokes /task-force. Classifies each task by type, assembles the right specialist team per task, dispatches all in parallel, aggregates results. Phase-aware: light teams during prototype phases (fast iteration), full crew during harden/production (no shortcuts). Optional Codex adversarial pairing when consent is on. REFUSES command-shaped work — routes feature/bugfix/refactor items to their owning commands instead."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Task Force
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Users don't always invoke `/feature` or `/bugfix`. The daily reality is a paste-in punch list: "do these 10 things: 1. update README; 2. explore option X; 3. add a test for Y; 4. ...". Doing those in series in one context window is slow, conflict-prone, and skips the Codex second-opinion that catches real bugs.
|
|
11
|
+
|
|
12
|
+
This skill assembles a **task-force per item** — a specialist team sized for the task's type and the project's current phase — and dispatches them in parallel. Each task-force has a Claude reviewer/builder paired with a Codex sibling (when the task is non-trivial). The skill REFUSES to swallow command-shaped work; items that look like features/bugfixes/refactors get routed to their owning commands.
|
|
13
|
+
|
|
14
|
+
**Core principle:** match team size to task complexity AND to the project's current phase. Prototype phases iterate fast with light teams. Production phases demand the full crew.
|
|
15
|
+
|
|
16
|
+
**Announce at start:** "I'm using support-task-force to dispatch N task-forces in parallel — M routed to commands, K running in light mode, L running in full mode." If `!max` / `--full-power` detected: "...running in `!max` mode — production teams enforced regardless of phase."
|
|
17
|
+
|
|
18
|
+
## When to Use
|
|
19
|
+
|
|
20
|
+
Fire when **any** of:
|
|
21
|
+
- User types `/task-force` explicitly
|
|
22
|
+
- User prompt contains a numbered list (`1. xxx 2. xxx 3. xxx`) with ≥3 items
|
|
23
|
+
- User prompt contains a bulleted list (`- xxx / - xxx / - xxx`) with ≥3 items AND items look like work-tasks (not casual mentions)
|
|
24
|
+
|
|
25
|
+
Confirm with user before dispatching if auto-detected (one-line: "Detected a 5-item task list; dispatching task-forces — say 'no' to cancel").
|
|
26
|
+
|
|
27
|
+
Do NOT use for:
|
|
28
|
+
- A single task (use the appropriate command or skill directly)
|
|
29
|
+
- A list where every item is command-shaped (route to commands instead, don't even invoke this skill)
|
|
30
|
+
- Ad-hoc questions or conversation (this is for *do these things*, not *tell me about*)
|
|
31
|
+
|
|
32
|
+
## Process
|
|
33
|
+
|
|
34
|
+
### Step 0: Codex consent (per `protocols/codex.md`)
|
|
35
|
+
|
|
36
|
+
Run the Codex consent flow ONCE for the whole task-force run. The choice (Verify / Takeover / Skip / Never) propagates to every per-task dispatch. Record in `.forge/task-force/{run-id}/codex.yaml`.
|
|
37
|
+
|
|
38
|
+
### Step 1: Detect repo phase (or honor full-power override)
|
|
39
|
+
|
|
40
|
+
**Magic keyword override.** If the user's prompt contains either `!max` (short form) OR `--full-power` (canonical form), skip all phase detection and resolve to `production` mode unconditionally. This forces:
|
|
41
|
+
- Full-crew team templates for every task type (see Step 4 production tables)
|
|
42
|
+
- Mandatory Codex consent (Verify mode) — no opt-out for the run
|
|
43
|
+
- No "Codex skipped" prototype-mode shortcuts even on quick / docs tasks
|
|
44
|
+
- Acknowledgement in the run announcement: "Running in `!max` mode — production teams enforced regardless of phase."
|
|
45
|
+
|
|
46
|
+
Use the override when:
|
|
47
|
+
- You're working in a prototype phase but the task touches code that WILL go to production
|
|
48
|
+
- You want maximum review coverage regardless of the repo's current phase state
|
|
49
|
+
- You're auditing or hardening prototype code before promoting it
|
|
50
|
+
- You explicitly want the cost (more agents, more tokens) for the safety
|
|
51
|
+
|
|
52
|
+
Otherwise, detect phase from the active work manifest: glob `.forge/work/*/*/manifest.yaml` and pick the most recently modified. Look at `phases.{phase}.status` and `phase_plan.{phase}`.
|
|
53
|
+
|
|
54
|
+
Resolve to one of:
|
|
55
|
+
|
|
56
|
+
| Phase mode | Detected by |
|
|
57
|
+
|---|---|
|
|
58
|
+
| **prototype** | Phase 4 active or phase_plan has `iterate-prototype: active` and `harden: skipped`/`not-yet`; OR no manifest exists AND `pocs/*` directory is present |
|
|
59
|
+
| **production** | Phase 5+ active (`harden`, `production-build`, `quality`, `deliver`) OR no manifest AND the repo has shipped production code (presence of `src/`, `dist/`, packaged code) |
|
|
60
|
+
| **ambiguous** | No manifest, no clear prototype/production signal — ask the user |
|
|
61
|
+
|
|
62
|
+
Phase mode determines team sizing in Step 4. The override (`!max` / `--full-power`) short-circuits this to `production` regardless of detection.
|
|
63
|
+
|
|
64
|
+
**Detection rules for the override:**
|
|
65
|
+
- Match either form (whichever the user types):
|
|
66
|
+
- **Short form:** `!max` (literal, case-insensitive — `!MAX`, `!Max` also accepted)
|
|
67
|
+
- **Canonical form:** `--full-power` (literal, case-insensitive)
|
|
68
|
+
- Must be a whole word: bounded by whitespace, line start, or line end
|
|
69
|
+
- Do NOT match accidental variants: `max` alone (no bang), `!maximum`, `full power` (no dashes), `--fullpower`, `-full-power`
|
|
70
|
+
- Strict matching prevents false triggers from casual English
|
|
71
|
+
- Strip the keyword from each task's text before classification (it's a run-level flag, not part of any task)
|
|
72
|
+
|
|
73
|
+
### Step 2: Parse the task list
|
|
74
|
+
|
|
75
|
+
Extract items from the prompt. Number them 1..N. For each item, record:
|
|
76
|
+
- raw text
|
|
77
|
+
- detected verbs (build, fix, explore, document, audit, refactor, deploy, ...)
|
|
78
|
+
- detected scope (file path, subsystem, "everywhere", ...)
|
|
79
|
+
|
|
80
|
+
If N > 20 (hard cap), refuse and ask user to batch. If N > 10 (soft cap), warn and offer to batch.
|
|
81
|
+
|
|
82
|
+
### Step 3: Classify each task
|
|
83
|
+
|
|
84
|
+
For each task, apply this classifier in order — first match wins:
|
|
85
|
+
|
|
86
|
+
| Pattern | Classification |
|
|
87
|
+
|---|---|
|
|
88
|
+
| "add a (new) feature", "implement Y end-to-end", "build Z product" | **command-shaped: /feature** |
|
|
89
|
+
| "fix bug N", "investigate failure X" (single bug, multi-step) | **command-shaped: /bugfix** |
|
|
90
|
+
| "refactor module M", "restructure X" | **command-shaped: /refactor** |
|
|
91
|
+
| "start new project", "scaffold from scratch" | **command-shaped: /greenfield** |
|
|
92
|
+
| "hotfix production", "rollback X" | **command-shaped: /hotfix** |
|
|
93
|
+
| "audit security", "review for vulns", "check OWASP" | **security** (dispatch `quality-security-audit` skill) |
|
|
94
|
+
| "review this code/PR" (with diff scope) | **review** (dispatch `quality-code-review` skill) |
|
|
95
|
+
| "explore Y", "compare X vs Y", "find best approach for Z", "research Q" | **research** |
|
|
96
|
+
| "fix bug" (single-line, obvious) OR "find why X fails" (one trace) | **debug** |
|
|
97
|
+
| "write README", "document Y", "add comments to Z" | **docs** |
|
|
98
|
+
| "build feature slice" / "add function" / "implement X" (small, scoped) | **dev** |
|
|
99
|
+
| "fix typo", "bump dep", "rename variable" | **quick** |
|
|
100
|
+
| ≥4 subsystems touched OR ≥3 verbs combined | **complex** |
|
|
101
|
+
| Anything else | **ambiguous** (ask user) |
|
|
102
|
+
|
|
103
|
+
Command-shaped items get **routed out** — they do NOT get a task-force. Surface them to the user with: "Item X looks like a `/feature` — running it as a forge command instead. The remaining items continue as task-forces." User can override.
|
|
104
|
+
|
|
105
|
+
### Step 4: Assemble team per task
|
|
106
|
+
|
|
107
|
+
Apply both the **task type** AND the **phase mode**:
|
|
108
|
+
|
|
109
|
+
#### Phase mode: prototype (light teams, fast iteration)
|
|
110
|
+
|
|
111
|
+
| Task type | Team |
|
|
112
|
+
|---|---|
|
|
113
|
+
| dev | `prototype-builder` only (Codex skipped unless user requested Verify) |
|
|
114
|
+
| research | 1 explorer (`architect` OR `tracer` OR `doc-writer`, picked by scope) — no Codex |
|
|
115
|
+
| debug | dispatch `support-debug` skill (owns its own chain) — no extra Codex |
|
|
116
|
+
| docs | `doc-writer` only |
|
|
117
|
+
| review | dispatch `quality-code-review` (it picks risk-tier; prototype work is usually Low) |
|
|
118
|
+
| security | dispatch `quality-security-audit` |
|
|
119
|
+
| quick | 1 agent inline (no dispatch, no Codex) |
|
|
120
|
+
| complex | full crew defined below — but warn user "complex task in prototype mode; consider /feature instead" |
|
|
121
|
+
|
|
122
|
+
#### Phase mode: production (full crew, mandatory Codex)
|
|
123
|
+
|
|
124
|
+
| Task type | Team |
|
|
125
|
+
|---|---|
|
|
126
|
+
| dev | `builder` + dispatch `quality-code-review` skill + Codex (per consent) |
|
|
127
|
+
| research | 2-3 explorers from `architect`, `tracer`, `doc-writer`, `spec-reviewer` (pick by scope) + Codex |
|
|
128
|
+
| debug | dispatch `support-debug` skill + `gotcha-hunter` after tracer locks scope + Codex |
|
|
129
|
+
| docs | `doc-writer` + Codex verify |
|
|
130
|
+
| review | dispatch `quality-code-review` (full chain) + Codex adversarial |
|
|
131
|
+
| security | dispatch `quality-security-audit` + `security-reviewer` + Codex adversarial |
|
|
132
|
+
| quick | 1 agent + Codex verify (production is no-shortcuts even for one-liners that touch shipped code) |
|
|
133
|
+
| complex | full crew: `architect` + `tracer` + (`builder` or `prototype-builder` by phase) + dispatch `quality-code-review` + `spec-reviewer` + `security-reviewer` (if risk triggers) + `e2e-runner` (if E2E plan exists) + Codex adversarial |
|
|
134
|
+
|
|
135
|
+
#### Phase mode: ambiguous
|
|
136
|
+
|
|
137
|
+
Ask the user: "Is this a prototype or production task list?" Then proceed with the matching template.
|
|
138
|
+
|
|
139
|
+
### Step 5: Dispatch all task-forces in parallel
|
|
140
|
+
|
|
141
|
+
For each non-routed task:
|
|
142
|
+
1. Compose the prompt: include the task text, the detected type, phase mode, the team composition.
|
|
143
|
+
2. Fire each agent in the team as a background subagent (`run_in_background: true`).
|
|
144
|
+
3. For tasks whose team includes "dispatch X skill", spawn ONE agent that invokes that skill (the skill handles its own internal multi-agent chain).
|
|
145
|
+
4. Tag each agent with `task-force/{run-id}/{task-n}/{role}` for telemetry.
|
|
146
|
+
|
|
147
|
+
Batched dispatch ceiling: 20-25 agents per `<function_calls>` block. For 10 tasks × 4 agents = 40 agents, plan 2 dispatch rounds.
|
|
148
|
+
|
|
149
|
+
### Step 6: Accumulate
|
|
150
|
+
|
|
151
|
+
Background notifications arrive asynchronously:
|
|
152
|
+
- Save each agent's result to `.forge/task-force/{run-id}/task-{n}/{role}.md`
|
|
153
|
+
- Maintain a per-task status line: `Task 3 of 10: 2 of 3 agents complete (1 pending)`
|
|
154
|
+
- DO NOT narrate every individual agent completion to the user — batch updates every ≥3 returns
|
|
155
|
+
|
|
156
|
+
### Step 7: Per-task verdict
|
|
157
|
+
|
|
158
|
+
When all agents for a task return, synthesize:
|
|
159
|
+
- If Claude builder + Codex sibling agree → mark task `complete-consensus`
|
|
160
|
+
- If they disagree → mark `complete-divergent`, surface the disagreement
|
|
161
|
+
- If only one returned (other failed/timeout) → mark `complete-single-source`, flag for user attention
|
|
162
|
+
- If both failed → mark `failed`, recommend retry or single-task fallback
|
|
163
|
+
|
|
164
|
+
Per-task output goes to `.forge/task-force/{run-id}/task-{n}/verdict.md`.
|
|
165
|
+
|
|
166
|
+
### Step 8: Run summary
|
|
167
|
+
|
|
168
|
+
After all tasks finish (or hit batch limit), produce one consolidated report:
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
Task-Force Run {run-id} — {N} tasks, {M} routed to commands
|
|
172
|
+
|
|
173
|
+
| # | Task | Type | Team size | Status | Conflicts |
|
|
174
|
+
|---|------|------|-----------|--------|-----------|
|
|
175
|
+
| 1 | update README | docs | 1 | consensus | — |
|
|
176
|
+
| 2 | explore option X | research | 3 | consensus | — |
|
|
177
|
+
| 3 | implement Y | dev | 2 | divergent | Claude says ship, Codex says blocking |
|
|
178
|
+
| ... | ... | ... | ... | ... | ... |
|
|
179
|
+
|
|
180
|
+
Routed to commands:
|
|
181
|
+
- Item 4 (add payment feature) → /feature
|
|
182
|
+
- Item 7 (fix critical bug) → /bugfix
|
|
183
|
+
|
|
184
|
+
Followups:
|
|
185
|
+
- Resolve divergence on task 3 (recommend manual review)
|
|
186
|
+
- Run /feature for item 4 when ready
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Write the summary to `.forge/task-force/{run-id}/run-summary.md` and surface to user.
|
|
190
|
+
|
|
191
|
+
### Step 9: Stop
|
|
192
|
+
|
|
193
|
+
This skill does ONE run per invocation. If the user wants to iterate on findings, they invoke the appropriate command or this skill again with a new list.
|
|
194
|
+
|
|
195
|
+
## I/O Contract
|
|
196
|
+
|
|
197
|
+
| Field | Value |
|
|
198
|
+
|---|---|
|
|
199
|
+
| Requires | A user-provided task list (parsed in Step 2); optionally an active manifest for phase detection |
|
|
200
|
+
| Produces | `.forge/task-force/{run-id}/codex.yaml`, `.forge/task-force/{run-id}/tasks.yaml` (classification), `.forge/task-force/{run-id}/task-{n}/{role}.md` per agent, `.forge/task-force/{run-id}/task-{n}/verdict.md` per task, `.forge/task-force/{run-id}/run-summary.md` |
|
|
201
|
+
| Updates manifest | If a feature/bugfix manifest is active, append `phases.{phase}.task-force-runs: [{run-id}]`. Otherwise no manifest update — task-force runs are not phase-gated. |
|
|
202
|
+
| Feeds into | `/feature`, `/bugfix`, `/refactor` (for routed items); `support-gotcha` (for recurring patterns surfaced across tasks) |
|
|
203
|
+
|
|
204
|
+
## Agent Dispatch
|
|
205
|
+
|
|
206
|
+
This skill is itself a dispatcher. It does NOT have a single subagent type — it picks per task per phase from the table in Step 4.
|
|
207
|
+
|
|
208
|
+
| Helper skill it dispatches | When |
|
|
209
|
+
|---|---|
|
|
210
|
+
| `quality-code-review` | Every dev/review task in production mode (skill owns its own agent chain) |
|
|
211
|
+
| `support-debug` | Every debug task (skill owns tracer + gotcha-hunter chain) |
|
|
212
|
+
| `quality-security-audit` | Every security task |
|
|
213
|
+
| `deliver-onboarding` | Every docs task that's onboarding-scoped |
|
|
214
|
+
|
|
215
|
+
Raw agents it dispatches directly:
|
|
216
|
+
- `prototype-builder` (prototype dev)
|
|
217
|
+
- `builder` (production dev, when not going through quality-code-review)
|
|
218
|
+
- `architect`, `tracer`, `doc-writer`, `spec-reviewer`, `security-reviewer` (research/explore)
|
|
219
|
+
- `e2e-runner` (complex tasks with E2E plan)
|
|
220
|
+
- Codex sibling (via `codex:codex-rescue` subagent type or protocol invocation)
|
|
221
|
+
|
|
222
|
+
## Integration
|
|
223
|
+
|
|
224
|
+
| Step | Skill / Command | Why |
|
|
225
|
+
|---|---|---|
|
|
226
|
+
| Pre-dispatch consent | `protocols/codex.md` | Codex pairing requires consent ONCE per run |
|
|
227
|
+
| Task routing-out | `/feature`, `/bugfix`, `/refactor`, `/greenfield`, `/hotfix` | Command-shaped items must use commands, not task-forces |
|
|
228
|
+
| Per-task dev | `quality-code-review` skill | Production dev tasks get the full review chain |
|
|
229
|
+
| Per-task debug | `support-debug` skill | Debug tasks get tracer + gotcha-hunter |
|
|
230
|
+
| Per-task security | `quality-security-audit` skill | Security tasks get the OWASP-aware audit chain |
|
|
231
|
+
| Post-run gotcha | `support-gotcha` | Patterns surfaced across multiple task-forces deserve a recorded lesson |
|
|
232
|
+
|
|
233
|
+
## Red Flags
|
|
234
|
+
|
|
235
|
+
| Red Flag | What it means |
|
|
236
|
+
|---|---|
|
|
237
|
+
| Every task gets the same team | Classifier is failing; user-pasted heterogeneous tasks don't all become "dev" |
|
|
238
|
+
| Routed-to-command items >50% | User typed a feature description, not a punch list — recommend dropping this skill entirely and using `/feature` |
|
|
239
|
+
| Codex consent skipped silently | Means no second-opinion across the whole run — for production-mode tasks this is a regression |
|
|
240
|
+
| 0 conflicts across all tasks | Either every task was trivial OR Claude+Codex are echoing each other; sample-check |
|
|
241
|
+
| Complex tasks in prototype mode | Probably should be a /feature; warn user before proceeding |
|
|
242
|
+
| Run-id directories never get cleaned | Add a periodic prune; aiwiki/dream or /evolve should handle it |
|
|
243
|
+
| Soft cap warning ignored repeatedly | User has misframed work — recommend splitting into milestones |
|
|
244
|
+
|
|
245
|
+
## Anti-Patterns
|
|
246
|
+
|
|
247
|
+
**Swallowing command-shaped work.** If the user types "add a payment feature, then audit security, then ship", DO NOT run a task-force — that's three workflows pretending to be three tasks. Route them: `/feature` → `quality-security-audit` → `/feature` deploy phase. Task-force is for items that DON'T fit a workflow.
|
|
248
|
+
|
|
249
|
+
**Phase-blind sizing.** Spawning the full crew on a Phase-4 prototype task wastes tokens AND violates the prototype-throwaway principle. Always read phase first.
|
|
250
|
+
|
|
251
|
+
**Skipping Codex on production tasks.** "Quick" is not an excuse in production mode. The whole point of pairing is to catch the bug Claude-alone would miss (this skill exists because the v6 audit demonstrated exactly that pattern, Phase 4 caught telemetry.sh regression Claude missed).
|
|
252
|
+
|
|
253
|
+
**Ignoring divergent verdicts.** Claude+Codex disagreement is a SIGNAL, not noise. Surface it. Let the user adjudicate.
|
|
254
|
+
|
|
255
|
+
**Letting `.forge/task-force/` grow forever.** Each run leaves a directory. Add to `support-dream` consolidation scope, or document a cleanup pattern.
|
|
256
|
+
|
|
257
|
+
**Auto-dispatching without confirmation when auto-detected.** Numbered lists in user prose aren't always task lists (could be a survey of options, a sequence diagram, etc.). Confirm before firing 40 agents.
|
|
258
|
+
|
|
259
|
+
## References
|
|
260
|
+
|
|
261
|
+
- `references/dispatch-pattern.md` — bash recipes, prompt templates, sizing guidance
|
|
262
|
+
- `references/synthesis-template.md` — per-task verdict + run-summary structures
|
|
263
|
+
- `agents/critic.md` — voice calibration for research/review cells
|
|
264
|
+
- `protocols/codex.md` — Codex consent flow
|
|
265
|
+
- This skill's design lineage: born from the v6-migration audit's fanout pattern, rescoped to daily ad-hoc task lists per dogfood feedback.
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Task-Force Dispatch Pattern
|
|
2
|
+
|
|
3
|
+
Operational recipes for spawning per-task Claude+Codex teams.
|
|
4
|
+
|
|
5
|
+
## Phase detection (Step 1)
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Check for !max / --full-power override FIRST (case-insensitive, whole-word)
|
|
9
|
+
if echo "$USER_PROMPT" | grep -qiE '(^|[[:space:]])(!max|--full-power)($|[[:space:]])'; then
|
|
10
|
+
PHASE_MODE=production
|
|
11
|
+
CODEX_FORCED=verify
|
|
12
|
+
FULL_POWER=1
|
|
13
|
+
# Strip the keyword from task texts before classification
|
|
14
|
+
else
|
|
15
|
+
FULL_POWER=0
|
|
16
|
+
|
|
17
|
+
# Glob the active manifest
|
|
18
|
+
manifest=$(ls -t .forge/work/*/*/manifest.yaml 2>/dev/null | head -1)
|
|
19
|
+
|
|
20
|
+
if [ -z "$manifest" ]; then
|
|
21
|
+
# No active manifest — check repo state
|
|
22
|
+
if [ -d pocs ] && [ ! -d dist ]; then
|
|
23
|
+
PHASE_MODE=prototype
|
|
24
|
+
elif [ -d dist ] || [ -d src ]; then
|
|
25
|
+
PHASE_MODE=production
|
|
26
|
+
else
|
|
27
|
+
PHASE_MODE=ambiguous
|
|
28
|
+
fi
|
|
29
|
+
else
|
|
30
|
+
# Manifest exists — read phase state
|
|
31
|
+
current=$(yq '.phases | to_entries | map(select(.value.status == "in-progress")) | .[0].key' "$manifest")
|
|
32
|
+
case "$current" in
|
|
33
|
+
concept|wireframe|prototype|iterate) PHASE_MODE=prototype ;;
|
|
34
|
+
harden|production-build|quality|deliver) PHASE_MODE=production ;;
|
|
35
|
+
*) PHASE_MODE=ambiguous ;;
|
|
36
|
+
esac
|
|
37
|
+
fi
|
|
38
|
+
fi
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Magic keyword reference:**
|
|
42
|
+
|
|
43
|
+
- Short form: `!max` (preferred for daily use)
|
|
44
|
+
- Canonical form: `--full-power` (verbose, self-documenting)
|
|
45
|
+
- Both case-insensitive
|
|
46
|
+
- Must be whole words (bounded by whitespace or string boundary)
|
|
47
|
+
- Either form forces `PHASE_MODE=production` and `CODEX_FORCED=verify`
|
|
48
|
+
- Stripped from task text before classification (it's a run-level flag)
|
|
49
|
+
|
|
50
|
+
Reject silent variants — do NOT match `max` alone (no bang), `!maximum`, `full power` (no dashes), `--fullpower` (no internal dash), `-full-power` (one dash). Strict matching prevents false positives from casual English.
|
|
51
|
+
|
|
52
|
+
## Task classification (Step 3)
|
|
53
|
+
|
|
54
|
+
Apply regex/heuristic match in order, first-match wins:
|
|
55
|
+
|
|
56
|
+
```python
|
|
57
|
+
classifiers = [
|
|
58
|
+
(r'(?i)add (a |an )?new feature|build .* product|implement .* end-to-end', 'command:/feature'),
|
|
59
|
+
(r'(?i)fix bug|investigate failure', 'command:/bugfix'),
|
|
60
|
+
(r'(?i)refactor|restructure', 'command:/refactor'),
|
|
61
|
+
(r'(?i)hotfix production|rollback', 'command:/hotfix'),
|
|
62
|
+
(r'(?i)scaffold .* (project|repo)|start new project', 'command:/greenfield'),
|
|
63
|
+
(r'(?i)audit security|owasp|vuln', 'security'),
|
|
64
|
+
(r'(?i)review (this )?(code|pr|diff)', 'review'),
|
|
65
|
+
(r'(?i)explore|compare .* (vs|or)|find best|research|investigate options', 'research'),
|
|
66
|
+
(r'(?i)why does .* fail|debug|trace', 'debug'),
|
|
67
|
+
(r'(?i)write (a |the )?readme|document|add comments|docstring', 'docs'),
|
|
68
|
+
(r'(?i)fix typo|bump dep|rename var|rename const', 'quick'),
|
|
69
|
+
# falls through to: dev (default for code work), complex (if multi-subsystem), ambiguous
|
|
70
|
+
]
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Team assembly (Step 4) — by phase × type
|
|
74
|
+
|
|
75
|
+
### Prototype mode teams (light, fast)
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
dev → 1 agent: prototype-builder
|
|
79
|
+
research → 1 agent: architect | tracer | doc-writer (by scope)
|
|
80
|
+
debug → 1 dispatch: support-debug skill
|
|
81
|
+
docs → 1 agent: doc-writer
|
|
82
|
+
review → 1 dispatch: quality-code-review (low-risk tier)
|
|
83
|
+
security → 1 dispatch: quality-security-audit
|
|
84
|
+
quick → 1 agent inline (no dispatch)
|
|
85
|
+
complex → warn + full crew (Codex flagged this; consider /feature)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Production mode teams (full crew, mandatory Codex)
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
dev → 1 agent (builder) + 1 dispatch (quality-code-review) + 1 Codex
|
|
92
|
+
research → 2-3 agents (architect, tracer, doc-writer/spec-reviewer) + 1 Codex
|
|
93
|
+
debug → 1 dispatch (support-debug) + 1 agent (gotcha-hunter) + 1 Codex
|
|
94
|
+
docs → 1 agent (doc-writer) + 1 Codex verify
|
|
95
|
+
review → 1 dispatch (quality-code-review full chain) + 1 Codex adversarial
|
|
96
|
+
security → 1 dispatch (quality-security-audit) + 1 agent (security-reviewer) + 1 Codex adversarial
|
|
97
|
+
quick → 1 agent + 1 Codex verify
|
|
98
|
+
complex → architect + tracer + builder + dispatch quality-code-review + spec-reviewer + security-reviewer (if risk) + e2e-runner (if E2E plan) + Codex adversarial
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Per-agent prompt template
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
You are agent {role} in task-force task {n} of {N}, run-id {run-id}.
|
|
105
|
+
|
|
106
|
+
Task type: {dev|research|debug|docs|review|security|quick|complex}
|
|
107
|
+
Phase mode: {prototype|production}
|
|
108
|
+
Codex consent: {verify|takeover|skip|never}
|
|
109
|
+
|
|
110
|
+
TASK:
|
|
111
|
+
{verbatim task text from user list}
|
|
112
|
+
|
|
113
|
+
Repository context:
|
|
114
|
+
- cwd: {abs path}
|
|
115
|
+
- active manifest: {path or "none"}
|
|
116
|
+
- last commit: {sha}
|
|
117
|
+
|
|
118
|
+
Your role: {builder|reviewer|explorer|tracer|doc-writer|...}
|
|
119
|
+
Your scope: {paths, subsystem, or "whole repo"}
|
|
120
|
+
|
|
121
|
+
OUTPUT:
|
|
122
|
+
- Result of doing the task (code diffs, findings, document, etc.)
|
|
123
|
+
- One-line verdict for the task-force aggregator: PASS / CONCERNS / FAIL
|
|
124
|
+
- Hand off any followups by writing them to .forge/task-force/{run-id}/task-{n}/followups.md
|
|
125
|
+
|
|
126
|
+
Cap your output at {N} words. Save artifacts under .forge/task-force/{run-id}/task-{n}/{role}.{ext}.
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Batched dispatch ceiling
|
|
130
|
+
|
|
131
|
+
20-25 Agent tool calls per `<function_calls>` block. For 10 tasks × avg 3 agents = 30 agents, plan 2 dispatch rounds.
|
|
132
|
+
|
|
133
|
+
## Per-task aggregator (Step 7)
|
|
134
|
+
|
|
135
|
+
```python
|
|
136
|
+
verdicts = [parse_verdict(role_output) for role_output in role_outputs]
|
|
137
|
+
|
|
138
|
+
if all(v == "PASS" for v in verdicts):
|
|
139
|
+
status = "complete-consensus"
|
|
140
|
+
elif any(v == "FAIL" for v in verdicts) and "PASS" in verdicts:
|
|
141
|
+
status = "complete-divergent"
|
|
142
|
+
elif all(v == "FAIL" for v in verdicts):
|
|
143
|
+
status = "failed"
|
|
144
|
+
elif len(verdicts) < expected_count:
|
|
145
|
+
status = "complete-single-source"
|
|
146
|
+
else:
|
|
147
|
+
status = "complete-with-concerns"
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Failure modes
|
|
151
|
+
|
|
152
|
+
| Failure | Symptom | Action |
|
|
153
|
+
|---|---|---|
|
|
154
|
+
| Background agent timeout | Notification never arrives | Mark agent failed, fall through to single-source verdict |
|
|
155
|
+
| Codex sandbox can't write | "operation blocked in sandbox" | Codex outputs uncommitted; Claude commits or main session commits |
|
|
156
|
+
| Two agents touch same file | Edit tool conflict | Partition more aggressively |
|
|
157
|
+
| Classifier picks command-shaped but rest heterogeneous | Some routed, some not | Surface routing decisions, continue with remainder |
|
|
158
|
+
| User cancels mid-run | Receives interrupt | Mark in-flight tasks abandoned; preserve completed outputs |
|
|
159
|
+
|
|
160
|
+
## Sizing examples
|
|
161
|
+
|
|
162
|
+
| Punch list | Tasks | Phase | Agents fired |
|
|
163
|
+
|---|---|---|---|
|
|
164
|
+
| 3 docs items | 3 | prototype | 3 |
|
|
165
|
+
| 5 quick chores | 5 | prototype | 5 |
|
|
166
|
+
| 5 quick chores | 5 | production | 10 |
|
|
167
|
+
| 2 dev + 1 research + 1 debug + 1 docs | 5 | prototype | 5 (very lean) |
|
|
168
|
+
| Same 5 mixed | 5 | production | 12-14 |
|
|
169
|
+
| 10 heterogeneous | 10 | production | 25-40 |
|
|
170
|
+
| 15 tasks (soft cap warning) | 15 | production | 40-60 — offer batch |
|
|
171
|
+
| 25 tasks (over hard cap) | 25 | any | REFUSE — split |
|
|
172
|
+
|
|
173
|
+
## Cleanup
|
|
174
|
+
|
|
175
|
+
`.forge/task-force/{run-id}/` accumulates per-run. Prune via:
|
|
176
|
+
- `/evolve` (include task-force cleanup as a step)
|
|
177
|
+
- Manual: `find .forge/task-force -maxdepth 1 -mtime +30 -exec rm -rf {} +`
|
|
178
|
+
- `support-dream` could consolidate task-force runs into aiwiki summary entries before prune
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Task-Force Output Templates
|
|
2
|
+
|
|
3
|
+
Use these for per-task verdicts (Step 7) and run summaries (Step 8).
|
|
4
|
+
|
|
5
|
+
## Per-task verdict
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
# Task {n} Verdict — {short task title}
|
|
9
|
+
|
|
10
|
+
**Type:** {dev|research|debug|docs|review|security|quick|complex}
|
|
11
|
+
**Phase mode:** {prototype|production}
|
|
12
|
+
**Team:** {list of roles}
|
|
13
|
+
**Status:** {complete-consensus | complete-divergent | complete-single-source | failed}
|
|
14
|
+
|
|
15
|
+
## Result
|
|
16
|
+
|
|
17
|
+
{1-2 sentences summarizing what was done / found}
|
|
18
|
+
|
|
19
|
+
## Agent verdicts
|
|
20
|
+
|
|
21
|
+
| Role | Verdict | Brief |
|
|
22
|
+
|------|---------|-------|
|
|
23
|
+
| builder (Claude) | PASS | <one line> |
|
|
24
|
+
| code-reviewer (Claude) | CONCERNS | <one line> |
|
|
25
|
+
| code-reviewer (Codex) | PASS | <one line> |
|
|
26
|
+
|
|
27
|
+
## Disagreements (if any)
|
|
28
|
+
|
|
29
|
+
- Claude code-reviewer flagged X as a concern; Codex did not. Reason for divergence: <agent explanation>
|
|
30
|
+
- Recommendation: <manual review | accept Claude | accept Codex | re-dispatch>
|
|
31
|
+
|
|
32
|
+
## Artifacts
|
|
33
|
+
|
|
34
|
+
- `.forge/task-force/{run-id}/task-{n}/builder.md`
|
|
35
|
+
- `.forge/task-force/{run-id}/task-{n}/code-reviewer-claude.md`
|
|
36
|
+
- `.forge/task-force/{run-id}/task-{n}/code-reviewer-codex.md`
|
|
37
|
+
- `.forge/task-force/{run-id}/task-{n}/followups.md` (if any)
|
|
38
|
+
|
|
39
|
+
## Followups (if any)
|
|
40
|
+
|
|
41
|
+
- <item> — owner: <user | next task-force run | /evolve>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Run summary
|
|
45
|
+
|
|
46
|
+
```markdown
|
|
47
|
+
# Task-Force Run {run-id}
|
|
48
|
+
|
|
49
|
+
**Started:** {ISO-8601}
|
|
50
|
+
**Completed:** {ISO-8601}
|
|
51
|
+
**Phase mode:** {prototype|production|ambiguous}
|
|
52
|
+
**Codex consent:** {verify|takeover|skip|never}
|
|
53
|
+
|
|
54
|
+
## Input
|
|
55
|
+
|
|
56
|
+
{verbatim user prompt or task list}
|
|
57
|
+
|
|
58
|
+
## Classification
|
|
59
|
+
|
|
60
|
+
| # | Task | Type | Routed |
|
|
61
|
+
|---|------|------|--------|
|
|
62
|
+
| 1 | Update README | docs | — |
|
|
63
|
+
| 2 | Explore caching options | research | — |
|
|
64
|
+
| 3 | Implement payment integration | command:/feature | ✅ routed |
|
|
65
|
+
| ... | ... | ... | ... |
|
|
66
|
+
|
|
67
|
+
## Outcomes
|
|
68
|
+
|
|
69
|
+
| # | Status | Team size | Conflicts | Followups |
|
|
70
|
+
|---|--------|-----------|-----------|-----------|
|
|
71
|
+
| 1 | consensus | 1 | — | — |
|
|
72
|
+
| 2 | consensus | 3 | — | — |
|
|
73
|
+
| 4 | divergent | 2 | Claude PASS, Codex CONCERNS | manual review |
|
|
74
|
+
| 5 | failed | 1 | both agents timed out | retry |
|
|
75
|
+
|
|
76
|
+
## Routed to commands
|
|
77
|
+
|
|
78
|
+
- Item 3 → `/feature` (run when ready)
|
|
79
|
+
|
|
80
|
+
## Followup actions
|
|
81
|
+
|
|
82
|
+
1. Resolve divergence on task 4 (recommend manual review of file X)
|
|
83
|
+
2. Retry task 5 (consider /bugfix if recurring)
|
|
84
|
+
3. Invoke `/feature` for routed item 3
|
|
85
|
+
|
|
86
|
+
## Stats
|
|
87
|
+
|
|
88
|
+
- Tasks: {N}
|
|
89
|
+
- Routed: {M}
|
|
90
|
+
- Executed: {N - M}
|
|
91
|
+
- Total agents dispatched: {K}
|
|
92
|
+
- Wall time: {minutes}
|
|
93
|
+
- Cells with Claude+Codex consensus: {X}/{N - M}
|
|
94
|
+
- Cells with divergence: {Y}/{N - M}
|
|
95
|
+
|
|
96
|
+
## Next steps
|
|
97
|
+
|
|
98
|
+
If divergence > 30%, sample-check a few task-force outputs — your classifier or team-assembly might be miscalibrated.
|
|
99
|
+
|
|
100
|
+
If all tasks PASSED with no divergence, run a `/evolve` to consider whether patterns recurred enough to warrant capturing as a gotcha or rule.
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Severity / verdict definitions
|
|
104
|
+
|
|
105
|
+
Per-agent verdict vocabulary:
|
|
106
|
+
|
|
107
|
+
- **PASS** — task done as specified, no concerns
|
|
108
|
+
- **CONCERNS** — done with caveats; followups recommended but not blocking
|
|
109
|
+
- **FAIL** — task could not be completed (blocked, unknown, hit error)
|
|
110
|
+
|
|
111
|
+
Per-task status:
|
|
112
|
+
|
|
113
|
+
- **complete-consensus** — all team members agree PASS or all agree CONCERNS
|
|
114
|
+
- **complete-divergent** — team members disagree (e.g., PASS vs FAIL); user should adjudicate
|
|
115
|
+
- **complete-single-source** — only one agent returned; use with caution
|
|
116
|
+
- **failed** — multiple agents failed; task did not complete
|
|
117
|
+
|
|
118
|
+
## When to escalate to a command
|
|
119
|
+
|
|
120
|
+
After run summary, if any task is `complete-divergent` AND the divergence is over a load-bearing question (security, data-loss, contract change), recommend escalating:
|
|
121
|
+
|
|
122
|
+
- Dev task with divergent verdicts → `quality-code-review` skill standalone for that change
|
|
123
|
+
- Debug task with divergent verdicts → `support-debug` skill standalone
|
|
124
|
+
- Research task with divergent verdicts → user adjudication required
|
|
125
|
+
|
|
126
|
+
Task-force is for parallel speed. When agreement breaks down, the right tool is depth, not parallelism.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: support-wiki-bootstrap
|
|
3
|
+
description: "Use when a command needs to create the aiwiki directory and template-backed wiki scaffolding before work starts."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Wiki Bootstrap
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Scaffold `aiwiki/` exactly once so gotchas, decisions, conventions, architecture notes, sessions, raw captures, proposals, and schemas have a home before workflow phases write to them.
|
|
11
|
+
|
|
12
|
+
**Announce at start:** "I'm using the support-wiki-bootstrap skill to ensure aiwiki is ready."
|
|
13
|
+
|
|
14
|
+
## Procedure
|
|
15
|
+
|
|
16
|
+
If `aiwiki/` already exists at the project root, skip silently. If `.claude/templates/aiwiki/` is missing, surface the broken install to the user and stop; the repair path is `npx @jamie-tam/forge init`.
|
|
17
|
+
|
|
18
|
+
Run the bootstrap commands from the project root:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
mkdir -p aiwiki/{decisions,gotchas,conventions,architecture,sessions,raw,proposed,schemas,oracles}
|
|
22
|
+
cp .claude/templates/aiwiki/schemas/*.md aiwiki/schemas/
|
|
23
|
+
cp .claude/templates/aiwiki/CLAUDE.md.template aiwiki/CLAUDE.md
|
|
24
|
+
[ -f aiwiki/INDEX.md ] || printf "# Wiki Index\n\n(Empty -- populated as work happens.)\n" > aiwiki/INDEX.md
|
|
25
|
+
[ -f aiwiki/projectbrief.md ] || printf "# %s\n\n(One-paragraph description.)\n" "$(basename "$(pwd)")" > aiwiki/projectbrief.md
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
If the calling command already knows the project name or stack, update `aiwiki/projectbrief.md` after bootstrapping rather than replacing an existing user-edited file.
|
|
29
|
+
|
|
30
|
+
## I/O Contract
|
|
31
|
+
|
|
32
|
+
| Field | Value |
|
|
33
|
+
|---|---|
|
|
34
|
+
| **Requires** | Project root with `.claude/templates/aiwiki/` installed |
|
|
35
|
+
| **Produces** | `aiwiki/` directories, `aiwiki/CLAUDE.md`, schema files, `aiwiki/INDEX.md`, `aiwiki/projectbrief.md` |
|
|
36
|
+
| **Feeds into** | Commands and skills that write gotchas, decisions, conventions, architecture notes, sessions, raw captures, or proposals |
|
|
37
|
+
| **Updates manifest** | None |
|