leonardoaguiar.com coder-leo
語言

coder-leo

終端機裡的程式設計代理,用本機模型執行。它讀取、撰寫並修改程式碼,執行指令,搜尋專案,維護任務清單,背後的模型透過 Ollama 或任何具備 OpenAI 聊天 API 的伺服器(LM Studio、llama-server、vLLM、mlx)在你自己的機器上執行。它的工作方式和 Claude Code 一樣,而且是為小小的脈絡視窗設計的:測量視窗,讓每個工具結果都在預算內,清掉舊結果,必要時分段摘要對話,並給模型一套不必全部讀完也找得到東西的工具。

安裝

macOS,使用 Homebrew,兩行指令,只需一次:

brew tap leonardoaguiar/coder-leo https://leonardoaguiar.com/apps/coder-leo/tap.git
brew install leonardoaguiar/coder-leo/coder-leo

brew upgrade 會帶來新版本,coder-leo update 也可以。

Linux(任何發行版,x86_64 或 ARM)、Termux 中的 Android,以及 WSL 中的 Windows:

curl -fsSL https://leonardoaguiar.com/apps/coder-leo/install.sh | sh

它會為這台機器挑選建置版本,核對已發布的 SHA-256,再把執行檔、手冊頁和 shell 補完安裝到 /usr/local(需要時會請求 sudo)、~/.local 或 Termux 自己的資料夾。再執行一次即可更新;sh -s -- --uninstall 移除。

你還需要一個模型伺服器,以及一個支援工具呼叫的模型:

開始

在專案裡打開終端機,執行 coder-leo。第一次會請你從清單中挑一個模型,之後會記住。輸入你想要的;/help 列出所有指令。

coder-leo                         在這個目錄開始一段工作階段
coder-leo "add tests for parser"  帶一則起始提示開始工作階段
coder-leo -p "explain main.go"    回答一次就結束(也讀取 stdin)
coder-leo -c                      接續這裡最近的一段工作階段
coder-leo --sessions              挑一段更早的工作階段
coder-leo --list                  已安裝的模型

歡迎框顯示模型、脈絡視窗、權限模式和目錄。提示符號下方那一行顯示模式、模型、脈絡用了多少,以及 git 分支。

與它一起工作

工具

模型透過這些工具工作,名稱與 Claude Code 相同(它也認得其他代理使用的名稱,例如 read_file 或 run_command):

工具功能
Read讀一個檔案,附行號,支援 offset 與 limit;視覺模型可讀圖片;透過 pdftotext 讀 PDF;notebook 依儲存格讀取。整個讀一個大檔案會回傳它的大綱和開頭
Write, Edit建立檔案;替換一段精確的片段(容許複製進來的行號與縮排差異)
LS, Glob, Grep列出目錄、依樣式尋找檔案、用正規表示式搜尋內容(內容、檔名或計數,可附脈絡)
Search對一個白話問題最相關的檔案與行,依識別字裡的詞排序
Outline, RepoMap一個檔案的函式與型別;儲存庫地圖,依程式碼對每個檔案的引用程度排序
Bash, BashOutput, KillShell帶逾時執行指令;長指令放到背景
WebFetch, WebSearch把網頁變成可讀文字;網路搜尋
TodoWrite任務清單,隨變化顯示
Task擁有全新脈絡視窗的子代理(explore、plan、general、review,或你自訂的),只回傳它的報告
Recall搜尋整段對話,包括已被摘要掉的部分
AskUserQuestion, ExitPlanMode, Skill向你提問;呈現計畫;載入技能
mcp__server__tool你的 MCP 伺服器提供的工具

脈絡視窗

本機模型的視窗很小(16 GB 的機器上常見 8k 到 32k 個 token),而每一輪重新讀一遍長提示要花上好幾秒。coder-leo 讓視窗始終可用:

權限

四種模式:default 在編輯與執行指令前詢問;acceptEdits 放行專案內的編輯,指令仍會詢問;plan 只讀,模型會呈現一份計畫供核准;yolo 什麼都不問直接執行,和最早的版本一樣,而且除非你的設定另有規定,這就是預設值。破壞性指令(刪除大範圍目錄、丟棄 git 工作、強制推送、sudo、刪除資料表)在 yolo 模式下仍會詢問;設定裡的 "guard": false 可以關掉。

設定裡的規則優先於模式:"allow": ["Bash(git *)", "Read"]、"deny": ["Bash(rm *)"]、"ask": ["Write"]。在權限詢問時回答 a,會在這個工作階段放行該工具;回答一段文字,則會當作指示送給模型。

工作階段

每段工作階段都在進行時儲存到 ~/.config/coder-leo/sessions/<專案>/。coder-leo -c 接續最近的一段,--resume <id> 或 /resume 挑一段,/rename 命名,/export 匯出成 Markdown。每次編輯前檔案都會存一個檢查點:/rewind(或 Esc Esc)倒回更早的一輪,還原此後更動過的檔案,並在那裡截斷對話。

指示、指令、技能、代理

設定

~/.config/coder-leo/settings.json,接著是專案裡的 .coder-leo/settings.json 和 .coder-leo/settings.local.json,後者覆蓋前者;最後是環境變數(CODER_MODEL、CODER_API、CODER_HOST 或 OLLAMA_HOST、CODER_API_KEY)。

{
  "model": "qwen2.5-coder:14b",
  "api": "ollama",
  "numCtx": 16384,
  "think": "low",
  "permissions": { "mode": "default", "allow": ["Bash(git *)"], "guard": true },
  "compact": { "micro": 0.7, "full": 0.85, "keepRecent": 6 },
  "repoMap": { "enabled": true, "budget": 3000 },
  "tools": { "minimal": false, "disabled": ["WebSearch"] },
  "hooks": { "PreToolUse": [{ "matcher": "Bash", "hooks": [{ "type": "command", "command": "./check.sh" }] }] },
  "mcpServers": { "fs": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "."] } },
  "statusLine": { "command": "~/.config/coder-leo/status.sh" },
  "notify": "bell"
}

/config 顯示目前生效的設定與來源;/doctor 檢查伺服器、模型、記憶體和整體設定。

無終端機模式

coder-leo -p "提示" 回答一次:回覆寫到 stdout,其餘全部寫到 stderr。--output-format json 輸出一個物件,含結果、工作階段 id 和 token 計數;--output-format stream-json 在事情發生時每行輸出一個 JSON 事件。--max-turns、--allowedTools、--disallowedTools、--system-prompt、--append-system-prompt 和 --mode 決定執行方式;-c 或 --resume 接續一段工作階段。

隱私

一切都在你的機器上執行:模型、檔案、對話。程式只在三種情況下連網:模型為你的任務呼叫 WebFetch 或 WebSearch 時(yolo 模式之外會先請求權限)、你設定了會對外連線的 MCP 伺服器時,以及你執行 coder-leo update 時。沒有帳號,沒有遙測,不會把任何東西送到任何地方。

更新

coder-leo update 會到網站查看是否有更新的版本並安裝(Homebrew 裝的副本透過 Homebrew 更新);coder-leo update --check 只告訴你結果。程式從不自行檢查。

協助與問題回報

問題和想法:coder-leo 頁面末尾的支援信箱。請附上模型、伺服器、coder-leo version 和 /doctor 的輸出。