@songsid/agend 2.2.0-beta.1 → 2.2.0-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.
- package/README.md +1 -1
- package/README.zh-TW.md +1 -1
- package/dist/agent-cli-instructions.md +16 -9
- package/dist/agent-cli.js +15 -7
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.js +21 -9
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-whats-new.d.ts +47 -0
- package/dist/agent-whats-new.js +147 -0
- package/dist/agent-whats-new.js.map +1 -0
- package/dist/auth-api.d.ts +2 -2
- package/dist/auth-api.js +4 -2
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/antigravity.d.ts +3 -0
- package/dist/backend/antigravity.js +9 -0
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-carry.d.ts +22 -0
- package/dist/backend/claude-carry.js +170 -0
- package/dist/backend/claude-carry.js.map +1 -0
- package/dist/backend/claude-code.d.ts +65 -2
- package/dist/backend/claude-code.js +226 -33
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex-metadata.d.ts +33 -0
- package/dist/backend/codex-metadata.js +122 -18
- package/dist/backend/codex-metadata.js.map +1 -1
- package/dist/backend/codex.d.ts +3 -0
- package/dist/backend/codex.js +17 -1
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/credential-profile.d.ts +40 -3
- package/dist/backend/credential-profile.js +113 -5
- package/dist/backend/credential-profile.js.map +1 -1
- package/dist/backend/effort-metadata.d.ts +1 -1
- package/dist/backend/effort-metadata.js +3 -2
- package/dist/backend/effort-metadata.js.map +1 -1
- package/dist/backend/grok.d.ts +4 -0
- package/dist/backend/grok.js +14 -0
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro-engine-ledger.d.ts +5 -0
- package/dist/backend/kiro-engine-ledger.js +20 -0
- package/dist/backend/kiro-engine-ledger.js.map +1 -1
- package/dist/backend/kiro-identity.d.ts +6 -0
- package/dist/backend/kiro-identity.js +19 -5
- package/dist/backend/kiro-identity.js.map +1 -1
- package/dist/backend/kiro.d.ts +39 -3
- package/dist/backend/kiro.js +143 -19
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/launch-effort.d.ts +33 -0
- package/dist/backend/launch-effort.js +123 -0
- package/dist/backend/launch-effort.js.map +1 -0
- package/dist/backend/muse.d.ts +84 -0
- package/dist/backend/muse.js +449 -53
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/types.d.ts +33 -4
- package/dist/backend/types.js +2 -1
- package/dist/backend/types.js.map +1 -1
- package/dist/backend-command.d.ts +91 -0
- package/dist/backend-command.js +122 -0
- package/dist/backend-command.js.map +1 -0
- package/dist/background-work-ended.d.ts +18 -0
- package/dist/background-work-ended.js +30 -0
- package/dist/background-work-ended.js.map +1 -0
- package/dist/cache-service.d.ts +2 -0
- package/dist/cache-service.js +2 -1
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.d.ts +24 -1
- package/dist/channel/adapters/discord.js +87 -2
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +24 -2
- package/dist/channel/adapters/telegram.js +118 -20
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-server.js +9 -1
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.d.ts +11 -0
- package/dist/channel/mcp-tools.js +24 -13
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/message-edit-errors.d.ts +5 -0
- package/dist/channel/message-edit-errors.js +24 -0
- package/dist/channel/message-edit-errors.js.map +1 -0
- package/dist/channel/telegram-markdown.d.ts +6 -0
- package/dist/channel/telegram-markdown.js +104 -0
- package/dist/channel/telegram-markdown.js.map +1 -0
- package/dist/channel/tool-router.js +9 -3
- package/dist/channel/tool-router.js.map +1 -1
- package/dist/channel/types.d.ts +39 -3
- package/dist/cli.js +133 -28
- package/dist/cli.js.map +1 -1
- package/dist/command-table.d.ts +2 -2
- package/dist/command-table.js +6 -3
- package/dist/command-table.js.map +1 -1
- package/dist/config-validator.js +59 -0
- package/dist/config-validator.js.map +1 -1
- package/dist/cross-instance-envelope.d.ts +15 -2
- package/dist/cross-instance-envelope.js +29 -5
- package/dist/cross-instance-envelope.js.map +1 -1
- package/dist/daemon.d.ts +156 -1
- package/dist/daemon.js +764 -89
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-outbox.d.ts +62 -7
- package/dist/delivery-outbox.js +309 -22
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-reconciliation.d.ts +18 -1
- package/dist/delivery-reconciliation.js +67 -2
- package/dist/delivery-reconciliation.js.map +1 -1
- package/dist/fleet-context.d.ts +10 -1
- package/dist/fleet-manager.d.ts +345 -10
- package/dist/fleet-manager.js +1868 -174
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/backend-providers/SKILL.md +1 -1
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +92 -21
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +27 -3
- package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +8 -8
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +5 -5
- package/dist/general-knowledge/skills/fleet-health/SKILL.md +4 -4
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +13 -13
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -2
- package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +6 -0
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +9 -9
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +8 -2
- package/dist/general-knowledge/skills/scheduling/SKILL.md +5 -3
- package/dist/general-knowledge/skills/session-management/SKILL.md +6 -5
- package/dist/general-knowledge/skills/tui-effort/SKILL.md +2 -2
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +8 -3
- package/dist/general-knowledge/steering/core-rules.md +8 -7
- package/dist/host-memory.d.ts +10 -0
- package/dist/host-memory.js +33 -1
- package/dist/host-memory.js.map +1 -1
- package/dist/human-delivery-receipts.d.ts +83 -0
- package/dist/human-delivery-receipts.js +194 -0
- package/dist/human-delivery-receipts.js.map +1 -0
- package/dist/instance-avatar.d.ts +36 -0
- package/dist/instance-avatar.js +57 -0
- package/dist/instance-avatar.js.map +1 -0
- package/dist/instance-config-impact.js +6 -0
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +29 -6
- package/dist/instance-lifecycle.js +79 -28
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +3 -1
- package/dist/instructions.js +11 -8
- package/dist/instructions.js.map +1 -1
- package/dist/kiro-log-gate.d.ts +42 -0
- package/dist/kiro-log-gate.js +39 -0
- package/dist/kiro-log-gate.js.map +1 -0
- package/dist/locale.js +200 -44
- package/dist/locale.js.map +1 -1
- package/dist/log-service.d.ts +99 -0
- package/dist/log-service.js +243 -0
- package/dist/log-service.js.map +1 -0
- package/dist/log-steps.d.ts +169 -0
- package/dist/log-steps.js +858 -0
- package/dist/log-steps.js.map +1 -0
- package/dist/login-controller.d.ts +20 -3
- package/dist/login-controller.js +71 -19
- package/dist/login-controller.js.map +1 -1
- package/dist/login-flows.d.ts +5 -2
- package/dist/login-flows.js +5 -4
- package/dist/login-flows.js.map +1 -1
- package/dist/memory-pressure.d.ts +13 -1
- package/dist/memory-pressure.js +50 -10
- package/dist/memory-pressure.js.map +1 -1
- package/dist/needs-you-hub.js +2 -0
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you-live.d.ts +6 -0
- package/dist/needs-you-live.js +23 -3
- package/dist/needs-you-live.js.map +1 -1
- package/dist/next-steps.js +1 -1
- package/dist/next-steps.js.map +1 -1
- package/dist/outbound-handlers.d.ts +100 -0
- package/dist/outbound-handlers.js +263 -96
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +26 -15
- package/dist/outbound-schemas.js +24 -7
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-link-progress.d.ts +1 -1
- package/dist/public-link-progress.js +8 -2
- package/dist/public-link-progress.js.map +1 -1
- package/dist/public-preview.d.ts +101 -0
- package/dist/public-preview.js +236 -0
- package/dist/public-preview.js.map +1 -0
- package/dist/public-web-gateway.js +11 -4
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +24 -1
- package/dist/public-web-link.js +63 -9
- package/dist/public-web-link.js.map +1 -1
- package/dist/reply-buttons-controller.d.ts +3 -0
- package/dist/reply-buttons-controller.js +3 -2
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/restart-guard.d.ts +6 -3
- package/dist/restart-guard.js +6 -3
- package/dist/restart-guard.js.map +1 -1
- package/dist/restart-progress.d.ts +33 -0
- package/dist/restart-progress.js +30 -0
- package/dist/restart-progress.js.map +1 -1
- package/dist/service-activation.d.ts +15 -7
- package/dist/service-activation.js +46 -29
- package/dist/service-activation.js.map +1 -1
- package/dist/service-installer.d.ts +31 -0
- package/dist/service-installer.js +41 -2
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.js +85 -25
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +72 -1
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +28 -4
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.js +7 -0
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/setup-form.d.ts +1 -1
- package/dist/setup-form.js +1 -1
- package/dist/spawn-gate.js +5 -1
- package/dist/spawn-gate.js.map +1 -1
- package/dist/spawn-hold-reply.d.ts +12 -0
- package/dist/spawn-hold-reply.js +39 -0
- package/dist/spawn-hold-reply.js.map +1 -0
- package/dist/status-emojis.d.ts +10 -3
- package/dist/status-emojis.js +11 -2
- package/dist/status-emojis.js.map +1 -1
- package/dist/systemd-peer-bus.d.ts +95 -0
- package/dist/systemd-peer-bus.js +430 -0
- package/dist/systemd-peer-bus.js.map +1 -0
- package/dist/systemd-runtime.d.ts +27 -1
- package/dist/systemd-runtime.js +69 -7
- package/dist/systemd-runtime.js.map +1 -1
- package/dist/tips.js +4 -4
- package/dist/tips.js.map +1 -1
- package/dist/tool-progress.js +3 -2
- package/dist/tool-progress.js.map +1 -1
- package/dist/topic-commands.d.ts +42 -2
- package/dist/topic-commands.js +92 -7
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-delta-reader.d.ts +3 -3
- package/dist/transcript-delta-reader.js +8 -8
- package/dist/transcript-delta-reader.js.map +1 -1
- package/dist/transcript-jsonl.d.ts +80 -3
- package/dist/transcript-jsonl.js +147 -10
- package/dist/transcript-jsonl.js.map +1 -1
- package/dist/transcript-monitor.d.ts +19 -0
- package/dist/transcript-monitor.js +87 -15
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +78 -0
- package/dist/transcript-sources.js +375 -64
- package/dist/transcript-sources.js.map +1 -1
- package/dist/transcript-turns.d.ts +15 -2
- package/dist/transcript-turns.js +15 -2
- package/dist/transcript-turns.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +7 -15
- package/dist/tunnel/cloudflared.js +36 -1
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/purpose-lane.d.ts +5 -1
- package/dist/tunnel/purpose-lane.js +14 -7
- package/dist/tunnel/purpose-lane.js.map +1 -1
- package/dist/tunnel/types.d.ts +5 -1
- package/dist/tunnel/types.js.map +1 -1
- package/dist/turn-resume.d.ts +2 -0
- package/dist/turn-resume.js +1 -1
- package/dist/turn-resume.js.map +1 -1
- package/dist/types.d.ts +25 -0
- package/dist/ui/chat-commands.js +1 -0
- package/dist/ui/chat-emojis.js +33 -0
- package/dist/ui/chat-mentions.js +63 -0
- package/dist/ui/chat-render.js +42 -2
- package/dist/ui/chat-store.js +2 -2
- package/dist/ui/chat-strings.js +38 -20
- package/dist/ui/chat-thread.js +69 -12
- package/dist/ui/chat-time.js +80 -0
- package/dist/ui/panel-chat.js +39 -10
- package/dist/ui/panel-details.js +2 -0
- package/dist/ui/panel-fleet.js +199 -57
- package/dist/ui/panel-log.js +428 -0
- package/dist/ui/panel-needs.js +6 -2
- package/dist/ui/panel-settings.js +137 -32
- package/dist/ui/preview-panel.js +55 -15
- package/dist/ui/preview-status.js +28 -0
- package/dist/ui/preview.js +44 -3
- package/dist/ui/settings-dialogs.js +7 -2
- package/dist/ui/settings-model.js +2 -1
- package/dist/ui/settings-strings.js +46 -4
- package/dist/ui/settings-token.js +1 -1
- package/dist/ui/shared/app-i18n.js +43 -17
- package/dist/ui/shared/app-prefs.js +250 -0
- package/dist/ui/shared/app-route.js +7 -2
- package/dist/ui/shared/app-shell.js +165 -8
- package/dist/ui/shared/app-store.js +5 -1
- package/dist/ui/shared/app-stream.js +23 -5
- package/dist/ui/shared/app.css +155 -22
- package/dist/ui/shared/app.js +11 -1
- package/dist/ui/shared/fonts/README.md +1 -1
- package/dist/ui/shared/header-tools.js +55 -5
- package/dist/ui/shared/instance-nav.js +241 -45
- package/dist/ui/shared/instance-switch.js +4 -4
- package/dist/ui/shared/panel-view.js +6 -0
- package/dist/ui/shared/signin.js +7 -7
- package/dist/ui/shared/theme.js +39 -7
- package/dist/ui/shared/tokens.css +1 -1
- package/dist/ui/shared/ui-icons.js +1 -0
- package/dist/ui/shared/usage-dialog.js +23 -5
- package/dist/ui/shared/view-strings.js +32 -4
- package/dist/ui/signin.html +1 -1
- package/dist/unrecognised-prompt.d.ts +23 -0
- package/dist/unrecognised-prompt.js +74 -0
- package/dist/unrecognised-prompt.js.map +1 -0
- package/dist/update-install.d.ts +28 -2
- package/dist/update-install.js +22 -4
- package/dist/update-install.js.map +1 -1
- package/dist/update-marker.d.ts +51 -0
- package/dist/update-marker.js +61 -0
- package/dist/update-marker.js.map +1 -1
- package/dist/update-preflight.d.ts +100 -0
- package/dist/update-preflight.js +264 -0
- package/dist/update-preflight.js.map +1 -0
- package/dist/updater-caller.d.ts +31 -0
- package/dist/updater-caller.js +109 -0
- package/dist/updater-caller.js.map +1 -0
- package/dist/usage/i18n-keys.d.ts +1 -1
- package/dist/usage/i18n-keys.js +1 -1
- package/dist/usage/i18n-keys.js.map +1 -1
- package/dist/usage/providers.d.ts +34 -5
- package/dist/usage/providers.js +160 -27
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/statusline-usage.d.ts +6 -2
- package/dist/usage/statusline-usage.js +10 -4
- package/dist/usage/statusline-usage.js.map +1 -1
- package/dist/view-api.d.ts +1 -1
- package/dist/view-api.js +38 -8
- package/dist/view-api.js.map +1 -1
- package/dist/wake-coordinator.d.ts +11 -0
- package/dist/wake-coordinator.js +38 -4
- package/dist/wake-coordinator.js.map +1 -1
- package/dist/web-api.d.ts +49 -2
- package/dist/web-api.js +421 -31
- package/dist/web-api.js.map +1 -1
- package/dist/web-auth.d.ts +2 -2
- package/dist/web-auth.js +9 -4
- package/dist/web-auth.js.map +1 -1
- package/dist/web-commands.d.ts +27 -4
- package/dist/web-commands.js +19 -4
- package/dist/web-commands.js.map +1 -1
- package/dist/web-host-guard.d.ts +3 -11
- package/dist/web-host-guard.js +3 -12
- package/dist/web-host-guard.js.map +1 -1
- package/dist/web-images.d.ts +47 -0
- package/dist/web-images.js +169 -0
- package/dist/web-images.js.map +1 -0
- package/dist/web-mentions.d.ts +44 -0
- package/dist/web-mentions.js +75 -0
- package/dist/web-mentions.js.map +1 -0
- package/dist/web-prefs.d.ts +63 -0
- package/dist/web-prefs.js +265 -0
- package/dist/web-prefs.js.map +1 -0
- package/dist/web-preview.d.ts +14 -1
- package/dist/web-preview.js +35 -13
- package/dist/web-preview.js.map +1 -1
- package/dist/web-reply-files.d.ts +45 -0
- package/dist/web-reply-files.js +223 -0
- package/dist/web-reply-files.js.map +1 -0
- package/dist/web-schedules.d.ts +12 -0
- package/dist/web-schedules.js +34 -0
- package/dist/web-schedules.js.map +1 -0
- package/dist/web-server-drain.d.ts +10 -0
- package/dist/web-server-drain.js +50 -0
- package/dist/web-server-drain.js.map +1 -0
- package/dist/web-session.d.ts +36 -1
- package/dist/web-session.js +53 -6
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +23 -0
- package/dist/web-settings-patch.js +77 -0
- package/dist/web-settings-patch.js.map +1 -0
- package/dist/web-shell-routes.d.ts +5 -1
- package/dist/web-shell-routes.js +10 -1
- package/dist/web-shell-routes.js.map +1 -1
- package/dist/web-upload.d.ts +17 -4
- package/dist/web-upload.js +64 -13
- package/dist/web-upload.js.map +1 -1
- package/dist/workflow-templates/default.md +1 -1
- package/package.json +1 -1
- package/templates/launchd.plist.ejs +3 -1
- package/templates/systemd.service.ejs +2 -1
|
@@ -14,7 +14,7 @@ AgEnD selects a provider; the backend CLI owns endpoint and credential definitio
|
|
|
14
14
|
|---|---|
|
|
15
15
|
| Codex | Select with `backend_options.codex.provider`; define the provider in Codex `config.toml`. |
|
|
16
16
|
| OpenCode | Define the provider in `opencode.json`; use model ID `<provider>/<model>`. |
|
|
17
|
-
| Claude Code, Kiro CLI, Antigravity, Grok | Provider is fixed by the CLI; do not set `backend_options` for provider selection. |
|
|
17
|
+
| Claude Code, Kiro CLI, Antigravity, Grok, Muse | Provider is fixed by the CLI; do not set `backend_options` for provider selection. |
|
|
18
18
|
|
|
19
19
|
## Create a Codex custom-provider instance
|
|
20
20
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: credential-profiles
|
|
3
|
-
description: Run agents on more than one subscription of the same backend. Use when someone asks for a worker on a different account, wants an agent moved to another subscription, or asks which subscription an agent is using. Currently kiro-cli
|
|
3
|
+
description: Run agents on more than one subscription of the same backend. Use when someone asks for a worker on a different account, wants an agent moved to another subscription, or asks which subscription an agent is using. Currently kiro-cli, codex and claude-code.
|
|
4
4
|
roles: [general]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -10,15 +10,17 @@ One AgEnD fleet normally shares one login per backend. A **credential profile**
|
|
|
10
10
|
is a named, separate login for the same backend, so two agents can run on two
|
|
11
11
|
subscriptions at once.
|
|
12
12
|
|
|
13
|
-
`kiro-cli` and `
|
|
14
|
-
than setting an option that will be ignored.
|
|
13
|
+
`kiro-cli`, `codex` and `claude-code` have profiles today. For any other backend,
|
|
14
|
+
say so rather than setting an option that will be ignored.
|
|
15
15
|
|
|
16
16
|
**The two behave differently when you switch, and it is not a setting.** Kiro
|
|
17
17
|
keeps its conversations inside the same database as its login, so a different
|
|
18
18
|
subscription is a different set of them: switching is a new conversation. Codex
|
|
19
19
|
keeps its login in one file beside conversation stores that carry no account, so
|
|
20
|
-
switching leaves the history where it is and both subscriptions see it.
|
|
21
|
-
|
|
20
|
+
switching leaves the history where it is and both subscriptions see it. Claude
|
|
21
|
+
Code behaves like Kiro: the profile is its whole config directory, conversations
|
|
22
|
+
included, so switching is a new conversation. Say which one you are talking
|
|
23
|
+
about.
|
|
22
24
|
|
|
23
25
|
## Is a profile already set up?
|
|
24
26
|
|
|
@@ -34,21 +36,50 @@ the command, do not try to work around the refusal.
|
|
|
34
36
|
Ask the operator to run this on the host once per subscription:
|
|
35
37
|
|
|
36
38
|
```
|
|
37
|
-
XDG_DATA_HOME="${AGEND_HOME
|
|
39
|
+
XDG_DATA_HOME="${AGEND_HOME:-$HOME/.agend}/credential-profiles/kiro-cli/<profile>" kiro-cli login
|
|
38
40
|
```
|
|
39
41
|
|
|
40
42
|
For codex the variable and the path are different:
|
|
41
43
|
|
|
42
44
|
```
|
|
43
|
-
CODEX_HOME="${AGEND_HOME
|
|
45
|
+
CODEX_HOME="${AGEND_HOME:-$HOME/.agend}/credential-profiles/codex/<profile>" codex login
|
|
44
46
|
```
|
|
45
47
|
|
|
48
|
+
For claude-code a fleet admin can do it **from chat**, no host access needed:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
/login claude-code <profile>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
It opens the same browser-terminal login as `/login claude-code`, for that
|
|
55
|
+
profile only. Or on the host:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
CLAUDE_CONFIG_DIR="${AGEND_HOME:-$HOME/.agend}/credential-profiles/claude-code/<profile>" claude auth login
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Kiro and codex profiles cannot be signed in from chat yet: `/login kiro-cli <profile>`
|
|
62
|
+
answers with the host command to run.
|
|
63
|
+
|
|
64
|
+
A Claude Code profile keeps its own login, trust and conversations, and a
|
|
65
|
+
`settings.json` that starts as a copy of the user's; the user's `CLAUDE.md`,
|
|
66
|
+
agents, commands, skills, output styles and plugins are shared with it.
|
|
67
|
+
|
|
68
|
+
**When a switch was refused, relay the command from the refusal, character for
|
|
69
|
+
character** — never one you assembled from the templates above. It carries the
|
|
70
|
+
exact absolute path AgEnD launches with. For claude-code this matters more than
|
|
71
|
+
anywhere: on macOS the login is stored under a Keychain item named after that
|
|
72
|
+
path string, so a login under a differently spelled path (a relative
|
|
73
|
+
`AGEND_HOME`, a trailing slash, a `~` that was never expanded) lands in another
|
|
74
|
+
item, and the agent still finds no login.
|
|
75
|
+
For claude-code the refusal also names `/login claude-code <profile>`: offer that first, since it works from chat.
|
|
76
|
+
|
|
46
77
|
## Create a worker on another subscription
|
|
47
78
|
|
|
48
79
|
```
|
|
49
80
|
create_instance(
|
|
50
|
-
|
|
51
|
-
|
|
81
|
+
topic_name: "research-b",
|
|
82
|
+
directory: "/home/you/projects/app",
|
|
52
83
|
backend: "kiro-cli",
|
|
53
84
|
backend_options: { "kiro-cli": { "credential_profile": "personal" } },
|
|
54
85
|
)
|
|
@@ -66,11 +97,13 @@ update_instance_config(
|
|
|
66
97
|
)
|
|
67
98
|
```
|
|
68
99
|
|
|
69
|
-
The credentials are read when the CLI starts, so
|
|
70
|
-
for you** and the reply says `restarted: true`.
|
|
100
|
+
The credentials are read when the CLI starts, so a running instance **is
|
|
101
|
+
restarted for you** and the reply says `restarted: true`. A paused or stopped one
|
|
102
|
+
is not started: the reply says `restarted: false`, and the switch applies at its
|
|
103
|
+
next start.
|
|
71
104
|
|
|
72
|
-
**For kiro**, a switch is always a **new conversation
|
|
73
|
-
(`conversation_carried_over: false`).
|
|
105
|
+
**For kiro**, a switch is always a **new conversation**
|
|
106
|
+
(`conversation_carried_over: false`). Kiro keeps its conversations in the same
|
|
74
107
|
database as its login, so a different subscription has a different set of them
|
|
75
108
|
and there is nothing to resume — AgEnD does not even try. What it does instead
|
|
76
109
|
is hand the new session a summary of what the old one was doing
|
|
@@ -78,6 +111,34 @@ is hand the new session a summary of what the old one was doing
|
|
|
78
111
|
transcript. Tell the user plainly: the agent restarted on the other
|
|
79
112
|
subscription, it knows what it was doing, it cannot quote what was said.
|
|
80
113
|
|
|
114
|
+
**For claude-code**, AgEnD copies the transcript and its folder into the new
|
|
115
|
+
profile's directory and resumes it there with `--continue`. The originals are
|
|
116
|
+
left untouched; the switch copies, never moves.
|
|
117
|
+
|
|
118
|
+
**Reply fields to relay:**
|
|
119
|
+
|
|
120
|
+
- `conversation_carried_over: true` — the copy succeeded and the agent resumed
|
|
121
|
+
the same conversation on the new account. The reply also carries
|
|
122
|
+
`conversation_note`: relay it. It says the old copy is still there and
|
|
123
|
+
warns that the next turn re-reads the full history from a cold cache — one
|
|
124
|
+
slower, full-price turn on the new subscription.
|
|
125
|
+
|
|
126
|
+
- `conversation_carried_over: false` + `carry_failed: "<reason>"` — the copy
|
|
127
|
+
could not be made. Common reasons: no session id recorded, not enough free
|
|
128
|
+
space, or the new profile already holds a *different* version of this
|
|
129
|
+
conversation (an existing older copy of the same conversation is replaced
|
|
130
|
+
safely; a different conversation is refused). The instance starts fresh and
|
|
131
|
+
`handover_chars` says how much context the new session received. Relay
|
|
132
|
+
`carry_failed` plainly to the user.
|
|
133
|
+
|
|
134
|
+
- `conversation_carried_over: true` with no `carry_failed` and no
|
|
135
|
+
`conversation_note` — the backend shares its history across profiles (codex)
|
|
136
|
+
or some other case where no copy was needed; relay the `conversation_note`
|
|
137
|
+
regardless.
|
|
138
|
+
|
|
139
|
+
**Always read and relay `conversation_carried_over`, `conversation_note` and
|
|
140
|
+
`carry_failed` from the actual response.** Do not predict the outcome.
|
|
141
|
+
|
|
81
142
|
**For codex** the reply says `conversation_carried_over: true` and carries a
|
|
82
143
|
`conversation_note`. Relay it as what it is — a statement about where the
|
|
83
144
|
history lives, not a promise about what happens next. The accurate sentence is
|
|
@@ -116,9 +177,15 @@ Say "the default login", not "no subscription".
|
|
|
116
177
|
`get_usage` returns one row per subscription: `Kiro (work)` and
|
|
117
178
|
`Kiro (personal)` rather than a single `Kiro`. Read them out separately — they
|
|
118
179
|
are two quotas, and adding them together would give a number that is true of
|
|
119
|
-
neither. An agent with no profile appears under the plain `Kiro` row.
|
|
180
|
+
neither. An agent with no profile appears under the plain `Kiro` row. Codex works
|
|
181
|
+
the same way: `Codex (<profile>)` rows next to the plain `Codex`.
|
|
120
182
|
|
|
121
|
-
|
|
183
|
+
Claude Code also has a row per profile: `Claude (work)`, `Claude (personal)`,
|
|
184
|
+
next to the plain `Claude` for the default login. A profile reads quota from its
|
|
185
|
+
own login; a profile that is configured but has never been signed in shows
|
|
186
|
+
**Not logged in — run `/login claude-code <profile>` to sign in**.
|
|
187
|
+
|
|
188
|
+
A kiro profile that is configured but has never been logged in still gets a row,
|
|
122
189
|
reading **Signed out — run `kiro-cli` to log in**. That is the reminder to go
|
|
123
190
|
and log it in, so report it as such rather than as a missing subscription.
|
|
124
191
|
|
|
@@ -129,16 +196,20 @@ and log it in, so report it as such rather than as a missing subscription.
|
|
|
129
196
|
- Quotas only add up if the profiles are genuinely different billing accounts.
|
|
130
197
|
Two profiles logged into the same account do not double anything, and it is
|
|
131
198
|
worth saying so before someone sets this up expecting more headroom.
|
|
132
|
-
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
199
|
+
- Claude Code profiles now each have their own usage row (`Claude (<profile>)`),
|
|
200
|
+
reading quota from that profile's own login.
|
|
201
|
+
- Switching a kiro profile does not carry the conversation across; the agent
|
|
202
|
+
gets a summary of the work, not the transcript. Say anything that must survive
|
|
203
|
+
verbatim in the channel before switching. For claude-code, AgEnD copies the
|
|
204
|
+
conversation automatically; relay `conversation_carried_over` and, if it is
|
|
205
|
+
false, the `carry_failed` reason and the cold-cache note from
|
|
206
|
+
`conversation_note` when carry succeeds.
|
|
136
207
|
## Do not
|
|
137
208
|
|
|
138
209
|
- Do not invent a profile that has never been logged in and report success —
|
|
139
210
|
the switch is refused, and the refusal tells you what to relay.
|
|
140
|
-
- Do not set `credential_profile` for a backend other than `kiro-cli`
|
|
141
|
-
`
|
|
211
|
+
- Do not set `credential_profile` for a backend other than `kiro-cli`, `codex`
|
|
212
|
+
or `claude-code`; it is ignored, and the config validator warns about it.
|
|
142
213
|
- Do not tell a codex user their conversation will definitely continue across a
|
|
143
214
|
switch. Say the history is shared; that part is verified.
|
|
144
215
|
- Do not use a profile name with slashes or spaces — it becomes a directory
|
|
@@ -7,11 +7,20 @@ roles: [general, worker]
|
|
|
7
7
|
## How to send
|
|
8
8
|
|
|
9
9
|
Use fleet tools only (`send_to_instance`, `delegate_task`, `request_information`, `report_result`, `broadcast`):
|
|
10
|
-
- Call returns immediately: `{ sent: true, queued: true }` —
|
|
10
|
+
- Call returns immediately: `{ sent: true, queued: true }` (plus `delivery_id` / `operation_id` for a durable send) — the fleet **accepted** it and owns delivery from here. Acceptance is not delivery.
|
|
11
11
|
- **Do not wait** for the target to go idle; **do not** treat 30s IPC timeout as failure to re-send.
|
|
12
12
|
- **Error only if the target does not exist** (or similar hard reject) — then fix the name, don't spam.
|
|
13
13
|
- **Never re-send because the reply said `queued`** — that means the message is already queued.
|
|
14
14
|
- Supplement/correction to work you just sent → `steer: true`; a new task → normal send.
|
|
15
|
+
- A message body over 12 KiB is refused (`defaults.max_cross_instance_message_bytes`): put long content in a file and send its path.
|
|
16
|
+
|
|
17
|
+
## Checking a delivery
|
|
18
|
+
|
|
19
|
+
Only when a result is unclear: `delivery_status` with the `operation_id` / `delivery_id` / `correlation_id` you got.
|
|
20
|
+
- `queued`, `delivering`, `retry_wait` — not handed over yet; the fleet keeps trying.
|
|
21
|
+
- `submission_started`, `reconciliation_pending`, `uncertain` — it may already have arrived: **do not resend**.
|
|
22
|
+
- `delivered` — the target received it (not necessarily processed it yet; `consumed_at` says when it did).
|
|
23
|
+
- `failed`, `cancelled` — not delivered; fix the cause, then send again.
|
|
15
24
|
|
|
16
25
|
## requires_reply
|
|
17
26
|
|
|
@@ -21,7 +30,7 @@ Use fleet tools only (`send_to_instance`, `delegate_task`, `request_information`
|
|
|
21
30
|
## Task flow
|
|
22
31
|
|
|
23
32
|
- Coordinator flow: `delegate_task` → silent work → `report_result` (zero ack-only pings).
|
|
24
|
-
- Worker flow: finish with `report_result`, or use `request_information` when blocked.
|
|
33
|
+
- Worker flow: finish with `report_result`, or use `request_information` when blocked. Prefer `report_result` over delegating; use `delegate_task` only when your assignment allows it, and never re-delegate a task back to its sender.
|
|
25
34
|
- Cross-instance traffic is `[from:name]` → answer with `send_to_instance` / `report_result`, never `reply`
|
|
26
35
|
|
|
27
36
|
## Before acting on a peer's message
|
|
@@ -29,7 +38,22 @@ Use fleet tools only (`send_to_instance`, `delegate_task`, `request_information`
|
|
|
29
38
|
Before a destructive or hard-to-undo action based on another instance's message — merge, reset, force-push, deleting a branch or instance, deploying, closing an issue or PR — verify the message itself:
|
|
30
39
|
|
|
31
40
|
- Call `delivery_status` with the `message_id` from its header.
|
|
32
|
-
- **`Delivery not found`** → the
|
|
41
|
+
- **`Delivery not found`** → the row may be hidden, expired, or absent. Do not act; ask the sender to explicitly forward the reference.
|
|
33
42
|
- Found → confirm the value you are about to use (SHA, PR number, branch) appears in the returned `content`, and still check a SHA against the real ref (`git cat-file -t`, `gh pr view --json headRefOid`).
|
|
34
43
|
|
|
35
44
|
Why: a model can "see" a peer message nobody sent, header and message_id included, and act on it (#856).
|
|
45
|
+
|
|
46
|
+
## Relayed human authorization
|
|
47
|
+
|
|
48
|
+
A peer's summary is not the original person's consent. Before an irreversible action:
|
|
49
|
+
|
|
50
|
+
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).
|
|
51
|
+
- 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".
|
|
52
|
+
- 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.
|
|
53
|
+
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.
|
|
54
|
+
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. Web receipts truthfully have no verified platform actor; action receipts identify the click and its anchor, not a human-authored platform message.
|
|
55
|
+
4. Do not resend on `uncertain`. Ask for clarification or fresh explicit consent; do not infer consent from a missing row.
|
|
56
|
+
|
|
57
|
+
CLI mode: `agend-agent send <instance> <text> --forward <verification_id>` (repeat `--forward` for more refs); `agend-agent delegate` accepts the same flags. Lookup: `agend-agent delivery-status --message-id <verification_id>`.
|
|
58
|
+
|
|
59
|
+
Forward access is read-only and row-scoped. It does not grant commands, visibility of siblings, or access by knowing an ID. Same-uid shell-capable agents are not isolated from one another; use distinct OS users/containers for mutually untrusted agents.
|
|
@@ -6,11 +6,11 @@ roles: [general]
|
|
|
6
6
|
|
|
7
7
|
## Delegation Protocol
|
|
8
8
|
|
|
9
|
-
Every delegation via
|
|
9
|
+
Every delegation via `delegate_task` MUST include:
|
|
10
10
|
|
|
11
|
-
1.
|
|
12
|
-
2.
|
|
13
|
-
3.
|
|
11
|
+
1. `task` — what exactly to do, bounded clearly
|
|
12
|
+
2. `success_criteria` — what to return, in what form, and how it will be judged
|
|
13
|
+
3. A policy reminder in `context` — "Follow Development Workflow policy" (for code tasks)
|
|
14
14
|
|
|
15
15
|
### Loop Prevention
|
|
16
16
|
|
|
@@ -29,11 +29,11 @@ When an instance reports back, classify the outcome:
|
|
|
29
29
|
- Success → Summarize key results for user. Omit internal coordination noise.
|
|
30
30
|
- Partial → State what succeeded, what remains, proposed next steps.
|
|
31
31
|
- Failure → Retry up to 2 times. If still failing: try alternative instance, reduce scope, or return partial result clearly marked.
|
|
32
|
-
- No response →
|
|
32
|
+
- No response → when a `[system:reply-overdue]` notice arrives (after 15 min by default), check `describe_instance` and `delivery_status` before asking again. If still silent: report to user with options.
|
|
33
33
|
|
|
34
34
|
## Shared Decisions
|
|
35
35
|
|
|
36
|
-
Use post_decision
|
|
36
|
+
Use `post_decision` / `list_decisions` for any choice that affects more than 1 instance, changes an API contract, introduces a new dependency, or alters deployment process. The default `scope: "project"` reaches only instances in the same working directory — use `scope: "fleet"` for anything wider.
|
|
37
37
|
|
|
38
38
|
When instances disagree, collect both viewpoints, make a decision, and record it via post_decision.
|
|
39
39
|
|
|
@@ -47,6 +47,6 @@ When instances disagree, collect both viewpoints, make a decision, and record it
|
|
|
47
47
|
|
|
48
48
|
When users create specialized instances, suggest these configurations:
|
|
49
49
|
|
|
50
|
-
- **Reviewer instances
|
|
51
|
-
- **Collab mode**: For multi-bot channels,
|
|
50
|
+
- **Reviewer instances** (kiro): add `pre_task_command: "/chat load reviewer-base.json"` to reset context before each review. It is pasted before every message as-is, so on other backends use a command their CLI accepts.
|
|
51
|
+
- **Collab mode**: For multi-bot channels, a channel admin's `/collab` lets other bots' and webhooks' messages reach the instance.
|
|
52
52
|
- **Cost control**: Set per-instance `cost_guard` for expensive backends.
|
|
@@ -40,16 +40,16 @@ instances:
|
|
|
40
40
|
backend: kiro-cli
|
|
41
41
|
kiro_ui: legacy # default — current stable behavior
|
|
42
42
|
# kiro_ui: tui # try the newer TUI
|
|
43
|
-
# kiro_ui: v3 # try the v3 profile
|
|
44
43
|
```
|
|
44
|
+
`kiro_ui: v3` is refused by validation — do not set it.
|
|
45
45
|
Leave unset (or `legacy`) unless testing a newer profile. Ignored by other backends.
|
|
46
46
|
|
|
47
47
|
## Reply completion guard
|
|
48
48
|
|
|
49
49
|
`reply_completion_guard` detects a human-channel turn that ended without a
|
|
50
50
|
delivered reply and asks the agent to send one bounded recovery reply. It is
|
|
51
|
-
enabled by default for Claude Code
|
|
52
|
-
Kiro v3 is excluded because its turn-end signal is unverified.
|
|
51
|
+
enabled by default for Claude Code, Codex, Muse and Kiro legacy/TUI (it needs the
|
|
52
|
+
MCP server). Kiro v3 is excluded because its turn-end signal is unverified. Other
|
|
53
53
|
backends keep the setting but do not claim the protection is active.
|
|
54
54
|
|
|
55
55
|
Prefer a narrow per-instance override when one worker repeatedly finishes work
|
|
@@ -79,14 +79,14 @@ it does not turn tool-call text into proof that the reply reached the channel.
|
|
|
79
79
|
Fix all errors before `agend reload`; warnings are advisory.
|
|
80
80
|
|
|
81
81
|
**Common fleet.yaml mistakes:**
|
|
82
|
-
-
|
|
82
|
+
- `channel.mode` left out → it is `topic` (say so explicitly if you mean another mode)
|
|
83
83
|
- Wrong indentation (YAML is indent-sensitive)
|
|
84
84
|
- `topic_id` as string vs number (both work, but be consistent)
|
|
85
85
|
- `backend` typo (valid: `claude-code`, `codex`, `opencode`, `kiro-cli`, `antigravity`, `grok`, `muse`); `gemini-cli` was removed in 2.1.12 — use `antigravity`
|
|
86
86
|
- `model` using wrong format for the backend
|
|
87
87
|
|
|
88
88
|
**Common classicBot.yaml mistakes:**
|
|
89
|
-
- `allowed_guilds` values
|
|
89
|
+
- `allowed_guilds` values should be quoted strings: numbers are accepted, but a Discord ID above 2^53 loses digits as a YAML integer
|
|
90
90
|
- Channel IDs as keys must be quoted strings
|
|
91
91
|
- Missing `defaults` section (optional but recommended)
|
|
92
92
|
|
|
@@ -7,9 +7,9 @@ roles: [general]
|
|
|
7
7
|
## Check health
|
|
8
8
|
|
|
9
9
|
Prefer the fleet tools — they already know each instance's state:
|
|
10
|
-
- `
|
|
11
|
-
- `describe_instance("<name>")` — one instance's status, last activity, description.
|
|
12
|
-
- `
|
|
10
|
+
- `list_instances` — every instance with its status and `instance_state`: idle / working / stuck / paused / awaiting_input (the CLI is waiting at an on-screen dialog or input).
|
|
11
|
+
- `describe_instance("<name>")` — one instance's status, state, last activity, description.
|
|
12
|
+
- `get_fleet_status` — just the counts: total, running, paused, stopped.
|
|
13
13
|
|
|
14
14
|
The daemon derives idle/working/stuck itself (per-backend), so you do **not** need to
|
|
15
15
|
scrape prompts. Don't hand-write pane-text checks like `X% !>` — that prompt is
|
|
@@ -20,7 +20,7 @@ kiro-specific and wrong for claude-code / codex / grok / antigravity.
|
|
|
20
20
|
When the user wants the live screen (not just a status word):
|
|
21
21
|
- `get_instance_logs("<name>")` — recent output (the raw terminal stream).
|
|
22
22
|
- Raw terminal (last resort, no tool for the live pane):
|
|
23
|
-
`tmux capture-pane -t agend:<name> -e -p | tail -20` — keep `-e`: without it the screen's styling is lost.
|
|
23
|
+
`tmux capture-pane -t agend:<name> -e -p | tail -20` on the default AGEND_HOME (an isolated home uses session `agend-<hash>` on its own `-L` socket; `agend attach <name>` works in both) — keep `-e`: without it the screen's styling is lost.
|
|
24
24
|
|
|
25
25
|
**Faint text is not input.** A CLI paints its own suggestion or placeholder in the input box
|
|
26
26
|
exactly like typed text, only faint (Claude Code: `❯ Try "…"`, or a suggested next prompt).
|
|
@@ -7,18 +7,23 @@ roles: [general]
|
|
|
7
7
|
## Fleet Restart & Recovery
|
|
8
8
|
|
|
9
9
|
**Restart types:**
|
|
10
|
-
- `agend fleet restart` —
|
|
10
|
+
- `agend fleet restart` — graceful, in the same process: instances restart once idle (does **not** load new code)
|
|
11
|
+
- `agend fleet restart --reload` — full process restart: new code and new connections take effect
|
|
12
|
+
- `agend fleet restart <name>` — restart one instance now
|
|
11
13
|
- `agend reload` — SIGHUP hot-reload, reconciles instances without restarting the fleet process
|
|
12
14
|
- `restart_instance("<name>")` — single instance restart, reloads fleet.yaml first
|
|
15
|
+
- `agend restart` — restarts the AgEnD service itself (systemd / launchd / detached), not one instance
|
|
16
|
+
|
|
17
|
+
**From a fleet agent session**, `agend stop`, `agend restart`, `agend update`, `agend fleet stop` and `agend fleet restart` (without a name) affect every instance and are refused unless you pass `--yes`. Each is written to `restart-audit.log` first. `--force` is for an operator's own shell only.
|
|
13
18
|
|
|
14
19
|
**After tmux crash:**
|
|
15
|
-
- Fleet
|
|
20
|
+
- Fleet detects the tmux server's death and opens a recovery window: spawns and deliveries are held 30 s, then 2 min and 10 min if it crashes again (losing single windows while the server lives holds nothing)
|
|
16
21
|
- Some instances may fail to restart due to rate limits from simultaneous startup
|
|
17
22
|
- Fix: manually restart failed instances, or do another `agend fleet restart`
|
|
18
23
|
- Check failed instances: `agend ls` shows "stopped" status
|
|
19
24
|
|
|
20
25
|
**Rate limit recovery:**
|
|
21
|
-
- If
|
|
26
|
+
- If the log shows `PTY error: …rate limit…`, or the notice "crashed 3+ times shortly after launch — paused for recovery", wait 1-2 minutes
|
|
22
27
|
- Then `restart_instance` the affected instance
|
|
23
28
|
- Do NOT restart all instances simultaneously — this worsens rate limits
|
|
24
29
|
|
|
@@ -26,21 +31,16 @@ roles: [general]
|
|
|
26
31
|
|
|
27
32
|
**Update AgEnD to latest version:**
|
|
28
33
|
```bash
|
|
29
|
-
agend update
|
|
30
|
-
agend update --version 2.
|
|
34
|
+
agend update --yes # from a fleet session: the installed channel's latest (a beta stays on beta), then restart
|
|
35
|
+
agend update --version 2.2.0 --yes # a specific version
|
|
31
36
|
```
|
|
32
37
|
|
|
33
|
-
|
|
34
|
-
- Detects if sudo is needed (switches to nvm if so)
|
|
35
|
-
- Installs new version
|
|
36
|
-
- Verifies installation succeeded
|
|
37
|
-
- Updates service file (ExecStart path)
|
|
38
|
-
- Restarts fleet
|
|
38
|
+
It installs the selected release, checks the install, and restarts the fleet service. `--alpha` / `--beta` / `--stable` pick a channel; details in docs/cli.md.
|
|
39
39
|
|
|
40
40
|
**Manual restart (if update isn't needed):**
|
|
41
41
|
```bash
|
|
42
|
-
agend fleet restart
|
|
43
|
-
agend fleet
|
|
42
|
+
agend fleet restart --yes # graceful (SIGUSR2) — keeps sessions, reloads config
|
|
43
|
+
agend fleet restart --reload --yes # full process restart — new code takes effect
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
**NEVER do:**
|
|
@@ -22,7 +22,8 @@ roles: [general]
|
|
|
22
22
|
|
|
23
23
|
## Monitoring state
|
|
24
24
|
|
|
25
|
-
- `
|
|
26
|
-
activity (the daemon derives the state; don't scrape pane
|
|
25
|
+
- `describe_instance("<name>")` / `list_instances` — status + `instance_state` (idle / working /
|
|
26
|
+
stuck / paused / awaiting_input) + last activity (the daemon derives the state; don't scrape pane
|
|
27
|
+
prompts). `get_fleet_status` only counts running / paused / stopped.
|
|
27
28
|
- For the raw screen, see the fleet-health skill (`get_instance_logs` / tmux capture), including
|
|
28
29
|
why faint text in another instance's input box is a CLI suggestion, not the operator's input.
|
|
@@ -54,3 +54,9 @@ The user has already been shown the plain notice in this topic. When they ask, e
|
|
|
54
54
|
conversation, and the move cannot be undone.
|
|
55
55
|
- Never run `kiro-cli` yourself, and never delete or edit anything under `~/.kiro` or kiro's data directory.
|
|
56
56
|
- Never reply to the `[system:kiro-incompat]` notice itself. It is information, not a request.
|
|
57
|
+
|
|
58
|
+
## One kiro agent per instance (#906)
|
|
59
|
+
|
|
60
|
+
Since kiro-cli 2.21, each AgEnD kiro instance (tui / v2 engine) runs as its own kiro agent, holding only its own
|
|
61
|
+
AgEnD MCP server and instructions, and resumes its own conversation by id — instances sharing a working directory
|
|
62
|
+
no longer see each other's tools. Legacy (`kiro_ui: legacy`) launches are unchanged.
|
|
@@ -21,16 +21,16 @@ capability (cheap/fast vs deep reasoning), or the backend needs one to behave
|
|
|
21
21
|
| Backend | Omit `model` means | Notes |
|
|
22
22
|
|---|---|---|
|
|
23
23
|
| kiro-cli | account default | **`model: auto`** lets kiro pick per turn — usually what you want |
|
|
24
|
-
| claude-code | account default | ids are aliases: `sonnet`, `opus`, `haiku`, `opusplan`, `default` |
|
|
24
|
+
| claude-code | account default | ids are aliases: `sonnet`, `opus`, `haiku`, `opusplan`, `default`, `Fable`; `list_models` also offers the account's full ids (with `[1m]` variants) |
|
|
25
25
|
| codex | account default | |
|
|
26
26
|
| grok | account default | |
|
|
27
27
|
| antigravity | account default | |
|
|
28
|
-
| opencode | provider default | ids are **`provider/model`**,
|
|
28
|
+
| opencode | provider default | ids are **`provider/model`**, as `opencode models` prints them |
|
|
29
29
|
|
|
30
30
|
## Discover real names
|
|
31
31
|
|
|
32
|
-
**Use the `list_models` tool** — it reads the fleet's probe cache (
|
|
33
|
-
|
|
32
|
+
**Use the `list_models` tool** — it reads the fleet's probe cache (re-probed when
|
|
33
|
+
older than 1 h; never used past 24 h) and falls back to a live probe:
|
|
34
34
|
|
|
35
35
|
- `list_models({ backend: "kiro-cli" })` → the account catalog
|
|
36
36
|
- `list_models({ instance_name: "x" })` → read through **that instance's** config
|
|
@@ -47,11 +47,11 @@ Underlying commands, if you need them by hand:
|
|
|
47
47
|
|
|
48
48
|
| Backend | Command |
|
|
49
49
|
|---|---|
|
|
50
|
-
| kiro-cli | `kiro-cli --list-models` |
|
|
50
|
+
| kiro-cli | `kiro-cli chat --list-models --format json` |
|
|
51
51
|
| grok | `grok models` |
|
|
52
52
|
| opencode | `opencode models` |
|
|
53
53
|
| antigravity | `agy models` |
|
|
54
|
-
| codex |
|
|
54
|
+
| codex | `codex debug models` (with its CODEX_HOME set) — refreshes `models_cache.json` when it is older than a few minutes |
|
|
55
55
|
| claude-code | fixed alias set (no command) |
|
|
56
56
|
|
|
57
57
|
## Setting one on create_instance
|
|
@@ -65,9 +65,9 @@ Underlying commands, if you need them by hand:
|
|
|
65
65
|
## Two traps
|
|
66
66
|
|
|
67
67
|
**antigravity: keep the effort suffix.** The suffix is part of the selectable id,
|
|
68
|
-
not decoration —
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
not decoration — the same model at two effort levels is two different ids. Take
|
|
69
|
+
the id from `list_models` (e.g. `gemini-3.6-flash-high`), not the display label
|
|
70
|
+
the TUI shows.
|
|
71
71
|
|
|
72
72
|
**Pass-through: AgEnD does not gate model names.** An unknown id is warned about,
|
|
73
73
|
then handed to the CLI anyway. So a name missing from `list_models` may still be
|
|
@@ -55,11 +55,17 @@ The `channel_id` field explicitly binds a general to an adapter. Without it, mat
|
|
|
55
55
|
|---------|---------|-----|
|
|
56
56
|
| One general for two platforms | TG messages reply in DC | Add a second general with `channel_id` |
|
|
57
57
|
| `channels:` without unique `id` per entry | Adapter collision | Set `id: discord` / `id: telegram` |
|
|
58
|
-
| Using `channel:` (singular) for multi-platform | Second platform ignored | Switch to `channels:` array |
|
|
58
|
+
| Using `channel:` (singular) for multi-platform | Second platform ignored | Switch to `channels:` array (`channel:` is deprecated; the validator warns when both are set) |
|
|
59
|
+
|
|
60
|
+
## Web chat
|
|
61
|
+
|
|
62
|
+
The dashboard's web chat is one more way in, not a `channels:` entry: its messages reach an instance as
|
|
63
|
+
`[user:… via web, …]` and are answered with `reply` like any other. By default each is also copied to the
|
|
64
|
+
instance's own topic (`web.echo_to_channel: false` turns that off; ClassicBot rooms only with `web_echo: true`).
|
|
59
65
|
|
|
60
66
|
## Single → Multi Migration
|
|
61
67
|
|
|
62
68
|
1. Change `channel:` to `channels:` array, add `id` to existing entry
|
|
63
69
|
2. Add new platform entry with its own `id`
|
|
64
70
|
3. Add a general instance for the new platform with `channel_id: <new-adapter-id>`
|
|
65
|
-
4. Restart
|
|
71
|
+
4. Restart the whole process — connections are created when it starts: `agend fleet restart --reload` (`--yes` from a fleet session)
|
|
@@ -8,15 +8,17 @@ roles: [general, worker]
|
|
|
8
8
|
|
|
9
9
|
- `create_schedule` — make a schedule (recurring or one-shot).
|
|
10
10
|
- `list_schedules` — list all (optionally filter by target instance).
|
|
11
|
-
- `update_schedule` — change cron/at/message/timezone/enabled of an existing one.
|
|
11
|
+
- `update_schedule` — change cron/at/message/target/label/timezone/enabled of an existing one.
|
|
12
12
|
- `delete_schedule` — remove one.
|
|
13
13
|
|
|
14
14
|
A schedule injects `message` into the `target` instance when it fires
|
|
15
|
-
(`target` defaults to the current instance).
|
|
15
|
+
(`target` defaults to the current instance). With the worker or standard tool set you may
|
|
16
|
+
manage only schedules that target you and that you created; for anything else ask the
|
|
17
|
+
coordinator with `report_result`.
|
|
16
18
|
|
|
17
19
|
## Three ways to schedule
|
|
18
20
|
|
|
19
|
-
**1. Recurring (cron)** — `cron` + optional `timezone` (IANA
|
|
21
|
+
**1. Recurring (cron)** — `cron` + optional `timezone` (IANA; default the fleet's `defaults.scheduler.default_timezone`, `Asia/Taipei` unless set):
|
|
20
22
|
```
|
|
21
23
|
create_schedule({ cron: "0 9 * * *", message: "Daily standup summary", timezone: "Asia/Taipei" })
|
|
22
24
|
```
|
|
@@ -8,7 +8,8 @@ roles: [general]
|
|
|
8
8
|
|
|
9
9
|
When AgEnD sees `auth_error` it **pauses** that instance (`pausePending` sticky):
|
|
10
10
|
- One notification **per backend** (not per instance) — log in once, same-backend peers recover.
|
|
11
|
-
- Auth is **per-
|
|
11
|
+
- Auth is **per backend**: one re-login restores every instance on that backend (claude-code, codex, kiro-cli, grok, opencode, antigravity, muse).
|
|
12
|
+
- Re-login: `/login <backend>` (opencode: `opencode auth login` in a terminal), then wake the affected instance.
|
|
12
13
|
- Messages while paused stay in the **queue** — do not re-send.
|
|
13
14
|
- After the user re-auths: `wake` / normal wake clears `pausePending`.
|
|
14
15
|
|
|
@@ -24,7 +25,7 @@ Verified by running each one, not read from docs.
|
|
|
24
25
|
| **codex** | ⚠️ no index — parse rollout files | ✅ `codex exec resume <id>` | ❌ must parse the rollout |
|
|
25
26
|
| **antigravity** | ❌ index covers ~23%, 2 months stale | ✅ `agy --conversation <id>` | ⚠️ `title` empty, use `preview` |
|
|
26
27
|
|
|
27
|
-
**Restoring a specific session is a manual operator action, not an AgEnD feature.** AgEnD
|
|
28
|
+
**Restoring a specific session is a manual operator action, not an AgEnD feature.** AgEnD launches each backend on the instance's own session: codex `resume <id>` (the thread for this exact directory; `--last` only as a fallback when the session DB is unreadable and no other codex instance shares the repository), grok `--resume <id>`, kiro its own conversation id, claude-code `--continue` (only when the instance has a `session-id` marker and the directory has a Claude transcript). To reach any other session someone must drive the pane or the CLI by hand.
|
|
28
29
|
|
|
29
30
|
**kiro is the exception worth knowing:** its export → `/chat load` works on a **live, idle instance** with no restart. Every other backend needs the instance stopped (or the CLI run manually) because the session is chosen by a launch flag.
|
|
30
31
|
|
|
@@ -118,7 +119,7 @@ grep -h '"type":"ai-title"' <file>.jsonl | tail -1
|
|
|
118
119
|
```
|
|
119
120
|
A session with no `ai-title` line is simply untitled — say so rather than inventing a label.
|
|
120
121
|
|
|
121
|
-
**Restore:** `claude -r <session-id>` (or `claude --resume` for a picker that accepts a search term). `-c` / `--continue` takes the most recent for the cwd —
|
|
122
|
+
**Restore:** `claude -r <session-id>` (or `claude --resume` for a picker that accepts a search term). `-c` / `--continue` takes the most recent for the cwd — AgEnD launches with it only when the instance has a `session-id` marker and the cwd has a Claude transcript.
|
|
122
123
|
|
|
123
124
|
> ⚠️ **Check the ID exists before using it.** AgEnD guards `--continue` precisely because resuming a session that isn't there sends claude into a restart loop. Confirm the `<id>.jsonl` file is present in the encoded project dir first.
|
|
124
125
|
|
|
@@ -150,7 +151,7 @@ for ts, sid in sorted(out, reverse=True):
|
|
|
150
151
|
```
|
|
151
152
|
It opens many files, but only one line each, so it stays cheap.
|
|
152
153
|
|
|
153
|
-
**Restore:** `codex exec resume <session-id> "<prompt>"` non-interactively, or `codex resume <session-id>` for the TUI (bare `codex resume` opens a picker). `codex resume --last` is
|
|
154
|
+
**Restore:** `codex exec resume <session-id> "<prompt>"` non-interactively, or `codex resume <session-id>` for the TUI (bare `codex resume` opens a picker). AgEnD launches `codex resume <id>` with the thread recorded for this exact directory; `codex resume --last` is only its fallback (an unreadable session DB, no other codex instance in the repository). The ID argument also accepts a session *name*.
|
|
154
155
|
|
|
155
156
|
**Summary:** ❌ none available without parsing. `session_meta` carries only id/cwd/timestamp; to describe a session you must read further `event_msg` lines. Tell the user the timestamp and let them pick, rather than guessing at a topic.
|
|
156
157
|
|
|
@@ -186,6 +187,6 @@ cur.execute("SELECT conversation_id, preview, step_count, last_modified_time "
|
|
|
186
187
|
## Fork (source must be idle)
|
|
187
188
|
|
|
188
189
|
- **kiro:** `/chat save name.json -f` → `create_instance` → copy workspace file → `/chat load name.json`
|
|
189
|
-
- **claude-code:** copy the newest `*.jsonl` into the target's encoded project dir → start (
|
|
190
|
+
- **claude-code:** copy the newest `*.jsonl` into the target's encoded project dir → start (AgEnD adds `--continue` only if the target's instance dir also has its `session-id` marker)
|
|
190
191
|
- **grok:** `/fork` inside the TUI branches the conversation into a peer session
|
|
191
192
|
- Prefer `replace_instance` when the whole session is poisoned (see instance-lifecycle)
|
|
@@ -18,8 +18,8 @@ instances:
|
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
**kiro_ui 模式差異:**
|
|
21
|
-
- `kiro_ui: tui`:Kiro v2 TUI
|
|
22
|
-
- `kiro_ui: v3
|
|
21
|
+
- `kiro_ui: tui`:Kiro v2 TUI(需明確設定;預設是 `legacy`);本 skill 適用。
|
|
22
|
+
- `kiro_ui: v3`:目前會被設定驗證拒絕,不要設定。
|
|
23
23
|
- `kiro_ui: legacy`:舊 UI,互動行為不同,本 skill 不適用。
|
|
24
24
|
|
|
25
25
|
若修改 `kiro_ui`,先 reload 再 restart:
|
|
@@ -11,9 +11,10 @@ roles: [worker]
|
|
|
11
11
|
- Treat the assignment as the full scope unless the sender explicitly expands it.
|
|
12
12
|
- Work without acknowledgment-only messages. Silence means the task is in progress.
|
|
13
13
|
- Fleet orchestration is not yours: you do not have `create_instance`,
|
|
14
|
-
`delete_instance`, `restart_instance`, `deploy_template
|
|
15
|
-
the tools
|
|
16
|
-
with an explanation rather than silently
|
|
14
|
+
`delete_instance`, `restart_instance`, `deploy_template` or the team tools,
|
|
15
|
+
and the schedule tools reach only schedules that target you and that you
|
|
16
|
+
created. Anything else is refused with an explanation rather than silently
|
|
17
|
+
ignored. If the work needs more
|
|
17
18
|
capacity or another agent restarted, say so with `report_result` and let the
|
|
18
19
|
coordinator decide.
|
|
19
20
|
- You can still *look*: `list_schedules`, `list_deployments`, `list_instances`
|
|
@@ -38,3 +39,7 @@ Call `report_result` exactly once when the assignment is complete or genuinely b
|
|
|
38
39
|
- remaining risk, blocker, or follow-up, if any.
|
|
39
40
|
|
|
40
41
|
Do not put user-facing results only in terminal text; the fleet report is the delivery channel.
|
|
42
|
+
|
|
43
|
+
## Relayed human approval
|
|
44
|
+
|
|
45
|
+
For an irreversible action based on relayed consent, request an explicit `forwards` edge for the original human `verification_id`, then read its original content and origin with `delivery_status`. Each hop needs a forward; a peer's summary or a mentioned ID grants nothing. When you relay it, put the ID in `forwards` (even if your loaded copy of the tool's schema lacks the parameter: the server accepts it), not in the text. Require delivered and an owned proof_kind, and verify the actual platform/adapter/actor plus the exact resource. Hidden/expired/uncertain receipts are not consent and must not trigger a resend. See the cross-instance-messaging skill.
|