# Claude Code 供應商

透過本機已安裝的 `claude` CLI，以 Claude 訂閱執行模型。

`claude-code`（v1.1.0 起）把本機已安裝並登入的 `claude` CLI 當作模型後端，請求走 Claude 訂閱而非按量計費的 API key。預設關閉，定位為個人使用：以 `agen --enable-claude-code` 啟動即可啟用（需先 `agen stop` 停止 daemon），該 TUI 與它啟動的 daemon 皆生效。v1.2.0 起所有 agent 都由 daemon 執行，`claude` 程序因此都在 daemon 內；之後不帶參數啟動的 TUI 沿用 daemon 的設定。

| 面向 | 行為 |
|---|---|
| 傳輸 | 每個 session、模型與 system prompt 各一個 `claude -p` 行程，以 `stream-json` 溝通。v1.1.3 起行程以 system prompt 的雜湊區分，摘要、分派與 followup 呼叫不再重啟主迴圈的行程而清掉其快取；session 內不帶工具的呼叫也有自己的常駐行程，不再走一次性執行。CLI 自帶的工具與 MCP server 全部停用（`--tools ""`、`--strict-mcp-config`）；tool call 由 Agenvoy 依原本規則執行。v1.1.4 起此 provider 位於 `go-llm-router` 而非本 repo；Agenvoy 傳入啟用旗標、存放狀態檔的 sessions 目錄與快取 TTL |
| 工具 | 只送出工具名稱與完整的 `find_tools` schema；其餘 schema 經 `find_tools` 按需取得。v1.1.3 起每次請求都把 `find_tools` 與 client tools 以外的工具標為 stub：未取得 schema 就呼叫時不執行，Agenvoy 回傳 schema 並要求重新呼叫。與其他 provider 不同，它不經 `run_tool`（v1.2.0）：收到的工具清單排除 `run_tool`，工具直接以自身名稱呼叫 |
| 模型 | v1.1.2 起由 `claude` CLI 自己列出：Agenvoy 對 `claude -p`（無工具、無 MCP、不保存 session）送出 `initialize` control request，取每個不重複的 `resolvedModel`，清單即為訂閱實際可用的模型。v1.1.2 前取自 `models.agenvoy.com` 的 `claude` 目錄。查詢 context window 時會去掉結尾的 `-YYYYMMDD` 日期 |
| 路由 | 同 tier 內 `claude-code` 模型排在所有其他供應商之前，其次 `codex`；同一基礎模型註冊於多個供應商時 `claude-code` 優先。v1.1.1 起請求指名的模型，或主題未變而沿用的上一個模型，不受此重排影響、維持在最前 |
| 額度 | 解析 `claude -p /usage` 的輸出——不呼叫 API——顯示於 `Shift+U` 與 `GET /v1/providers/quota` |
| 用量 | Input token 含 cache write，與 `claude` 相同 |
| Session | v1.1.1 起每個 session + 模型各自保有一個 Claude Code session；v1.1.2 起僅限 session 使用 `1h` prompt cache（模型與 reasoning 皆固定）時：首輪以 `--session-id` 啟動 `claude`，之後沿用存活的 process；process 結束或 daemon 重啟後改以 `--resume` 接續，接續失敗則帶完整歷史開新 session。狀態存於 `sessions/<sid>/.claude_code/<model>_<system prompt 雜湊>.json`（不帶工具的呼叫再加 `_plain`；v1.1.3 之前為 `sessions/<sid>/claude_code_<model>.json`）。`5m` cache 下——以及沒有 session 的呼叫（v1.1.3 之前也包含不帶工具的呼叫）——`claude` 以 `--no-session-persistence` 執行，只沿用存活中的 process——不存檔也不 resume，因此 `auto` session 不再留下反正會錯過快取的 Claude Code session |
| Prompt cache | v1.1.1 起 session 的模型或 reasoning 為 `auto`（以及一次性呼叫）時 `CLAUDE_CODE_PROMPT_CACHE_TTL` 為 `5m`，兩者皆固定時為 `1h`；TTL 改變會重啟 process |
| Tool call 格式 | `<tool_call name="...">` 區塊；v1.1.1 起也接受 `<invoke name="...">` 搭配 `<parameter name="...">` 子元素（含帶 namespace 的標籤）；v1.1.4 起 JSON 內容含 `</tool_call>` 字串時會讀到 JSON 結尾，不再於該字串處截斷。回覆只剩空標籤加 tool call 時顯示為 `Processing`（v1.1.4 前為 `Processing...`） |
| 未啟用時 | v1.1.2 起除非開啟 `--enable-claude-code` 且找得到 `claude` binary，否則 `/model add` 不顯示該列（先前一律顯示）。已註冊的 `claude-code@` 模型會被 agent registry、路由、`/model` 清單與 dispatcher 選單略過；`GET /v1/providers` 將該列標為 `hidden` |
