Install
openclaw skills install @mclyang/conclave-skillConclave is a multi-agent reasoning skill that orchestrates multiple AI CLIs into structured debates. Each agent independently analyzes the problem, challenges competing arguments, identifies flaws and contradictions, and refines the reasoning through multiple rounds of discussion — helping you reach more reliable conclusions than relying on a single AI.
openclaw skills install @mclyang/conclave-skillGiven a user topic, convene AI agents to independently posit arguments, engage in anonymous cross-examination, converge, and sign off unanimously, producing a chair-adjudicated final markdown report.
Use for high-stakes decisions (pricing structure, contract risk, architecture selection, investment judgment). Do not use for daily trivia.
This skill does significantly more than "debate orchestration". By design it:
npm install -g, brew, apt, etc.) via scripts/install.sh and pre-flight self-updates.~/.hermes/debates/ (briefs, raw agent outputs, verdicts, votes).api.manus.im) with the debate final draft.Do not install if you are not comfortable with global package changes, third-party AI services seeing your content, or full debate archives being retained and copied into your working directory.
Before using Conclave, read this.
Local data persistence: Every debate creates a persistent folder under ~/.hermes/debates/ containing the full brief, all agent outputs, anonymity mappings, chair verdicts, and final reports. These files remain on disk indefinitely unless you manually delete them. Do not use Conclave for topics containing regulated personal data, trade secrets, or classified information unless you accept this retention risk.
External data sharing: Panelists (Claude, Codex, Gemini, Qwen, DeepSeek, Doubao) receive debate prompts via their respective cloud APIs. The external advisor (Manus) receives the final draft and round summaries via MCP or direct REST polling. By running a debate, you are transmitting your topic and context to these third-party AI providers. Review each provider's data policy before debating sensitive topics.
Credential handling: This skill never prompts for, stores, or logs passwords. The Claude Code auth section previously referenced an unsafe security unlock-keychain -p <password> pattern; this has been removed. Users must manually unlock the macOS keychain in an interactive terminal before background sessions.
Input validation: The init_debate.sh script sanitizes the topic slug to lowercase letters, digits, and hyphens only. Do not pass unsanitized user input directly into shell commands.
Data retention & cleanup: See scripts/cleanup.sh for automated cleanup of debates older than a configurable retention period. Run it periodically or via cron.
Calibration logging: Verifiable predictions are appended to ~/.hermes/debates/calibration.jsonl (prediction_id, question, timestamp, agent, role, probability, resolution_date, ground_truth, brier_score, log_loss). This file grows indefinitely. It contains only verifiable predictions, not strategic judgments. Remove it manually if you do not want this persisted.
| Role | Who | Notes |
|---|---|---|
| Chair & Panelist | Hermes (this agent) | Moderates the session and also argues; must be impartial and must not favor any side (including itself) |
| Panelists | Claude / Codex / Gemini / Qwen / DeepSeek / Doubao | Six CLIs covering reasoning, audit, research, China, coding, and generative domains |
| External Advisor | Manus (MCP API, async) | Does not join regular rounds; reviews the final draft before sign-off; fatal-level objections give the chair the right to call an extra round |
| User | Human | Reviews only the final report; the anonymity mapping is transparent to the user (the user has the right to know who is who) |
scripts/install.sh auto-installs Node.js and the four npm-based CLIs and audits their auth, but it does NOT cover the two extra Deep-mode panelists, the external advisor, or the shell utilities the round scripts depend on. Install and configure everything below before the first debate. Nothing here is optional for Deep mode; Standard mode needs only items 1-2 + the first four panelists.
install.sh installs it via brew/apt/dnf/pacman/winget where possible.| Panelist | Package | Auth the user must complete |
|---|---|---|
| Claude Code | @anthropic-ai/claude-code | Run claude once interactively, finish OAuth login. On macOS, unlock the login keychain in an interactive terminal before background debates. |
| Codex | @openai/codex | Put the API key in Codex's auth.json and set base_url/wire_api in its config.toml (see references/panelists.md). |
| Gemini CLI | @google/gemini-cli | Export GEMINI_API_KEY (and base URL if using a relay) in your shell rc. Key prefix decides the provider — do not mix official and relay keys. |
| Qwen | @qwen-code/qwen-code | Run qwen once interactively to log in, or export the API key/base URL in your shell rc. |
Run bash ~/.hermes/skills/conclave/scripts/install.sh (or --check-only) to install these and print an auth checklist. Any [ACTION] line = the user must fix that provider before debating.
⚠️ Known-issues warning (verified 2026-08-16): the two Deep-mode-only panelists are the least reliable links in the chain.
- Doubao (seed models) responds very slowly — the
doubao-seed-*models can take 300-600s per long prompt and frequently time out on the first try (needs a retry), stalling the round. The turbo model is the only workable one for automated calls, and even it is slow.- DeepSeek (deepcode) needs manual configuration — the wrapper + settings file must be set up by hand before it works at all (see below); a fresh machine will not have it.
- If the experience is poor, just drop them: run Standard mode (4 CLIs: Claude/Codex/Gemini/Qwen + chair) instead of Deep. The debate is fully valid without Doubao/DeepSeek — declare the reduced roster in the brief. Do not let two flaky panelists block or slow the whole session; a clean 4-panelist debate beats a stalled 6-panelist one.
deepcode CLI is TTY-locked, so debates use a non-interactive deepcode-panelist wrapper on the user's PATH. Setup: npm i -g deepcode, run it once interactively to generate its settings file (model + API key + base URL + reasoning effort), then place the wrapper script on PATH and make it executable. Config lives in the deepcode settings file. See references/panelists.md §6 for the wrapper and known-good defaults (effort=medium, max_output_tokens, proxy bypass).npm i -g @volcengine/ark-cli, then arkcli auth login volc-sso (SSO device flow; the picker needs an interactive PTY). This writes an API key to the arkcli config file. Debates call the Ark Chat Completions REST endpoint directly with the turbo model (never the reasoning/seed model in automated calls — it times out). See the volcengine-ark skill for auth pitfalls and the safe-call recipe.MANUS_MCP_API_KEY set in the Hermes config so the chair can create/poll advisor tasks. Without it, the debate still completes but the final report notes "external advisor not reviewed".bash ~/.hermes/skills/conclave/scripts/install.sh
[ACTION] line appears: STOP — ask the user to configure that provider's key/OAuth first (exact steps in references/panelists.md). No debate until every provider is configured.--check-only audits without installing.bash ~/.hermes/skills/conclave/scripts/init_debate.sh <topic-slug>
~/.hermes/debates/conclave-YYYYMMDD-<slug>/01_brief/.references/panelists.md (commands, parameters, auth pitfalls for each agent).bash ~/.hermes/skills/conclave/scripts/preflight.sh <arena-path>
--skip-update bypasses).00_preflight/preflight.log.terminal(background=true) to spawn the panelist CLIs in parallel, writing outputs to 02_r1/.Root: ~/.hermes/debates/ (persistent archive, not /tmp)
Per-debate naming: conclave-<yyyymmdd>-<topic-slug>/
medlibya, pricingv2)-N (e.g., conclave-20260813-medlibya-2)Auto-init: run scripts/init_debate.sh <topic-slug> to generate the directory structure and print the path.
| Path | Purpose |
|---|---|
00_preflight/ | Pre-flight ping results |
01_brief/ | Brief + anonymity mapping + user constraints |
02_r1/ | R1 positioning (all mode-dependent panelists in parallel) |
03_r2/ | R2 rebuttals |
04_r3/ | Convergence round 3 |
05_r4/ | Convergence round 4 |
06_r5/ | Convergence round 5 |
07_verdicts/ | Chair synthesis per round |
08_signoff/ | Final draft + individual votes |
09_deliver/ | Final report + meeting minutes |
index.md | Full index: timeline, file map, key decisions |
07_verdicts/; otherwise panelists in the next round do not get the divergence list.09_deliver/; also copy final.md to the debate root for easy discovery.After receiving the topic and before writing the brief, the chair self-audits: is the topic ambiguous? Is any key constraint missing from the background?
After writing brief.md and BEFORE launching R1, the chair MUST show the brief to the user and get explicit approval to proceed. The brief is the shared premise every panelist argues from — a wrong or incomplete brief poisons the entire debate (all panelists faithfully propagate a bad premise; you only discover it after 30-50 CLI calls). Writing the brief is NOT permission to start.
Step 0 Init: bash ~/.hermes/skills/conclave/scripts/init_debate.sh <topic-slug> → creates ~/.hermes/debates/conclave-YYYYMMDD-<slug>/. All subsequent files land in this directory.
R1 Positioning → agents in parallel, unseen by each other (prevent anchoring). Write to 02_r1/. Chair also writes a position.
R2 Rebuttal → Each agent receives the other agents' R1 (anonymized). Task: identify ≥1 fatal flaw per opponent + self-defense. Write to 03_r2/.
R3+ Convergence → Chair synthesizes consensus/divergence into 07_verdicts/verdict_rN.md; only divergence points are sent back.
Each agent must "concede" or "rebut with evidence"; equivocation is prohibited. Write to 04_r3~08_signoff/.
Termination may occur as early as R3 if strategic divergence is resolved and every objection carries an executable alternative.
Hard ceiling: 8 rounds (including R1 and R2).
Round reference files:
02_r1/ for each agent's positioning03_r2/ for rebuttal speeches07_verdicts/verdict_rN.md for chair synthesis08_signoff/final_draft.md for sign-off draft09_deliver/final.md + minutes.md for final deliverablesConstructive Opposition Iron Rule (user-mandated, applies to all rounds):
Chair maintains after each round: item ID, description, level (strategic / structural / parametric / executional), status (open / resolved / suspended / accepted-risk), alternative, verifiable resolution criterion, proposer, first-seen round.
Trigger, whichever comes first: (a) the ceiling round is reached, or (b) two consecutive rounds add zero new strategic- or structural-level items. On trigger the chair closes the debate and records every remaining open item in the sign-off as a known unresolved risk with trigger conditions and a rollback plan. Forced close is a valid termination.
An item that stays strategic-level for two consecutive rounds with no party conceding: chair must either (a) record it as accepted-risk with trigger conditions and rollback plan, or (b) spin off a focused sub-debate (max 2 rounds, relevant panelists only).
Adopt immediately behind flag convergence: dynamic (defaults: floor
2/3, ceiling 8). Per debate, log: rounds used; the round at which the old
5-round rule would have stopped; every strategic/structural item first
seen after round 2. Review after 10 logged debates.
Escape defect := a strategic- or structural-level item first seen in a
round that the compared rule would have cut, AND which later required a
post-sign-off change.
Sign-off (not counted as a round):
Agree or Oppose + specific clause + specific reason + own alternative.External Advisor (Manus):
--max-turns, add --allowedTools '', etc.) before retrying. This corrected call counts as the retry.process(action='wait'), not skipped early. Closing the round while a panelist is still legitimately in flight is a process violation: their content can change the verdict, and you will have to redo the final step. "Slow" ≠ "absent": absent requires 2 real failures, not just being late.Language field.-c model_reasoning_effort="medium" (cost/speed balance); user calls "important session" for xhigh.-p --max-turns 1; Gemini uses -p; Qwen uses -p. All non-interactive; no TUI.09_deliver/final.md)09_deliver/minutes.md)Recap how the debate reached the final report:
Give the user the absolute paths of 09_deliver/final.md and 09_deliver/minutes.md, and paste the first paragraph of final in the reply.
After each debate, auto-generate index.md in the debate root:
@session restartsThis index lets the user find key decisions in 10 seconds even after 3 months.
After every debate, copy the ENTIRE arena directory (not just 09_deliver/) into the session's current working directory, preserving the arena folder name:
cp -R ~/.hermes/debates/conclave-YYYYMMDD-<slug> "$PWD/"
diff -r ~/.hermes/debates/conclave-YYYYMMDD-<slug> "$PWD/conclave-YYYYMMDD-<slug>" && echo "COPY VERIFIED"
~/.hermes/debates/ remains the canonical archive; the working-directory copy is the user's working artifact.init_debate.sh again to create a fresh arena (same-day same-slug auto-appends -N, e.g. conclave-20260814-burrypltr-2), and put the previous arena's absolute path into the new 01_brief/brief.md under a "Prior debate" heading so panelists can read the old final.md as input context. The old folder stays frozen as the historical record; the new debate's export goes to a separate folder in the cwd.The chair MUST follow references/consensus-protocol-v1.md (v1.1). Operational deltas from the classic workflow:
~/.hermes/debates/calibration.jsonl; resolve due entries at the start of each new debate. Never score non-verifiable judgments.claude -p --max-turns 1 occasionally reports "Reached max turns": when retrying per disconnection rules, raise --max-turns to 3-10 (add --allowedTools '' to prevent spinning); do not stick to the original parameter.zsh -i -c "..." are interpreted as command substitution by the outer shell. Use Python subprocess with shlex.quote, or strip backticks from prompts.$(cat file) expansion; Codex receives the literal string. Always use double quotes for shell expansion when passing file content inline.https://api.manus.im/v1/tasks directly: POST to create ({"prompt": ..., "taskMode": "chat"}), then GET /v1/tasks/{task_id} every 60s until status == "completed"; the advisor's answer is in output[].content[].text where role == "assistant". Review came back in ~3 minutes with 5 findings (3 absorbed, 1 softened, 1 rejected). This fully replaces the webhook/user-paste fallback on CLI-only machines.conclave-20260815-medv9/10_subdebate_surgical/ inside the frozen main arena. This breaks §5 "follow-up debates get a NEW folder": the old arena must stay frozen as history, and the new debate must be self-contained. Fix: run init_debate.sh <slug> for a fresh conclave-YYYYMMDD-<newslug>/, move ALL sub-debate files into its standard dirs (task→02_r1/r1_task.md, each panelist→02_r1/, verdict→07_verdicts/verdict_r1.md, decision→09_deliver/final.md+minutes.md, +index.md), put the prior arena's absolute path in the new brief under "Prior debate", delete the wrongly-placed subfolder from BOTH the canonical archive and the working-directory export, then export the new arena fresh. Rule of thumb: if you're about to mkdir anything other than the 10 standard dirs inside an arena, STOP — you want a new arena instead.final_vN+1.md or a fresh merged arena) and paste the combined result there, leaving the old final.md untouched. Only edit the parent's file if the user explicitly says to. Rule of thumb: after any follow-up debate, ask "does the user want the parent updated in place, or a new merged file?" — default to a new file. (First violation: sub-debate placed as a subfolder. Second violation: back-filled edits into the parent final.md without being asked. Both drew explicit user correction.)process(action='wait') until every panelist's file is non-empty or has 2 logged failures, THEN converge.