文件 v1.0.9

REST API

Daemon 僅綁定 127.0.0.1:17989——區網 client 無法連到。Port 固定,不可設定。

同一個 daemon 在 / 提供 web 儀表板。儀表板在編譯時內嵌進執行檔,因此 http://127.0.0.1:17989 就是全部介面——沒有託管在外的前端。開發時可用 AGENVOY_PAGE_DIR 把內嵌版本換成磁碟上的檔案(make dev)。

自 v1.0.1 起儀表板可離線運作。GET /sw.js 提供 service worker,把內嵌資產預先快取到帶版本號的 cache;GET /vendor/* 則從 ~/.config/agenvoy/vendor/ 提供第三方資產(QuickUI、Font Awesome、Material Symbols,以及 nanomd/voice 腳本),該目錄由 daemon 啟動時下載一次,執行檔版本變動時重新下載。頁面載入不會向 CDN 取任何東西。在 AGENVOY_PAGE_DIR 模式下 /sw.js 改為提供一支自我卸載的 worker,清掉自己的 cache 並解除註冊,避免開發版被舊快取蓋掉。

標記 local 的端點另外要求請求來自 127.0.0.1/::1localhostOnly() 守門)。這些端點管理憑證、設定檔或行程生命週期,設計對象是同機儀表板,不是遠端 client。未匹配的路由也套用同一道守門:未知的 /v1/ 路徑回 JSON 404,其他未知路徑則回退到儀表板首頁。

Agent 執行

Method 路徑 說明
POST /v1/send 執行一次 agent 請求
POST /v1/chat/completions 無狀態、相容 OpenAI 的 chat completion
GET /v1/info/version 編譯時寫入的版本({version, dev});未打 tag 的組建 dev 為 true
GET /v1/log SSE 串流。不帶 query 時只送 daemon slog 記錄(EventDaemonLog frame,source 即 level)——與 TUI 標題列同一路資料。其中包含新對話驗證碼,因此 daemon frame 只提供給 loopback 呼叫端。?sessions=a,b 在同一條連線附加這些 session 的事件;replay=0 跳過回補、daemon=0 去掉 daemon frame。遠端呼叫端必須帶 sessions
GET /v1/daemon localdaemon.log 原始內容
GET /v1/mcp/tools 列出已連線 MCP server 註冊進來的工具(mcp__*

POST /v1/send 語意

Body 為 {content, session_id?, sse?, model?, skill?, work_dir?, system_prompt?, exclude_tools?, persist?, chat?}content 必填。若 session 仍在執行中,新請求會以 steer 訊息附加到該次執行,而不是另起一次。

chat persist session_id 結果
false(預設) false(預設) 建立 temp-<uuid>,30 分鐘無變動後刪除
false true 建立 http-<uuid>,保留
true 任意 建立 chat-<uuid>,保留
任意 任意 有給 使用指定的 session_id(忽略 chatpersist
curl --fail-with-body -sS \
  -H 'Content-Type: application/json' \
  -d '{"content":"List the available tools","persist":false}' \
  http://127.0.0.1:17989/v1/send

/v1/chat/completions 為無狀態:需要延續脈絡時,每次請求都要帶上先前訊息。reasoning_effort 接受 none low medium high xhigh max(以及別名 minimal extra ultra);省略或無法辨識的值會回退到該 session 的 reasoning 設定。

模型

Method 路徑 說明
GET /v1/models 列出已註冊模型(OpenAI {data:[...]} 格式,含 auto
GET /v1/models/*id 讀取單一已註冊模型
POST DELETE /v1/models · /v1/models/*name local — 新增 / 移除模型
GET POST /v1/model local — 模型路由集中在一個物件:dispatchersummaryimagestttts,讀取時另附 image_optionsimage_providersaudio_providers。欄位分兩種值:dispatchersummarystttts 填模型名(prefix@model)—— 其中 stttts 取自 GET /v1/model/audio,不是 session 模型註冊表;image 填 provider 端點(openaicodexgrokgrok-oauthgemini),因為各 provider 的圖像模型固定在 go-llm-router 內。image_options 只列出目前握有憑證的 provider,image_providersaudio_providers 則是完整清單(audio_providersopenaigemini)。POST 為部分更新——未帶到(或 null)的欄位不動,"" 清除,image 另接受 off 作為 "" 的別名。未註冊的模型、未知的 provider、或沒有憑證的 provider 一律拒絕且不寫入
GET /v1/model/audio localstt_optionstts_options:以目前已存憑證實際可用的 speech-to-text 與 text-to-speech 模型,向 OpenAI 與 Gemini 即時查詢後以 provider@model 回傳。POST /v1/modelstt / tts 只接受這些值
GET POST /v1/model/priority local — 已註冊模型的 fallback 順序。GET 回傳 models(依序的模型名)、tiersmodel_tag map,模型 → tier)與 tier_options{tier, detail} 列,第一列為代表無 tier 的 "")。POST {models} 把列出的模型依序移到最前,其餘接在後面;未知模型名回 400
POST /v1/model/tier local{model, tier}。設定單一已註冊模型的 tier:SABCpass(auto routing 與 subagent 永不選用、fallback 排最後);"" 清除。未註冊的模型或未知 tier 回 400

Session

Method 路徑 說明
GET /v1/sessions 列出 session 與狀態
GET /v1/usage local — 跨 session 的 24 小時 / 7 天 / 28 天總 token 用量
POST /v1/session local — 建立 session;{prefix} 預設為 cli-
GET POST DELETE /v1/session/:id local — 單一 session 的完整狀態:idself_idnamerulestatemodelreasoninglevelscountPOST 為部分更新——self_id / name / rule / model / reasoning 皆選填,未帶到(或 null)的欄位不動;model: "" 重設為 autoreasoning 必須是 levels 之一。self_id 重複回 409。DELETE 移除 session 目錄、歷史、狀態與向量。GET 另支援 ?chat=1chat 附上原始 action log、?usage=1usage 附上每模型 token 用量;兩者預設關閉,因為 log 可能很大
POST /v1/session/:id/event local — 對某 session 的串流發布事件
POST /v1/session/:id/memory local — 由 action 決定的單一記憶操作:summary 重建滾動摘要並回傳 countcompact 丟棄較舊訊息並回傳 removedreset 清空對話並回傳 removed,且必須帶 mode——summary 保留滾動摘要、all 一併清除
POST /v1/session/:id/cancel/:task_hash 取消單一執行中任務。該 task hash 在本行程執行中時回 {ok, cancelled:true};否則(或傳 current)會在 session 串流記錄一筆 canceled 事件並回 {ok, cancelled:false, stale:true}
POST /v1/session/:id/confirm/:confirm_hash 回覆待決的工具確認:{approve, remember?, allow_turn?, abort?, reason?, password?}。確認已被回覆或已過期時回 410。核准帶有 restricted 路徑的確認必須來自 loopback(否則 403),並以 password 通過作業系統密碼驗證(失敗回 401);sudo ticket 仍有快取時略過驗證,確認事件以 password_cached 標示

待決與已完成任務

Method 路徑 說明
GET /v1/session/:id/task 列出可續行的待決(ask_user / confirm)任務。仍在執行中的任務會被排除——執行中的 run 每 55 秒刷新 ToriiDB 的 action:<session_id>:<task_hash>(TTL 60 秒,v0.35.3),因此視窗關閉或行程被砍留下的任務會在一分鐘內重新出現
GET /v1/session/:id/task/:task_hash/questions 取得待決任務的提問
POST /v1/session/:id/task/:task_hash/resume 回答待決任務並續行
DELETE /v1/session/:id/task/:task_hash 不回答,直接丟棄待決任務
GET /v1/session/:id/task/history local — 該 session 已完成的任務,最新在前:每列 {task_hash, end_at, objective, model, reasoning}?keyword= 對 objective 與記錄的 action 內容過濾
GET /v1/session/:id/task/:task_hash/history local — 單一已完成任務的完整 action 記錄,以 JSON 字串放在 content。該 hash 無記錄時回 404

頻道

Method 路徑 說明
GET /v1/channel local — 一次讀取所有頻道:telegramdiscord 各帶 {enabled, username, has_token}admin{channel, authorized, chats:[{value,type,id,name}]}chats 來自 .telegram / .discord 授權檔(tg 在前、dc 在後),每個 value 可原樣回填;authorized 表示目前的轉發目標是否仍在清單上(手動輸入的 ID 會是 false
POST /v1/channel/telegram · /v1/channel/discord local{action:"enable"|"disable", token?}。啟用只儲存 token 並翻轉設定旗標;TUI 會做的 GetMe 驗證在此刻意省略,因為 daemon 既有的設定檔 watcher 已會重連 bot 並補上 username
GET /v1/channel/:channel/chats localtelegram / discord 已完成驗證的對話。只在 bot 執行時有意義,請在頻道回報 enabled 後再查
DELETE /v1/channel/:channel/chat local{id}。從授權檔移除一筆對話;該對話需重新驗證 bot 才會回應。id 不在清單上時回 404
POST /v1/channel/admin local{value:"tg@<chatID>"|"dc@<channelID>"|""}。設定新對話驗證碼的轉發目標,空字串為清除。value 為必填(省略回 400,避免空 body 靜默清除設定)。只驗證格式——未在授權清單中的 ID 會讓轉發只寫 log 並記一則警告

檔案與憑證

Method 路徑 說明
GET PUT /v1/file local — 讀 / 寫檔案
GET /v1/file/open local — 以作業系統預設程式開啟檔案或 URL
GET /v1/file/locate local — 依裸檔名尋找候選路徑(name,另可加 dir=1childsizemtime 過濾)
GET /v1/workdir local — 解析並驗證工作目錄(?path=),回傳絕對路徑
GET DELETE /v1/key local — 檢查 / 刪除 keychain 中的單一憑證
GET POST /v1/keys local — 列出 / 設定憑證

Provider

Method 路徑 說明
GET /v1/providers local — 列出 provider 與其可用的認證方式。每筆另帶 logged_in,僅在三個 OAuth provider(codexcopilotgrok-oauth)目前持有 token 時為 true
GET /v1/providers/quota localcodexgrok-oauthcopilotollama-cloud 的剩餘額度(kind:"percent")與 openrouterdeepseek 的剩餘餘額(kind:"balance"),以 provider 為 key 放在 quota 下回傳,並行查詢、10 秒上限。v0.35.3 起由 /v1/providers/usage 更名而來。成功的讀取在 ToriiDB 快取 3 分鐘並標記 cached:true?refresh=1 丟棄快取重讀,儲存 key 或完成 OAuth 登入也會自動清掉該 provider 的快取。沒有憑證的 provider 回 error 而非 value,且不快取
POST /v1/provider/:provider/key local — 設定 API key
GET /v1/provider/:provider/oauth local — SSE device-code OAuth 流程。登入期間保留既有 token,因此中途放棄或失敗的重新登入不會把該 provider 登出
DELETE /v1/provider/:provider/oauth local — 清除已儲存的 provider 登入(codexcopilotgrok-oauth)。token key 屬於 OAuth 函式庫,因此走它們自己的 ClearToken 而非 DELETE /v1/key
GET /v1/provider/:provider/models local — 列出該 provider 可用的模型。自訂相容 provider 實例會即時向其端點探查模型清單(探查失敗回 502)

MCP

Method 路徑 說明
GET POST /v1/mcp local — 列出 / 新增 MCP server。GET 另回傳 HTTP server 的 oauth: {name: bool},表示哪些已持有 token
POST /v1/mcp/remove local — 移除 MCP server
GET /v1/mcp/status local — 各 server 的連線狀態
POST /v1/mcp/reconnect local — 重連所有 MCP client 並重新註冊工具
GET /v1/mcp/oauth?name=X local — 單一 HTTP MCP server 的 SSE OAuth 登入,流程與 provider 相同:先送 {"url":...} 供瀏覽器開啟,再送 {"done":true,"ok":...}(登入後重連失敗時附 reconnect_error)。10 分鐘或 client 斷線後逾時
POST /v1/mcp/oauth/callback local{name, url}。瀏覽器無法連到 daemon 在 localhost:17988 的 loopback listener 時,把 redirect URL 貼回來;code 由 URL query 解析。沒有等待中的登入時回 400
POST /v1/mcp/oauth/client local{name, client_id, client_secret?, redirect_uri?}。為拒絕動態註冊的 server 儲存預先註冊的 OAuth client;redirect_uri 預設 http://localhost:17988/callback,必須與 provider console 完全一致。會先清除既有 token
DELETE /v1/mcp/oauth local{name}。同時清除該 server 的 token 與 client 註冊

規則、筆記與 Skill

Method 路徑 說明
GET /v1/rules local — 列出存放於 prompts/.md session prompt 規則
GET /v1/rule/*name local — 讀取單一規則
POST PATCH DELETE /v1/rule local — 建立 / 更新(可選 rename)/ 刪除規則
GET /v1/notes local — 於 notes 列出操作者筆記(name、size、updated_at);記錄存在 SQLite note 表,不落磁碟
GET /v1/note/*name local — 讀取單一筆記(namecontentupdated_at
POST PATCH DELETE /v1/note local — 建立 / 更新(可帶 rename)/ 刪除筆記。省略 name 時以第一行為名,長度上限 32 字元
GET /v1/skills local — 列出已安裝的 skill
GET /v1/skill/*name local — 讀取單一已安裝 skill:namedescriptionpathsourcecontentdeletable,另加 files —— 該 skill 的 scripts/references/assets/ 底下所有 UTF-8 檔案,以 {path, content} 依路徑排序回傳,跳過隱藏檔、超過 256 KiB 者略過(v1.0.2)
DELETE /v1/skill local — 移除單一已安裝 skill

/v1/knowledge* 於 v0.35.4 更名為 /v1/note*;儲存層於 v0.35.3 由 ToriiDB 移至 SQLite。既有筆記於 daemon 啟動時遷移。

自動化

Cron 與一次性任務合併為同一組介面。原本分離的 /v1/cron*/v1/task* 已於 v0.33.6 由 /v1/schedule 取代,以 type=cron|task 區分。

Method 路徑 說明
GET /v1/schedule local — 將 cron 條目與一次性任務合併成一個 schedules 陣列,各自標記 type=cron|task?type= 可只取其一
GET /v1/schedule/*skill local — 讀取 scheduler skill:namebody,其中 body 自 v1.0.2 起是含 frontmatter 的原始 SKILL.md,不再是解析掉 frontmatter 的主體。files 以與 GET /v1/skill/*name 相同的規則附上該 skill 的 scripts/references/assets/ 內容。description 欄位已移除
POST PATCH /v1/schedule local — 以 name / content 建立或更新 scheduler skill,並把整組條目重新綁到 type=cron|task;切換 type 會丟棄該 skill 在另一種型別下持有的條目。description 已於 v1.0.2 移除。content 若本身就以 --- frontmatter 開頭則原樣寫入;否則由 server 端補上最小的 ---\nname: <name>\n--- 標頭
DELETE /v1/schedule local — 刪除某 skill 的條目(type 可縮限其一,省略則兩者皆移除);若無其他綁定則一併把 skill 移入垃圾桶
POST /v1/schedule/run local — 立即觸發一則排程(202 Accepted

允許清單

Method 路徑 說明
GET POST /v1/allowlist local — 兩份允許清單合成一個物件:skilltoolGET 對 skill 區塊讀 ?scope=global|projectproject 需帶 ?work_dir=),對 tool 區塊以 ?prefix= 縮限。POST 接受 {skill: {name, scope?, work_dir?}} 切換單一 skill,以及 / 或 {tool: {prefix, entries}} 只替換該 prefix 的自動核准條目(與 TUI /mcp → permission 同一支呼叫),其他規則保持不變;每個條目都必須以 prefix 開頭,prefix* 會收斂其餘條目。未帶到的區塊不動

設定

Method 路徑 說明
GET POST /v1/config/startup local — 開機自動啟動。GET 回傳 enabled(記錄的設定)與 installed(launchd agent 或 systemd user unit 是否存在)。POST {enable}(必填)寫入或移除 launchd agent(macOS)或 systemd user unit(Linux),回傳 {ok, enabled, installed, detail};不會啟動或停止執行中的 daemon,下次登入才生效
GET POST /v1/config/system local — 回覆語言。GET 回傳 reply_lang(預設 auto)與 languages{code, label} 選項,auto 在前)。POST {reply_lang}(必填)會正規化語言代碼,超過 64 bytes 或含換行者拒絕,並把 reply_lang 寫入 config.json
GET POST /v1/config/output_dir local — 輸出目錄。GET 回傳 output_dir(原始設定)與 resolved(實際使用的目錄;未設定且 ~/Downloads 存在時即為該目錄)。POST {output_dir}(必填)展開 ~、建立目錄後寫入 config.json"" 還原預設

其他 :target 一律回 404。

檢視

Method 路徑 說明
GET /v1/torii/error local — 讀取工具錯誤記憶。模式由 keyword 單獨決定:沒帶 keyword 就是列出(?tool= 可把列表縮到單一工具,?limit= 預設 50),帶了才走搜尋(?limit= 預設 16)。v1.0.1 之前只帶 ?tool= 會落到搜尋路徑而回空
PATCH /v1/torii/error local{id, action},皆必填。替換單筆錯誤記憶的 action 並以 record 回傳;id 不存在時回 404

/v1/toriidb HTTP 入口已於 v0.35.3 移除。自 ToriiDB v0.6.2 起,所有行程改走 ToriiDB 自己的 socket,工具快取、對話向量、錯誤記憶與待決任務存活訊號無需經過 HTTP 即可共用。

EN