Ferret の使い方

エージェントに送る

内蔵のターミナルでコーディングエージェントを動かし、ワンクリックでレビューを渡します。よく使われるのは Claude Code と Codex ですが、下の一覧にあるエージェントならどれでも使え、自分で足した CLI も使えます。ほかの場所で動くエージェント向けに指示をコピーしたり、レビューを GitHub に投稿したりもできます。

#指摘を確かめる

指摘 タブの各カードでできること:

  • 題名と依頼をその場で直す
  • 送信する / 送信しない の切り替え
  • 録画を見る(その時刻へ移動)と 画像を差し替え(別のフレームを選ぶ)
  • 確定する / 要確認にする、次とまとめる、削除

進み具合で絞り込む で、状態ごとに指摘を表示したり隠したりできます(たとえば、あなたの確認待ちのものだけ表示する)。すべて表示 で絞り込みを解除します。

上部には 元に戻す、保存先を開く、Agent向けにコピー、GitHub / GitLab に送る、整理、Agentへ送信 があります。指摘にならなかった発話は 除外した発話 に並び、発話を指摘に戻す で戻せます。

指摘タブ

#内蔵のターミナルでエージェントを動かす

プロジェクトを開くと、Ferret は 設定 → Agent → プロジェクトを開いたら起動 で選んだエージェントごとにターミナルのタブを1つ開き、プロジェクトのフォルダで、そのエージェントの普通のモードで起動します。最初の設定は Claude Code と Codex です。

claude
codex

代わりに対応している一覧から好きなエージェントを選べます(選んだ順に起動します)。何も選ばないこともできます。

権限の確認は出たままです

プロジェクトを登録したりクローンしたりしても、Ferret がそれを信頼済みにすることはありません。Claude Code や Codex などのエージェントは、初回にそのフォルダを信頼するかを尋ね、その後もファイルを変える前やコマンドを実行する前に確認します。信頼できる1つのプロジェクトで、エージェントの権限確認・承認・サンドボックスを省くには、そのプロジェクトについて 設定 → Agent → 権限確認を省く を入にして確認します。Ferret は、分かっているエージェントにはそれぞれの省くための引数を付けます。引数が分からないエージェントは確認を出したままです。これが効くのは、そのプロジェクトのフォルダで自分で開いたエージェントだけで、プロジェクトを開いたときに起動するエージェントは常に確認を出します。引数の欄に書いた権限確認を省く引数は使われません。

エージェントを1つも選んでいなければ、普通のシェルが開きます。+ メニューからは 新しいターミナル を開いたり、自分のエージェントを新しいタブで起動したり、Agent設定… に移ったりできます。メニューの検索欄では、タブ、登録した URL、ファイルも探せます。

タブにはエージェントの状態が出ます: 実行中、入力待ち、完了(未確認)、待機中。サイドバーでは、エージェントが動いているプロジェクトに印が付くので、プロジェクトを切り替えなくても分かります。

ターミナルのタブやペインをドラッグして、分割し、動かし、タブに戻す。

ドラッグで分割する。 タブか、ペインのつまみ(タブを分割すると出ます)をドラッグして、次の場所で離します。

  • ペインの端の外側4分の1: 左に分割 / 右に分割 / 上に分割 / 下に分割
  • ペインの中央: タブとして開く(ペインは分割から外れて、独立したタブになります)
  • ターミナル全体を囲む細い帯: 全体の左に分割 など(ペインが2つ以上あるとき)
  • タブバー: ここにタブとして置く

動かしている間もプロセスは動き続け、空になったタブは閉じます。キーボードでの分割:

操作macOSWindows / Linux
新しいターミナル⌘TCtrlT
右に分割⌘DCtrlShiftD
下に分割⌘⇧DAltShiftD
閉じる(ペイン/タブ)⌘WCtrlW

#対応しているエージェント

Ferret は特定のエージェントに縛られません。下のコーディングエージェントを認識し、起動したり、Agentへ送信 のためにターミナルの中から見つけたり、インストール済みかどうかを表示したりできます。設定 → Agent には、インストール済み / 見つかりません、提供元が1行のインストーラーを公開している場合の インストール ボタン、各エージェントのコマンドと引数が並びます。

一覧に無いときは、設定 → Agent → カスタムエージェントを追加 で、どんな CLI やラッパースクリプトでも登録できます(名前、コマンド、必要なら見分けるためのプロセス名)。settings.json の agents.customAgents に足すこともできます。Ferret の外で動くエージェントには Agent向けにコピー を使えます。

いくつかの機能はエージェントによって違い、今のところ Claude Code と Codex だけで使えます。

  • アカウントと使用量: 複数のログインの切り替えと、フッターのレート制限のメーター。
  • 整理: Claude Code か Codex のログイン、または自分で設定した LLM API で動きます。

#Agentへ送信 / Agent向けにコピー

指摘タブから「Agentへ送信」で、内蔵のターミナルのエージェントへ送る。
  1. Agentへ送信 を押します。既定(自動(今のタブか、動いている Agent))では、いま開いているターミナルのタブのエージェントか、動いているエージェントに届きます。ボタンの横の矢印(送り先の Agent を選ぶ)で、送り先のエージェントやタブを選べます。
  2. Ferret はエージェントの入力欄に指示を書き込んで送信します。進み具合はターミナルで追います。

エージェントが動いていなければ、Ferret が先に起動し、準備ができしだい送ります。エージェントが権限の確認への答えを待っている間は何も送りません。先にターミナルで答えてください。

Agent向けにコピー は、ほかの場所(別のターミナル、IDE、アプリ)で動くエージェントのために、同じ指示をクリップボードに入れます。対象になるのは 送信する にした指摘だけです。動画は決して含めません。

#判定モデルでの受け入れ確認

エージェントが指摘を直し、すべて通るまで判定モデルで1件ずつ確かめる。

これを入にすると、コーディングエージェントは「完了」と報告する前に、自分の作業を指摘ごとに確かめます。Ferret 自身は何も判定しません。エージェントに判定モデル(System One 互換の API ならどれでも)を渡し、すべての指摘が通るまで繰り返すよう feedback.md で指示します。

  1. エージェントが指摘を実装します。
  2. 指摘ごとに AFTER のスクリーンショットを撮り(BEFORE の静止画と同じビューポートとページの状態で)、指摘の文、その「完了の条件」の行、BEFORE / AFTER の画像を1つのリクエストで判定モデルに送ります。
  3. P(done) がしきい値(既定 0.7)以上で、選ばれた答えが done なら、その指摘は合格です。エージェントは残りを直し、毎回すべての指摘を判定し直します。止まるのは、同じ回ですべての指摘が合格したときか、はっきり書くべき正当な理由があるときだけです(API につながらない、指摘が対象外、点数が変わらず行き詰まっている)。
  4. 最後の「完了/未完了」の一覧には、指摘ごとの点数と回数が入ります。

設定 → 判定モデル で設定し、Agent への指示に判定モデルでの確認を入れる を入にします。プリセットは欄を埋めるだけで、どの欄も後から直せます。任意の接続先 は互換の API ならどれでも使えます。

プリセットリクエスト URLモデルキー
Ollama(既定)http://localhost:11434/v1/systemoneclef-flash、clef(画像を読める)、nimble、tev1(テキストのみ)不要、無料
Cloudflare Workers AIhttps://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 Gatewayhttps://ai-gateway.vercel.sh/typesafe/v1/systemonetypesafe-ai/jev、convaiinnovations/laya(テキストのみ)AI_GATEWAY_API_KEY
TypeSafehttps://api.typesafe.ai/v1/systemonejev-latest、jev-preview(テキストのみ)TYPESAFE_API_KEY
任意の接続先任意の完全な URL任意Bearer、任意のヘッダー、またはなし。追加のヘッダーも使える

Ollama を使うときは、Ollama を入れ(Clef / Clef Flash には 0.35.1 以降が必要)、ターミナルでモデルを取得します。Ferret はインストーラーを実行しません。

ollama pull clef-flash

キーは、キーの欄(ほかの API キーと一緒に保存)、名前を指定した環境変数(アプリの環境、プロジェクトの .env、または ~/.ferret/.env)、または settings.json の apiKey から読みます。追加のヘッダーでは ${VAR} で環境変数の値を使えます。

キーが指示に入らないしくみ

エージェントがキーを見ることはありません。Ferret は 127.0.0.1 でローカルの中継を動かし、各ターミナルに FERRET_DECISION_URL(中継の URL。ターミナルごとのトークン付き)、FERRET_DECISION_MODEL、FERRET_DECISION_IMAGES を渡します(1リリースの間は、古い MOVIE_ADE_DECISION_* という名前も設定します)。中継がキーとヘッダーを付けてリクエストをそのまま転送するので、指示、feedback.md、エージェントのやり取りの記録には秘密の情報が入りません。設定を変えた後に開いたターミナルから反映されます。

Cloudflare は System One のドキュメントと2点違います(実際の API で確認済み)。画像はデータ URI(data:image/jpeg;base64,…)でなければならず、そうでないと 422 "image must be an embedded base64 data URI" になります。また、答えは { "result": { … }, "success": true } で包まれて返ります(エラーは { "success": false, "errors": [ … ] })。Cloudflare のプリセットは 画像の渡し方 をデータ URI にし、エージェントはそれを FERRET_DECISION_IMAGE_FORMAT として受け取り、指示では .result があればそれを読むよう伝えます。中継は行きも帰りもそのまま通します。API トークンの代わりに Global API Key を使うときは、認証 を キーなし にし、ヘッダー X-Auth-Email: ${CLOUDFLARE_EMAIL} と X-Auth-Key: ${CLOUDFLARE_API_KEY} を足します。

画像を読めるのは Clef と Clef Flash だけです。テキストのみのモデルでは BEFORE / AFTER の画像を送る を切にします。その場合エージェントはテキストだけで判定するので、確かさは下がります。

Ollama と大きな画像

Ollama 0.35.0 は /v1/systemone へのリクエストを 64 KiB までに制限しているため、スクリーンショット付きのリクエストは HTTP 413 で失敗します。指示では、両方の画像を幅 1024px 以下の JPEG(品質 70 ほど)に縮めるようエージェントに伝えます。それでも 413 になるときは、Ollama を 0.35.1 以降に上げるか、Cloudflare Workers AI に切り替えてください。

#フッターの API 使用量

判定の呼び出しは中継を通るので、Ferret が数えられます。フッターで、エージェントの使用量メーターの横にある項目に、判定モデルと、今日の呼び出し回数・トークン数・費用が出ます(たとえば clef-flash · 42 calls · 18.3k tok)。押すと、今日、今月、プロジェクト別、モデル別、種類別(判定 / 文字起こし / 整理)の集計と、直近50回の呼び出しが見られます。

費用が出るのは、API が費用を返すとき(Vercel AI Gateway は返します)か、設定 → 判定モデル で 1M トークンあたりの価格を設定したときだけです。それ以外は「—」と出ます。記録するのはメタデータ(時刻、プロジェクト、モデル、状態、待ち時間、サイズ、画像の数、トークン数、費用)だけで、画像・テキスト・キーは記録しません。記録先は ~/.ferret/usage/decision-YYYY-MM.jsonl で、月ごとに1ファイルです。

#指示を変える

設定 → Agent → Agentへの指示 を編集します。展開される変数は2つです。

変数展開される内容
{{path}}feedback.md の絶対パス
{{relpath}}プロジェクトからの相対パス: .ferret/reviews/<id>/feedback.md

空にすると既定の指示を使います。最大 2000 文字で、指示を既定に戻す で既定に戻せます。例:

Read {{relpath}} and the PNGs next to it. Fix only findings marked to send, one commit per finding, then run the tests.

この設定は settings.json の agentPrompt に保存されます。

#GitHub や GitLab に送る(Issue / PR・MR へのコメント)

GitHub に送る は、レビューを新しい Issue として、または自分の開いている Pull Request の1つへのコメントとして投稿します。認証は GitHub CLI (新しいタブで開きます) に任せます。Ferret がトークンを読んだり保存したりすることはありません。

  1. gh を入れます: brew install gh(macOS)、winget install --id GitHub.cli(Windows)、またはほかの方法は cli/cli (新しいタブで開きます) を見てください。
  2. 設定 → GitHub / GitLab → ターミナルでログイン が、内蔵のターミナルで gh auth login --web -h github.com を実行します。
  3. GitHub に送る を押し、新しい Issue を作る か PR を選び、タイトル と 本文 を確かめます(直せます)。
  4. 確認のチェックボックスに印を付け、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 の1つへのコメントです。ログインは 設定 → GitHub / GitLab から行い、内蔵のターミナルで glab auth login(セルフマネージドの GitLab では --hostname 付き)を実行します。Ferret がトークンを読んだり保存したりすることはなく、GITLAB_TOKEN が設定されていると注意を出します。

star のお願い。 最初に Agentへ送信 した後と、終えたレビューが 3、10、30 件になったときに、Ferret が GitHub で star を付けてほしいと尋ねることがあります。尋ねるのは最大3回で、間は3日以上空け、録画中には尋ねません。GitHub で star は自分の gh のログインで star を付けます(gh が使えなければ GitHub を開きます)。今後表示しない を押すと、もう尋ねません。ヘルプ → GitHub で Ferret に star… からも star を付けられます。

#CLI ツールを入れてログインする

設定 → CLI には、エージェントがよく使うコマンドラインツールが並び、インストール済みかどうかとバージョンが出ます。OS に合った公式のインストールやログインのコマンドを、新しいターミナルのタブで実行できます。

  • Git のホスティング: gh、glab
  • AI とモデル: Ollama、Cloudflare wrangler
  • デプロイ: Vercel、Netlify、Fly.io、Railway、Heroku
  • クラウドとサービス: Supabase、Firebase、Stripe、Google Cloud(gcloud)、AWS、Azure、Docker

その OS 向けの1行の公式インストーラーが無いツールでは、ドキュメント がそのインストール方法のページを開きます。インストールが終わると、一覧は自動でもう一度確かめます。

GitHub でこのページの翻訳を手伝う (新しいタブで開きます)