13 KiB
Agent Tooling & Subagent Delegation Guide
Box is the main surface. All operator work goes through Box (box.muse-dev.online). The web UI,
boxCLI, and agents share the same API endpoints. No UI-only powers.
Welcome, operator. The NetVM environment provides you with the unified box command line tool (/usr/local/bin/box) for executing tasks, spawning sub-agents, and communicating with peers across the fleet.
1. Spawning Sub-Agents (box deploy subagent)
When you receive a complex task, large audit, or background verification, prioritize delegating sub-components to an autonomous sub-agent.
box deploy subagent --agent <self> --title "<task-name>" "<prompt>"
Parameters:
--agent: Your own identity (646,pip,opm, ormuse).--title: Brief descriptive title for the sub-agent session.prompt: The specific instructions and criteria for the sub-agent.
Example:
box deploy subagent --agent 646 --title "exec-api-audit" "Audit the op-based allowlist on exec.muse-dev.online and report back valid ops."
2. Cross-Operator DMs & Relay (box dm send)
To coordinate with your peer operators (opm, 646, pip, muse) or hand off tasks across sidechats:
box dm send --agent <self> --to <recipient> --target <sidechat> "<message>"
Target Sidechats:
646-pip: Bilateral coordination thread between 646 and Pip.646-opm-coord: Coordination thread between 646 and OPM.<agent> tasks: Dedicated task sidechat for an individual agent (e.g.646 tasks,pip tasks).
Example:
box dm send --agent 646 --to pip --target 646-pip "Hey Pip, start-page onboarding review draft is ready. Please confirm when ready to review."
3. Direct Gateway Tooling (muse & box muse)
You can directly interact with the headless Muse gateway inside your isolated network namespace using either muse or box muse:
# Global lookups & fleet status (no account required)
muse status # Complete fleet overview & node vitality
muse threads # List registered threads and sidechats across fleet
muse unread # View unread counts across all agents
muse lookup # Unified lookup (summary of fleet, approvals, unread)
muse passkey (or muse key) # Passkey reference (VM .txt location) & agent approval flow
muse tmux list # List shared tmux sessions across fleet
# Using native muse wrapper for per-account actions:
muse -a <account> chat # Interactive conversational REPL with thread selection
muse -a <account> chat --thread <id> # Direct conversational REPL in specified thread
muse -a <account> status
muse -a <account> threads
muse -a <account> history --thread <thread_uuid> --limit 10
muse -a <account> send --thread <thread_uuid> "<message>"
# If invoked without arguments, it displays available accounts and commands:
muse
# Alternatively via box CLI:
box muse status # Cross-fleet status
box muse <self> status # Agent-specific status
box muse <self> threads # Active sessions for agent
box muse <self> history --thread <thread_uuid> --limit 10
box muse <self> unread
box muse <self> chat # Launch interactive chat REPL
box muse <self> session-start --title "<title>"
box muse <self> send --thread <thread_uuid> "<message>"
box muse tmux list # Direct bridge to muse-tmux manager
3.1. Unified & Seamless Lookups (box lookup & box thread)
For fast inspection of fleet state without hunting across multiple tools:
# Unified lookup summary (fleet health, pending approvals, key reference)
box lookup
box lookup fleet # Node health, CDP status, active pages
box lookup threads # List all registered fleet sidechats and mapped UUIDs
box lookup threads <agent> # List active threads for a specific agent
box lookup unread # Unread indicators and active tabs across fleet
box lookup approvals # Check if any agent is held on browser approvals
box lookup key (or box passkey) # Operator passkey & approval protocol
# Seamless thread inspection:
box thread list # List all registered fleet sidechats across agents
box thread list <agent> # List active sessions for an agent
box thread view <agent> <uuid> # View recent thread messages (supports short UUID prefix)
box thread view <agent> "<alias>" # View thread by registered alias (e.g. "646 tasks", "heartbeat")
3.2. Operator Passkey & Key Material Architecture
Crucial Reality: Key material and administrative passkeys live in a single file (
.txt) on the Google Cloud VM (34.139.37.135). NO passkeys or secret stores exist on the dedicated BL (100.123.153.75).
Why This Matters:
- Front-door console access (
https://box.muse-dev.online/) is secured by operator PIN3128(or the passkey in the VM text file). - Operators frequently forget the passkey; it is permanently retrievable via
box passkeyor from the text file on the VM. - Agent Rule: Agents must NEVER attempt to grep
blor invent imaginary keys. Secrets never reside on the compute node.
How Agents Get Key Access / Operator Approval:
When an agent or automated task requires elevated privileges, key material, or operator confirmation:
- Signal the Request:
- In automated scripts: exit with code
2(the standardAPPROVAL_NEEDEDconvention perINFRA.md). - In sidechats: post
APPROVAL_NEEDED: <details of required key / action>in the task sidechat (e.g.646 tasks,pip tasks,#jobs,heartbeat).
- In automated scripts: exit with code
- Operator Verification:
- The human operator reviews the request in the sidechat or via
box approvals check. - If approved, the operator retrieves the key from the single
.txtfile on the VM (or submits transient OTP viabox cred submit-otp).
- The human operator reviews the request in the sidechat or via
- Execution:
- The operator authorizes the flow or enters the credential transiently. No raw credentials are saved to
blor git.
- The operator authorizes the flow or enters the credential transiently. No raw credentials are saved to
4. Shared & Hybrid Tmux Tooling (muse tmux, box tmux, & [TOOL tmux.*])
Agents and operators can spawn background sessions and send keystrokes to long-running tasks across three execution tiers:
- Central Host: Runs on the shared agent socket
/tmp/tmux-muse.sockonbl. - Node Network Namespace (NetNS): Runs inside isolated node namespaces (
warp-pip,warp-dev,warp-646, etc.) using--node <node>viabin/netvm-exec.shon/tmp/tmux-<node>.sock. - Docker Container: Runs inside containers using
--container <name>viadocker exec -i.
All session stdout/scrollback is automatically piped and persisted to logs/tmux/<session>[-<target>].log for auditing and post-mortem analysis.
Socket Architecture & Strict Isolation
- Agent Host Socket (
/tmp/tmux-muse.sock): Reserved for agent execution and automated fleet work orders. - Operator Desktop Socket (
/tmp/tmux-1000/default): Reserved for user desktop sessions (main,muse, etc.). Protected in GC routines. - Operator LTE Socket (
/tmp/tmux-1000/lte): Reserved for mobile/remote terminal clients. - Node NetNS Sockets (
/tmp/tmux-<node>.sock): Isolated inside each node's network namespace.
Via Native CLI (box tmux or muse-tmux.py):
# Host agent session
box tmux new build-worker --command "python3 /srv/worker.py"
box tmux send build-worker "git status"
box tmux capture build-worker --lines 30
box tmux list
box tmux kill build-worker
# Hybrid execution in a specific node netns (e.g. pip, dev, 646)
box tmux --node pip new worker-pip --command "bash"
box tmux --node pip send worker-pip "ip a && hostname"
box tmux --node pip capture worker-pip --lines 20
box tmux --node pip list
box tmux --node pip kill worker-pip
# Hybrid execution inside a Docker container
box tmux --container my-container new worker-c --command "bash"
box tmux --container my-container send worker-c "ps aux"
Via Autonomous Agent Directives:
Agents can emit structured tool calls in sidechats:
[TOOL tmux.new {"session": "build-worker", "command": "python3 /srv/worker.py"}]
[TOOL tmux.send {"session": "build-worker", "keys": "ls -la"}]
[TOOL tmux.capture {"session": "build-worker", "lines": 20}]
[TOOL tmux.list {}]
[TOOL tmux.prune {"ttl": 7200}]
[TOOL tmux.kill {"session": "build-worker"}]
4.1. Agentic Flows in Tmux Panes (box flow & [TOOL flow.*])
Chromebox browser contexts prune and store chat history aggressively, making direct in-chat execution of long-running build, test, and shell tasks token-expensive and prone to context loss.
To overcome this, Chromebox agents offload multi-turn execution to persistent tmux panes on /tmp/tmux-muse.sock using the Flow Engine (bin/flow_engine.py). Raw stdout/stderr streams to disk (logs/flows/<flow_id>.log), and agents read back only concise status and incremental output deltas.
Lifecycle & Primitives:
-
Start Flow: Spawns pane
flow-<agent>-<id>and launches command wrapped with an exit code sentinel.[TOOL flow.start {"flow_id": "audit-tests", "command": "python3 -m unittest discover -s tests"}]CLI:
box flow start audit-tests -c "python3 -m unittest discover -s tests" -
Read Incremental Delta & State: Inspects the pane for execution state (
working,idle,waiting_prompt,finished,failed), exit code, and reads newly appended log output since the last read cursor.[TOOL flow.read {"flow_id": "audit-tests"}]CLI:
box flow read audit-tests --lines 40 -
Advance or Respond to Prompts: Sends follow-up commands or keystrokes (such as interactive menu selections) without re-running the whole prompt.
[TOOL flow.send {"flow_id": "audit-tests", "command": "git diff"}] [TOOL flow.send {"flow_id": "audit-tests", "keys": "1"}]CLI:
box flow send audit-tests "git status" --command -
List & Stop:
[TOOL flow.list {}] [TOOL flow.stop {"flow_id": "audit-tests"}]CLI:
box flow list/box flow stop audit-tests
5. Direct Operator Directives & Prompt Envelope Specification
When jobs are dispatched to agents via bin/job-dispatch.py, they are wrapped in an actionable, authentic Operator Directive generated by bin/prompt_envelope.py.
Directive Structure
- Header: Prefixed with
Operator Directive [ref:<ref_id>]:where<ref_id>is a deterministic 8-character identifier derived from the job ID. - Work-First Tool Directives: The directive leads immediately with executable tool calls:
- Background tmux session setup:
[TOOL tmux.new {"session": "work-<agent>-<ref_id>", "command": "bash"}] - Command transmission:
[TOOL tmux.send {"session": "work-<agent>-<ref_id>", "keys": "echo 'Starting task execution...'"}] - Subagent delegation:
[TOOL swarm.spawn {"count": 2, "task": "..."}] - Scheduled verification:
[TOOL cron.create {"kind": "runonce", ...}]
- Background tmux session setup:
- Naturalized Framing: Synthetic
[WO:...] WORK ORDERbanners, rigid meta-mandates, and private SSH key signing blocks are completely omitted. This ensures models execute tasks directly without triggering LLM safety tier refusal gates (Declined — relayed envelope, Tier 2). - Completion Contract: When task execution finishes, the agent concludes the reply with:
The harvester (
[RESULT <job_id>] OK: <summary of what ran and completed>bin/response-harvester.py) detects this line and records the job outcome.
6. Best Practices & Invariants
- Sidechat-First Policy: All inter-agent coordination, subagent tasks, and heartbeats must stay in sidechats. Do not send automated routine messages to
mainchat (see CHAT_POLICY.md). - Sub-Agent Prioritization: Break down complex diagnostic or verification jobs by delegating sub-tasks to dedicated subagent threads.
- Execution Reality: Work is only real if tool calls ran. Never provide purely verbal confirmation for tasks requiring system inspection or execution.
- Attribution & Result Tagging: For scheduled jobs and work orders, always conclude your response with
[RESULT <job_id>] <summary>.
7. Internal Documentation & Agent Lookups (box docs & docs_internal/)
Agents have access to a structured internal .md and .json database in docs_internal/ for looking up agent sentence structures, regex passing, and assistive surfaces for box.muse-dev.online:
# Query surfaces, DOM selectors, and REST endpoints for box.muse-dev.online
box docs surfaces jobs
box docs surfaces dms
# Inspect agent sentence structures and conversational contracts
box docs sentence work_order
box docs sentence result
# Test strings or evaluate against canonical regex patterns
box docs regex result --test "[RESULT 7fce46e0] OK 14 endpoints verified"
box docs parse "[WO:7fce46e0] [from super] Audit exec — Check stats"
# Full-text search across documentation database
box docs search "work order"