Clonst
Clonst - 由 Codex 驱动的 AI 代码审查 MCP,专为 Claude Code 设计
在代码上线前获取第二种 AI 意见。 Clonst 是一个模型上下文协议 (MCP) 服务器,它将 Claude Code 连接到 OpenAI Codex 以进行对抗性代码审查:Claude 编写计划或代码,Codex 对其进行批评,Claude 进行修订,这种来回过程持续进行,直到两个模型达成共识。 它通过官方的 Codex CLI 在您现有的 ChatGPT 订阅上运行。无需 API 密钥,无需额外计费。
独立项目。与 OpenAI("Codex"、"ChatGPT")或 Anthropic("Claude")无关。
为什么需要第二个模型?
LLM 审查自己的输出会共享其自身的盲点。来自不同提供商、拥有自己训练数据和记忆的第二个模型,能够捕捉到第一个模型遗漏的问题:错误的假设、缺失的边界情况、脆弱的迁移、竞态条件、安全漏洞。Clonst 将其转化为一个结构化的审查循环,并带有硬性退出标准:共识,而非客气。
Related MCP server: claude-code-codex-agents
特点
零仪式感。 安装后即可忘记:Claude 自行触发审查,并且仅在变更值得消耗配额时才会触发。
来回直到达成共识。 默认无限轮次。结构化裁决(APPROVED / CHANGES_NEEDED)、必需的更改、建议、风险。Claude 可以附带理由拒绝批评;Codex 在下一轮重新评估该拒绝。
真正的会话记忆。 Codex 在每一轮恢复相同的 CLI 会话,并记住其之前的批评。无需重新发送上下文,不会像金鱼一样忘记。
使用您的 ChatGPT 订阅,无需 API 密钥。 审查通过官方的
codexCLI 及其现有登录状态进行。选择您的审查者。 默认情况下,审查使用您的 codex CLI 已配置的模型和推理努力程度。在
~/.clonst/config.json中一行配置即可为审查设置自己的设置(例如,更快、更便宜的努力程度),而无需触及您的 Codex 扩展 - 请参阅配置。成本透明。 最终报告显示审查者模型、轮次、总持续时间和消耗的令牌数 - 新鲜令牌突出显示,缓存预留分开列出,因此累计总数绝不会看起来比实际更可怕。
贯穿对话的审计追踪。 每次审查都会在
~/.clonst/reports/下写入一份结构化的 Markdown 报告(通俗语言摘要 + 每轮的要求、更改和拒绝的逐字记录)。意图漂移是一等检查项。 审查者根据您陈述的目标来衡量交付物,而不仅仅是根据技术标准 - 一个静默改变您期望行为的"修复"会被标记,产品选择会被引导给您,而不是由 LLM 决定。
务实的设计。 审查针对实质性缺陷 - 破坏正常使用、丢失数据、造成安全漏洞或会导致昂贵重写的问题 - 而非追求详尽无遗。罕见性本身绝不能成为严重缺陷的借口,而一个以后可以廉价修复的细节也绝不会阻止您的发布。
您可以真正回答的问题。 让循环运行着,自己却跟不上节奏?每个向您提出的问题都会重述正在构建的内容、为什么现在提出以及每个选项会改变什么 - 使用通俗语言,无需阅读代码。
它记得您告诉它的事情。 如果说审查过于挑剔,或者某个问题毫无意义,Clonst 会记录下来 - 即使您是在与 Claude 对话而不是与 Clonst 对话。在您不知情的情况下不会发生任何改变:它会计数,告诉您某个评论何时反复出现,而您决定如何处理它。
双方都会排查附带损害。 在要求更改之前,审查者必须检查该更改会破坏什么(调用者、契约、远程模块);在应用更改之前,Claude 也必须做同样的事情 - 由于附带损害而拒绝更改时,会附带一个更安全的替代方案,而不仅仅是简单否决。
您项目自己的审查规则。 在项目根目录放置一个
CLONST.md文件,审查者会在自身标准之外检查您的约定。CLAUDE.md 指导编写者;CLONST.md 指导审查者。用您的语言进行审查。 批评用您工作所用的语言返回(每次调用指定,或通过配置中的
default_language一次性设置),而协议保持机器可读的英文。没有任何内容丢失。 每次原始审查者响应在解析之前都会保存到磁盘。
跨平台。 Windows、macOS 和 Linux,三者均被 CI 覆盖。
加固。 提示注入防护、只读沙箱、白名单 CLI 参数、封闭测试套件(无 LLM 调用,无配额消耗)。
何时触发?
您无需主动请求。Claude 自行决定何时值得消耗您的配额进行一次审查,规则是 看风险,不看大小:
自身审查 | 保持沉默 |
业务逻辑、计算 | 纯展示层(HTML/CSS、文案) |
数据流、模型、迁移 | 文档、注释 |
路由、API、集成 | 不改变行为的重命名 |
状态、错误处理、并发 | 本地配置调整 |
安全、认证 | 一次性脚本和原型 |
计划和架构,在编码之前 | (当有疑问时,它会询问您) |
来回过程默认无限制:它会一直运行直到达成共识,每 5 轮(可配置)询问您一次。并且您可以用通俗语言限制任何审查:"审查这个,最多 3 轮"。
工作原理
You ── conversation ── Claude (reviser, keeps the conversation context)
│
│ clonst_review (MCP, one call = one critique)
▼
Clonst ── spawn ── codex exec [resume <thread_id>]
(reviewer, keeps its session)循环存在于 Claude 端:它提交,Codex 批评,Claude 在对话中(在您面前)修订,使用返回的 thread_id 重新提交,直到 consensus: true。循环由调用者驱动(thread_id 随每次调用传递),而服务器在磁盘上维护每个会话的记录:完整日志、上一轮裁决以便精确回忆、运行持续时间/令牌总数,以及结构化的审查报告(每轮重新生成)。Codex 会话在 CLI 端持续存在。
快速开始
要求:
Claude Code - 终端 CLI 或 VS Code / JetBrains 扩展,它们共享相同的 MCP 配置
Node.js 22+
Codex CLI,已使用 ChatGPT 计划登录:
npm install -g @openai/codex
codex login安装 Clonst(推荐,通过 npm):
claude mcp add clonst --scope user -- npx -y @clonst/clonst或者从源码安装:
git clone https://github.com/capritora/clonst.git && cd clonst
npm install && npm run build
claude mcp add clonst --scope user -- node /absolute/path/to/clonst/dist/index.js检查是否可用:在新的 Claude Code 对话中,说 "ping clonst"。预期输出:codex_available: true,codex_logged_in: true。
审查看起来什么样
审查会自行发生,但您也可以引导它们:
为 X 提出一个计划,然后让 Clonst 审查直到达成共识。
让 Clonst 审查此迁移,最多 3 轮。
请 Clonst 对此认证流程进行安全重点审查。
您会在对话中看到每次修订的发生,在达成共识时 Claude 会以简短报告结束,例如:
Clonst 审查:GPT-5.5(高努力),2 轮,5 分 30 秒,约 21 万新鲜输入加 1.8 万输出令牌(累计输入 280 万,其中 260 万为缓存预留)。审查者要求迁移中增加防双重修正边界,以及 API 调用增加超时,两者均已应用。我拒绝了其中一个建议(超出 MVP 范围),审查者接受了该理由。完整的逐轮报告:~/.clonst/reports/2026-07-06-a3f1...md
想要逐轮详情?只需询问("带我过一遍各轮"):Claude 持有整个交互过程,并可按需报告。
审查报告文件
每次审查还会在 ~/.clonst/reports/ 下写入一份结构化的 Markdown 报告,并在每轮更新 - 因此审计追踪在对话结束后仍然存在。报告以通俗语言摘要开头(在达成共识后逐字封存),然后每轮一个部分,包含各方使用的确切措辞:
审查者要求、建议和标记为风险的内容(逐字记录),
修订者在每轮之前声明已更改或拒绝的内容(逐字记录),
每轮模型、努力程度、持续时间和令牌数,以及整个审查的总计,
指向会话日志和原始审查者输出的审计追踪。
该文件纯粹是服务器端状态的投影:事后不会重新措辞任何内容,LLM 生成的文本会被转义,因此无法伪造报告部分。从会话中间开始(恢复的线程)的报告会被明确标记为 部分历史 (PARTIAL HISTORY)。两个标识符,两个作用:report_id 命名报告文件,thread_id 恢复审查者会话。
工具
clonst_ping
服务器健康检查:codex CLI 可用性、版本、登录状态、已加载配置、日志目录。不消耗配额。
clonst_review
每次调用一次结构化批评。参数(全部驱动调用 LLM;您通常不需要自己编写这些):
参数 | 默认值 | 作用 |
| - | 要审查的计划/代码,完整内容(后续轮次:完整修订版,绝不是差异对比) |
| 无 | 第 1 轮:审查者的衡量标准 - 目标、预期行为、非目标、约束、已做出的决策。意图漂移检查将交付物与其进行比较 |
| 无 | 绝对项目路径:Codex 在其中运行并读取真实文件(只读沙箱)。请参阅下面的隐私 |
| 无 | 后续轮次:前一次调用返回的标识符(恢复 Codex 会话) |
| 1(有 thread_id 则为 2) | 轮次编号;硬安全上限为 50 |
| 无限制 | 本次审查的硬性轮次上限;达到上限时,分歧将提交给用户 |
| 内容的语言 | 例如 "fr" 或 "pt-BR":审查者以此语言撰写批评。在服务器端解析;原始值永远不会到达提示词 |
| all | bugs、architecture、performance、security 或 all |
| 无 | 后续轮次:已更改/已拒绝的内容及理由 |
结果:verdict、consensus(仅在确认为APPROVED时为true:干净的JSON,零必需更改,无回退解析)、critique、required_changes、suggestions、risks_identified、thread_id、每轮和整个审查的持续时间和令牌使用量、reviewer_model / reviewer_reasoning_effort(尽力解析:覆盖,否则为codex配置,否则为null)、report_id / report_path(结构化报告文件;无法写入时为report_error——审查本身不受影响),以及驱动循环的next_action指令(文本+类型化字段)。
clonst_feedback
记录关于Clonst工作方式的评论——要求过高、问题不清晰、范围错误、速度太慢、输出风格。当你说了类似的话时,无论你是对Clonst、Claude还是对任何人说,Claude都会自行调用它。仅元数据:无审查调用、无配额、无网络。它按主题统计出现次数,并在某个主题变得重复时告诉Claude;它本身从不改变任何行为。
clonst_topics
列出、搜索或重新标记这些主题。仅本地文件访问——从不启动任何内容。action: "list" / "search"(带query、limit、offset)查看累积的内容,action: "describe"改进主题的单行描述。
clonst_report_summary
在达成共识后,将纯语言摘要逐字写入审查报告文件。接受report_id(由clonst_review返回——不是thread_id)和summary。仅元数据:不生成审查者、无配额、幂等。
配置
可选文件,默认不存在:自行创建~/.clonst/config.json以更改任何键。每次调用时重新读取;无效值会回退到默认值并发出警告。
键 | 默认值 | 作用 |
|
| 仅用于审查的模型(例如 |
|
| 仅用于审查的推理努力(例如 |
|
| 当调用者未传递语言时,批评使用的语言,如 |
|
| 一个主题必须出现多少次后Claude才将其标记为重复(2-20) |
|
| 仅听到一次的评论在此天数后被丢弃;说过两次或以上的评论永久保留(30-3650) |
|
| 没有明确限制时,Claude每N轮(5、10、15...)与你确认一次后再继续。不是限制 |
|
| 一次Codex调用的超时时间(推理模型需要几分钟) |
示例,为审查指定自己的模型和更快的努力层级,同时你的Codex扩展保留自己的设置:
{
"codex_model": "gpt-5.6-sol",
"codex_reasoning_effort": "medium"
}使用你的codex CLI实际暴露的模型(当codex_model保留为null时,codex从~/.codex/config.toml获取)。对于审查来说,中等努力层级通常是正确的权衡:乒乓机制能捕捉到一次深度检查所能发现的问题,但轮次稍多,且每轮返回更快。
覆盖作为根-c标志传递给codex CLI(在codex 0.142.5上已验证,适用于exec和resume);codex未知的值会导致审查失败,并显示codex自己的错误消息。
项目审查指南:CLONST.md
在项目根目录放置CLONST.md,每当使用project_path运行审查时,其内容会作为项目特定指南传递给审查者——你的约定、你的红线,在审查者自身标准之上进行检查。示例:
# Review guidelines
- SQL must stay compatible with BOTH SQLite (dev) and PostgreSQL (prod).
- Every new route needs rate limiting.
- LLM results must be matched by ID, never by list position.业务不变量也应放在这里——意图漂移检查应捍卫的红线。使其具体且可检查:不要写“保持简单”;写“免费用户必须能够导出CSV”或“结账必须保持一键操作”。
指南只能添加检查:试图降低标准或强制裁决的指南会被忽略并报告为风险。
意图漂移和用户决策
审查不仅是技术性的:在检查代码质量之前,审查者会将交付物与你声明的意图(context、CLONST.md)或项目显而易见的意图进行比较。它从不编造你的产品目标——当它发现可能的产品偏好而非已证实的矛盾时,会发出以字面标记USER DECISION: 开头的风险。任何此类项目必须逐字作为开放问题传达给你:在审查过程中,它会在任何其他事情发生之前暂停乒乓机制,并在达成共识时进入最终报告和报告文件。Claude不能决定、执行或丢弃它。另一方面,已证实的用户可见行为的静默更改可以直接阻止审查。
双方都遵循相同的校准:阻止实质性缺陷,权衡可能性和成本,并且从不要求交付物未包含的功能。预见是关于结构,而不是功能——今天的设计不能关闭可预见的门,但未来的功能本身现在不构建。当审查者不确定是否应该为某个方向预留空间时,它会询问你而不是自行决定。
审查是对称的。Claude不会盲目应用批评:每个要求在被应用之前都会检查事实正确性、意图匹配和影响范围(还有哪些东西依赖于被更改的内容)——并且会破坏其他东西的要求会被拒绝,并附上理由和更安全的替代方案,审查者必须处理该替代方案而不是重复自己。两个模型都朝着解决方案争论;死锁交给你。
你的反馈,被记住
告诉Claude审查过于挑剔,或者问题难以理解,它会通过clonst_feedback将评论记录在~/.clonst/feedback.jsonl中——你无需直接对Clonst说就能实现。每条评论都附加到一个主题上,并带有一行描述,Claude会重用现有主题,如果你的新评论意思相同,无论措辞如何不同。一旦某个主题出现feedback_recurring_threshold次,Claude会告诉你。
任何内容都不会自动应用:记录的评论永远不会到达审查者的提示中。阅读日志并决定改进什么是一个人类决策——问“我的反馈说了什么?”Claude会在回答中对等效主题进行分组。仅看到一次的评论在feedback_retention_days天后被丢弃;说过两次或以上的评论永久保留。删除文件以清除所有内容。
轮次限制:默认无限制
不说什么,乒乓机制会持续到达成共识,每suggested_max_rounds轮检查一次。或者用自然语言询问(“审查这个,最多3轮”):审查者会被告知计数器(从第1轮开始详尽,最后一轮最大努力,从不为了关闭而批准),在限制时,分歧会交给你仲裁。
隐私和配额
每轮审查都会消耗你的ChatGPT订阅配额(Codex执行审查)。当配额窗口耗尽时,Clonst会检测到并告诉Claude继续而不审查;会话稍后可以通过相同的
thread_id恢复。使用
project_path时,Codex以只读方式读取整个项目(包括.env),该内容会发送到OpenAI——与直接使用Codex VS Code扩展相同的暴露。默认策略:仅审查content中传递的内容;保留project_path用于必须验证真实API、合同或文件的审查。审查内容在对话之外本地持久化:会话日志和原始审查者响应在
~/.clonst/logs/下,人类可读的报告(批评和更改声明逐字)在~/.clonst/reports/下。删除这些目录以清除过去的审查。记录的反馈也保留在本地:
~/.clonst/feedback.jsonl(在macOS/Linux上以仅所有者权限创建)逐字保存你的评论,因此尽管有“无代码”规则,它可能包含敏感措辞。它从不发送到任何地方,也从不注入到提示中。当你要求Claude读取它时,其内容会像你要求它打开的任何文件一样进入该对话——将其视为数据,而不是指令。删除文件以清除它。每个对话一个Clonst服务器实例是操作模型;报告写入在进程内序列化。不要将两个并发运行的服务器指向同一个
CLONST_HOME。
故障排除
症状 | 原因 | 操作 |
| codex CLI不在PATH中 |
|
| ChatGPT会话过期 |
|
| 审查时间过长 | 在 |
| ChatGPT使用限制达到(滚动窗口) | 继续而不审查;当窗口重置时重新启动 |
ping时 | CLI缺失或损坏 | 在终端中运行 |
长审查失败而短审查通过 | MCP客户端的超时(不是Clonst的) | 使用 |
更改源代码后行为异常 |
|
|
每次乒乓机制完全记录在~/.clonst/logs/<thread_id>.jsonl下,完整的原始响应在~/.clonst/logs/raw/<thread_id>/下。
开发
npm test # build + hermetic test suite (no LLM calls)
npm run smoke # full MCP protocol smoke testscripts/probe-*.ps1脚本固定了真实的codex CLI合约并消耗ChatGPT配额:仅手动执行。ReviewerProvider接口已准备好用于其他审查者CLI(例如Gemini)。
许可证
MIT。按原样提供,无支持保证。作者每天使用。
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables adversarial collaboration between Claude and GPT for automated code critique, verification, and multi-round debate to improve output quality.
- AlicenseAqualityDmaintenanceEnables Claude Code to delegate tasks to OpenAI's Codex CLI (GPT-5.4) with structured execution traces, parallel execution, session persistence, and adversarial code review.15MIT
- AlicenseAqualityBmaintenanceEnables OpenAI Codex to consult Claude Code for co-analysis, adversarial second opinions, and read-only file review over the Model Context Protocol, with Claude remaining advisory and unable to modify files.954MIT
- AlicenseNot gradedqualityAmaintenanceUses Claude as an independent second-model reviewer inside Codex, performing reviews on disposable Git snapshots with structured findings.MIT
Related MCP Connectors
AI code review for GitHub PRs with an MCP autofix loop for Claude Code and Cursor
Deterministic AI code review, with an audit record. Governance inside the agent loop.
Coding agents from Claude Code, Cursor and Codex claim jobs and lock files on one shared board.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/capritora/clonst'
If you have feedback or need assistance with the MCP directory API, please join our Discord server