@songsid/agend 2.3.2 → 2.3.3-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/dist/agent-cli-instructions.md +2 -2
- package/dist/agent-cli.js +13 -112
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.d.ts +0 -1
- package/dist/agent-endpoint.js +1 -9
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-whats-new.d.ts +23 -5
- package/dist/agent-whats-new.js +58 -40
- package/dist/agent-whats-new.js.map +1 -1
- package/dist/auth-api.d.ts +0 -7
- package/dist/auth-api.js +1 -15
- package/dist/auth-api.js.map +1 -1
- package/dist/authority/authority-state.js +1 -1
- package/dist/authority/authority-state.js.map +1 -1
- package/dist/authority/web-authority.d.ts +9 -4
- package/dist/authority/web-authority.js +10 -5
- package/dist/authority/web-authority.js.map +1 -1
- package/dist/backend/antigravity.js +6 -1
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-code.d.ts +20 -1
- package/dist/backend/claude-code.js +54 -29
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/claude-transcript-errors.d.ts +18 -0
- package/dist/backend/claude-transcript-errors.js +19 -0
- package/dist/backend/claude-transcript-errors.js.map +1 -0
- package/dist/backend/codex-session-lookup.d.ts +16 -3
- package/dist/backend/codex-session-lookup.js +45 -11
- package/dist/backend/codex-session-lookup.js.map +1 -1
- package/dist/backend/codex.d.ts +16 -0
- package/dist/backend/codex.js +184 -35
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/grok.js +58 -12
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro-reconcile-store.js +8 -1
- package/dist/backend/kiro-reconcile-store.js.map +1 -1
- package/dist/backend/kiro.d.ts +0 -5
- package/dist/backend/kiro.js +2 -10
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/muse.js +2 -1
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/types.d.ts +53 -4
- package/dist/backend/types.js.map +1 -1
- package/dist/bundled-skills.d.ts +4 -6
- package/dist/bundled-skills.js +10 -14
- package/dist/bundled-skills.js.map +1 -1
- package/dist/channel/adapters/discord.js +60 -17
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/mcp-server.js +5 -5
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.d.ts +1 -3
- package/dist/channel/mcp-tools.js +4 -58
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/classic-channel-manager.d.ts +4 -1
- package/dist/classic-channel-manager.js +21 -7
- package/dist/classic-channel-manager.js.map +1 -1
- package/dist/cli.js +23 -6
- package/dist/cli.js.map +1 -1
- package/dist/config-history.d.ts +50 -0
- package/dist/config-history.js +263 -0
- package/dist/config-history.js.map +1 -0
- package/dist/config-validator.js +10 -8
- package/dist/config-validator.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.js +11 -4
- package/dist/config.js.map +1 -1
- package/dist/cross-instance-envelope.d.ts +10 -5
- package/dist/cross-instance-envelope.js +20 -17
- package/dist/cross-instance-envelope.js.map +1 -1
- package/dist/daemon.d.ts +130 -64
- package/dist/daemon.js +603 -428
- package/dist/daemon.js.map +1 -1
- package/dist/daily-summary.d.ts +8 -1
- package/dist/daily-summary.js +8 -5
- package/dist/daily-summary.js.map +1 -1
- package/dist/dashboard-live.d.ts +1 -1
- package/dist/dashboard-live.js +3 -3
- package/dist/dashboard-live.js.map +1 -1
- package/dist/dashboard-permissions.d.ts +1 -1
- package/dist/dashboard-permissions.js +1 -3
- package/dist/dashboard-permissions.js.map +1 -1
- package/dist/delivery-outbox.d.ts +31 -22
- package/dist/delivery-outbox.js +119 -161
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-outbox.test.js +10 -25
- package/dist/delivery-outbox.test.js.map +1 -1
- package/dist/doctor.d.ts +4 -0
- package/dist/doctor.js +16 -1
- package/dist/doctor.js.map +1 -1
- package/dist/fleet-level-config.js +1 -1
- package/dist/fleet-level-config.js.map +1 -1
- package/dist/fleet-manager.d.ts +74 -66
- package/dist/fleet-manager.js +285 -414
- package/dist/fleet-manager.js.map +1 -1
- package/dist/fleet-process-handlers.d.ts +5 -0
- package/dist/fleet-process-handlers.js +21 -0
- package/dist/fleet-process-handlers.js.map +1 -1
- package/dist/fleet-service-owner.d.ts +11 -0
- package/dist/fleet-service-owner.js +3 -0
- package/dist/fleet-service-owner.js.map +1 -0
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +11 -1
- package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +1 -1
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +1 -1
- package/dist/general-knowledge/skills/session-management/SKILL.md +7 -1
- package/dist/general-knowledge/skills/web-appearance/SKILL.md +13 -204
- package/dist/general-knowledge/skills/web-dashboard/SKILL.md +30 -68
- package/dist/instance-lifecycle.d.ts +19 -0
- package/dist/instance-lifecycle.js +73 -15
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.js +6 -7
- package/dist/instructions.js.map +1 -1
- package/dist/kiro-reconcile.js +3 -3
- package/dist/kiro-reconcile.js.map +1 -1
- package/dist/locale.js +96 -58
- package/dist/locale.js.map +1 -1
- package/dist/log-service.js +1 -1
- package/dist/log-service.js.map +1 -1
- package/dist/needs-you-hub.d.ts +1 -0
- package/dist/needs-you-hub.js +6 -3
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you-live.d.ts +3 -1
- package/dist/needs-you-live.js +24 -2
- package/dist/needs-you-live.js.map +1 -1
- package/dist/needs-you.d.ts +13 -2
- package/dist/needs-you.js +11 -1
- package/dist/needs-you.js.map +1 -1
- package/dist/notify-socket.d.ts +10 -0
- package/dist/notify-socket.js +45 -0
- package/dist/notify-socket.js.map +1 -0
- package/dist/outbound-handlers.js +20 -8
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +0 -62
- package/dist/outbound-schemas.js +4 -43
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/parked-notices.d.ts +87 -0
- package/dist/parked-notices.js +194 -0
- package/dist/parked-notices.js.map +1 -0
- package/dist/public-link-progress.d.ts +5 -2
- package/dist/public-link-progress.js +4 -3
- package/dist/public-link-progress.js.map +1 -1
- package/dist/public-web-gateway.js +0 -9
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +12 -0
- package/dist/public-web-link.js +29 -5
- package/dist/public-web-link.js.map +1 -1
- package/dist/quota-notice.d.ts +23 -0
- package/dist/quota-notice.js +22 -0
- package/dist/quota-notice.js.map +1 -0
- package/dist/scheduler/task-board.d.ts +17 -25
- package/dist/scheduler/task-board.js +29 -39
- package/dist/scheduler/task-board.js.map +1 -1
- package/dist/sd-notify.d.ts +23 -15
- package/dist/sd-notify.js +88 -29
- package/dist/sd-notify.js.map +1 -1
- package/dist/search/search-docs.d.ts +1 -1
- package/dist/search/search-docs.js +2 -2
- package/dist/search/search-docs.js.map +1 -1
- package/dist/settings-api.d.ts +16 -1
- package/dist/settings-api.js +56 -16
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +3 -1
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-confirmation.d.ts +17 -3
- package/dist/settings-confirmation.js +8 -5
- package/dist/settings-confirmation.js.map +1 -1
- package/dist/settings-effect.js +0 -2
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.js +31 -1
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/setup-wizard.d.ts +3 -0
- package/dist/setup-wizard.js +4 -2
- package/dist/setup-wizard.js.map +1 -1
- package/dist/task-board-waker.d.ts +43 -1
- package/dist/task-board-waker.js +121 -9
- package/dist/task-board-waker.js.map +1 -1
- package/dist/tmux-control.d.ts +1 -1
- package/dist/tmux-control.js +3 -2
- package/dist/tmux-control.js.map +1 -1
- package/dist/tmux-manager.js +18 -16
- package/dist/tmux-manager.js.map +1 -1
- package/dist/tmux-read.d.ts +2 -0
- package/dist/tmux-read.js +7 -1
- package/dist/tmux-read.js.map +1 -1
- package/dist/tool-permissions.js +3 -10
- package/dist/tool-permissions.js.map +1 -1
- package/dist/topic-commands.d.ts +29 -7
- package/dist/topic-commands.js +97 -37
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-monitor.d.ts +7 -0
- package/dist/transcript-monitor.js +48 -3
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +5 -0
- package/dist/tunnel/cloudflared.js +32 -1
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/named-diagnostics.d.ts +2 -1
- package/dist/tunnel/named-diagnostics.js +4 -1
- package/dist/tunnel/named-diagnostics.js.map +1 -1
- package/dist/tunnel/named-link-test.d.ts +90 -0
- package/dist/tunnel/named-link-test.js +270 -0
- package/dist/tunnel/named-link-test.js.map +1 -0
- package/dist/tunnel/purpose-lane.d.ts +3 -1
- package/dist/tunnel/purpose-lane.js +2 -0
- package/dist/tunnel/purpose-lane.js.map +1 -1
- package/dist/types.d.ts +9 -11
- package/dist/ui/chat-ambient.js +4 -4
- package/dist/ui/chat-commands.js +3 -2
- package/dist/ui/chat-store.js +4 -1
- package/dist/ui/chat-strings.js +12 -46
- package/dist/ui/chat-thread.js +51 -59
- package/dist/ui/fleet-office-skin.js +37 -14
- package/dist/ui/fleet-office.js +31 -7
- package/dist/ui/html-attachment.js +22 -8
- package/dist/ui/panel-chat.js +21 -50
- package/dist/ui/panel-log.js +2 -2
- package/dist/ui/panel-needs.js +11 -9
- package/dist/ui/panel-settings.js +5 -3
- package/dist/ui/preview-panel.js +12 -21
- package/dist/ui/preview.js +10 -3
- package/dist/ui/search-dialog.js +30 -14
- package/dist/ui/settings-appearance.js +3 -37
- package/dist/ui/settings-confirm.js +18 -0
- package/dist/ui/settings-guests.js +13 -4
- package/dist/ui/settings-learn.js +1 -1
- package/dist/ui/settings-mods.js +5 -12
- package/dist/ui/settings-named-test.js +144 -0
- package/dist/ui/settings-registry.js +0 -2
- package/dist/ui/settings-strings.js +16 -16
- package/dist/ui/settings-web-authority.js +4 -3
- package/dist/ui/shared/app-i18n.js +15 -4
- package/dist/ui/shared/app-needs.js +5 -1
- package/dist/ui/shared/app-prefs.js +17 -17
- package/dist/ui/shared/app-shell.js +47 -9
- package/dist/ui/shared/app-store.js +6 -2
- package/dist/ui/shared/app.css +33 -39
- package/dist/ui/shared/app.js +5 -4
- package/dist/ui/shared/instance-nav.js +9 -9
- package/dist/ui/shared/instance-switch.js +8 -2
- package/dist/ui/shared/panel-view.js +22 -8
- package/dist/ui/shared/view-strings.js +6 -0
- package/dist/ui/shared/web-authorize.js +35 -13
- package/dist/update-check.d.ts +13 -4
- package/dist/update-check.js +17 -4
- package/dist/update-check.js.map +1 -1
- package/dist/usage/usage-api.d.ts +3 -0
- package/dist/usage/usage-api.js +5 -1
- package/dist/usage/usage-api.js.map +1 -1
- package/dist/view-api.d.ts +2 -0
- package/dist/view-api.js +64 -0
- package/dist/view-api.js.map +1 -1
- package/dist/web-api.d.ts +9 -17
- package/dist/web-api.js +257 -371
- package/dist/web-api.js.map +1 -1
- package/dist/web-appearance-tools.d.ts +0 -2
- package/dist/web-appearance-tools.js +2 -5
- package/dist/web-appearance-tools.js.map +1 -1
- package/dist/web-appearance-view.d.ts +0 -6
- package/dist/web-appearance-view.js +0 -1
- package/dist/web-appearance-view.js.map +1 -1
- package/dist/web-appearance.d.ts +14 -7
- package/dist/web-appearance.js +5 -6
- package/dist/web-appearance.js.map +1 -1
- package/dist/web-asset-parts.d.ts +1 -17
- package/dist/web-asset-parts.js +1 -15
- package/dist/web-asset-parts.js.map +1 -1
- package/dist/web-auth.js +1 -7
- package/dist/web-auth.js.map +1 -1
- package/dist/web-chat-history.d.ts +3 -7
- package/dist/web-chat-history.js +10 -17
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-commands.d.ts +9 -1
- package/dist/web-commands.js +13 -0
- package/dist/web-commands.js.map +1 -1
- package/dist/web-experimental.d.ts +3 -8
- package/dist/web-experimental.js +9 -33
- package/dist/web-experimental.js.map +1 -1
- package/dist/web-guest-access.d.ts +40 -2
- package/dist/web-guest-access.js +50 -14
- package/dist/web-guest-access.js.map +1 -1
- package/dist/web-mod-bundle.d.ts +2 -45
- package/dist/web-mod-bundle.js +15 -63
- package/dist/web-mod-bundle.js.map +1 -1
- package/dist/web-mod-store.d.ts +3 -48
- package/dist/web-mod-store.js +30 -97
- package/dist/web-mod-store.js.map +1 -1
- package/dist/web-prefs.d.ts +13 -0
- package/dist/web-prefs.js +38 -0
- package/dist/web-prefs.js.map +1 -1
- package/dist/web-preview.d.ts +6 -13
- package/dist/web-preview.js +12 -23
- package/dist/web-preview.js.map +1 -1
- package/dist/web-session.d.ts +11 -3
- package/dist/web-session.js +22 -11
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +1 -1
- package/dist/web-settings-patch.js +9 -7
- package/dist/web-settings-patch.js.map +1 -1
- package/dist/web-settings-tools.d.ts +0 -13
- package/dist/web-settings-tools.js +12 -84
- package/dist/web-settings-tools.js.map +1 -1
- package/dist/workflow-templates/default.md +2 -2
- package/dist/working-recovery.d.ts +0 -2
- package/dist/working-recovery.js +2 -23
- package/dist/working-recovery.js.map +1 -1
- package/launcher/agend-install.cjs +7 -1
- package/launcher/fleet-service-owner.cjs +150 -0
- package/package.json +1 -1
- package/dist/general-knowledge/skills/web-appearance/SKILL.canvas-worker-off.md +0 -376
- package/dist/general-knowledge/skills/web-dashboard/SKILL.canvas-worker-off.md +0 -673
- package/dist/task-board-summary.d.ts +0 -101
- package/dist/task-board-summary.js +0 -177
- package/dist/task-board-summary.js.map +0 -1
- package/dist/ui/app-effects.js +0 -251
- package/dist/ui/chat-effect-posters.js +0 -42
- package/dist/ui/chat-effects.js +0 -167
- package/dist/ui/effect-trial-controller.js +0 -124
- package/dist/ui/effect-trial-offer.js +0 -2
- package/dist/ui/effect-trial-panel.js +0 -40
- package/dist/ui/effects-waker.js +0 -2
- package/dist/ui/settings-effects.js +0 -202
- package/dist/ui/settings-owner-effects.js +0 -82
- package/dist/ui/shared/effect-app-runtime.js +0 -299
- package/dist/ui/shared/effect-baseline.js +0 -64
- package/dist/ui/shared/effect-chat-runtime.js +0 -162
- package/dist/ui/shared/effect-cursor.js +0 -126
- package/dist/ui/shared/effect-display-metadata.js +0 -39
- package/dist/ui/shared/effect-frame.js +0 -146
- package/dist/ui/shared/effect-geometry.js +0 -137
- package/dist/ui/shared/effect-host-style.js +0 -10
- package/dist/ui/shared/effect-owner-regions.js +0 -74
- package/dist/ui/shared/effect-owner-source.js +0 -122
- package/dist/ui/shared/effect-policy.js +0 -151
- package/dist/ui/shared/effect-poster-reader.js +0 -98
- package/dist/ui/shared/effect-posters.js +0 -117
- package/dist/ui/shared/effect-profiler.js +0 -184
- package/dist/ui/shared/effect-profiles.js +0 -65
- package/dist/ui/shared/effect-registry.js +0 -545
- package/dist/ui/shared/effect-runtime-loader.js +0 -236
- package/dist/ui/shared/effect-safety.js +0 -153
- package/dist/ui/shared/effect-stock-snapshot.js +0 -43
- package/dist/ui/shared/effect-stock-trust.js +0 -217
- package/dist/ui/shared/effect-trial-shadow.js +0 -62
- package/dist/ui/shared/effect-trial-source.js +0 -103
- package/dist/ui/shared/effect-trial-stage.js +0 -170
- package/dist/ui/shared/effect-trial.css +0 -40
- package/dist/ui/shared/feature-flags.js +0 -127
- package/dist/ui/shared/owner-effect-prefs.js +0 -117
- package/dist/upgrade-notices.d.ts +0 -17
- package/dist/upgrade-notices.js +0 -93
- package/dist/upgrade-notices.js.map +0 -1
- package/dist/web-effect-bootstrap.d.ts +0 -12
- package/dist/web-effect-bootstrap.js +0 -49
- package/dist/web-effect-bootstrap.js.map +0 -1
- package/dist/web-effect-bundle.d.ts +0 -28
- package/dist/web-effect-bundle.js +0 -171
- package/dist/web-effect-bundle.js.map +0 -1
- package/dist/web-effect-canonical.d.ts +0 -8
- package/dist/web-effect-canonical.js +0 -27
- package/dist/web-effect-canonical.js.map +0 -1
- package/dist/web-effect-library.d.ts +0 -114
- package/dist/web-effect-library.js +0 -530
- package/dist/web-effect-library.js.map +0 -1
- package/dist/web-effect-playback.d.ts +0 -30
- package/dist/web-effect-playback.js +0 -71
- package/dist/web-effect-playback.js.map +0 -1
- package/dist/web-effect-poster.d.ts +0 -8
- package/dist/web-effect-poster.js +0 -52
- package/dist/web-effect-poster.js.map +0 -1
- package/dist/web-effect-profiles.d.ts +0 -118
- package/dist/web-effect-profiles.js +0 -181
- package/dist/web-effect-profiles.js.map +0 -1
- package/dist/web-effect-service.d.ts +0 -93
- package/dist/web-effect-service.js +0 -335
- package/dist/web-effect-service.js.map +0 -1
- package/dist/web-effect-tools.d.ts +0 -48
- package/dist/web-effect-tools.js +0 -129
- package/dist/web-effect-tools.js.map +0 -1
- package/dist/web-effect-trials.d.ts +0 -86
- package/dist/web-effect-trials.js +0 -204
- package/dist/web-effect-trials.js.map +0 -1
- package/dist/web-effect-upload.d.ts +0 -27
- package/dist/web-effect-upload.js +0 -185
- package/dist/web-effect-upload.js.map +0 -1
- package/dist/web-effect-worker.d.ts +0 -8
- package/dist/web-effect-worker.js +0 -170
- package/dist/web-effect-worker.js.map +0 -1
- package/dist/web-effect.d.ts +0 -103
- package/dist/web-effect.js +0 -153
- package/dist/web-effect.js.map +0 -1
- package/dist/web-experimental-http.d.ts +0 -2
- package/dist/web-experimental-http.js +0 -12
- package/dist/web-experimental-http.js.map +0 -1
- package/dist/web-mod-agent.d.ts +0 -50
- package/dist/web-mod-agent.js +0 -207
- package/dist/web-mod-agent.js.map +0 -1
|
@@ -1,673 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: web-dashboard
|
|
3
|
-
description: Where things are on the AgEnD web dashboard and what they do — signing in, the chat, Needs you, Fleet (org chart, live traffic), usage and the cache report, the Log, schedules, every Settings tab and control with its config key, and troubleshooting. Use it to answer "where is X / what does Y do / how do I Z" about the web.
|
|
4
|
-
roles: [general, worker, classic]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## How to use this skill
|
|
8
|
-
|
|
9
|
-
Look the question up in the index, then relay the short answer in the user's words. The labels below are the
|
|
10
|
-
English UI labels (the page also has 中文). Before you state a value the user configured (a limit, a switch), read
|
|
11
|
-
it: `get_fleet_config` shows fleet.yaml; this skill gives defaults. Never invent a control that is not listed here.
|
|
12
|
-
Never tell anyone to kill `wslrelay` or run `wsl --shutdown` (see Troubleshooting).
|
|
13
|
-
|
|
14
|
-
For how *you* look on the dashboard (theme, identity card, colour, widgets and ambient effects), load `web-appearance`.
|
|
15
|
-
|
|
16
|
-
## Index
|
|
17
|
-
|
|
18
|
-
| The user asks about… | Section |
|
|
19
|
-
|---|---|
|
|
20
|
-
| getting in, `/web`, codes, "Send me a new code", the public link, sessions, signing out, `/view`, guests | [Sign-in and access](#sign-in-and-access) |
|
|
21
|
-
| sending, files, buttons, polls, HTML previews, code, tables, slash commands, Stop, history, copies in Discord/Telegram | [Chat](#chat) |
|
|
22
|
-
| the red badge, prompts, failed deliveries, desktop notifications | [Needs you](#needs-you) |
|
|
23
|
-
| "which agent did I ask about X", Ctrl+K, Ctrl+F in a chat, search results, filters | [Search](#search) |
|
|
24
|
-
| Ctrl+Z / undo / redo in a text box, "undo did nothing", "undo changed another box" | [Undo and redo](#undo-and-redo) |
|
|
25
|
-
| tasks, schedules, teams, org chart, live traffic lines, cache, Config tab | [Fleet](#fleet) |
|
|
26
|
-
| the sidebar list, filters, favorites, Chat / View / Log / Details, the Details page | [Finding an instance](#finding-an-instance) |
|
|
27
|
-
| subscription meters, plan badges, profiles, keep-warm, prompt cache | [Usage and the cache report](#usage-and-the-cache-report) |
|
|
28
|
-
| what an agent did step by step | [The Log tab](#the-log-tab) |
|
|
29
|
-
| any Settings control | [Settings](#settings) |
|
|
30
|
-
| themes, cards, widgets, ambient effects (petals, click stars) | [Look](#look) |
|
|
31
|
-
| blank page, preview refused, link fails, signed out, "live" missing | [Troubleshooting](#troubleshooting) |
|
|
32
|
-
|
|
33
|
-
Addresses: the dashboard is served on the host at `http://localhost:<health_port>` (default 19280), on 127.0.0.1
|
|
34
|
-
only. Pages: `/ui` chat, `/ui/fleet`, `/ui/needs`, `/view`, `/settings`.
|
|
35
|
-
|
|
36
|
-
## Sign-in and access
|
|
37
|
-
|
|
38
|
-
**Getting a code (`/web`).** Only a fleet admin can — someone in the bot connection's `access.allowed_users`.
|
|
39
|
-
- Discord: send `/web` in the General channel (`/dashboard` still answers but is deprecated: it says so, then opens `/web`). A menu offers **💻 AgEnD computer: get a
|
|
40
|
-
code** and, when `web.public_link.allow_public` is not `false`, **🌐 Other device (temporary public)**. Sent
|
|
41
|
-
anywhere else, `/web` answers privately (DM, else an ephemeral reply) with the local link and a code only.
|
|
42
|
-
- Telegram: `/web` works only in the General topic ("/web works in the General topic — please use it there"). In a
|
|
43
|
-
DM with the bot, `/start web` opens the same menu when one General is configured.
|
|
44
|
-
- On the host: `agend web` prints a code and opens the browser; `agend web --code` only prints it.
|
|
45
|
-
- If the bot has no admins: "⛔ /web disabled — this bot has no fleet admins: … is empty."
|
|
46
|
-
|
|
47
|
-
**The code.** 8 characters shown as `ABCD-EFGH` (case and the dash don't matter), valid 5 minutes, single use; asking
|
|
48
|
-
again replaces it. 5 wrong tries use it up; 20 failures in 15 minutes pause sign-in for 5 minutes ("Too many wrong
|
|
49
|
-
codes — sign-in is paused for a few minutes."). The sign-in page is **Sign in to AgEnD**: field **One-time code**,
|
|
50
|
-
button **Sign in**.
|
|
51
|
-
|
|
52
|
-
**Send me a new code.** On the sign-in page, for a browser that signed in before with a `/web` code (remembered 90
|
|
53
|
-
days). The code arrives by DM. Limits: one a minute and five an hour per browser; fleet-wide one per 20 s, 20 an hour.
|
|
54
|
-
|
|
55
|
-
**Local vs public link.** Local: the dashboard on the host itself (127.0.0.1; the address cannot be changed, only
|
|
56
|
-
`health_port`). Public: **🌐 Other device (temporary public)** starts a Cloudflare quick tunnel (an address under
|
|
57
|
-
`trycloudflare.com`), default 120 minutes (`web.public_link.ttl_minutes`, at most 480; `protocol` http2/quic/auto). With a fixed
|
|
58
|
-
hostname (named tunnel, `web.public_link.hostname`) the minutes go up to 10080, or `0` = no expiry, and
|
|
59
|
-
`web.public_link.auto_open` reopens the link after AgEnD starts for the admin who last opened it (nothing posted; sign-in
|
|
60
|
-
still needs a code).
|
|
61
|
-
Close it with **Close public link** → **Close link (signs public browsers out)**, `/web revoke`, or let it expire.
|
|
62
|
-
A public link is limited on purpose: no live stream (the page polls), no custom CSS, and Settings → Access & security, Look,
|
|
63
|
-
schedule edits and preference writes are refused. HTML previews work over it through a second tunnel
|
|
64
|
-
of their own (`web.preview_on_public_link`, default on).
|
|
65
|
-
|
|
66
|
-
**Sessions.**
|
|
67
|
-
- Local: 48 h from sign-in and 48 h unused (`web.session.local.absolute_hours` / `idle_hours`, 1–720). Background
|
|
68
|
-
polling and the live stream don't count as use. Sessions survive a fleet restart.
|
|
69
|
-
- Public link: always 4 h / 30 min unused, and they end when the link closes.
|
|
70
|
-
- At most 8 sessions; the least recently used is dropped.
|
|
71
|
-
- The session menu (sidebar): "Signed in · …", "Ends by <time> at the latest, or after <span> unused". With more than
|
|
72
|
-
one session it lists **Signed-in devices** (this one marked "· This device", others with **Sign out**) and **Sign
|
|
73
|
-
out everywhere**.
|
|
74
|
-
- `/web revoke` (in chat) signs every browser out, withdraws an unused code and closes the public link.
|
|
75
|
-
|
|
76
|
-
**`/view` without signing in.** `web.view_access`: `open` (default) or `session`. With `open`, anyone who can reach
|
|
77
|
-
the local address sees every instance's live terminal and the roster (status, context %, model, effort, backend,
|
|
78
|
-
tags, name, description, avatars, cards) and the usage meters — read only; editing says "Sign in to edit". Over a
|
|
79
|
-
public link `/view` always needs sign-in.
|
|
80
|
-
|
|
81
|
-
**Guests (#1920, #2348).** Off by default: `web.guests.enabled` (or Settings → Access & security → Guests). Then someone
|
|
82
|
-
who is not a fleet admin gets a code privately, by sending `/web` or from an admin's **Send sign-in code**, and signs in
|
|
83
|
-
as their own Discord or Telegram account. What a guest sees:
|
|
84
|
-
- **With explicit grants** (`web.guests.grants`, set in Settings → Access & security → Guests): exactly the agents an
|
|
85
|
-
admin granted that person, nothing else (default deny once the key exists). The admin picks the person from people
|
|
86
|
-
AgEnD has seen writing to an agent, ticks their agents (or ClassicBot rooms, #2667), saves (giving access or more agents waits for a fleet admin in
|
|
87
|
-
General; taking away applies at once and ends their sessions), then presses **Send sign-in code**, a DM, never a post.
|
|
88
|
-
Each code sent and each change to someone's access is in the event log (`guest_code_sent`, `guest_grant_changed`),
|
|
89
|
-
shown to admins under **Recent changes** in that section (no agent's Log tab shows them).
|
|
90
|
-
- **Without grants** (before an admin saves the first one): the agents they can already use in chat: their connection's
|
|
91
|
-
fleet topics and General (an `open` connection: only `web.guests.open_instances`), their own Telegram private
|
|
92
|
-
ClassicBot room, and ClassicBot group rooms while their membership is verified, minus any `web.guests.narrow`.
|
|
93
|
-
**Start from today's guests** turns that into grants.
|
|
94
|
-
|
|
95
|
-
They can chat there unless `web.guests.chat` is false, never send a command (text starting with `/` is refused), and the
|
|
96
|
-
agent sees them as `via web (guest)`. A guest's app has no Fleet, View, Settings or Needs you. To invite someone: turn it
|
|
97
|
-
on, grant them their agents in Settings → Access & security → Guests, and press **Send sign-in code** (or tell them to
|
|
98
|
-
send `/web`). The Guests section is not in Settings over the public link.
|
|
99
|
-
|
|
100
|
-
**Web authority (#1939).** A signed-in fleet admin's browser can speak as their own Discord or Telegram
|
|
101
|
-
account. The one row under the composer (bottom left, before the Enter hint) says **Not verified · Authorize**; the
|
|
102
|
-
session menu says **Not verified · Authorize this browser**. Pressing it
|
|
103
|
-
sends a card to that account's DM, saying which browser (device, on this computer or the network, when, until when), with
|
|
104
|
-
**Confirm** and **Not me**. A card left for 5 minutes is marked expired on the card, and the line offers Authorize
|
|
105
|
-
again. Confirm within 5 minutes and the session menu says **Verified · speaks as you until …**; the composer's row says
|
|
106
|
-
just **✓ Verified**, with the until-when in its tooltip, its accessible name and a tap. That
|
|
107
|
-
browser's messages then carry the account's authority in their delivery receipt for `max_session_hours` (default 48).
|
|
108
|
-
Not me signs that browser out, also after Confirm, from the same card. At most one card waits per browser, and 3 an hour
|
|
109
|
-
per account. Never for a guest. Over the admin's own named link (#2453) only with **Also over my named link**
|
|
110
|
-
(`named_link`, off by default); over the temporary public link `/web` opens only with **Also over the temporary public
|
|
111
|
-
link** (`quick_link`, off by default, §0.3). That authority ends with the link, and the card says "over your named link"
|
|
112
|
-
or "over the temporary public link". When a browser can't be authorized, the line says why (with a link to Settings when the switch, "Only
|
|
113
|
-
this computer" or the named-link option is the reason). Settings → Access & security → **Web authority** (`web.verified_authority`, on
|
|
114
|
-
by default) has the switch, **Only this computer can authorize** (`loopback_only`), **Also over my named link** (shown
|
|
115
|
-
with a fixed hostname), **Also over the temporary public link**, the hours, the authorized sessions, and **Revoke web authority** (or `/web revoke`). Every change
|
|
116
|
-
there applies at once, except turning a link's option on: a General or the host confirms that, never the browser asking.
|
|
117
|
-
Agents then see that browser's messages as `via web (verified)` and check their receipt like a Discord or Telegram message.
|
|
118
|
-
|
|
119
|
-
## Chat
|
|
120
|
-
|
|
121
|
-
A message to a paused agent wakes it through the same delivery path as Discord/Telegram, including ClassicBot. The composer shows **Waking…**; a refused wake explains why, keeps the draft/files and offers **Retry send**. No automatic resend. Stopped agents still require Start. Upload/history/Cancel do not wake agents. Existing guest/public-link send permissions are unchanged.
|
|
122
|
-
|
|
123
|
-
**Sending.** Type and press Enter. A message sent while the agent works waits its turn; `/steer <text>` goes into
|
|
124
|
-
the current turn, `/btw <question>` asks a side question. **Stop reply** (or Esc) interrupts the reply and drops
|
|
125
|
-
queued messages. Text is capped at 16,384 characters; a paste over 4,000 characters becomes a `pasted-….txt`
|
|
126
|
-
attachment (its chip has **As text** to undo that).
|
|
127
|
-
|
|
128
|
-
**Ticks** under your message: ◷ waiting behind another message · ✓ handed to the agent · ✓✓ the agent has it ·
|
|
129
|
-
! not delivered · ⊘ dropped by Stop. There is no "read" tick. **Reactions** (#2305): an agent may answer a message that
|
|
130
|
-
only acknowledges ("OK", "thanks") with an emoji under the person's bubble instead of a reply — live, kept after a
|
|
131
|
-
reload, also on the message's Discord/Telegram copy when the fleet posted one; it counts as the turn's answer.
|
|
132
|
-
|
|
133
|
-
**Files.** 📎, drag and drop ("Drop files to attach them") or paste. Up to 5 files, 50 MB each, 100 MB per message
|
|
134
|
-
(`web.upload_max_file_mb` / `web.upload_max_total_mb`, 1–500; over a public link at most 95 MB per file). The type is
|
|
135
|
-
read from the bytes: PNG/JPEG/GIF/WebP are photos, PDF a document, UTF-8 a text file; anything else (archives,
|
|
136
|
-
binaries, `.html`/`.svg` and other markup) is stored as **download-only**. The agent receives the path in its
|
|
137
|
-
workspace `inbox/`; an unused upload is deleted after 30 minutes.
|
|
138
|
-
|
|
139
|
-
**Replying to a message (#2272).**
|
|
140
|
-
- **How:** the ↩ on hover, a right-click (Reply / Copy text / Copy link), a swipe left (as in Telegram; a swipe right still opens the drawer) or long-press on a phone, or R on a focused message. A bar above the composer shows what is answered; ✕ or Esc cancels.
|
|
141
|
-
- **The sent bubble** shows the quote, and clicking it jumps to the original.
|
|
142
|
-
- **The agent** gets `(reply_to: "…")`, exactly as from a Discord or Telegram reply, read by the server from the quoted message (one line, at most 500 characters). Nothing new for guests: they reply only to what they can see.
|
|
143
|
-
- **The channel echo** quotes only a message that was already in that channel.
|
|
144
|
-
|
|
145
|
-
**In replies.** Images inline; video and audio play inline; Markdown, CSV, JSON, code and text files get a **Show**
|
|
146
|
-
card (200 lines, then "Show all … lines"); other files download. Code blocks have a language tag, **Wrap** and
|
|
147
|
-
**Copy**, and fold after 30 lines. Each reply has **Copy this reply**. Markdown: headings, lists, quotes, bold/italic/
|
|
148
|
-
strike, links, and tables (header row plus separator, alignment, up to 20 columns). Discord mentions show as names;
|
|
149
|
-
a Discord server emoji (`<:name:id>`) of the fleet's servers shows as its picture, and any other (or one whose picture
|
|
150
|
-
can't load) as `:name:`. Unicode emoji are drawn by the system's colour emoji font under every theme font (boxes on
|
|
151
|
-
Linux mean no colour emoji font is installed). There is no @-autocomplete in the composer.
|
|
152
|
-
|
|
153
|
-
**Buttons and polls.** An agent's reply can carry up to 10 buttons ("Choices"); a click shows as a 🔘 chip and the
|
|
154
|
-
agent receives `[button] <label>` (with `(value: …)` when it differs). Buttons expire after 24 h ("Expired — reply in
|
|
155
|
-
text"). Polls show "Poll", "Time left", "🗳 N answered"; voter names only when it closes.
|
|
156
|
-
|
|
157
|
-
**HTML previews.** An agent's ` ```html ` block or `.html` file gets a card: **Preview**, **Stop**, **Download**,
|
|
158
|
-
**Open in panel** (side panel: **Page** / **Code** / **Reload** / **Close**). Previews need a one-time opt-in, **Allow
|
|
159
|
-
HTML previews** (also in Settings → Preferences); it is a host-wide preference, and you still press Preview each time.
|
|
160
|
-
The page runs in a sandboxed frame on a second port (`health_port + 1`, default 19281). "Never preview HTML on this
|
|
161
|
-
device" turns it off for this browser session. Cards are at most 1 MiB; a cut-off block says "Truncated — ask the
|
|
162
|
-
agent to send it as a .html file."
|
|
163
|
-
|
|
164
|
-
**Slash commands** (the **Commands** palette): `/ctx`, `/compact [instructions]`, `/clear` (asks first), `/model
|
|
165
|
-
[name]`, `/backend [backend] [model] [effort]` (asks first), `/effort [level]`, `/cancel`, `/btw`, `/steer`, `/pause`,
|
|
166
|
-
`/wake`, `/save <file>` (not on a public link). Anything else: "Not a command here — Enter sends it as a message."
|
|
167
|
-
At 70% context, quick actions **Compact** and **Clear…** appear. `/raw <text>` (local only) passes text to the CLI
|
|
168
|
-
unwrapped.
|
|
169
|
-
|
|
170
|
-
**History.** The server keeps the last 500 messages (about 1M characters) per instance in its workspace
|
|
171
|
-
`web-chat.json`; the page loads the last 200. There is no "load older". After a restart, buttons and ticks are not
|
|
172
|
-
restored; files that can't be served again show as unavailable.
|
|
173
|
-
|
|
174
|
-
**Copies in Discord/Telegram (web echo).** For a fleet topic instance, each web message is also posted to its topic as
|
|
175
|
-
`🌐 web · <name>: …` (the first 500 characters plus attachment names; longer text says "(full text in web chat)").
|
|
176
|
-
Turn it off with Settings → Chat & connections → **Web echo** (`web.echo_to_channel`). ClassicBot rooms: per room,
|
|
177
|
-
`classicBot.yaml` `channels.<key>.web_echo` (Settings → Chat & connections → ClassicBot → the room → **Web echo**). Since 2.2.5
|
|
178
|
-
(#2054) a room echoes by default: an unset room follows `web.echo_to_channel`, `web_echo: false` keeps it off and
|
|
179
|
-
`web_echo: true` keeps it on. Before 2.2.5, a room echoed only with `web_echo: true`.
|
|
180
|
-
|
|
181
|
-
## Needs you
|
|
182
|
-
|
|
183
|
-
`/ui/needs`, the sidebar row **Needs you** with a count, the phone tab of the same name, and "(N)" in the browser
|
|
184
|
-
tab title. Items, grouped by instance, oldest first:
|
|
185
|
-
- the CLI waiting: "Permission needed", "Dangerous command waiting", "Sign-in needed", "Waiting at a dialog", "May be
|
|
186
|
-
waiting for input", "Waiting at its terminal", "Not responding", "Exited";
|
|
187
|
-
- the instance: "Paused: sign-in needed", "Crashed";
|
|
188
|
-
- deliveries from the last 24 h: "Could not confirm delivery", "Delivery failed" (source → target · kind).
|
|
189
|
-
|
|
190
|
-
"Asking you a question" is a kiro V3 question card, posted to the instance's chat with a button per answer and a box
|
|
191
|
-
for answering in words (on Discord/Telegram: reply to the post); an MCP input request offers Decline / Cancel and is
|
|
192
|
-
filled in at the terminal (View).
|
|
193
|
-
A prompt shows its own answer buttons (first answer wins); a delivery has **Acknowledge** (clears it everywhere);
|
|
194
|
-
"Paused: sign-in needed" has **Sign in** when the dashboard can run that login (#2233); every item has **Open chat**. **Notify me on this device** (Turn on / Turn off) gives desktop notifications while the
|
|
195
|
-
tab is hidden — per browser, not on phones or plain-HTTP addresses. Config: `needs_you.live_message` (default on),
|
|
196
|
-
`needs_you.dm` (default off), `needs_you.task_board` (default off: the task board's cards waiting
|
|
197
|
-
for you — set `true` to list them). The task board's daily summary is `defaults.task_board.summary_at` (off unless set,
|
|
198
|
-
e.g. `"09:00"`).
|
|
199
|
-
|
|
200
|
-
## Search
|
|
201
|
-
|
|
202
|
-
The sidebar row **Search** (under Needs you, with "Ctrl K" / "⌘K"), **Ctrl+K** / **⌘K** anywhere, the header's 🔍 when
|
|
203
|
-
the sidebar is hidden or on a phone; **Ctrl+F** in an agent's chat opens it narrowed to that agent (elsewhere Ctrl+F is
|
|
204
|
-
the browser's find). Not the sidebar's **Filter** box (that filters the agent list). It searches every agent's chat as
|
|
205
|
-
the fleet recorded it, messages between agents (send_to_instance, delegate_task, report_result, broadcast) and Task
|
|
206
|
-
Board tasks — never a CLI's own transcript (that is the Log). Results come as you type, grouped by agent, newest
|
|
207
|
-
first, badged Chat / Message / Task; 1–2 character words work (alone: the newest 5,000 entries, said in the dialog).
|
|
208
|
-
↑↓ / Enter / Esc / click outside; **Filters**: agent, team, time, kinds, **Only mine**; recent searches when empty.
|
|
209
|
-
A chat result opens the chat at the message (flashed); a message between agents, a task or a chat row the history no
|
|
210
|
-
longer keeps opens as the index's copy. Admins only, over the temporary public link and on a phone too (no guests). Config: `web.search.enabled`
|
|
211
|
-
(default on, off everywhere), `web.search.public_link` (default on; false keeps it off the public link), `web.search.retention_days` (unset and 0 = no age limit; 1–3650 days; daily prune still caps at 300,000). Secrets are masked; a hidden `cross_instance_visibility`
|
|
212
|
-
agent's messages are not found. "Search is off or not available": `web.search.enabled: false`, or the index could not
|
|
213
|
-
open (the fleet log says why); "Still indexing": the first fill after an upgrade.
|
|
214
|
-
|
|
215
|
-
## Undo and redo
|
|
216
|
-
|
|
217
|
-
Every text box has its own undo history (#2342): **Ctrl+Z** undoes, **Ctrl+Shift+Z** or **Ctrl+Y** redoes (**⌘Z** / **⌘⇧Z** on a
|
|
218
|
-
Mac), only while typing in a box. Undo never changes another box (the browser's own stack is page-wide). Typing undoes a
|
|
219
|
-
word (or a pause) at a time; an IME composition is one step. Undoable too: a Tab-completed `/command`, Put back, As
|
|
220
|
-
text, a recent search picked, the filter's Esc/× clear, a status-emoji pick, a widget example, a restored CSS version
|
|
221
|
-
(a colour swatch is a choice, not text: it starts the hex box afresh). The browser's own Edit-menu Undo goes through the
|
|
222
|
-
same history; its Redo is offered only after its own undo (use the keys). Not undoable on purpose: a sent message (never back into the composer), text cleared after Add/Send,
|
|
223
|
-
values reloaded after Save. Password fields keep the browser's behaviour.
|
|
224
|
-
|
|
225
|
-
## Fleet
|
|
226
|
-
|
|
227
|
-
`/ui/fleet/<tab>`: **Tasks**, **Schedules**, **Teams**, **Org chart**, **Cache**, plus a **Docs** link
|
|
228
|
-
(`/ui/fleet/config` leads to Settings → Agent defaults: each of its settings lives in Settings, #2347).
|
|
229
|
-
The sidebar's **Fleet** (zh "Fleet 概覽", at the top) and the phone's Fleet tab open the Fleet tab this device used last
|
|
230
|
-
(`agend_last_fleet_tab`; the Org chart the first time). The sidebar has no separate Fleet (Details) or View row.
|
|
231
|
-
- **Tasks** — the task board: Home lists **projects** (with % done) and what waits for the person (**Confirm** /
|
|
232
|
-
**Send back** finished work, **Answer** a blocked card — #2756: only the cards the person handed out, as Needs you;
|
|
233
|
-
an agent's card in review says "Waiting for <agent>"); **No project** holds `task`-tool tasks. A project is a board
|
|
234
|
-
of main tasks (M-n) by status — To do, In progress, Blocked, To confirm, Done — with drag to move, an assignee
|
|
235
|
-
filter and each main task's sub tasks (S-n). A card opens in a dialog: every field editable, its sub tasks, comments,
|
|
236
|
-
progress log, history. **Search cards** in the header. Only a signed-in person confirms the work they handed out
|
|
237
|
-
(an instance's `done` on such a card is review); a card an agent handed out, that agent confirms (#2434). No
|
|
238
|
-
delete: cancel. Alt+arrows on a card's title move it (no drag needed; the card's Position row on a phone). A main
|
|
239
|
-
task's tile shows the sub task at work and who is on it; a card waiting for review that is not wrapped up says
|
|
240
|
-
**To fill in** and Confirm asks first. A card's **Dispatched by** row: who handed it out (a blocked question goes
|
|
241
|
-
to them first). Read-only over the public link.
|
|
242
|
-
- **Schedules** — every schedule (silent ones included): when it runs in words, "next …", the target. **New
|
|
243
|
-
schedule** (Repeat with a cron expression, or Once at a date and time; message, target, label, timezone),
|
|
244
|
-
**Edit** (with an **Enabled** box — that is how you pause one), **Delete**. There is no "run now", and silent can't
|
|
245
|
-
be set from the web. Read only on a public link.
|
|
246
|
-
- **Teams** — **New team**, **Edit** (members, description; no rename), **Delete**. Read only on a public link.
|
|
247
|
-
- **Org chart** — see below.
|
|
248
|
-
- **Cache** — see [the cache report](#usage-and-the-cache-report).
|
|
249
|
-
|
|
250
|
-
**Org chart (#1918).** **Canvas** or **List** (remembered per device). The canvas: General at the top, then teams in
|
|
251
|
-
fleet.yaml order, then "Not in a team". Drag to pan, wheel or pinch to zoom (0.2–2.5), **Zoom in / Zoom out / Fit to
|
|
252
|
-
screen**, keys `+` `-` `0` and arrows, Enter opens a chat. **Overview** (bottom right, desktop) — click to move there.
|
|
253
|
-
Click a team header to fold it. **Find** dims everything that doesn't match. A card shows the state dot, name, state
|
|
254
|
-
and backend; clicking it opens the chat. List mode adds the description, model, a link to the Discord thread or
|
|
255
|
-
Telegram topic, and **Open chat**.
|
|
256
|
-
|
|
257
|
-
**The Office guide** (`docs/office.md` in the AgEnD repository; `docs/office.zh-TW.md` in Traditional Chinese) is the one page for people: setting up offices, the
|
|
258
|
-
skin-pack manifest format and its limits, Edit layout and seat reservations, bedtime, share links, agents' office and
|
|
259
|
-
pack tools, and rolling back. Point people there for more than the summary below; it marks what is not released yet.
|
|
260
|
-
|
|
261
|
-
**Office** (the third view, remembered per device) draws the same fleet as a pixel office: a room per team, a desk
|
|
262
|
-
per instance with a name tag, General and "Not in a team" in the **Lobby**. Each little person is its state: typing
|
|
263
|
-
with the lamp on (working), tea break (idle), asleep behind a **Closed** sign (paused/stopped), a hand up under a
|
|
264
|
-
blinking light (needs you, crashed, looks stuck). With **Live** on, each message, delegation and report is carried
|
|
265
|
-
desk to desk along the corridors in the Key's colours; a delegation in progress is a purple folder on the worker's
|
|
266
|
-
desk. Hover a desk for its name, state and backend; a click or tap (or Enter in the desk list) opens the
|
|
267
|
-
person's profile card (#2661: a 320 px popover beside them, following them; Esc, a press elsewhere or the same person
|
|
268
|
-
again closes it; on a phone a bottom sheet): level and XP, office and area, model, backend, today, first seen, the
|
|
269
|
-
activity line, **Find in office** and **Chat**. A double-click opens the chat directly. Each name tag has a level badge
|
|
270
|
-
(lifetime work, docs/office.md § Levels; **Settings → Web dashboard → Office levels**, `web.office_levels`). **Find** dims
|
|
271
|
-
the rest. **Show** picks a team or the Lobby and **People** pins chosen instances (both kept per browser); the
|
|
272
|
-
**Office** switcher lists offices kept on the host (`web-offices.json`, `GET`/`PUT /ui/offices`). An admin session
|
|
273
|
-
(never a read-only one, a guest or the public link) gets **Edit offices**: add, rename and delete offices, pick who is
|
|
274
|
-
in each (Everyone, Picked: whole teams or single instances, or #2752 Nobody: its style's NPCs only; none picked = everyone) and its style, and upload or delete **skin packs** (an
|
|
275
|
-
artist's pictures: `manifest.json` plus PNGs, format v1, kept in `web-office-skins/` in the AgEnD home; the host
|
|
276
|
-
checks every rule — PNG only, each strip exactly frames·w × h, a 16:9 background, size caps — and never changes a
|
|
277
|
-
pack; a strip may give its displayed size, `dw`/`dh`, apart from its pictures' size, and a character may walk four
|
|
278
|
-
ways with `walkDown`, `walkUp` and `walkSide`, the side one mirrored for left). #2692: an agent with **Office skin
|
|
279
|
-
packs** on (`office_pack_access`, Dashboard access) can check, upload, replace, delete and restore packs itself (one
|
|
280
|
-
previous version kept per pack); **Agents changing packs** under the packs names those agents, sets whether their changes
|
|
281
|
-
**Need my yes** (the default) or **Apply at once**, and approves or rejects the waiting ones (also from the notice's
|
|
282
|
-
buttons in General); every change is logged and told in General. **Style** (per office for a stored one; for the whole fleet, #2716, an admin's pick is kept on the host for every device and share link, anyone else's stays in their browser): **Desks**,
|
|
283
|
-
**Studio** (one scene — Work, Lounge, Help desk, Nap corner — where each instance walks to the area for its state),
|
|
284
|
-
**Cozy** (#2631: the same in a warm pixel-art office drawn as one picture; its notice board says a skin pack can
|
|
285
|
-
restyle it; the default for a browser that has not picked a style and for a new office — a saved office keeps its
|
|
286
|
-
own) or an uploaded pack; one the page cannot load is drawn as Desks with a note. On a stored office in Studio,
|
|
287
|
-
Cozy or a pack,
|
|
288
|
-
**Edit layout** (admin only) shows a 1280×720 coordinate grid and lets you drag seats, furniture, the door, the mail drop
|
|
289
|
-
(an envelope: where letters from other offices land; dashed on a pack without a `mailDrop`, #2736) and
|
|
290
|
-
waypoints (or Tab to one and use the arrow keys, Shift for 10), add or remove waypoints and join or unjoin
|
|
291
|
-
corridors; an item that sleeps at bedtime (a pack's `night`) has a night handle too ("Item {id} (night)": its night
|
|
292
|
-
picture faint, a moon, a line to its day place; on the day place while it sleeps in place) — drag it to give the item
|
|
293
|
-
its own night place, **Back to the pack's night place** undoes it (#2665); a selected seat has **Reserved for** (the
|
|
294
|
-
office's members, several allowed) and **Lend when away** (#2691) — whoever it is for sits there first when they come
|
|
295
|
-
to its area, nobody else does unless it is lent while they are all away (a borrower moves off when one comes), and a
|
|
296
|
-
reserved seat's handle is ringed; a pack can reserve seats as well; **Save layout** keeps the moves as that
|
|
297
|
-
office's overrides (the pack stays as uploaded), **Reset** goes back to the pack's own. While it is open the office picker and Edit offices wait (**Cancel** closes it); if someone
|
|
298
|
-
saved the offices meanwhile, Save says so and keeps your layout — Save again puts it on the current list. A crowded area packs extra people into a tighter grid, then shows "+N" in its corner; there
|
|
299
|
-
only calls and work get bubbles (a few at most) and name tags show on hover or focus. **Hide paused and stopped**
|
|
300
|
-
(per browser, off by default) leaves the sleepers out. Now and then someone says a short line for their state in a
|
|
301
|
-
bubble (never message content). Reduced motion: still poses, nothing in the air, bubbles shown whole.
|
|
302
|
-
**All offices** (in the switcher once two or more offices are stored, kept per device) shows every stored office as
|
|
303
|
-
a tile on one canvas, each exactly as its own view (its style, members, seats, bubbles, walking), labelled with its
|
|
304
|
-
name and head count, each as large as its office's content, packed to fill the panel; **Lobby tile** (on by
|
|
305
|
-
default; disabled when everyone is in an office) adds the instances in no office. Below 75% name tags show on hover
|
|
306
|
-
only. Hover and click work across
|
|
307
|
-
tiles; a tile's label, or a double-click on it, opens that office; traffic between offices flies straight across.
|
|
308
|
-
Edit offices and Edit layout wait for a single office.
|
|
309
|
-
**Share…** (#2636; an admin session, on the dashboard reached directly or over the public link — never read-only or a guest; the URL shows only to its maker, in the dialog) makes an Office share
|
|
310
|
-
link: anyone who opens it watches **Whole fleet** (#2716, in the fleet's style), one office or **All offices** live, in the link's **Look** (#2715: Light, Dark or the viewer's device; default what the maker's dashboard shows now), read-only, with no sign-in — names, identity
|
|
311
|
-
colours and states, every 5 s; no chat, no settings (a click shows a card with name, title, state, office and level only); agents' `office_set` lines only when
|
|
312
|
-
**Include agents' own status lines** is ticked; hidden instances never. 1 h by default, 15 min to 24 h
|
|
313
|
-
(`web.office_share.max_hours`); at most 10 open. Its own quick tunnel (`https://<random>.trycloudflare.com/o/<token>`)
|
|
314
|
-
starts with the first link and stops with the last; the token is shown once. There is no chat command: the button only. Open links and **Revoke** are in **Settings → Access
|
|
315
|
-
& security → Office share links**; each made or revoked link is announced in General (never its URL). A Cloudflare 429
|
|
316
|
-
says to try again in a few minutes (no retry). `web.office_share.enabled: false` turns it off and ends open links.
|
|
317
|
-
|
|
318
|
-
The Office fills the Fleet panel and moves like the Canvas (#2540): drag to pan, the wheel or a pinch to zoom,
|
|
319
|
-
**+** / **−** / **Fit** / **Fill** at the top right (the zoom shown as a percentage above them; on a phone, outside
|
|
320
|
-
fullscreen, a row along the top of the scene) or the `+ - 0` keys (with the office focused), an overview at the bottom right to jump (not on a phone; hidden while a single office
|
|
321
|
-
is all in view, #2737). It takes the whole panel: the
|
|
322
|
-
Fleet area's full width, down to the window's foot. **Fit** shows the whole scene as large as the panel allows
|
|
323
|
-
(any scale, so it fills the panel's width or height); **Fill** (a toggle, kept per office) fills the panel instead,
|
|
324
|
-
cropping what overflows — drag to see it. **+** / **−** step in pixel levels (each logical unit a whole number of
|
|
325
|
-
screen pixels); drawing is always unsmoothed. A resize fits a fitted view again; the scene can never be dragged off
|
|
326
|
-
the panel. The zoom, centre and Fit/Fill are kept per device for each office and style. Around the 16:9 scene the
|
|
327
|
-
whole panel is a matte: a pack's own `matte` (`#rrggbb`), else its background's edge colour, else the skin's own
|
|
328
|
-
(Studio's hall floor; Desks: the dashboard's background). Hover, click, name tags and Edit layout all work at any zoom: a drag on a handle moves it,
|
|
329
|
-
anywhere else pans; zoom and pan are never animated.
|
|
330
|
-
**Fullscreen** (the button under **Fit**, or `f`; Esc leaves) shows the office alone: the dashboard's header, tabs
|
|
331
|
-
and bars go, and the zoom buttons, the overview (not on a phone), a small office switcher and Exit float over it. It
|
|
332
|
-
uses the browser's fullscreen; where a page cannot have it (an iPhone) or the browser refuses, the office covers the
|
|
333
|
-
window instead. Opening a chat leaves it, and it is never remembered.
|
|
334
|
-
A pack may add a `foreground` (a 16:9 PNG over the whole scene, zones packs only): drawn above the people, furniture
|
|
335
|
-
and items in the air, below name tags, bubbles and "+N" — door frames, pillars, table fronts that hide whoever walks
|
|
336
|
-
behind them. A furniture item's `depth` may be `"y"`: drawn among the people by base y (whoever stands lower is in
|
|
337
|
-
front). Numeric depths keep their meaning (under 1000 under the people, 1000 and up over them).
|
|
338
|
-
An item with `activeWhen` may wait for its person (#2698): `"activeOn": "seated"` turns it active only once one of its
|
|
339
|
-
`activeFor` people in that state has arrived at their seat, and back as they walk off (default `"state"`: as the state
|
|
340
|
-
changes); `"hides": true` (needs `activeFor`) stops drawing those people while it is active (walking, they are drawn),
|
|
341
|
-
puts their name tags (one row at the item's tag point) and bubbles on it, and makes hovering or clicking it hit them.
|
|
342
|
-
A pack may set `"straight": true` (#2634): each diagonal leg of a walk becomes an L (across, then up or down), so the
|
|
343
|
-
three walking strips always fit; lay its graph out with horizontal and vertical edges and the corners land on the aisles.
|
|
344
|
-
|
|
345
|
-
**Live traffic** (**Live** switch, on by default; **Key** in the toolbar explains it, as a strip above the canvas): a line for each message between instances.
|
|
346
|
-
Colour by kind — task (delegate_task) purple, send/query/update teal, report pink, broadcast orange; between teams
|
|
347
|
-
(zoomed out) slate. Dotted = queued, dashed with a moving pulse = being delivered, grey fading for 12 s = delivered or
|
|
348
|
-
read. "×N" = several messages share a line; failed ones belong in Needs you. A `delegate_task` also draws the work: a
|
|
349
|
-
slow-moving purple line, delegator → worker, **in progress** until the worker's `report_result` with the same
|
|
350
|
-
correlation id comes back (then one pink line returns); none after 4 h fades as **no report yet**. Reloads and the
|
|
351
|
-
public link show the open ones. Every line ends on a card or a folded team's box. #2182: lines are routed card to card
|
|
352
|
-
by libavoid (libavoid-js 0.4.5, LGPL) in a worker — around cards, through gaps in team borders, never along a border or
|
|
353
|
-
across a team's name, lines sharing a stretch drawn apart; zoomed out, or where the router can't run (no WebAssembly,
|
|
354
|
-
an old browser), they follow the gaps between teams as before. The worker alone may run WebAssembly and reaches nothing
|
|
355
|
-
(its own CSP); the dashboard's CSP is unchanged. No message
|
|
356
|
-
text is ever shown; instances with `cross_instance_visibility: hidden` are left out. On a public link it refreshes
|
|
357
|
-
every 5 s.
|
|
358
|
-
|
|
359
|
-
## Finding an instance
|
|
360
|
-
|
|
361
|
-
**The sidebar list.** Grouped by team (an instance in `teams.<name>.members` under its first team, whatever its tags), else by
|
|
362
|
-
its first tag ("#" before the heading), ClassicBot rooms under Classic, the rest under Other; Settings → Agents the same (#2172).
|
|
363
|
-
Each row (#2179): name and context % on the first line, the time of the agent's last reply to a person at the end of the
|
|
364
|
-
second ("2 min ago"; cross-instance messages don't count); a reply under 10 minutes old is highlighted, fading by itself
|
|
365
|
-
(nothing to mark read). The sort button beside Edit: **Custom** (default; a reply never moves a row) or **Recent replies**
|
|
366
|
-
(the rest by last reply, no groups, no dragging; favorites pinned in their order, or **Sorted by last reply too**); synced
|
|
367
|
-
as `nav.sort`. Guests and the anonymous View reader: no times, no sort (always Custom).
|
|
368
|
-
**Filter: name, model, backend** (Esc clears), facets **Status** and **CLI**, "N / M shown".
|
|
369
|
-
While a filter is on, the instance you have open stays on top under **Current**. **Favorites**: the star on a row;
|
|
370
|
-
**Edit** to reorder (at most 50; "Clear the filter to reorder favorites"). Drag to reorder the full list; groups fold.
|
|
371
|
-
Order, folding, filter and favorites follow you across devices. A row keeps you on the same kind of page (from a Log
|
|
372
|
-
to that instance's Log).
|
|
373
|
-
|
|
374
|
-
**Chat | View | Log | Details** switch at the top of an instance.
|
|
375
|
-
- **View** — the live terminal (read only), the identity card, and **Edit profile** (or **Sign in to edit** when signed out).
|
|
376
|
-
- **Log** — [the Log tab](#the-log-tab).
|
|
377
|
-
- **Details** — Configuration (display name, description, directory, bound to, tags; "Read only — change it in
|
|
378
|
-
Settings." with **Edit in Settings**), Runtime (backend, model, effort, cost, context, 5 h and 7 d rate), Recent
|
|
379
|
-
activity, its identity card and widget. The ⋯ menu: Start / Restart / Stop instance, Pause / Wake, Colour…, **Page
|
|
380
|
-
colours** (#2196: the agent's choice / on the whole page / only its chat — host prefs `theme.pageByInstance`), and
|
|
381
|
-
the theme lock/reset.
|
|
382
|
-
- **Page colours (#2196):** an agent's theme with `page.on` (or a person's "on the whole page") colours the sidebar,
|
|
383
|
-
the header and the usage rail (a phone: drawer, header, tabs) while that agent's Chat/View/Log/Details is open —
|
|
384
|
-
colours only; status colours (Needs you count, state dots, errors, focus ring) never change. The header follows the
|
|
385
|
-
page, not the chat. Off with agents' themes off or `?safe=1`.
|
|
386
|
-
|
|
387
|
-
Phone layout: bottom tabs Chat, Needs you, Fleet, Settings. Settings opens on its list of sections (search on top);
|
|
388
|
-
each section opens on its own page with "‹ Settings", and dialogs and the setup wizard are full-screen sheets. Chat is current on any of an agent's pages and goes to its
|
|
389
|
-
chat; View, Log and Details are the switch under the header.
|
|
390
|
-
|
|
391
|
-
## Usage and the cache report
|
|
392
|
-
|
|
393
|
-
**Usage.** The **Usage** header button: a right-hand rail at 1200 px or wider (shown/hidden per device; on Chat,
|
|
394
|
-
View, Log, Details and Fleet), otherwise a dialog — **AI Subscription Usage**. One row per provider in use (Claude,
|
|
395
|
-
Codex, Muse, Grok, Kiro, Antigravity; every Claude login on the host, used or not — `Claude (default)` and each profile, #2236): Claude's **Session** (5-hour window) and **Weekly** (7-day), per-model weekly
|
|
396
|
-
rows, "binding" on the window that will stop you, **Extra usage** in dollars. "high" at 70%, "near limit" at 90%.
|
|
397
|
-
Refreshes every 60 s while open; **Refresh** forces it (at most once per 30 s); **Move up / Move down** reorders rows.
|
|
398
|
-
`web.usage_panel: false` hides the rail and dialog (the `/usage` chat command and `get_usage` still work).
|
|
399
|
-
**A failed read keeps the last numbers** (#2236 follow-up): an expired token, a rate limit, a network blip or any other
|
|
400
|
-
error shows the numbers from the last good read (up to a week old), greyed, with "expired · cached at 14:05" (or "not
|
|
401
|
-
updated" / "couldn't read") and what to do under it; a window that has reset since says "reset since …" with no number.
|
|
402
|
-
`get_usage` rows carry `stale: true`, `cachedAt`, `staleCause` (expired / transient / error) and `resetPassed` on such
|
|
403
|
-
metrics; read them as old. A provider never read successfully still shows its error. A good read clears the mark.
|
|
404
|
-
|
|
405
|
-
**Profiles and plan badges.** Each Claude credential profile has its own row: the card says "Claude" with the
|
|
406
|
-
profile on its own line (the API and chat call it "Claude (<profile>)"); a shared row appears only while some
|
|
407
|
-
instance uses the default login. The badge is the account's plan — e.g. **Pro**, **Max ×20**, **Team ×6.25** (the
|
|
408
|
-
multiplier is its rate-limit multiple; full name on hover). A setup-token login has no badge. A signed-out profile
|
|
409
|
-
says "Not logged in — sign in with /login claude-code <profile> …". More: the `credential-profiles` skill.
|
|
410
|
-
|
|
411
|
-
**The cache report** (Fleet → **Cache**; the `get_cache_report` tool). How often each instance's prompt cache
|
|
412
|
-
expires between turns and what that costs, read from transcripts (Claude Code, Codex; kiro is credit-billed: "Not
|
|
413
|
-
available"). Windows **24 h / 7 days / 30 days**. Fleet row: **Expiry cost**, **Keep-warm would save**,
|
|
414
|
-
**Recommended**, and **Switch to 1-hour cache** when an instance needs it. Per instance: requests, gaps past the TTL,
|
|
415
|
-
expired (rewrote), tokens rewritten, expiry cost, keep-warm pings and their cost, net, cache writes 5 min / 1 h, and
|
|
416
|
-
**Behaves as** — whether a "5m" cache really expires after 5 minutes (measured over 5–60 minute gaps of the last 7
|
|
417
|
-
days). Money is list price (date shown); quota effects are estimates. `get_cache_report` gives the fleet to General,
|
|
418
|
-
coordinators and full-profile instances, and each other instance only its own row.
|
|
419
|
-
|
|
420
|
-
**The usage report** (the `get_usage_report` tool, and Fleet → **Usage**, `/ui/fleet/usage`, #2122; the ◔ dialog's
|
|
421
|
-
**By agent →** opens it). Per instance (or backend,
|
|
422
|
-
model, credential profile, team): input, output, reasoning, cache read and cache write tokens, requests, delivered messages,
|
|
423
|
-
and an amount, over today / 7d / month / all / custom days in the fleet's timezone. **Every amount is the
|
|
424
|
-
API-equivalent at list price — not money spent** (subscriptions aren't billed per token): say "API-equivalent", never
|
|
425
|
-
"spent". Measured for Claude Code, Codex, Grok, Muse, OpenCode and Antigravity; **estimated** for Kiro (it records no token counts). Marks to repeat in words:
|
|
426
|
-
- `cost_reported`: the model has no list price in AgEnD's table, so the amount is what the CLI (Grok, OpenCode's provider) reported.
|
|
427
|
-
- `estimated` (a row) / `includes_estimates` (the totals, with `amountEstimated`): Kiro's tokens are estimated from text
|
|
428
|
-
size, not measured — say "estimated" and give the estimated part apart.
|
|
429
|
-
- `cache_write_not_reported`: Codex and Muse record no cache writes, so they are neither shown as 0 nor priced.
|
|
430
|
-
- `not_priced`: the tokens are shown, the amount isn't.
|
|
431
|
-
- `source_unknown`: read before #2122, when which backend and profile read it was not recorded (backend and profile
|
|
432
|
-
"unknown" — never today's).
|
|
433
|
-
|
|
434
|
-
Each hour keeps the backend whose reader read it and the profile it was read under, so an instance that changes
|
|
435
|
-
backend or profile keeps its history as it was. `notMeasured` lists kiro and the other backends with their reason;
|
|
436
|
-
they are never a $0 row, and what such an instance measured before still shows. Messages are counted per instance, so
|
|
437
|
-
by backend they go under its backend now. Coverage only says "read" for a catch-up that listed and read every source
|
|
438
|
-
(an unreadable directory or transcript is not covered, never a 0). Scope as
|
|
439
|
-
`get_cache_report`. The dashboard reaches it over the public link only with `web.usage_report_on_public_link: true`
|
|
440
|
-
(Settings → Web dashboard → **Usage report over the public link**, applies at once; otherwise the page says "Not offered over
|
|
441
|
-
the public link" and links to that switch on the dashboard reached directly); guests never. The page adds a daily trend (top 5 and
|
|
442
|
-
others), a heatmap that tells a day read with nothing used from a day not collected, and **Download CSV** (the shown
|
|
443
|
-
answer's daily rows, with the basis). Claude subagent (sidechain) turns aren't counted yet. A long range whose daily rows
|
|
444
|
-
are too many says from which date the charts and the CSV start (the totals stay whole); a day used only by an unpriced
|
|
445
|
-
model is "used, not priced"; after a timezone change each day keeps the zone it was made in, and the page says so.
|
|
446
|
-
|
|
447
|
-
**Keep-warm** means sending a small turn before the cache expires so the next real turn reads it instead of
|
|
448
|
-
rewriting it. **Today it is only a simulation and a recommendation** — AgEnD sends no keep-warm pings (#1469 is
|
|
449
|
-
still being designed). If the report says **Switch to 1-hour cache**, the remedy is
|
|
450
|
-
`backend_options.claude-code.prompt_cache_ttl: "1h"` on that instance (takes effect on the next start).
|
|
451
|
-
|
|
452
|
-
## The Log tab
|
|
453
|
-
|
|
454
|
-
What an agent was asked, its replies (never its thinking), each tool call (Read, Edit, Search, Run, Web, MCP,
|
|
455
|
-
Sub-agent…, with **Show output**), errors, turn ends, compactions and fleet events, on one timeline. Filters **All /
|
|
456
|
-
Tools / Errors**; **Live** while it updates. Opens with the newest 200 steps; **Load older steps** adds 100 at a time
|
|
457
|
-
(the page keeps 1000). Off by default: `web.log_tab` (Settings → Web dashboard → **Log tab: each agent's steps**; turning it on
|
|
458
|
-
from the tab itself needs a fleet admin's confirmation). Full for Claude Code (also after it stopped) and Codex while
|
|
459
|
-
running; kiro shows fleet events only; other backends say they have no readable transcript. Secrets are masked.
|
|
460
|
-
|
|
461
|
-
## Settings
|
|
462
|
-
|
|
463
|
-
**Chat & connections → Retry now** retries a disconnected connection without a fleet restart; a running login is reused. Startup retries continue with a five-minute cap. Local admin only, unavailable over public links. It changes no token or binding; refresh to read the later result.
|
|
464
|
-
|
|
465
|
-
Sections (`/settings/<section>`, #2347), in two groups. **You**: **Preferences**, **Look**. **Fleet**: **Agents**,
|
|
466
|
-
**Agent defaults**, **Chat & connections**, **Web dashboard**, **Access & security**, **Advanced**. Old addresses (`device`,
|
|
467
|
-
`appearance`, `general`, `bots`, `classic`, `web`) lead to the new sections. **Search settings** (top of the sections, **/**;
|
|
468
|
-
also Ctrl K → Settings) finds a setting by name, `fleet.yaml` key or synonym in either language and goes to the field.
|
|
469
|
-
Header: version, **Setup wizard**, **Help**.
|
|
470
|
-
|
|
471
|
-
**How changes apply (#2347).** Every Fleet section's edits are unsaved until
|
|
472
|
-
**Save**: a field edit (Agent defaults, Chat & connections, Web dashboard, Access & security) is unsaved at once (a straight bar on its left); a dialog's **Done**
|
|
473
|
-
adds its changes. The bar **N unsaved change(s)** shows the cost — **Immediately**, **Restart this Agent** or **Restart
|
|
474
|
-
AgEnD** — then **Save** or **Discard**; an invalid field keeps Save waiting (**Fix 1 field(s) to save**). Over a public
|
|
475
|
-
link an admin can change the fleet's settings too (not the dashboard's own web settings, Guests or Web authority).
|
|
476
|
-
Confirmations (e.g. opening access) are asked at Apply. A change that loosens access waits for a fleet admin to confirm
|
|
477
|
-
in the General chat ("Waiting for confirmation", **Withdraw**) — unless the browser is web-verified (#2170): an
|
|
478
|
-
account that is a fleet admin of every connection the change affects, on their platform, confirms it by its own Apply
|
|
479
|
-
("Confirmed by your account"; General gets a notice; every check runs again at execution). Not for a guest, the public
|
|
480
|
-
link, an unverified browser or a change that needs the host CLI. After a failure, unapplied changes are staged again
|
|
481
|
-
(secrets must be re-entered). **Restart AgEnD** restarts every agent
|
|
482
|
-
(never automatic); until then every page shows **N saved change(s) take effect after AgEnD restarts** · **Restart now** ·
|
|
483
|
-
**Later**. Preferences and Look save with the same bar (**Your preferences**; device-only switches count on their own; Restore defaults saves at once).
|
|
484
|
-
|
|
485
|
-
**Preferences** — follows you across devices unless marked:
|
|
486
|
-
| Control | What it does | Stored |
|
|
487
|
-
|---|---|---|
|
|
488
|
-
| Your name (**Save**, **Use web-user** / **Use <account>**) | the name agents see on your web messages | your profile |
|
|
489
|
-
| Theme: System / Light / Dark | page theme | host prefs `theme` |
|
|
490
|
-
| Language: English / 中文 | page language (not the bots' replies — that is Agent defaults → Language) | host prefs `lang` |
|
|
491
|
-
| Names: Nickname first / Real name first | sidebar names | host prefs `names.primary` |
|
|
492
|
-
| Allow HTML previews | the preview opt-in | host prefs `preview.optIn` |
|
|
493
|
-
| Chat tour (this device) | replays the chat tour | browser |
|
|
494
|
-
|
|
495
|
-
**Look** — see [Look](#look) for the cards and what they mean.
|
|
496
|
-
|
|
497
|
-
**Signing a backend in (#2233)** — local admin sessions only (never a guest or the public link): Settings → Agents →
|
|
498
|
-
**Sign-ins** (each backend's login and each credential profile an agent uses: state, **Sign in** / **Sign in again**,
|
|
499
|
-
or the host command / install command where the dashboard cannot), the web `/backend` picker's **Sign in to
|
|
500
|
-
<backend>** on a "not signed in" choice, and Needs you's **Sign in**. The dialog: the pre-check's question (still
|
|
501
|
-
signed in? kiro logs out first; **Use a temporary public link** where allowed), then a device code, or **Open the
|
|
502
|
-
sign-in terminal** + its one-time access code (this browser only, no DM). While it runs every admin page shows
|
|
503
|
-
"Signing in to X (started on <device>)" with **Open**; another browser sees no code and may **Cancel sign-in**. Ends
|
|
504
|
-
when the browser session ends. A missing CLI is not installed here (the dialog says the install command). agy and
|
|
505
|
-
opencode: no dashboard sign-in. Config: `web_terminal.*` (as `/login`). Default Kiro, Claude Code and Codex
|
|
506
|
-
accounts sign in with named browser controls instead (#2599): Kiro's account method, Start URL and region and Claude's
|
|
507
|
-
code are entered in the browser, Codex shows its link and device code; credential profiles keep the dialog above. A
|
|
508
|
-
backend skipped at first setup shows in Needs you even before an agent uses it.
|
|
509
|
-
|
|
510
|
-
**Agents** — **New agent**; per agent **Settings**, **Pause / Wake**, **Start / Stop** (direct), ⋯ **Delete agent**
|
|
511
|
-
(staged; on Apply it waits for a fleet admin's confirmation in General, then the agent is stopped and removed, as
|
|
512
|
-
`delete_instance` does — no restart). The agent dialog writes `instances.<name>.*` (an "Inherit" box removes the key, and the field then says what it inherits:
|
|
513
|
-
"Inherited: 30 min · change in Agent defaults"; a value nobody set anywhere is marked "default"):
|
|
514
|
-
| Label | Key | Applies |
|
|
515
|
-
|---|---|---|
|
|
516
|
-
| Display name, Description | `display_name`, `description` | now |
|
|
517
|
-
| Backend, Model, Working directory | `backend`, `model`, `working_directory` | restarts the agent |
|
|
518
|
-
| Auto-pause after (minutes, 0 = off) | `auto_pause_after` | now |
|
|
519
|
-
| Channel binding | `channel_id` | restarts AgEnD |
|
|
520
|
-
| Stuck timeout (minutes) | `hang_detector.timeout_minutes` | agent |
|
|
521
|
-
| Agent mode, Tool set | `agent_mode`, `tool_set` | agent |
|
|
522
|
-
| Tool progress; Bot-to-bot messages in topics (full / summary / hidden); Log level | `tool_progress`, `cross_instance_visibility`, `log_level` | now |
|
|
523
|
-
| Require a delivered reply | `reply_completion_guard` | now |
|
|
524
|
-
| Daily tips (Topic / Off; always posted in General, never by DM) | `tips` | now |
|
|
525
|
-
| Lightweight mode, Fallback model | `lightweight`, `model_failover` | agent |
|
|
526
|
-
| System prompt | `systemPrompt` | agent |
|
|
527
|
-
| Tags | `tags` | now |
|
|
528
|
-
| General topic (fleet dispatcher) | `general_topic` | AgEnD |
|
|
529
|
-
| Status emojis (Received, Queued, Processing, Delivered, Failed, …) | `status_emojis` | agent |
|
|
530
|
-
|
|
531
|
-
**Chat & connections** — connections (the bots): **New connection**: type, bot token (**Verify**), Discord server or Telegram group,
|
|
532
|
-
your user ID. It starts without a restart when AgEnD already runs another connection and nothing else at fleet level
|
|
533
|
-
changed; a fleet's first connection (or a change to an existing one) offers **Restart AgEnD**. Per bot: **Access mode** (locked / open / pairing) and **Allowed users** —
|
|
534
|
-
`channels[i].access.*`, staged, restarts AgEnD, asks before opening access; **Guild/Group id** and General channel /
|
|
535
|
-
forum topic with **Verify the new binding** (applies directly after a confirmation); **Status emojis**; Advanced →
|
|
536
|
-
**Replace** the token (saved to `~/.agend/.env`); **Delete this bot** (the token stays in `.env`). **Provider API keys**:
|
|
537
|
-
**Verify & apply**, used by new processes.
|
|
538
|
-
|
|
539
|
-
ClassicBot (in **Chat & connections**, `/settings/chat#classicbot`) — per room **Settings**, **Pause / Wake**. The room dialog writes `classicBot.yaml`
|
|
540
|
-
`channels.<key>.*`: Backend, Model, Auto-pause after, **Collaboration mode** (`collab`), **Web echo** (`web_echo`),
|
|
541
|
-
Advanced **Context lines** (these restart the room's agent); Tool progress and Require a delivered reply (now).
|
|
542
|
-
|
|
543
|
-
**Agent defaults** — **Project folders** (`project_roots`: where New agent may put an agent; empty = anywhere;
|
|
544
|
-
changing it waits for a fleet admin's OK) and the fleet defaults (`defaults.*`): **Language (bot replies)** (`locale`: Auto / en / zh-TW), default
|
|
545
|
-
backend and model, auto-pause, tool progress, bot-to-bot visibility, reply guard, **Native replies trigger ClassicBot**
|
|
546
|
-
(`reply_triggers`: a native reply triggers a ClassicBot bot; off by default, #2576); Advanced: tool set, agent mode, log
|
|
547
|
-
level, **Hang detector enabled** / **Stuck timeout** (`hang_detector.*`), **Startup concurrency** (1–20) and
|
|
548
|
-
**Stagger delay** (`startup.*`, restart AgEnD). ClassicBot defaults (in Chat & connections; `classicBot.yaml defaults.*`): default backend, tool
|
|
549
|
-
progress, reply guard, **Native replies trigger ClassicBot** (`reply_triggers`, also per room), **ClassicBot admins**,
|
|
550
|
-
**Allowed guilds**.
|
|
551
|
-
|
|
552
|
-
**Access & security** (sessions, browser terminal, public link and fixed address, guests, web authority; web echo is in Chat & connections, the Log tab and usage over the link in **Web dashboard**) — all apply at once; loosening waits for an admin; disabled over a public link.
|
|
553
|
-
| Label | Key |
|
|
554
|
-
|---|---|
|
|
555
|
-
| Session length, hours (1–720) | `web.session.local.absolute_hours` |
|
|
556
|
-
| Sign out after unused for, hours (1–720) | `web.session.local.idle_hours` |
|
|
557
|
-
| Allow the browser terminal (the `/login` terminal) | `web_terminal.enabled` |
|
|
558
|
-
| Terminal session minutes (1–20) | `web_terminal.ttl_minutes` |
|
|
559
|
-
| Web echo | `web.echo_to_channel` |
|
|
560
|
-
| Log tab: each agent's steps | `web.log_tab` |
|
|
561
|
-
| Web sign-in notices (Topic / Off; never by DM, guest and public-link notices always post) | `web.notify_login` |
|
|
562
|
-
| Offer temporary public web links | `web.public_link.allow_public` |
|
|
563
|
-
| Public link minutes (1–480; with a fixed hostname 0–10080, 0 = no expiry) | `web.public_link.ttl_minutes` |
|
|
564
|
-
| Reopen the public link when AgEnD starts (fixed hostname only) | `web.public_link.auto_open` |
|
|
565
|
-
| Tunnel protocol (http2 / quic / auto) | `web.public_link.protocol` |
|
|
566
|
-
Shown read-only ("Set in fleet.yaml"): `web.allowed_hosts`, `view_access`, `preview`, `preview_port`,
|
|
567
|
-
`preview_origin`, `preview_on_public_link`, `usage_panel`, `search` (`retention_days`: unset and 0 = no age limit,
|
|
568
|
-
300,000-row cap), `provider_secrets`, `upload_max_file_mb`,
|
|
569
|
-
`upload_max_total_mb`, `web_terminal.bind`, `web_terminal.tunnel`.
|
|
570
|
-
|
|
571
|
-
**Advanced** — fleet.yaml as **YAML / JSON**, **Edit / View**, **Copy**, **Download fleet.yaml**; **Apply**
|
|
572
|
-
(edit mode) adds the edit to the bar, and Save writes it. While it waits, Agents, Agent defaults and the
|
|
573
|
-
connections are off (and the setup wizard); while those have unsaved changes, the editor only reads.
|
|
574
|
-
|
|
575
|
-
**Setup wizard** — agent (backend, directory, name) → platform → token and server/group, your user ID → preview →
|
|
576
|
-
**Create and start**. The directory may be left empty: the agent gets its own folder, `~/.agend/workspaces/<name>`
|
|
577
|
-
(shown under the field); one that is entered must be absolute. On a Telegram or Discord connection the first agent
|
|
578
|
-
is named `general` by default and becomes the fleet's General, in the chat's General topic or channel, when its
|
|
579
|
-
directory is left empty; with a directory it is the worker `agent-1` and the fleet adds its General in its own folder.
|
|
580
|
-
Once a fleet has a connection or a General, a new agent can't be called `general`.
|
|
581
|
-
|
|
582
|
-
**First setup, before any fleet** (`agend setup`, the page the Windows installer opens): the same steps on its own
|
|
583
|
-
page, in English or 繁體中文 (the browser's language; the button at the top switches). The working directory may be
|
|
584
|
-
left empty: the agent then gets its own folder, `~/.agend/workspaces/<name>`, shown under the field and created
|
|
585
|
-
when the host confirms; a directory that is entered must be absolute.
|
|
586
|
-
|
|
587
|
-
## Look
|
|
588
|
-
|
|
589
|
-
For an agent changing its *own* look, the `web-appearance` skill has the tools and limits. What a person sees in
|
|
590
|
-
Settings → **Look**, card by card (the app icon and card upload limits are in **Web dashboard**; following reduced motion and custom CSS off here are in **Preferences**):
|
|
591
|
-
- **Agents' themes** — **Show agents' themes, effects and widgets**; off, every chat looks the same and pictures and
|
|
592
|
-
ring colours fall back to the bots' own (all devices).
|
|
593
|
-
- **Ambient effects** — an agent's falling petals, snow, rising lanterns, twinkles or stars on a click, drawn behind
|
|
594
|
-
its chat by the dashboard (data only, no consent needed). They show by default, the public link too; the chat's ⋯
|
|
595
|
-
menu says why one is not showing (choosing the line fixes it there) and offers **Clear the ambient effect** /
|
|
596
|
-
**Clear the click effect**. With the system asking for reduced motion, the chat says once per device that effects
|
|
597
|
-
are on, with **Turn off here**. General can set or clear one for the user (`set_web_settings`, `what: "ambient"`).
|
|
598
|
-
- **Identity colours** — each agent's colour in the sidebar comes from, in order: a person's pick (⋯ menu →
|
|
599
|
-
Colour…), the agent's own, its bot's Discord role colour, or an automatic soft colour. Choose where it shows (Name /
|
|
600
|
-
Left bar / Ring) or **Turn off colours** (the picks are kept).
|
|
601
|
-
- **Identity cards** — Small / Medium / Large for all cards; a card's own S / M / L overrides it.
|
|
602
|
-
- **Your sidebar widget** — a small panel under the instance list built from JSON (no HTML or script), with live
|
|
603
|
-
values such as `fleet.working` and `fleet.needs_you`; agents can't change it.
|
|
604
|
-
- **Custom CSS (yours only)** — your own CSS on every device you sign in on, never on Settings, never others'; it
|
|
605
|
-
can't load from the internet (put pictures and fonts under Assets: PNG, WebP, JPEG, GIF, WOFF2, 1 MiB in total).
|
|
606
|
-
**Save and try**, then **Keep** within 15 s or it reverts; **Turn off (all devices)**; earlier versions **Use
|
|
607
|
-
this**. If something is hidden or broken, open the page with `?safe=1`, or tick **Turn off custom CSS on this
|
|
608
|
-
device** (in Preferences).
|
|
609
|
-
- **Restore defaults** — resets this host's appearance settings (it lists what it resets first).
|
|
610
|
-
|
|
611
|
-
Moved out of Look in 2.3.2 (#2347). **Preferences** (this device only): **Effects: follow the system's reduced-motion
|
|
612
|
-
setting** (off by default): on, ambient effects stay still while the system asks for reduced motion. Otherwise they play, with one shared one-time chat note and a local action to follow the system. And **Turn off custom CSS on this device**. **Web dashboard**: the **App icon**;
|
|
613
|
-
**Identity card upload limits** — portrait and banner size limits and per-agent picture quota (`web.appearance.*`);
|
|
614
|
-
lowering applies at once, raising waits for an admin.
|
|
615
|
-
|
|
616
|
-
**What an agent can change for the user.** A worker changes only its own look (the `web-appearance` tools); before
|
|
617
|
-
#2064 everything on this page was the person's. Since #2064 (2.2.5) General, coordinators and
|
|
618
|
-
full-profile instances get `get_web_settings` / `set_web_settings`, which go through the same checks as the page;
|
|
619
|
-
workers don't. The `web-appearance` skill's **For the user** section has the details. In short: General can change
|
|
620
|
-
the host's appearance settings, one agent's identity colour, ambient effects and Restore defaults; for custom CSS it can save a version **on trial**, keep or revert
|
|
621
|
-
the trial, switch to an earlier saved version, or turn CSS off — and it keeps a trial only once the user says they like
|
|
622
|
-
it (the user's decision). Still the person's own click on the page: choosing files from their computer
|
|
623
|
-
(upload CSS assets), the per-browser switches (custom CSS off on this device, Pause/Resume), and the
|
|
624
|
-
card upload limits. The docs' "Asking General to change it for you" says the same for people.
|
|
625
|
-
|
|
626
|
-
## Troubleshooting
|
|
627
|
-
|
|
628
|
-
**Blank dashboard / can't connect (WSL).** The dashboard listens on 127.0.0.1:`health_port` inside WSL; Windows
|
|
629
|
-
reaches it through WSL's localhost forwarding. Compare the two sides:
|
|
630
|
-
- in WSL: `curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:19280/health`
|
|
631
|
-
- in Windows PowerShell: `curl.exe -sS -o NUL -w "%{http_code}" http://127.0.0.1:19280/health`
|
|
632
|
-
Any HTTP code (200, or 503 when the fleet is degraded) means that side reaches the listener; `000` means no
|
|
633
|
-
connection. A 403 "Host not allowed" means the name used isn't localhost/127.0.0.1 — add it to `web.allowed_hosts`.
|
|
634
|
-
If WSL answers and Windows doesn't, the forwarding is the problem: try `http://localhost:19280` vs
|
|
635
|
-
`http://127.0.0.1:19280`, or the SSH tunnel in docs/web-dashboard.md. **Do not** tell the user to kill `wslrelay`
|
|
636
|
-
or run `wsl --shutdown` — that stops every WSL program, AgEnD included. Changing WSL's networking mode is the user's
|
|
637
|
-
own decision. If the port is taken by something else, chat says "Dashboard unavailable — health port … is already in
|
|
638
|
-
use".
|
|
639
|
-
|
|
640
|
-
**Preview "connection refused" / "did not answer within 3 s".** The preview frame comes from the second port
|
|
641
|
-
(`health_port + 1`). Over SSH, forward that port too (`-L 19281:127.0.0.1:19281`). Through a proxy or tunnel the two
|
|
642
|
-
names are kept apart: the **dashboard's** external name goes in `web.allowed_hosts`, and `web.preview_origin` must be
|
|
643
|
-
a **different** host name, mapped to the preview port, that is neither the dashboard's `hostname` nor in
|
|
644
|
-
`web.allowed_hosts` (the validator refuses a preview origin the dashboard answers to). "Something else answered on
|
|
645
|
-
the preview port": another program holds it — change `web.preview_port` (restart). If fleet.log says "Preview
|
|
646
|
-
listener unavailable", the port could not be bound (older versions' cards then wrongly said previews were turned
|
|
647
|
-
off).
|
|
648
|
-
|
|
649
|
-
**Public link fails at once.** Read the step list the bot posts and daemon.log's "Public web link … startup failed":
|
|
650
|
-
- "another tunnel is still running" — a `/login` link or an unconfirmed old tunnel; wait for it to end, or close it;
|
|
651
|
-
- "Cloudflare is limiting new temporary links from this machine" (HTTP 429) — try later; the local dashboard still
|
|
652
|
-
works;
|
|
653
|
-
- "cloudflared stopped before it gave a public address" / "could not be started" / "the download did not complete"
|
|
654
|
-
— the tunnel program failed or couldn't be fetched (network, proxy);
|
|
655
|
-
- "Cloudflare gave no public address in time" — only after a real 60 s wait;
|
|
656
|
-
- no steps at all: `web.public_link.allow_public: false`, or the sender is not a fleet admin.
|
|
657
|
-
|
|
658
|
-
**"Your session has ended."** It lasted its 48 h (or the idle limit), a public link closed or ran 4 h / 30 min idle,
|
|
659
|
-
or someone ran `/web revoke`, **Sign out everywhere** or `agend web-token rotate`. Get a new code: `/web`, **Send me
|
|
660
|
-
a new code**, or `agend web` on the host. "No session — open the dashboard link again" means the browser keeps no
|
|
661
|
-
cookies for the site.
|
|
662
|
-
|
|
663
|
-
**No live updates ("it only refreshes every few seconds").** The page normally keeps one live stream; if nothing
|
|
664
|
-
arrives within 15 s, it stays silent 30 s, or a proxy buffers it, the page polls every 5 s instead and retries the
|
|
665
|
-
stream in the background. Nothing is lost except immediacy (the Log tab may lag up to 30 s). A public link always
|
|
666
|
-
polls. "Can't reach AgEnD — it may be restarting" means even polling failed.
|
|
667
|
-
|
|
668
|
-
**Usage meters missing.** `web.usage_panel: false`, the window is narrower than 1200 px (use the Usage button), or
|
|
669
|
-
no instance uses that provider.
|
|
670
|
-
|
|
671
|
-
**Settings won't change something.** Over a public link, Web settings and appearance are read only; a loosening
|
|
672
|
-
change waits for an admin's confirmation in General chat; a value in the "Set in fleet.yaml" list must be edited in
|
|
673
|
-
fleet.yaml (Advanced, or the file) and `agend reload`.
|