商业产业 Hacker News LLM 2026-09-25T22:06 正文 ok 1026 words

Show HN:Recurse——更快开发和部署专用 Agent

英文标题:🔶 Show HN: Recurse – Develop and deploy specialist agents faster

Recurse 展示了一套用于开发、评估和部署专用 Agent 的命令行工作流。演示中,Agent 可调用搜索与验证工具,并通过规划、测量、修订和反思循环持续优化;样本评估记录显示,得分 0.91 的结果被保留,而得分 0.87 的结果被丢弃。该工具还可将 Agent 部署为 MCP 服务,并通过 `codex mcp add recurse` 和 `claude mcp add recurse` 接入 Codex 与 Claude。对开发者而言,这意味着可将 Agent 的工具注册、输入输出校验、测试和部署流程组织为可重复执行的工程化链路。
打开原文相关 3 · 机会 1
media1.7 KB media1.3 KB media1.6 KB media9.4 KB media1.2 KB media2.8 KB media8.9 KB media22.3 KB media9.8 KB media4.3 KB media26.7 KB media21.3 KB media8.9 KB media22.0 KB media39.9 KB

中文

运行 Agent:调用搜索工具、执行验证并返回结果,状态显示为 ready。

text $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ──

任务规划与修订:生成候选方案 07,进行测量,修订后等待评分。

text │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ──

构建并部署 Agent:固定 manifest,校验输入与输出,并部署为 MCP。

text ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ──

搜索样本评估:得分 0.91 的结果保留,得分 0.87 的结果丢弃;随后查询状态。

text ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ──

保持契约并注册工具:执行运行实例 run_9fd3c2,修订 prompt,随后 Agent 进入空闲状态。

text │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ──

候选方案 08:生成 1 个产物,执行测试校验并继续循环;随后将 Recurse 添加至 Codex MCP。

text ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ──

接入 Claude:添加 Recurse MCP,部署 mcp_7fc21a,端点就绪后开始提供专用 Agent 服务。

text $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ──

循环结束:维持稳定契约与自适应执行,跟踪测量结果并由 Agent 反思。

text │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ──

English / 原文

$ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ── $ recurse run ./agent ── ⚡ tools.search() ── │ ├── verify() │ └── return result ── > _ ready ── ░▒▓ ██ ▓▒░ ──

│ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ── │ task.plan() ── ✓ candidate 07 ── ⟩ measure() ── ⚙ revise ── ▓▒░ ░▒▓ ── > await score ──

⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ── ⟩ agent.build() ── █ manifest.pin ── ├── inputs.validate() ── │ outputs.check ── ░░▒▒▓▓██ ── $ recurse deploy --as mcp ──

├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ── ├── search.sample() ── ⚡ score 0.91 ── │ └── keep ── > score 0.87 · discard ── ▒▓██▓▒ ── $ recurse status ──

│ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ── │ contract.hold ── ✓ tool.register ── ⟩ run_9fd3c2 ── ⚙ prompt.revise ── ░▒▓ ▓▒░ ── > agent.idle ──

⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ── ⟩ candidate 08 ── █ artifacts: 1 ── ├── test.validate ── │ loop.continue ── ██▓▒░░▒▓ ── $ codex mcp add recurse ──

$ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ── $ claude mcp add recurse ── ⚡ deploy mcp_7fc21a ── │ ├── endpoint.ready │ └── specialist.serve ── > _ complete ── ░▒▓██▓▒░ ──

│ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ── │ stable contract ── ✓ adaptive execution ── ⟩ measure.track() ── ⚙ agent.reflect ── ▓▒░ ██ ░▒▓ ── > loop.end ──