Menggunakan Ferret

Mengirim ke agent

Jalankan agent coding Anda di terminal bawaan dan serahkan tinjauan kepadanya dengan satu klik. Claude Code dan Codex adalah contoh yang umum, tetapi agent mana pun dalam daftar di bawah bisa dipakai, begitu juga CLI yang Anda tambahkan sendiri. Anda juga bisa menyalin instruksi untuk agent yang berjalan di tempat lain, atau mengirim tinjauan ke GitHub.

#Meninjau temuan

Setiap kartu di tab Temuan mendukung:

  • Edit judul dan permintaan langsung di tempat
  • Sakelar Kirim / Jangan kirim
  • Tonton Rekaman (melompat ke waktu tersebut) dan Ganti Gambar (pilih frame lain)
  • Konfirmasi / Tandai Perlu Ditinjau, Gabung dengan Berikutnya, Hapus

Saring menurut progres menampilkan atau menyembunyikan temuan berdasarkan status (misalnya Hanya temuan yang menunggu tinjauan Anda); Tampilkan semua menghapus saringan.

Header berisi Urungkan, Buka Folder, Salin untuk Agent, Kirim ke GitHub / GitLab, Rapikan, dan Kirim ke Agent. Ucapan yang tidak menjadi temuan dicantumkan di Ucapan yang dikecualikan, tempat Pulihkan sebagai Temuan mengembalikannya.

Tab Temuan

#Menjalankan agent di terminal bawaan

Saat proyek dibuka, Ferret memulai satu tab terminal per agent yang ada di Pengaturan → Agent → Jalankan Saat Proyek Dibuka, di folder proyek dan dalam mode normal agent tersebut. Bawaannya adalah Claude Code dan Codex:

claude
codex

Sebagai gantinya, pilih agent mana pun dari daftar yang didukung (agent dimulai sesuai urutan Anda memilihnya), atau tidak sama sekali.

Permintaan izin tetap aktif

Mendaftarkan atau meng-clone proyek tidak membuat Ferret memercayainya. Agent seperti Claude Code dan Codex menanyakan apakah Anda memercayai folder tersebut pada kali pertama, dan terus bertanya sebelum mengedit file atau menjalankan perintah. Agar agent bisa melewati permintaan izin, persetujuan, dan sandbox di satu proyek yang Anda percayai, aktifkan untuk proyek tersebut di Pengaturan → Agent → Lewati permintaan izin lalu konfirmasi. Ferret menambahkan flag lewati milik masing-masing agent jika flag tersebut diketahui; agent tanpa flag yang diketahui tetap meminta izin. Pengaturan ini hanya berlaku untuk agent yang Anda buka sendiri di folder proyek tersebut; agent yang dimulai saat proyek dibuka selalu tetap meminta izin. Flag lewati izin yang diketik di argumen akan diabaikan.

Jika tidak ada agent yang dipilih, shell biasa yang dibuka. Menu + membuka Terminal Baru, menjalankan salah satu agent Anda di tab baru, atau melompat ke Pengaturan agent…. Kotak pencariannya juga menemukan tab, URL tersimpan, dan file.

Tab menampilkan status agent: Berjalan, Menunggu input, Selesai (belum dibaca), Diam. Di sidebar, proyek yang agent-nya sedang berjalan diberi tanda, sehingga Anda bisa melihatnya tanpa berpindah proyek.

Menyeret tab dan panel terminal untuk memisah, memindahkan, dan mengembalikannya menjadi tab.

Seret untuk memisah. Seret tab, atau panel melalui pegangannya (muncul setelah tab dipisah), lalu lepaskan:

  • di seperempat bagian luar tepi panel: Pisah ke Kiri / Pisah ke Kanan / Pisah ke Atas / Pisah ke Bawah
  • di tengah panel: Buka sebagai Tab (panel keluar dari pemisahannya dan menjadi tab tersendiri)
  • di pita tipis di sekeliling seluruh area terminal: Pisah seluruh area ke kiri dan seterusnya (jika ada 2 panel atau lebih)
  • di bilah tab: Tempatkan sebagai tab di sini

Proses tetap berjalan saat Anda memindahkannya, dan tab yang menjadi kosong akan ditutup. Pemisahan dengan keyboard:

TindakanmacOSWindows / Linux
Terminal Baru⌘TCtrlT
Pisah ke Kanan⌘DCtrlShiftD
Pisah ke Bawah⌘⇧DAltShiftD
Tutup Panel / Tab⌘WCtrlW

#Agent yang didukung

Ferret tidak terikat pada satu agent. Ferret mengenali agent coding di bawah ini: Ferret bisa menjalankannya, mendeteksinya di terminal untuk Kirim ke Agent, dan menampilkan apakah agent tersebut terinstal. Pengaturan → Agent mencantumkannya dengan Terinstal / Tidak ditemukan, tombol Instal jika vendornya menyediakan installer satu baris, serta perintah dan argumen untuk masing-masing.

Tidak ada di daftar? Pengaturan → Agent → Tambah Agent Kustom mendaftarkan CLI atau skrip wrapper apa pun (nama, perintah, dan opsional nama proses yang dipakai untuk mengenalinya), atau tambahkan ke agents.customAgents di settings.json. Agent yang berjalan di luar Ferret bisa memakai Salin untuk Agent.

Beberapa fitur bergantung pada agent dan untuk saat ini terbatas pada Claude Code dan Codex:

  • Akun dan penggunaan: berpindah antara beberapa login dan meteran batas rate di footer.
  • Rapikan: berjalan dengan login Claude Code atau Codex Anda, atau dengan API LLM yang Anda konfigurasi.

#Kirim ke Agent / Salin untuk Agent

Dari tab Temuan ke agent di terminal bawaan dengan Kirim ke Agent.
  1. Klik Kirim ke Agent. Secara bawaan (Otomatis (tab saat ini atau agent yang berjalan)), instruksi dikirim ke agent di tab terminal saat ini, atau ke agent yang sedang berjalan. Gunakan panah di samping tombol (Pilih agent tujuan) untuk memilih agent atau tab tertentu.
  2. Ferret menulis instruksi ke input agent lalu mengirimkannya. Pantau progresnya di terminal.

Jika tidak ada agent yang berjalan, Ferret menjalankannya terlebih dahulu dan mengirim begitu agent siap. Tidak ada yang dikirim selama agent menunggu jawaban izin. Jawab di terminal terlebih dahulu.

Salin untuk Agent menaruh instruksi yang sama di clipboard untuk agent yang berjalan di tempat lain (terminal lain, IDE, atau aplikasi). Hanya temuan yang disetel ke Kirim yang disertakan. Videonya tidak pernah disertakan.

#Pemeriksaan penerimaan dengan model keputusan

Agent memperbaiki temuan dan memeriksa masing-masing dengan model keputusan sampai semuanya lolos.

Aktifkan fitur ini, dan agent coding Anda akan memeriksa hasil kerjanya sendiri terhadap setiap temuan sebelum melaporkan Selesai. Ferret sendiri tidak menilai apa pun: Ferret memberi agent sebuah model keputusan (API apa pun yang kompatibel dengan System One) dan, di feedback.md, memintanya mengulang sampai setiap temuan lolos.

  1. Agent mengimplementasikan temuan.
  2. Untuk setiap temuan, agent mengambil screenshot AFTER (viewport dan status halaman yang sama dengan gambar BEFORE) dan mengirim satu permintaan berisi teks temuan, baris "Selesai jika", serta gambar BEFORE/AFTER ke model keputusan.
  3. Temuan lolos jika P(done) setidaknya sama dengan ambang batas (bawaan 0.7) dan pilihannya adalah done. Agent memperbaiki sisanya dan menilai ulang semua temuan di setiap putaran, dan hanya berhenti jika setiap temuan lolos dalam putaran yang sama, atau karena alasan jujur yang harus disebutkannya: API tidak dapat dijangkau, temuan berada di luar cakupan, atau temuan macet dengan skor yang tidak berubah.
  4. Daftar akhir Selesai / Belum selesai mencantumkan skor setiap temuan dan jumlah putarannya.

Siapkan di Pengaturan → Model keputusan lalu aktifkan Tambahkan pemeriksaan model keputusan ke instruksi agent. Preset hanya mengisi field; setiap field tetap bisa diedit, dan Kustom berfungsi dengan API kompatibel apa pun.

PresetURL permintaanModelKey
Ollama (bawaan)http://localhost:11434/v1/systemoneclef-flash, clef (membaca gambar); nimble, tev1 (hanya teks)tidak perlu, gratis
Cloudflare Workers AIhttps://api.cloudflare.com/client/v4/accounts/{account_id}/ai/run/@cf/cloudflare/{model}clef-flash, clef (membaca gambar)CLOUDFLARE_API_TOKEN (izin Workers AI); account ID dari field atau CLOUDFLARE_ACCOUNT_ID
Vercel AI Gatewayhttps://ai-gateway.vercel.sh/typesafe/v1/systemonetypesafe-ai/jev, convaiinnovations/laya (hanya teks)AI_GATEWAY_API_KEY
TypeSafehttps://api.typesafe.ai/v1/systemonejev-latest, jev-preview (hanya teks)TYPESAFE_API_KEY
KustomURL lengkap apa punapa punBearer, header kustom, atau tidak ada; header tambahan diperbolehkan

Untuk Ollama, instal (0.35.1 atau lebih baru untuk Clef / Clef Flash) lalu tarik modelnya di terminal. Ferret tidak menjalankan installer:

ollama pull clef-flash

Key diambil dari field key (disimpan bersama API key Anda yang lain), dari variabel lingkungan yang Anda sebutkan (lingkungan aplikasi, .env proyek, atau ~/.ferret/.env), atau dari apiKey di settings.json. Header tambahan bisa membaca nilai dari variabel lingkungan dengan ${VAR}.

Bagaimana key tidak masuk ke prompt

Agent tidak pernah melihat key Anda. Ferret menjalankan relay lokal di 127.0.0.1 dan memberi setiap terminal FERRET_DECISION_URL (relay tersebut, dengan token per terminal), FERRET_DECISION_MODEL, dan FERRET_DECISION_IMAGES (selama satu rilis, nama lama MOVIE_ADE_DECISION_* juga diatur). Relay menambahkan key dan header lalu meneruskan permintaan tanpa perubahan, sehingga prompt, feedback.md, dan transkrip agent tidak berisi rahasia apa pun. Terminal yang dibuka setelah Anda mengubah pengaturan akan memakai nilai yang baru.

Cloudflare berbeda dari dokumentasi System One dalam dua hal (diperiksa terhadap API yang sebenarnya): gambar harus berupa data URI (data:image/jpeg;base64,…, jika tidak akan muncul 422 "image must be an embedded base64 data URI"), dan jawabannya dibungkus sebagai { "result": { … }, "success": true } (error dikembalikan sebagai { "success": false, "errors": [ … ] }). Preset Cloudflare mengatur Encoding gambar ke data URI, agent menerimanya sebagai FERRET_DECISION_IMAGE_FORMAT, dan instruksinya meminta agent membaca .result jika ada. Relay meneruskan kedua arah tanpa perubahan. Untuk memakai Global API Key alih-alih API token, atur Autentikasi ke Tanpa key lalu tambahkan header X-Auth-Email: ${CLOUDFLARE_EMAIL} dan X-Auth-Key: ${CLOUDFLARE_API_KEY}.

Hanya Clef dan Clef Flash yang membaca gambar. Dengan model yang hanya teks, matikan Kirim gambar BEFORE/AFTER; agent kemudian menilai hanya dari teks, yang kurang andal.

Ollama dan gambar besar

Ollama 0.35.0 membatasi permintaan /v1/systemone hingga 64 KiB, sehingga permintaan dengan screenshot gagal dengan HTTP 413. Instruksinya meminta agent mengecilkan kedua gambar menjadi lebar maksimal 1024px dalam format JPEG (kualitas sekitar 70). Jika masih mendapat 413, perbarui Ollama ke 0.35.1 atau lebih baru, atau beralih ke Cloudflare Workers AI.

#Penggunaan API di footer

Panggilan keputusan melewati relay, sehingga Ferret bisa menghitungnya. Item footer di samping meteran penggunaan agent menampilkan model keputusan serta jumlah panggilan, token, dan biaya hari ini (misalnya clef-flash · 42 calls · 18.3k tok). Klik untuk melihat rincian hari ini, bulan ini, per proyek, per model, dan per jenis (keputusan / transkripsi / merapikan), serta 50 panggilan terakhir.

Biaya hanya muncul jika API melaporkannya (Vercel AI Gateway melakukannya) atau jika Anda mengatur harga per 1 juta token di Pengaturan → Model keputusan; jika tidak, yang ditampilkan adalah "—". Hanya metadata yang dicatat (waktu, proyek, model, status, latensi, ukuran, jumlah gambar, token, biaya), tidak pernah gambar, teks, atau key, di ~/.ferret/usage/decision-YYYY-MM.jsonl, satu file per bulan.

#Menyesuaikan instruksi

Edit Pengaturan → Agent → Instruksi untuk Agent. Dua variabel akan diekspansi:

VariabelDiekspansi menjadi
{{path}}Path absolut feedback.md
{{relpath}}Path relatif terhadap proyek: .ferret/reviews/<id>/feedback.md

Biarkan kosong untuk memakai bawaan. Panjang maksimumnya 2000 karakter, dan Reset Instruksi mengembalikan bawaan. Contoh:

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

Pengaturan ini disimpan sebagai agentPrompt di settings.json.

#Kirim ke GitHub atau GitLab (Issue / komentar PR atau MR)

Kirim ke GitHub mengirim tinjauan sebagai issue baru atau sebagai komentar pada salah satu pull request Anda yang terbuka. Autentikasi diserahkan ke GitHub CLI (terbuka di tab baru). Ferret tidak pernah membaca atau menyimpan token.

  1. Instal gh: brew install gh (macOS), winget install --id GitHub.cli (Windows), atau lihat cli/cli (terbuka di tab baru).
  2. Pengaturan → GitHub / GitLab → Masuk di Terminal menjalankan gh auth login --web -h github.com di terminal bawaan.
  3. Klik Kirim ke GitHub, pilih Buat issue baru atau sebuah PR, lalu periksa Judul dan Isi (bisa diedit).
  4. Centang kotak konfirmasi, lalu klik Buat Issue atau Kirim Komentar.

Detail:

  • Repositori diambil dari git remote get-url origin.
  • Ferret menjalankan gh issue create --repo … --title … --body-file - atau gh pr comment <n> --repo … --body-file -.
  • Isinya adalah feedback.md tanpa baris gambar (gambar tidak diunggah), hingga 60.000 karakter.
  • Kandidat PR adalah PR terbuka milik Anda sendiri (hingga 30).

Jika GH_TOKEN atau GITHUB_TOKEN diatur, gh memakainya terlebih dahulu, dan panel pengaturan memberi peringatan tentang hal itu.

GitLab. Jika origin adalah proyek GitLab (gitlab.com atau GitLab self-managed), tombol yang sama mengirim ke GitLab melalui GitLab CLI (terbuka di tab baru) (glab): issue baru, atau komentar pada salah satu merge request Anda yang terbuka. Masuk melalui Pengaturan → GitHub / GitLab, yang menjalankan glab auth login (dengan --hostname untuk GitLab self-managed) di terminal bawaan. Ferret tidak pernah membaca atau menyimpan token, dan memberi peringatan jika GITLAB_TOKEN diatur.

Ajakan memberi bintang. Setelah Kirim ke Agent pertama Anda, dan saat Anda mencapai 3, 10, dan 30 tinjauan yang selesai, Ferret mungkin meminta Anda memberi bintang di GitHub. Ajakan ini muncul paling banyak 3 kali, dengan jarak minimal 3 hari, dan tidak pernah saat merekam. Beri bintang di GitHub memberi bintang melalui login gh Anda sendiri (atau membuka GitHub jika gh tidak tersedia), dan Jangan tanya lagi menghentikan ajakan tersebut. Anda juga bisa memberi bintang dari Bantuan → Beri bintang Ferret di GitHub.

#Menginstal dan masuk ke alat CLI

Pengaturan → Alat CLI mencantumkan alat baris perintah yang sering dibutuhkan agent Anda, menampilkan mana yang terinstal beserta versinya, dan menjalankan perintah instalasi atau masuk resmi untuk OS Anda di tab terminal baru:

  • Hosting Git: gh, glab
  • AI dan model: Ollama, Cloudflare wrangler
  • Deploy: Vercel, Netlify, Fly.io, Railway, Heroku
  • Cloud dan layanan: Supabase, Firebase, Stripe, Google Cloud (gcloud), AWS, Azure, Docker

Jika suatu alat tidak memiliki installer resmi satu baris untuk OS Anda, Dokumentasi akan membuka halaman instalasinya. Daftar ini memeriksa ulang dengan sendirinya setelah instalasi selesai.

Bantu terjemahkan halaman ini di GitHub (terbuka di tab baru)