War room
Lite research agents on proposal, experiment and review
npx -y skills add frankaging/lite-research-agents --skill war-roomAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Multi-agent research war room. Personas debate in sequential turns through two phases — ideation and proposal writing. Persona persistence and drift detection are enforced every turn via the persistent-persona skill.
SKILL.md
8.0 KB, as published. Nobody here has run it
War Room Skill
A war room runs personas through a structured two-phase session:
-
Phase 1 — Ideation (5 rounds max): personas debate the research idea question by question. Ends early on consensus (all
[AGREE]or[PASS], no[OBJECT]) or two consecutive all-[PASS]rounds. Output:memory/war-room/idea-snapshot.md -
Phase 2 — Proposal (5 rounds max): personas collaboratively draft each proposal section. Output:
memory/war-room/proposal-draft.md
Configurations
Defined in skills/war-room/personas/agents.json under the configurations key.
| Name | Participants | Use when |
|---|---|---|
full | Creative, Senior Prof, Young Faculty, Industry Liaison | Deep ideation, novel directions, full proposal needed |
1on1 | Senior Professor, Young Faculty | Quick feasibility check, tight scope |
The configuration is specified in PROJECT.md frontmatter under war_room.configuration. Default: full.
Consensus Protocol
Every persona response must end with one of:
| Tag | Meaning |
|---|---|
[AGREE] | I accept the current position |
[PASS] | No strong view either way |
[OBJECT: reason] | I reject — give specific reason |
Do not embed tags mid-response. They must be the final line.
Single-Agent Fallback (Codex / no subagent spawning)
If you cannot spawn subagents, run the same loop inline. For each persona turn:
- Print a clear header:
--- [Round N] <Persona Name> --- - Adopt that persona fully for your response — voice, stance, debate style, red lines.
- End with the consensus tag (
[AGREE],[PASS], or[OBJECT: reason]). - Return to moderator role between turns to write the log entry and check consensus.
Drift detection still applies: before each turn, re-read the persona definition and note whether your previous response for that persona drifted from their stance.
Playbook
Follow this sequence exactly. You are the moderator/orchestrator throughout.
Setup
-
Spawn the monitor in a new terminal window so the user can watch the session live:
- macOS:
osascript -e 'tell application "Terminal" to do script "cd '"'"'<repo_root>'"'"' && python skills/war-room/monitor.py --project <project_path>"' - Linux (with display):
xterm -title "War Room Monitor" -e "python skills/war-room/monitor.py --project <project_path>" & - If the spawn fails, continue silently — the monitor is optional.
Replace
<repo_root>with the absolute path to this repo and<project_path>with the active project folder path. The monitor requiresrich(pip install rich). - macOS:
-
Read
skills/war-room/personas/agents.json. Load the selected configuration's participant list and synthesiser index. -
For each participant, read their persona file (e.g.
skills/war-room/personas/senior-professor.md). -
Read
skills/persistent-persona/SKILL.mdandskills/memory-checkpoint/SKILL.md— you will apply these every turn. -
Check if
memory/war-room/discussion-log.mdexists.- If yes: load it — you are resuming a session. Read
memory/SUMMARY.mdfor current phase and round. - If no: create
memory/war-room/discussion-log.mdwith a header block (project name, configuration, timestamp).
- If yes: load it — you are resuming a session. Read
-
Ensure
memory/.private/folder exists for persona memos.
Phase 1 — Ideation
For each round (up to 5):
For each participant in configuration order:
a. Prepare persona context
- Read
memory/.private/agent-<index>-memo.mdif it exists. - Check the most recent
Drift flag. Ifyes, prepend a PERSONA RESET block to the subagent SI:PERSONA RESET: I am <persona name>. My core stance: <one-line from persona file>. I may have drifted last round. I am recommitting before engaging. I will not update positions without new evidence.
b. Call Agent subagent with this SI (in order):
first-principlescontent- Persona definition (full persona file content)
persistent-personaskill instructions- (if drift) PERSONA RESET block
- The discussion log so far
User message: "It's your turn. Respond to the discussion. End your response with [AGREE], [PASS], or [OBJECT: reason]."
c. Append to log
- Append the response to
memory/war-room/discussion-log.mdin this format:--- **[Round N] <Persona Name>** <response text>
d. Write persona memo
- Append to
memory/.private/agent-<index>-memo.md:## <YYYYMMDD_HHMMSS> **Persona**: <name> **Session summary**: <one sentence> **Position changes**: <what changed, what evidence caused it> **Pressure events**: <did the persona hold under pressure?> **Mental state**: <reasoning from own stance or mirroring group?> **Drift flag**: <yes | no>
After all participants have spoken in a round:
e. Check consensus
- If all responses end with
[AGREE]or[PASS]and no[OBJECT]: Phase 1 ends early. - If two consecutive rounds were all
[PASS]: Phase 1 ends early.
f. Checkpoint
- Write
memory/checkpoints/<timestamp>/agent-0.md(your moderator state: current round, phase, next action). - Update
memory/SUMMARY.md.
g. Synthesiser snapshot (after round 3 or on early exit)
- Call a subagent with the synthesiser persona + discussion log.
- Task: "Summarise the agreed research idea so far in 3-5 bullet points."
- Write output to
memory/war-room/idea-snapshot.md.
Phase 2 — Proposal
Read skills/research-proposal/SKILL.md now. The proposal has 6 sections.
Assign one section per round (or pair related sections). Run the same per-turn loop as Phase 1, but each subagent's task is:
"Draft your contribution to Section N: <section name>. Build on what others have written. End with [AGREE], [PASS], or [OBJECT: reason]."
After each round, the synthesiser appends the agreed section draft to memory/war-room/proposal-draft.md.
Finalization
- Call a final subagent with the synthesiser persona + full
proposal-draft.md. Task: "Produce the final clean research proposal. Follow the research-proposal skill format exactly. 2 pages max." - Write output to
memory/war-room/proposal-draft.md(overwrite with final version). - Copy
discussion-log.md,idea-snapshot.md, andproposal-draft.mdto<sandbox_root>/results/. - Write final checkpoint and update
memory/SUMMARY.mdwithstatus: complete.
Outputs
<project>/
├── memory/
│ ├── SUMMARY.md ← current phase, round, resume point
│ ├── war-room/
│ │ ├── discussion-log.md ← full turn-by-turn transcript (live)
│ │ ├── idea-snapshot.md ← synthesised agreed idea (written after round 3+)
│ │ └── proposal-draft.md ← accumulated proposal sections → final output
│ ├── .private/
│ │ ├── agent-1-memo.md ← persona drift memo (private, append-only)
│ │ ├── agent-2-memo.md
│ │ ├── agent-3-memo.md
│ │ └── agent-4-memo.md
│ └── checkpoints/
│ └── <timestamp>/
│ └── agent-0.md ← orchestrator state (phase, round, next action)
└── results/ ← copied here at session end
├── discussion-log.md
├── idea-snapshot.md
└── proposal-draft.md
The monitor (skills/war-room/monitor.py) reads memory/war-room/discussion-log.md, memory/SUMMARY.md, memory/war-room/idea-snapshot.md, and memory/.private/ in real time.