Loading...
Loading...
Use the local `5dive` CLI on a 5dive runtime VM to spawn, inspect, send to, and tear down sibling agents. Trigger when the user wants a worker, sub-agent, side task, parallel run, fan-out, or to delegate — or names a sibling agent ("ask X", "ping X", "tell X", "hand off to X", "coordinate with X"); confirm it exists via `5dive agent list --json`, then `agent send`. Also for inspecting/restarting/pairing an existing agent, a machine-readable health check (`5dive doctor --json`, `5dive selfcheck --json`), a task's causal history (`5dive trace <id|DIVE-N>`), the current model id per alias (`5dive models`), the host-shared task queue + org chart (`5dive task`, `5dive org`), grouping a multi-task effort under a project (`5dive project add`, `task add --project`), recurring/scheduled work (`task add --recurring`, `5dive heartbeat`), parking a question on a human (`task need`, risk-tiered via `--tier`) or snoozing work (`task park --wake`), searching the team's accumulated memory/wiki (`5dive memory search`) or compiling a durable one into it (`5dive memory add`), reading fleet health / token burn / the daily standup (`5dive supervisor`, `5dive usage`, `5dive digest`), building or editing multi-agent loops — a relay where each step hands off automatically with optional human gates (`task loop start`/`loop ls`) or a maker→verifier review loop (`task add --verifier`, `task reject`, `task loops`), or decomposing an outcome into a guardrailed task DAG (`5dive goal add`) — hiring a ready-made persona off the agent market (`5dive market`, `5dive hire --from-market`) or firing one (`5dive fire`), declarative fleets (`5dive up`, `5dive team import`), hosting a CrewAI crew (`5dive crew`), controlling agents on OTHER registered boxes (`5dive fleet`), running a self-steering objective bound to a live metric (`5dive objective`, `objective replan`), convening a governance vote (`5dive council convene`, `council gate-clear`, `council schedule add` for a recurring convene), the onboarding wizard (`5dive company`), or a delegated GitHub push-for-review (`5dive push`, needs `agent create --can-push`). When a request came over a chat channel (Telegram/Discord `<channel>` tag) and another agent should handle it, pass the chat context via `--reply-to-chat=<id> --reply-to-msg=<id>` so that agent replies from its own bot — don't relay. Always prefer `5dive` over running coding CLIs by hand.
npx skill4agent add 5dive-ai/skills 5dive-cli5divesudo 5dive ...--jsonsudo 5dive agent list --jsonagent send5dive task5dive orgtask add --recurring5dive heartbeattask loop5dive task needtask park --wake5dive memory search5dive usage5dive supervisor5dive digestagent-<name>5dive-agent@<name>.serviceagent-<name>EnvironmentFiletelegramdiscorddashboardnonedashboard--channels=nonesudostandard--isolation=admin5divesystemctl start|stop|restart5dive-*NOPASSWD:ALL5dive taskorgmemoryusageagent createconfigpairheartbeat on/offdoctoragent restart <name> --defersudo 5dive agent _svc <start|stop|restart> <5dive-unit>systemctlantigravity codex claude openclaw hermes grok opencodesudo 5dive agent types --json--json--jsonsudo 5dive agent create scout --type=claude --json{ "ok": true, "data": { "name": "scout", "type": "claude", "created": true } }error.code{ "ok": false, "error": { "code": 6, "class": "auth_required", "message": "..." } }error.classokusagevalidationnot_foundconflictauth_requirednot_installednot_runningpairingpermissiontimeoutgenericreferences/exit-codes.md# 1. Pick a unique name (lowercase letters/digits/hyphens, ≤16 chars,
# must start with a letter). Check the registry first if you care:
sudo 5dive agent list --json | jq -r '.data[].name' # data is an ARRAY of agents
# 2. Create the worker. --workdir scopes its tmux cwd; default is
# /home/claude/projects.
sudo 5dive agent create worker-1 \
--type=claude \
--workdir=/home/claude/projects/myrepo \
--json
# 3. Send it the task. tmux send-keys + Enter, so the text appears
# in the worker's running CLI prompt.
sudo 5dive agent send worker-1 \
"audit the auth middleware for OWASP A01 issues; report back as a markdown bullet list"
# 4. Poll its output until it goes idle. --tmux dumps the scrollback.
sudo 5dive agent logs worker-1 --tmux --lines=80
# 5. Tear it down when you're done — frees the systemd unit + Linux user.
sudo 5dive agent rm worker-1 --json
# `5dive fire worker-1` / `agent fire` are aliases of `agent rm` (same guarded
# teardown) — the counterpart to `5dive hire`.agent clone <src> <dst>5dive hire <name> [--role="CTO"] [--title=...]agent create--type=claudeorg set--role--title5dive market # browse every pack, rarity-first
5dive market <keyword> [--role=<r>] [--rarity=<tier>] [--seasoned] # --seasoned = ships trained memory
5dive market show <slug> # preview: tier, model, skills, card, DID
5dive hire <role> --from-market --dry-run --json # resolve + show disclosure, create NOTHING
5dive hire <role> --from-market [--as=<name>] --yes --json # provision the top match--from-market--dry-runy/N--yesagent importagent import.tar.gzinspect5dive agent inspect <slug|pack.tar.gz> --json # what shell/hooks/skills it would run
sudo 5dive agent import <slug|pack.tar.gz> --as=<name> [--allow-hooks] --jsonimport--allow-hooks..SUDO_USER=agent-*5dive-cli--with-skills=<spec>[,<spec>...]5dive-ai/skills<owner/repo>:<id>--with-skills=5dive-cli,acme/skills:db-tools--no-skills--inherit-memory=<scope>wiki<agent-name>allteam--no-team-bot--defer-authagent create--auth-profile=<name>combined.envsudo 5dive agent create draft-bot --type=claude --defer-auth --json--providerhermesopenclaw--defer-authsudo 5dive agent create cheap-bot --type=openclaw \
--provider=openrouter --api-key=- --json # key on stdinopenrouter google minimax moonshot huggingface anthropic deepseek qwen nous openai zai--provider--type=claudeopenrouter deepseek moonshot zai--auth-profile=<name>ANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKEN--model=<slug>agent config set model=<slug>openai/*google/*z-ai/*deepseek/*sudo 5dive agent config worker-1 set model=claude-opus-4-8
sudo 5dive agent config worker-1 set effort=high
# effort: low|medium|high|xhigh|max — claude only; xhigh/max are Opus-tier.
# model= also works for codex/grok/antigravity agents, and for BYO-provider
# claude agents it takes any slug the provider serves (DIVE-1103).sudo 5dive agent info <name>for type in claude codex opencode; do
sudo 5dive agent create "fan-${type}" --type="${type}" --json
sudo 5dive agent send "fan-${type}" "$PROMPT"
done
# Wait, then collect the last 200 lines of each:
for type in claude codex opencode; do
echo "=== ${type} ==="
sudo 5dive agent logs "fan-${type}" --tmux --lines=200
done
# Cleanup.
for type in claude codex opencode; do
sudo 5dive agent rm "fan-${type}" --json
done5dive.yamlsudo 5dive up # bring up everything declared in ./5dive.yaml (idempotent)
sudo 5dive ps # declared agents' state
sudo 5dive down # tear down declared agents
sudo 5dive export # dump the LIVE fleet to a v2 5dive.yaml (reverse direction)
# Bundled multi-agent company templates:
sudo 5dive team ls
sudo 5dive team import startup --jsontype, channels, telegram_token, discord_token, workdir, skills, no_skills, defer_auth, isolation, auth_profile, provider, api_key${ENV_VAR}5dive crewCREWAI_STORAGE_DIRsudo 5dive crew install <git-url> --as=<name> [--entry=<module:Crew>]
sudo 5dive crew secret set <name> KEY=VALUE [KEY=VALUE ...]
sudo 5dive crew run <name> # also: show <name> | list | uninstall <name>auth_required# If create fails with error.class=auth_required, the type isn't authenticated.
# Two paths — pick by what credentials you have:
# A) Static API key in $KEY (preferred for automation)
echo "$KEY" | sudo 5dive agent auth set claude --api-key=- --json
# B) Device-code flow (when only a human can complete login)
sudo 5dive agent auth start claude --json
# -> session id; give the URL from `auth poll` to the user; they paste the
# callback code back via `auth submit`.5dive agent auth login <type>auth startauth setaccount--auth-profile=<name>5dive account ...agent auth start|poll|submit|cancel# Inventory: which named accounts exist, what types each is signed into,
# and how many agents are bound to each.
sudo 5dive account list --json
# Per-account rate-limit headroom (5h + 7d windows) — check BEFORE moving
# agents around or blaming "quota" for a failure.
sudo 5dive account usage --json
# Detail for one account, including which env keys are populated.
sudo 5dive account show acme-prod --json
# Provision a new empty account, then sign it in (TTY-only — humans).
sudo 5dive account add acme-prod
sudo 5dive account login acme-prod --type=claude
# Rebind an existing agent to a different account. Restarts the agent so
# the new EnvironmentFile takes effect.
sudo 5dive agent set-account worker-1 acme-prod --json
sudo 5dive agent set-account worker-1 default --json # clears the override
# Rename / remove. `remove` refuses while any agents are still bound.
sudo 5dive account rename acme-prod acme-staging --json
sudo 5dive account remove acme-staging --json
# Flip which BYO provider a profile's hermes uses, when several are signed in.
# (hermes-only for now.)
sudo 5dive account set-active-provider acme-prod hermes openrouter --jsondefaultaccount addrenameauth-profile=default/etc/5dive/connectors/<type>.envagent pair# A) Classic — return a pairing code, user DMs the bot, paste the bot reply.
sudo 5dive agent pair worker-1 --json
sudo 5dive agent pair worker-1 --code=AB12CD --json
# B) Auto-detect — long-poll Telegram for the next inbound message and
# seed access.json from whoever DMs the bot first. Useful in onboarding
# flows where the user has the bot open already.
sudo 5dive agent telegram-discover --token="$BOT_TOKEN" --poll-secs=60 --json
# -> {found:true, userId, chatId, ...}; re-poll on {found:false}.
sudo 5dive agent pair worker-1 --user-id=<userId> --chat-id=<chatId> --json
# C) Bot identity for deep links — fast getMe lookup so the dashboard can
# render a tappable t.me/<bot> link alongside the "send /start" prompt.
sudo 5dive agent telegram-getme --token="$BOT_TOKEN" --json
# -> {ok:true, data:{botId, username, firstName}}telegram-discovertelegram-getmesudo 5dive agent telegram-info worker-1 [--refresh] --json
# name-based getMe; reads the token from /etc/5dive/connectors and caches
# botUsername on the registry (backfills @handles for agents created before
# that field existed). --refresh forces a re-fetch.
sudo 5dive agent telegram-pending-ignore worker-1 <code> --json
# drop a pending pairing without approving it (dashboard inbox action).
sudo 5dive agent telegram-resolve-handle worker-1 @someuser --json
# getChat for @handle via the agent's own bot token -> {id, isBot,
# displayName}; lets the dashboard add a bot by handle instead of numeric id.sudo 5dive agent config worker-1 set telegram.token=<bot-token>
sudo 5dive agent config worker-1 set channels=telegram
sudo 5dive agent config worker-1 set telegram.home-channel=<chat-id>
# hermes only — chat id the gateway posts unsolicited messages to;
# ignored by claude/openclaw.-/proc/<pid>/cmdlineecho "$BOT_TOKEN" | sudo 5dive agent config worker-1 set telegram.token=-
echo "$BOT_TOKEN" | sudo 5dive agent telegram-getme --token=-
echo "$KEY" | sudo 5dive agent auth set claude --api-key=-=-=-5dive secret write <KEY> --connector=<name>/etc/5dive/connectors/access.jsonsudo 5dive agent telegram-access get worker-1 --json
echo '{"dmPolicy":"allowlist","allowFrom":[433634012],"groups":{}}' \
| sudo 5dive agent telegram-access set worker-1
# Shortcut at config level: seed the allowlist without the pair-code gate.
sudo 5dive agent config worker-1 set telegram.allowed-users=433634012,5551234groups{}5dive-team-bot-listenergetUpdatesTELEGRAM_SEND_ONLYtask needsudo 5dive agent team-bot status|provision|shared|intercom|discover|refresh-listener
sudo 5dive agent team-group discover|provision|shared|status [--group=<chat_id>]
sudo 5dive agent topic get|set <name> [--thread-id=N --chat-id=N] # per-agent forum topicrefresh-listenerself-updateteam-bot sharedagent sendagent asksudo 5dive agent send <name> "..."$SUDO_USERagent-<you>[5dive-msg from=<you> id=<8-hex>] <your text>--from=<label>--rawsudo 5dive agent sendagent-*$()[5dive-msg from=scout id=ab12cd34] please summarise the auth middleware auditsudo 5dive agent send scout "[re=ab12cd34] auth middleware looks clean except for ..."[re=<id>]agent askagent logsasksudo 5dive agent ask scout \
"list the OWASP A01 issues you found, one per line" \
--timeout=180 --jsontmux capture-pane--idle-secs--json{ok:true, data:{name, from, msg_id, reply}}askask--timeoutsendlogs--reply-to-chat=<id>--reply-to-msg=<id><channel><channel source="plugin:telegram:telegram" chat_id="433634012" message_id="4671" user="..." ts="...">
redirect to marketing
</channel>chat_id--reply-to-chat=<chat_id>message_id--reply-to-msg=<message_id>sudo 5dive agent send marketing \
--reply-to-chat=433634012 --reply-to-msg=4671 \
"User @alice asked your take on the Q3 launch copy. Reply in the chat
via your own bot — do not reply back to me."[5dive-msg from=ops id=ab12cd34 reply-to-chat=433634012 reply-to-msg=4671] ...reply-to-chat=<id>reply-to-msg=<id>reply_toagent sendagent logs --tmuxagent askagent sendagent ask&wait--from/var/lib/5dive/tasksagent-*# Queue a unit of work and hand it to a worker. Tasks get a DIVE-N ident (or a project's prefix — see Projects below);
# --from defaults to your agent name, so created_by is attributed for you.
5dive task add "audit the auth middleware for OWASP A01" \
--assignee=worker-1 --priority=high --json
# --assignee also takes org-routing tokens (role:<r> / charter:<kw>); omit it to
# route to the org lead/coordinator.
# --task-budget=<tokens|$cost> caps the on-host loop's spend for that task
# (DIVE-824): a bare number is a token count, a leading '$' is a dollar cost
# (e.g. $3). It rides on the task row and is enforced via the Messages-API
# task_budget — a real per-run cap, not advisory. ALWAYS set one on recurring
# or autonomous tasks so an unattended loop can't run away.
# What's open, who's on what (priority-ordered); --mine filters to you.
5dive task ls --json
5dive task ls --mine --json
# Drive status as work moves. block/unblock express dependencies.
5dive task start DIVE-7 --json # -> in_progress
5dive task done DIVE-7 --result="one-line summary first; detail below" --json
5dive task block DIVE-9 --by=DIVE-7 --json # DIVE-9 waits on DIVE-7
# Express who coordinates whom. --manager=default puts an agent at the top.
5dive org set worker-1 --manager=lead --title="Auth audit" --json
5dive org tree --jsondonecancel--result5dive task ls --mineagent sendtask initDIVE-NFROG-1FROG-2DIVE-NdiveDIVE# Open a project. prefix defaults to the upper-cased key (frog -> FROG).
5dive project add frog --name="Frog migration" --goal="port the parser" \
--lead-agent=worker-1 --json
5dive project ls --json # key, prefix, task count, lead, status
5dive project show frog --json
# File work into it — the task gets the project's prefix (FROG-1, FROG-2, ...).
5dive task add "port the lexer" --project=frog --assignee=worker-1 --json
5dive task ls --project=frog --json # everything in that projecttask adddiveDIVE-Nstartdoneneedblockloopheartbeattask loop start --project=frogtask need5dive task need DIVE-12 --type=decision \
--ask="Ship behind a flag or straight to prod?" \
--options="flag|prod" --recommend="flag" --tier=1 --json
# --type: decision | secret | approval | manual | access
# -> task goes blocked; the human gets an alert with tap buttons.
# --type=access: "I'm blocked on a permission/grant I don't have." Pair it with
# --probe=<cmd> (DIVE-1243) — a self-check that must currently FAIL; if it
# succeeds the gate is refused (you already have it) instead of pinging a human
# for nothing. No --probe still files, just with a warning to confirm you tested.
5dive task need DIVE-9 --type=access --probe="aws s3 ls s3://prod-bucket" \
--ask="Need read access to prod-bucket" --recommend="grant s3:GetObject" --json
5dive task inbox --json # everything currently waiting on a human
5dive task answer DIVE-12 --value="flag" --json # records + unblocks + pings the owner
# You (an agent) can only `task answer` a tier-0/1 DECISION gate. approval /
# secret / manual gates are HUMAN-ONLY now (enforcement ON): they clear via a
# Telegram tap (per-gate --human-proof nonce, minted as root — your LLM never
# sees it) or a non-agent SUDO_UID, never a bare agent-session `sudo task
# answer`. The old forgeable --proof evidence form was removed (DIVE-916/950).--ask--recommend--tier=0|1|20--recommend1auto:ttldecision2--recommend--recommendtask park5dive task park DIVE-12 --reason="revisit after launch" --wake=+3d --json
# --wake=<YYYY-MM-DD[ HH:MM]|+Nd|+Nh> auto-unparks it back to todo
5dive task unpark DIVE-12 --json # wake it early--reason--waketask needparktask needtask escalate <id>task clear-recs--recommend5dive task clear-recs --channel-proof=<chat_id> --json # clear everything eligible
5dive task clear-recs --channel-proof=<chat_id> --only=DIVE-9 --json # just onetask coordinator [--json]agent send# Template: 5-field cron. Inert until it fires (excluded from ls/heartbeat).
5dive task add "rotate the weekly metrics digest" \
--recurring="0 9 * * 1" --assignee=worker-1 --json
5dive task ls --recurring --json # list templates
# Enrol the worker so the tick wakes it when tasks land. Default every=30m.
# fresh (default on) sends /clear before each task; --no-fresh keeps context.
sudo 5dive heartbeat on worker-1 --every=30m
sudo 5dive heartbeat ls # enrolled agents + next wake + queued count
sudo 5dive heartbeat off worker-1heartbeat tickworker-1task --assigneeagent-worker-1task donetask loop start# Start a relay. --steps is a JSON array; each item is either a work step
# {agent,label,handoff?} or a human gate {gate:"approval",label}.
5dive task loop start --title="Content pipeline" --steps='[
{"agent":"olivia","label":"Pick the topic and brief the writer","handoff":"briefs"},
{"agent":"theo","label":"Draft the post","handoff":"sends to review"},
{"agent":"dario","label":"Fact-check and tighten","handoff":"sends for approval"},
{"gate":"approval","label":"You approve before it publishes"},
{"agent":"theo","label":"Publish and close"}
]' --json
5dive task loop ls --json # board of loop runs: per-run step progress + status
# Rows carry the latest grade scorecard per run: `scorecard_json` in --json
# ('' when ungraded), a `score` column (84/100 style) on the text board.task donetask answertask lstask assigntask block/unblocktask rmtask needtask rmtask addtask done--no-verifyFIVE_VERIFY_DEFAULT=05dive task add "migrate the auth module to the new SDK" \
--assignee=dario --verifier=marcus --max-iters=3 \
--accept="builds clean, tests pass, no public API change" --json
# The maker's `task done` does NOT close it — it hands off to the verifier, who
# grades against --accept and either closes it (their own `task done`) or:
5dive task reject DIVE-7 --feedback="tests pass but the public signature changed" --json
# -> bounces back to the maker for another pass; escalates to a human at --max-iters.
5dive task loops --json # board of maker→verifier loops (--stuck / --escalate-stuck)
5dive task loops --runs --json # LOOP-7 loop_runs control window: topology/stage/
# iteration/token-ceiling/status; --watch repaints,
# --kill <loopId> requests a deferred-safe stop--verify="<cmd>"5dive task verify <id>task donetask donedone5dive task verifier <id> <agent> [--accept=<criteria>] [--max-iters=<n>]5dive task deliver <id> --pr=<url> [--result=<text>]task donetask donedelivertask set-branch--branch=add--force-merge-gate5dive looptask loop--ceilingtask loops --kill <loopId>5dive loop spawn --role=maker|verifier|worker --agent=<type|name> \
--prompt="…" [--schema=<json>] [--ceiling=<tok>] [--wait[=<sec>]]
5dive loop verify --target=<id> --verifier=<agent> [--accept="…"]
5dive loop grade --target=<id> --verifier=<agent> [--accept="…"] [--threshold=0-100] [--wait]
5dive loop panel --n=<k> --lens="correctness,security" --claim="…" --quorum=<m> # jury
5dive loop map --over=<json-array> --do=<spawn-spec> [--max-concurrency=<n>] # fan-out
5dive loop until-dry --round=<spawn-spec> --stop-after=<K> --dedup-key="…" # drain a queue
5dive loop collect --handles=<id,id,…> # gather results from spawned handles
5dive loop status --handle=<loopId> # read-only single-loop drilldown
5dive loop install <slug> --onto=<agent> [--cron="…"] [--ceiling=<tok>] [--dry-run]
# drop a marketplace loop pack (persona +
# skills + cadence) onto an agent; peek first
# with `loop show <slug>`5dive goal addtask_deps5dive goal add "ship a public status page" --dry-run --json # plan + render, create NOTHING
5dive goal add "ship a public status page" --json \
[--project=<key>] [--planner=<agent>] [--max-tasks=12] [--depth-cap=5] \
[--checkpoint=6] [--ceiling=40000] [--yes]
# --yes waives ONLY the count checkpoint; a Tier-2 plan still gates hard.
5dive goal add --from-gate=<id> --json # materialize a plan a HUMAN answered 'approve'
# (the only path that builds a Tier-2 plan)--dry-run5dive objectivegoaltick5dive objective add "warm pool >= 1" --metric-cmd="5dive ps --warm --json | jq length" \
--target=1 --direction=up [--unit=count] [--public]
5dive objective ls | show <name> | tick [<name>] | pause <name> | rm <name>
5dive objective resume <name> [--force] # --force bypasses an OSS-33 preflight refusal
# (the planner role currently can't do the work)--metric-cmd--direction--publictickpauseresumermobjective replan <name>goal add5dive objective replan warm-pool --dry-run --json # see the proposed diff, create nothing
5dive objective replan warm-pool --json \
[--max-new-per-cycle=3] [--no-progress-limit=3] [--yes] [--from-gate=<id>]
# --yes waives ONLY the count-over-checkpoint gate — a Tier-2 task in the diff
# still hard-gates, and nothing under --shadow/--propose-only is waivable.
# --no-progress-limit=N auto-pauses the objective after N flat/adverse cycles.--dry-rungoal add5dive council5dive councilcouncil convene "<question>"council gate-clear <task>initpromotedemoteexpelbench add/rmrosterlogverifyreferences/commands.mdtask need5dive push--can-push--isolation=standard5dive push DIVE-42 [--branch=<b>] [--dry-run]sudo 5dive push setup5dive company5dive company --yes --name=<n> --objective="<outcome>" --metric-cmd="<cmd>" --target=<n> --direction=up|downproject addobjective addgoal add5dive memory search~/.claude/projects/*/memory5dive memory search "hetzner capacity gotchas" --json
5dive memory search "deploy rollback" --limit=4 --max-tokens=800
5dive memory search "auth" --roots=/path/a,/path/b # override the default roots
5dive memory search "auth" --store=wiki # all (default) | mine | wiki
5dive memory search "auth" --agent=marcus # another agent's store (per-user 0600 — root only)memory add--store=wiki--forceecho "$BODY" | 5dive memory add --name=hetzner-cpx-drought \
--description="cpx line delisted post price-hike; cx dry-run false-positive" \
--type=reference --store=wiki --tags=hetzner,capacity \
[--valid-to=2026-12-31] [--supersedes=<slug>] [--confidence=high] [--provenance="<src>"]
# lifecycle envelope (DIVE-1024): recall demotes/flags expired, superseded, low-confidence.
5dive memory doctor --json # hygiene: index drift, dangling [[links]], stale refs, near-dupes# Standup digest: shipped last 24h / in progress / open human gates /
# auto-cleared gates / token burn / heartbeat health.
5dive digest --json # --7d widens the window
sudo 5dive digest --send # deliver to the paired Telegram chat
sudo 5dive digest on --at=7 # opt in to daily auto-delivery (default OFF); off | status
# Token burn, per agent / per task (subscription tokens, no dollars).
5dive usage --json # board: top agents + top tasks, 24h (--7d)
5dive usage worker-1 --json # one agent: per-model + per-task breakdown
5dive cost --json # budget-focused board: per-agent 24h burn vs soft/ceiling + state
5dive activity worker-1 --json # what it actually DID: files touched, commands run, cost
# (--task=DIVE-N to scope · --limit=N · --7d)
5dive usage loops --json # spend rolled up per loop / topology
sudo 5dive usage budget set worker-1 --daily=2000000 [--ceiling=<tok>] [--hard-stop]
# --daily soft cap -> ⚠ on the board; hard-stop OFF by default
sudo 5dive usage budget ls # all budgets; `budget clear worker-1` removes one
# Fleet health board: per-agent state, classification, cause, last activity.
# Classes: healthy | slow | update-pending | stuck | drift (cause one of
# service-dead|tmux-dead|poller-dead|loop-stuck|no-progress|stale-cli|goal-drift).
# The BOARD is observe-only. Recovery is a separate opt-in: the P2 ladder
# (DIVE-857/970) sits behind its own root sentinel (supervisor.actions.enabled)
# and, when flipped on, walks a stuck agent through nudge -> resume -> rotate
# with exponentially spaced attempts, escalating to the paired human when the
# ladder is exhausted. Sentinel absent = zero actions, audit-only ticks.
sudo 5dive supervisor
sudo 5dive supervisor --watch # live repaint (default 5s)
# Crash-loop detection is SEPARATE — it lives in the restart wrapper
# (hooks/run-loop.sh, DIVE-1029): exponential backoff on an agent dying within
# seconds, surfaces the real stderr once, and SUPPRESSES the false "usage limit
# reset, agent resumed" banner while it's actually just crashing.usageaccount usagesupervisor5dive fleetsudo 5dive fleet add prod-2 --host=1.2.3.4 --key=/home/claude/.ssh/id_ed25519
5dive fleet ls
5dive fleet status --json # per-box reachability + agent counts (parallel SSH)
5dive fleet agents --json # every agent across the fleet, one view
5dive fleet send scout@prod-2 "status report please"
5dive fleet restart scout@prod-2addrmsudo 5dive doctor --json{ ok: true, data: { summary, checks } }data.summary.errors > 0--fix--repair--dry-run--category=deps|types|auth|creds|registry|shelld|channels|host|memorysudo 5dive agent stats --all --json # whole fleet: unit state, restarts, health
sudo 5dive agent stats worker-1 --json
5dive update --check --json # is the CLI behind/stale? read-only, no root
sudo 5dive watch # htop-style live view (interactive TTY only)5dive self-update--jsonagent rmgetUpdatesworker-N5dive agent rm <name>5dive5dive --helpauth login <type>agent send --reply-to-chat=<id> --reply-to-msg=<id><channel>task need5dive trace <id|DIVE-N>verdict:5dive selfcheck --jsonnot-reached5dive models [--json]opussonnetfablehaikureferences/commands.mdreferences/exit-codes.mdreferences/paths.mdsudo 5dive --helpsudo 5dive agent <sub> --help5dive --help