auto-research-proposal
/install auto-research-proposal
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] \x3CPersona 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 '"'"'\x3Crepo_root>'"'"' && python skills/war-room/monitor.py --project \x3Cproject_path>"' - Linux (with display):
xterm -title "War Room Monitor" -e "python skills/war-room/monitor.py --project \x3Cproject_path>" & - If the spawn fails, continue silently — the monitor is optional.
Replace
\x3Crepo_root>with the absolute path to this repo and\x3Cproject_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-\x3Cindex>-memo.mdif it exists. - Check the most recent
Drift flag. Ifyes, prepend a PERSONA RESET block to the subagent SI:PERSONA RESET: I am \x3Cpersona name>. My core stance: \x3Cone-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] \x3CPersona Name>** \x3Cresponse text>
d. Write persona memo
- Append to
memory/.private/agent-\x3Cindex>-memo.md:## \x3CYYYYMMDD_HHMMSS> **Persona**: \x3Cname> **Session summary**: \x3Cone sentence> **Position changes**: \x3Cwhat changed, what evidence caused it> **Pressure events**: \x3Cdid the persona hold under pressure?> **Mental state**: \x3Creasoning from own stance or mirroring group?> **Drift flag**: \x3Cyes | 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/\x3Ctimestamp>/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: \x3Csection 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\x3Csandbox_root>/results/. - Write final checkpoint and update
memory/SUMMARY.mdwithstatus: complete.
Outputs
\x3Cproject>/
├── 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/
│ └── \x3Ctimestamp>/
│ └── 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.
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install auto-research-proposal - 安装完成后,直接呼叫该 Skill 的名称或使用
/auto-research-proposal触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
auto-research-proposal 是什么?
Multi-agent research war room. Personas debate in sequential turns through two phases — ideation and proposal writing. Persona persistence and drift detectio... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 91 次。
如何安装 auto-research-proposal?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install auto-research-proposal」即可一键安装,无需额外配置。
auto-research-proposal 是免费的吗?
是的,auto-research-proposal 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
auto-research-proposal 支持哪些平台?
auto-research-proposal 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 auto-research-proposal?
由 Zhengxuan Wu(@frankaging)开发并维护,当前版本 v1.0.0。