{"slug":"topology-mutation-and-seat-management","title":"topology-mutation-and-seat-management","summary":"Use when changing a rig while it is alive — `rig expand` / `rig shrink` / `rig launch` / `rig remove` / `rig discover` / `rig bind` / `rig adopt` / `rig attach`. Covers the 4 failure modes (newly created seat lacks queue/startup/role; edges and permissions not updated; adopt/bind","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-31T16:20:49.045505Z","repo":{"url":"https://github.com/mvschwarz/openrig","stars":4593,"forks":315,"license":"Apache-2.0","updatedAt":"2026-10-03T15:05:03Z"},"bodyHtml":"<hr>\n<h2>name: topology-mutation-and-seat-management\ndescription: Use when changing a rig while it is alive — <code>rig expand</code> / <code>rig shrink</code> / <code>rig launch</code> / <code>rig remove</code> / <code>rig discover</code> / <code>rig bind</code> / <code>rig adopt</code> / <code>rig attach</code>. Covers the 4 failure modes (newly created seat lacks queue/startup/role; edges and permissions not updated; adopt/bind succeeds at tmux but not OpenRig identity; shrink/remove leaves stale topology references) and the rule that mutation must work while the rig is active, not just in clean fixtures.\nmetadata:\ncli_surfaces_referenced:\n- adopt\n- attach\n- bind\n- discover\n- expand\n- launch\n- ps\n- release\n- remove\n- shrink\n- unclaim\n- up\n- whoami\nopenrig:\nstage: factory-approved\nsibling_skills:\n- rig-lifecycle\n- seat-scaling-and-specialization\n- cross-host-rig-commands\n- sidecar-operator\n- rig-bundles-and-shareable-artifacts\n- specification-system\n- extension-and-user-workspace</h2>\n<h1>Topology Mutation and Seat Management</h1>\n<p>The ability to change a rig <strong>while it is alive</strong>: expand, shrink,\nlaunch, remove, discover, bind, adopt, and attach seats or sessions.\nSeat management includes the <strong>stable identifiers, edges, roles, and\nstartup context</strong> that make those mutations coherent.</p>\n<p><strong>OpenRig should be easy to reach for.</strong> A user should be able to add\ncapacity, retire capacity, adopt an existing session, or attach a\nterminal <strong>without rebuilding the whole topology.</strong> If mutation is\nrarely tested, users avoid it and the product collapses back into\nstatic launch scripts.</p>\n<h2>Use this when</h2>\n<ul>\n<li>Adding capacity to a running rig (<code>rig expand &lt;rig&gt; &lt;pod-fragment-path&gt;</code>)</li>\n<li>Removing capacity (<code>rig shrink</code> / <code>rig remove</code>)</li>\n<li>Launching/relaunching a node in a running rig (<code>rig launch</code>)</li>\n<li>Binding a discovered session into an existing logical node (<code>rig bind</code>)</li>\n<li>Adopting a topology + binding live sessions (<code>rig adopt</code>)</li>\n<li>Attaching a shell or agent into a rig node (<code>rig attach --self</code>)</li>\n</ul>\n<h2>Don't use this when</h2>\n<ul>\n<li>The rig is being created fresh from scratch — use <code>rig up</code> (lifecycle, not mutation)</li>\n<li>The intent is to scale specifically (add specialized capacity) — use <code>seat-scaling-and-specialization</code> skill</li>\n<li>The intent is occupant replacement on a stable seat — use <code>seat-continuity-and-handover</code> skill</li>\n</ul>\n<h2>Failure modes (4)</h2>\n<ol>\n<li><strong>A newly created seat lacks the queue, startup context, or role files it needs to operate.</strong> Topology mutation creates the seat, but the seat needs more than a tmux session to be useful.</li>\n<li><strong>Edges and permissions are not updated when a seat is added or removed.</strong> Topology references go stale; later workflows route to nonexistent seats.</li>\n<li><strong>Adopt/bind succeeds at the tmux/session layer but not at the OpenRig identity layer.</strong> The session is attached but <code>rig whoami</code> doesn't know about it; downstream consumers see partial state.</li>\n<li><strong>Shrink/remove leaves stale topology references that later workflows route into.</strong> Cleanup is part of the operation, not an afterthought.</li>\n</ol>\n<h2>Proof standard</h2>\n<p>Proof must cover <strong>mutation while a rig is active</strong>, not just in a\nclean test fixture. The useful matrix:</p>\n<table>\n<thead>\n<tr>\n<th>Operation</th>\n<th>What to verify</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Add seat</td>\n<td>New seat has queue, startup context, role; <code>rig whoami</code> resolves it</td>\n</tr>\n<tr>\n<td>Remove seat</td>\n<td>Stale references cleaned; edges/permissions updated</td>\n</tr>\n<tr>\n<td>Adopt existing session</td>\n<td>tmux session bound at OpenRig identity layer; <code>rig whoami</code> reports correctly</td>\n</tr>\n<tr>\n<td>Attach observer terminal</td>\n<td>External CLI attachment recorded</td>\n</tr>\n<tr>\n<td>Verify topology projections after each move</td>\n<td><code>rig ps --nodes</code> reflects current truth, not pre-mutation cache</td>\n</tr>\n</tbody>\n</table>\n<p>A clean-fixture proof is necessary but not sufficient. Live-rig proof\ncatches the failure modes that fixture-mode misses.</p>\n<h2>Why important strategically</h2>\n<p>The current coordination experiments repeatedly need new queues,\nwatchdogs, humans, and test seats — which makes this family\n<strong>strategically important.</strong> Seat continuity work will eventually\nseparate stable seat identity from runtime occupant identity (see\n<code>seat-continuity-and-handover</code>).</p>\n<h2>Currently shipped surfaces</h2>\n<p>Per <code>cli-reference.md</code> v0.2.0:</p>\n<ul>\n<li><code>rig expand &lt;rig-id&gt; &lt;pod-fragment-path&gt;</code> (with optional <code>session_source</code>)</li>\n<li><code>rig shrink &lt;rigId&gt; &lt;podRef&gt;</code></li>\n<li><code>rig launch &lt;rigId&gt; &lt;nodeRef&gt;</code></li>\n<li><code>rig remove &lt;rigId&gt; &lt;nodeRef&gt;</code></li>\n<li><code>rig discover [--draft]</code></li>\n<li><code>rig bind &lt;discoveredId&gt; --rig &lt;rigId&gt; (--node &lt;id&gt; | --pod &lt;ns&gt; --member &lt;name&gt;)</code></li>\n<li><code>rig adopt &lt;path&gt; --bind &lt;logicalId=tmuxSessionOrDiscoveryId&gt;</code></li>\n<li><code>rig attach --self --rig &lt;rigId&gt; --node &lt;logicalId&gt;</code></li>\n<li><code>rig unclaim &lt;sessionRef&gt;</code> / <code>rig release &lt;rigId&gt;</code></li>\n</ul>\n<h2>Active proof gap (current)</h2>\n<p>The 2026-04-30 topology mutation add-seat proof pass is <strong>active</strong>.\nProduct Lab shaped it; planner authored <code>IMPLEMENTATION.md</code>; driver\nlanded the smallest honest CLI retry-guidance patch for failed\n<code>rig expand</code> recovery. <strong>Remaining proof is the Section B disposable-rig\nruntime matrix, blocked on operator posture</strong> and owned by\n<code>orch-lead@your-rig</code>.</p>\n<h2>See also</h2>\n<ul>\n<li><code>openrig-user</code> skill — CLI surface for <code>rig expand / shrink / launch / remove / bind / adopt / attach</code></li>\n<li><code>seat-scaling-and-specialization</code> skill — when to add specialized capacity vs generic</li>\n<li><code>seat-continuity-and-handover</code> skill — replacing an occupant on a stable seat (different shape than topology mutation)</li>\n<li><code>cross-host-rig-commands</code> skill — cross-host topology mutation (deferred)</li>\n</ul>\n","files":[{"path":"SKILL.md","sizeBytes":6969,"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-10-03T15:23:48.0053Z","sha256":"B4390BD8EEE0A31F634C0F287BD2C15C42DFC6E1F86AB7488A4DEC4E50D927B1","sizeBytes":3004},"review":null,"source":{"repositoryUrl":"https://github.com/mvschwarz/openrig","path":"skills/_canonical/core/topology-mutation-and-seat-management","license":"Apache-2.0","commit":"ec5e77aaff4662814f64f92752320776cf9c987e","subtreeSha":"7CCD83931475924511CD57B0EF73AC3C9DB1E38A66AAA1E1A18BBBE39AD8FC17","lastSyncedAt":"2026-10-03T15:23:24.628511Z"},"reviewedAt":"2026-10-03T15:23:57.77839Z","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/mvschwarz/openrig/tree/main/skills/_canonical/core/topology-mutation-and-seat-management"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install mvschwarz-openrig@llmmart"},{"target":"git","command":"git clone https://github.com/mvschwarz/openrig.git"}]}