先说结论:tstack 是 Theo(t3dotgg)10 月 26 日开源的一组 Agent 技能,一共 9 个,装法就是把文件夹复制到 ~/.claude/skills/ 或 ~/.codex/skills/。我们用本站同一个 API Key 同时接 Claude Code 和 Codex,实测结果:
- 安装(克隆仓库 + 复制到两个客户端)约 3 秒;
- Codex 0.164.0 里说一句「sol loop」,它自己开了一个 gpt-6.1-sol 子智能体审代码,2 轮、62 秒,抓出一个整除 bug 并修好;
- Claude Code 2.1.310 默认跑不了 sol-loop,会如实报「没有能运行 Sol 的途径」;加一个
model: gpt-6.1-sol的子智能体后,2 轮、70 秒跑通; full-send会让 Agent 自己合并 PR。我们在两边都配了一条规则挡住gh pr merge,实测都被拦下。
创建 API Key,用一个 Key 同时接 Claude Code 和 Codex →
tstack 是什么
据 Theo 在 X 上的发布帖,tstack 是他「每天都在用的技能」,整理后公开。截至我们写稿时,这条帖子约 44 万次浏览,GitHub 仓库约 2000 star,MIT 协议。README 里说它同时支持 Claude Code 和 Codex,部分技能会优先用 T3 Code 的功能,没有就退回客户端自带的工具。
9 个技能和触发词(据仓库 README):
| 技能 | 你说 | 做什么 |
|---|---|---|
| full-send | full send | 无人值守:改完、自证、审查、提 PR、盯 CI,然后自己合并 |
| full-stop | full stop | 和 full-send 一样,但停在「可以合并」,不合并 |
| council | council | 找三家不同厂商的模型一起审,直到意见一致 |
| sol-loop | sol loop | 让 GPT Sol 循环审查改动,直到双方都同意 |
| file-pr | file a PR | 写一个先讲问题、不罗列改动的短 PR |
| takeover | take over | 接手别人的 PR、分支或 Agent 会话并保留署名 |
| babysit-pr | babysit | 盯着 PR 过 CI 和审查机器人,修真问题 |
| modernize | modernize | 把旧 PR rebase,并判断它还该不该存在 |
| leaving-pr-comments | 自动 | 规定 Agent 替你发评论时的格式 |
技能之间有依赖:full-send 要用 sol-loop、file-pr、babysit-pr;full-stop 要用 full-send。所以最省事的做法是全装。
第一步:配好 Claude Code 和 Codex
两个客户端用同一个本站 Key 就行。
Claude Code 写在全局 ~/.claude/settings.json:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.aicodewith.ai",
"ANTHROPIC_AUTH_TOKEN": "你的 API Key"
},
"model": "claude-sonnet-5-5"
}
注意地址是 https://api.aicodewith.ai,不要加 /v1。完整步骤见《Claude Code 如何接入第三方 API》。
Codex 写在全局 ~/.codex/config.toml:
model = "gpt-6.1-sol"
model_provider = "aicodewith"
[model_providers.aicodewith]
name = "aicodewith"
base_url = "https://api.aicodewith.ai/chatgpt/v1"
wire_api = "responses"
experimental_bearer_token = "你的 API Key"
每个字段的含义见《Codex config.toml 配置详解》。
第二步:安装 tstack
git clone https://github.com/t3dotgg/tstack
mkdir -p ~/.claude/skills ~/.codex/skills
cp -R tstack/skills/* ~/.claude/skills/ # Claude Code
cp -R tstack/skills/* ~/.codex/skills/ # Codex
实测这几步约 3 秒。装完 Claude Code 启动时就能看到这些技能,Codex 也会在说出触发词时去读对应的 SKILL.md。技能是什么、放在哪,见《AI Agent 里的 Skills 怎么用》。
另外两个依赖:full-send、babysit-pr 这类要提 PR 的技能需要已登录的 GitHub CLI(gh);babysit-pr 的等待脚本需要 python3。
第三步:用同一个 Key 调 GPT Sol,跑 sol-loop
先确认 Key 能调到 Sol。本站模型列表里有 gpt-6.1-sol,我们用 Responses 接口发一句话,约 4 秒返回 200:
curl https://api.aicodewith.ai/chatgpt/v1/responses \
-H "Authorization: Bearer 你的 API Key" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-6.1-sol","input":"Reply with exactly: SOL_OK"}'
测试项目很小:calc.py 里的 average() 加了空列表判断,但顺手把 / 改成了 //。现有测试只测了整数平均值,所以测试是绿的。这个 bug 就留给 Sol 去找。
在 Codex 里
在项目目录运行:
codex exec --sandbox workspace-write "sol loop:审查当前未提交的改动(没有 remote,base 用 HEAD)。审查通过后不要 commit、不要 push。"
实测 62 秒结束。从会话记录看,Codex 先找 T3 Code 的 delegate_task,找不到后用自带的 spawn_agent 开了一个子智能体,参数里写的是 "model":"gpt-6.1-sol"。过程如下:
- 第 1 轮:Sol 指出
average([1, 2])返回1而不是1.5; - 主 Agent 改回
/,补了一个test_average_fractional测试,并验证这个测试在旧代码上会失败; - 第 2 轮:Sol 批准。最后没有 commit、没有 push。
Codex 最后的汇报原文:
已完成 2 轮 sol-loop,GPT-6.1 Sol 最终批准,无遗留问题。
- 已修复 S1:整除导致小数均值错误;恢复 /,保留空列表处理,并补充回归测试。
未 commit、未 push,改动保留在工作区。
在 Claude Code 里
直接说「sol loop」,Claude Code 会拒绝跑。实测 11 秒返回:
Sol 评审没有跑成,所以这次改动没有通过审查。
阻塞原因:这里没有能运行 Sol 的途径……按 sol-loop 的规则,我不会用别的模型代替,也不会把没有评审当作通过。
这是技能本身的规定:在 Claude Code 里,只有配了能跑 Sol 的子智能体才行,不许换成别的模型。解决办法是新建 ~/.claude/agents/sol-reviewer.md:
---
name: sol-reviewer
description: Read-only code reviewer running GPT Sol. Use for the sol-loop skill.
model: gpt-6.1-sol
tools: Read, Grep, Glob, Bash
---
You are a read-only code reviewer. Never edit, commit, or push. Follow the review brief you are given and reply in its exact format.
本站的 Anthropic 兼容接口也能调 gpt-6.1-sol,所以这个子智能体用的还是同一个 Key。再跑一次:
claude -p "sol loop:审查当前未提交的改动(没有 remote,base 用 HEAD)。审查通过后不要 commit、不要 push。" --permission-mode acceptEdits
实测 70 秒,2 轮,结果和 Codex 一样:第 1 轮 Sol 给出 VERDICT: CHANGES,指出整除问题;修好后第 2 轮 VERDICT: APPROVE。输出里的用量统计同时列出了 claude-sonnet-5-5(主 Agent)和 gpt-6.1-sol(审查子智能体),说明审查确实是 Sol 做的。
启动时 Claude Code 会打一行 unrecognized_model 提示,因为它不认识 gpt-6.1-sol 这个名字。这行可以忽略,不影响运行。子智能体怎么配,另见《Claude Code 子智能体配置》。
| 场景 | 结果 | 耗时 |
|---|---|---|
| 克隆 + 复制到两个客户端 | 成功 | 约 3 秒 |
| Codex 0.164.0 跑 sol-loop | 2 轮,Sol 批准 | 62 秒 |
| Claude Code 2.1.310,没有 Sol 子智能体 | 报阻塞,不审 | 11 秒 |
| Claude Code 2.1.310,配 sol-reviewer | 2 轮,Sol 批准 | 70 秒 |
创建 API Key,在 Claude Code 和 Codex 里跑 sol-loop →
full-send 的风险:等于授权 Agent 自己合并
full-send 的 SKILL.md 写得很直白:你说了「full send」,就表示你不看这个会话了,Agent 要把改动一路做到合并进主分支。它明确授予 Agent 三项权限:
- 合并检查通过后,自己合并 PR;
- rebase 后对这个 PR 的分支用
--force-with-lease强推; - 项目里写着「这种测试要先问我」的,也可以不问直接做。
它也有边界:不许用 --admin 绕过分支保护,删数据、动生产环境要先问人。但「合并」本身不需要再问你。如果你的仓库合并即部署,说出「full send」就等于让 Agent 自己上线。
技能里写了「用户没有明确说 full send,就不要默认全自动」,但它是靠 Agent 自己判断的,不是硬开关。只要技能装着,就有被误触发的可能。
怎么关掉或限制
按从轻到重排:
方法 1:不装 full-send
只想要 Sol 审代码,就只复制 sol-loop 这一个文件夹(它不依赖别的技能),不复制 full-send 和 full-stop。
方法 2:用 full-stop 代替
它走完同样的流程,但停在「可以合并」,由你来点合并。
方法 3:在 Claude Code 里禁掉合并命令
在全局 ~/.claude/settings.json 加:
{
"permissions": {
"deny": ["Bash(gh pr merge:*)", "Bash(gh api:*)"]
}
}
gh api 也要禁,否则 Agent 可以直接调 GitHub 接口合并。实测让 Claude Code 执行 gh pr merge 1 --squash,5 秒内被拦下,返回里的 permission_denials 记录了这条命令。
方法 4:在 Codex 里禁掉合并命令
新建 ~/.codex/rules/default.rules:
prefix_rule(
pattern = ["gh", "pr", "merge"],
decision = "forbidden",
justification = "Merging a PR must be done by a human",
)
实测 8 秒内被拒,日志里是 rejected: Merging a PR must be done by a human。沙箱和审批方式的更多设置见《Codex 沙箱权限说明》。
方法 5:在 GitHub 上开分支保护
要求合并前有人批准。据 GitHub 文档,PR 作者不能批准自己的 PR;Agent 用的是你的 gh 账号,所以它没法自己凑齐批准。这一层不依赖客户端配置,最可靠。
本文没有在真实仓库上跑 full-send 到合并这一步,只测了它依赖的 sol-loop 和上面两条拦截规则。
常见问题
没有 T3 Code 能用 tstack 吗?
能。我们全程没装 T3 Code。Codex 会用自带的子智能体,Claude Code 需要你按上面的方法配一个 Sol 子智能体。
sol-loop 能换成别的模型审吗?
技能明确写了「不要换模型」,找不到 Sol 就报阻塞。想换,可以自己改 SKILL.md,README 也鼓励「把它们改成你自己的」。
council 要什么?
据 README,council 要三家不同厂商的旗舰模型同时审,例如 Claude Opus、GPT Sol、Gemini Pro。本站列表里有 claude-opus-5-5、gpt-6.1-sol、gemini-4-argon,可以按 sol-reviewer 的写法各配一个子智能体。本文没有测 council。
Codex 里 sol-loop 只审未提交的改动吗?
不是。有 remote 时它会用 git merge-base 找 base,审整个分支;没有 remote 时才用 HEAD。只想审工作区改动,也可以用 Codex 自带的审查,见《Codex review 审查未提交改动》。
测试环境
- Claude Code 2.1.310,Codex CLI 0.164.0,Linux;
- tstack 提交
92e38e2(2026-10-27); - 主模型:Claude Code 用
claude-sonnet-5-5,Codex 用gpt-6.1-sol;审查模型gpt-6.1-sol; - 所有请求都走本站同一个 API Key。测完已删除含 Key 的配置和日志。



