使用 Ferret
发送给 Agent
在内置终端中运行你的编码 Agent,一键把审查交给它。Claude Code 和 Codex 是常见的例子,但下面列表中的任何 Agent 都可以使用,你自己添加的 CLI 也可以。你也可以为在其他地方运行的 Agent 复制指令,或者把审查发布到 GitHub。
#审查反馈
反馈 标签页中的每张卡片支持:
- 直接编辑标题和请求
- 切换 发送 / 不发送
- 观看录制(跳转到对应时间)和 替换图片(选择另一帧)
- 确认 / 标记为需确认、与下一条合并、删除
按进度筛选 按状态显示或隐藏反馈(例如 仅显示 等待你检查的反馈);全部显示 会清除筛选。
顶部有 撤销、打开文件夹、拷贝给 Agent、发送到 GitHub / GitLab、整理 和 发送给 Agent。没有成为反馈的语音列在 已排除的语音 下,点击 恢复为反馈 可以把它找回来。
#在内置终端中运行 Agent
打开项目时,Ferret 会为 设置 → Agent → 打开项目时启动 中的每个 Agent 各启动一个终端标签页,位于项目文件夹中,并以该 Agent 的普通模式运行。默认是 Claude Code 和 Codex:
claude
codex
你也可以改为从支持列表中任选 Agent(按你选择的顺序启动),或者一个都不选。
权限确认保持开启
登记或克隆项目并不会让 Ferret 信任它。Claude Code 和 Codex 等 Agent 第一次会询问你是否信任该文件夹,并且在编辑文件或运行命令前仍会继续询问。若要在你信任的某个项目中让 Agent 跳过权限确认、审批和沙盒,请在 设置 → Agent → 跳过权限确认 中为该项目开启并确认。对于已知跳过参数的 Agent,Ferret 会添加该 Agent 自己的跳过参数;没有已知参数的 Agent 仍会保留确认。此设置只对你自己在该项目文件夹中打开的 Agent 生效;打开项目时自动启动的 Agent 始终保留确认。在参数中手动输入的跳过权限参数会被忽略。
如果没有选择任何 Agent,则会打开普通的 shell。+ 菜单可以打开 新建终端、在新标签页中启动你的任意 Agent,或跳转到 Agent 设置…。它的搜索框还能查找标签页、已保存的 URL 和文件。
标签页会显示 Agent 的状态:运行中、等待输入、完成(未读)、空闲。在侧边栏中,有 Agent 正在运行的项目会带有标记,无需切换项目就能看到。
拖动以拆分。拖动一个标签页,或通过手柄拖动一个窗格(标签页拆分后才会显示手柄),然后放到:
- 窗格边缘靠外的四分之一处:向左拆分 / 向右拆分 / 向上拆分 / 向下拆分
- 窗格中央:作为标签页打开(窗格离开所在的拆分,成为独立的标签页)
- 整个终端区域四周的细条上:将整个区域向左拆分 等(有 2 个或更多窗格时)
- 标签栏上:作为标签页放在此处
移动时进程会继续运行,变空的标签页会自动关闭。键盘拆分:
| 操作 | macOS | Windows / Linux |
|---|---|---|
| 新建终端 | ⌘T | CtrlT |
| 向右拆分 | ⌘D | CtrlShiftD |
| 向下拆分 | ⌘⇧D | AltShiftD |
| 关闭窗格 / 标签页 | ⌘W | CtrlW |
#支持的 Agent
Ferret 不绑定于某一个 Agent。它能识别下列编码 Agent:可以启动它们,在终端中检测到它们以便 发送给 Agent,并显示它们是否已安装。设置 → Agent 会列出这些 Agent,显示 已安装 / 未找到;对于厂商提供了一行安装命令的 Agent,还有 安装 按钮;此外还有每个 Agent 的命令和参数。
- Claude Code (在新标签页中打开)
claude - Codex (在新标签页中打开)
codex - Gemini CLI (在新标签页中打开)
gemini - Cursor (在新标签页中打开)
agent - GitHub Copilot (在新标签页中打开)
copilot - Devin (在新标签页中打开)
devin - OpenCode (在新标签页中打开)
opencode - Amp (在新标签页中打开)
amp - Droid (在新标签页中打开)
droid - Kiro (在新标签页中打开)
kiro-cli chat - Aider (在新标签页中打开)
aider - Ante (在新标签页中打开)
ante - Antigravity (在新标签页中打开)
agy - Auggie (在新标签页中打开)
auggie - Autohand Code (在新标签页中打开)
autohand - BLACKBOX CLI (在新标签页中打开)
blackbox - Cline (在新标签页中打开)
cline - CodeBuddy (在新标签页中打开)
codebuddy - Codebuff (在新标签页中打开)
codebuff - Command Code (在新标签页中打开)
command-code --trust - Continue (在新标签页中打开)
cn - Charm (Crush) (在新标签页中打开)
crush - DeepSeek Harness (在新标签页中打开)
dsh tui - ForgeCode (在新标签页中打开)
forge - Freebuff (在新标签页中打开)
freebuff - Goose (在新标签页中打开)
goose session - Grok (在新标签页中打开)
grok - Hermes Agent (在新标签页中打开)
hermes --tui - Junie CLI (在新标签页中打开)
junie - Kilocode (在新标签页中打开)
kilo - Kimi (在新标签页中打开)
kimi - Letta Code (在新标签页中打开)
letta - MiMo Code (在新标签页中打开)
mimo - Mistral Vibe (在新标签页中打开)
vibe - Muse (在新标签页中打开)
muse --trust-workspace - oh-my-pi (在新标签页中打开)
omp - OpenClaude (在新标签页中打开)
openclaude - OpenClaw (在新标签页中打开)
openclaw chat - OpenHands CLI (在新标签页中打开)
openhands - Pi (在新标签页中打开)
pi - Prime Agent (在新标签页中打开)
prime-agent - Qoder CLI (在新标签页中打开)
qoder - Qwen Code (在新标签页中打开)
qwen - Roo Code CLI (在新标签页中打开)
roo - Rovo Dev (在新标签页中打开)
acli rovodev run - Trae CLI (在新标签页中打开)
traecli - ZCode (在新标签页中打开)
zcode
列表中没有?设置 → Agent → 添加自定义 Agent 可以登记任何 CLI 或包装脚本(名称、命令,以及可选的用于识别它的进程名),也可以把它添加到 settings.json 的 agents.customAgents 中。在 Ferret 之外运行的 Agent 可以使用 拷贝给 Agent。
少数功能依赖于具体的 Agent,目前仅限 Claude Code 和 Codex:
- 账户与用量:在多个登录之间切换,以及底栏中的速率限制用量表。
- 整理:使用你的 Claude Code 或 Codex 登录运行,或使用你配置的 LLM API。
#发送给 Agent / 拷贝给 Agent
- 点击 发送给 Agent。默认(自动(当前标签页或正在运行的 Agent))会发送给当前终端标签页中的 Agent,或某个正在运行的 Agent。使用按钮旁边的箭头(选择要发送给的 Agent)可以指定某个 Agent 或标签页。
- Ferret 会把指令写入 Agent 的输入框并提交。在终端中查看进度。
如果没有正在运行的 Agent,Ferret 会先启动一个,并在它就绪后立即发送。当 Agent 正在等待权限确认的回答时,不会发送任何内容。请先在终端中回答。
拷贝给 Agent 会把同样的指令放到剪贴板,供在其他地方(另一个终端、IDE 或应用)运行的 Agent 使用。只有切换为 发送 的反馈会被处理。视频永远不会包含在内。
#用判定模型做验收检查
开启后,你的编码 Agent 会在报告完成前,逐条对照反馈检查自己的工作。Ferret 本身不做任何判断:它给 Agent 提供一个判定模型(任何兼容 System One 的 API),并在 feedback.md 中要求它循环执行,直到每条反馈都通过。
- Agent 实现这些反馈。
- 对每条反馈,它截取一张 AFTER 截图(与 BEFORE 静帧相同的视口和页面状态),然后向判定模型发送一个请求,包含反馈文本、“完成条件”一行以及 BEFORE/AFTER 图片。
- 当 P(done) 不低于阈值(默认 0.7)且选择为
done时,该反馈通过。Agent 修复其余反馈,并在每一轮重新判定所有反馈;只有当所有反馈在同一轮中都通过时才停止,或者因为必须说明的正当理由而停止:API 无法访问、某条反馈超出范围,或某条反馈卡住且分数不再变化。 - 最终的“已完成 / 未完成”列表包含每条反馈的分数和轮数。
在 设置 → 判定模型 中进行设置,并开启 在 Agent 指令中加入判定模型检查。预设只会填写字段;每个字段都可以编辑,自定义 可用于任何兼容的 API。
| 预设 | 请求 URL | 模型 | 密钥 |
|---|---|---|---|
| Ollama(默认) | http://localhost:11434/v1/systemone | clef-flash、clef(可读图片);nimble、tev1(仅文本) | 无,免费 |
| Cloudflare Workers AI | https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/run/@cf/cloudflare/{model} | clef-flash、clef(可读图片) | CLOUDFLARE_API_TOKEN(Workers AI 权限);账户 ID 来自字段或 CLOUDFLARE_ACCOUNT_ID |
| Vercel AI Gateway | https://ai-gateway.vercel.sh/typesafe/v1/systemone | typesafe-ai/jev、convaiinnovations/laya(仅文本) | AI_GATEWAY_API_KEY |
| TypeSafe | https://api.typesafe.ai/v1/systemone | jev-latest、jev-preview(仅文本) | TYPESAFE_API_KEY |
| 自定义 | 任意完整 URL | 任意 | Bearer、自定义请求头或无;可添加额外请求头 |
使用 Ollama 时,先安装它(Clef / Clef Flash 需要 0.35.1 或更高版本),然后在终端中拉取模型。Ferret 不会运行安装程序:
ollama pull clef-flash
密钥来自密钥字段(与你的其他 API 密钥一起保存)、你指定的环境变量(应用的环境、项目的 .env 或 ~/.ferret/.env),或 settings.json 中的 apiKey。额外请求头可以用 ${VAR} 从环境变量读取值。
密钥如何不进入提示词
Agent 永远看不到你的密钥。Ferret 在 127.0.0.1 上运行一个本地中继,并给每个终端提供 FERRET_DECISION_URL(中继地址,带有每个终端独立的令牌)、FERRET_DECISION_MODEL 和 FERRET_DECISION_IMAGES(在一个版本内,旧的 MOVIE_ADE_DECISION_* 名称也会一并设置)。中继添加密钥和请求头后原样转发请求,因此提示词、feedback.md 和 Agent 的对话记录中都不含机密信息。更改设置后新打开的终端会使用新设置。
Cloudflare 与 System One 文档有两处不同(已对照实际 API 确认):图片必须是 data URI(data:image/jpeg;base64,…,否则返回 422 "image must be an embedded base64 data URI"),并且应答被包装为 { "result": { … }, "success": true }(错误返回为 { "success": false, "errors": [ … ] })。Cloudflare 预设会把 图片编码 设为 data URI,Agent 通过 FERRET_DECISION_IMAGE_FORMAT 获得该值,指令也会告诉它们在存在 .result 时读取它。中继对两个方向都原样传递。若要使用 Global API Key 而不是 API 令牌,请把 认证 设为 无密钥,并添加请求头 X-Auth-Email: ${CLOUDFLARE_EMAIL} 和 X-Auth-Key: ${CLOUDFLARE_API_KEY}。
只有 Clef 和 Clef Flash 能读取图片。使用仅文本的模型时,请关闭 发送 BEFORE/AFTER 图片;这时 Agent 只根据文本判定,可靠性较低。
Ollama 与大图片
Ollama 0.35.0 把 /v1/systemone 请求限制在 64 KiB,因此带截图的请求会以 HTTP 413 失败。指令会告诉 Agent 把两张图片都缩小到宽度不超过 1024px 的 JPEG(质量约 70)。如果仍然得到 413,请把 Ollama 更新到 0.35.1 或更高版本,或改用 Cloudflare Workers AI。
#底栏中的 API 用量
判定调用都经过中继,因此 Ferret 可以统计它们。底栏中 Agent 用量表旁边的项目会显示判定模型以及今天的调用次数、token 数和费用(例如 clef-flash · 42 calls · 18.3k tok)。点击它可以查看今天、本月、按项目、按模型和按类型(判定 / 转写 / 整理)的统计,以及最近 50 次调用。
只有在 API 报告费用时(Vercel AI Gateway 会报告),或你在 设置 → 判定模型 中设置了每 100 万 token 的价格时,才会显示费用;否则显示“—”。只记录元数据(时间、项目、模型、状态、延迟、大小、图片数、token 数、费用),绝不记录图片、文本或密钥,记录保存在 ~/.ferret/usage/decision-YYYY-MM.jsonl,每月一个文件。
#自定义指令
编辑 设置 → Agent → 给 Agent 的指令。以下两个变量会被展开:
| 变量 | 展开为 |
|---|---|
{{path}} | feedback.md 的绝对路径 |
{{relpath}} | 相对于项目的路径:.ferret/reviews/<id>/feedback.md |
留空则使用默认指令。最大长度为 2000 个字符,重置指令 会恢复默认值。示例:
阅读 {{relpath}} 及其旁边的 PNG。只修复标记为发送的反馈,每条反馈一个 commit,然后运行测试。
该设置以 agentPrompt 保存在 settings.json 中。
#发送到 GitHub 或 GitLab(Issue / PR 或 MR 评论)
发送到 GitHub 会把审查发布为一个新 Issue,或发布为你某个打开的 pull request 上的评论。认证交给 GitHub CLI (在新标签页中打开) 处理。Ferret 从不读取或保存令牌。
- 安装
gh:brew install gh(macOS)、winget install --id GitHub.cli(Windows),或参阅 cli/cli (在新标签页中打开)。 - 设置 → GitHub / GitLab → 在终端中登录 会在内置终端中运行
gh auth login --web -h github.com。 - 点击 发送到 GitHub,选择 新建 Issue 或某个 PR,然后检查 标题 和 正文(可编辑)。
- 勾选确认复选框,然后点击 创建 Issue 或 发表评论。
细节:
- 仓库取自
git remote get-url origin。 - Ferret 会运行
gh issue create --repo … --title … --body-file -或gh pr comment <n> --repo … --body-file -。 - 正文是去掉图片行的
feedback.md(不上传图片),最多 60,000 个字符。 - 候选 PR 是你自己打开的 PR(最多 30 个)。
如果设置了 GH_TOKEN 或 GITHUB_TOKEN,gh 会优先使用它,设置面板会对此发出警告。
GitLab。当 origin 是 GitLab 项目(gitlab.com 或自托管的 GitLab)时,同一个按钮会通过 GitLab CLI (在新标签页中打开)(glab)发送到 GitLab:新建 Issue,或在你某个打开的 merge request 上发表评论。通过 设置 → GitHub / GitLab 登录,它会在内置终端中运行 glab auth login(自托管 GitLab 会带上 --hostname)。Ferret 从不读取或保存令牌,并会在设置了 GITLAB_TOKEN 时发出警告。
点星提示。在你第一次 发送给 Agent 之后,以及完成的审查达到 3、10 和 30 次时,Ferret 可能会请你在 GitHub 上为它点星。它最多询问 3 次,每次至少间隔 3 天,并且录制时从不询问。在 GitHub 上点星 会通过你自己的 gh 登录点星(如果没有 gh,则打开 GitHub),不再询问 会停止提示。你也可以通过 帮助 → 在 GitHub 上为 Ferret 点星 点星。
#安装并登录 CLI 工具
设置 → CLI 工具 列出你的 Agent 经常需要的命令行工具,显示哪些已安装及其版本,并在新的终端标签页中运行适用于你的操作系统的官方安装或登录命令:
- Git 托管:
gh、glab - AI 与模型:Ollama、Cloudflare
wrangler - 部署:Vercel、Netlify、Fly.io、Railway、Heroku
- 云与服务:Supabase、Firebase、Stripe、Google Cloud(
gcloud)、AWS、Azure、Docker
如果某个工具在你的操作系统上没有一行式的官方安装命令,文档 会改为打开它的安装页面。安装完成后,列表会自动重新检查。