Appearance
redline 是一个开源的参考实现,通过 Claude Code 的 Stop Hook 机制,在每次 AI 完成响应后自动检查是否有未提交的代码变更,若变更值得审查,则由 Claude 以后台任务形式启动 Codex CLI 进行异步代码审查。两个 agent(Claude Code 和 Codex)均通过 OpenRouter 路由,可在一个面板中统一监控成本。整个流程无阻塞、无守护进程,完全透明可控。
redline 是一个参考实现,将 Claude Code 的 hook 系统与 Codex CLI 的代码审查能力连接起来。
核心特性:
- Claude(或你)判断是否需要审查,而非每次都强制触发
- Claude Code 完全控制审查 agent,以异步后台进程运行
- 两个 agent 均在 OpenRouter 上可观测、可定制、可监控成本
- 一条命令完成双 agent 登录:
redline login - 以单个 Claude Code Stop Hook 实现,完全透明可定制
工作效果
每次 Claude Code 完成响应且有未提交变更时,hook 自动触发一个后台 Codex 代码审查——不阻塞你的工作流。你继续工作,审查在后台运行。完成后,Claude 读取输出并呈现发现的问题。
无后台进程,无守护进程,无文件系统协议。 Hook 是触发器,Claude Code 自身的后台任务系统处理异步执行。
前置要求
- OpenRouter API key
- Claude Code 已安装(
claude在 PATH 中) - Codex CLI 已安装(
codex在 PATH 中) - Bun 或 Node.js 运行时
配置 OpenRouter
两个 agent 均通过 OpenRouter 路由,但使用不同的 API 协议层和 base URL。
Claude Code 配置
在 shell profile(~/.zshrc 或 ~/.bashrc)中设置环境变量,不要使用 .env 文件(Claude Code 不读取):
bash
export ANTHROPIC_BASE_URL="https://openrouter.ai/api"
export ANTHROPIC_AUTH_TOKEN="sk-or-..."
export ANTHROPIC_API_KEY="" # 必须显式置空,防止回退到 Anthropic 直连注意:base URL 是
https://openrouter.ai/api,不加/v1后缀。这是 OpenRouter 的 Anthropic 协议层。加上/v1会导致模型找不到错误。
Codex CLI 配置
创建或编辑 ~/.codex/config.toml:
toml
[model_providers.openrouter]
name = "openrouter"
base_url = "https://openrouter.ai/api/v1"
env_key = "OPENROUTER_API_KEY"然后设置 API key:
bash
export OPENROUTER_API_KEY="sk-or-..."运行时通过 -c 'model_provider="openrouter"' 指定使用 OpenRouter。
常见错误:Codex CLI 没有
--provider参数,所有运行时配置覆盖必须用-c。TOML 中的 section 名是[model_providers.openrouter]而非[provider.openrouter]。
Stop Hook 工作原理
Claude Code 的 hook 配置在 settings.json 中。Stop hook 在 Claude 每次完成响应后触发。
decision: "block" 机制
- hook 命令运行并向 stdout 输出 JSON
- 如果 JSON 包含
"decision": "block"和"reason"字符串,Claude Code 不会停止,而是将reason内容注入 Claude 的上下文 - Claude 处理这些信息并决定是否启动审查任务
- 若命令以 0 退出且无 JSON 输出,Claude 正常继续
Hook 配置
在 .claude/settings.local.json(项目级本地配置,不影响其他协作者)中添加:
json
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "redline check",
"timeout": 10
}
]
}
]
}
}超时设为 10 秒——check 命令很快。远低于同步审查所需的 300 秒。
为什么要异步
同步方式的三个问题:
- 阻塞:
codex exec review可能需要几分钟,同步 Stop Hook 期间 Claude Code 完全卡住 - 无过滤:每次响应都触发,包括没有代码变更的纯对话
- 重复审查:无机制防止已有审查正在运行时再次触发
异步方案解决了所有问题:check 极快(<1s),仅在有变更时触发,通过 diff stat 哈希跳过未变化内容,实际审查作为 Claude Code 后台任务运行,用户可监控和取消。
两命令架构
工具分为两个命令:check(快速门控,由 Hook 调用)和 review(实际工作,由 Claude 作为后台任务启动)。
check 命令:
- 运行
git diff --stat HEAD获取变更摘要,回退到git status --porcelain - 对 diff stat 哈希化,与上次检查比对,未变化则静默退出
- 若有新变更,输出包含 diff 摘要和审查指令的
decision: "block"JSON - Claude 看到摘要,自行判断是否值得审查,决定是否启动后台任务
review 命令:
- 作为 Claude Code 后台任务被启动
- 实时流式输出 Codex 进展
- 使用
-o <file>将最终结果写入文件,审查完成后打印摘要
安装与卸载 Hook
bash
# 安装(幂等,重复运行安全)
redline install
# 卸载
redline uninstall常见问题
Q: 如果 Codex 审查正在运行,会触发第二次审查吗?
A: 不会。check 命令的 reason 中明确告诉 Claude:"若已有审查正在运行则跳过"。Claude 会检查其后台任务列表,避免重复启动。
Q: 两个 agent 的费用如何追踪?
A: 两个 agent(Claude Code 通过 Anthropic 协议层、Codex 通过 OpenAI 兼容层)都路由到 OpenRouter,所有请求统一出现在 OpenRouter 活动面板中,可按 API key 分别追踪。redline login 一条命令配置两个 agent 的 OpenRouter 认证。
Q: 可以自定义审查使用的模型吗?
A: 可以。使用 redline review --model openai/gpt-5.4-pro 或在 check 命令中传入 --model 参数,会自动注入到 Claude 启动的 review 命令中。