全部智能体 CLI
NeuroSquad 中的 PenguinHarness

PenguinHarness,外加一整张画布

想运行多少个 Penguin 智能体都行,每张卡片里都是真正的 penguin chat。NeuroSquad 运行自己的 Penguin 服务器,并为每张卡片创建独立的智能体;Penguin 的状态流告诉卡片它何时在工作、在等待或已完成,箭头把终端、笔记和其他智能体交给它。

官方网站penguin.ooo
  • 真正的 penguin chat,用你自己的模型
  • 你的 ~/.penguin 从不被改写
  • 免费,支持 Windows 和 macOS
状态流与钩子

它知道 Penguin 何时完成——何时在询问

PenguinHarness 由客户端和服务器组成。NeuroSquad 为每张卡片的会话监听服务器自己的状态流,每张卡片智能体里的一个小钩子包决定哪些工具调用需要你来回答。

session_state: running信号
工作中

服务器的状态流报告卡片的会话为 running。卡片图标开始旋转,团队状态卡片把它算作工作中,上一个问题的通知随之撤下。

pre_tool_use信号
等你处理

卡片的 pre_tool_use 钩子把这次调用交给 Penguin 自己的 “? Approve this tool call? [Y/n]”。通知会写明这次调用——PenguinHarness needs your permission: exec_command: rm -rf dist——直到你在卡片里回答。

session_state: idle信号
已完成

状态流报告 idle,聊天也回到了 > 提示符。队列里的下一条提示词发出,日志记下回答,通知告诉你已完成。

钩子就是策略

卡片以 --approve always-ask 运行 Penguin,由它的钩子先作答:NeuroSquad 自己的工具、read_file 和子智能体无需询问即可运行,和 Claude Code 一样;其他调用都会等你。

子智能体同样可见

子智能体在子会话中运行;状态流会报告它,所以它运行期间卡片保持工作中,用量也会单独列出它。

不会过早显示“已完成”

“已完成”会等到聊天回到提示符——否则早一刻粘贴的队列提示词就会丢失。

看它工作

用 PenguinHarness 你会做的三件事

应用的复刻演示,一步一步播放。Penguin 询问时,由你来回答。

Penguin 通过终端卡片运行测试,无需询问就读取文件,在修改前停在它自己的批准问题上,然后完成——日志自动写好。

它能得到的一切

PenguinHarness 在 NeuroSquad 中能做的一切

基于 PenguinHarness 0.2.13 及其 main 分支实测。一部分是 Penguin 自带的——MCP、会话、Trace 文件——还有很多围绕它的服务器构建。做不到的,卡片上都会注明。

  • 01

    清楚自己的状态

    Penguin 自己的状态流和卡片的钩子会报告每一轮,以及每个需要你处理的调用。

  • 由 NeuroSquad 实现

    “已完成”和“在等你”是两回事

    PenguinHarness 0.2.13 没有每条提示词都触发的钩子,所以卡片跟随服务器自己的状态流(session_state 的 running 和 idle)来跟踪自己的会话——每一轮都不漏,包括从手机发起的。

    文档: “已完成”和“在等你”是两回事
  • 由 NeuroSquad 实现

    通知写明它需要什么

    通知会写明这次调用——PenguinHarness needs your permission: write_file: a.txt——你在卡片里回答后,卡片回到工作中。

    文档: 通知写明它需要什么
  • 由 NeuroSquad 实现

    通过服务器停止

    停止按钮、预算刹车和手机上的停止都会调用 Penguin 自己的中止 API。在空闲的聊天中按 Ctrl-C 会询问是否退出,所以停止按钮从不发送它,手机按键行也把 Ctrl+C 标为退出。

    文档: 通过服务器停止
  • 接着上次继续

    状态流和钩子会报告会话 id;下次启动就是 penguin chat --resume <id>。会话被删除时会自动换成新会话。

    文档: 接着上次继续
  • 团队状态卡片

    工作区里所有 AI 智能体都在一张卡片上,附带状态、模型和本轮用时。

    文档: 团队状态卡片
  • 02

    通过画布工作

    从卡片引出的箭头就是一组工具,经由 Penguin 自己的 MCP 客户端。

  • 箭头就是工具

    卡片的智能体在 tools.mcpServers 中列出 NeuroSquad 的 MCP 服务器。画一条箭头连到终端、笔记、浏览器或智能体,Penguin 就能使用它们的工具。

    文档: 箭头就是工具
  • 由 NeuroSquad 实现

    箭头即同意

    卡片的钩子让 NeuroSquad 自己的工具、read_file 和子智能体无需询问即可运行——正是 Claude Code 不问就运行的那些。其他调用都会等你。

    文档: 箭头即同意
  • 由 NeuroSquad 实现

    工具一开始就提供

    Penguin 会为模型上下文的工具拍一张快照,并忽略列表变化。所以卡片一开始就拿到 NeuroSquad 的全部能力,由箭头在调用时决定。

    文档: 工具一开始就提供
  • 由 NeuroSquad 实现

    稳得住的卡片模式

    钩子在任何批准之前就拒绝 exec_command 和 input_command——shell,也是 Penguin 上网的唯一途径——危险模式下也一样。

    文档: 稳得住的卡片模式
  • 来自注册表的 MCP 服务器

    已安装的服务器作为第二个服务器接入,不预先批准:每次调用前 Penguin 都会询问。

    文档: 来自注册表的 MCP 服务器
  • 03

    为长时间运行而生

    上下文、压缩、速率限制、提示词队列和日志——都在卡片上处理。

  • 上下文仪表

    从 Trace 读取最近一次请求的令牌数,对比 Penguin 为该会话模型记录的上下文窗口。

    文档: 上下文仪表
  • 压缩

    卡片上的 Compact 按钮会发送 Penguin 自己的 /compact。

    文档: 压缩
  • 由 NeuroSquad 实现

    卡片上的速率限制

    当请求以速率或配额错误结束时,卡片会从 Trace 中读取并显示该限制。

    文档: 卡片上的速率限制
  • 提示词队列

    发给忙碌卡片的提示词会等待,并在本轮结束后逐条发出;长提示词和多行提示词都作为一条消息送达。

    文档: 提示词队列
  • 日志与交接

    最后的回答从 Penguin 的 Trace 文件读取:写进连接的笔记、交接、agent_wait、Telegram 和自定义卡片。

    文档: 日志与交接
  • 04

    团队协作

    每张卡片一个智能体、子智能体、无需重启的危险模式,以及切换到另一个 CLI。

  • 由 NeuroSquad 实现

    每张卡片一个智能体,自己的服务器

    NeuroSquad 为自己的数据目录运行一个 Penguin 服务器,并在退出时停止它。每张卡片都是一个独立的 Penguin 智能体,有自己的钩子、MCP 服务器和说明;你的项目和模型会被复制进来,绝不会被修改。

    文档: 每张卡片一个智能体,自己的服务器
  • 子智能体单独统计

    子智能体在拥有独立 Trace 的子会话中运行。它运行时卡片保持工作中,用量、Run Stats 和 Agent Pulse 会把它的请求标记为子智能体的请求。

    文档: 子智能体单独统计
  • 由 NeuroSquad 实现

    危险模式,实时生效

    无需重启:卡片开关打开时,它的钩子会放行每次调用;关掉后,下一次调用又会询问。卡片模式的优先级依然更高。

    文档: 危险模式,实时生效
  • 切换模型和 CLI

    主智能体可以通过 agent_set_model 更换模型——较新的 Penguin 会在会话内直接切换,0.2.13 则开启新会话,并附上 Penguin 自己指向旧会话的引用——也可以把对话迁到 Claude Code 再迁回来。

    文档: 切换模型和 CLI
  • 隔离的 worktree

    给智能体一个独立的 git worktree,让并行的智能体永远不会改同一批文件。

    文档: 隔离的 worktree
  • 05

    费用、控制与访问

    它花了多少、最多能花多少、用的是哪个模型,以及你怎样联系到它。

  • 精确用量

    从 Penguin 的 Trace 读取:每次请求一条记录,缓存读取单独计算,子智能体单独标记。没有已知价格的模型显示“无价格”,绝不显示 $0。

    文档: 精确用量
  • 预算刹车

    超过工作区上限时,每张 Penguin 卡片都会通过服务器的中止 API 停下——聊天仍保持打开——自动提示词则等待。

    文档: 预算刹车
  • 由 NeuroSquad 实现

    OpenRouter 模型

    卡片专属的提供方组经由 NeuroSquad 的本地中继,由中继加上密钥和归属信息;文件里只有占位符。你自己的 OpenRouter 组也会这样路由。

    文档: OpenRouter 模型
  • 由 NeuroSquad 实现

    你自己的服务器

    你的每个提供方都会成为同一中继后的一个组——OpenAI Chat Completions 或 Anthropic Messages——磁盘上没有密钥。

    文档: 你自己的服务器
  • 在手机上操作

    扫一下二维码,整张画布就在手机浏览器里打开:查看 Penguin 的聊天、回答 y 或 n、发送下一条提示词。

    文档: 在手机上操作
  • 06

    须知

    Penguin 有哪些不同之处,以及哪些做不到。

  • 无法实现

    卡片无法指定会话 id

    Penguin 总是自己创建 id。NeuroSquad 从状态流捕获 id 并用它续上会话,实际效果相同。

    文档: 卡片无法指定会话 id
  • 无法实现

    不区分缓存写入和推理

    Penguin 的 Trace 把缓存创建并入输入、把推理并入输出,所以这两栏显示“未报告”。在 Claude 模型上,价格因此会略微偏低。

    文档: 不区分缓存写入和推理
  • 无法实现

    不支持省令牌

    Penguin 的 pre_tool_use 钩子只能允许或拒绝一次调用,不能改写它——所以 RTK 在这里无法工作。

    文档: 不支持省令牌
  • 插件需要更新的 Penguin

    Caveman、记忆、Context7 和 Graphify 通过提示词钩子添加文字,而 Penguin 只在 0.2.13 之后的版本才会在每条提示词上运行它。在 0.2.13 上,它们的工具依然可以通过箭头使用。

    文档: 插件需要更新的 Penguin
  • 仅限本机

    Penguin 服务器必须在 WSL 或 SSH 目标里运行,所以目前 Penguin 卡片只在本机运行。

    文档: 仅限本机
一目了然

谁在等你,用了多少

同时运行多个 Penguin 智能体时,这两张卡片回答你最常问的问题。

团队状态卡片

工作区里每个智能体的状态、模型和本轮用时。等你处理的排在最前,附带它们想做的调用。点一下状态即可筛选。

  • coupon-fixPenguinHarnessdeepseek/deepseek-chatPenguinHarness needs your permission: exec_command: rm -rf dist等你处理2:34
  • api-migrationPenguinHarnesskimi/kimi-k2把路由迁到新客户端工作中13:41
  • lint-passPenguinHarnessdeepseek/deepseek-chat修复 lint 错误工作中4:08
  • docs-passPenguinHarnessopenrouter/qwen/qwen3-coder更新 README已完成7分钟前

用量与费用

从每张卡片的 Trace 文件读取,所以每次请求只属于一张卡片。令牌数精确;子智能体的请求单独标记。

智能体令牌费用
coupon-fix1,218,804无价格
api-migration963,117无价格
docs-pass208,455US$0.13
总计2,390,376US$0.13
精确到皮美元,仅在显示时四舍五入。OpenRouter 上的卡片按其目录计价;没有已知价格的模型显示“无价格”。
幕后

真正的 penguin chat,运行在 NeuroSquad 自己的服务器上

NeuroSquad 在卡片里的真实终端中启动 Penguin 自己的聊天,并连接到应用为卡片运行的服务器。它额外添加的全部内容如下:

NeuroSquad 为命令添加的参数
❯ penguin chat
--server http://localhost:<the app’s Penguin server>每次启动应用自己的 Penguin 服务器,而不是从卡片启动的服务器
--agent-id ns_<card id>每次启动卡片自己的 Penguin 智能体,每次启动都会重建
--approve always-ask每次启动每次调用都先经过卡片的钩子
PENGUIN_HOME=<userData>/penguin/data每次启动应用的数据目录,让聊天找到服务器令牌
PENGUIN_UPDATE_CHECK=off每次启动不检查更新
--provider <group> --model-id <id>首次启动新会话使用卡片的模型
--resume <session-…>之后的启动状态流最近报告的会话
pre_tool_use → deny exec_command, input_command卡片模式拒绝 shell;改用画布上的卡片
pre_tool_use → allow every other call危险模式危险模式实时生效:无需重启

你的 ~/.penguin 从不被改写

每次启动时你的项目配置都会复制到应用的数据目录,所以卡片使用你的模型和密钥;你自己的目录只会被读取。

卡片环境里没有密钥

服务器以应用的干净环境运行,提供方密钥留在应用的中继里——所以卡片的令牌永远不会进入 Penguin 的 shell 命令。

在你安装的位置找到它

npm 包或 Penguin 安装程序的目录结构,通过它自带的 Node 运行,绕过 penguin.cmd 启动脚本。

常见问题

关于 NeuroSquad 中的 PenguinHarness

给 PenguinHarness 一张画布

免费,支持 Windows 和 macOS。你的代码、模型和费用都留在你的电脑上。

Windows 10 / 11 · macOS 12 及更新(Apple 芯片和 Intel)全部 22 款智能体 CLI