文件 v0.28.1

內建工具

檔案操作

工具 說明
read_file 讀取文字、PDF、DOCX、PPTX、CSV/TSV 或圖片檔。必須在 patch_file 之前呼叫。敏感檔案防護:SSH keys、.pem.key.env 一律需要確認,無論是否處於 sudo 或 allowlist
write_file 建立或完全覆寫檔案
patch_file 精確字串替換(支援 replace_all
list_files 列出目錄內容
glob_files Glob 樣式搜尋
search_files 對檔案內容進行 regex 搜尋

網頁(唯讀,多數可並行)

工具 可並行 說明
fetch_page 抓取網頁(readability + 4xx/5xx 透過 ToriiDB 跳過 cache);save=true 會持久化到本地檔案
search_web DuckDuckGo lite endpoint,package 層級的 rate limit(2 秒間隔)
search_google_news Google News RSS

HTTP

工具 可並行 說明
send_http_request 原始 HTTP 請求,回傳 status + headers + body。GET 自動放行;其他 method 需要確認。內建 SSRF 防護(DNS 解析後比對 loopback / private / link-local);透過 config.jsonnet_white_list 對特定 host 放行
download_file 下載二進位檔到本地磁碟(tar.gz、圖片、壓縮檔);JSON/HTML 請改用 send_http_requestfetch_page

媒體

工具 可並行 說明
transcribe_media 透過 Gemini inline_data 進行本地音訊 / 視訊轉錄(ogg、mp3、wav、m4a、flac、aac、mp4、mov、webm、mpeg、3gp);每次請求上限 20 MiB。(需要 gemini credential)
generate_image 透過 codex@ 訂閱額度以 gpt-image-2 產生圖片。先用 ask_user 確認尺寸與品質。輸出為 [SEND_FILE:<path>]。15 分鐘上限。(需要 codex credential)

工具程式

工具 可並行 說明
calculate 數學運算式求值器

Agent 編排

工具 說明
invoke_subagent In-process subagent(不走 HTTP);支援 name / session_id / model / system_prompt / exclude_tools。強制排除集:invoke_subagent 自身、invoke_external_agentcross_review_with_external_agentsreview_resultAllowAllWorkDir 繼承自 parent ctx
invoke_external_agent 一次性外部 CLI(claude / codex / copilot / gemini);readonly flag 控制寫入權限。Subprocess timeout 上限由 MAX_EXTERNAL_AGENT_TIMEOUT_MIN 決定(預設 10 分鐘)
cross_review_with_external_agents 串接四個外部 CLI,最多進行三輪 review(MaxVerifyRounds=3,package const)。15 分鐘硬上限
review_result 內部 priority-model 自我 review
generate_plan 回傳結構化 markdown plan(需求摘要 / 前置條件 / 步驟 + 驗收 / 整體驗收 / 風險 / fallback)。使用 exec.SelectAgent 加上 [plan] prefix 觸發 P0.6 routing,導向強推理 agent。toolDefs=nil — 只做 plan,不執行。5 分鐘上限

互動

工具 說明
ask_user 自由文字 / 單選 / 多選 / secret 遮罩輸入提示;active 時透過 pending registry 路由,否則 fallback 到 stdin(CLI)或非互動式指引
store_secret 透過遮罩輸入擷取一個值並直接寫入 keychain — 該值永遠不會進入 LLM context、history 或 logs。Schema 接受 value 參數;agent 只看得到 name + 說明
install_dependence 跨平台安裝缺失的系統 binary(僅 TUI/CLI)。若已在 PATH 則略過。Sandbox 會擋 sudo,因此此工具會繞過 sandbox。語言層級套件(pip/npm/cargo/gem)→ 輸出指令供使用者手動執行

記憶

工具 說明
search_chat_history 對當前 session 的 history 進行關鍵字 + 語意雙軌搜尋
remember_error 記錄一個工具錯誤及其解法 / 策略
search_error_history 對 error memory 進行跨 session 語意搜尋
read_error 依 key 讀取特定的錯誤條目

診斷

工具 說明
read_log 回傳 daemon.log 近期的 WARN/ERROR 行(最近 h 小時)
report_error 掃描 daemon.log 的 WARN/ERROR 行並上傳到 report.agenvoy.com。Fire-and-forget

RAG

透過 KuraDB child process 進行外部文件 RAG。當 ~/.config/kuradb/endpoint 不存在時,這些工具會逐 turn 動態排除 — KuraDB 關閉時 LLM 永遠不會看到它們。

工具 說明
list_rag 列出可用的 KuraDB 資料庫(例如 notesinboxcode
search_rag 依關鍵字(mode=keywordgse 斷詞、支援中文)或語意(mode=semantic、OpenAI text-embedding-3-small)搜尋資料庫

list_rag / search_rag 工具載入後,system prompt 會強制任何資訊查詢的第一波工具呼叫為 list_rag + search_rag。外部 web/search 工具退為次要(補缺口),而非 fallback 或替代。

渲染

工具 說明
render_page 覆寫當前 session canvas 的渲染 HTML 頁面;瀏覽器分頁透過 SSE 自動 reload

Channel

跨 session 推播工具與 channel 格式參考。每個工具同時 gate 在 cfg.{T,D}Enabled 與 keychain credential 的存在。

工具 說明
list_chatbot 列出指定平台(platform=telegramplatform=discord)已授權的 chat。(需要 telegram 或 discord)
send_to_chatbot target_id 發送格式化訊息到已授權的 chat。需要 platform 參數。Telegram:HTML + transient client。Discord:markdown + transient client。(需要 telegram 或 discord)
format_chatbot AlwaysLoad=true;回傳指定平台的完整格式化參考(Telegram HTML 或 Discord markdown)。(需要 telegram 或 discord)

輸出標記(channel-specific 行為)

任何工具或 LLM 回應的輸出文字都會針對以下標記做後處理:

標記 行為
[SEND_FILE:<path>] Channel runtime 自動附加該檔案(Telegram → 依副檔名拆分 photo/document,Discord → 統一 SendFiles 每則訊息批次 10 個)
[SEND_VOICE:<text>] 僅 Telegram。透過 Gemini TTS 合成,以 OGG voice 發送。Run.go 以 async 方式觸發上傳(go func 搭配 context.WithoutCancel);reply 文字立即回傳。失敗 → slog.Error + chat 通知(絕不靜默)

標記 regex + 去重 + os.Stat 過濾住在 internal/utils/utils.go。Telegram 專屬的 photo/document 拆分 wrapper 在 internal/runtime/telegram/fileMarker.go。Push hooks(telegram.PushTelegramResult / discord.PushDiscordResult)呼叫同一個 extractor。

Skill 探索

工具 說明
run_skill 將一個 skill 載入當前 loop(合成一組 tool_call/tool_result pair 進 ToolHistories)
search_tools 搜尋已註冊的工具目錄
list_tools 列出所有已註冊的工具

Skill 與 tool 變體(always-allowed 的 write_file 變體)

工具 說明
write_skill ~/.config/agenvoy/skills/ 下建立或重寫檔案
patch_skill 對 skill 檔案進行字串替換
remove_skill 將 skill 目錄移到 .Trash/
write_tool ~/.config/agenvoy/tools/script/ 下建立或覆寫 tool.jsonscript.py
patch_tool 對 script tool 檔案(tool.jsonscript.py)進行字串替換
test_tool 在 sandbox 內以 JSON input 執行 script tool 的 script.py
remove_tool 將 script tool 目錄移到 .Trash/

所有變體皆為 always-allowed 且限定在各自的目錄內。每次 write/patch/remove 都會自動 commit 到對應的 git repo(skills 或 tools)。write_toolwrite_skill 支援並行呼叫。

Git 版本控管與自我改進

工具 說明
git_log 列出 skills 或 tools 目錄的 git commit 歷史(tag = skillstools
git_rollback 將 skills 或 tools 目錄回滾到指定的 git commit(tag = skillstools

自我改進 loop:當 skill 執行產生工具錯誤(工具名稱錯誤、步驟失敗),postSkillImprove 會在 Execute 結尾同步執行。它載入內建的 improve-skill 定義,餵入執行 trace,重寫出錯的 SKILL.md/scripts,並自動 commit 修正。

系統

工具 說明
run_command 執行系統指令(argv-only schema,透過 go-pkg/sandbox 包裹 sandbox);cd 為特例,直接 mutate Executor.WorkDir 而不經過 sandbox

Scheduler

工具 說明
add_schedule 將既有的 scheduler skill 綁定到一次性觸發時間(target=task)或 5 欄位 cron 運算式(target=cron)。Task 時間格式:+5m(相對)、HH:MM(今天)、YYYY-MM-DD HH:MM,或 RFC3339。必須由 scheduler-skill-creator skill 呼叫,不可直接呼叫 — 直接呼叫要求該 skill 已存在於 ~/.config/agenvoy/skills/scheduler/<short>-<hash8>/
patch_schedule skill_nametarget 重新排程;只改時間,不動綁定的 SKILL 本體。
remove_schedule skill_nametarget 取消;綁定的 scheduler skill 目錄會移到 .Trash/
list_schedule 列出當前 session 的 tasks 和/或 crons。target 接受 taskcronall(預設)。

scheduler-skill-creator 是高階 skill,負責建立 scheduler skill 本體並呼叫 add_schedule 來綁定它。新的週期性 / 一次性請求應啟動該 skill,而非直接呼叫低階工具。

Daemon 端的 runtime(internal/runtime/scheduler.go)以 fsnotify 監看 ~/.config/agenvoy/{tasks,crons}.json,並在 Write / Create / Rename 時 hot-reload。逾期的 tasks 會在啟動或 reload 時自動觸發並移除;觸發透過 runtime.SetRunner → 在 scheduler skill 本體上執行 in-process subagent(always-allow context)。

TUI 提供三個 slash 指令來管理排程:/cron/task(add / remove / edit),以及 /sched-<name>(手動觸發既有的 scheduler skill 本體)。

EN