@songsid/agend 2.1.4-beta.9 → 2.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.zh-TW.md +1 -1
- package/dist/agent-cli-instructions.md +2 -2
- package/dist/agent-endpoint.js +1 -1
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/backend/antigravity.d.ts +12 -8
- package/dist/backend/antigravity.js +189 -42
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.d.ts +87 -23
- package/dist/backend/claude-code.js +361 -46
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex.d.ts +18 -0
- package/dist/backend/codex.js +139 -5
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/gemini-cli.js +2 -2
- package/dist/backend/gemini-cli.js.map +1 -1
- package/dist/backend/grok.js +2 -2
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro.d.ts +52 -2
- package/dist/backend/kiro.js +267 -12
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/opencode.js +17 -4
- package/dist/backend/opencode.js.map +1 -1
- package/dist/backend/types.d.ts +122 -3
- package/dist/backend/types.js +5 -1
- package/dist/backend/types.js.map +1 -1
- package/dist/backend-outage.d.ts +61 -0
- package/dist/backend-outage.js +71 -0
- package/dist/backend-outage.js.map +1 -0
- package/dist/channel/adapters/discord.d.ts +44 -2
- package/dist/channel/adapters/discord.js +523 -90
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +30 -0
- package/dist/channel/adapters/telegram.js +221 -19
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/agy-mcp-launcher.d.ts +2 -0
- package/dist/channel/agy-mcp-launcher.js +28 -0
- package/dist/channel/agy-mcp-launcher.js.map +1 -0
- package/dist/channel/ipc-bridge.d.ts +2 -1
- package/dist/channel/ipc-bridge.js +33 -4
- package/dist/channel/ipc-bridge.js.map +1 -1
- package/dist/channel/markdown-chunk.d.ts +42 -0
- package/dist/channel/markdown-chunk.js +205 -0
- package/dist/channel/markdown-chunk.js.map +1 -0
- package/dist/channel/mcp-server.js +34 -5
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.js +5 -3
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/message-queue.js +64 -8
- package/dist/channel/message-queue.js.map +1 -1
- package/dist/channel/types.d.ts +31 -1
- package/dist/classic-channel-manager.d.ts +65 -0
- package/dist/classic-channel-manager.js +172 -3
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +124 -83
- package/dist/cli.js.map +1 -1
- package/dist/config-validator.js +13 -0
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +4 -0
- package/dist/config.js +12 -1
- package/dist/config.js.map +1 -1
- package/dist/cross-instance-envelope.d.ts +6 -0
- package/dist/cross-instance-envelope.js +30 -0
- package/dist/cross-instance-envelope.js.map +1 -0
- package/dist/daemon.d.ts +491 -14
- package/dist/daemon.js +2121 -276
- package/dist/daemon.js.map +1 -1
- package/dist/doctor.d.ts +41 -0
- package/dist/doctor.js +267 -0
- package/dist/doctor.js.map +1 -0
- package/dist/fleet-context.d.ts +63 -0
- package/dist/fleet-context.js.map +1 -1
- package/dist/fleet-manager.d.ts +402 -11
- package/dist/fleet-manager.js +2594 -422
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-yaml-slim.d.ts +10 -0
- package/dist/fleet-yaml-slim.js +59 -0
- package/dist/fleet-yaml-slim.js.map +1 -0
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +1 -0
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +63 -16
- package/dist/general-knowledge/skills/session-management/SKILL.md +171 -8
- package/dist/instance-lifecycle.d.ts +114 -1
- package/dist/instance-lifecycle.js +404 -14
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.js +42 -4
- package/dist/instructions.js.map +1 -1
- package/dist/locale.js +1024 -320
- package/dist/locale.js.map +1 -1
- package/dist/login-flows.d.ts +91 -0
- package/dist/login-flows.js +170 -0
- package/dist/login-flows.js.map +1 -0
- package/dist/login-manager.d.ts +63 -0
- package/dist/login-manager.js +134 -0
- package/dist/login-manager.js.map +1 -0
- package/dist/network-family.d.ts +18 -0
- package/dist/network-family.js +20 -0
- package/dist/network-family.js.map +1 -0
- package/dist/outbound-handlers.d.ts +16 -1
- package/dist/outbound-handlers.js +174 -40
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +10 -3
- package/dist/outbound-schemas.js +10 -0
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/pane-input-residue.d.ts +52 -0
- package/dist/pane-input-residue.js +107 -0
- package/dist/pane-input-residue.js.map +1 -0
- package/dist/process-memory.d.ts +6 -0
- package/dist/process-memory.js +45 -0
- package/dist/process-memory.js.map +1 -1
- package/dist/reply-dedup.d.ts +7 -8
- package/dist/reply-dedup.js +0 -0
- package/dist/reply-dedup.js.map +1 -1
- package/dist/restart-progress.d.ts +2 -0
- package/dist/restart-progress.js +3 -0
- package/dist/restart-progress.js.map +1 -1
- package/dist/scheduler/db.d.ts +12 -0
- package/dist/scheduler/db.js +59 -0
- package/dist/scheduler/db.js.map +1 -1
- package/dist/service-installer.d.ts +11 -0
- package/dist/service-installer.js +84 -18
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.js +1 -1
- package/dist/settings-api.js.map +1 -1
- package/dist/setup-wizard.js +2 -2
- package/dist/setup-wizard.js.map +1 -1
- package/dist/spawn-gate.d.ts +30 -0
- package/dist/spawn-gate.js +79 -0
- package/dist/spawn-gate.js.map +1 -0
- package/dist/steer-capability.d.ts +1 -0
- package/dist/steer-capability.js +6 -0
- package/dist/steer-capability.js.map +1 -0
- package/dist/storm-window.d.ts +83 -0
- package/dist/storm-window.js +251 -0
- package/dist/storm-window.js.map +1 -0
- package/dist/tips.d.ts +44 -0
- package/dist/tips.js +355 -0
- package/dist/tips.js.map +1 -0
- package/dist/tmux-manager.d.ts +16 -0
- package/dist/tmux-manager.js +110 -25
- package/dist/tmux-manager.js.map +1 -1
- package/dist/topic-commands.d.ts +31 -7
- package/dist/topic-commands.js +342 -70
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-sources.d.ts +35 -10
- package/dist/transcript-sources.js +190 -38
- package/dist/transcript-sources.js.map +1 -1
- package/dist/types.d.ts +6 -1
- package/dist/ui/dashboard.html +55 -32
- package/dist/ui/settings.html +200 -60
- package/dist/ui/view.html +147 -30
- package/dist/usage/format-rich.d.ts +1 -1
- package/dist/usage/format-rich.js +28 -24
- package/dist/usage/format-rich.js.map +1 -1
- package/dist/usage/i18n-keys.d.ts +7 -0
- package/dist/usage/i18n-keys.js +34 -0
- package/dist/usage/i18n-keys.js.map +1 -0
- package/dist/usage/i18n.d.ts +5 -0
- package/dist/usage/i18n.js +27 -0
- package/dist/usage/i18n.js.map +1 -0
- package/dist/usage/providers.d.ts +21 -0
- package/dist/usage/providers.js +153 -75
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/usage-api.d.ts +11 -3
- package/dist/usage/usage-api.js +61 -24
- package/dist/usage/usage-api.js.map +1 -1
- package/package.json +2 -2
package/dist/tips.js
ADDED
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import { Cron } from "croner";
|
|
2
|
+
export const ADVANCED_TIP_UNLOCK_THRESHOLD = 60;
|
|
3
|
+
/** Temporary rollout gate: keep authored higher tiers without selecting them yet. */
|
|
4
|
+
export const TIPS_MAX_VISIBLE_LEVEL = "beginner";
|
|
5
|
+
export const TIPS = [
|
|
6
|
+
// ── Beginner: mobile-first onboarding (100) ───────────────────────────
|
|
7
|
+
{ id: "tip-001", level: "beginner", text_en: "Instance = Agent = one AI CLI you can talk to, such as Kiro CLI, Claude Code, Codex, Antigravity, Grok, or OpenCode.", text_zh: "instance = Agent = 一個可以對話的 AI CLI,例如 Kiro CLI、Claude Code、Codex、Antigravity、Grok 或 OpenCode。" },
|
|
8
|
+
{ id: "tip-002", level: "beginner", text_en: "Backend = the AI service that powers an Agent, such as Claude Code, Codex, or Kiro CLI. Different Backends provide different features and models.", text_zh: "Backend = 背後驅動 Agent 的 AI 服務,例如 Claude Code、Codex、Kiro CLI。不同 Backend 有不同特性和模型。" },
|
|
9
|
+
{ id: "tip-003", level: "beginner", text_en: "One Instance = one separate Agent conversation; another Instance does not automatically know what was discussed here.", text_zh: "一個 Agent = 一份獨立對話;其他 Agent 不會自動知道這裡談過什麼。" },
|
|
10
|
+
{ id: "tip-004", level: "beginner", text_en: "Fleet = all Instances managed by the same AgEnD; a fleet-wide restart affects every unpaused Instance, not just the current chat.", text_zh: "Fleet = 同一套 AgEnD 管理的全部 Agent;重啟 Fleet 會影響所有未暫停的 Agent,不只目前聊天室。" },
|
|
11
|
+
{ id: "tip-005", level: "beginner", text_en: "General = the coordinator Agent; ask it to choose an Instance, split work, or collect results when a task crosses projects.", text_zh: "General = 協調工作的 Agent;需求跨專案時,可請它挑選 Agent、拆工作或彙整結果。" },
|
|
12
|
+
{ id: "tip-006", level: "beginner", text_en: "A topic, thread, or channel = the chat location bound to an Instance; send the request there to reach that Agent.", text_zh: "Topic、Thread 或 Channel = 綁定某個 Agent 的聊天室位置;在那裡發訊息就會交給該 Agent。" },
|
|
13
|
+
{ id: "tip-007", level: "beginner", text_en: "Working = the Agent is handling something; Idle = it is ready for the next message.", text_zh: "工作中 = Agent 正在處理工作;閒置 = 已準備接下一則訊息。" },
|
|
14
|
+
{ id: "tip-008", level: "beginner", text_en: "Paused = the Instance is asleep but keeps its saved session; sending it a new message normally starts waking it.", text_zh: "Paused = Agent 暫時休眠但保留已存 Session;再傳訊息通常會開始喚醒它。" },
|
|
15
|
+
{ id: "tip-009", level: "beginner", text_en: "Stopped = the AI CLI exited normally; Crashed = it exited unexpectedly or repeated recovery did not succeed.", text_zh: "Stopped = AI CLI 正常結束;Crashed = 非預期退出,或多次恢復仍沒有成功。" },
|
|
16
|
+
{ id: "tip-010", level: "beginner", text_en: "Start a request with the result you want; add limits and output format after that so the Agent sees the main point first.", text_zh: "先講想要的結果,再補限制與輸出格式,Agent 會更快抓到重點。" },
|
|
17
|
+
{ id: "tip-011", level: "beginner", text_en: "A good request = goal + important constraints + what counts as done; this reduces extra clarification rounds.", text_zh: "好需求 = 目標 + 重要限制 + 完成條件;寫清楚可以少來回確認。" },
|
|
18
|
+
{ id: "tip-012", level: "beginner", text_en: "If wording matters, include one short example; an example usually communicates tone faster than a long explanation.", text_zh: "在意文風時,直接附一小段範例;範例通常比長篇解釋更快讓 Agent 抓到語氣。" },
|
|
19
|
+
{ id: "tip-013", level: "beginner", text_en: "When changing an earlier instruction, name exactly what is replaced; otherwise both old and new instructions may stay in play.", text_zh: "要改先前指示時,直接說哪一條被取代;不說清楚,舊指示與新指示可能同時被保留。" },
|
|
20
|
+
{ id: "tip-014", level: "beginner", text_en: "`/steer <message>` = change the direction of work already running; it is supported by Claude Code, Codex, and Grok.", text_zh: "`/steer <訊息>` = 改變正在執行中的方向;目前支援 Claude Code、Codex 與 Grok。", tags: ["claude-code", "codex", "grok"] },
|
|
21
|
+
{ id: "tip-015", level: "beginner", text_en: "Use `/steer` for a correction to the current task, not for a separate job; unrelated work is clearer as a new message.", text_zh: "`/steer` 適合修正目前任務,不適合塞入另一件工作;無關需求另外發一則會更清楚。", tags: ["claude-code", "codex", "grok"] },
|
|
22
|
+
{ id: "tip-016", level: "beginner", text_en: "`/btw <question>` = ask Claude Code a side question without replacing the main task.", text_zh: "`/btw <問題>` = 對 Claude Code 問題外話,不會取代正在做的主要任務。", tags: ["claude-code"] },
|
|
23
|
+
{ id: "tip-017", level: "beginner", text_en: "`/btw` and `/steer` are different: BTW opens a side question, while Steer changes the current work direction.", text_zh: "`/btw` 和 `/steer` 不一樣:BTW 是題外問答,Steer 是改目前工作的方向。", tags: ["claude-code"] },
|
|
24
|
+
{ id: "tip-018", level: "beginner", text_en: "A busy Agent may queue a new message for later; delayed handling does not by itself mean the message was overwritten.", text_zh: "Agent 忙碌時,新訊息可能先排隊;晚一點處理不代表訊息被蓋掉。" },
|
|
25
|
+
{ id: "tip-019", level: "beginner", text_en: "Do not resend a queued request just because the reply is slow; two copies can make the Agent do the same work twice.", text_zh: "回覆較慢時先不要重送排隊中的需求;送兩次可能讓 Agent 真的做兩次。" },
|
|
26
|
+
{ id: "tip-020", level: "beginner", text_en: "Cancel button or `/cancel` = interrupt this run AND discard messages queued before it (messages arriving after the cancel are kept). The user message is already in conversation history; how much work already happened depends on when you cancelled.", text_zh: "取消按鈕或 `/cancel` = 中斷這次運行,並清掉按下前排隊的訊息(取消後才到的新訊息會保留);訊息已進入 Context,已執行多少取決於取消時機。" },
|
|
27
|
+
{ id: "tip-021", level: "beginner", text_en: "AgEnD = the system that connects a Telegram or Discord chat to one or more Agents.", text_zh: "AgEnD = 把 Telegram 或 Discord 聊天室連到一個或多個 Agent 的系統。" },
|
|
28
|
+
{ id: "tip-022", level: "beginner", text_en: "Cancel also clears older deliveries still waiting for that Instance, so queued cross-Instance or scheduled work will not start immediately afterward.", text_zh: "Cancel 也會清掉該 Agent 尚未送入的舊訊息,因此排隊中的跨 Agent 或排程工作不會立刻接著啟動。" },
|
|
29
|
+
{ id: "tip-023", level: "beginner", text_en: "A message sent after Cancel is new work and will not be removed with the older queue.", text_zh: "Cancel 之後才傳的新訊息 = 新工作,不會跟舊佇列一起被清掉。" },
|
|
30
|
+
{ id: "tip-024", level: "beginner", text_en: "⏳ = queued, 👀 = delivered, ✅ = turn confirmed, ❌ = failed; these marks describe delivery, not answer quality.", text_zh: "⏳ = 排隊、👀 = 已送達、✅ = 回合已確認、❌ = 失敗;這些符號只表示投遞狀態,不代表回答品質。" },
|
|
31
|
+
{ id: "tip-025", level: "beginner", text_en: "A delivery mark can appear before the Agent replies; it comes from AgEnD, not from the Agent's written answer.", text_zh: "投遞符號可能比 Agent 回覆更早出現;它是 AgEnD 的狀態,不是 Agent 寫的答案。" },
|
|
32
|
+
{ id: "tip-026", level: "beginner", text_en: "If a message stays on ⏳, wait before resending; it may be waiting for the Agent to become ready.", text_zh: "訊息停在 ⏳ 時先等一下再重送;它可能只是在等 Agent 準備好。" },
|
|
33
|
+
{ id: "tip-027", level: "beginner", text_en: "If a message shows ❌, check the Instance status first; blind retries can hide the real startup, login, or connection problem.", text_zh: "訊息顯示 ❌ 時先查 Agent 狀態;盲目重試可能把真正的啟動、登入或連線問題蓋掉。" },
|
|
34
|
+
{ id: "tip-028", level: "beginner", text_en: "Reply to an earlier message when the Agent must know exactly which text, file, or image the new request refers to.", text_zh: "需要 Agent 確認新需求指的是哪段文字、檔案或圖片時,直接回覆原訊息。" },
|
|
35
|
+
{ id: "tip-029", level: "beginner", text_en: "A quoted reply includes the referenced text; add one sentence explaining what should be done with it.", text_zh: "引用回覆會帶入原文字;再補一句要怎麼處理,Agent 比較不會猜錯。" },
|
|
36
|
+
{ id: "tip-030", level: "beginner", text_en: "Related requests work best in one clear message; unrelated requests are easier to track as separate messages.", text_zh: "彼此相關的需求整理成一則最清楚;無關需求分開傳,之後比較好追蹤。" },
|
|
37
|
+
{ id: "tip-031", level: "beginner", text_en: "Put the main request in the first few lines of a long message; details can follow without hiding the goal.", text_zh: "長訊息先把主要需求放在前幾行;細節接著補,不要讓目標埋在最後。" },
|
|
38
|
+
{ id: "tip-032", level: "beginner", text_en: "For long work, ask for a short progress update instead of sending the whole request again.", text_zh: "長工作想確認進度時,直接問一則簡短進度,不必把整份需求重貼。" },
|
|
39
|
+
{ id: "tip-033", level: "beginner", text_en: "If the Agent asks a question, answer the missing point first; mixing in a new task can leave both requests unclear.", text_zh: "Agent 追問時先補缺少的資訊;同時插入新任務,兩件事都可能變得不清楚。" },
|
|
40
|
+
{ id: "tip-034", level: "beginner", text_en: "If an answer is wrong, quote the exact sentence or value to change; a precise correction is faster than saying only redo it.", text_zh: "回答有誤時,直接引用要改的句子或數值;只說重做通常會多繞一圈。" },
|
|
41
|
+
{ id: "tip-035", level: "beginner", text_en: "At the end of a long discussion, ask for decisions + unfinished items; that summary is easier to hand to another Instance.", text_zh: "長討論結束時,可請 Agent 整理決定事項 + 未完成項目;這份摘要也比較容易交給另一個 Agent。" },
|
|
42
|
+
{ id: "tip-036", level: "beginner", text_en: "Attach the file and instructions in the same message so the Agent receives them as one request.", text_zh: "檔案和說明放在同一則訊息,Agent 才會把它們當成同一個需求。" },
|
|
43
|
+
{ id: "tip-037", level: "beginner", text_en: "For an image, say what to inspect; sending only a picture forces the Agent to guess the question.", text_zh: "傳圖片時順便說要看什麼;只丟圖片會讓 Agent 猜問題。" },
|
|
44
|
+
{ id: "tip-038", level: "beginner", text_en: "For a document, name the page, section, or question that matters; this avoids reading unrelated parts first.", text_zh: "傳文件時指出頁面、段落或問題;可以避免 Agent 先讀一堆無關內容。" },
|
|
45
|
+
{ id: "tip-039", level: "beginner", text_en: "Several attachments = explain each file's role; filenames alone may not reveal which one is input, reference, or expected result.", text_zh: "一次附多個檔案 = 說明每個檔案的用途;只看檔名不一定分得出輸入、參考與預期結果。" },
|
|
46
|
+
{ id: "tip-040", level: "beginner", text_en: "A Telegram voice message is delivered as audio; if speech-to-text is enabled, the Agent also receives a transcript.", text_zh: "Telegram 語音會以音訊送入;若有啟用語音轉文字,Agent 也會收到逐字稿。" },
|
|
47
|
+
{ id: "tip-041", level: "beginner", text_en: "Names, codes, and numbers in voice messages are easy to mishear; type the exact value once when accuracy matters.", text_zh: "語音裡的姓名、代碼與數字容易聽錯;需要精確時再打一遍文字。" },
|
|
48
|
+
{ id: "tip-042", level: "beginner", text_en: "A Telegram sticker becomes its emoji when one exists; a sticker without an emoji becomes `[Sticker]`.", text_zh: "Telegram 貼圖有對應表情時會變成該 emoji;沒有對應表情時會變成 `[Sticker]`。" },
|
|
49
|
+
{ id: "tip-043", level: "beginner", text_en: "A pasted image URL is still only a link; attach the actual image when the Agent must inspect the pixels.", text_zh: "貼圖片網址仍然只是連結;需要 Agent 看圖片內容時,請直接附上圖片檔。" },
|
|
50
|
+
{ id: "tip-044", level: "beginner", text_en: "On supported Discord replies, replying to a message with an image also sends that quoted image to the Agent.", text_zh: "在支援的 Discord 回覆中,回覆一則帶圖訊息時,被引用的圖片也會送給 Agent。" },
|
|
51
|
+
{ id: "tip-045", level: "beginner", text_en: "Use text for important instructions; an emoji reaction alone may be recorded as feedback without starting work.", text_zh: "重要指示請用文字;只按 emoji 可能只會被記成回應,不會啟動工作。" },
|
|
52
|
+
{ id: "tip-046", level: "beginner", text_en: "In a chat with several bots, mention the intended bot; otherwise the wrong persona may answer or nobody may act.", text_zh: "同一聊天室有多個 bot 時,要標記指定的 bot;不然可能由錯的身份回覆,也可能沒人處理。" },
|
|
53
|
+
{ id: "tip-047", level: "beginner", text_en: "Tool progress = a short history of what the Agent is doing; when enabled, the button disappears after completion but the history remains.", text_zh: "Tool progress = Agent 正在做什麼的簡短歷程;啟用後,完成時按鈕會消失,但歷程會保留。" },
|
|
54
|
+
{ id: "tip-048", level: "beginner", text_en: "Verbose progress can include command previews; check screenshots for private paths or values before sharing them.", text_zh: "詳細進度可能包含指令預覽;分享截圖前先檢查私密路徑或數值。" },
|
|
55
|
+
{ id: "tip-049", level: "beginner", text_en: "An interactive prompt = the AI CLI is waiting for a password, permission, Y/N, or Enter; AgEnD will notify General instead of guessing.", text_zh: "Interactive prompt = AI CLI 正在等密碼、權限、Y/N 或 Enter;AgEnD 會通知 General,不會自己猜答案。" },
|
|
56
|
+
{ id: "tip-050", level: "beginner", text_en: "AgEnD never types a password automatically; review the prompt before approving anything.", text_zh: "AgEnD 不會自動輸入密碼;任何確認都先看清楚再允許。" },
|
|
57
|
+
{ id: "tip-051", level: "beginner", text_en: "`/dashboard` = links to View, Settings, and Web UI; it is an admin command because the edit links contain an access token.", text_zh: "`/dashboard` = View、Settings 與 Web UI 的網址;編輯網址帶有存取 token,所以這是管理員指令。" },
|
|
58
|
+
{ id: "tip-052", level: "beginner", text_en: "View at `http://localhost:19280/view` = the live local dashboard by default; localhost means it normally opens only on the AgEnD machine.", text_zh: "`http://localhost:19280/view` 的 View = 預設本機即時畫面;localhost 代表通常只能在安裝 AgEnD 的電腦開啟。" },
|
|
59
|
+
{ id: "tip-053", level: "beginner", text_en: "View shows Instance state, Context percentage when available, and live terminal output; use it to check whether work is actually moving.", text_zh: "View 會顯示 Agent 狀態、可取得時的 Context 百分比與即時工作畫面;可用來確認工作是否真的有在跑。" },
|
|
60
|
+
{ id: "tip-054", level: "beginner", text_en: "View's AI Usage panel = subscription usage for Backends that currently have an Instance; unused Backends stay hidden.", text_zh: "View 的 AI Usage 面板 = 目前有 Agent 使用中的 Backend 訂閱量;沒在用的 Backend 會隱藏。" },
|
|
61
|
+
{ id: "tip-055", level: "beginner", text_en: "`/usage` = show available AI subscription usage in the chat without opening View.", text_zh: "`/usage` = 不開 View,直接在聊天室查看可取得的 AI 訂閱用量。" },
|
|
62
|
+
{ id: "tip-056", level: "beginner", text_en: "No data in `/usage` does not always mean zero quota; the account may be signed out, refreshing a token, or not exposing usage data.", text_zh: "`/usage` 顯示 no data 不一定是額度歸零;也可能是帳號未登入、token 正在更新,或服務沒有提供用量資料。" },
|
|
63
|
+
{ id: "tip-057", level: "beginner", text_en: "Usage data is cached briefly to avoid provider limits; use Refresh in View when the latest number matters.", text_zh: "用量資料會短暫快取,避免頻繁查詢供應商;需要最新數字時,可按 View 裡的重新整理。" },
|
|
64
|
+
{ id: "tip-058", level: "beginner", text_en: "Quota = the amount included with an account or subscription; a warning may allow the current answer but block later work.", text_zh: "Quota = 帳號或訂閱包含的可用量;出現警告時,本次回答可能仍會完成,但後續工作可能被擋。" },
|
|
65
|
+
{ id: "tip-059", level: "beginner", text_en: "`/status` = the fleet overview, including Instance state and key health information.", text_zh: "`/status` = Fleet 總覽,包含 Agent 狀態與重要健康資訊。" },
|
|
66
|
+
{ id: "tip-060", level: "beginner", text_en: "`/sysinfo` = AgEnD, operating-system, runtime, and process details; use it when reporting an environment problem.", text_zh: "`/sysinfo` = AgEnD、作業系統、執行環境與程序資訊;回報環境問題時很有用。" },
|
|
67
|
+
{ id: "tip-061", level: "beginner", text_en: "Context = how much of the current conversation the Agent can remember. When it fills up, use `/compact` to compress it or `/clear` to start over.", text_zh: "Context = 這段對話目前能記住的內容量。滿了就需要壓縮(`/compact`)或重新開始(`/clear`)。" },
|
|
68
|
+
{ id: "tip-062", level: "beginner", text_en: "Context near full = older details may be compacted or lost; ask for a handover summary before a long task reaches the limit.", text_zh: "Context 接近滿 = 舊細節可能被壓縮或遺失;長工作快到上限前先請 Agent 寫交接摘要。" },
|
|
69
|
+
{ id: "tip-063", level: "beginner", text_en: "For a long Claude Code session, check `/ctx`; use `/compact` or write a handover summary before the limit to reduce lost details.", text_zh: "Claude Code 的長 Session 可用 `/ctx` 留意空間;接近上限前用 `/compact` 或寫交接摘要,可降低細節遺失。", tags: ["claude-code"] },
|
|
70
|
+
{ id: "tip-064", level: "beginner", text_en: "Codex normally manages conversation compaction itself, but important decisions should still be summarized instead of assuming every detail will survive.", text_zh: "Codex 通常會自行管理對話壓縮,但重要決定仍建議整理摘要,不要假設每個細節都會一直保留。", tags: ["codex"] },
|
|
71
|
+
{ id: "tip-065", level: "beginner", text_en: "`/compact` = shorten the current conversation while keeping useful Context where the Backend supports it; behavior differs by Backend.", text_zh: "`/compact` = 在 Backend 支援時縮短目前 Context 並盡量保留重點;不同 Backend 的效果不完全相同。" },
|
|
72
|
+
{ id: "tip-066", level: "beginner", text_en: "`/model` = show models discovered for the current Backend; choosing one changes that Instance's model and saves the choice for restart.", text_zh: "`/model` = 顯示目前 Backend 探測到的可選模型;選擇後會切換該 Agent 的模型,並保存供重啟後使用。" },
|
|
73
|
+
{ id: "tip-067", level: "beginner", text_en: "The model list is probed when AgEnD starts; if a new model is missing, restart AgEnD, or use Discord's `/model refresh` to refresh it directly.", text_zh: "模型清單會在 AgEnD 啟動時探測;新模型沒出現時可重啟 AgEnD,Discord 也可用 `/model refresh` 直接刷新。" },
|
|
74
|
+
{ id: "tip-068", level: "beginner", text_en: "`/effort` = reasoning strength for supported models; higher effort may improve hard work but usually takes more time and quota.", text_zh: "`/effort` = 支援模型的思考強度;強度較高可能更適合難題,但通常也更花時間與額度。" },
|
|
75
|
+
{ id: "tip-069", level: "beginner", text_en: "`/save <name>` = export the current conversation for later reference; AgEnD supports it with Kiro CLI and Claude Code.", text_zh: "`/save <名稱>` = 匯出目前對話供之後參考;AgEnD 目前支援 Kiro CLI 與 Claude Code。", tags: ["claude-code", "kiro-cli"] },
|
|
76
|
+
{ id: "tip-070", level: "beginner", text_en: "Discord Kiro ClassicBot `/load <name>` = load a conversation previously saved by Kiro; it is not a general restore command for every Backend.", text_zh: "Discord 的 Kiro ClassicBot 可用 `/load <名稱>` 載入先前由 Kiro 儲存的對話;這不是所有 Backend 都能用的通用還原指令。", tags: ["kiro-cli"] },
|
|
77
|
+
{ id: "tip-071", level: "beginner", text_en: "Claude Code `/save` exports a Markdown file for reference; there is no matching AgEnD `/load` that restores it as a Claude session.", text_zh: "Claude Code 的 `/save` 會匯出 Markdown 檔供參考;AgEnD 沒有對應的 `/load` 可把它還原成 Claude Session。", tags: ["claude-code"] },
|
|
78
|
+
{ id: "tip-072", level: "beginner", text_en: "Kiro `/save` maps to `/chat save`; Discord `/load` works later only in the Kiro ClassicBot workflow.", text_zh: "Kiro 的 `/save` 會轉成 `/chat save`;之後的 Discord `/load` 只適用 Kiro ClassicBot 流程。", tags: ["kiro-cli"] },
|
|
79
|
+
{ id: "tip-073", level: "beginner", text_en: "Admin `/update` = install the latest AgEnD release from the current stable or beta channel, then restart the fleet.", text_zh: "管理員使用 `/update` = 從目前的穩定版或 Beta 更新通道安裝最新 AgEnD,完成後重啟 Fleet。" },
|
|
80
|
+
{ id: "tip-074", level: "beginner", text_en: "Admin `/restart` = gracefully restart the whole Fleet, not only the current Instance.", text_zh: "管理員使用 `/restart` = 優雅重啟整個 Fleet,不是只重啟目前 Agent。" },
|
|
81
|
+
{ id: "tip-075", level: "beginner", text_en: "Restarting wakes every unpaused Instance; startup takes time, and later recovery or summary work may use extra tokens, so avoid repeated fleet restarts.", text_zh: "每次重啟都會喚醒所有未暫停的 Agent;啟動需要時間,後續恢復或摘要也可能多用 token,因此不要頻繁重啟 Fleet。" },
|
|
82
|
+
{ id: "tip-076", level: "beginner", text_en: "Pause unused Instances before an update or restart if they do not need to come back immediately; paused Instances are skipped during fleet startup.", text_zh: "不需要立刻恢復的 Agent,可在 update 或 restart 前先 Pause;Fleet 啟動時會跳過已暫停的 Agent。" },
|
|
83
|
+
{ id: "tip-077", level: "beginner", text_en: "Admin `/pause` = put an Instance to sleep; `/wake` = start it again. General itself cannot be paused.", text_zh: "管理員使用 `/pause` = 讓 Agent 休眠;`/wake` = 再次啟動。General 本身不能被暫停。" },
|
|
84
|
+
{ id: "tip-078", level: "beginner", text_en: "Settings can set automatic pause time; `0` means disabled, and sleeping unused Instances reduces background processes and restart load.", text_zh: "Settings 可以設定自動暫停時間;`0` 代表停用,讓不用的 Agent 休眠可減少背景程序與重啟負擔。" },
|
|
85
|
+
{ id: "tip-079", level: "beginner", text_en: "Changing auto-pause, progress detail, display name, description, tags, or log level is hot-reloaded and does not restart the Instance.", text_zh: "修改自動暫停、進度詳細度、顯示名稱、描述、標籤或 Log Level 會即時生效,不會重啟 Agent。" },
|
|
86
|
+
{ id: "tip-080", level: "beginner", text_en: "Backend, working-directory, or tool-set changes in Settings—and Backend options changed in config—are cold changes that restart the Instance.", text_zh: "在 Settings 修改 Backend、工作目錄或 Tool Set,以及在設定檔修改 Backend Options,都屬於冷設定,會重啟 Agent。" },
|
|
87
|
+
{ id: "tip-081", level: "beginner", text_en: "ClassicBot = an Agent living in an ordinary Discord server/channel or Telegram group, rather than a pre-created Fleet topic.", text_zh: "ClassicBot = 常駐在一般 Discord Server/Channel 或 Telegram Group 裡的 Agent,不是預先建立的 Fleet Topic。" },
|
|
88
|
+
{ id: "tip-082", level: "beginner", text_en: "ClassicBot does not interrupt every conversation by default; use `/chat`, while a bot mention also triggers it in Telegram groups or collaboration chats.", text_zh: "ClassicBot 預設不會對每段聊天主動插話;可用 `/chat`,在 Telegram 群組或協作聊天室標記 bot 也會觸發。" },
|
|
89
|
+
{ id: "tip-083", level: "beginner", text_en: "ClassicBot includes recent chat-log context before the triggered message; the default is the latest five lines, not the entire channel history.", text_zh: "ClassicBot 觸發時會附上近期聊天紀錄;預設是最近 5 行,不是整個頻道歷史。" },
|
|
90
|
+
{ id: "tip-084", level: "beginner", text_en: "To use ClassicBot, invite the bot to the Discord server or Telegram group, then an administrator runs `/start` in the target chat.", text_zh: "要使用 ClassicBot,先把 bot 邀進 Discord Server 或 Telegram Group,再由管理員在目標聊天室執行 `/start`。" },
|
|
91
|
+
{ id: "tip-085", level: "beginner", text_en: "ClassicBot `/start` creates or resumes the chat's Instance with the ClassicBot default Backend; Settings can change the Backend afterward.", text_zh: "ClassicBot 的 `/start` 會用 ClassicBot 預設 Backend 建立或恢復該聊天室的 Agent;之後可到 Settings 修改 Backend。" },
|
|
92
|
+
{ id: "tip-086", level: "beginner", text_en: "ClassicBot `/stop` removes that chat binding; use it only when the channel should no longer have its Agent.", text_zh: "ClassicBot 的 `/stop` 會移除該聊天室綁定;確定這個 Channel 不再需要 Agent 時才使用。" },
|
|
93
|
+
{ id: "tip-087", level: "beginner", text_en: "A ClassicBot chat and a Fleet topic are routed differently; always run commands in the chat that owns the intended Instance.", text_zh: "ClassicBot 聊天室與 Fleet Topic 的路由不同;指令要在目標 Agent 所屬的聊天室執行。" },
|
|
94
|
+
{ id: "tip-088", level: "beginner", text_en: "Several bots in one collaboration chat = mention the right persona or use its slash command; each bot can own a different ClassicBot Instance.", text_zh: "同一個協作聊天室有多個 bot = 標記正確 persona 或使用它的 slash command;每個 bot 可以各自擁有不同的 ClassicBot Agent。" },
|
|
95
|
+
{ id: "tip-089", level: "beginner", text_en: "A login-expired message = sign in to that Backend again; retrying the same request before login is fixed usually repeats the failure.", text_zh: "登入過期訊息 = 重新登入該 Backend;登入尚未修好前重送同一需求,通常只會再次失敗。" },
|
|
96
|
+
{ id: "tip-090", level: "beginner", text_en: "A model-not-supported message = the selected Backend or account rejected that model; choose another listed model instead of expecting a silent fallback.", text_zh: "模型不支援訊息 = 目前 Backend 或帳號拒絕該模型;請改選清單中的模型,不要期待系統默默換回預設。" },
|
|
97
|
+
{ id: "tip-091", level: "beginner", text_en: "A password or Y/N prompt that sits still will trigger a General notification; AgEnD will not answer it automatically.", text_zh: "密碼或 Y/N 提示停住時會通知 General;AgEnD 不會自動代答。" },
|
|
98
|
+
{ id: "tip-092", level: "beginner", text_en: "For a bug report, include time + Instance name + what you sent + what happened; those four facts make logs much easier to match.", text_zh: "回報問題時附上時間 + instance 名稱 + 傳了什麼 + 發生什麼;這四項最容易對上 Log。" },
|
|
99
|
+
{ id: "tip-093", level: "beginner", text_en: "A screenshot from the View page shows the live Agent screen; check it for project names, paths, or secrets before sharing.", text_zh: "View 頁面的截圖會顯示 Agent 即時畫面;分享前先檢查專案名稱、路徑或 Secret。" },
|
|
100
|
+
{ id: "tip-094", level: "beginner", text_en: "AI answers can be wrong; verify commands, prices, permissions, and other high-impact facts before acting.", text_zh: "AI 回答可能出錯;指令、價格、權限與其他高影響資訊都要確認後再執行。" },
|
|
101
|
+
{ id: "tip-095", level: "beginner", text_en: "Sensitive work = share only the files and values needed for this request; chat exports and screenshots may contain more than expected.", text_zh: "敏感工作 = 只提供本次需求必要的檔案與數值;聊天匯出與截圖可能比預期包含更多資訊。" },
|
|
102
|
+
{ id: "tip-096", level: "beginner", text_en: "`/tips` = show another available Tip in the current chat; it does not have to be run in General.", text_zh: "`/tips` = 在目前聊天室再顯示一則可用 Tip;不一定要到 General 執行。" },
|
|
103
|
+
{ id: "tip-097", level: "beginner", text_en: "✅ I know this = keep the Tip text but remove its buttons and stop showing that Tip again.", text_zh: "✅ 我知道了 = 保留 Tip 原文、收起按鈕,之後不再顯示同一則。" },
|
|
104
|
+
{ id: "tip-098", level: "beginner", text_en: "❓ I don't understand = keep the Tip text, record feedback, and allow that Tip to appear again later.", text_zh: "❓ 看不懂 = 保留 Tip 原文、記錄回饋,之後仍可能再次出現同一則。" },
|
|
105
|
+
{ id: "tip-099", level: "beginner", text_en: "`/clear` = erase the current Context after confirmation; it cannot be undone, but project files and AgEnD instructions remain.", text_zh: "`/clear` = 確認後清空目前 Context;這個動作不能復原,但專案檔案與 AgEnD 指示仍會保留。" },
|
|
106
|
+
{ id: "tip-100", level: "beginner", text_en: "A useful Tip should tell you what changes for you; press I don't understand when the wording does not make the consequence clear.", text_zh: "有用的 Tip 應該直接說明對你有什麼影響;看不出實際後果時就按「看不懂」。" },
|
|
107
|
+
// ── Intermediate: concepts and guided operation (100) ────────────────
|
|
108
|
+
{ id: "tip-101", level: "intermediate", text_en: "An Instance is one independent Agent. Each instance keeps its own conversation and can be assigned a different project.", text_zh: "instance(單一且獨立的 Agent)各自保有自己的對話,也可以分別負責不同專案。" },
|
|
109
|
+
{ id: "tip-102", level: "intermediate", text_en: "A Fleet is the group of instances managed together by AgEnD. Fleet-wide actions can affect every running Agent.", text_zh: "Fleet(由 AgEnD 一起管理的一組 Agent)可統一執行管理操作;整體操作可能影響所有運行中的 Agent。" },
|
|
110
|
+
{ id: "tip-103", level: "intermediate", text_en: "General is the coordinator Agent that manages work. Ask General to choose a suitable instance, divide independent tasks, or manage the Fleet.", text_zh: "General(協調工作的 Agent)可協助選擇合適的 Agent、拆分互不相依的任務,或管理整個 Fleet。" },
|
|
111
|
+
{ id: "tip-104", level: "intermediate", text_en: "A Backend determines which AI service an instance uses, such as Claude Code, Codex, Kiro CLI, Grok, Antigravity, or OpenCode.", text_zh: "Backend(決定 Agent 使用哪種 AI 服務)可以是 Claude Code、Codex、Kiro CLI、Grok、Antigravity 或 OpenCode。" },
|
|
112
|
+
{ id: "tip-105", level: "intermediate", text_en: "Context is the amount of information the AI can keep from the current conversation. It is limited and is not permanent project storage.", text_zh: "Context(目前對話可保留的資訊量)有容量限制,也不是永久的專案儲存空間。" },
|
|
113
|
+
{ id: "tip-106", level: "intermediate", text_en: "MCP is the channel that lets an AI use reply, file, and collaboration tools. Users normally ask for an outcome rather than operate MCP directly.", text_zh: "MCP(讓 AI 使用回覆、檔案與協作工具的通道)通常不需由使用者直接操作,只要說明預期結果即可。" },
|
|
114
|
+
{ id: "tip-107", level: "intermediate", text_en: "A Model is the particular AI selected inside a backend. Leaving it unset normally uses the fleet or account default.", text_zh: "Model(Backend 內實際選用的 AI 模型)若未指定,通常會沿用 Fleet 或帳號的預設值。" },
|
|
115
|
+
{ id: "tip-108", level: "intermediate", text_en: "A Session is a backend's saved conversation state. Whether it resumes after a restart depends on that backend's session support.", text_zh: "Session(Backend 保存的對話狀態)能否在重啟後延續,取決於該 Backend 的支援方式。" },
|
|
116
|
+
{ id: "tip-109", level: "intermediate", text_en: "A working directory is the project folder an instance reads and edits. Separate instances may share one, but simultaneous edits can conflict.", text_zh: "工作目錄(Agent 讀取與修改專案時使用的目錄)可以共用,但多個 Agent 同時修改時可能產生衝突。" },
|
|
117
|
+
{ id: "tip-110", level: "intermediate", text_en: "ClassicBot is the mode that creates an ongoing Agent in an ordinary Telegram or Discord conversation, rather than a preconfigured Fleet conversation.", text_zh: "ClassicBot(在一般 Telegram 或 Discord 對話中建立持續 Agent 的模式)不需要預先配置 Fleet 對話。" },
|
|
118
|
+
{ id: "tip-111", level: "intermediate", text_en: "An Adapter is AgEnD's connection to one messaging bot account. In a multi-bot setup, an instance can be bound to a specific bot identity.", text_zh: "Adapter(AgEnD 與某個訊息 Bot 帳號的連線)在多 Bot 環境中可讓 Agent 固定使用指定身分回覆。" },
|
|
119
|
+
{ id: "tip-112", level: "intermediate", text_en: "Telegram separates fleet conversations with topics; Discord may use channels or threads. These spaces serve the same routing purpose in AgEnD.", text_zh: "Telegram 以 Topic 分隔 Fleet 對話,Discord 則可能使用 Channel 或 Thread;這些空間在 AgEnD 中都用來把訊息送到正確的 Agent。" },
|
|
120
|
+
{ id: "tip-113", level: "intermediate", text_en: "A Tool is an action an AI can call, such as reading a file or sending a reply. Tool availability depends on the backend and permissions.", text_zh: "Tool(AI 可呼叫的操作,例如讀取檔案或發送回覆)是否可用,取決於 Backend 與權限設定。" },
|
|
121
|
+
{ id: "tip-114", level: "intermediate", text_en: "A delivery queue holds messages until they can safely enter a busy Agent. A queued message is delayed, not necessarily lost.", text_zh: "Delivery queue(等待安全時機送入忙碌 Agent 的訊息佇列)代表訊息延後處理,不一定是遺失。" },
|
|
122
|
+
{ id: "tip-115", level: "intermediate", text_en: "Idle means an instance appears ready for input; Working means AgEnD sees it processing a turn. These states are observations, not guarantees about answer quality.", text_zh: "閒置(看起來可接收輸入)與工作中(偵測到正在處理工作)是 AgEnD 觀察到的狀態,不代表回答品質。" },
|
|
123
|
+
{ id: "tip-116", level: "intermediate", text_en: "Paused means AgEnD intentionally stopped the Agent's CLI process while preserving its configuration for a later wake.", text_zh: "Paused(暫停)表示 AgEnD 刻意停止 Agent 的 CLI 程序,但保留設定,之後仍可喚醒。" },
|
|
124
|
+
{ id: "tip-117", level: "intermediate", text_en: "Stopped is an orderly exit; Crashed indicates an unexpected exit or repeated recovery failure. General can help inspect either state.", text_zh: "Stopped(正常停止)與 Crashed(非預期退出或多次恢復失敗)原因不同,可請 General 協助檢查。" },
|
|
125
|
+
{ id: "tip-118", level: "intermediate", text_en: "Settings is the browser editor for common AgEnD options. Hot settings apply immediately; cold settings change startup behavior and restart the affected instance.", text_zh: "Settings(常用設定的網頁編輯器)會即時套用 Hot 設定;Cold 設定會改變啟動方式,因此會重啟受影響的 Agent。" },
|
|
126
|
+
{ id: "tip-119", level: "intermediate", text_en: "View is the browser page that mirrors an instance's live terminal screen. It is useful when a prompt or progress display needs visual inspection.", text_zh: "View(在瀏覽器顯示 Agent 即時終端畫面的頁面)適合查看互動提示或工作進度。" },
|
|
127
|
+
{ id: "tip-120", level: "intermediate", text_en: "A CLI is an AI program that runs from a computer terminal, and a TUI is the text-based screen it displays there. AgEnD sends messages into that screen, which users can inspect through View or from a computer terminal.", text_zh: "CLI(在電腦終端中運行的 AI 程式)會顯示 TUI(以文字構成的操作畫面);AgEnD 會把訊息送進該畫面,使用者可透過 View 或電腦終端查看。" },
|
|
128
|
+
{ id: "tip-121", level: "intermediate", text_en: "Use `/ctx` to check the current instance, backend, model, and available context estimate. Some backends cannot report a percentage.", text_zh: "使用 `/ctx` 可查看目前的 instance、Backend、Model 與可取得的 Context 估計值;部分 Backend 無法提供百分比。" },
|
|
129
|
+
{ id: "tip-122", level: "intermediate", text_en: "Use `/model` without an argument to open the model selector. Administrators can use `/model <name>` to request a specific model.", text_zh: "不帶參數的 `/model` 會開啟模型選單;管理員可用 `/model <名稱>` 指定模型。" },
|
|
130
|
+
{ id: "tip-123", level: "intermediate", text_en: "AgEnD passes a safely formed model name to the backend even when its local pattern does not recognize it. The backend remains the authority and may reject it.", text_zh: "即使 AgEnD 的本機規則不認得某個格式安全的模型名稱,仍會交給 Backend 判斷;Backend 可能接受,也可能回報不可用。" },
|
|
131
|
+
{ id: "tip-124", level: "intermediate", text_en: "Use `/effort` without an argument to inspect available reasoning levels. Administrators can use `/effort <level>` when the backend and model support that level.", text_zh: "不帶參數的 `/effort` 可查看推理強度選項;管理員可在 Backend 與 Model 支援時使用 `/effort <等級>`。" },
|
|
132
|
+
{ id: "tip-125", level: "intermediate", text_en: "Reasoning effort changes how much work a supported model spends thinking; it does not change the backend or guarantee a better answer.", text_zh: "Reasoning effort(推理強度)會調整支援模型投入思考的程度,不會切換 Backend,也不保證答案一定更好。" },
|
|
133
|
+
{ id: "tip-126", level: "intermediate", text_en: "Use `/compact` when the context is crowded but the conversation should continue. Backend behavior differs; Antigravity maps this action to a full clear.", text_zh: "Context 擁擠但仍要延續對話時可用 `/compact`;各 Backend 行為不同,Antigravity 會改為完整清除。" },
|
|
134
|
+
{ id: "tip-127", level: "intermediate", text_en: "Use `/clear` to reset the conversation on a supported backend. It is administrator-only and asks for confirmation because prior context is removed.", text_zh: "支援的 Backend 可用 `/clear` 重設對話;此指令限管理員使用,且因先前 Context 會被移除而需要再次確認。" },
|
|
135
|
+
{ id: "tip-128", level: "intermediate", text_en: "Use `/cancel` or the Cancel button to interrupt the current turn. It also discards messages queued before the cancellation, but keeps messages arriving afterward.", text_zh: "使用 `/cancel` 或取消按鈕可中斷目前回合;按下前排隊的訊息會被丟棄,之後到達的新訊息則會保留。" },
|
|
136
|
+
{ id: "tip-129", level: "intermediate", text_en: "Use `/pause` on an idle non-General instance to save resources. General cannot be paused because Fleet coordination must remain available.", text_zh: "可對閒置且非 General 的 Agent 使用 `/pause` 以節省資源;General 必須維持協調能力,因此不能暫停。" },
|
|
137
|
+
{ id: "tip-130", level: "intermediate", text_en: "Use `/wake` to start a paused instance immediately. Sending a normal message to a paused instance can also begin its wake process.", text_zh: "使用 `/wake` 可立即啟動 Paused Agent;傳送一般訊息也能觸發喚醒流程。" },
|
|
138
|
+
{ id: "tip-131", level: "intermediate", text_en: "Use `/restart` only when the entire Fleet should restart. Ask General for an instance-specific restart when one Agent is unhealthy.", text_zh: "只有整個 Fleet 都需要重啟時才使用 `/restart`;若只有一個 Agent 異常,應請 General 單獨重啟該 Agent。" },
|
|
139
|
+
{ id: "tip-132", level: "intermediate", text_en: "Use `/update` after active work reaches a safe point. Updating installs the selected AgEnD release and then restarts the fleet.", text_zh: "應等進行中的工作到達安全點後再用 `/update`;更新會安裝選定的 AgEnD 版本,接著重啟整個 Fleet。" },
|
|
140
|
+
{ id: "tip-133", level: "intermediate", text_en: "Use `/usage` to view available subscription metrics for backends used by running or paused instances. No data can mean unavailable telemetry, not zero usage.", text_zh: "使用 `/usage` 可查看 Running 或 Paused Agent 所用 Backend 的訂閱資料;無資料可能代表無法取得統計,不等於用量為零。" },
|
|
141
|
+
{ id: "tip-134", level: "intermediate", text_en: "Use `/dashboard` to obtain current View and Settings links. Links containing an access token should be treated like a password and not shared publicly.", text_zh: "使用 `/dashboard` 可取得目前的 View 與 Settings 連結;含存取 Token 的連結應視同密碼,不要公開分享。" },
|
|
142
|
+
{ id: "tip-135", level: "intermediate", text_en: "Use `/status` for an administrator-only fleet summary, including running, paused, stopped, and crashed instances.", text_zh: "管理員可用 `/status` 查看 Fleet 摘要,包括 Running、Paused、Stopped 與 Crashed Agent。" },
|
|
143
|
+
{ id: "tip-136", level: "intermediate", text_en: "Use `/sysinfo` to collect host and version details for an environment-specific problem report.", text_zh: "問題可能與執行環境有關時,可用 `/sysinfo` 收集主機與版本資訊。" },
|
|
144
|
+
{ id: "tip-137", level: "intermediate", text_en: "Use `/doctor` in General to check configured Backends. Run `agend doctor` from a trusted computer terminal for broader service and connection checks.", text_zh: "在 General 使用 `/doctor` 可檢查已設定的 Backend;更完整的服務與連線檢查需從可信任的電腦終端執行 `agend doctor`。" },
|
|
145
|
+
{ id: "tip-138", level: "intermediate", text_en: "Use `/tips` to request another tip, `/tips off` to stop daily delivery, and `/tips on` to enable it again.", text_zh: "使用 `/tips` 可立即查看另一則提示;`/tips off` 可停止每日投遞,`/tips on` 可重新開啟。" },
|
|
146
|
+
{ id: "tip-139", level: "intermediate", text_en: "Use `/steer <message>` to redirect an active turn on Claude Code, Codex, or Grok. Unsupported backends return an explicit message.", text_zh: "使用 `/steer <訊息>` 可在 Claude Code、Codex 或 Grok 工作途中調整方向;不支援的 Backend 會明確回報。" },
|
|
147
|
+
{ id: "tip-140", level: "intermediate", text_en: "Use `/btw <message>` for a side question on Claude Code without asking it to abandon the current task. Other backends report it as unsupported.", text_zh: "使用 `/btw <訊息>` 可向 Claude Code 提出附帶問題,而不要求放棄目前任務;其他 Backend 會回報不支援。" },
|
|
148
|
+
{ id: "tip-141", level: "intermediate", text_en: "From General, administrators can use `/pause <instance>` or `/wake <instance>` to target a named Agent instead of opening its conversation first.", text_zh: "管理員可在 General 使用 `/pause <instance 名稱>` 或 `/wake <instance 名稱>`,不必先進入該 Agent 的對話。" },
|
|
149
|
+
{ id: "tip-142", level: "intermediate", text_en: "Use `/save <name>` only with Kiro CLI or Claude Code. Kiro saves a chat and Claude Code exports a Markdown file; other backends report unsupported.", text_zh: "`/save <名稱>` 僅支援 Kiro CLI 與 Claude Code;Kiro 會保存 Chat,Claude Code 會匯出 Markdown,其他 Backend 會回報不支援。" },
|
|
150
|
+
{ id: "tip-143", level: "intermediate", text_en: "In a ClassicBot conversation, `/start` creates or resumes its Agent and `/stop` removes that channel binding. Both are administrator actions.", text_zh: "在 ClassicBot 對話中,管理員可用 `/start` 建立或恢復 Agent,並用 `/stop` 移除該頻道的綁定。" },
|
|
151
|
+
{ id: "tip-144", level: "intermediate", text_en: "Use `/collab` as an administrator to toggle whether bot messages may participate in a configured fleet conversation. Access rules still apply.", text_zh: "管理員可用 `/collab` 切換 Bot 訊息是否能參與已設定的 Fleet 對話;既有存取規則仍會套用。" },
|
|
152
|
+
{ id: "tip-145", level: "intermediate", text_en: "Settings stages edits until Apply is pressed. Review the pending changes before applying them, especially when a cold field will restart an instance.", text_zh: "Settings 會先暫存修改,按下 Apply 才套用;若 Cold 欄位會重啟 Agent,送出前應先檢查變更內容。" },
|
|
153
|
+
{ id: "tip-146", level: "intermediate", text_en: "Backend is a cold setting. Changing it in Settings selects a different Backend and restarts the affected instance.", text_zh: "Backend 屬於 Cold 設定;在 Settings 切換 Backend 後,受影響的 Agent 會重啟。" },
|
|
154
|
+
{ id: "tip-147", level: "intermediate", text_en: "Working directory is a cold setting. Confirm the destination exists and contains the intended project before applying it in Settings.", text_zh: "工作目錄屬於 Cold 設定;在 Settings 套用前,應確認目標工作目錄存在且包含預期專案。" },
|
|
155
|
+
{ id: "tip-148", level: "intermediate", text_en: "Model overrides can be changed with `/model` or Settings. If no override is needed, leave the field unset so normal defaults apply.", text_zh: "Model Override 可透過 `/model` 或 Settings 調整;不需指定時可留空,讓既有預設值生效。" },
|
|
156
|
+
{ id: "tip-149", level: "intermediate", text_en: "Tool progress controls how much live tool history appears under the working message. Choose off, standard, or verbose in Settings; it applies without restarting.", text_zh: "Tool progress(工作訊息下顯示多少工具歷程)可在 Settings 選擇 off、standard 或 verbose,且不需重啟即可生效。" },
|
|
157
|
+
{ id: "tip-150", level: "intermediate", text_en: "Display name changes how an instance is presented without changing its internal name. It is a hot setting in Settings.", text_zh: "Display name(對外顯示名稱)不會改變 instance 的內部名稱,可在 Settings 即時調整。" },
|
|
158
|
+
{ id: "tip-151", level: "intermediate", text_en: "Description and tags document an instance's responsibility and help General choose it. Both can be edited in Settings without a restart.", text_zh: "Description 與 Tags 可說明 Agent 的責任並協助 General 選擇,兩者都能在 Settings 即時修改。" },
|
|
159
|
+
{ id: "tip-152", level: "intermediate", text_en: "Auto-pause is an optional idle timer. It is disabled when set to zero and can be enabled or adjusted in Settings without restarting the instance.", text_zh: "Auto-pause(閒置後自動暫停的計時)設為 0 時停用,可在 Settings 啟用或調整,且不需重啟 Agent。" },
|
|
160
|
+
{ id: "tip-153", level: "intermediate", text_en: "Warm cap limits how many non-General instances remain active. Ask General to adjust it, or change `defaults.warm_cap` in fleet.yaml under advanced configuration and reload; existing instances do not need to restart.", text_zh: "Warm cap(最多保留多少個非 General Agent 運行)可請 General 協助調整,或在進階設定中修改 fleet.yaml 的 `defaults.warm_cap` 後重新載入;既有 Agent 不需重啟。" },
|
|
161
|
+
{ id: "tip-154", level: "intermediate", text_en: "Log level controls diagnostic detail. It is a hot setting, but more detailed logs may contain project or routing information.", text_zh: "Log level(診斷紀錄的詳細程度)屬於 Hot 設定;較詳細的 Log 也可能包含專案或路由資訊。" },
|
|
162
|
+
{ id: "tip-155", level: "intermediate", text_en: "Channel binding selects which configured bot identity a fleet instance uses. Set it in Settings when several bot accounts share a server or group.", text_zh: "Channel binding(Fleet instance 固定使用的 bot 身分)可在 Settings 設定,適合多個 bot 帳號共用同一伺服器或群組的情況。" },
|
|
163
|
+
{ id: "tip-156", level: "intermediate", text_en: "Kiro UI controls whether Kiro starts with its interactive interface. It is backend-specific and changing it restarts the instance.", text_zh: "Kiro UI(Kiro 是否使用互動畫面)只適用 Kiro;變更後會重啟該 Agent。" },
|
|
164
|
+
{ id: "tip-157", level: "intermediate", text_en: "Terminal columns and rows define the logical screen size seen by the Backend. Change them cautiously because narrow layouts can hide or wrap permission prompts.", text_zh: "Terminal columns 與 rows(Backend 看到的邏輯畫面尺寸)應謹慎調整;過窄的畫面可能讓權限提示換行或漏判。" },
|
|
165
|
+
{ id: "tip-158", level: "intermediate", text_en: "Settings reads effective values after defaults are applied, while saved instance entries can omit repeated defaults. Missing repeated fields are not necessarily lost settings.", text_zh: "Settings 會顯示套用 Defaults 後的有效值;保存時可省略與 Defaults 重複的 instance 欄位,因此缺少重複欄位不一定代表設定遺失。" },
|
|
166
|
+
{ id: "tip-159", level: "intermediate", text_en: "A Schedule is a message delivered later or repeatedly. Ask General to create it for the instance responsible for the work.", text_zh: "Schedule(稍後或週期性投遞的訊息)可請 General 建立,並指定由負責該工作的 Agent 處理。" },
|
|
167
|
+
{ id: "tip-160", level: "intermediate", text_en: "A recurring schedule uses a cron expression, which describes a pattern such as every day at 09:00. A one-time schedule uses an ISO date and time, such as `2026-08-25T09:00:00+08:00`; use only one form per schedule.", text_zh: "週期排程使用 Cron Expression(描述重複時間的格式),例如每天 09:00;單次排程使用 ISO 日期時間,例如 `2026-08-25T09:00:00+08:00`,每個排程只應選一種。" },
|
|
168
|
+
{ id: "tip-161", level: "intermediate", text_en: "A timezone tells a recurring schedule which local clock to follow. For example, `Asia/Taipei` makes “every day at 09:00” mean 09:00 in Taiwan rather than the server's local time.", text_zh: "Timezone(週期排程依循的當地時鐘)可避免時間誤解;例如 `Asia/Taipei` 會讓「每天 09:00」代表台灣時間 09:00,而不是伺服器所在地時間。" },
|
|
169
|
+
{ id: "tip-162", level: "intermediate", text_en: "A silent schedule hides the trigger message from the conversation, but the assigned Agent may still post a result when the task requires one.", text_zh: "Silent Schedule(不在聊天室顯示觸發文字的排程)仍可能在任務需要時由指定 Agent 回傳結果。" },
|
|
170
|
+
{ id: "tip-163", level: "intermediate", text_en: "A Team is a reusable group of instances for recurring collaboration, such as implementation plus review. Ask General to manage team membership.", text_zh: "Team(可重複使用的 Agent 協作群組)適合固定的實作與審查搭配;成員可請 General 管理。" },
|
|
171
|
+
{ id: "tip-164", level: "intermediate", text_en: "A shared Decision records an agreed Fleet-wide choice so Agents can reuse it after restarts. Ask General to record durable architectural decisions.", text_zh: "Shared Decision(讓各 Agent 在重啟後仍可沿用的共同決定)適合記錄長期有效的架構選擇,可請 General 保存。" },
|
|
172
|
+
{ id: "tip-165", level: "intermediate", text_en: "Instances can exchange selected questions and results, but their full conversation histories and working directories are not automatically shared.", text_zh: "Agent 之間可以交換特定問題與結果,但完整對話歷程與工作目錄不會自動共用。" },
|
|
173
|
+
{ id: "tip-166", level: "intermediate", text_en: "Ask General to parallelize only independent work. Two Agents editing the same files should coordinate ownership or work in separate copies.", text_zh: "只應請 General 平行處理互不相依的工作;若兩個 Agent 會修改相同檔案,應先協調責任或使用不同副本。" },
|
|
174
|
+
{ id: "tip-167", level: "intermediate", text_en: "A sender-side timeout—a notice that waiting for a reply took too long—does not prove a cross-instance message failed. Avoid resending solely because the sender stopped waiting.", text_zh: "發送端 Timeout(等待回覆逾時的提示)不代表跨 Agent 訊息一定失敗;不應只因等待逾時就重複發送。" },
|
|
175
|
+
{ id: "tip-168", level: "intermediate", text_en: "When an Agent waits for a password or confirmation, AgEnD can notify General. Review the visible prompt before authorizing any manual input.", text_zh: "Agent 等待密碼或確認時,AgEnD 可通知 General;進行任何人工輸入前,都應先檢查畫面上的實際提示。" },
|
|
176
|
+
{ id: "tip-169", level: "intermediate", text_en: "Do not send passwords, access tokens, or private keys through chat. Enter secrets only in a trusted terminal when an authorized prompt requires them.", text_zh: "不要透過聊天室傳送密碼、存取 Token 或私鑰;只有獲准的提示需要時,才在可信任的終端直接輸入。" },
|
|
177
|
+
{ id: "tip-170", level: "intermediate", text_en: "Delivery-status reactions mean ⏳ queued, 👀 delivered, ✅ turn confirmed, and ❌ failed. They describe transport, not whether the answer is correct.", text_zh: "投遞狀態 Reaction 中,⏳ 代表排隊、👀 代表已送達、✅ 代表回合已確認、❌ 代表失敗;它們不評價答案是否正確。" },
|
|
178
|
+
{ id: "tip-171", level: "intermediate", text_en: "Avoid using 👀, ⏳, ✅, or ❌ as ordinary reactions because AgEnD reserves them for delivery status.", text_zh: "一般 Reaction 應避免使用 👀、⏳、✅、❌,因為 AgEnD 會將它們保留給投遞狀態。" },
|
|
179
|
+
{ id: "tip-172", level: "intermediate", text_en: "Replying to an earlier message gives the Agent quoted Context. Supported Discord replies can also include images from the referenced message.", text_zh: "回覆較早的訊息時,Agent 會收到引用內容;支援的 Discord 回覆也能包含被引用訊息中的圖片。" },
|
|
180
|
+
{ id: "tip-173", level: "intermediate", text_en: "Attachments are copied to a local inbox before delivery. The Agent receives a local file path, so sensitive files should be shared only with an appropriate instance.", text_zh: "附件會先複製到本機收件區,再以本機路徑交給 Agent;敏感檔案只應傳給合適的 Agent。" },
|
|
181
|
+
{ id: "tip-174", level: "intermediate", text_en: "A permission prompt is a safety boundary from the Backend. Read the requested file or command scope before approving it.", text_zh: "Permission prompt(Backend 要求授權的安全關卡)應先確認檔案或指令範圍,再決定是否核准。" },
|
|
182
|
+
{ id: "tip-175", level: "intermediate", text_en: "After sixty intermediate tips are dismissed, AgEnD offers an Advanced Tips unlock button. An administrator can also enable them with `/tips advanced on`.", text_zh: "標記已讀 60 則中階提示後,AgEnD 會提供「開始看進階」按鈕;管理員也可用 `/tips advanced on` 主動開啟。" },
|
|
183
|
+
{ id: "tip-176", level: "intermediate", text_en: "Claude Code supports subagents, which are focused helper AIs inside the same CLI. They can research or review while the main agent coordinates the result.", text_zh: "Claude Code 支援 subagent(同一個 CLI 內負責特定工作的輔助 AI),可在主 agent 整合結果時進行研究或審查。" },
|
|
184
|
+
{ id: "tip-177", level: "intermediate", text_en: "Claude Code permission modes decide whether file and command actions are allowed, denied, or require approval. Choose a mode that matches the project's risk.", text_zh: "Claude Code 的 Permission mode(檔案與指令操作的授權方式)可設為允許、拒絕或要求核准,應依專案風險選擇。" },
|
|
185
|
+
{ id: "tip-178", level: "intermediate", text_en: "Claude Code can resume saved sessions, but continuity depends on the same project path and available session data.", text_zh: "Claude Code 可恢復已保存的 Session,但能否延續仍取決於相同的專案路徑與可用 Session 資料。" },
|
|
186
|
+
{ id: "tip-179", level: "intermediate", text_en: "Claude model families usually trade capability, speed, and cost differently. Use the current account selector for exact availability rather than relying on a static list.", text_zh: "Claude 各模型系列通常在能力、速度與成本間有不同取捨;實際可用項目應以目前帳號的選單為準。" },
|
|
187
|
+
{ id: "tip-180", level: "intermediate", text_en: "Opus is generally aimed at demanding work, Sonnet at balanced work, and Haiku at lighter faster work. Current provider documentation remains authoritative.", text_zh: "Opus 通常偏向高難度工作、Sonnet 偏向平衡、Haiku 偏向快速輕量;仍應以供應商最新文件為準。" },
|
|
188
|
+
{ id: "tip-181", level: "intermediate", text_en: "Codex uses a sandbox, which is a boundary around model-generated commands. Sandbox scope and approval policy are separate controls.", text_zh: "Codex 使用 Sandbox(限制模型所產生指令作用範圍的邊界);Sandbox 範圍與核准政策是兩項不同控制。" },
|
|
189
|
+
{ id: "tip-182", level: "intermediate", text_en: "Codex accepts queued input while it is working. Follow-up messages can enter its native queue instead of waiting for an idle gap.", text_zh: "Codex 工作時可接受 Queued input(由 CLI 自己排隊的後續訊息),因此不必等待閒置間隔才送入。" },
|
|
190
|
+
{ id: "tip-183", level: "intermediate", text_en: "Codex Skills are reusable instruction packages discovered when relevant. They keep detailed workflows outside the always-loaded conversation.", text_zh: "Codex Skills(按任務需要載入的可重用指引)可把詳細流程放在平時不必完整載入的位置。" },
|
|
191
|
+
{ id: "tip-184", level: "intermediate", text_en: "A custom provider is an alternate model service configured in Codex. AgEnD can select it, while its URL and credential environment variable remain in Codex configuration.", text_zh: "Custom provider(Codex 中另行設定的模型服務)可由 AgEnD 選用;服務網址與憑證環境變數仍由 Codex 設定管理。" },
|
|
192
|
+
{ id: "tip-185", level: "intermediate", text_en: "Custom Codex models may show a metadata warning because built-in model details are absent. The provider's actual response determines whether the model works.", text_zh: "自訂 Codex Model 可能因缺少內建資料而出現 Metadata Warning;是否可用仍以 Provider 實際回應為準。" },
|
|
193
|
+
{ id: "tip-186", level: "intermediate", text_en: "Kiro Specs are project documents that organize requirements, design, tasks, and execution. They are useful when a feature benefits from an explicit plan.", text_zh: "Kiro Specs(整理需求、設計、任務與執行的專案文件)適合需要明確規劃的功能工作。" },
|
|
194
|
+
{ id: "tip-187", level: "intermediate", text_en: "Kiro Steering files are persistent project guidance. They can keep conventions available without repeating them in every conversation.", text_zh: "Kiro Steering files(持續套用的專案指引)可保存慣例,不必在每次對話重複說明。" },
|
|
195
|
+
{ id: "tip-188", level: "intermediate", text_en: "Kiro Skills use progressive disclosure: the CLI first sees a short description and loads detailed instructions only when relevant.", text_zh: "Kiro Skills 採漸進式載入:CLI 先看到簡短說明,只有任務相關時才讀取詳細指引。" },
|
|
196
|
+
{ id: "tip-189", level: "intermediate", text_en: "Kiro's `auto` model mode lets the CLI choose dynamically. Set `model: auto` explicitly only when it should override a fleet-level model default.", text_zh: "Kiro 的 `auto` 模型模式會讓 CLI 動態選擇;只有要覆寫 Fleet 層級的模型預設時,才需要明確設定 `model: auto`。" },
|
|
197
|
+
{ id: "tip-190", level: "intermediate", text_en: "Grok can provide web search and page retrieval when enabled by the installed CLI, account, and policy. Availability should be checked in the current environment.", text_zh: "Grok 可在已安裝 CLI、帳號與政策允許時提供網頁搜尋與內容擷取;實際可用性應在目前環境確認。" },
|
|
198
|
+
{ id: "tip-191", level: "intermediate", text_en: "Grok supports steering through `/steer`, but its available models and tools can vary by account. Treat the CLI's current list as authoritative.", text_zh: "Grok 支援透過 `/steer` 調整工作方向,但模型與工具可能因帳號而異,應以 CLI 當下顯示的清單為準。" },
|
|
199
|
+
{ id: "tip-192", level: "intermediate", text_en: "OpenCode distinguishes primary agents for main work from subagents for focused tasks. Project configuration can change which agents and permissions are available.", text_zh: "OpenCode 區分處理主要工作的 primary agent 與專注任務的 subagent;專案設定可能改變可用 agent 與權限。" },
|
|
200
|
+
{ id: "tip-193", level: "intermediate", text_en: "OpenCode model names commonly use a provider/model form. Check OpenCode's current model list instead of assuming that a bare model name is accepted.", text_zh: "OpenCode 模型名稱通常採 `provider/model` 格式;應查看目前模型清單,不要假設只填模型名稱就一定可用。" },
|
|
201
|
+
{ id: "tip-194", level: "intermediate", text_en: "OpenCode provider definitions belong in its own configuration. AgEnD selects a model from what OpenCode exposes rather than storing provider credentials.", text_zh: "OpenCode Provider 定義應放在 OpenCode 自己的設定中;AgEnD 只選擇其提供的模型,不保存 Provider 憑證。" },
|
|
202
|
+
{ id: "tip-195", level: "intermediate", text_en: "OpenCode does not currently expose an AgEnD `/effort` mapping. Use model or agent settings supported by OpenCode instead.", text_zh: "OpenCode 目前沒有對應 AgEnD `/effort` 的功能;需要調整時,應使用 OpenCode 支援的模型或 agent 設定。" },
|
|
203
|
+
{ id: "tip-196", level: "intermediate", text_en: "Antigravity supports multi-step work and tool calls through its terminal interface. Its account and installed version determine available models and integrations.", text_zh: "Antigravity 可透過終端介面執行多步驟工作與工具操作;可用模型與整合項目取決於帳號及已安裝版本。" },
|
|
204
|
+
{ id: "tip-197", level: "intermediate", text_en: "Antigravity has no separate summarizing compact command in AgEnD. Both `/compact` and `/clear` use its full conversation-clear action.", text_zh: "Antigravity 在 AgEnD 中沒有獨立的摘要式 Compact 指令;`/compact` 與 `/clear` 都會使用完整清除對話的操作。" },
|
|
205
|
+
{ id: "tip-198", level: "intermediate", text_en: "Different GPT variants can target different capability, latency, and cost points. The names visible to the current CLI account are the source of truth.", text_zh: "不同 GPT 變體可能著重能力、延遲或成本;目前 CLI 帳號實際顯示的名稱才是判斷依據。" },
|
|
206
|
+
{ id: "tip-199", level: "intermediate", text_en: "Automatic model selection may choose differently between turns. Pin a model only when repeatability matters more than flexibility.", text_zh: "自動模型選擇可能在不同回合使用不同模型;只有可重現性比彈性更重要時,才需要固定 Model。" },
|
|
207
|
+
{ id: "tip-200", level: "intermediate", text_en: "A model available to one account may be unavailable to another. Verify access with the target backend before changing several instances at once.", text_zh: "某個帳號可用的模型在另一個帳號可能不可用;一次調整多個 Agent 前,應先用目標 Backend 確認存取權。" },
|
|
208
|
+
// ── Advanced: tuning and troubleshooting (100) ───────────────────────
|
|
209
|
+
{ id: "tip-201", level: "advanced", text_en: "Before a migration or bulk edit, copy fleet.yaml and classicBot.yaml outside the working path. Keep the backup until a representative restart and message round trip succeed.", text_zh: "進行 migration 或大量修改前,應把 fleet.yaml 與 classicBot.yaml 備份到工作路徑之外;直到代表性 instance 完成重啟與訊息往返測試後再移除備份。" },
|
|
210
|
+
{ id: "tip-202", level: "advanced", text_en: "Instance entries may omit values inherited from defaults. Compare effective configuration, not only raw YAML, when diagnosing what a daemon received.", text_zh: "instance entry 可以省略從 defaults 繼承的值;診斷 daemon 實際收到的設定時,應比對 effective configuration,而不只查看原始 YAML。" },
|
|
211
|
+
{ id: "tip-203", level: "advanced", text_en: "AgEnD removes redundant default-valued leaves when saving fleet.yaml, while retaining identity fields such as backend, model, working_directory, topic_id, and backend_options.", text_zh: "AgEnD 儲存 fleet.yaml 時會移除與 defaults 重複的 leaf values,但會保留 backend、model、working_directory、topic_id 與 backend_options 等識別欄位。" },
|
|
212
|
+
{ id: "tip-204", level: "advanced", text_en: "Lossless YAML editing preserves unrelated structure and comments where possible, but a comment attached only to a removed node may have no node to remain on.", text_zh: "Lossless YAML 編輯會盡量保留無關結構與註解;若註解只附著在被移除的節點上,該註解可能無法保留。" },
|
|
213
|
+
{ id: "tip-205", level: "advanced", text_en: "Run `agend validate` after manual YAML edits and before reload. Validation catches schema errors without requiring a fleet restart.", text_zh: "手動修改 YAML 後、reload 前應先執行 `agend validate`;它可在不重啟 Fleet 的情況下找出 schema 錯誤。" },
|
|
214
|
+
{ id: "tip-206", level: "advanced", text_en: "Hot fields are reconciled in place, while cold fields restart affected instances. Check the Settings change summary before applying a mixed patch.", text_zh: "Hot fields 會原地 reconcile,cold fields 則會重啟受影響的 instance;套用混合變更前,應先查看 Settings 的變更摘要。" },
|
|
215
|
+
{ id: "tip-207", level: "advanced", text_en: "A SIGHUP reload updates the running fleet from validated configuration; it is not equivalent to restarting every CLI process.", text_zh: "SIGHUP reload 會以通過驗證的設定更新執行中 Fleet,並不等同於重啟所有 CLI process。" },
|
|
216
|
+
{ id: "tip-208", level: "advanced", text_en: "Backend, working_directory, tool_set, lightweight, and backend_options are cold instance fields. Changing them can recreate the affected CLI process.", text_zh: "Backend、working_directory、tool_set、lightweight 與 backend_options 屬於 cold instance fields;變更後可能重建受影響的 CLI process。" },
|
|
217
|
+
{ id: "tip-209", level: "advanced", text_en: "Tool progress, display name, description, tags, log level, and auto-pause settings are designed for hot reconciliation. Verify the daemon acknowledged the update when diagnosing stale behavior.", text_zh: "Tool progress、display name、description、tags、log level 與 auto-pause 設定可 hot reconcile;若行為未更新,應確認 daemon 是否已接收變更。" },
|
|
218
|
+
{ id: "tip-210", level: "advanced", text_en: "Use per-instance overrides only when behavior must differ from defaults. Fewer duplicated values make later default changes and reviews easier to reason about.", text_zh: "只有在 instance 行為確實需要不同於 defaults 時才設定 override;減少重複值可讓後續 default 變更與 review 更容易判讀。" },
|
|
219
|
+
{ id: "tip-211", level: "advanced", text_en: "A backend option is interpreted only by its matching backend. For example, `backend_options.codex.provider` selects a provider but does not define that provider's endpoint or credentials.", text_zh: "Backend option 只由對應 Backend 解讀;例如 `backend_options.codex.provider` 只負責選擇 provider,不會定義 endpoint 或 credentials。" },
|
|
220
|
+
{ id: "tip-212", level: "advanced", text_en: "Codex custom-provider definitions belong in Codex config, and secrets should be referenced through environment variables available before the fleet service starts.", text_zh: "Codex custom provider 應在 Codex config 中定義;密鑰宜透過 Fleet service 啟動前已存在的環境變數提供。" },
|
|
221
|
+
{ id: "tip-213", level: "advanced", text_en: "OpenCode provider definitions belong in opencode.json, while AgEnD's model field should use the identifier exposed by OpenCode, commonly `provider/model`.", text_zh: "OpenCode provider 應在 opencode.json 中定義;AgEnD 的 model 欄位應使用 OpenCode 提供的識別字,通常是 `provider/model`。" },
|
|
222
|
+
{ id: "tip-214", level: "advanced", text_en: "Treat model-name compatibility checks as hints. The CLI remains the source of truth, so AgEnD passes configured model names through instead of silently falling back.", text_zh: "Model name compatibility check 只應視為提示;CLI 才是最終依據,因此 AgEnD 會傳遞已設定的 model name,而不會靜默退回預設值。" },
|
|
223
|
+
{ id: "tip-215", level: "advanced", text_en: "An unset instance model first inherits defaults.model. To request a backend's own default while a fleet model default exists, configure the backend-specific default explicitly where supported.", text_zh: "instance 未設定 model 時會先繼承 defaults.model;若 Fleet 已有 model default,而某 instance 要使用 Backend 自己的預設,應在支援時明確設定該 Backend 的預設值。" },
|
|
224
|
+
{ id: "tip-216", level: "advanced", text_en: "Kiro's `auto` is an explicit model choice. Set it on the instance when it must override a non-auto defaults.model value.", text_zh: "Kiro 的 `auto` 是明確的 model 選擇;若要覆寫非 auto 的 defaults.model,應在該 instance 設定 `model: auto`。" },
|
|
225
|
+
{ id: "tip-217", level: "advanced", text_en: "Model failover reacts to supported usage telemetry and applies on a later rotation. It cannot replace a model safely in the middle of an active turn.", text_zh: "Model failover 依賴支援的 usage telemetry,並在後續 rotation 套用;它不會在進行中的回合中途安全替換 model。" },
|
|
226
|
+
{ id: "tip-218", level: "advanced", text_en: "Cost guards are limited by provider telemetry. Missing, cached, or delayed usage data reduces enforcement precision and should be visible in operational expectations.", text_zh: "Cost guard 受 provider telemetry 限制;usage data 缺失、快取或延遲時,執行精度會下降,營運預期應納入這項限制。" },
|
|
227
|
+
{ id: "tip-219", level: "advanced", text_en: "Usage results are cached to reduce provider calls. Use the View panel's Refresh control when an immediate post-login or post-renewal fetch is required.", text_zh: "Usage 結果會快取以減少 provider calls;登入或更新 token 後需要立即重取時,可使用 View 面板的 Refresh。" },
|
|
228
|
+
{ id: "tip-220", level: "advanced", text_en: "A provider absent from `/usage` may simply have no running or paused instance. Usage visibility follows effective backends, not every installed CLI.", text_zh: "Provider 未出現在 `/usage` 時,可能只是目前沒有 running 或 paused instance 使用它;用量顯示依 effective Backend,而不是所有已安裝 CLI。" },
|
|
229
|
+
{ id: "tip-221", level: "advanced", text_en: "Keep bot tokens, dashboard tokens, provider keys, and exported sessions out of repositories and shared workspaces; each requires its own rotation procedure.", text_zh: "Bot token、dashboard token、provider key 與匯出的 session 都不應放入 repository 或共用 workspace,且各自需要不同的 rotation 程序。" },
|
|
230
|
+
{ id: "tip-222", level: "advanced", text_en: "When a CLI supports an environment-key reference, store the secret in the service environment rather than fleet.yaml or a provider config committed to source control.", text_zh: "CLI 支援 environment-key reference 時,應把 secret 放在 service environment,而不是 fleet.yaml 或會提交到版控的 provider config。" },
|
|
231
|
+
{ id: "tip-223", level: "advanced", text_en: "Files such as web.token and per-instance state should remain readable only by their owner. Copying them into a project can expose them through backups, diffs, or agents.", text_zh: "web.token 與 per-instance state 等檔案應只允許 owner 讀取;複製到 project 後,可能經由備份、diff 或 agent 暴露。" },
|
|
232
|
+
{ id: "tip-224", level: "advanced", text_en: "The persistent web token keeps dashboard URLs valid across restarts. To invalidate existing links, remove the token file, restart the fleet, and request a new dashboard URL.", text_zh: "Persistent web token 會讓 dashboard URL 在重啟後仍有效;若要使既有連結失效,應移除 token file、重啟 Fleet,再取得新的 dashboard URL。" },
|
|
233
|
+
{ id: "tip-225", level: "advanced", text_en: "A dashboard URL is usable only after the health server is listening. A port conflict should fail closed instead of publishing a URL backed by the wrong process.", text_zh: "Dashboard URL 只有在 health server 開始 listening 後才可使用;遇到 port conflict 時應 fail closed,避免發布指向錯誤 process 的 URL。" },
|
|
234
|
+
{ id: "tip-226", level: "advanced", text_en: "Channel allowlists are authorization boundaries, not display filters. After changing access rules, test both an allowed identity and a rejected identity.", text_zh: "Channel allowlist 是 authorization boundary,不是顯示篩選器;變更 access rules 後,應同時測試允許與拒絕的 identity。" },
|
|
235
|
+
{ id: "tip-227", level: "advanced", text_en: "Before changing a locked channel's allowed_users, ensure at least one administrator remains. An empty locked allowlist can remove every administrative path.", text_zh: "修改 locked channel 的 allowed_users 前,應確認至少保留一位管理員;空的 locked allowlist 可能移除所有管理操作路徑。" },
|
|
236
|
+
{ id: "tip-228", level: "advanced", text_en: "Nonce-bound confirmation buttons are tied to their adapter, chat, thread, message, and administrator identity. A copied callback should not authorize another context.", text_zh: "使用 nonce 的確認按鈕會綁定 adapter、chat、thread、message 與管理員 identity;複製 callback 不應能授權另一個情境。" },
|
|
237
|
+
{ id: "tip-229", level: "advanced", text_en: "In a multi-world fleet, assign channel_id explicitly to General and fleet-topic instances when the first configured adapter is not the intended persona.", text_zh: "Multi-world Fleet 中,若第一個 adapter 不是預期 persona,應為 General 與 fleet-topic instance 明確設定 channel_id。" },
|
|
238
|
+
{ id: "tip-230", level: "advanced", text_en: "ClassicBot routing is keyed by its own channel records. Do not apply fleet-topic adapter canonicalization to ClassicBot replies in multi-bot collaboration channels.", text_zh: "ClassicBot routing 依自身 channel records 決定;在多 bot 協作頻道中,不應把 fleet-topic 的 adapter canonicalization 套用到 ClassicBot reply。" },
|
|
239
|
+
{ id: "tip-231", level: "advanced", text_en: "Terminal columns and rows affect both TUI layout and captured wrapping. After changing geometry, verify ready, permission, and error detection against real pane samples.", text_zh: "Terminal columns 與 rows 同時影響 TUI layout 和 capture wrapping;修改 geometry 後,應用真實 pane sample 驗證 ready、permission 與 error detection。" },
|
|
240
|
+
{ id: "tip-232", level: "advanced", text_en: "The terminal validator enforces conservative geometry bounds because very narrow panes can wrap permission prompts beyond recognition.", text_zh: "Terminal validator 會限制保守的 geometry 範圍,因為過窄 pane 可能使 permission prompt 換行到無法辨識。" },
|
|
241
|
+
{ id: "tip-233", level: "advanced", text_en: "AgEnD pins tmux window size and attaches control clients with size ignored; both protections are needed to keep logical geometry stable across reconnects.", text_zh: "AgEnD 會固定 tmux window size,並讓 control client 忽略尺寸;兩層保護都需要,才能讓 logical geometry 在 reconnect 後保持穩定。" },
|
|
242
|
+
{ id: "tip-234", level: "advanced", text_en: "Mouse mode is enabled only in AgEnD's tmux session. It allows scrollback after attach without changing unrelated user sessions.", text_zh: "Mouse mode 只在 AgEnD 的 tmux session 啟用;attach 後可捲動 scrollback,且不影響使用者其他 session。" },
|
|
243
|
+
{ id: "tip-235", level: "advanced", text_en: "`capture-pane` observes physical screen lines unless wrapping is joined. Width changes can therefore change parser input even when the logical text is identical.", text_zh: "`capture-pane` 未合併 wrapping 時會讀取畫面實際行;因此即使邏輯文字相同,width 變更仍可能改變 parser input。" },
|
|
244
|
+
{ id: "tip-236", level: "advanced", text_en: "Ready, busy, and error patterns are heuristics over terminal text. Preserve anonymized real samples and add production-path tests before changing a pattern.", text_zh: "Ready、busy 與 error pattern 都是針對 terminal text 的 heuristic;修改前應保留去識別化的真實 sample,並加入 production-path test。" },
|
|
245
|
+
{ id: "tip-237", level: "advanced", text_en: "A false idle can retire controls or deliver input too early. A false working can delay messages and trigger hang notifications.", text_zh: "閒置誤判可能提早收回控制項或過早投遞 input;工作中誤判則可能延遲訊息並觸發 hang notification。" },
|
|
246
|
+
{ id: "tip-238", level: "advanced", text_en: "Periodic statusline redraws are not necessarily work. Backend-specific pane handling should distinguish cosmetic redraws from changed task content.", text_zh: "週期性 statusline redraw 不一定代表工作;各 Backend 的 pane handling 應區分純顯示重繪與任務內容變化。" },
|
|
247
|
+
{ id: "tip-239", level: "advanced", text_en: "Tune hang_detector from observed silent-work intervals, not from an arbitrary short timeout. Inspect pane and process evidence before restarting.", text_zh: "hang_detector 應依實際 silent-work interval 調整,而不是任意設定很短的 timeout;重啟前先檢查 pane 與 process evidence。" },
|
|
248
|
+
{ id: "tip-240", level: "advanced", text_en: "Interactive-prompt alerts require both a prompt-like pattern and stable output time, reducing false alerts when an agent merely discusses passwords or confirmations.", text_zh: "Interactive-prompt alert 會同時要求 prompt-like pattern 與穩定 output 時間,以降低 agent 只是討論密碼或確認操作時的誤報。" },
|
|
249
|
+
{ id: "tip-241", level: "advanced", text_en: "Administrator-only `/raw <text>` sends text directly to the backend without AgEnD's normal inbound wrapper. Use it only when that wrapper would change an intentional CLI command.", text_zh: "限管理員使用的 `/raw <文字>` 會略過 AgEnD 的一般訊息包裝,直接送給 Backend;只有包裝會改變刻意輸入的 CLI 指令時才應使用。" },
|
|
250
|
+
{ id: "tip-242", level: "advanced", text_en: "A writable tmux control client is required for special-key delivery. Treat a failed Enter or interrupt command as a command failure rather than waiting for a later timeout.", text_zh: "Special-key delivery 需要可寫入的 tmux control client;Enter 或 interrupt command 失敗時,應直接視為 command failure,而不是等後續 timeout。" },
|
|
251
|
+
{ id: "tip-243", level: "advanced", text_en: "pasteLock serializes terminal writes even for backends with native input queues; native queuing does not make overlapping PTY pastes safe.", text_zh: "即使 Backend 有 native input queue,pasteLock 仍需序列化 terminal writes;native queue 不代表重疊 PTY paste 是安全的。" },
|
|
252
|
+
{ id: "tip-244", level: "advanced", text_en: "Codex accepts busy-time input into its own queue, so AgEnD bypasses the idle gate for Codex while retaining first-delivery startup settling.", text_zh: "Codex 可把 busy-time input 放入自身 queue,因此 AgEnD 對 Codex 略過閒置門檻,但仍保留首次投遞的 startup settle。" },
|
|
253
|
+
{ id: "tip-245", level: "advanced", text_en: "Cancel uses a delivery epoch to invalidate messages already queued before the cancellation. Messages arriving afterward carry the new epoch and remain deliverable.", text_zh: "Cancel 會透過 delivery epoch 使取消前已排隊的訊息失效;取消後抵達的新訊息使用新的 epoch,仍可正常投遞。" },
|
|
254
|
+
{ id: "tip-246", level: "advanced", text_en: "A message transport timeout does not prove non-delivery. Check delivery logs or idempotency evidence before retrying an external or cross-instance send.", text_zh: "Message transport timeout 不代表一定未投遞;重試外部或 cross-instance send 前,應先檢查 delivery log 或 idempotency evidence。" },
|
|
255
|
+
{ id: "tip-247", level: "advanced", text_en: "A replaced IPC client must lose listeners and have its socket destroyed. Removing only the map entry can leave an orphan processing outbound messages.", text_zh: "被替換的 IPC client 必須移除 listeners 並 destroy socket;只刪除 map entry 可能留下仍在處理 outbound message 的 orphan。" },
|
|
256
|
+
{ id: "tip-248", level: "advanced", text_en: "Disconnect, overflow, and close events should converge to one disconnect per client lifecycle, with reconnect serialized per instance.", text_zh: "Disconnect、overflow 與 close event 應在每個 client lifecycle 收斂成一次 disconnect,且 reconnect 應依 instance 序列化。" },
|
|
257
|
+
{ id: "tip-249", level: "advanced", text_en: "If duplicate replies persist across simple messages, inspect client and socket counts before blaming rich-message rendering or the model.", text_zh: "若簡單訊息也持續出現重複回覆,應先檢查 client 與 socket 數量,再判斷是否與 rich-message rendering 或 model 有關。" },
|
|
258
|
+
{ id: "tip-250", level: "advanced", text_en: "Schedule-trigger metadata must include the instance's configured adapter identity; otherwise a reply after restart can fall back to the wrong bot persona.", text_zh: "Schedule trigger metadata 必須包含 instance 設定的 adapter identity;否則重啟後的 reply 可能 fallback 到錯誤的 bot persona。" },
|
|
259
|
+
{ id: "tip-251", level: "advanced", text_en: "The fleet singleton lock protects manager startup, not individual instance restarts. Per-instance restart serialization remains a separate requirement.", text_zh: "Fleet singleton lock 保護的是 manager startup,不是單一 instance restart;per-instance restart serialization 仍是另一項必要保護。" },
|
|
260
|
+
{ id: "tip-252", level: "advanced", text_en: "When two fleet processes appear, collect PID, parent PID, command line, lock owner, service state, and listening ports before terminating either process.", text_zh: "出現兩個 Fleet process 時,終止前應先收集 PID、parent PID、command line、lock owner、service state 與 listening ports。" },
|
|
261
|
+
{ id: "tip-253", level: "advanced", text_en: "A service-managed fleet should fail closed when the user service manager is unreachable, rather than starting an untracked detached duplicate.", text_zh: "Service-managed Fleet 在 user service manager 無法連線時應 fail closed,而不是啟動未追蹤的 detached duplicate。" },
|
|
262
|
+
{ id: "tip-254", level: "advanced", text_en: "On Linux over SSH, a missing D-Bus session can make `systemctl --user` unavailable even when the unit file exists.", text_zh: "透過 SSH 使用 Linux 時,缺少 D-Bus session 可能使 `systemctl --user` 無法使用,即使 unit file 已存在。" },
|
|
263
|
+
{ id: "tip-255", level: "advanced", text_en: "Treat `active` and `activating` as occupied service states. An uncertain service query should not authorize a second startup.", text_zh: "`active` 與 `activating` 都應視為 service 已被占用;service query 結果不確定時,不應允許第二次 startup。" },
|
|
264
|
+
{ id: "tip-256", level: "advanced", text_en: "A health-port conflict may indicate a stale manager or another service. Identify the listener before changing the port or stopping a process.", text_zh: "Health-port conflict 可能代表 stale manager 或其他 service;更換 port 或停止 process 前,應先識別 listener。" },
|
|
265
|
+
{ id: "tip-257", level: "advanced", text_en: "Recovery paths should serialize per instance so health checks, MCP recovery, manual restart, and config reconciliation cannot create competing replacements.", text_zh: "Recovery path 應依 instance 序列化,避免 health check、MCP recovery、manual restart 與 config reconcile 建立互相競爭的 replacement。" },
|
|
266
|
+
{ id: "tip-258", level: "advanced", text_en: "Crash-loop protection stops automatic recovery after bounded repeated failures and reports crashed rather than idle; successful recovery must clear stale crash markers.", text_zh: "Crash-loop protection 會在有限次重複失敗後停止自動恢復,並顯示 crashed 而非閒置;成功恢復後則必須清除 stale crash marker。" },
|
|
267
|
+
{ id: "tip-259", level: "advanced", text_en: "Restart backoff limits resource use when a CLI repeatedly fails during startup. Disabling retries can be appropriate while diagnosing a deterministic configuration error.", text_zh: "Restart backoff 可限制 CLI 反覆 startup failure 時的資源消耗;診斷確定性的設定錯誤時,暫時停用 retries 可能較合適。" },
|
|
268
|
+
{ id: "tip-260", level: "advanced", text_en: "MCP auto-restart waits for an eligible idle state and deduplicates restart requests. It restarts the instance because the CLI owns the MCP child connection.", text_zh: "MCP auto-restart 會等待符合條件的閒置狀態,並去除重複 restart request;由於 MCP child connection 由 CLI 掌握,因此需要重啟 instance。" },
|
|
269
|
+
{ id: "tip-261", level: "advanced", text_en: "Configure mcp_proxy_reply only for panes whose visible text is safe to relay. Regex redaction cannot guarantee removal of every project-specific secret.", text_zh: "只有在 pane 可見文字適合轉送時才啟用 mcp_proxy_reply;regex redaction 無法保證移除所有專案特有 secret。" },
|
|
270
|
+
{ id: "tip-262", level: "advanced", text_en: "Proxy replies are a last-resort channel path after MCP loss, not a source-of-truth transcript. Inspect them for terminal chrome or incomplete output.", text_zh: "Proxy reply 是 MCP 中斷後的最後備援 channel path,不是 source-of-truth transcript;應留意 terminal chrome 或不完整輸出。" },
|
|
271
|
+
{ id: "tip-263", level: "advanced", text_en: "Session resume is backend-owned. AgEnD can preserve identifiers, workspace paths, and markers, but it cannot guarantee semantic continuity after a CLI upgrade.", text_zh: "Session resume 由 Backend 掌控;AgEnD 可保留 identifier、workspace path 與 marker,但無法保證 CLI 升級後仍維持語意 continuity。" },
|
|
272
|
+
{ id: "tip-264", level: "advanced", text_en: "OpenCode resume should use a recorded session identifier. Global `--continue` can select the latest session from an unrelated directory.", text_zh: "OpenCode resume 應使用已記錄的 session identifier;global `--continue` 可能選到其他 directory 的最新 session。" },
|
|
273
|
+
{ id: "tip-265", level: "advanced", text_en: "Claude Code project-session lookup depends on encoded workspace paths. Renaming or moving a workspace can make an existing session appear absent.", text_zh: "Claude Code project-session lookup 依賴編碼後的 workspace path;重新命名或移動 workspace 可能使既有 session 看起來不存在。" },
|
|
274
|
+
{ id: "tip-266", level: "advanced", text_en: "Per-instance Codex homes isolate MCP configuration and instance decisions. Writing those entries to a shared Codex config creates a cross-instance authorization risk.", text_zh: "Per-instance Codex home 會隔離 MCP configuration 與 instance decisions;把這些項目寫入共用 Codex config 會造成 cross-instance authorization risk。" },
|
|
275
|
+
{ id: "tip-267", level: "advanced", text_en: "SQLite database files must not be separated from active WAL, SHM, or rollback-journal sidecars. A sidecar linked from another home can make the private database unusable.", text_zh: "SQLite database file 不應與 active WAL、SHM 或 rollback-journal sidecar 分離;從其他 home 連入 sidecar 可能使 private database 無法使用。" },
|
|
276
|
+
{ id: "tip-268", level: "advanced", text_en: "When a database base file is intentionally symlinked, verify where SQLite creates sidecars with the library version in production rather than assuming path behavior.", text_zh: "Database base file 有意使用 symlink 時,應以 production 使用的 library version 驗證 SQLite 建立 sidecar 的位置,不宜只憑路徑假設。" },
|
|
277
|
+
{ id: "tip-269", level: "advanced", text_en: "scheduler.db contains schedules, decisions, task state, and tip state. Take a consistent backup before direct maintenance and avoid writes while the fleet is active.", text_zh: "scheduler.db 包含 schedules、decisions、task state 與 tip state;直接維護前應做一致性備份,並避免在 Fleet 執行中寫入。" },
|
|
278
|
+
{ id: "tip-270", level: "advanced", text_en: "A runtime schema audit should compare CREATE statements, every referenced column in queries, and the actual schema from the deployed SQLite files.", text_zh: "Runtime schema audit 應同時比對 CREATE statements、query 引用的每個欄位,以及部署中 SQLite file 的實際 schema。" },
|
|
279
|
+
{ id: "tip-271", level: "advanced", text_en: "Adjust startup concurrency according to available memory and measured CLI startup cost. Raising concurrency can increase contention and make total startup slower.", text_zh: "Startup concurrency 應依可用 memory 與實測 CLI startup cost 調整;提高 concurrency 可能增加競爭,反而延長總啟動時間。" },
|
|
280
|
+
{ id: "tip-272", level: "advanced", text_en: "Use startup stagger delay to spread process creation and authentication load. Persisted paused instances are excluded before stagger slots are assigned.", text_zh: "Startup stagger delay 可分散 process creation 與 authentication load;persisted paused instance 會在分配 stagger slot 前排除。" },
|
|
281
|
+
{ id: "tip-273", level: "advanced", text_en: "warm_cap is a fleet-wide capacity limit, while auto_pause_after is a per-instance idle-time policy. Observe workload patterns before combining them.", text_zh: "warm_cap 是 Fleet-wide capacity limit,auto_pause_after 則是 per-instance 閒置時間 policy;搭配使用前應先觀察 workload pattern。" },
|
|
282
|
+
{ id: "tip-274", level: "advanced", text_en: "A zero warm_cap means unlimited, and a zero auto_pause_after disables time-based pausing. General is excluded from automatic pause and warm-cap eviction.", text_zh: "warm_cap 為 0 表示不設上限,auto_pause_after 為 0 則停用依時間暫停;General 不會被 auto-pause 或 warm-cap eviction。" },
|
|
283
|
+
{ id: "tip-275", level: "advanced", text_en: "Many resident CLIs consume substantial memory while idle, although idle state alone does not spend model tokens. Measure RSS before setting a warm cap.", text_zh: "許多常駐 CLI 即使閒置仍會占用可觀 memory,但閒置本身不會消耗 model token;設定 warm cap 前可先量測 RSS。" },
|
|
284
|
+
{ id: "tip-276", level: "advanced", text_en: "Lightweight mode omits backend-dependent transcript, context-guardian, and error monitors to reduce overhead. Enable it only when those missing observations are acceptable.", text_zh: "Lightweight mode 會省略依賴 Backend 的 transcript、Context Guardian 與 error monitors 以降低 overhead;只有在可接受缺少這些觀測能力時才應啟用。" },
|
|
285
|
+
{ id: "tip-277", level: "advanced", text_en: "Every exposed MCP tool schema consumes model context. Use minimal or standard tool sets for narrowly scoped workers and broader profiles only when required.", text_zh: "每個 exposed MCP tool schema 都會占用 Model Context;範圍明確的 worker 宜使用 minimal 或 standard,只有確實需要時才使用較廣 profile。" },
|
|
286
|
+
{ id: "tip-278", level: "advanced", text_en: "General receives the coordinator tool profile when tool_set is inherited. Explicitly setting standard or minimal can remove tools required for coordination.", text_zh: "General 在 tool_set 繼承時會取得 coordinator tool profile;明確設定 standard 或 minimal 可能移除協調所需工具。" },
|
|
287
|
+
{ id: "tip-279", level: "advanced", text_en: "Verbose tool progress may retain command previews in channel history. Use standard or off when operational details should not be exposed to channel readers.", text_zh: "Verbose tool progress 可能在 channel history 保留 command preview;若營運細節不應讓頻道讀者看到,宜使用 standard 或 off。" },
|
|
288
|
+
{ id: "tip-280", level: "advanced", text_en: "Raise log verbosity only for a bounded diagnostic window. Restore the normal level afterward and review logs before external sharing.", text_zh: "只有在有界的診斷期間才提高 log verbosity;完成後應恢復正常 level,且對外分享前先檢查 log 內容。" },
|
|
289
|
+
{ id: "tip-281", level: "advanced", text_en: "Bundled skills are role-filtered before CLI startup: General receives all eligible skills, workers receive shared or worker skills, and ClassicBot is skipped.", text_zh: "Bundled skills 會在 CLI startup 前依 role 篩選:General 取得所有 eligible skills,worker 取得 shared 或 worker skills,ClassicBot 則跳過。" },
|
|
290
|
+
{ id: "tip-282", level: "advanced", text_en: "The managed-skill manifest distinguishes AgEnD-owned copies from user content. A missing legacy manifest requires conservative adoption to avoid freezing old managed skills.", text_zh: "Managed-skill manifest 用來區分 AgEnD-owned copy 與 user content;舊版 manifest 缺失時,需要保守的 adoption 流程,避免 managed skill 永久停在舊內容。" },
|
|
291
|
+
{ id: "tip-283", level: "advanced", text_en: "Instances sharing one workspace also share backend-native skill directories. Mixed roles or backend families can contend over managed files, so separate workspaces are safer.", text_zh: "共用同一 workspace 的 instance 也會共用 Backend-native skill directory;混合 role 或 Backend family 可能競爭 managed files,因此分開 workspace 較安全。" },
|
|
292
|
+
{ id: "tip-284", level: "advanced", text_en: "Use separate git worktrees for parallel write tasks. A detached checkout used for inspection should remain read-only.", text_zh: "平行 write task 應使用不同 git worktree;用於檢查的 detached checkout 應保持 read-only。" },
|
|
293
|
+
{ id: "tip-285", level: "advanced", text_en: "Templates define repeatable groups of instances, but deployment still needs explicit branch, workspace, ownership, and teardown expectations.", text_zh: "Template 可定義可重複建立的 instance group,但部署前仍需明確約定 branch、workspace、ownership 與 teardown。" },
|
|
294
|
+
{ id: "tip-286", level: "advanced", text_en: "Teams are routing groups, not shared memory. Each member retains its own context, session, and workspace boundary.", text_zh: "Team 是 routing group,不是 shared memory;每個 member 仍保有自己的 Context、session 與 workspace boundary。" },
|
|
295
|
+
{ id: "tip-287", level: "advanced", text_en: "A silent schedule injects work without requiring a channel reply. Use it only when the absence of user-visible output is intentional.", text_zh: "Silent schedule 會注入工作但不要求 channel reply;只有在刻意不需要 user-visible output 時才應使用。" },
|
|
296
|
+
{ id: "tip-288", level: "advanced", text_en: "Schedule timezone is part of execution semantics. Verify daylight-saving transitions when the selected IANA zone observes them.", text_zh: "Schedule timezone 是 execution semantics 的一部分;所選 IANA zone 有 daylight-saving transition 時,應驗證執行時間。" },
|
|
297
|
+
{ id: "tip-289", level: "advanced", text_en: "Schedules that trigger after a restart still need the target instance's effective adapter and delivery epoch so routing and cancellation remain correct.", text_zh: "Restart 後觸發的 schedule 仍需帶入 target instance 的 effective adapter 與 delivery epoch,才能維持 routing 與 cancellation 正確。" },
|
|
298
|
+
{ id: "tip-290", level: "advanced", text_en: "Fleet decisions preserve durable architectural context. Supersede or retire stale decisions so later agents do not receive conflicting instructions.", text_zh: "Fleet decision 可保存持久的架構脈絡;過時 decision 應 supersede 或 retire,避免後續 agent 收到衝突指示。" },
|
|
299
|
+
{ id: "tip-291", level: "advanced", text_en: "Event logs support diagnosis but are not substitutes for source configuration, provider audit records, or raw process evidence.", text_zh: "Event log 可支援診斷,但不能取代 source configuration、provider audit record 或原始 process evidence。" },
|
|
300
|
+
{ id: "tip-292", level: "advanced", text_en: "Chat exports can include names, project details, tool summaries, and quoted messages. Review and redact them before external sharing.", text_zh: "Chat export 可能包含姓名、專案細節、tool summary 與引用訊息;對外分享前應先 review 並 redact。" },
|
|
301
|
+
{ id: "tip-293", level: "advanced", text_en: "Installation prompts for sudo passwords or confirmations require human review. Non-interactive automation should fail clearly rather than guessing an answer.", text_zh: "安裝時的 sudo password 或 confirmation prompt 需要人工判斷;non-interactive automation 應明確失敗,而不是猜測答案。" },
|
|
302
|
+
{ id: "tip-294", level: "advanced", text_en: "`agend doctor` distinguishes backend availability from service, D-Bus, fleet, tmux, and IPC health; read each section rather than treating one green check as fleet health.", text_zh: "`agend doctor` 會分別檢查 Backend availability、service、D-Bus、Fleet、tmux 與 IPC health;不應以單一綠色項目代表整體健康。" },
|
|
303
|
+
{ id: "tip-295", level: "advanced", text_en: "After an update, canary one representative instance per backend before resuming the full workload. Include ready, permission, error, reply, and context checks.", text_zh: "Update 後應先為每個 Backend canary 一個代表性 instance,再恢復完整 workload;檢查項目應包含 ready、permission、error、reply 與 Context。" },
|
|
304
|
+
{ id: "tip-296", level: "advanced", text_en: "Keep the previous package version and compatible configuration backup until update health checks and representative canaries pass.", text_zh: "Update health check 與代表性 canary 通過前,應保留前一個 package version 與相容的 configuration backup。" },
|
|
305
|
+
{ id: "tip-297", level: "advanced", text_en: "When rewriting Git history to remove secrets, preserve a mirror backup, verify all refs and tags, and rotate exposed credentials even after blobs are removed.", text_zh: "為移除 secret 而改寫 Git history 時,應保留 mirror backup、驗證所有 refs 與 tags;即使 blob 已移除,也仍需 rotation 已暴露的 credential。" },
|
|
306
|
+
{ id: "tip-298", level: "advanced", text_en: "A safe rollback restores compatible code and configuration together. Reverting only one side can leave a schema or behavior mismatch.", text_zh: "安全 rollback 應同時恢復相容的 code 與 configuration;只 revert 一側可能留下 schema 或 behavior mismatch。" },
|
|
307
|
+
{ id: "tip-299", level: "advanced", text_en: "Before destructive cleanup, resolve exact paths and owners with read-only checks. Prefer recoverable moves or backups when practical.", text_zh: "進行 destructive cleanup 前,應先用 read-only check 確認精確 path 與 owner;可行時優先採用可復原的移動或備份。" },
|
|
308
|
+
{ id: "tip-300", level: "advanced", text_en: "For difficult incidents, preserve synchronized timestamps, fleet logs, process trees, socket counts, service state, and pane captures before restarting away the evidence.", text_zh: "處理困難 incident 時,應在 restart 清除證據前保留同步 timestamps、Fleet logs、process trees、socket counts、service state 與 pane captures。" },
|
|
309
|
+
];
|
|
310
|
+
export function canUnlockAdvancedTips(dismissedIds) {
|
|
311
|
+
let dismissedIntermediate = 0;
|
|
312
|
+
for (const tip of TIPS) {
|
|
313
|
+
if (tip.level === "intermediate" && dismissedIds.has(tip.id))
|
|
314
|
+
dismissedIntermediate++;
|
|
315
|
+
}
|
|
316
|
+
return dismissedIntermediate >= ADVANCED_TIP_UNLOCK_THRESHOLD;
|
|
317
|
+
}
|
|
318
|
+
export function visibleTipLevels(advancedUnlocked = false) {
|
|
319
|
+
const ordered = ["beginner", "intermediate", "advanced"];
|
|
320
|
+
const maxIndex = ordered.indexOf(TIPS_MAX_VISIBLE_LEVEL);
|
|
321
|
+
return new Set(ordered.filter((level, index) => index <= maxIndex && (level !== "advanced" || advancedUnlocked)));
|
|
322
|
+
}
|
|
323
|
+
export function selectTip(dismissedIds, random = Math.random, advancedUnlocked = false, activeBackends = new Set()) {
|
|
324
|
+
const levels = visibleTipLevels(advancedUnlocked);
|
|
325
|
+
const candidates = TIPS.filter(tip => levels.has(tip.level)
|
|
326
|
+
&& !dismissedIds.has(tip.id)
|
|
327
|
+
&& (!tip.tags?.length || tip.tags.some(tag => activeBackends.has(tag))));
|
|
328
|
+
if (candidates.length === 0)
|
|
329
|
+
return null;
|
|
330
|
+
const index = Math.min(candidates.length - 1, Math.max(0, Math.floor(random() * candidates.length)));
|
|
331
|
+
return candidates[index];
|
|
332
|
+
}
|
|
333
|
+
/** Fleet-internal daily trigger. It is intentionally not persisted in fleet.yaml. */
|
|
334
|
+
export class DailyTipScheduler {
|
|
335
|
+
config;
|
|
336
|
+
timezone;
|
|
337
|
+
onTip;
|
|
338
|
+
job = null;
|
|
339
|
+
constructor(config, timezone, onTip) {
|
|
340
|
+
this.config = config;
|
|
341
|
+
this.timezone = timezone;
|
|
342
|
+
this.onTip = onTip;
|
|
343
|
+
}
|
|
344
|
+
start() {
|
|
345
|
+
const cron = `${this.config.minute} ${this.config.hour} * * *`;
|
|
346
|
+
this.job = new Cron(cron, { timezone: this.timezone }, () => {
|
|
347
|
+
Promise.resolve(this.onTip()).catch(() => { });
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
stop() {
|
|
351
|
+
this.job?.stop();
|
|
352
|
+
this.job = null;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=tips.js.map
|