code-quorum
code-quorum
独立评审已成为我使用代理工具的重要方式。受类似工作的启发,我为自己的使用构建了 Code Quorum,并在此分享,希望其他人也能发现它的用处。
Code Quorum 是一个适用于 Claude Code 和 Codex 的 macOS 多代理委员会。活动主机编写自己的评审、评估或计划,而外部席位并行工作。一个结构性的反偏见门控确保每个视角在最终综合之前保持独立。
它可以使用现有的 Claude Code、ChatGPT/Codex 和 Gemini/Antigravity 订阅。OpenCode 席位使用 OpenRouter,默认模型为 DeepSeek V4 Flash。两个 CLI 主机均受支持,同时支持 ChatGPT 桌面应用中的 Codex 和 Claude 桌面应用中的 Code 界面。
主机 | 默认外部委员会 |
Claude Code | Codex + Gemini + OpenCode |
Codex | Claude 订阅 + Gemini + OpenCode |
主机永远不会同时作为子进程席位。启动/等待分离要求主机在 q_await 暴露同行输出之前形成自己的答案,并且每个委员会技能在同一轮中调用阻塞式完成通知作为其启动。
外部席位是只读的,但只读并不意味着数据本地化。在私有材料上使用 Code Quorum 之前,请查看安全与数据边界。
每个读取仓库的 MCP 委员会启动都需要一个明确的绝对项目 cwd。MCP 工具会拒绝缺失或空值,而不是回退到服务器的插件缓存或运行时目录。主机技能在正常的 /q-* 和 $code-quorum:q-* 使用期间提供此值。计划和范围文件也必须在该目录内解析;绝对路径、.. 遍历和符号链接逃逸在读取其内容之前会被拒绝。
工作流
主机可以从匹配的通俗语言请求中选择工作流。使用以下形式显式选择一个:
工作流 | Claude Code | Codex | Shell |
计划 |
|
|
|
头脑风暴 |
|
|
|
风暴 |
|
| 仅主机技能 |
验证 |
|
|
|
评审 |
|
|
|
研究 |
|
|
|
帮助 |
|
| 仅主机技能 |
uv run quorum --help 列出了确切的 shell 界面。主要修饰符如下:
选项 | 效果 |
| 为主机头脑风暴增加另一轮分歧,或将验证/评审扩展到 4 轮并带有立场轮换。 |
| 使后续的验证/评审轮次攻击同行立场,而不是向一致意见修订。 |
| 为整个代码库评审声明范围内、范围外和已接受风险区域。 |
| 使主机研究寻找跨领域类比,而不是直接先例。 |
| 仅从模型先验运行头脑风暴或风暴。 |
研究来源和凭据
q-research 默认查询所有六个来源。重复 --source <name> 以限制运行。
来源 | 目标 | 凭据策略 |
arXiv ( | 来自 arXiv 搜索的学术论文和预印本。 | 无。 |
OpenAlex ( | 近期作品和摘要;探索模式还会生成子领域地图。 | 正常使用 OpenAlex 需要 |
Europe PMC ( | 来自 bioRxiv、medRxiv、Research Square 等来源的生命科学预印本;排除 arXiv 记录。 | 无。 |
Context7 ( | 高信任库匹配和文档片段。 | 建议使用 |
GitHub ( | 按名称、描述和主题匹配的公共仓库,然后按星标排序。 | 建议使用 |
Hugging Face ( | 公共模型 ID 和元数据,按下载量排序。术语回退结果带有 | 建议使用 |
Code Quorum 从进程环境读取凭据,并仅在授权头中发送令牌。生成的 Codex 适配器转发命名变量,但不会在插件工件中存储其值。OpenAlex 是唯一在正常使用中需要密钥的来源;其他来源提高可靠性或速率限制。
从检出中验证 Hugging Face 搜索,使用:
uv run quorum research "sentence embedding" --source huggingface --limit 5
uv run pytest tests/test_research_live.py -m live -k huggingface -qCLI 检查必须返回模型链接和非零的 HuggingFace 来源计数。实时测试涵盖直接搜索、配置令牌认证、独特术语联合以及完整的 research_topic 路径。没有令牌时,认证测试会跳过,而匿名检查仍会运行。
Related MCP server: Moderator MCP Server
要求
Code Quorum 目前支持 macOS,需要 Python 3.13+、uv 包管理器以及你打算使用的席位的二进制文件。每个席位依赖自己的登录或密钥;Code Quorum 不会将凭据值写入插件工件。席位 CLI 保留自己的认证和运行时状态,如 SECURITY.md 所述。
席位 | 二进制 | 认证 | 成本 |
codex | CLI 自己的登录( | ChatGPT 订阅或按量计费 API 密钥 | |
gemini | 通过 | Google AI 订阅;按量计费 | |
opencode | 环境中的 | 通过 OpenRouter 按量计费 | |
claude(仅 Codex 主机) | CLI 自己的 claude.ai 登录 | 仅 Claude 订阅;API 密钥路由被剥离 |
Gemini 席位依赖 macOS Seatbelt 沙箱;Claude 使用读取工具允许列表。Codex 主机还需要一个范围狭窄的 LaunchAgent 助手用于其 Claude 和 Gemini 席位。Codex 和 OpenCode 没有 Seatbelt 依赖,但在其他平台上未测试。
安装
克隆稳定检出并配置席位:
git clone https://github.com/sdewell/code-quorum.git
cd code-quorum
uv sync
agy # complete Google OAuth login, then exit
uv run quorum setup-agy # one-time Gemini seat config
uv run quorum setup-models --host claude # use --host codex for Codex
uv run quorum doctor --host claude # or codex / both
uv run quorum auth-check --seat gemini --host claudedoctor 检查二进制文件、配置形状和沙箱就绪状态。它不测试实时凭据。auth-check 在席位使用的同一沙箱内运行 agy models,并且要求至少有一个有效的模型行,而不发送模型提示。缺失或撤销的登录会将用户引导回交互式 agy;Code Quorum 永远不会静默切换到按量计费 API 路由。
在 Codex 主机上,从真实终端安装并验证助手,然后再进行 Codex 认证检查:
uv run quorum install-seat-helper-launchagent # --allowed-root <dir> to widen
uv run quorum seat-helper-status
uv run quorum auth-check --seat gemini --host codex每个 MCP 工作流默认允许 cwd 位于 ~/Code 和 ~/src 下;Codex 助手在接受 Claude 或 Gemini 请求之前应用相同的根。设置 CODE_QUORUM_HELPER_ALLOWED_ROOTS 或使用重复的 --allowed-root 选项安装助手以使用其他项目根。每次 Code Quorum 升级后,从更新的稳定检出重新安装它。不兼容的助手协议会失败关闭,并且从 Codex 的可替换插件缓存安装会被拒绝。
只读边界
每个外部席位都是只读的,如果无法应用其边界,则拒绝运行。执行方式因席位而异:Codex 使用其原生只读沙箱,Claude 仅暴露读取工具,Gemini 使用 macOS Seatbelt,OpenCode 使用具有受限权限的隔离 HOME。
Gemini 的 Seatbelt 配置文件拒绝其他主目录读取,但明确排除 agy 认证和运行时状态。它不拒绝 $HOME 之外的可读路径。Code Quorum 不为 Claude、Codex 或 OpenCode 提供通用路径围栏。委员会材料可以在用户配置的提供商账户下离开机器。完整的边界表、数据出口映射、严格隔离指南和凭据处理在 SECURITY.md 中。
Codex 上的数据和批准
Codex 将工具批准、文件系统包含和授权将材料发送到机器外视为单独的决策。诸如 main...HEAD 之类的目标限制了准备好的评审差异;它不限制外部席位对工作目录的只读访问。
当启用 approvals_reviewer = "auto_review" 时,委员会启动可能需要显式授权,指明负载和收件人。希望无人值守访问的用户可以按工具选择加入,但 Code Quorum 永远不会自行写入这些批准条目。
SECURITY.md 包含一次性授权示例、全部六个 Codex 审批块(包括共享的 q_await 工具)、项目 AGENTS.md 指南、路径限制范围,以及保留审批的更新流程。在启用无人值守工作流之前,请先审阅该文件。
配置
每个席位通过一条阶梯解析其模型,先命中者优先:每次运行的标志 -> 环境变量 -> quorum setup-models 记录的选项 -> 随附的固定版本。已记录的选项绝不会静默更改;无法满足该选项的席位会大声报错,而委员会其余成员继续运行。
uv run quorum setup-models --host claude
uv run quorum setup-models --seat codex --model gpt-5.6-terra --effort medium变量 | 作用 |
| 默认主机配置文件( |
| Gemini 席位模型(来自 |
|
|
| OpenCode 席位模型 |
|
|
| Claude 席位模型和投入程度 |
| Codex 席位模型和推理投入程度 |
OpenCode 配置
OpenCode 席位需要 OPENROUTER_API_KEY,并且不会加载您个人的 OpenCode 配置。它使用隔离的 HOME,并在每次运行前重建此生成的配置。随附的模型是 openrouter/deepseek/deepseek-v4-flash;其 OpenRouter chunkTimeout 为 90000 毫秒。
Code Quorum 设置 OPENCODE_DISABLE_PROJECT_CONFIG=1 和 OPENCODE_PURE=1。生成的委员会代理仅允许 Read、glob 和 list,拒绝 shell 和变更工具,阻止 .env 和 .env.*,并允许 .env.example。失败或空运行会将原始 stdout/stderr 捕获写入 ~/.cache/code-quorum/opencode-debug,除非设置了 CODE_QUORUM_OPENCODE_DEBUG=0。该目录权限为 0700,捕获文件权限为 0600,命令元数据中省略提示文本,并且仅保留最新的 20 个捕获。原始流仍可能包含已审阅的材料。有关完整边界设计,请参阅 ARCHITECTURE.md 和 SECURITY.md。
禁用席位
如果实时探测因席位缺失或已注销而失败,quorum setup-models 可以在 models.toml 中将其标记为 disabled。默认名册会跳过已禁用的席位,并且 doctor 会报告它们,但显式的 --agent <seat> 请求仍会运行它们。
作为插件安装
Claude Code:
/plugin marketplace add sdewell/code-quorum
/plugin install code-quorum@code-quorum对于 Claude Code CLI,请在启动主机之前加载 OPENROUTER_API_KEY 和可选的研究密钥。例如:
source ~/.zshrc.local
claude对于 Claude 桌面应用,请在打开它之前将密钥提供给当前 macOS 登录会话:
source ~/.zshrc.local
launchctl setenv OPENROUTER_API_KEY "$OPENROUTER_API_KEY"launchctl 值会被随后启动的每个应用程序继承,直到它被取消设置、注销或机器重启。启动 Claude Code,然后移除登录会话副本;已在运行的应用会为插件子进程保留其副本:
launchctl unsetenv OPENROUTER_API_KEY安装或升级插件后,或更改密钥后,请完全退出 Claude Code 并启动新的 Claude Code 会话。插件重新加载可以获取代码更改,但无法更改运行中的主机继承的环境。
Claude 插件使用 uv run --directory ${CLAUDE_PLUGIN_ROOT} quorum-mcp 启动其 MCP 服务器,因此 uv 和 Python 3.13+ 必须位于 PATH 中。
Codex:
注册公共市场并安装插件:
codex plugin marketplace add sdewell/code-quorum --ref main
codex plugin add code-quorum@code-quorum
codex plugin list对于 ChatGPT 桌面应用,请在注册市场后完全退出并重新打开该应用。打开 插件,选择 个人,选择 Code Quorum,然后点击 安装。
在任一 Codex 界面安装插件后,请从真实终端准备稳定检出:
uv sync
uv run quorum install-seat-helper-launchagent
uv run quorum seat-helper-statusCodex 启动器直接启动该检出的已准备 .venv。因此,MCP 启动不依赖于可写的 uv 缓存、网络下载或可替换插件目录内的环境。对于后续升级,一条命令即可刷新检出、插件、环境、审批和辅助程序:
uv run quorum update-codex之后请完全重启 Codex 并启动新线程。如果较旧的检出尚不具有 update-codex,请使用 SECURITY.md 中的一次性旧版序列。
在 Codex CLI 中,打开 /hooks 以审阅并信任每个 code-quorum 命令钩子。Codex 会跳过插件钩子,直到每个当前定义哈希都被信任。更改的定义需要重新审阅并信任该更改后的定义。
生成的启动器会为具有最小 PATH 的桌面应用恢复标准用户和 Homebrew 二进制目录(~/.local/bin、~/.opencode/bin、/opt/homebrew/bin 和 /usr/local/bin)。
对于 Codex CLI,请在启动 Codex 之前加载密钥环境。对于 ChatGPT 桌面应用,请在当前 macOS 登录会话中设置密钥:
source ~/.zshrc.local
launchctl setenv OPENROUTER_API_KEY "$OPENROUTER_API_KEY"该值对随后启动的每个应用程序可见,直到它被移除。启动 Codex,然后移除登录会话副本;运行中的应用会保留它已继承的值:
launchctl unsetenv OPENROUTER_API_KEY在插件升级或密钥更改后,请完全退出并重新打开 Codex,并启动全新的 Codex 线程。不要恢复重启前创建的线程;其工具注册表可能仍引用先前的插件进程。
对于保留审批的更新,切勿将 codex plugin remove 作为常规路径。请遵循 SECURITY.md 中经过验证的序列。
设计
ARCHITECTURE.md 描述了共享的 CLI/MCP 主干、席位适配器、轮次模型、反偏见机制、打包和故障边界。简要版本:第 1 轮不包含同行输出,后续轮次按立场匿名化同行,并且主机在 q_await 之前不会收到委员会矩阵。
致谢
以下项目启发了工作流形态;未复制任何代码、提示或文档:
SnakeO/claude-co-commands - 在同行输出之前独立进行主机工作。
agentic-box/owlex - 多代理委员会架构和认知角色。
karpathy/llm-council - 按内容而非模型身份进行匿名同行评审。
许可证
MIT。
Available Tools
6 toolsq_awaitA
Block until the background council run identified by job_id
completes, then return its rounds markdown. One-shot — a job_id
can only be awaited once.
This is the blocking completion notification for every council start. The orchestrating host must not end its turn with a live job outstanding; it calls q_await after its independent work and remains blocked until this tool returns a result or error.
Errors:
job_id not found (expired, already retrieved, or invalid) → ValueError with the reason.
job cancelled by TTL or server shutdown → ValueError.
underlying council error → propagated.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to rely on, the description carries the full burden and does so thoroughly. It discloses that the tool blocks until completion or error, that it is one-shot (a job_id can only be awaited once), and enumerates all error scenarios (job not found, TTL cancellation, server shutdown, underlying council errors). It also conveys the operational expectation that the host must not end its turn with an outstanding job. This goes far beyond a minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly structured: the first sentence delivers the core purpose, the second paragraph provides usage context, and a bulleted list covers errors. Every sentence earns its place; there is no fluff. The information is front-loaded with the most critical fact (blocking behavior) stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers what an agent needs to know to call this tool correctly: it explains the blocking nature, the one-shot constraint, the exact error outcomes, and the return value (rounds markdown). An output schema exists, so detailed return formatting is not required. There is no missing information that would prevent correct invocation or interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter `job_id` has zero schema description, so the description must compensate. It does by explaining that the job_id identifies the background run, and the error section clarifies what happens if the id is invalid (expired, already retrieved, or invalid). It stops short of specifying a format (e.g., UUID), but since a valid id comes from a sibling start tool, this is sufficient for the agent to understand its role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Block'), a clear resource ('background council run identified by job_id'), and an outcome ('return its rounds markdown'). It distinguishes itself from the sibling start tools (q_plan_start, q_brainstorm_start, etc.) as the blocking completion counterpart, so an agent can immediately tell what this tool does and how it differs from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that this is 'the blocking completion notification for every council start' and gives a clear directive: 'The orchestrating host must not end its turn with a live job outstanding; it calls q_await after its independent work.' It also warns that it is one-shot, leaving no ambiguity about when and how to use it. No alternative tools are mentioned, but the context of siblings being all start tools makes the usage obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
q_brainstorm_startA
Start a q-brainstorm run in the background. Returns {"job_id":
str} immediately. Each agent contributes 3-5 distinct ideas with
rationale, trade-offs, and the cheapest test that would give signal;
no synthesis. Retrieve results by calling q_await with the
returned job_id.
Between the start and the await, the caller is expected to list its own ideas — this is the structural anti-bias gate.
research, when supplied, seeds round 1 with a q_research digest as
EVIDENCE: agents are told to ground their ideas in it, recombine it, or
extend past it. Pass the raw digest markdown (verbatim from q_research) --
never your own summary of it, and never your own ideas; those stay behind
the anti-bias gate. Distinct from prior_ideas, whose do-not-repeat
framing marks content to diverge AWAY from.
prior_ideas, when supplied, seeds a divergence round: the agents are told
the listed ideas are already on the table and must not be repeated -- used
by the --extended flow to push past round 1. Composes with research
(evidence stays evidence; ideas stay do-not-repeat).
grounding, with prior_ideas, runs a validation-guide pass over the
listed ideas instead of diverging past them -- used by q-skystorm
Stage 2.
Optionally assign a cognitive stance per agent via roles, a list
of 'stance:agent' strings (stances: skeptic, architect, security,
maintainer, analyst, neutral, visionary, pioneer). Unassigned agents
use their default stance.
gemini_model, when supplied, runs the gemini seat on that agy model for
this invocation only (an id exactly as printed by agy models, e.g.
'claude-opus-4-6-thinking').
Expected wall-clock to completion: 30s-4min depending on the agents and topic complexity.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | ||
| host | No | ||
| roles | No | ||
| topic | Yes | ||
| agents | No | ||
| skip_gh | No | ||
| verbose | No | ||
| research | No | ||
| grounding | No | ||
| no_context | No | ||
| prior_ideas | No | ||
| gemini_model | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers comprehensively. It discloses the async nature (runs in background, returns job_id immediately), the output format, the expected timing (30s-4min), and the behavioral constraints (agents contribute 3-5 ideas, no synthesis, anti-bias gate). It also explains the semantic difference between research and prior_ideas. No behavioral aspect is left opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-organized into focused paragraphs. It front-loads the core behavior and return type, then explains each optional parameter and composition. Each paragraph earns its place, but the length is near the upper bound of acceptable. It is structured rather than rambling, so it scores a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (12 params, no schema coverage, no annotations, and an output schema), the description covers the essential workflow and the most impactful parameters. It explains the anti-bias gate, the difference between research and prior_ideas, and the grounding pass. Missing: descriptions of verbose, skip_gh, no_context, host, and a few error-handling details, but those are minor. It is nearly complete for a working understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. It does explain the significant ones: research, prior_ideas, grounding, roles, gemini_model. However, it omits explanations for agents, skip_gh, verbose, no_context, host, and even cwd/topic are only implicit. For a tool with 12 parameters, the description adds value but leaves several parameters undocumented, forcing the agent to infer from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Start a q-brainstorm run'), states the async behavior, and names the sibling tools it complements (q_await, q_research). It clearly distinguishes this from q_plan_start, q_validate_start, etc., and explains the composition with q_research and q_await. An agent can immediately understand what this tool does and how it fits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Between the start and the await, the caller is expected to list its own ideas — this is the structural anti-bias gate.' It also names alternatives and conditions: 'Distinct from prior_ideas, whose do-not-repeat framing...' and mentions specific flows like '--extended' and 'q-skystorm Stage 2' that select the grounding mode. This is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
q_plan_startA
Start a q-plan run in the background. Returns {"job_id": str}
immediately. The current host's external seats run in parallel from a
structurally bias-free starting point. Retrieve results by
calling q_await with the returned job_id.
Between the start and the await, the caller is expected to form its own plan — this is the structural anti-bias gate.
Optionally assign a cognitive stance per agent via roles, a list
of 'stance:agent' strings (stances: skeptic, architect, security,
maintainer, analyst, neutral, visionary, pioneer). Unassigned agents
use their default stance.
gemini_model, when supplied, runs the gemini seat on that agy model for
this invocation only -- an id exactly as printed by agy models, e.g.
'claude-opus-4-6-thinking' to get a Claude answer from the same AI Pro
plan when Gemini quota is tight or a different perspective is wanted.
Expected wall-clock to completion: 30s-4min depending on the agents and codebase size.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | ||
| host | No | ||
| task | Yes | ||
| roles | No | ||
| agents | No | ||
| skip_gh | No | ||
| verbose | No | ||
| no_context | No | ||
| gemini_model | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses background execution, immediate return, parallel seats, bias-free starting point, the anti-bias gate, optional role assignment, gemini_model substitution, and expected wall-clock time. It does not explicitly state side effects or permissions, but the behavior is largely transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a coherent paragraph with clear sections: execution model, the anti-bias gate, roles, gemini_model, and timing. It is somewhat verbose (e.g., 'structurally bias-free') but every sentence adds useful information and is appropriately front-loaded with the core behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, no annotations, and an output schema, the description covers the high-level workflow and two parameters but omits critical invocation details like the meaning of 'cwd', 'task', 'host', 'agents', 'skip_gh', and 'no_context'. An agent would struggle to invoke it correctly without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains 'roles' (format and defaults) and 'gemini_model' (format and purpose), but ignores the other 7 parameters including required ones like 'task' and 'cwd'. With 0% schema description coverage, the description must compensate, but it covers only about 22% of parameters, leaving most ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts a q-plan run in the background, returns a job_id immediately, and explains the anti-bias gate. It is distinct from siblings like q_brainstorm_start or q_validate_start by its explicit focus on structural anti-bias and the background execution model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete workflow guidance: start the run, then call q_await with the job_id, and it emphasizes the anti-bias gate as a reason to use this tool. However, it does not explicitly say when not to use it or contrast with alternative start tools like q_brainstorm_start.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
q_researchA
Fetch prior art for a topic from arXiv + OpenAlex + Europe PMC (papers), Context7 (library docs), GitHub (repos), and HuggingFace (models), and return a markdown digest.
Europe PMC covers the life-sciences preprint tier arXiv does not carry -- bioRxiv, medRxiv, Research Square -- so it is the source that earns its slot on biology/medicine topics and returns 0 on pure-software ones. Its hits are labelled by preprint server ("bioRxiv") and are NOT peer-reviewed; weigh them accordingly.
Not subject to the council's anti-bias gate -- this is external prior art,
not peer output. Call it during the own-work window of a q_brainstorm
or q-skystorm run to ground the synthesis. sources defaults to all
six; pass a subset like ["arxiv", "openalex"] to restrict it.
Query shaping matters: pass a query that is SHORT and distinctive --
short is not the same as generic. Anchor it in 2+ domain-specific terms (the
field PLUS the specific method/concept), never a bare common word ('data',
'model', 'network') or a token that doubles as an author surname -- those
keyword-match unrelated work (author names, generic surveys, stray docs) and
return non-zero but OFF-TOPIC noise -- sanity-check that returned titles
belong to your domain, and if they are off-topic the query was too generic:
re-anchor with more domain context and call q_research again rather than
leaning on them. (This same-domain check assumes you want grounding in
your own field -- if you are deliberately hunting cross-domain structural
analogies instead, judge a hit by structural kinship to the problem, not
literal subject-matter overlap; an off-domain hit is then the find, not
noise.) Not a full paragraph either. Per source: arXiv parses
topic as a boolean field -- a long/diffuse query loose-matches to
famous-but-irrelevant papers, and boolean punctuation (parens, AND/OR,
quotes) triggers a 400; OpenAlex tolerates prose but length dilutes
relevance to generic surveys; Context7 wants a library/topic name and will
keyword-match off-topic repos; GitHub/HuggingFace are popularity-ranked
artifact searches that whiff on non-software/non-ML topics. The digest's
per-source count footer shows which sources whiffed -- rework and retry
those, unless the 0 is domain-legitimate (GitHub/HuggingFace on a
non-software topic, Europe PMC on a non-biology one, Context7 on a topic
with no matching library), which is a real answer, not a gap to close.
Treat every other digest result as provisional until it earns trust: a 0 that is NOT one of the domain-legitimate cases above is not automatically "no prior art" either (it may just be a bad query), and non-zero hits that read scattered or off-topic are not evidence -- both are a signal to reframe (sharper domain anchor, fewer/different terms) and retry, not something to build a conclusion on.
Failed sources are reported inline under 'Sources unavailable' rather than failing the call -- each with a retry hint, and the right move differs by error. An errored source is almost never a dead backend: an arXiv error (400) means YOUR query is too long or has boolean punctuation, so shorten it to a few keywords, strip operators, and call q_research again; a 401/403 or an OpenAlex 503 is a CONFIG case, not a flake -- the key was rejected, or OpenAlex is load-shedding anonymous search, so a bare retry just loops (set the source's key -- OPENALEX_API_KEY is free -- or lean on the other sources and say so); only a plain timeout/flake is transient and worth retrying as-is. Do NOT report a source unavailable, and do NOT fall back on your own knowledge, until a reworked retry has ALSO failed -- treating the first error as terminal is the failure to avoid. Bounded by per-request timeouts (~10-15s each); the GitHub and HuggingFace backends fan out one request per distinctive query term (up to 4), run sequentially, so those two sources' wall-clock can reach a few times that.
The digest OPENS with a deterministic Research status: line -- OK,
RETRY-RECOMMENDED (USUALLY with a server-suggested shorter query to resubmit
verbatim, shown as · try: "..."; when it is ABSENT the detail text says what
to do, and the two absent cases differ -- a backend/infrastructure failure
says RETRY THE SAME query, while an un-shortenable query says RE-ANCHOR with
different domain terms), CONFIG (a key/anonymous-access problem no retry
fixes), or (in exploratory mode) LOW-OVERLAP. Act on it before anything else:
on RETRY-RECOMMENDED, resubmit the suggested query if one is given, else
follow the detail (retry the same query on an infrastructure failure, or
re-anchor with different domain-specific terms if it cannot be shortened) --
before concluding "no prior art". Mechanically-fixable failures (arXiv 400, a
transient flake) are already retried inside the tool -- a repaired source
shows a ↻ note, so a first-attempt error you never see was handled, not
hidden.
mode is 'grounded' (default; brainstorm -- home-domain grounding, where a
low-overlap result is a defect the verdict flags RETRY-RECOMMENDED) or
'exploratory' (skystorm -- a deliberate cross-domain method pivot, where low
overlap is expected and reported as LOW-OVERLAP without forcing a retry).
Exploratory mode also adds a ### Field map section (the OpenAlex
subfield distribution for the query) showing which fields the method
actually spans -- the skystorm topology readout. Query discipline is
identical in both modes; only the low-overlap interpretation differs.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | grounded | |
| limit | No | ||
| topic | Yes | ||
| sources | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it excels. It discloses internal retries ('Mechanically-fixable failures ... are already retried inside the tool'), error handling ('Failed sources are reported inline under 'Sources unavailable' rather than failing the call'), response format (markdown digest with a 'Research status:' line), per-source behaviors, and the distinction between domain-legitimate zero results and gaps. This level of transparency exceeds typical tool descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very long but well-organized, front-loading the core purpose and then progressing into usage, error handling, and modes. Each paragraph serves a distinct function, yet some sections (e.g., the extended discussion of same-domain vs cross-domain checks) are arguably more detailed than necessary for an agent to invoke the tool. It is concise relative to its complexity but could be tightened without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers every aspect an agent needs: what it returns (markdown digest, status line), how to interpret results (RETRY-RECOMMENDED, CONFIG, LOW-OVERLAP), error handling with specific retry guidance, per-source whiffing logic, mode differences, and query-shaping best practices. Even with an output schema (not shown), this description is entirely self-sufficient given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description explains the `topic` (query shaping), `sources` (defaults, subset pass), and `mode` (grounded vs exploratory) parameters in depth. However, the `limit` parameter is never mentioned – its purpose and effect on output are not explained. Since the schema provides no help, this is a noticeable gap, though the description compensates well for the other three parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Fetch prior art for a topic from arXiv + OpenAlex + Europe PMC (papers), Context7 (library docs), GitHub (repos), and HuggingFace (models), and return a markdown digest.' This clearly distinguishes the tool from its siblings (planning, brainstorming, validation, review, await) by focusing on external prior-art retrieval. No ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use instructions: 'Call it during the own-work window of a `q_brainstorm` or `q-skystorm` run to ground the synthesis.' It also provides query-shaping rules, mode interpretation ('grounded' vs 'exploratory'), error-handling strategies, and when not to trust results. Since there are no sibling research tools, it doesn't contrast with alternatives, but it provides rich contextual guidance on exactly when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
q_review_startA
Start a q-review run in the background. Returns {"job_id": str}
immediately. Each agent independently reviews real code changes, then
converges across rounds. Round 1 is structurally bias-free; later rounds
embed each agent's own prior plus peers' priors so sustained agreement
becomes visible. Retrieve results by calling q_await with the returned
job_id.
Between the start and the await, the caller is expected to form its own code review of the diff — this is the structural anti-bias gate.
target selects what to review (default: branch vs main, committed +
uncommitted). 'working' = uncommitted tracked changes only; 'pr:N' or a
github PR URL = an open PR (title/body orient the review); 'A..B'/'A...B'
= an explicit range; 'all' = the whole codebase (agents read cwd — pair
with scope_path). An empty diff (other than 'all') short-circuits: the
job returns a 'nothing to review' message without running the council.
scope_path, when supplied, points at a scope doc declaring what is
in/out-of-scope and which risks are accepted; it is embedded verbatim so
the council does not converge on out-of-bounds findings.
extended runs 4 rounds with a stance rotation at round 3 (agents swap
stances and re-examine all priors); the default is 2 rounds with no
rotation. mode is 'revise' (agents soften/strengthen in light of peers)
or 'critique' (agents attack peer points).
verbose defaults to false: the council writes terse output (no padding,
path:line over pasted code, and later rounds collapse each still-held
finding to one HELD line while preserving the agreement count). Set true
only when you want the full unabridged deliberation — a much larger matrix.
Optionally assign stances per agent via roles, a list of 'stance:agent'
strings (stances: skeptic, architect, security, maintainer, analyst,
neutral, visionary, pioneer).
gemini_model, when supplied, runs the gemini seat on that agy model for
this invocation only (an id exactly as printed by agy models, e.g.
'claude-opus-4-6-thinking').
Expected wall-clock to completion: 1-8min default; 4-15min when extended=true. Pick extended deliberately.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | ||
| host | No | ||
| mode | No | revise | |
| roles | No | ||
| agents | No | ||
| target | No | ||
| skip_gh | No | ||
| verbose | No | ||
| extended | No | ||
| no_context | No | ||
| scope_path | No | ||
| gemini_model | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and it delivers richly. It discloses that the call returns immediately instead of blocking (async job), gives expected wall-clock timing (1-8min default, 4-15min extended), spells out the empty-diff short-circuit that returns a 'nothing to review' message without running the council, details verbose output behavior (HELD lines, agreement counts), and explains the stance rotation at round 3 for extended mode. This far exceeds baseline behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but every paragraph earns its place for a 12-parameter async background tool. It is front-loaded with purpose and the return contract, then flows logically through the anti-bias gate, target values, scope, execution modes, output verbosity, and timing. The final timing note is a genuine value-add. It could be tightened slightly, but the length is justified by complexity rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool of this complexity — 12 params, async behavior, background execution, no annotations, 0% schema coverage — the description is remarkably complete, covering the workflow, the caller's required participation (anti-bias gate), short-circuit behavior, per-parameter semantics, and timing expectations. The output schema exists so return values need no further explanation, and job_id is already surfaced. The only completeness gap is the five undocumented parameters (agents, skip_gh, no_context, host, cwd) that the description leaves to the schema, which is empty.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate — and it does for the majority. target gets a detailed breakdown of every value ('working', 'pr:N'/URL, 'A..B'/'A...B', 'all', default branch-vs-main), and scope_path, extended, mode, verbose, roles, and gemini_model are each explained. However, five of the twelve parameters (cwd, host, agents, skip_gh, no_context) are not touched in the description and, with zero schema descriptions, remain entirely undocumented — a real gap for a tool where agents and skip_gh likely matter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource — "Start a q-review run in the background. Returns {"job_id": str} immediately" — and explains the mechanism (independent agent review then convergence across rounds). This clearly distinguishes a review tool from its siblings q_plan_start, q_brainstorm_start, and q_validate_start, which by naming convention cover different activities. No ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong usage context: it is for reviewing real code changes, and it explicitly routes retrieval to a sibling — "Retrieve results by calling `q_await` with the returned job_id" — which orients the agent within the family of q_* tools. It also defines the structural anti-bias gate the caller must pass between start and await. However, it never explicitly states when NOT to use this tool versus q_validate_start or the other review siblings; exclusions are implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
q_validate_startA
Start a q-validate run in the background. Returns {"job_id":
str} immediately. Each agent independently reviews the plan file,
then deliberates across rounds. Round 1 is structurally bias-free;
later rounds embed each agent's own prior plus peers' priors.
Retrieve results by calling q_await with the returned job_id.
Between the start and the await, the caller is expected to form its own review — this is the structural anti-bias gate.
extended runs 4 rounds with a stance rotation at round 3 (agents
swap stances and re-examine all priors); the default is 2 rounds
with no rotation. mode is 'revise' (agents soften/strengthen in
light of peers) or 'critique' (agents attack peer points).
verbose defaults to false: the council writes terse output (no padding,
path:line over pasted code, later rounds omit restating unchanged points).
Set true only for the full unabridged deliberation — a much larger matrix.
Optionally assign stances per agent via roles, a list of
'stance:agent' strings (stances: skeptic, architect, security,
maintainer, analyst, neutral, visionary, pioneer).
gemini_model, when supplied, runs the gemini seat on that agy model for
this invocation only (an id exactly as printed by agy models, e.g.
'claude-opus-4-6-thinking').
Expected wall-clock to completion: 1-8min default; 4-15min when extended=true. Pick extended deliberately.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | ||
| host | No | ||
| mode | No | revise | |
| roles | No | ||
| agents | No | ||
| skip_gh | No | ||
| verbose | No | ||
| extended | No | ||
| plan_path | Yes | ||
| no_context | No | ||
| gemini_model | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It comprehensively explains the background execution, immediate return of job_id, the bias-free first round and later rounds embedding priors, the extended mode's 4 rounds and stance rotation, the verbose output toggle, and the gemini_model override for this invocation. It also discloses expected wall-clock times and the anti-bias gate expectation, making the tool's behavior highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but well-structured, front-loading the core behavior and return value before diving into options. It uses clear paragraphs and imperative sentences that earn their place. While somewhat long, the length is justified by the tool's complexity, and it could be slightly more concise without losing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, no schema descriptions), the description covers the main workflow and several key parameters, and provides expected wall-clock times. However, it omits explanations for critical parameters like plan_path and cwd, and does not clarify the exact output format beyond job_id (though q_await likely handles results). The description is strong on purpose and behavior but incomplete in parameter coverage, so it is not fully complete for an agent to confidently invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter documentation. It explains extended, mode, verbose, roles, and gemini_model in detail, but leaves essential parameters like plan_path, cwd, host, agents, skip_gh, and no_context unexplained. The required plan_path is only referred to generically as 'plan file', which is insufficient for an agent to know exactly what to provide. The description only partially covers the 11 parameters, making parameter semantics incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it starts a q-validate run in the background and returns a job_id immediately. It describes the process of agents reviewing the plan file and deliberating, which distinguishes it from sibling tools like q_plan_start, q_brainstorm_start, and q_review_start. The tool's purpose is unambiguous and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on retrieving results via q_await with the returned job_id and explains the structural anti-bias gate that the caller should form its own review between start and await. It also advises when to use extended mode ('Pick extended deliberately') and explains the default vs extended rounds. However, it does not explicitly contrast this tool with sibling start tools, relying on tool names for differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.0.63- First observed
q_await - First observed
q_brainstorm_start - First observed
q_plan_start - First observed
q_research - First observed
q_review_start - First observed
q_validate_start
TDQS
Scored across 6 tools
Each tool has a clearly distinct function: planning, brainstorming, validation, code review, research, and result retrieval. There is no overlap in purpose; descriptions reinforce the boundaries.
All tools follow a uniform 'q_' prefix with an action verb (plan_start, brainstorm_start, validate_start, review_start, research, await). The two non-start tools still share the prefix and verb style, making the pattern predictable.
Six tools is well-scoped for a code-quality council suite: four distinct run types plus research and a blocking retrieval. Each tool earns its place without redundancy or bloat.
The core lifecycle (start runs, retrieve results) is fully covered, and research supports the workflow. Minor gaps exist—no job-listing or cancellation tool—but agents can work around them by awaiting each job, so the surface remains practical.
Maintenance
Related MCP Connectors
- ParleyOAuthdev.weldra
Coordination hub for AI coding agents: message teammates, ask humans, audit every event.
Multi-LLM council: 25+ frontier models in parallel, consensus scoring, verdict-first code review.
Shared control plane for AI coding agents — tasks, memory, decisions, file locks. 12 tools.
AI work orchestration for plans, tasks, teams, and coding-agent dispatch.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to read each other's conversation history read-only and sanitized, so you can continue work across different tools without re-explaining context.MIT
- FlicenseNot gradedqualityDmaintenanceAllows users to manage multiple remote AI coding agents from a single Claude Code session, with a controlled execution model where operations require moderator approval.-
- AlicenseNot gradedqualityAmaintenanceEnables multi-model LLM council reviews and parallel sidecar conversations within Claude, allowing Claude to orchestrate structured reviews from various AI models and fold their responses back into the session.449 npm2MIT
- FlicenseAqualityAmaintenanceEnables coding agents to perform workspace-confined file operations, read-only Git inspection, and structured shell commands, while requiring out-of-band human approval for mutations and external executions and maintaining an audit trail.143-