{"slug":"attack-shape-2","title":"attack-shape","summary":"Use when the user wants adversarial stress-testing of a proposed architecture, structure, or shape. Not for tasks that require source or remote-system changes.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-30T19:49:52.722804Z","repo":{"url":"https://github.com/OutlineDriven/outline-driven-development","stars":54,"forks":10,"license":"Apache-2.0","updatedAt":"2026-09-28T03:16:21Z"},"bodyHtml":"<hr>\n<h2>name: attack-shape\ndescription: 'Use when the user wants adversarial stress-testing of a proposed architecture, structure, or shape. Not for tasks that require source or remote-system changes.'</h2>\n<h1>Attack shape</h1>\n<h2>Contract</h2>\n<table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Bound contract</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Trigger</td>\n<td>User wants adversarial stress-testing of an architecture, structure, or shape. Either the agent attacks and the human defends, or the agent proposes and the human attacks.</td>\n</tr>\n<tr>\n<td>Authority</td>\n<td>Read-only. No file, VCS, credential, paid, published, deployed, or remote mutation. The agent emits chat output only.</td>\n</tr>\n<tr>\n<td>Side effect</td>\n<td>An attack or proposal transcript in chat, plus the surviving or broken shape recorded in chat.</td>\n</tr>\n<tr>\n<td>Done</td>\n<td>The shape has been attacked from both directions, the human has defended or attacked, and the surviving shape (or non-converged record) is recorded.</td>\n</tr>\n</tbody>\n</table>\n<h2>Inputs</h2>\n<p>The proposed architecture, structure, or shape to test. The human must supply it as text, a diagram description, or a reference to an artifact already in context. Without it the skill stops.</p>\n<p>Optional: named attack axes the human wants prioritized (coupling, abstraction depth, failure modes, scalability, ownership boundaries).</p>\n<p>Optional: a scope limit naming what is out of bounds for the attack.</p>\n<p>Optional: constraints, scale, existing components, and non-goals for a proposal round.</p>\n<p>A human participant must be present; the skill does not converge without one.</p>\n<h2>Procedure</h2>\n<ol>\n<li><p>Restate the target shape from the supplied input and confirm scope with the human before attacking or proposing. Do not test material outside the stated scope. Done when: the shape is restated and scope is confirmed.</p>\n</li>\n<li><p>Determine the direction. If the human supplied a shape to attack, the agent attacks and the human defends. If the human asked the agent to propose, the agent proposes and the human attacks. Done when: the direction is set and the first move is made.</p>\n</li>\n<li><p>Enumerate the attack axes relevant to the shape: coupling between parts, abstraction depth versus leakage, failure and recovery paths, scalability and growth pressure, ownership and boundary clarity, plus any named axes the human supplied. Done when: all relevant axes are enumerated.</p>\n</li>\n<li><p>Mount the first move. In attack mode: for each axis, state the specific structural weakness, the condition under which it fails, and the evidence. Each attack must be falsifiable by the human's defense. In propose mode: propose one architecture shape with components, boundaries, data flow, and the single load-bearing decision that makes it cohere, plus the failure mode each component rejects. Done when: each attack states weakness, failure condition, and evidence, or the proposal names components, boundaries, data flow, the load-bearing decision, and per-component rejected failure modes.</p>\n</li>\n<li><p>Present the moves and invite the human to respond. Wait for the human's defense or attack before judging survival on any axis. Done when: the human is invited and the agent waits.</p>\n</li>\n<li><p>For each response, classify the outcome: rebutted (the shape survives that axis), landed (the shape must change on that axis), or deferred (insufficient information to judge). Done when: each axis is classified.</p>\n</li>\n<li><p>When an attack lands or a human attack breaks a proposal, propose the minimal shape change that resolves the weakness and re-test the changed portion once. Done when: a minimal shape change is proposed and re-tested once.</p>\n</li>\n<li><p>Repeat steps 3 through 7 until every axis is either rebutted or resolved, or the human ends the session. Done when: every axis is rebutted or resolved, or the human ends the session.</p>\n</li>\n<li><p>Record the surviving shape: the final structure, the attacks it survived with their rebuttals, the changes made, and any deferred or non-converged axes with their open questions. Done when: the final structure, survived attacks, changes, and deferred axes are recorded.</p>\n</li>\n</ol>\n<h2>Failure and recovery</h2>\n<p>No target shape supplied and no proposal requested. Stop and ask the human for the shape and scope. Do not invent a shape to attack or propose.</p>\n<p>Attack not falsifiable on an axis. Classify that axis as deferred with the open question. Do not claim it survived.</p>\n<p>Human response absent or non-substantive for a landed attack. Mark the axis as unresolved. Do not declare the shape surviving on that axis.</p>\n<p>Scope widening. If the human introduces new material mid-session, restate the new scope and confirm before continuing. Never silently expand the attack surface.</p>\n<p>Non-convergence. If the same axis oscillates without resolution across two re-tests, record it as non-converged with the conflicting positions rather than forcing a verdict.</p>\n<p>No mutation. This skill writes nothing to disk or VCS. Recovery is to restate the surviving or non-converged shape in chat.</p>\n<h2>Output</h2>\n<p>A surviving-shape record in chat containing the final structure, the list of attacks it survived with their rebuttals, the changes made during the session, and any deferred or non-converged axes with their open questions. If the shape did not survive, output the non-converged record naming the unresolved axes.</p>\n","files":[{"path":"agents/openai.yaml","sizeBytes":165,"isText":true},{"path":"SKILL.md","sizeBytes":5118,"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-30T19:50:28.998527Z","sha256":"9BA6EEE2DC1856496598E74D5B1F95F40EE2759D06E69A7A2B36CA5A3D238D67","sizeBytes":2327},"review":null,"source":{"repositoryUrl":"https://github.com/OutlineDriven/outline-driven-development","path":".devin/skills/attack-shape","license":"Apache-2.0","commit":"b0e8ce89a19fac880251dc3ea1babfeb4503a4fe","subtreeSha":"3CF01EC3EB615ED2C08640DFFEEC8444F8B85F96BD1DEFC4EFDEA8A4A623FAFF","lastSyncedAt":"2026-09-30T19:49:48.917811Z"},"reviewedAt":"2026-09-30T19:51:37.888701Z","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/OutlineDriven/outline-driven-development/tree/main/.devin/skills/attack-shape"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install outlinedriven-outline-driven-development@llmmart"},{"target":"git","command":"git clone https://github.com/OutlineDriven/outline-driven-development.git"}]}