From gang
Multi-agent business committee that evaluates product ideas through structured expert debate. Use when: the user wants to evaluate a business idea, product concept, or strategic initiative; needs multi-perspective analysis (product, market, UX, finance, tech, strategy); wants scored strategic plans with Go/No-Go recommendation; needs Google Stitch-ready UI specifications; or asks to 'run a gang review', 'evaluate this idea', 'should we build this'. Subcommands: init, think, debate, score, advise, deliver, reinit, run, status, config, evaluations, validate.
npx claudepluginhub ebnrdwan/gangplugin --plugin gangThis skill uses the workspace's default tool permissions.
A 6-stage pipeline that orchestrates configurable domain experts through structured debate to produce evidence-backed, rubric-anchored scored strategic plans and executive-ready recommendations. Every aspect is configurable: roles, debate mode, cost budget, model routing, evidence linking, scoring rubrics, validation, and failure handling.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Share bugs, ideas, or general feedback.
A 6-stage pipeline that orchestrates configurable domain experts through structured debate to produce evidence-backed, rubric-anchored scored strategic plans and executive-ready recommendations. Every aspect is configurable: roles, debate mode, cost budget, model routing, evidence linking, scoring rubrics, validation, and failure handling.
Throughout this document:
{output_root} — resolved from state.json.output_root (e.g., .gang/, .gang/features/stock-details/, .gang/projects/mobile-app/){plugin_root} — resolved from ${CLAUDE_PLUGIN_ROOT}config — loaded from .gang/config.yamlParse the user's command to determine which stage(s) to run:
| Command | Action |
|---|---|
/gang or /gang run | Run ALL 6 stages end-to-end |
/gang init | Stage 1 only — context onboarding, evidence population |
/gang think | Stage 2 only — committee setup + parallel expert analysis |
/gang debate | Stage 3 only — cross-review debate |
/gang score | Stage 4 only — rubric-anchored plan synthesis and scoring |
/gang advise | Stage 5 only — CEO/CTO advisory with guardrails |
/gang deliver | Stage 6 — generate GO Package (requires GO/CONDITIONAL-GO) |
/gang reinit | Re-run INIT on existing session — refreshes context, resets downstream |
/gang status | Show current progress, committee roster, cost, validation |
/gang config | Show or edit .gang/config.yaml |
/gang evaluations | List all evaluations (features + projects) |
/gang validate | Run validation checks on current session |
For stages 2-6, check that prerequisite stages are complete by reading {output_root}/state.json.
If prerequisites are missing, inform the user and suggest running the missing stage first.
Every stage begins by loading configuration:
.gang/config.yaml — if missing, use defaults from {plugin_root}/skills/gang/references/default-config.yaml{output_root} from {output_root}/state.json (or .gang/ for flat){output_root}/state.json for session stateconfig.cost.enabled is true:Before each stage:
{output_root}/state.json cost totalsbudget_limit > 0:
warn_at% → show warning: "Budget at {X}% — consider switching to light mode or fewer agents"block_at% → block and ask: "Budget reached {X}%. Continue anyway? [yes/no]"Estimation method:
config.cost.model_rates for the agent's resolved modelAfter each agent completes:
state.json.cost.stages.{stage}.tokens_in, tokens_out, estimated_usdstate.json.cost.stages.{stage}.by_agent.{agent_name} with per-agent breakdownstate.json.cost.total_estimated_usdconfig.routing.mode is budget-adaptive):When approaching budget limits, auto-downgrade models using config.routing.downgrade_priority (last entry downgrades first):
Show the user when a downgrade occurs: "Budget at {X}% — downgrading {agent} from {old_model} to {new_model}"
config.routing.mode: manual): Use config.roles.{agent}.model exactlyconfig.routing.mode: budget-adaptive): Start with configured model, downgrade based on budget (see above)config.routing.mode: multi-provider): Check if agent is in any provider's best_for list:
{plugin_root}/scripts/external-dispatch.shfallback Claude modelconfig.roles.{agent}.modelWhen routing to an external provider:
bash {plugin_root}/scripts/external-dispatch.sh --provider {name} --model {model} --input {prompt_file} --output {output_file}0: Success — read output file and continue10: Provider unavailable → try fallback11: Malformed response → try fallback12: Timeout → try fallback13: Rate limited → try fallbackstate.json.agent_results.{agent}config.failure_handling.enabled is true:For each agent dispatch (Claude or external):
retry_on_failure and retries < max_retries: retry onceskip_expensive_retry_over_budget: skip retry with expensive modelfallback_on_failure: try the fallback Claude model (haiku)status: failed in state.json.agent_results"agent_results": {
"{agent-name}": {
"status": "success|failed|incomplete|skipped",
"model_used": "{model}",
"provider": "{claude|perplexity|gemini|copilot}",
"error_code": null,
"fallback_attempted": false
}
}
If any core agent (PM Lead, Finance Analyst, Solutions Architect) fails:
config.validation.enabled is true:Between stages (when validate_between_stages is true):
Run validation checks before proceeding to next stage:
validate_file_presence): verify expected files exist for completed stagesvalidate_evidence_refs): check evidence_ids in position papers reference entries in {output_root}/evidence.jsonvalidate_assumption_refs): check assumption_ids reference entries in {output_root}/assumptions.jsonvalidate_required_sections): check position papers have required headings (## Bottom Line, etc.)On validation failure:
strict: true → STOP, show detailed errors, ask user to fix before continuingstrict: false → WARN, show errors, continue anywayManual validation: /gang validate runs all checks and prints a report.
Goal: Deeply understand the project, research the competitive landscape, populate the evidence ledger, ask smart targeted questions, and produce a comprehensive context brief.
Before anything else, ask the user which quality mode to use. Use AskUserQuestion:
Based on selection:
config.modes.{selected_mode} in default-config.yaml.gang/config.yaml (enable/disable roles, set weights, debate mode, budget, etc.).gang/config.yaml and run /gang init again when readyAsk the user what they're evaluating. Use AskUserQuestion:
Based on selection:
bash {plugin_root}/scripts/init-gang.sh --type feature --name {slug}bash {plugin_root}/scripts/init-gang.sh --type project --name {slug}bash {plugin_root}/scripts/init-gang.sh --type flatThis is NOT a quick check — it's a thorough understanding of the entire project.
2a. Detect & classify the project:
package.json, requirements.txt, go.mod, Cargo.toml, build.gradle, *.xcodeproj, pubspec.yaml, etc.)2b. Understand the product (use Explore agent for large codebases):
2c. Populate Evidence Ledger (codebase scan):
When config.evidence.enabled and config.evidence.auto_populate_from_init are true:
For each significant finding from the project scan, add an entry to {output_root}/evidence.json:
{
"id": "ev-001",
"source": "codebase-scan",
"file": "{relative path}",
"date": "{YYYY-MM-DD}",
"type": "{tech-stack|feature-inventory|architecture|domain-model|monetization|auth-flow|data-source|dependency}",
"text": "{factual statement about what was found}",
"confidence": 0.95
}
Codebase evidence gets high confidence (0.85-0.99) since it's directly observed.
2d. Parse any user-provided context:
2e. Present understanding to the user: Show a concise summary of what you found:
Project Understanding
━━━━━━━━━━━━━━━━━━━━━━━
Product: {name}
Type: {web app / mobile app / API / etc.}
Stack: {key technologies}
Domain: {what it does in 1-2 sentences}
Features Found:
- {feature 1}
- {feature 2}
- ...
Evidence Collected: {N} entries from codebase scan
Evaluation Subject: {whole product / specific feature / specific page}
{If feature-specific: describe what the user wants to build/evaluate}
Ask: "Does this look right? Anything I'm missing?" — wait for confirmation before proceeding.
Before asking the user any questions, research the market.
3a. Web Research (when config.evidence.web_research.enabled is true):
Determine the research provider based on config.evidence.web_research.preferred_provider:
auto: try providers in fallback_chain order (first available)perplexity/gemini/claude: use that provider directly, fall back through chain on failureFor Claude web research: use WebSearch tool with the configured model.
For Perplexity/Gemini: use {plugin_root}/scripts/external-dispatch.sh with a research prompt.
If web_research.enabled: false → skip web research entirely. Evidence only has codebase facts.
3b. Identify competitors:
3c. Populate Evidence Ledger (web research):
For each market/competitive finding, add to {output_root}/evidence.json:
{
"id": "ev-{next_id}",
"source": "{perplexity-sonar-pro|gemini-2.5-pro|claude-websearch}",
"url": "{source URL}",
"date": "{YYYY-MM-DD}",
"type": "{competitor-pricing|competitor-feature|market-size|market-trend|user-behavior|regulatory|benchmark|financial-data|industry-report}",
"text": "{factual statement}",
"confidence": {0.5-0.9 depending on source quality}
}
3d. Write competitive scan:
Write {output_root}/competitive-scan.md with the same format as v1.2.0.
3e. Present findings to user:
Show the key competitors found and ask the user to confirm, add, or correct. Use AskUserQuestion.
Same as v1.2.0 — SKIP questions whose answers are obvious from scan. Adapt options to this specific project/market.
Round 0 — Domain Expert (always ask):
Question 0 — "Include a Domain Expert?"
If yes: run the Domain Expert Profiling Interview below, then generate {output_root}/domain-expert-profile.md using the template at {plugin_root}/skills/gang/references/domain-expert-template.md. Update state.json.domain_expert_enabled: true.
When the user opts in, ask 3 rounds of questions using AskUserQuestion. The goal is to build an expert profile that challenges assumptions and surfaces real constraints — NOT one that confirms existing plans. All questions adapt to the domain detected from the project scan.
Profiling Round 1 — Domain & Perspective (2 questions, single AskUserQuestion call):
Question P1a — "Which domain lens should the expert use?"
Question P1b — Sub-Specialization (conditional — only ask when the domain has meaningful sub-categories)
Many domains have internal specializations where the expert's advice changes dramatically depending on the niche. After P1a is answered, check if the chosen domain has sub-categories that would materially change the expert's perspective. If yes, ask this question in the SAME AskUserQuestion call as P2. If the domain is narrow enough already, skip P1b.
When to ask P1b: The domain has sub-categories where regulations, user behavior, unit economics, or technical requirements differ significantly between niches.
When to skip P1b: The domain is already specific enough (e.g., user picked "Regulatory Compliance (SEC/FINRA)" — that's already a niche).
Generate options dynamically based on the P1a answer. Examples by domain:
Finance / Trading / Signals:
Healthcare / Healthtech:
E-commerce / Marketplace:
Education / Edtech:
Logistics / Supply Chain:
For domains not listed above, dynamically generate 3-4 sub-specialization options based on the project scan findings. If the project scan reveals enough specifics to determine the sub-category (e.g., code clearly shows intraday candle data + real-time WebSocket feeds), pre-select the detected niche as the first option and mark it "(Detected from codebase)".
Impact of P1b on the profile: Sub-specialization answers directly shape:
## Your Persona — the expert's specific experience (e.g., "10 years building swing trading signal platforms" vs "former commodity futures desk analyst")## Key Expertise Areas — niche-specific knowledge (e.g., PDT rules for intraday vs suitability rules for long-term)## Industry Benchmarks — metrics vary dramatically by niche (e.g., signal accuracy expectations: 55% for intraday scalping is good, 55% for long-term value picks is terrible)## Common Pitfalls — niche-specific traps (e.g., "calling intraday signals 'predictions' without disclaimers" vs "recommending individual stocks without suitability assessment")Question P2 — "What perspective should the expert bring?"
Profiling Round 2 — Risk Focus & Blind Spots (2 questions, single AskUserQuestion call):
Question P3 — "What should the expert be most skeptical about?"
Question P4 — "What do teams in this domain typically get wrong?"
Profiling Round 3 — Benchmarks & Success Criteria (1 question):
Question P5 — "What should the expert benchmark success against?"
After all profiling questions are answered, generate {output_root}/domain-expert-profile.md using the template:
## Domain (broad domain)## Domain with sub-specialization, shape ## Key Expertise Areas to the specific niche, calibrate ## Industry Benchmarks to niche-appropriate metrics## Your Persona (craft the persona to match the chosen perspective AND sub-specialization)## Common Pitfalls in This Domain (prioritize the skepticism area)## Common Pitfalls + ## Industry Frameworks & Standards (these are now niche-specific thanks to P1b)## Industry Benchmarks and ## Competitive DynamicsCritical rule: The generated profile must NOT contain any positive assumptions about the project. The domain expert's job is to stress-test, not validate. The persona should be someone who has "seen projects like this fail" and knows exactly why.
Round 1 — Initiative & Strategy (3-4 questions max) Round 2 — Constraints (2-3 questions)
(Same question structure as v1.2.0 — see questions 1-6)
Write {output_root}/context-brief.md incorporating EVERYTHING: scan results, competitive research, evidence ledger summary, user answers, and any feature-specific context.
Use the same format as v1.2.0 but add:
## Evidence Base
{N} evidence entries collected ({M} from codebase scan, {K} from web research).
Full evidence ledger: `{output_root}/evidence.json`
Full assumptions ledger: `{output_root}/assumptions.json`
Agents MUST follow the Evidence & Assumptions Protocol (see dispatch prompts).
Update {output_root}/state.json:
stages_completedcurrent_stage to "think"active_agents based on config rolesIf config.validation.validate_between_stages is true:
evidence.json is valid (non-empty array, IDs sequential)context-brief.md existsstate.json is validGoal: Confirm the committee setup, then dispatch experts for independent analysis with evidence-backed position papers.
/gang think)Read .gang/config.yaml. Then use AskUserQuestion:
If config already has active roles (i.e., a previous setup exists):
Current Committee:
[on] PM Lead ............. deep (sonnet)
[on] Market Researcher ... deep (sonnet)
[off] UX Researcher ....... disabled
[on] Finance Analyst ..... deep (sonnet)
[on] Solutions Architect . deep (sonnet)
[off] Business Strategist . disabled
[off] Domain Expert ....... disabled
[on] CEO/CTO Advisor ..... deep (opus)
Debate: selective, 2 rounds
Mode: product_review
If no previous setup:
If "Custom" selected:
For each agent, ask: enabled? weight (light/deep)? Then update .gang/config.yaml.
After selection:
.gang/config.yamlstate.json.active_agents with list of enabled agent namesVerify "init" is in state.json.stages_completed. If not → suggest /gang init.
For each enabled agent in config.roles:
config.roles.{agent}.modelIf config.cost.enabled and config.cost.budget_limit > 0:
state.json.cost.total_estimated_usdFor each enabled agent, dispatch using the Agent tool in a SINGLE message (parallel execution).
Determine weight instruction:
config.roles.{agent}.weight is light: add to prompt: "Light Mode: Keep your analysis to 500 words maximum. Skip detailed frameworks. Deliver: (1) Bottom line in 2 sentences, (2) Top 3 findings with evidence, (3) Key risk. No tables over 5 rows."deep: standard full analysis.Determine model:
model parameter to the Agent tool (for Claude models).Agent prompt template (customize per agent):
Read the context brief at
{output_root}/context-brief.md. You are participating in a Gang business committee evaluation.Evidence & Assumptions Protocol:
- Read
{output_root}/evidence.json— these are the ONLY trusted facts.- For every major claim in your position paper, cite
evidence_ids: [ev-001, ev-003].- If you make a claim NOT backed by evidence, register it as an assumption in
{output_root}/assumptions.jsonwith a validation plan. Use the next availableas-{NNN}ID.- Reference
assumption_ids: [as-001]for assumption-backed claims.- Never present assumptions as facts. Tag confidence: verified / medium / assumed.
{weight_instruction}
Produce your position paper following your agent instructions exactly. Write your output to
{output_root}/position-papers/{agent-name}.md.Also read the debate protocol at
{plugin_root}/skills/gang/references/debate-protocol.md— you will need it in the next stage.{For gang-ux-researcher only: Also produce all 9 UX deliverable files in
{output_root}/ux-deliverables/. Read the Impeccable design rules at{plugin_root}/skills/gang/references/impeccable-design-rules.mdand the Stitch template at{plugin_root}/skills/gang/references/stitch-prompt-template.md.IMPORTANT — tag every deliverable file with a metadata comment at the very top, before any content:
<!-- ux:based-on stage: think plan: exploratory assumption_ids: [as-001, as-003] ← list every assumption this file depends on scope_signals: [full-feature-set] ← what scope assumptions are baked in stable_if: assumption_ids hold + scope unchanged -->This tag lets the DELIVER stage identify exactly which files need updating without re-reading all 9. Files like personas.md and jobs-to-be-done.md will almost always be stable. Wireframes and stitch-instructions.md are scope-sensitive and often need a delta pass.}
{For gang-domain-expert only: Read your domain profile at
{output_root}/domain-expert-profile.mdand adopt that persona.}
Once all agents complete:
{output_root}/position-papers/{output_root}/ux-deliverables/state.json.agent_resultsstate.json.cost.stages.thinkstate.json: add "think" to stages_completed, set current_stage to "debate"Goal: Experts challenge each other's positions, revise based on feedback, surface conflicts — all evidence-backed.
Read config.debate:
debate.enabled: false → skip debate entirely, go to SCOREmode determines Round 1 behavior:| Mode | Round 1 Behavior |
|---|---|
all-vs-all | Every agent reviews every other agent's position |
selective | Each agent only reviews targets listed in selective_pairs |
relevance-based | Auto-determine: PM↔Market, Finance↔Architect, UX↔PM, Strategy↔Finance, Domain→All |
focused | All agents debate only the topics in focused_topics |
max_rounds: 1 = Round 1 only (no revision), 2 = full debateround2_mode: ALWAYS all-vs-all — every critiqued agent must respondDispatch all enabled agents in parallel. Each agent's prompt:
You are in Stage 3 Round 1 of the Gang debate. Read the debate protocol at
{plugin_root}/skills/gang/references/debate-protocol.md.Evidence & Assumptions Protocol: Same as THINK stage — cite evidence_ids, register new assumptions.
Debate Mode: {mode} {If selective: "You are reviewing ONLY: {list of target agents}"} {If focused: "Focus your critique on these topics: {focused_topics}"} {If relevance-based: "You are reviewing: {auto-determined targets based on agent role}"} {If all-vs-all: "Review ALL other position papers."}
Read position papers in
{output_root}/position-papers/. For each target expert's position, write a critique following the Round 1 format in the debate protocol.Apply the Executive Mentor pre-mortem pattern: "Imagine this fails in 12 months — why?"
Write your complete review to
{output_root}/debate/round-1/{agent-name}-review.md.
max_rounds >= 2)After Round 1 completes, dispatch all critiqued agents in parallel (round2_mode is always all-vs-all):
You are in Stage 3 Round 2 of the Gang debate. Read the debate protocol at
{plugin_root}/skills/gang/references/debate-protocol.md.Evidence & Assumptions Protocol: Same rules — cite evidence, register assumptions.
Read your original position paper at
{output_root}/position-papers/{agent-name}.md. Read ALL Round 1 reviews in{output_root}/debate/round-1/.Produce a revised position following the Round 2 format. You MUST address every critique directed at your position.
Write to
{output_root}/debate/round-2/{agent-name}-revised.md.
After the final round completes, compile {output_root}/debate-log.md:
Present debate highlights to the user.
state.json: add "debate" to stages_completed, set current_stage to "score"Goal: Synthesize 1-2 competing plans from the converged debate and score them with rubric anchoring and evidence linking.
Read {output_root}/score-rubric.json (copied during INIT from default-score-rubric.json).
Read all Round 2 revised positions (or Round 1 reviews if max_rounds=1) and the debate log. Identify:
Produce 1-2 competing plans.
Score on 5 dimensions (or 6 if Domain Expert enabled):
| Dimension | Description | Score Sources |
|---|---|---|
| Market Viability | Is there a real market? | Market Researcher + Business Strategist |
| User Desirability | Do users want this? | UX Researcher + PM Lead |
| Technical Feasibility | Can we build it? | Solutions Architect |
| Financial Viability | Does the math work? | Finance/Risk Analyst |
| Strategic Alignment | Does this fit strategy? | Business Strategist + PM Lead |
| Domain Fit (if enabled) | Industry realities? | Domain Expert |
When config.scoring.enabled is true:
For EACH dimension, produce a rubric-anchored scorecard entry:
{
"dimension": "technical_feasibility",
"score": 7,
"rubric_anchor": "7",
"rubric_text": "{text from score-rubric.json for level 7}",
"evidence_ids": ["ev-003", "ev-007"],
"assumption_ids": ["as-002"],
"justification": "{Why this score — minimum 20 chars}",
"confidence": 0.8
}
Rules:
require_rubric_anchoring: score MUST map to a rubric level (use nearest: 1/3/5/7/9/10)require_evidence_linking: each score MUST cite at least one evidence_id from evidence.jsonrequire_assumption_linking: if score depends on an assumption, cite the assumption_idWrite {output_root}/scored-plans.md with the visual table format AND embed the structured scorecard JSON:
# Gang Scored Plans
## Plan A: {name}
{Brief description}
| Dimension | Score | Rubric | Evidence | Assumptions | Confidence | Justification |
|-----------|-------|--------|----------|-------------|------------|---------------|
| Market Viability | {1-10} | "{rubric text}" | ev-001, ev-005 | as-001 | {0-1} | {reason} |
| ... | | | | | | |
| **Weighted Average** | **{score}** | | | | **{avg}** | |
### Strengths
- {key strength}
### Weaknesses
- {key weakness}
---
<!-- SCORECARD_JSON
{full scorecard JSON matching scorecard.schema.json}
-->
state.json: add "score" to stages_completed, set current_stage to "advise"Goal: Final executive synthesis with Go/No-Go recommendation, subject to advisor guardrails.
Use the Agent tool to dispatch gang-ceo-cto-advisor (runs on Opus for deepest reasoning):
You are the CEO/CTO Advisor for the Gang business committee. This is Stage 5 — the final advisory.
Read ALL of these files:
{output_root}/context-brief.md{output_root}/evidence.json— the evidence ledger{output_root}/assumptions.json— the assumptions ledger- All files in
{output_root}/position-papers/- All files in
{output_root}/debate/round-2/(or round-1 if max_rounds=1){output_root}/debate-log.md{output_root}/scored-plans.md{output_root}/score-rubric.json{output_root}/domain-expert-profile.md(if it exists)Evidence & Assumptions Protocol: Your executive brief must cite evidence_ids for key claims. Review the assumptions ledger and flag unvalidated critical assumptions.
Advisor Guardrails: {If config.scoring.advisor_guardrails.require_rubric_for_go: "You CANNOT issue GO unless all critical dimensions (Market Viability, Technical Feasibility, Financial Viability) have rubric-anchored scores."} {If config.scoring.advisor_guardrails.require_validation_plans: "You CANNOT issue GO if any critical/high-importance assumption lacks a validation plan."} {If config.scoring.advisor_guardrails.auto_conditional_on_unvalidated: "If there are unvalidated critical assumptions, automatically downgrade GO → CONDITIONAL-GO. State which assumptions must be validated before the GO becomes unconditional."}
Partial Failure Check: Read
state.json.agent_results. If any core agent (PM Lead, Finance Analyst, Solutions Architect) hasstatus: failed:
- State in the brief: "Analysis incomplete: missing {agent} perspective due to {provider} failure."
- Degrade your overall confidence accordingly.
- You CANNOT issue unconditional GO with missing core agent analysis.
Produce your executive brief following your agent instructions exactly. Write to
{output_root}/executive-brief.md.
After the advisor completes:
{output_root}/executive-brief.md/gang deliverconfig.telemetry.enabled)If auto_prompt_postmortem is true, generate {output_root}/postmortem.md:
# Post-Mortem — {evaluation_name}
**Date:** {date}
**Session:** {session_id}
**Verdict:** {verdict}
**Mode:** {quality mode}
**Cost:** ~${total}
## 3-Month Check-In
### Was the verdict correct?
- [ ] Yes, we followed it and it was right
- [ ] Yes, but we didn't follow it
- [ ] No, we should have gone the other way
- [ ] Too early to tell
### Which assumptions were wrong?
| Assumption ID | Text | What Actually Happened |
|---|---|---|
### Which agent was most off-base?
| Agent | What They Got Wrong | Impact |
|---|---|---|
### What decision would you make differently?
{free text}
Tell the user: "A post-mortem template has been created at {output_root}/postmortem.md. Fill it in after 3 months to help calibrate future evaluations."
state.json: add "advise" to stages_completed, set current_stage to "deliver" (if GO) or "complete" (if NO-GO)When the user runs /gang deliver:
{output_root}/state.json — verify "advise" is in stages_completed{output_root}/executive-brief.md — check the verdict/gang reinit if conditions have changed.Before dispatching the deliverables writer, check whether UX deliverables need refinement.
1a. Build the UX Change Brief
Read the ux:based-on metadata comment at the top of each file in {output_root}/ux-deliverables/ (first comment block only — do NOT read full file content). Then read {output_root}/scored-plans.md, {output_root}/executive-brief.md, and {output_root}/assumptions.json.
Generate {output_root}/ux-change-brief.md:
# UX Change Brief
## What the Advisor Decided
- **Winning plan:** {plan name and key characteristics}
- **Features removed / descoped:** {list}
- **New constraints from advisor:** {e.g., "mobile-first only", kill switches that remove features}
- **CONDITIONAL-GO conditions affecting scope:** {any}
## Assumption Outcomes
| Assumption ID | Text | Outcome | UX Impact |
|---|---|---|---|
| as-001 | {text} | ✓ validated / ✗ failed / — unresolved | none / affects wireframes / affects personas |
## Delta Decision per File
| File | Stable? | Reason |
|------|---------|--------|
| personas.md | ✓ stable | User archetypes don't change with plan selection |
| jobs-to-be-done.md | ✓ stable | Jobs are independent of plan |
| user-journeys.md | check | Update only if a descoped feature removes a critical flow |
| information-architecture.md | check | Update if nav items removed |
| wireframes.md | check | Scope changes affect screen inventory |
| design-tokens.md | ✓ stable | Tokens are plan-independent |
| interaction-patterns.md | ✓ stable | Patterns are plan-independent |
| accessibility-notes.md | ✓ stable | WCAG requirements don't change with plan |
| stitch-instructions.md | check | Must reflect final feature set exactly |
## Files Requiring Delta Pass
{list only the files that need updating — typically 1-3 out of 9}
1b. Decide: delta pass or skip
1c. Dispatch UX Researcher in Delta Mode (when needed)
You are the UX Researcher returning for a surgical delta pass at the DELIVER stage. You already produced the full UX deliverables during THINK. Most of that work is still valid. Your ONLY job is to update the files listed under "Files Requiring Delta Pass" in
{output_root}/ux-change-brief.md.Read:
{output_root}/ux-change-brief.md— what changed and which files need updating{output_root}/executive-brief.md— the final verdict and constraints{output_root}/scored-plans.md— the winning plan- Each file listed under "Files Requiring Delta Pass" (full content)
For each file requiring a delta pass:
- Read the existing file fully
- Apply only the changes driven by the change brief — do not rewrite sections that remain valid
- Update the
ux:based-onmetadata tag: setstage: deliver, updateplan:to the winning plan name- Overwrite the file in
{output_root}/ux-deliverables/For files NOT listed: do NOT read them, do NOT touch them. Do NOT produce a position paper. Do NOT re-read evidence.json or context-brief.md unless a specific delta requires it. Be surgical — the goal is minimum tokens, maximum precision.
Once the UX delta pass is complete (or skipped), dispatch gang-deliverables-writer:
You are the Deliverables Writer for the Gang business committee. Generate the GO Package.
Read ALL committee artifacts:
{output_root}/context-brief.md{output_root}/evidence.json- All files in
{output_root}/position-papers/- All files in
{output_root}/debate/round-2/{output_root}/debate-log.md{output_root}/scored-plans.md{output_root}/executive-brief.md{output_root}/domain-expert-profile.md(if it exists)- All files in
{output_root}/ux-deliverables/(now refined for the winning plan){output_root}/ux-change-brief.md(if it exists — summarises what UX changed at DELIVER)Generate all 6 documents following your agent instructions. Write to
{output_root}/go-package/.
{output_root}/go-package/state.json: add "deliver" to stages_completed, set current_stage to "complete"When the user runs /gang status:
{output_root}/state.json and .gang/config.yamlGang Committee Status
━━━━━━━━━━━━━━━━━━━━━━━━
Session: {session_id}
Version: 1.3.1
Mode: {quality_mode}
Evaluation: {type} — {name}
Committee ({N} active):
[{on/off}] PM Lead ............. {weight} ({model})
[{on/off}] Market Researcher ... {weight} ({model/provider})
[{on/off}] UX Researcher ....... {weight} ({model})
[{on/off}] Finance Analyst ..... {weight} ({model/provider})
[{on/off}] Solutions Architect . {weight} ({model/provider})
[{on/off}] Business Strategist . {weight} ({model})
[{on/off}] Domain Expert ....... {weight} ({model})
[{on/off}] CEO/CTO Advisor ..... {weight} ({model})
Debate: {mode} · {max_rounds} rounds
Evidence: {N} entries · {M} assumptions tracked
Validation: {strict/relaxed} ({passing/failing})
[{status}] INIT ........... ${cost} {validation}
[{status}] THINK .......... ${cost} {validation} ({N}/{M} agents, {F} failures)
[{status}] DEBATE ......... ${cost}
[{status}] SCORE .......... ${cost}
[{status}] ADVISE ......... ${cost}
[{status}] DELIVER ........ ${cost}
Cost: ~${total} / ${budget} budget ({%})
Next: Run /gang {next_command} to continue
When the user runs /gang config:
.gang/config.yaml.gang/config.yaml to change settings. Changes take effect on the NEXT stage run."When the user runs /gang evaluations:
.gang/features/ and .gang/projects/state.json and show: name, type, current_stage, verdict (if available), date.gang/state.json exists at root levelGang Evaluations
━━━━━━━━━━━━━━━━
Features:
1. stock-details Stage: complete Verdict: CONDITIONAL-GO 2026-03-28
2. portfolio-view Stage: think Verdict: — 2026-03-30
Projects:
1. mobile-app Stage: advise Verdict: GO 2026-03-25
Flat: (none)
When the user runs /gang validate:
Run bash {plugin_root}/scripts/validate-gang.sh {output_root} (when available).
Or perform inline validation:
evidence.json against {plugin_root}/schemas/evidence.schema.jsonassumptions.json against {plugin_root}/schemas/assumptions.schema.jsonstate.json against {plugin_root}/schemas/state.schema.jsonevidence_ids referenced in position papers exist in evidence.jsonassumption_ids referenced exist in assumptions.jsonPrint report with pass/fail per check.
When the user runs /gang reinit:
{output_root}/state.json — verify it exists. If not → suggest /gang init.session_id.{
"stages_completed": ["init"],
"current_stage": "think",
"reinit_count": "{previous + 1}",
"last_reinit": "{ISO-8601 timestamp}"
}
/gang think to continue."{output_root}/state.json doesn't exist: suggest /gang initMitigations: