@songsid/agend 2.3.4-beta.1 → 2.3.4-beta.10

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.
Files changed (284) hide show
  1. package/THIRD_PARTY_NOTICES.md +37 -0
  2. package/dist/agend-home.d.ts +13 -0
  3. package/dist/agend-home.js +42 -0
  4. package/dist/agend-home.js.map +1 -1
  5. package/dist/agent-cli-instructions.md +1 -1
  6. package/dist/agent-credentials.d.ts +24 -0
  7. package/dist/agent-credentials.js +66 -0
  8. package/dist/agent-credentials.js.map +1 -0
  9. package/dist/agent-endpoint.d.ts +3 -1
  10. package/dist/agent-endpoint.js +13 -0
  11. package/dist/agent-endpoint.js.map +1 -1
  12. package/dist/auth-api.js +10 -2
  13. package/dist/auth-api.js.map +1 -1
  14. package/dist/authority/session-authorizations.d.ts +28 -4
  15. package/dist/authority/session-authorizations.js +63 -17
  16. package/dist/authority/session-authorizations.js.map +1 -1
  17. package/dist/backend/antigravity.js +3 -1
  18. package/dist/backend/antigravity.js.map +1 -1
  19. package/dist/backend/claude-code.d.ts +3 -0
  20. package/dist/backend/claude-code.js +89 -4
  21. package/dist/backend/claude-code.js.map +1 -1
  22. package/dist/backend/codex-footer-hints.d.ts +4 -0
  23. package/dist/backend/codex-footer-hints.js +27 -0
  24. package/dist/backend/codex-footer-hints.js.map +1 -0
  25. package/dist/backend/codex-session-lookup.d.ts +35 -0
  26. package/dist/backend/codex-session-lookup.js +93 -0
  27. package/dist/backend/codex-session-lookup.js.map +1 -1
  28. package/dist/backend/codex.d.ts +27 -0
  29. package/dist/backend/codex.js +124 -23
  30. package/dist/backend/codex.js.map +1 -1
  31. package/dist/backend/kiro-identity.d.ts +2 -0
  32. package/dist/backend/kiro-identity.js +13 -6
  33. package/dist/backend/kiro-identity.js.map +1 -1
  34. package/dist/backend/kiro.d.ts +3 -0
  35. package/dist/backend/kiro.js +68 -5
  36. package/dist/backend/kiro.js.map +1 -1
  37. package/dist/backend/muse.js +5 -3
  38. package/dist/backend/muse.js.map +1 -1
  39. package/dist/backend/types.d.ts +6 -1
  40. package/dist/backend/types.js +3 -0
  41. package/dist/backend/types.js.map +1 -1
  42. package/dist/backend-availability.d.ts +6 -0
  43. package/dist/backend-availability.js +13 -5
  44. package/dist/backend-availability.js.map +1 -1
  45. package/dist/cache-ledger.d.ts +85 -0
  46. package/dist/cache-ledger.js +236 -1
  47. package/dist/cache-ledger.js.map +1 -1
  48. package/dist/cache-service.d.ts +5 -0
  49. package/dist/cache-service.js +16 -4
  50. package/dist/cache-service.js.map +1 -1
  51. package/dist/channel/adapters/discord.js +27 -4
  52. package/dist/channel/adapters/discord.js.map +1 -1
  53. package/dist/channel/adapters/telegram.d.ts +51 -0
  54. package/dist/channel/adapters/telegram.js +238 -18
  55. package/dist/channel/adapters/telegram.js.map +1 -1
  56. package/dist/channel/inbox-temp-name.d.ts +9 -0
  57. package/dist/channel/inbox-temp-name.js +13 -0
  58. package/dist/channel/inbox-temp-name.js.map +1 -0
  59. package/dist/channel/mcp-tools.js +3 -3
  60. package/dist/channel/mcp-tools.js.map +1 -1
  61. package/dist/channel/types.d.ts +2 -0
  62. package/dist/chat-log-ids.d.ts +48 -0
  63. package/dist/chat-log-ids.js +182 -0
  64. package/dist/chat-log-ids.js.map +1 -0
  65. package/dist/classic-channel-manager.d.ts +8 -1
  66. package/dist/classic-channel-manager.js +24 -2
  67. package/dist/classic-channel-manager.js.map +1 -1
  68. package/dist/cli.js +4 -6
  69. package/dist/cli.js.map +1 -1
  70. package/dist/cross-instance-notice.d.ts +10 -0
  71. package/dist/cross-instance-notice.js +67 -5
  72. package/dist/cross-instance-notice.js.map +1 -1
  73. package/dist/daemon.d.ts +52 -0
  74. package/dist/daemon.js +530 -34
  75. package/dist/daemon.js.map +1 -1
  76. package/dist/delivery-consumed-watch.d.ts +23 -1
  77. package/dist/delivery-consumed-watch.js +30 -3
  78. package/dist/delivery-consumed-watch.js.map +1 -1
  79. package/dist/delivery-reconciliation.d.ts +7 -0
  80. package/dist/delivery-reconciliation.js +9 -1
  81. package/dist/delivery-reconciliation.js.map +1 -1
  82. package/dist/dialog-screen-text.d.ts +16 -0
  83. package/dist/dialog-screen-text.js +51 -0
  84. package/dist/dialog-screen-text.js.map +1 -0
  85. package/dist/export-import.d.ts +7 -0
  86. package/dist/export-import.js +44 -10
  87. package/dist/export-import.js.map +1 -1
  88. package/dist/fleet-context.d.ts +2 -0
  89. package/dist/fleet-manager.d.ts +147 -11
  90. package/dist/fleet-manager.js +747 -118
  91. package/dist/fleet-manager.js.map +1 -1
  92. package/dist/fleet-yaml-patch.d.ts +3 -0
  93. package/dist/fleet-yaml-patch.js +103 -0
  94. package/dist/fleet-yaml-patch.js.map +1 -0
  95. package/dist/general-knowledge/skills/concepts/SKILL.md +393 -0
  96. package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +1 -0
  97. package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -1
  98. package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +41 -4
  99. package/dist/general-knowledge/skills/model-discovery/SKILL.md +2 -0
  100. package/dist/general-knowledge/skills/web-appearance/SKILL.md +1 -1
  101. package/dist/general-knowledge/skills/web-dashboard/SKILL.md +10 -4
  102. package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +1 -1
  103. package/dist/install-stream.d.ts +53 -0
  104. package/dist/install-stream.js +134 -0
  105. package/dist/install-stream.js.map +1 -0
  106. package/dist/instance-lifecycle.d.ts +20 -2
  107. package/dist/instance-lifecycle.js +80 -12
  108. package/dist/instance-lifecycle.js.map +1 -1
  109. package/dist/instance-topic-delete.d.ts +77 -0
  110. package/dist/instance-topic-delete.js +123 -0
  111. package/dist/instance-topic-delete.js.map +1 -0
  112. package/dist/instructions.d.ts +1 -1
  113. package/dist/instructions.js +1 -1
  114. package/dist/instructions.js.map +1 -1
  115. package/dist/kiro-engine-status.d.ts +11 -0
  116. package/dist/kiro-engine-status.js +6 -0
  117. package/dist/kiro-engine-status.js.map +1 -1
  118. package/dist/kiro-resume-summary.d.ts +37 -0
  119. package/dist/kiro-resume-summary.js +85 -0
  120. package/dist/kiro-resume-summary.js.map +1 -0
  121. package/dist/locale.js +82 -6
  122. package/dist/locale.js.map +1 -1
  123. package/dist/log-service.d.ts +30 -0
  124. package/dist/log-service.js +36 -3
  125. package/dist/log-service.js.map +1 -1
  126. package/dist/log-steps.d.ts +4 -3
  127. package/dist/log-steps.js +32 -7
  128. package/dist/log-steps.js.map +1 -1
  129. package/dist/logger.d.ts +12 -0
  130. package/dist/logger.js +43 -1
  131. package/dist/logger.js.map +1 -1
  132. package/dist/login-controller.js +9 -1
  133. package/dist/login-controller.js.map +1 -1
  134. package/dist/login-flows.d.ts +2 -0
  135. package/dist/login-flows.js +5 -2
  136. package/dist/login-flows.js.map +1 -1
  137. package/dist/login-manager.d.ts +6 -0
  138. package/dist/login-manager.js +10 -1
  139. package/dist/login-manager.js.map +1 -1
  140. package/dist/missed-offline.d.ts +25 -0
  141. package/dist/missed-offline.js +79 -0
  142. package/dist/missed-offline.js.map +1 -0
  143. package/dist/needs-you-hub.d.ts +6 -1
  144. package/dist/needs-you-hub.js +31 -8
  145. package/dist/needs-you-hub.js.map +1 -1
  146. package/dist/needs-you.d.ts +22 -2
  147. package/dist/needs-you.js +17 -3
  148. package/dist/needs-you.js.map +1 -1
  149. package/dist/office-share-page.d.ts +1 -1
  150. package/dist/office-share-page.js +6 -2
  151. package/dist/office-share-page.js.map +1 -1
  152. package/dist/outbound-handlers.js +59 -3
  153. package/dist/outbound-handlers.js.map +1 -1
  154. package/dist/outbound-schemas.d.ts +1 -0
  155. package/dist/outbound-schemas.js +9 -3
  156. package/dist/outbound-schemas.js.map +1 -1
  157. package/dist/package-preimage.js +27 -2
  158. package/dist/package-preimage.js.map +1 -1
  159. package/dist/queued-handoffs.d.ts +33 -0
  160. package/dist/queued-handoffs.js +75 -0
  161. package/dist/queued-handoffs.js.map +1 -0
  162. package/dist/reply-buttons-controller.js +10 -0
  163. package/dist/reply-buttons-controller.js.map +1 -1
  164. package/dist/scheduler/db.d.ts +2 -1
  165. package/dist/scheduler/db.js +23 -9
  166. package/dist/scheduler/db.js.map +1 -1
  167. package/dist/selection-card.d.ts +2 -3
  168. package/dist/selection-card.js +99 -26
  169. package/dist/selection-card.js.map +1 -1
  170. package/dist/settings-api.d.ts +13 -0
  171. package/dist/settings-api.js +12 -1
  172. package/dist/settings-api.js.map +1 -1
  173. package/dist/stall-reporter.d.ts +21 -0
  174. package/dist/stall-reporter.js +82 -0
  175. package/dist/stall-reporter.js.map +1 -0
  176. package/dist/tmux-control.d.ts +2 -2
  177. package/dist/tmux-control.js +4 -2
  178. package/dist/tmux-control.js.map +1 -1
  179. package/dist/tmux-exec-helper.d.ts +6 -3
  180. package/dist/tmux-exec-helper.js +115 -53
  181. package/dist/tmux-exec-helper.js.map +1 -1
  182. package/dist/tmux-manager.d.ts +6 -0
  183. package/dist/tmux-manager.js +17 -0
  184. package/dist/tmux-manager.js.map +1 -1
  185. package/dist/tool-permissions.d.ts +5 -2
  186. package/dist/tool-permissions.js +6 -5
  187. package/dist/tool-permissions.js.map +1 -1
  188. package/dist/tool-progress.d.ts +2 -0
  189. package/dist/tool-progress.js +19 -3
  190. package/dist/tool-progress.js.map +1 -1
  191. package/dist/topic-commands.js +4 -0
  192. package/dist/topic-commands.js.map +1 -1
  193. package/dist/tunnel/cloudflared-install.d.ts +4 -0
  194. package/dist/tunnel/cloudflared-install.js +20 -1
  195. package/dist/tunnel/cloudflared-install.js.map +1 -1
  196. package/dist/tunnel/cloudflared.d.ts +8 -1
  197. package/dist/tunnel/cloudflared.js +34 -6
  198. package/dist/tunnel/cloudflared.js.map +1 -1
  199. package/dist/tunnel/lease.d.ts +3 -3
  200. package/dist/tunnel/lease.js +23 -19
  201. package/dist/tunnel/lease.js.map +1 -1
  202. package/dist/tunnel/manager.js +6 -7
  203. package/dist/tunnel/manager.js.map +1 -1
  204. package/dist/ui/chat-store.js +20 -3
  205. package/dist/ui/chat-strings.js +4 -4
  206. package/dist/ui/chat-thread.js +52 -10
  207. package/dist/ui/fleet-canvas.js +4 -3
  208. package/dist/ui/fleet-office-model.js +55 -22
  209. package/dist/ui/fleet-office-overview.js +6 -38
  210. package/dist/ui/fleet-office-pack.js +4 -3
  211. package/dist/ui/fleet-office-skin.js +114 -21
  212. package/dist/ui/fleet-office-store.js +5 -0
  213. package/dist/ui/fleet-office-zones.js +2 -2
  214. package/dist/ui/fleet-office.js +41 -9
  215. package/dist/ui/fleet-usage.js +90 -27
  216. package/dist/ui/panel-chat.js +2 -0
  217. package/dist/ui/panel-log.js +7 -1
  218. package/dist/ui/panel-needs.js +17 -8
  219. package/dist/ui/settings-strings.js +2 -2
  220. package/dist/ui/shared/app-i18n.js +4 -4
  221. package/dist/ui/shared/app-needs.js +1 -1
  222. package/dist/ui/shared/app-shell.js +4 -2
  223. package/dist/ui/shared/app-stream.js +26 -0
  224. package/dist/ui/shared/app.css +51 -3
  225. package/dist/ui/shared/office/guild.png +0 -0
  226. package/dist/ui/shared/office/school.png +0 -0
  227. package/dist/ui/shared/panel-view.js +339 -17
  228. package/dist/ui/shared/usage-dialog.js +18 -1
  229. package/dist/ui/shared/view-history.css +17 -0
  230. package/dist/ui/shared/view-history.js +438 -0
  231. package/dist/ui/shared/view-strings.js +42 -0
  232. package/dist/unattended-install.d.ts +6 -0
  233. package/dist/unattended-install.js +79 -0
  234. package/dist/unattended-install.js.map +1 -0
  235. package/dist/usage/capacity.d.ts +69 -0
  236. package/dist/usage/capacity.js +119 -0
  237. package/dist/usage/capacity.js.map +1 -0
  238. package/dist/usage/i18n-keys.d.ts +1 -1
  239. package/dist/usage/i18n-keys.js +3 -0
  240. package/dist/usage/i18n-keys.js.map +1 -1
  241. package/dist/usage/profile-timeline.d.ts +16 -0
  242. package/dist/usage/profile-timeline.js +58 -0
  243. package/dist/usage/profile-timeline.js.map +1 -0
  244. package/dist/usage/quota-history.d.ts +43 -0
  245. package/dist/usage/quota-history.js +168 -0
  246. package/dist/usage/quota-history.js.map +1 -0
  247. package/dist/usage/usage-api.d.ts +31 -0
  248. package/dist/usage/usage-api.js +80 -1
  249. package/dist/usage/usage-api.js.map +1 -1
  250. package/dist/usage-report.d.ts +25 -1
  251. package/dist/usage-report.js +55 -4
  252. package/dist/usage-report.js.map +1 -1
  253. package/dist/usage-rollup.d.ts +4 -1
  254. package/dist/usage-rollup.js +12 -3
  255. package/dist/usage-rollup.js.map +1 -1
  256. package/dist/view-api.d.ts +31 -0
  257. package/dist/view-api.js +186 -41
  258. package/dist/view-api.js.map +1 -1
  259. package/dist/view-history.d.ts +84 -0
  260. package/dist/view-history.js +116 -0
  261. package/dist/view-history.js.map +1 -0
  262. package/dist/web-api.d.ts +6 -0
  263. package/dist/web-api.js +15 -4
  264. package/dist/web-api.js.map +1 -1
  265. package/dist/web-chat-history.d.ts +20 -0
  266. package/dist/web-chat-history.js +21 -0
  267. package/dist/web-chat-history.js.map +1 -1
  268. package/dist/web-guest-access.js +5 -1
  269. package/dist/web-guest-access.js.map +1 -1
  270. package/dist/web-login.d.ts +4 -3
  271. package/dist/web-login.js +23 -14
  272. package/dist/web-login.js.map +1 -1
  273. package/dist/web-office-pack-tools.d.ts +1 -1
  274. package/dist/web-office-pack-tools.js +1 -1
  275. package/dist/web-office-pack-tools.js.map +1 -1
  276. package/dist/web-session-authorization.d.ts +13 -2
  277. package/dist/web-session-authorization.js +10 -3
  278. package/dist/web-session-authorization.js.map +1 -1
  279. package/dist/web-session.d.ts +5 -0
  280. package/dist/web-session.js +20 -8
  281. package/dist/web-session.js.map +1 -1
  282. package/launcher/agend-install.cjs +16 -2
  283. package/launcher/private-home.cjs +1 -1
  284. package/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ import type { RawConfigPatch } from "./settings-api.js";
2
+ /** Apply explicit leaf patches to the on-disk YAML document. No-op when nothing changes. */
3
+ export declare function applyFleetYamlPatches(configPath: string, patches: RawConfigPatch[]): void;
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Leaf-edit fleet.yaml the way Settings does: patch the raw YAML document, keep
3
+ * comments and a legacy `channel:`, then fsync+rename after the result still
4
+ * loads. CLI `topic bind/unbind` used to `yaml.dump` the defaults-expanded
5
+ * config (#1490 row 54).
6
+ */
7
+ import { existsSync, readFileSync, statSync } from "node:fs";
8
+ import { isScalar, parseDocument } from "yaml";
9
+ import { atomicWriteFileSync } from "./atomic-write.js";
10
+ import { loadFleetConfig } from "./config.js";
11
+ import { validateFleetConfig } from "./config-validator.js";
12
+ import { changedOutside, detachForWrite } from "./yaml-shared-nodes.js";
13
+ function sameLeaf(before, after) {
14
+ if (Object.is(before, after))
15
+ return true;
16
+ if (before === undefined && after === undefined)
17
+ return true;
18
+ try {
19
+ return JSON.stringify(before) === JSON.stringify(after);
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ function leafValue(node) {
26
+ return isScalar(node) ? node.value : node;
27
+ }
28
+ function savedFleetYamlProblem(currentPath, candidate) {
29
+ let after;
30
+ try {
31
+ after = validateFleetConfig(loadFleetConfig(candidate));
32
+ }
33
+ catch (err) {
34
+ return `Refusing to save fleet.yaml: the result would not load (${err.message})`;
35
+ }
36
+ let had = new Set();
37
+ try {
38
+ if (existsSync(currentPath)) {
39
+ had = new Set(validateFleetConfig(loadFleetConfig(currentPath)).errors.map(e => `${e.path}\u0000${e.message}`));
40
+ }
41
+ }
42
+ catch { /* the current file does not load: every error of the result counts as new */ }
43
+ const introduced = after.errors.filter(e => !had.has(`${e.path}\u0000${e.message}`));
44
+ return introduced.length
45
+ ? `Refusing to save fleet.yaml: it would be invalid (${introduced.map(e => `${e.path}: ${e.message}`).join("; ")})`
46
+ : null;
47
+ }
48
+ /** Apply explicit leaf patches to the on-disk YAML document. No-op when nothing changes. */
49
+ export function applyFleetYamlPatches(configPath, patches) {
50
+ if (!existsSync(configPath))
51
+ throw new Error(`fleet.yaml not found: ${configPath}`);
52
+ const source = readFileSync(configPath, "utf-8");
53
+ const document = parseDocument(source, { keepSourceTokens: true });
54
+ if (document.errors.length > 0) {
55
+ throw new Error(`Refusing to overwrite invalid fleet.yaml: ${document.errors[0].message}`);
56
+ }
57
+ // #2208: snapshot aliases expanded, unshare the place written, then refuse if
58
+ // anything else changed (a shared node the write still went through).
59
+ const fileBefore = document.toJS({ maxAliasCount: -1 });
60
+ const writes = [];
61
+ let changed = false;
62
+ for (const patch of patches) {
63
+ if (patch.remove) {
64
+ if (!document.hasIn(patch.path))
65
+ continue;
66
+ detachForWrite(document, patch.path);
67
+ writes.push([...patch.path]);
68
+ document.deleteIn(patch.path);
69
+ changed = true;
70
+ continue;
71
+ }
72
+ const before = leafValue(document.getIn(patch.path, true));
73
+ if (sameLeaf(before, patch.value))
74
+ continue;
75
+ detachForWrite(document, patch.path);
76
+ writes.push([...patch.path]);
77
+ const currentNode = document.getIn(patch.path, true);
78
+ if (isScalar(currentNode) && (patch.value === null || typeof patch.value !== "object")) {
79
+ currentNode.value = patch.value;
80
+ }
81
+ else {
82
+ document.setIn(patch.path, patch.value !== null && typeof patch.value === "object"
83
+ ? document.createNode(patch.value)
84
+ : patch.value);
85
+ }
86
+ changed = true;
87
+ }
88
+ if (!changed)
89
+ return;
90
+ const stray = changedOutside(fileBefore, document.toJS({ maxAliasCount: -1 }), writes);
91
+ if (stray) {
92
+ throw new Error(`Refusing to save fleet.yaml: this change would also change ${stray}, which shares a value with what it edits. Give each its own value in fleet.yaml.`);
93
+ }
94
+ atomicWriteFileSync(configPath, String(document), {
95
+ mode: statSync(configPath).mode,
96
+ beforeRename: (tempPath) => {
97
+ const refusal = savedFleetYamlProblem(configPath, tempPath);
98
+ if (refusal)
99
+ throw new Error(refusal);
100
+ },
101
+ });
102
+ }
103
+ //# sourceMappingURL=fleet-yaml-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet-yaml-patch.js","sourceRoot":"","sources":["../src/fleet-yaml-patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,393 @@
1
+ ---
2
+ name: concepts
3
+ description: AgEnD product concepts and definitions — fleet, instances, General, tool sets, delivery, schedules, and the rest; the agents' built-in role reference
4
+ roles: [general, worker]
5
+ ---
6
+
7
+ # AgEnD concepts and definitions
8
+
9
+ Draft. Each term states what the code on main does today, verified against the
10
+ listed files. Anything inferred is marked. These definitions were approved by the project
11
+ owner; behaviour that differs from them is a bug or needs a decision.
12
+ Where code and a decision disagree, see Mismatches at the end. Fleet decisions are scoped to the leader's project root and cannot be
13
+ opened by readers, so each citation carries its user-facing summary inline.
14
+
15
+ ## fleet
16
+
17
+ The whole multi-agent system on one host: its instances, schedules, teams,
18
+ decisions and task board, driven by one daemon from one `fleet.yaml` in one
19
+ AgEnD home (`~/.agend`).
20
+
21
+ - Can: run agents reachable from chat connections, the web dashboard, or both.
22
+ - Can't: span hosts. There is one daemon, one fleet process, one home dir.
23
+ - Code: `src/fleet-manager.ts` (`FleetManager`), `src/config.ts` (`FleetConfig`).
24
+ - Refs: —
25
+
26
+ ## instance / agent
27
+
28
+ One agent is one instance: a daemon driving one CLI in its own tmux pane, with
29
+ its own transcript, topic or room, and tool set. `instance` is the config and
30
+ runtime word (`fleet.yaml` `instances`); `agent` is the everyday word.
31
+
32
+ - Can: chat and call MCP tools within its tool set; message peers with
33
+ `send_to_instance`, `delegate_task`, `report_result`.
34
+ - Can't: exceed its tool set, or touch another instance's state except through
35
+ fleet tools (same-OS-user processes are not isolated from each other —
36
+ see `docs/design/coordinator-tool-perms.zh-TW.md`).
37
+ - Code: `src/daemon.ts`, `src/instance-lifecycle.ts`.
38
+ - Refs: #804.
39
+
40
+ ## General
41
+
42
+ The user's definition (fleet decision 9e3bea6c, "General is the AgEnD
43
+ administrator", user 2026-11-04): as of beta.8 the `general` tool profile gets
44
+ the full ORCHESTRATION set — instance create, delete, replace, start, stop,
45
+ pause, wake and restart; templates; teams; `update_fleet_defaults`;
46
+ `update_instance_config`; the kiro migrate and reconcile tools;
47
+ `update_decision`; web settings — with no extra confirmation. The existing
48
+ confirmations stay: sensitive config (tokens and access) is confirmed by a
49
+ fleet admin, and #804 still refuses `tool_set` or `skipPermissions` escalation.
50
+ It supersedes the 2026-09-21 "dispatcher" rationale and lands in beta.8 (agy's
51
+ PR). General is the fleet's admin instance — the first agent on a new fleet —
52
+ and owns the General topic. An instance runs under the `general` tool set when
53
+ `general_topic: true` or its name is `general`.
54
+
55
+ - Can (as of beta.8): everything in the worker profile plus the full
56
+ ORCHESTRATION set, delegation, schedules, and the user's web-appearance
57
+ settings.
58
+ - Can't: exceed that set. Note the code on main is pre-beta.8 and still shows
59
+ the smaller subset (`src/tool-permissions.ts:107-136` holds only
60
+ `create/start/restart/wake_instance` plus the web settings
61
+ (`get/set_web_settings`) of the orchestration verbs) — expected
62
+ to change when beta.8 lands; see Mismatches.
63
+ - Code: `src/tool-permissions.ts:107-136`, `:201-208`;
64
+ `src/instance-lifecycle.ts:2741` (the General instance cannot be replaced).
65
+ - Refs: fleet decision 9e3bea6c.
66
+
67
+ ## `coordinator` tool set
68
+
69
+ `TOOL_PROFILES.coordinator = WORKER + ORCHESTRATION`: every worker ability plus
70
+ every verb that runs the fleet rather than does the work — for an agent that
71
+ runs part of the fleet.
72
+
73
+ - Can: create/delete/replace/start/stop/pause/wake/restart instances, manage
74
+ teams and templates, edit fleet defaults and instance config, run kiro
75
+ migration/reconciliation, change others' decisions and web settings
76
+ (`src/tool-permissions.ts:80-93`).
77
+ - Can't: exceed the table — anything not listed is refused, with the reason
78
+ naming what the instance runs under.
79
+ - Code: `src/tool-permissions.ts:100-107`.
80
+ - Refs: `docs/design/coordinator-tool-perms.zh-TW.md` (zh-TW only).
81
+
82
+ ## worker
83
+
84
+ An instance doing the work under the `worker` profile — the default when no
85
+ `tool_set` is written (`resolveToolSet`, `src/tool-permissions.ts:201-208`).
86
+
87
+ - Can: talk to people, report to peers (`send_to_instance`, `report_result`,
88
+ `request_information`, `broadcast`, `delegate_task`, `delivery_status`),
89
+ read fleet state, run its own task cards and schedules, keep its own theme
90
+ and Office character.
91
+ - Can't: any orchestration verb. A refused call names the coordinator and
92
+ suggests reporting back instead (`src/tool-permissions.ts:357-374`).
93
+ - Code: `src/tool-permissions.ts:33-72` (`WORKER`), `:185-208`.
94
+ - Refs: #804, #895 (own schedules only).
95
+
96
+ ## team and team leader
97
+
98
+ A team is a named group of instances (`fleet.yaml` `teams`) for targeted
99
+ broadcasts and display grouping. A team leader is an instance that runs a
100
+ team, given the `coordinator` (or `full`) tool set — a convention, not a
101
+ separate role in code (approved by the user 2026-11-04).
102
+
103
+ - Can: address several instances at once; group the sidebar and Office.
104
+ - Can't: confer any authority — no leader election, no extra tools.
105
+ - Code: `create_team`, `list_teams`, `update_team`, `delete_team`
106
+ (`src/channel/mcp-tools.ts`).
107
+ - Refs: —
108
+
109
+ ## topic / General topic
110
+
111
+ A topic is the chat home of one instance: a Telegram forum topic (or the
112
+ equivalent scope on another connection) bound to it. The General topic is the
113
+ General instance's topic. Commands that belong to General answer "works in the
114
+ General topic" anywhere else.
115
+
116
+ - Can: reach exactly that instance by talking there.
117
+ - Can't: run General-only commands from another topic.
118
+ - Code: `src/topic-commands.ts:836-839` (a General command typed in an
119
+ instance topic points to General, never to that agent);
120
+ `src/locale.ts:880` ("works in the General topic");
121
+ `src/tool-permissions.ts:207`.
122
+ - Refs: —
123
+
124
+ ## Classic (ClassicBot) room
125
+
126
+ A private chat or group where ClassicBot runs a single agent, managed by
127
+ `classicBot.yaml` — separate from fleet topics, with its own admins
128
+ (`defaults.admin_users`) and chat allowlists.
129
+
130
+ - Can: `/start` an agent in the room and chat with it.
131
+ - Can't: use fleet-topic commands or see the fleet; an unregistered chat stays
132
+ silent unless `/start` is allowed.
133
+ - Code: `src/classic-channel-manager.ts`.
134
+ - Refs: `docs/permissions.md`.
135
+
136
+ ## web-only fleet
137
+
138
+ A fleet with no Discord or Telegram connection at all, used from the web
139
+ dashboard (user decision, 2026-11-01/02). Its agents run in topic mode, so they
140
+ can still message each other from the dashboard.
141
+
142
+ - Can: everything chat fleets do, through `/ui` instead of chat.
143
+ - Can't: chat ingress; `/web revoke` (there is no `/web`) — its Notice names
144
+ the host's way, signing every browser out.
145
+ - Code: `src/web-only-fleet.ts:10-22`; `src/fleet-manager.ts:7807-7808`.
146
+ - Refs: 28c2d3a3.
147
+
148
+ ## host owner / operator
149
+
150
+ The person on the AgEnD computer. On a web-only fleet, the `agend web --code`
151
+ session on this computer (`HOST_OPERATOR`): it confirms its own authority and
152
+ answers its own prompts.
153
+
154
+ - Can: confirm web authority, sign in, approve what asks for the host operator.
155
+ - Can't: act as operator from another machine, or after the session was
156
+ revoked or ran out.
157
+ - Code: `src/authority/web-authority.ts` (`HOST_OPERATOR`);
158
+ `src/fleet-manager.ts:2056-2060`; `src/locale.ts:1505-1506`.
159
+ - Refs: 28c2d3a3.
160
+
161
+ ## fleet admin (`admin_users`)
162
+
163
+ A platform user id listed in a channel's `access.allowed_users` (fleet), or in
164
+ `defaults.admin_users` / `allowed_users` (ClassicBot). Admin is granted per
165
+ person, never per instance. Fleet admin = the people; General = the
166
+ administrator agent that carries out admin work for whoever may talk to it in
167
+ the General topic (approved by the user 2026-11-04).
168
+
169
+ - Can: admin-gated commands, confirming sensitive changes, managing access.
170
+ - Can't: anything while unlisted — an empty list grants nobody, and open
171
+ access or pairing approval alone does not grant the role
172
+ (`docs/SECURITY.md:13`).
173
+ - Code: `src/config-validator.ts:368-376`, `:677`.
174
+ - Refs: —
175
+
176
+ ## guest (web)
177
+
178
+ A person who is not a fleet admin, signed in on the dashboard with a guest
179
+ code (`web.guests`, #1920). Guests see only the agents they are granted, in
180
+ chat they could already use.
181
+
182
+ - Can: chat with granted agents; sign out with `/web revoke` (own sessions).
183
+ A Trusted guest (#2855) also gets a read-only View of those agents — for
184
+ Claude Code with its earlier conversation, tool results included, like
185
+ anyone who may open the View (#3069).
186
+ - Can't: admin routes, Notices, the usage report, or anything over surfaces
187
+ the fleet closed to guests.
188
+ - Code: `src/config-validator.ts:738-740`.
189
+ - Refs: #1920.
190
+
191
+ ## tool set / tool profile (`full`, `coordinator`, `general`, `worker`, `standard`, `minimal`)
192
+
193
+ The server-side table that decides which MCP tools an instance may call
194
+ (`TOOL_PROFILES`, `src/tool-permissions.ts:103-155`). `defaults.tool_set`
195
+ applies to every instance without its own value, including General; an
196
+ explicit `tool_set` always wins, otherwise the General instance gets `general`
197
+ and everything else defaults to `worker` (`resolveToolSet`, `:201-208`).
198
+
199
+ - `full`: every tool. Set explicitly only; nothing resolves to it by default
200
+ (the env-only fallback excepted, `:212-222`).
201
+ - `coordinator`: worker abilities plus all orchestration verbs — the profile
202
+ for running the fleet.
203
+ - `general`: General's administrator profile — as of beta.8, worker plus
204
+ every orchestration verb (fleet decision 9e3bea6c); before beta.8 only
205
+ `create/start/restart/wake_instance` — and the user's web settings.
206
+ - `worker`: the default. Doing the work, with reporting (`report_result`)
207
+ that `standard` lacks.
208
+ - `standard`: broad read access plus own schedules and themes, but no
209
+ `report_result`, `delegate_task` or `request_information` — so it cannot
210
+ complete the delegate → work → report protocol.
211
+ - `minimal`: a narrow sender — reply, forward, check delivery, read decisions,
212
+ download, and see emoji/sticker listings.
213
+ - Code: `src/tool-permissions.ts:30-155`.
214
+ - Refs: #804.
215
+
216
+ ## Needs you
217
+
218
+ The dashboard's `/ui/needs` queue plus the `needs_you` config: items parked
219
+ for a person — permission prompts, usage-limit holds, dialogs the agent must
220
+ not answer, unconfirmed deliveries.
221
+
222
+ - Can: be acknowledged per item.
223
+ - Can't: be answered by an agent on the person's behalf.
224
+ - Code: `src/config.ts:284-293`; `src/web-api.ts` (`/ui/needs/ack`);
225
+ `src/daemon.ts:1564`, `:2071`, `:9888`.
226
+ - Refs: —
227
+
228
+ ## Notices
229
+
230
+ On a web-only fleet, the Notices feed (`/ui/notices`) — what General would
231
+ have said in chat, kept, pushed and listed. Admins only, never a guest.
232
+
233
+ - Can: be listed and marked seen.
234
+ - Can't: be read by guests; on a chat fleet the feed is null because General
235
+ says them.
236
+ - Code: `src/web-api.ts:2346-2349`; `src/fleet-manager.ts:7807-7808`.
237
+ - Refs: #2910 D2.
238
+
239
+ ## delivery: ✅ 👀 ❌, "uncertain", queued hand-off (#3030)
240
+
241
+ A channel message's status reactions, driven by the delivering daemon:
242
+ ⏳ queued (CLI busy, waiting), 👀 delivered (pasted + Enter, the agent has it),
243
+ ✅ confirmed (processing observed, or a native queue hand-off succeeded),
244
+ ❌ failed (window gone, retries exhausted). Cross-instance rows add two
245
+ states: `uncertain` — the evidence was inconclusive, so never resend and never
246
+ forward it as consent; and the queued hand-off (#3030) — a message handed to a
247
+ backend-native queue, watched in the transcript and settled ✅ when a turn
248
+ takes it, ❌ when it never does.
249
+
250
+ - Can: tell the sender, at a glance, how far a message got.
251
+ - Can't: prove permission. A receipt proves the CLI accepted the bytes, not
252
+ that the person authorized the act — verify the human receipt before anything
253
+ irreversible.
254
+ - Code: `src/daemon.ts:7907-7913`; `:2450-2545`; `docs/delivery-verification.md`.
255
+ - Refs: #3030, 7244b130, 954e5e96.
256
+
257
+ ## schedule
258
+
259
+ A fleet timer: a cron line or a one-shot datetime that injects a message into
260
+ an instance (`create_schedule`, `list_schedules`, `update_schedule`,
261
+ `delete_schedule`). A non-coordinator's schedules may only target itself and
262
+ must be created by itself; acting on other instances' schedules takes the
263
+ `full`, `coordinator` or `general` profile.
264
+
265
+ - Can: wake an instance with a message on a timetable.
266
+ - Can't: reach beyond its scope — the target, not the tool, is the control.
267
+ - Code: `src/channel/mcp-tools.ts` (schedule tools);
268
+ `src/tool-permissions.ts:67`, `:382`.
269
+ - Refs: #895.
270
+
271
+ ## task board card
272
+
273
+ A unit of tracked work. Main tasks `M-n` are outcomes; sub tasks `S-n` are
274
+ steps under a main task. States: open, claimed, review, done, blocked,
275
+ cancelled. A main task that waits for someone's confirmation goes to review;
276
+ finishing it from review with done.
277
+
278
+ - Can: carry state, acceptance, comments and results across turns and
279
+ instances.
280
+ - Can't: substitute for chat consensus — a blocked card still needs the person
281
+ (or the dispatcher) to answer.
282
+ - Code: the `task` tool (`src/channel/mcp-tools.ts:79-80`).
283
+ - Refs: —
284
+
285
+ ## decision
286
+
287
+ A recorded agreement (`post_decision`, `list_decisions`), scoped to a project
288
+ directory or to the whole fleet. Decisions are the fleet's memory of why,
289
+ readable with `list_decisions`.
290
+
291
+ - Can: record agreements agents and people consult later.
292
+ - Can't: enforce itself — code that never reads a decision is not bound by it
293
+ (see Mismatches).
294
+ - Code: `post_decision`, `list_decisions` tool definitions.
295
+ - Refs: —
296
+
297
+ ## credential profile
298
+
299
+ A named credential set for one backend (`CREDENTIAL_HOMES`), so one fleet can
300
+ act under several accounts. `/login <backend> <profile>` signs a profile in;
301
+ chat sign-in from the fleet exists for some backends only.
302
+
303
+ - Can: separate accounts per instance or backend.
304
+ - Can't: share across backends — a profile belongs to its backend's home.
305
+ - Code: `src/backend/credential-profile.ts:5-13`, `:266-295`.
306
+ - Refs: —
307
+
308
+ ## native Windows agent / paired PC / runtime
309
+
310
+ Today AgEnD runs on Linux and macOS (on Windows: under WSL, with desktop
311
+ shortcuts from `agend shortcuts`). The rest is alpha only
312
+ (`origin/release/2.3.5-alpha`, adapting the external #2934 — decision
313
+ 72353fdf).
314
+
315
+ - A native Windows agent uses this PC's Windows-side CLI: AgEnD in WSL
316
+ discovers native Windows CLIs and runs Windows agents in the same fleet
317
+ registry as Linux agents (`runtimes.windows_cli`, off by default).
318
+ - A paired PC is another Windows computer connected over HTTPS: it runs the
319
+ small `agend-runtime` runner (a ZIP from Settings, never a fleet), connects
320
+ outbound with a one-time pairing code, and joins only after its pairing
321
+ fingerprint is approved in Settings (#2936). Agents pinned to it keep their
322
+ working directories on that PC.
323
+ - General can run on a Windows pane: "Run General on" moves General to an
324
+ approved, online paired PC while the coordinator — and chat and
325
+ administrator authority — stay on the host (#3007).
326
+ - Pairing of people (`agend access pair`) is the separate, older mechanism:
327
+ per-instance access codes, unrelated to paired PCs.
328
+ - Code (alpha branch): `docs/remote-runtime.md`, `docs/windows-cli-preview.md`,
329
+ `docs/windows-general.md`; `src/runtime-bundle.ts`.
330
+ - Refs: 72353fdf, #2936, #3007.
331
+
332
+ ## public link (quick vs named)
333
+
334
+ Temporary dashboard access for someone off the host. Quick: an auto-made
335
+ `trycloudflare.com` tunnel URL with a short TTL. Named: the operator's own
336
+ hostname, with a longer TTL. Guests may ride an open public link, but never
337
+ with authority.
338
+
339
+ - Can: show the dashboard (and, if switched on, search, the usage report,
340
+ Office shares) without a chat account.
341
+ - Can't: admin surfaces that require the dashboard reached directly (guests,
342
+ web authority, the dashboard's own web settings).
343
+ - Code: `src/config-validator.ts:424-429`;
344
+ `src/office-share-service.ts:6` (quick-tunnel 429s);
345
+ `src/public-preview.ts:4-5`.
346
+ - Refs: `docs/named-tunnel.md`.
347
+
348
+ ## connections from outside (alpha only)
349
+
350
+ `origin/release/2.3.5-alpha`: a web-only fleet may open itself to the
351
+ internet — "Allow connections from outside" — and sign the outside browser in
352
+ with an authenticator-app TOTP code (#3008; fleet decision 0471da59).
353
+
354
+ - Can (alpha): reach the dashboard from outside without a tunnel the operator
355
+ builds; sign in with the authenticator app's code.
356
+ - Can't: use it on main today — alpha only.
357
+ - Code (alpha branch): `src/auth-api.ts` (`/auth/totp`);
358
+ `src/authority/web-authority.ts`.
359
+ - Refs: #3008, fleet decision 0471da59.
360
+
361
+ ## web session and the verified web go-ahead
362
+
363
+ A web session is a signed-in browser (dashboard reached directly, a LAN, a
364
+ tailnet, or opt-in over a link). A session carries the account's authority —
365
+ its messages read as `via web (verified)` — only after that account confirms
366
+ on Discord or Telegram (#1939); a guest session never qualifies. Agents check a
367
+ `web-verified` receipt like a Discord or Telegram message. A go-ahead action
368
+ (anything destructive, irreversible, spending, or authority-granting) needs a
369
+ Discord/Telegram receipt or a `web (verified)` one — an open browser alone
370
+ proves nothing.
371
+
372
+ - Can: with verification, stand behind the same acts as a chat message.
373
+ - Can't: without it, authorize anything; plain `via web` and guests never
374
+ carry authority.
375
+ - Code: `src/authority/web-authority.ts`;
376
+ `src/config-validator.ts:517-522` (`web.verified_authority`).
377
+ - Refs: #1939.
378
+
379
+ ## Mismatches
380
+
381
+ Real code-vs-decision gaps only. Nothing here is papered over.
382
+
383
+ 1. **General's orchestration tools (temporal, expected to resolve).** Code on
384
+ main is pre-beta.8: the `general` profile
385
+ (`src/tool-permissions.ts:107-136`) holds only
386
+ `create/start/restart/wake_instance` plus the web settings. Fleet decision
387
+ 9e3bea6c moves it to
388
+ the full ORCHESTRATION set in beta.8 (agy's PR). No live mismatch once beta.8
389
+ lands; until then the code half is verified and the change half is the
390
+ decision's word.
391
+
392
+ [繁體中文](concepts.zh-TW.md)
393
+
@@ -53,6 +53,7 @@ A peer's summary is not the original person's consent. Before an irreversible ac
53
53
 
54
54
  1. Ask the peer to send/delegate with `forwards: [verification_id]`, using the original human receipt's `verification_id` / `[agend-human-id:…]`. Every hop needs an explicit forward; mentioning an ID grants nothing. Only delivered references the sender can read are accepted (up to 16).
55
55
  - The ID goes in the `forwards` parameter, never only in the message text: an ID in the text grants nothing, and the receiver's `delivery_status` says "Delivery not found".
56
+ - Put verification and message ids in the `forwards` field only; do not repeat them in the message text, because people see that text in the topic notices.
56
57
  - If the `send_to_instance` / `delegate_task` schema you loaded has no `forwards`, pass it anyway. A session resumed across an AgEnD upgrade keeps the tool copy it first loaded (reloading does not refresh it); AgEnD's server accepts the parameter.
57
58
  2. Read `delivery_status({message_id: verification_id})`. Require `state: delivered`, its owned `proof_kind`, and the original `content` naming the exact operation/resource. Check `origin.platform`, `origin.adapter_id` and `origin.user_id` against the human authorized for that resource. Labels, quoted headers and agent relay rows are not origin evidence.
58
59
  3. Native queue/composer acceptance never proves the model consumed the message. Unknown/unverifiable outcomes, `/raw`, historical rows and a missing origin cannot prove human authorization. Action receipts identify the click and its anchor, not a human-authored platform message.
@@ -4,12 +4,14 @@ description: restart vs replace vs pause/wake; when to use each
4
4
  roles: [general]
5
5
  ---
6
6
 
7
- ## Restart vs Replace
7
+ ## Restart vs Replace vs Stop / Delete
8
8
 
9
9
  - `restart_instance("<name>")` — keeps the session, reloads config. Use when config changed.
10
10
  - `replace_instance("<name>")` — kills old, creates a fresh instance with handover context.
11
11
  Use when the session is the problem: hallucinating / referencing stale info, stuck in a
12
12
  tool-call loop, or context is degrading (only backends that report context % surface that).
13
+ - `stop_instance("<name>")` / `start_instance("<name>")` — stop or start an instance without removing its configuration or topic.
14
+ - `delete_instance("<name>")` — stop and remove the instance, its schedules and team memberships, and its own chat topic (by default; pass `delete_topic: false` to keep the topic). On Discord the topic is a channel, so its history goes too. The General topic and a topic another agent uses are never deleted. The result's `topic_deleted` is the platform's answer; when it is false, `topic_reason` says why (for example, the Telegram bot lacks the Manage Topics admin right) — the agent is deleted either way.
13
15
 
14
16
  ## Pause / Wake (resource management)
15
17
 
@@ -10,6 +10,24 @@ roles: [general]
10
10
  instances as configured, so AgEnD stopped them and will not retry.
11
11
  - Or the user asks about kiro's engine change: Classic/legacy UI being deprecated, kiro-cli 3.0, or V3.
12
12
 
13
+ ## Kiro CLI 3.0: current refusal and migration instructions
14
+
15
+ Kiro CLI 3.0 removed Classic. AgEnD refuses a Classic launch on major 3 or later before launching it or changing
16
+ its saved conversation. Needs you names the Agent and explains how to continue. If a retirement/V2-V3 choice appears
17
+ in an already running pane, AgEnD blocks messages and leaves the choice to the owner; never answer it for them.
18
+ An explicitly pinned TUI/V2 launch remains allowed: it is not a Classic launch.
19
+
20
+ For Classic today, ask the host owner to use a compatible Kiro CLI 2.x. The existing admin-confirmed Classic→TUI
21
+ migration below requires **2.34+ within 2.x**, not 3.x. Do not remove the migration version fence or edit `kiro_ui` to
22
+ bypass it. Keep the original pin, history and receipts; never resume a frozen Classic copy after work continued on V2.
23
+
24
+ The guided **admin-confirmed migration on 2.x followed by a safe upgrade to 3.0 (plan C, #3047)** is coming separately.
25
+ It is not implemented by this refusal/Needs-you change. Do not promise an automatic conversion or an upgrade date.
26
+
27
+ 繁體中文:Kiro CLI 3.0 已移除 Classic。請由主機管理者改用相容的 2.x;這個拒絕啟動的保護不會更動已存對話。
28
+ 既有管理員確認的 Classic→TUI 遷移只接受 2.34 以上的 **2.x**。先在 2.x 經管理員確認遷移、再安全升級到 3.0
29
+ 的引導流程(計畫 C,#3047)會另外提供,並未包含在這次保護裡。不要直接改 `kiro_ui` 或刪除版本檢查來繞過。
30
+
13
31
  ## What is true
14
32
 
15
33
  - **Each kiro instance's conversation lives in its engine's own store:**
@@ -56,11 +74,30 @@ The user has already been shown the plain notice in this topic. When they ask, e
56
74
  - Never run `kiro-cli` yourself, and never delete or edit anything under `~/.kiro` or kiro's data directory.
57
75
  - Never reply to the `[system:kiro-incompat]` notice itself. It is information, not a request.
58
76
 
77
+ ## Preparing for Kiro CLI 3.x
78
+
79
+ 1. Call `kiro_engine_status` with no name filter. Its `kiro3_readiness` summary counts **all** Kiro Agents and
80
+ Classic rooms, including General; filtering to one Agent still keeps that whole-fleet count. A Classic Agent
81
+ is not ready for Kiro 3.x. This readiness describes the removal of Classic, not a promise that every 3.x
82
+ release supports every session or tool.
83
+ 2. Keep a compatible Kiro **2.x** installed. For each Classic fleet Agent, ask the owner to confirm the existing
84
+ `migrate_kiro_instance` move described below. Do not change `kiro_ui` by hand. Wait for the same conversation
85
+ and model to pass both verification starts; failure stops the Agent for inspection. The migration itself is
86
+ unchanged and is not available on 3.x.
87
+ 3. A **ClassicBot room** cannot use `migrate_kiro_instance`: its owner must change the room to another backend
88
+ in Classic settings, or continue using Kiro 2.x. Such rooms count as still Classic until their effective Kiro
89
+ configuration no longer selects Classic. Do not present a fleet-Agent migration tool as room recovery.
90
+ 4. Check `kiro_engine_status` again: every remaining Kiro Agent must use TUI (or already use V3), and the
91
+ `still_classic` count must be zero before recommending an upgrade. General is subject to the same check.
92
+ 5. The owner then upgrades Kiro themselves. AgEnD neither installs the CLI nor answers a V2/V3 menu. If a menu
93
+ or an unverified resume blocks startup, inspect Needs-you; do not clear the pin or start a fresh conversation
94
+ to make the check pass. The version-specific exact-resume evidence is documented separately from readiness.
95
+
59
96
  ## Moving an instance from classic to the TUI engine (#2598)
60
97
 
61
98
  kiro-cli 3.0 drops the classic engine (`kiro_ui: legacy`), so classic instances are being moved to the TUI engine,
62
- **one batch at a time and only with the user's OK for that batch**. The move is `migrate_kiro_instance` (a
63
- coordinator-level tool; you do not have it). It carries the conversation: the instance's classic conversation is
99
+ **one batch at a time and only with the user's OK for that batch**. The move is `migrate_kiro_instance` (available
100
+ in the `general`, `coordinator` and `full` tool sets). It carries the conversation: the instance's classic conversation is
64
101
  resumed once under the TUI and becomes its own. A fleet admin confirms each move in this General topic: a
65
102
  "Move it / Cancel" prompt. Explain it if asked; never press it on the user's behalf.
66
103
 
@@ -92,8 +129,8 @@ session identity after `/chat` or `/clear`.
92
129
  this instance's. When it can't be proven, or the check passes its 30 s / 2 GiB limit, the instance resumes the
93
130
  conversation on record and the Log tab says why.
94
131
  - **Two conversations after an interrupted carry (#2753).** When a stopped TUI instance has its original carried
95
- conversation and a newer one with work, recovery holds instead of choosing. `reconcile_kiro_instance` (full and
96
- coordinator tool sets) asks a fleet admin to confirm, in General, keeping the original and archiving the named
132
+ conversation and a newer one with work, recovery holds instead of choosing. `reconcile_kiro_instance` (general,
133
+ coordinator and full tool sets) asks a fleet admin to confirm, in General, keeping the original and archiving the named
97
134
  newer one intact. Offer it only after the user chose those exact ids; docs/kiro-reconciliation.md explains it.
98
135
  - **"Kiro's terminal is in use by another program" (#2682).** While a kiro pane runs `/editor`, `/transcript`, a
99
136
  `!` command or a focused `/kvim` panel (legacy: `/editor`, `/reply`, `!`), AgEnD holds deliveries. Tell the user
@@ -25,6 +25,7 @@ capability (cheap/fast vs deep reasoning), or the backend needs one to behave
25
25
  | codex | account default | |
26
26
  | grok | account default | |
27
27
  | antigravity | account default | |
28
+ | muse | account default | `list_models` reads the provider catalog muse caches on disk (no models subcommand) |
28
29
  | opencode | provider default | ids are **`provider/model`**, as `opencode models` prints them |
29
30
 
30
31
  ## Discover real names
@@ -53,6 +54,7 @@ Underlying commands, if you need them by hand:
53
54
  | antigravity | `agy models` |
54
55
  | codex | `codex debug models` (with its CODEX_HOME set) — refreshes `models_cache.json` when it is older than a few minutes |
55
56
  | claude-code | fixed alias set (no command) |
57
+ | muse | none (no models subcommand) — use `list_models`; it reads muse's on-disk `model-catalog/<provider>__<profile>.json` |
56
58
 
57
59
  ## Setting one on create_instance
58
60
 
@@ -311,7 +311,7 @@ tools are not in your list), you can publish them yourself instead of asking a p
311
311
  refused and you send the change again (#2695).
312
312
  - `office_pack_restore { id }` brings back the previous version (the replaced one becomes the previous);
313
313
  `office_pack_delete { id, keep_previous? }`; `office_set_style { office, pack }` points a stored office at a pack or a
314
- built-in style (pixel, studio, cozy).
314
+ built-in style (pixel, studio, cozy, guild, school).
315
315
  - Every change is logged with each picture's sha256 and told to the fleet's admins. At most **20 batches and 200 MiB an
316
316
  hour**: one call is one batch (up to 16 packs), so send a whole set of fixes in one `packs: [...]`.
317
317
  - `office_pack_check` has its own allowance: at most **60 checks and 1 GiB (as sent) an hour**. Every check counts,