From agentops
Orchestrates NTM tmux agent swarms and robot APIs for spawning panes, reading robot state, triaging work, managing locks/mail, safety, pipelines, and serve.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agentops:ntmThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<!-- TOC: One Rule | Outcome | Cold Start | Mandatory Loop | NTM Action Card | Surface Selection | Pattern Tiers | Anti-Patterns | Pre-Flight Checklist | Output | Operating Notes | Reference Index | Related Skills -->
assets/envrc.exampleassets/pipeline-example.yamlassets/policy-example.yamlreferences/COMMANDS.mdreferences/CONFIG.mdreferences/DASHBOARD.mdreferences/DURABILITY.mdreferences/ENSEMBLE.mdreferences/ENV-VARS.mdreferences/INTEGRATIONS.mdreferences/PIPELINES.mdreferences/ROBOT-MODE.mdreferences/SAFETY.mdreferences/SELF-TEST.mdreferences/SEND.mdreferences/SERVE.mdreferences/SPAWN.mdreferences/TROUBLESHOOTING.mdreferences/WORK-AND-ASSIGN.mdScope: this skill is AgentOps operating doctrine for NTM. The binary is self-describing — for command syntax, flags, schemas, and examples use
ntm --robot-docs=quickstart|commands|examples|exit-codes,ntm --robot-capabilities,ntm --robot-schema=all, orntm --help. Never trust this file (or any notes) over the live contract. For tending loops, marching orders, unstick ladders, and swarm cadence, use the companionvibing-with-ntmskill.
atmis the same binary.atm(Bo's fork/alias,~/.local/bin/atm) is byte-identical tontm— same--help, same--robot-*surface, same flags, same exit codes. Everyntm …form documented here and in the references applies verbatim toatm …, and vice-versa. Use them interchangeably; the companion out-of-session substrate skill is literally namedusing-atm. When--robot-capabilitiesmatters, query whichever binary you invoked — they resolve to the same contract.
The One Rule: Discover the live NTM contract first, then use the least interactive surface that can prove and execute the action. No
--robot-capabilities/--robot-snapshotevidence -> no automation assumption.
The most common NTM mistake is treating it like a tmux macro runner. NTM is a control plane: robot API, attention feed, work graph, locks/mail, pipelines, safety, approvals, serve API, and durability all have explicit contracts. Use the contract.
A state-changing NTM action is complete only when all of the following hold:
ntm --robot-snapshot — not just acknowledged by the command's exit code. (NTM commands can succeed at the API layer while panes/work/locks remain unchanged; trust the snapshot, not the return value.)--robot-attention / --robot-tail) shows the expected event(s) — pane output, work-graph movement, lock acquire/release, mail delivery. Absence is evidence of failure.If the snapshot or attention feed disagrees with what the command said happened, trust the snapshot and re-discover the contract — the local model of NTM is stale.
| Situation | Start here |
|---|---|
You need NTM doctrine, then exact syntax via --robot-docs / references | This skill |
| You are tending an already-running swarm and deciding whether to nudge, restart, stand down, or dispatch marching orders | /vibing-with-ntm |
| You are running a Brenner-style hypothesis investigation or incident RCA through NTM panes | brennerbot-with-ntm |
| You only need Beads or BV mechanics | /beads-br or /beads-bv |
For any state-changing action, verify the live contract with ntm --robot-capabilities before executing.
ntm-browser-test-coordination + ntm-review-worker-orchestration route hereagent-mail, keep screenshot/artifact paths in the pane
output, and confirm completion in --robot-snapshot + the attention feed before handing off.1. DISCOVER -> ntm --robot-capabilities; ntm --robot-tools; repo AGENTS.md/README.md
2. SNAPSHOT -> ntm --robot-snapshot; inspect sources/degraded_sources, cursor, sessions, panes
3. SELECT -> choose the smallest surface: work/assign/send/wait/pipeline/locks/mail
4. PROVE -> fill the NTM action card: target, contract, safety, ownership, rollback
5. EXECUTE -> prefer --robot-* for automation; avoid human-only TUIs
6. VERIFY -> attention/events/causality/tail plus git/br/mail evidence changed as expected
7. CLEANUP -> release/renew locks, checkpoint/handoff, prune old pipeline state when appropriate
8. REPEAT -> re-snapshot on cursor expiry or after any state-changing action
For every state-changing NTM action, be able to answer this before running it:
## NTM action: <command>
- Target session/project: <name/path>; resolved by: `ntm config get projects_base` / `ntm quick` / snapshot
- Live contract checked: `ntm --robot-capabilities` contains <flag>; schema/docs checked if unfamiliar
- Evidence before: cursor=<N>; sources=<fresh/degraded>; panes=<count>; locks=<summary>
- Ownership/safety: Agent Mail reservation or worktree policy is clear; user pane inclusion is intentional
- Blast radius: panes/files/sessions affected; destructive/safety/policy approvals required? <yes/no>
- Verification after: <robot event / tail movement / bead state / git change / pipeline status>
- Recovery: <smart restart / interrupt / checkpoint restore / cancel pipeline / handoff>
If you cannot fill the card, do a read-only discovery pass first.
Score candidate surfaces when several could work:
Score = (ContractFit x Observability x Reversibility) / BlastRadius
ContractFit 1-5: exact robot/schema match beats human help text
Observability 1-5: action emits cursor/event/status/causality evidence
Reversibility 1-5: easy cancel/retry/restore/checkpoint
BlastRadius 1-5: one pane/file is low; whole session/process tree is high
Pick the highest score. In ties, prefer the surface that produces structured output. Enumerate candidates from ntm --robot-docs=commands, not from memory. Standing preferences:
--robot-* for anything machine-driven; ntm dashboard / ntm palette / ntm view are human-only TUIs.--robot-format=toon (or NTM_ROBOT_FORMAT=toon) and --robot-verbosity=terse when context is tight.--robot-wait / --robot-attention) over fixed sleep/poll loops.Escalate only with the action card filled; each tier raises the proof bar:
sources / degraded_sources reviewed, cursor advancing, no conflicting reservation.| Bad move | Why it fails | Use instead |
|---|---|---|
Call ntm view from automation | Retiles the human layout and returns nothing useful | --robot-tail, --robot-snapshot, or --robot-dashboard |
Trust old notes over --robot-capabilities | NTM surface changes quickly | Discover first |
Send to --all without naming the user-pane intent | Can hit the operator pane | use type/panes or -s/--skip-first |
| Treat cursor values as portable | Cursors are per-server monotonic | checkpoint/handoff for portability |
| Kill/restart before a liveness proof | Destroys partial work | diagnose -> smart restart -> explicit restart |
| Conflate pipeline status and run | --robot-pipeline=<id> is status | --robot-pipeline-run=<file> |
| Retry degraded mail/CASS forever | Burns the session | record degraded source, use fallback, continue |
| Infer abandoned beads from silence | NTM deliberately does not implement bead_orphaned | explicit status/mail/reservation evidence |
Trust a fresh spawn --cod pane blind (bare shell) | Some builds leave a bare zsh; prompts execute as shell text | verify with --robot-tail; relaunch the CLI, or fall back to codex exec -C <worktree> per lane |
Fire a separate send right after a bare spawn (boot race) | spawn returns before the agent boots to its input box; the first send is silently dropped → pane is never-engaged (CLI alive, 0.0% CPU) | wait for input-ready first: --assign / --init-prompt / --robot-wait=ready; if already dropped, re-dispatch, don't restart (vibing OC-047) |
AGENTS.md / README read when operating inside a codebase (repo-local rules override this skill).ntm --robot-capabilities checked for any unfamiliar flag.ntm --robot-snapshot captured and sources / degraded_sources reviewed.projects_base make sense.NTM actions produce no skill-owned files. The deliverable is verified state plus evidence:
--robot-* commands, cited in your report.Evidence: file under .agents/ or the path the bead names) — not into this skill.projects_base (NTM_PROJECTS_BASE), or agent-mail/beads/reservations register under a different key than NTM sees. If tools "see different projects," fix this first.--worktrees isolation is allowed when repo policy permits. If mail/reservations are degraded, record it and use bead assignee/status as the soft lock — no retry loops.ntm safety / ntm policy / ntm approve (approve takes a token, not a bead id) instead of ad hoc shell habits; obey repo rules that route builds through rch or similar.-- label separator, send-vs-spawn flag parsers, attention flag namespacing, PATH precedence for safety wrappers, and more) lives in TROUBLESHOOTING.md.Keep depth out of this file. The binary's own docs (ntm --robot-docs=...) are the first stop for syntax; load these for operator-handbook detail:
| Topic | Reference |
|---|---|
ntm send deep reference (selectors, templates, CASS dedup, error modes) | SEND.md |
ntm spawn deep reference (counts/variants, labels, worktrees, recipes, stagger) | SPAWN.md |
Work intelligence & assignment (ntm work *, ntm assign, bv integration) | WORK-AND-ASSIGN.md |
Ensemble mode (reasoning modes, presets, --robot-ensemble-*) | ENSEMBLE.md |
| Pipelines (YAML schema, run IDs, resume/cancel, robot flags) | PIPELINES.md |
| Serve API (auth modes, REST route map, OpenAPI, SSE) | SERVE.md |
Safety, policy, approvals (policy.yaml, tokens, what safety install drops) | SAFETY.md |
| Durability stack (checkpoint vs timeline vs handoff vs resume) | DURABILITY.md |
| Integration surfaces (DCG, SLB, CAAM, RCH, mail, cass, quota) | INTEGRATIONS.md |
Environment variables (NTM_*, TOON_*) | ENV-VARS.md |
| Troubleshooting (symptom / root cause / fix, full gotcha entries) | TROUBLESHOOTING.md |
| Self-test / trigger phrases | SELF-TEST.md |
| High-leverage command patterns, output capture, reusable assets | COMMANDS.md |
Attention feed, robot formats, wait conditions, full --robot-* index | ROBOT-MODE.md |
| Human dashboard, palette, keybindings, TUI notes | DASHBOARD.md |
Project resolution, projects_base, config paths, project-local assets | CONFIG.md |
Drop-in examples live under assets/:
pipeline-example.yaml — a review pipeline with parallel step + retrypolicy-example.yaml — opinionated ~/.ntm/policy.yaml starterenvrc.example — recommended direnv/shell env varsvibing-with-ntm — the companion operator / orchestration skill: tending loops, marching-orders prompts, autonomous unstick recipes, steady-state cadence. Use it whenever the question is "how do I run the swarm well?" rather than "what does NTM do?"agent-mail for inboxes, contact handshakes, and file reservationsbr for bead state changes and syncingbv for graph-aware task prioritizationcass for prior-session retrievalcaam for account rotation across providers (paired with --robot-switch-account)dcg, slb for destructive-command and two-person approval policynpx claudepluginhub boshu2/agentops --plugin agentopsCoordinates NTM agent swarms: unsticks panes, manages rate limits, and triggers convergence checks with observable artifact discipline.
Coordinates multi-agent Python workflows via a local blackboard file with permission gating, token budgets, and persistent project context. All scripts run locally with zero network calls.