Fleet — capability map
Every capability in scope, what good looks like, what Ever Works has today, the verdict, and the epic that owns it. Verdicts: adopt (new to Ever Works), extend (exists, grows), feed (exists; this program only feeds it), keep (exists, unchanged), defer (worth it, not in this program), refuse (deliberately not).
"Today" cites EXISTING-SUBSTRATE.md sections (§1 node runtime, §2 platform fleet and live view, §3 sessions, §4 schedules, §5 Tasks and nouns, §6 plugins, §7 sidebar, §8 contracts, §9 known gaps).
A. Machines
| Capability | What good looks like | Ever Works today | Verdict | Epic |
|---|---|---|---|---|
| Enrol a machine | One command, nothing listens, secret stays on the machine | One-time token, outbound enrol, keychain secret (§1) | keep | — |
| Health: CPU, memory, disk, uptime, GPU | Cards with the last check time; history for "is this getting worse?" | Disk floor + limits only; no metrics history (§2) | extend | FL-03 |
| Machine states | Plain-language states with a fix button (wake, re-enrol, grant consent) | enrolling · online · offline · paused · disabled + worker states (§2) | extend | FL-03 |
| "Needs a look" list | One list above the cards: disk low, runner stopped, agent waiting, node throttled | Kill-switch banner only | adopt | FL-01, FL-03 |
| Wake on LAN | Wake an offline machine from a sibling on the same network | — | adopt (via sibling node) | FL-03 |
| Favourites, rename, nesting under host | Starred machines first; VMs and containers nest under their host | rename/remove in node drawer (§2) | extend | FL-01, FL-16 |
| Direct peer-to-peer link, overlay-network awareness | — | outbound-only HTTPS + one outbound WS (§1) | refuse (transport) / adopt (one multiplexed outbound link) | FL-02 |
| Machine checks on an interval, refresh all | Periodic read-only check; manual refresh | heartbeat 60 s (§1) | extend | FL-03 |
B. Sessions and terminals
| Capability | What good looks like | Ever Works today | Verdict | Epic |
|---|---|---|---|---|
| Persistent agent/shell sessions on a machine | Survive closing the browser, node upgrades, network loss; replay the screen on attach | Headless claude -p Task runs; Computer terminal channel is read-only (§1, §3) | adopt | FL-04 |
| Supported CLIs | Claude Code, Codex and a shell first; any other CLI as a plain PTY | claude-code, codex detected; Task runs already isolate both — Codex with --ignore-user-config since 2026-10-16 (§1.7, §9 gap 17) | extend (Agent sessions reuse that isolation) | FL-04 |
| Start dialog: machine → kind → agent → checkout → worktree → first message | Installed CLIs marked; recent folders; new worktree as the default for Agents | run-now on Agent; affinity picker (§3) | adopt | FL-04 |
| Live terminal in the web, input, resize, scrollback, splits | One terminal pane everywhere; splits later | TerminalPane for cloud-worker Runs; the Computer tab already renders a read-only node shell through the same renderer (§1, §2) | extend | FL-04 |
| Attach from your own terminal | ever-works fleet sessions attach <id> (alias fleet session attach) | no fleet CLI verbs (§8.2) | adopt (CLI) | FL-19 |
| Status: working / needs you / done / idle | From the agent's own hooks; screen rules as fallback; exit proven | AgentRun.status + awaitingInput; 5 s polling (§3) | adopt | FL-05 |
| Question / permission with answer buttons | Cards that replace the composer; one click answers | HITL ask_human → Inbox; fleet QUESTION.md (§3) | extend | FL-05 |
| Sessions board (Needs you · Working · Done · Idle) | Attention-first columns; tint only for attention and done | Task board, Works board (§5) | adopt (Activity → Sessions; Fleet → Sessions) | FL-05 |
| Attention keys, unread, ack, notification dedupe | One key per "needs you" edge, same on every surface; ack older than the edge never re-flags | Inbox, notification channels, AW-13 (§3) | adopt | FL-05 |
| Git line: branch, ±lines, files, commits vs base, PR + checks | On every session card and detail | Task detail shows branch/checks/PR (§5) | adopt | FL-06 |
| Actions: commit, push, PR, review, fix comments, conflicts, recap | Editable prompt templates with {branch} {base} {pull}; irrelevant actions hidden | platform opens the PR after the node pushes (self-build) | adopt | FL-06 |
| Worktree per session, cleanup after merge | Several agents on one repo at once; "clean up" when the PR merges, branch kept | node worktree pool for Task runs (§1) | extend | FL-06, FL-14 |
| Rename / restart / end a session | From every surface that shows it | cancel / interrupt / resume a Run (§3) | extend | FL-04 |
| Session recordings / re-watch | Terminal and screen recordings bound to the session and its Run | AW-11 P3 columns exist, nothing recorded (§9) | extend | FL-04, FL-07 |
| Structured transcript ("chat view") over a PTY | — | Session detail timeline for cloud Runs (§3) | defer | — |
| Hibernate idle sessions and resume | — | — | defer | — |
| Permission-bypass flags by default | — | acceptEdits | refuse | — |
C. Desktop
| Capability | What good looks like | Ever Works today | Verdict | Epic |
|---|---|---|---|---|
| Live screen of the whole desktop | Changed regions only; per-OS capture; starts at native on LAN | Agent's Chromium window only (§2) | adopt (as desktop source) | FL-07 |
| Mouse and keyboard control | Under the existing take-over rules | input injector exists for the browser; input tag not advertised (§2) | extend | FL-07 |
| Quality presets | Sharp / Smooth / Steady | Sharp / Smooth / Steady (§2) | keep | FL-07 |
| Multi-monitor picker | Pick a monitor; remember it | — | adopt | FL-07 |
| Virtual monitors (headless machines) | Add a display the OS recognises | — | defer (Linux X11 only, phase 3) | FL-07 |
| Desktop beside the terminal with a divider | Watch what the agent did while reading its shell | Screen or Terminal, one at a time (§2) | adopt | FL-07 |
| Take-over rules, grants, audit | Permissioned, time-boxed, exclusive, audited | AW-11 control arbiter (§2) | keep | FL-07 |
| Screen recording and re-watch | Bound to the session; retention enforced | AW-11 P3 columns and retention declared; nothing records (§9) | extend (FL-07 closes AW-11 P3) | FL-07 |
| Wayland | — | — | defer (portal-based, later) | — |
D. Machine facts
| Capability | What good looks like | Ever Works today | Verdict | Epic |
|---|---|---|---|---|
| Logs: system, files, containers, services; tail, filter, pause | Last 500 lines then live; filter; pause counts arrivals | — | adopt | FL-08 |
| Services: list, start/stop/restart, at boot; cut-off warnings | systemd / launchd+brew / Windows; warn when a stop could cut the node off | — | adopt | FL-09 |
| Docker: containers, images, Compose picture/list/logs, shell inside | CLI shell-outs; a Compose project as a picture of its services | docker tag (§1) | adopt | FL-09 |
| Processes with CPU/memory, stop/kill, GPU | Busiest few hundred; confirm before signals | — | adopt | FL-09 |
| Listening ports, web servers first with title + status | Web servers first, "N other ports" folded | — | adopt | FL-10 |
| Open a port locally | — | — | refuse (no local listener in a web app) → open on the machine; preview tunnel phase 2 | FL-10 |
| File browser, copy between machines, upload/download | Allowed roots; streamed with progress; same-name conflicts shown | — | adopt (allowed roots) | FL-11 |
| Clipboard into a desktop | Paste text into this desktop, opt-in, per session | — | adopt | FL-11 |
| Run a command on N machines | Output cards filling live; recent commands | — | adopt | FL-12 |
E. Schedules, checkouts, GitHub
| Capability | What good looks like | Ever Works today | Verdict | Epic |
|---|---|---|---|---|
| Schedules that run on the machine | Run whether or not the platform is reachable; history kept; overlap skipped; cap enforced | Unified Schedules over seven sources; none targets a machine (§4) | adopt (node_schedule source) | FL-13 |
| Scheduled agent work or command | A command with a cadence, or a recurring Task pinned to a Node | recurring Tasks → Runs | extend | FL-13 |
| Checkouts discovered on machines; fetch/pull/push | Scan code folders; link to repo Works | node worktree pool, hidden (§1) | adopt | FL-14 |
| Create a checkout: fresh clone / worktree / container-isolated | Ready in seconds for worktrees; isolated for untrusted code | node fleet-task-workspace (§1) | extend | FL-14 |
| GitHub inbox (review requests, assigned, my PRs) | — | Triggers, Tasks (§5) | feed (Trigger source → Tasks) | FL-15 |
| "Fix with agent" from an issue / PR on a chosen machine | One dialog: machine, checkout, worktree, first message prefilled | assign-task → Agent → affinity | extend | FL-15 |
| Per-machine git identity check | Name/email and credential status with a fix button | GitHub App installation tokens, run-scoped push credential (§1) | extend (no gh dependency) | FL-15 |
| Self-hosted Actions runners: install, status, jobs, stuck diagnosis | Register via the GitHub App; service mode; "no runner can take this job" explained; "Cancel workflow run" | no runner concept (§2.13); the build plugin only selects a runner label for workflows it writes | adopt (plugin github-actions-runners + node jobs, R-14) | FL-18 |
F. Creating machines
| Capability | What good looks like | Ever Works today | Verdict | Epic |
|---|---|---|---|---|
| Windows VMs on a Linux host (KVM-backed installer image) | Installs itself; appears nested under the host; start/stop/destroy | FleetNode.kind has desktop-node · node · k8s; k8s rows are merged live, never stored or leased (§2) | adopt (stored child Nodes running the node runtime) | FL-16 |
| Linux containers as computers | Ready in a minute, node runtime inside, auto-enrolled | — (§2.2: no parent/host column) | adopt as Containers | FL-16 |
| Cloud machines, cost shown, idle policy | Provider plugin; price before creation; hourly / month-to-date / projected; idle → tell me / power off | no machine-provider category (§6) | adopt (plugin category machine-provider, R-15) | FL-17 |
| A created machine is never orphaned | Remove from Fleet refused while the machine exists; destroy instead | Remove deletes the registration only (§2.5 DELETE nodes/:id) | extend (additive guard, R-36) | FL-16, FL-17 |
| Per-workspace ephemeral environment recipes | — | — | defer | — |
G. Agents, MCP, CLI, usage
| Capability | What good looks like | Ever Works today | Verdict | Epic |
|---|---|---|---|---|
One API behind UI / CLI --json / MCP, typed errors with hints | Same shapes everywhere; code + hint with the exact fix | One Agent tool (list_fleet_nodes); MCP whitelist exposes reads, affinity set/clear, drain (enrolment deliberately not exposed); apps/cli has no fleet commands (§2, §6) | extend (Agent, MCP) / adopt (CLI) | FL-19 |
| Read-only tools always, state-changing marked | Annotations on every tool; policy enforced server-side | Agent permissions, tool grants (AW-15) | extend | FL-19 |
| An Agent asks before it acts | Held action → a Decision in My Decisions; one confirmation mechanism for every caller | agent_action_proposals (approvals queue) — R-33 | extend (reuse, no new table) | FL-19 |
| Usage and cost from Claude/Codex transcripts | Per session, machine, folder; list prices; unknown models tokens-only | costCents per job, Budgets, AW-17 (§3); a headless fleet run already records the CLI's own price as a non-debiting ledger row (fleet-node:<provider>) | extend (node scan → attribution for every session, list-price port R-30) | FL-20 |
| Account switching for CLIs | — | per-Agent profile dir (§1) | refuse (credentials stay on the machine) | — |
| Palette entries | Go to any computer or session from the palette | command palette (AW-01) | feed | FL-01 |
| Mobile app / relay | — | web | defer (responsive web is the surface) | — |
| Telemetry | — | — | refuse (no new telemetry) | — |