{"slug":"ntm-3","title":"ntm","summary":"Use NTM as an optional pane adapter for caller-supplied roles and commands. Triggers: \"ntm\", \"tmux panes\", \"ntm robot state\".","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-08T21:44:57.394555Z","repo":{"url":"https://github.com/boshu2/agentops","stars":445,"forks":41,"license":"Apache-2.0","updatedAt":"2026-09-24T01:09:16Z"},"bodyHtml":"<hr>\n<p>name: ntm\nuser-invocable: false\nskill_api_version: 1\nhexagonal_role: supporting\nconsumes:</p>\n<ul>\n<li>pane-command-request\nproduces:</li>\n<li>ntm-robot-state</li>\n<li>agent-worker-transcript\ncontext_rel:</li>\n<li>kind: supplier-to\nwith: agent-native\nmetadata:\ncapabilities: [ntm]\neffects: [manage_ntm_panes, dispatch_pane_commands]\ncanonical_status: canonical\ndisposition: keep_optional_adapter\ntier: execution\ndependencies: []\ndescription: 'Use NTM as an optional pane adapter for caller-supplied roles and commands. Triggers: \"ntm\", \"tmux panes\", \"ntm robot state\".'\npractices:</li>\n<li>pragmatic-programmer\noutput_contract: factual session, pane, command, and observation results</li>\n</ul>\n<hr>\n<h1>NTM — optional pane adapter</h1>\n<p>NTM hosts explicit agent roles in persistent panes. It is transport, not an\nAgentOps lifecycle controller. The caller chooses the panes, roles, commands,\nwrite scopes, and stopping point.</p>\n<p>Robot surfaces work because they report what the pane is doing, not what was\nsent to it; a dispatch layer that only proved delivery would let every dead\nworker look busy.</p>\n<p>Judge pane liveness by the truth-stack, strongest first: new artifacts on\ndisk, then transcript growth, then robot state and attention flags, then bare\nprocess existence. A successful prompt send sits below all of these and proves\nnothing about work.</p>\n<p>Named failure mode — <strong>kill-the-witness</strong>: restarting a stuck pane before\ncapturing its state, destroying the only evidence of why it stalled.</p>\n<p>Anti-pattern: restarting an unresponsive pane as the default remedy.\nCorrective: rescue before restart — snapshot robot state and transcript,\nattempt a nudge, and restart only when the truth-stack shows no liveness at\nany level.</p>\n<h2>Boundary</h2>\n<ul>\n<li>Never start or probe NTM merely because it is installed.</li>\n<li>Discover the live command contract with <code>ntm --help</code>,\n<code>ntm --robot-capabilities</code>, and <code>ntm --robot-snapshot</code> before unfamiliar\nactions.</li>\n<li>Dispatch each caller-supplied command once. NTM does not select work, retry a\nfailed command, validate a candidate, integrate changes, or decide what runs\nnext.</li>\n<li>Pane roles are descriptive. They grant no ownership, admission, Git, release,\nor delivery authority.</li>\n<li>Concurrent writers require caller-supplied disjoint scopes and whatever\nisolation the repository requires. NTM does not infer safe concurrency.</li>\n<li>Safety, lock, mail, and pipeline features remain substrate facts. Their state\ncannot change an RPI phase result or semantic verdict. The adapter cannot select AgentOps semantics, issue a binding verdict, or turn factory completion into delivery or validation proof.</li>\n</ul>\n<h2>One-shot dispatch</h2>\n<ol>\n<li>Record the explicit session, pane, role, working directory, and command.</li>\n<li>Inspect robot capabilities and current snapshot.</li>\n<li>Create or select only the named pane.</li>\n<li>Send the command once.</li>\n<li>Observe robot state, attention, and transcript until the command exits or the\ncaller's observation window ends.</li>\n<li>Return the factual result and stop.</li>\n</ol>\n<p>For a software-factory layout, the caller may name producer, tester, validator,\nor integrator panes. The same identity rule still applies: a validator for a\ncandidate must have a distinct context identity from its author. Merely placing\ntwo roles in different panes is a declared runtime fact, not proof of semantic\nindependence. Mixed-model judgment panes follow\nthe <code>agent-native</code> model-dispatch recipe (probe, disclose, never\n<code>claude -p</code>).</p>\n<h2>Output</h2>\n<p>Return:</p>\n<ul>\n<li>session and pane identifiers;</li>\n<li>role and exact command;</li>\n<li>start and observation timestamps;</li>\n<li>exit status when known;</li>\n<li>robot state and relevant transcript references;</li>\n<li>degraded or unavailable substrate surfaces;</li>\n<li>effects that were and were not observed.</li>\n</ul>\n<p>Terminal outcomes are explicit, never a silent hang:</p>\n<ul>\n<li><strong>NTM unavailable</strong> — <code>ntm</code> absent or the robot surface unreachable: report it\nand stop; do not fall back to blind key injection or assume the pane is idle.</li>\n<li><strong>Observation-window deadline reached</strong> — report the last observed robot state\nand transcript reference; the window ending is a stop, not a failure verdict.</li>\n<li><strong>Timeout / nonzero exit / degraded source</strong> — reported as evidence with what\nwas and was not observed.</li>\n<li><strong>Cancellation and cleanup</strong> — the caller decides whether to invoke another\nexperiment; report which panes were created or left running so nothing is\norphaned silently. NTM never retries or reaps on its own.</li>\n</ul>\n<h2>Useful live surfaces</h2>\n<p>Prefer machine-readable robot surfaces for capability, snapshot, attention,\ntail, and pipeline observations. Use interactive key injection only when the\ncaller explicitly requests an interactive action and no robot command provides\nthe needed behavior.</p>\n<p>External NTM documentation and examples remain the authority for command syntax;\nthis skill owns only the AgentOps boundary above. NTM's CLI drifts across\nversions, so confirm the surface at runtime (<code>ntm --version</code>,\n<code>ntm --robot-capabilities</code>) rather than trusting a remembered command.</p>\n","files":[{"path":"SKILL.md","sizeBytes":5002,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-16T15:56:45.251541Z","sha256":"AF69F168DDDA440A81EC5D2407AA9BF8326B78E70139E5D44C3A5E0B02EEDCD5","sizeBytes":2441},"review":null,"source":{"repositoryUrl":"https://github.com/boshu2/agentops","path":"images/gemini/skills/ntm","license":"Apache-2.0","commit":"c3fe161dce0b85d1e0490df757bbb841d22e4ea1","subtreeSha":"5EB3988ECC1B12426C4FC8395DD49E0FAC48004908AFE8C74E202E196C71BBCF","lastSyncedAt":"2026-09-24T06:48:55.360254Z"},"reviewedAt":"2026-09-16T16:03:54.769403Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/boshu2/agentops/tree/main/images/gemini/skills/ntm"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install boshu2-agentops@llmmart"},{"target":"git","command":"git clone https://github.com/boshu2/agentops.git"}]}