Overview
Add a storm war-room command that spins up multiple named Claude Code agents
in a shared workspace. Instead of one agent working alone, a team of agents with
defined roles collaborate, debate, and divide work until the task is done.
Motivation
Complex issues benefit from multiple perspectives — an Architect to plan, an
Engineer to implement, and a QA agent to validate. Rather than one agent doing
everything sequentially, war-room lets them run in parallel and self-organize.
Proposed CLI
storm war-room --issue 42
storm war-room --issue 42 --agents architect,engineer,qa
storm war-room --prompt "Build a dark mode toggle"
How it should work
- Storm reads the issue (or prompt) and creates a shared war-room session
- Each agent is a separate
claude -p process with a defined role + personality
- Agents communicate via a shared append-only event log (JSON file or SQLite)
- Each agent has a kibble budget — expensive operations (bash, file reads) cost kibble
- Agents can use these tools:
talk [room] [message] — post a message to the shared room
bash [command] — run a shell command (costs kibble)
transfer-kibble [amount] [agent] — send budget to another agent
read-file [path] — read a file (costs kibble)
- An orchestrator loop manages turn order (event-driven: agent A talks → agent B is prompted)
- When all agents agree the task is done, one outputs
%%STORM_DONE%% and a PR is opened
Agent roles (defaults)
| Agent |
Role |
Responsibility |
| Storm |
Architect |
Reads the issue, creates a plan, delegates tasks |
| Johnny |
Engineer |
Implements the code based on the plan |
| Alan |
QA |
Runs tests, reports failures back to the room |
Roles should be configurable via .storm/agents/ directory (same primitive pattern
as contexts and instructions).
.storm/agents/ structure
.storm/
└── agents/
├── architect/
│ └── AGENT.md # role description, kibble budget, personality
├── engineer/
│ └── AGENT.md
└── qa/
└── AGENT.md
AGENT.md frontmatter
name: Johnny
role: Engineer
kibble: 20
model: sonnet
You are Luna, a pragmatic senior engineer. You implement what the Architect
specifies, ask clarifying questions when the spec is unclear, and always run
the typecheck before declaring work done.
Shared event log format
Each event is a JSON line appended to .storm/session/{id}/events.jsonl:
{ "ts": 1234567890, "agent": "Johnny", "type": "talk", "room": "war-room", "data": "..." }
{ "ts": 1234567890, "agent": "Storm", "type": "bash", "room": "war-room", "data": "git diff" }
{ "ts": 1234567890, "agent": "Johnny", "type": "kibble", "room": "war-room", "data": { "to": "Storm", "amount": 3 } }
Terminal UI
Split view similar to the reference screenshot:
- Left panel: agent list with kibble budgets + room membership
- Right panel: live event stream
- Bottom panel: most recent agent messages
Acceptance criteria
References
- Inspired by ralphify and otto-agent
- Storm base tool: see existing
storm run implementation
Overview
Add a
storm war-roomcommand that spins up multiple named Claude Code agentsin a shared workspace. Instead of one agent working alone, a team of agents with
defined roles collaborate, debate, and divide work until the task is done.
Motivation
Complex issues benefit from multiple perspectives — an Architect to plan, an
Engineer to implement, and a QA agent to validate. Rather than one agent doing
everything sequentially, war-room lets them run in parallel and self-organize.
Proposed CLI
storm war-room --issue 42
storm war-room --issue 42 --agents architect,engineer,qa
storm war-room --prompt "Build a dark mode toggle"
How it should work
claude -pprocess with a defined role + personalitytalk [room] [message]— post a message to the shared roombash [command]— run a shell command (costs kibble)transfer-kibble [amount] [agent]— send budget to another agentread-file [path]— read a file (costs kibble)%%STORM_DONE%%and a PR is openedAgent roles (defaults)
Roles should be configurable via
.storm/agents/directory (same primitive patternas contexts and instructions).
.storm/agents/ structure
.storm/
└── agents/
├── architect/
│ └── AGENT.md # role description, kibble budget, personality
├── engineer/
│ └── AGENT.md
└── qa/
└── AGENT.md
AGENT.md frontmatter
name: Johnny
role: Engineer
kibble: 20
model: sonnet
You are Luna, a pragmatic senior engineer. You implement what the Architect
specifies, ask clarifying questions when the spec is unclear, and always run
the typecheck before declaring work done.
Shared event log format
Each event is a JSON line appended to
.storm/session/{id}/events.jsonl:{ "ts": 1234567890, "agent": "Johnny", "type": "talk", "room": "war-room", "data": "..." }
{ "ts": 1234567890, "agent": "Storm", "type": "bash", "room": "war-room", "data": "git diff" }
{ "ts": 1234567890, "agent": "Johnny", "type": "kibble", "room": "war-room", "data": { "to": "Storm", "amount": 3 } }
Terminal UI
Split view similar to the reference screenshot:
Acceptance criteria
storm war-room --issue <n>starts a session with default agentsclaude -pprocess%%STORM_DONE%%is emitted.storm/agents/References
storm runimplementation