Back to Insights
threat modelingagentsinterface designgraph

Eleven Steps You Don't Type

Threat modeling stalls in shift-left workflows because intent-based interfaces run into an articulation barrier. Staged delegation inside the engineer's editor, backed by specialist agents and a graph-native model, is one resolution.

Levente Simon

Levente Simon

creator of dethernety

April 20, 2026·31 min read
Eleven Steps You Don't Type

Eleven Steps You Don't Type

Staged delegation, and the shape of a guided workflow that actually gets used

First in a series on Dethernety and Dethereal.

Threat modeling has a UX problem. Shift-left made it worse.

For most of those twenty years, in most organizations, it was a specialist activity: a small number of security architects, offline, a schedule set by the security team, an artifact delivered once and filed. The tool was whatever the security team happened to use. Visio, a spreadsheet, a commercial suite none of the developers had ever opened.

DevSecOps changed who is expected to do it. The current orthodoxy says threat modeling belongs with the engineers building and running the system, not with a security team that does it once at the design-review gate and never again. The artifact is supposed to be living. The audience includes the author. The work is supposed to happen early and continuously.

It has not. The reasons are plural: engineers often lack the threat-intel background, incentives reward feature velocity over security artifacts, security teams still gate-keep review, and most organizations have no loop between the model and the runtime controls that would give skipping it a consequence. A better tool does not fix any of those. It only removes the excuse that the tool is in the way.

This piece is about the reason closest to the tool itself: the tools did not follow. Engineers were told to threat-model but handed tools that either assumed they already thought in trust boundaries or assumed they did not write code. Neither assumption fit. The result, predictably, is that most teams either don't do it, do it once during design review and never touch it again, or outsource it back to the security team and pretend otherwise.

The tools we have come in three shapes, and all three fail in the same way: they put the wrong cognitive load on the wrong person at the wrong time.

The first shape is the diagram. A canvas tool, sometimes a dedicated threat-modeling application, increasingly a diagrams-as-code format checked into the repo. The diagrams-as-code version solves the staleness problem that killed the canvas version: the diagram lives in git and gets updated in pull requests. The serious tools in this family go further: they run rule engines against the declarative model and emit threats, countermeasures, and compliance mappings for the author to adjudicate, and the best of them seed the initial diagram from IaC or reference architectures rather than a blank canvas. That shift, from recall toward adjudication, is the right direction. What the tools still require is that the author declare the structure the seeding guessed at — trust boundaries, data flows, decomposition depth — with no scaffolded adjudication flow around those declarations. The diagram is the question masquerading as the input.

The second shape is the form. Modern form-based threat modeling tools ask the modeler to describe the system through structured inputs and check results against built-in threat libraries and compliance mappings. Some ship with pattern libraries that provide a starter shape for common architectures — microservice behind API gateway, lambda behind queue — which helps on the recognisable cases and does nothing off the template. They validate more than the STRIDE spreadsheets they replaced: they cross-reference countermeasures, flag gaps, link findings to frameworks. What they cannot validate is whether the modeler answered their questions well. The form asks: is this boundary a trust boundary? Is this data PII? A modeler who does not know the answer selects one anyway, and the form records the guess as fact. The form is complete long before the model is.

The third shape is the chat box. The naive version is "describe your system and I'll generate a threat model." The serious versions, scoped by a host product's data model so they cannot invent components outside its vocabulary, ask follow-up questions and validate against built-in libraries. Both still ask the modeler to know, up front, what the tool needs: sensitivity, boundaries, adversary classes, compliance drivers, crown jewels. The serious versions do shift work toward adjudication: the tool proposes, the user confirms. What they do poorly is scope and sequence the proposals. The output arrives as a long prose draft that the author validates line by line, hoping to catch hallucinated components and missed ones in flow. Staged delegation produces the same class of proposals in small structured batches instead of one continuous draft, and the batch is the unit of adjudication. Same instinct, different shape.

Three failure modes, one common root: the tool asks the human to structure the problem, and the human is not good at it. Diagrams demand graphical structure the modeler does not have. Forms demand taxonomic structure the modeler has not internalized. Chat demands a well-formed prompt the modeler cannot produce because they don't yet know what the tool needs.

There is a fourth shape, and it has been hiding in plain sight.

The third paradigm

Jakob Nielsen has argued that AI marks a paradigm shift in user interfaces: away from command-based systems, where users "strike every blow" by executing step-by-step instructions, and toward intent-based systems, where users specify desired outcomes and let the system figure out procedures. The user stops being an operator and becomes a supervisor. The computer stops being a tool and becomes an agent.1

The shift is real, but it has a failure mode Nielsen himself names: the articulation barrier. Intent-based UIs assume the user can express what they want in a single well-formed statement. In expert-knowledge domains, the user often cannot. An engineer asked to threat-model their system does not walk up to a chat box already knowing the crown jewels, adversary classes, compliance drivers, trust boundaries, and decomposition depth they need to articulate. They know those things after thinking about the system, which is the work they are trying to do.

So both ends of Nielsen's spectrum fail for this kind of work. Command-based fails because the novice does not know which command to run next. Intent-based fails because the novice cannot state the intent; they do not yet know what the tool needs from them.

Consider what a command-driven interface looks like when stripped to its bones: discover, classify, enrich, sync. Clean. Also unusable. Nobody running classify on a blank directory knows what they are classifying, or why, or in what order, or against which taxonomy.

Consider the opposite: a single prompt, a long system message, and an agent free to ask whatever it wants. This fails differently. The agent goes three turns into a conversation, decides it has enough context, and generates a model. Or it burrows into one component for thirty turns and forgets the rest of the system exists. The output looks like a threat model written by someone who has read a lot of threat models but has never debugged one.

Nielsen proposes one resolution to the articulation barrier: intent by discovery, helping users recognize what they want through exploration. The user starts without a clear intent and surfaces it through interaction with the system. This is the right resolution when the problem is that the user does not yet know what they want.

There is a second resolution, appropriate when the user roughly knows what they want ("a threat model of this system") but cannot articulate the structure that definition requires. The resolution is not to let them explore until they discover it. It is to break the final artifact into its component parts, in a fixed order, and to hand each part to a specialist agent that can do most of the articulation work on the user's behalf. The user is left with the part they are actually good at: recognising whether a proposal is right, and saying where it is not. Call this staged delegation: break one large intent into an ordered sequence of smaller ones, delegate each to the actor best placed to articulate it (the user where only the user knows the answer, a specialist agent where the answer is discoverable from the codebase or the model), and require the user to supervise every proposal before it becomes part of the model.

The cognitive shift is from recall (what do I want?) to recognition (is this right?), which is the easier problem for a non-expert author by a wide margin.

Against Nielsen's frame, the diagnosis is the same and the resolution is different: staged delegation rather than intent by discovery. This is not a new UI era. It is a pattern for a specific kind of problem: expert-knowledge work where the user is both author and novice, and where the artifact has enough internal structure to decompose.

What follows is what one implementation looks like, concretely.

Meet the user where they work

Before the eleven steps, a question a fair reader is probably already asking: if the whole workflow is a conversation in a terminal, what about the security analyst who wants the graph, or the reviewer who wants to see the whole model laid out? The answer has two parts.

Two user populations, two interfaces, one platform: the plugin and the Web UI both talk to the Dethernety backend, which loads modules that call a graph DB, OPA, and an analysis engine

The workflow runs inside Claude Code. This is not an implementation detail; it is the point. An engineer already in Claude Code does not want to stop working, open a browser, create an account on a threat modeling SaaS, upload a diagram, and answer a form. The moment you break their flow, the threat model stops happening. The context-switch tax is one of the reasons shift-left threat modeling stalls in practice. Telling an engineer to model a change, and then making them leave their editor to do it, kills the work for an activity with no immediate reward.

So the conversation lives in the editor. The model is a directory tree on disk. The output is committable. The workflow is resumable across sessions. An engineer reviewing a pull request can threat-model the change in the same window where they are reading the diff.

This does not mean the web UI is obsolete. A security analyst reviewing an attack surface wants the graph: a visual editor where boundaries, flows, and exposures are laid out spatially. Forcing them into a CLI is the mirror-image mistake of forcing an engineer into a web form. The two interfaces serve different populations and different tasks: the plugin for authors in the loop, the web UI for analysts and reviewers who need to see the whole model at once. Both read and write the same underlying graph.

Pair modeling — a developer and a security engineer sitting together for the exercise, still the most productive way to do this work — happens in the same session, at the same terminal. The tool does not replace the collaboration. It gives both people a shared surface to argue over.

Threat modeling has to meet users where they work.

Eleven steps

The guided workflow has eleven steps. They are not commands. The user does not pick them. The agent walks through them in order, and each one corresponds to a specific transition in the model's state machine.

Eleven steps across six states, with the session break between step 5 and step 6

The steps themselves:

  1. Scope Definition — what is this system, what are the crown jewels, what compliance drivers apply
  2. Discovery — scan the codebase for infrastructure, containers, IaC, API definitions
  3. Model Review — confirm the discovered elements, match them against the platform's class library
  4. Boundary Refinement — adjust trust boundaries, set enforcement attributes
  5. Data Flow Mapping — connect components, add operational flows the scanner missed

— Session Break —

  1. Classification — LLM-assisted class assignment for ambiguous elements
  2. Data Item Classification — tag sensitive data on cross-boundary flows
  3. Enrichment — security attributes and credentials against each class's schema
  4. Validation — quality score, gate checks, readiness assessment
  5. Sync — push to the platform for analysis
  6. Post-Sync Linking — link countermeasures to exposures

The eleven-step shape is not arbitrary. Each split is where it is for one of three reasons: a distinct reasoning mode, a distinct agent invocation, or a distinct moment when the user has to decide something. The rest of this section walks through the three places that make the shape's logic visible.

Scope comes first because every later decision depends on it. You cannot classify a data item as Restricted under PCI-DSS if you have not established that PCI-DSS is in scope. You cannot tag a component as a crown jewel if you have not named the crown jewels. The scope file is short, the questions are conversational, and the answers are referenced all the way through to validation.2

Discovery is separate from classification because the two require different reasoning. Discovery is "does this thing exist in the codebase, and what is it called." Classification is "what kind of thing is it, and how does it fit in our taxonomy." Collapsing them produces a model full of plausibly-named components that turn out to be config files, or job schedulers that got classified as web servers because they happened to bind a port.

The session break between step five and step six is deliberate. Steps one through five build the structure of the model: what components exist, how they connect, which boundaries they sit in. Steps six through ten populate that structure with security context. The two phases are different cognitive modes. Discovery reasons from evidence to structure; enrichment reasons from structure to security properties. Keeping them in one session mixes two kinds of thinking in the same working memory, for the LLM and the human both. The practical consequence is that starting enrichment in a fresh session produces better output at lower cost, and the session break makes that explicit. It also gives the user a natural place to commit the structural model to git before the richer, more revisable enrichment passes happen.

Those three are enough to see the pattern. Each sits where it sits because moving it or dropping it breaks something concrete, usually not at the step you touched but downstream. The others rhyme.

Eleven is not a magic number. A reasonable decomposition of this artifact could have landed on nine or thirteen; the commitments are that every split sit on one of the three reasons above, and that every step be a precondition for the next. Eleven is what that produced here.

Two layers

Seen from above, the workflow has two layers.

The outer layer is the fixed step sequence; the inner layer is a specialist agent proposing a batch that the user adjudicates before anything is persisted

The outer layer is the fixed sequence above. It is not command-based, because the user does not pick which step runs when. It is not intent-based, because the workflow itself infers nothing; its shape is fixed by the shape of the artifact the tool has to produce. Each step corresponds to a specific, named part of the model that must exist before the next step can proceed. Not a suggested order — a required one.

The inner layer is what happens inside each step. A specialist agent runs a well-defined procedure (scan the codebase, match elements against the class library, fill attribute schemas, score quality) and presents its output as a batch the user confirms, modifies, or rejects before anything is written to disk. Scope definition at the start is the exception: the user articulates the crown jewels, the compliance drivers, what is in scope and what is out, and the agent's job is to capture, not propose. Everywhere else the direction is inverted — the agent proposes, the user adjudicates — and the user supervises a pipeline of specialist proposals rather than a single black-box agent.

The multi-brain

The other half of the system is that the agent is not one agent. It is four. The first version was one, and it drifted.

A single orchestrator with a long system prompt covering discovery, classification, enrichment, and validation produces the failure mode described earlier: plausible-looking models with fabricated details, because the agent has no structural reason to separate "I am scanning for infrastructure" from "I am filling security attributes against a class schema." In one context, it is all one job, and the job drifts in whichever direction the last few turns pushed it.

The four-agent split mirrors the four cognitive jobs.

The threat-modeler is the orchestrator. It reads the discovery report, presents it to the user, writes the confirmed elements to disk, and drives the workflow through its states. It owns the state machine. It handles user confirmations, batch-table presentations, and state transitions. It delegates enrichment and review rather than doing them inline, because each task has different context-budget needs.

The infrastructure-scout scans the codebase. It is read-only. It does not write any model files. It produces a discovery report: a structured list of components, each one carrying the source that produced it (file, line, resource) and two confidence buckets — one for existence, one for classification — picked against a fixed rubric (high for an explicit declaration like a Kubernetes Service or a Terraform resource, medium for a strong inference like a Docker image or an import statement, low for a weak inference like a string literal or a comment). The scores are rubric assignments against observable source properties, not a free-form self-assessment. Its exploration budget is bounded — discovery on a real codebase needs to look at a lot of files, but not unbounded files. It has no concept of security attributes, classes, or MITRE. It does one thing.

The security-enricher writes attributes. It is the only sub-agent with write access to attribute files. It runs a two-pass classification (embedding-based matching against the class library first, LLM-assisted for the residue), pulls each matched class's attribute schema from the backend, and fills those attributes from what the scout discovered. It produces the credential topology — which identities hold which credentials to reach which resources. It does not assign ATT&CK techniques; that mapping happens on the platform, deterministically, from the attributes once the model is synced. Its budget is larger than the scout's because enrichment on a medium-sized model touches a lot of files. It has no opinion on whether a component should exist in the first place; that is the modeler's job.

The model-reviewer is a read-only auditor. It cannot modify any files. It computes a seven-factor quality score and evaluates three quality gates. The three gate-relevant factors — classification coverage, attribute completion, flow coverage — are grounded by construction: the numbers come from counting conditions over the graph, not from LLM judgment about whether a classification is sensible. The other four factors in the score carry some heuristic weighting and inform the dashboard, but they do not gate the workflow. The LLM's role at the review step is narrating the result, not producing it.

Permission matrix: each agent gets a tool allowlist that scopes it to one narrow job

Four agents, four roles, four permission sets, four exploration budgets scaled to the task. Each one has a narrow, well-defined job. None of them can accidentally do each other's work, because the tooling does not let them. The tools live on an MCP server the plugin ships with — twenty-two in total. Each agent starts with a role-scoped allowlist; the scout's omits write primitives entirely, and it cannot write a file even if its prompt told it to. The reviewer cannot mutate state. The enricher cannot create new components. The boundaries are enforced by the allowlist, not by the prompt.

That is what staged delegation needs on the agent side: specialization enforced at the tool layer, not in the system message. The scout's tools end where the modeler's begin. The reviewer can read everything and write nothing. The enricher owns its attribute files. A single generalist agent would have access to everything and would use it, all the time, for every task, exactly as the first version of the system did.

Tool permissions prevent the scout from writing an attribute file, but they do not prevent the scout from hallucinating a component with a plausible filename and confidence bucket. Role separation solves the cross-contamination problem: the scout cannot quietly rewrite attributes. It does not solve the hallucination problem, and the three agents that touch the model are not checked equally. The enricher classifies against a class library defined outside the agent and fills attributes whose schema lives on the backend; the reviewer counts conditions over the platform's graph. Both check themselves against something external. The scout does not — its evidence is its own narration of its own work, and a hallucinated component can come with plausible-looking evidence. Which is why step three — Model Review — is the adjudication step where the author's attention matters most: the scout's cited sources (file, line, resource) and rubric-based buckets exist so the author walks the evidence rather than rubber-stamping the conclusion. Permissions and grounding are different problems, and the less grounded agent is the one whose output the human has to touch first.

What this shape is not for

Staged delegation is not a substitute for the live conversation. The continuous-threat-modeling school3 argues two things worth taking seriously: that the right unit of threat modeling is the change — a pull request, a design decision, a sprint ticket — not a quarterly all-day session, and that any artifact-centric workflow risks producing a clean document that gives the team permission to stop thinking. The document becomes the point, the practice withers, and a threat model in the repo becomes a worse outcome than no threat model at all, because it looks like coverage.

On the cadence claim, staged delegation is not in competition. The workflow lives on the pull request and is resumable at the diff level. The same sequence that produces the initial model runs on a later change, with only the stale elements going through classification and enrichment again. That is the cadence CTM demands — embedded in the engineer's loop, at the unit of the change — with the difference that the capture step is cheap enough that the continuous practice produces a durable trail instead of evaporating.

On the artifact-crowding-out-practice worry, the concession is real. A usable artifact can become a substitute for the thinking that produced it. The defence is not in the tool; it is in how the team uses it. Staged delegation does not enforce conversation, and a team that runs the workflow solo every time has given up the thing that made the CTM school right to begin with. What the artifact does offer is a surface where self-deception is more expensive: attributes are either filled or they are not, and the reviewer counts what is missing. The workflow raises the cost of lying to yourself; it does not eliminate it. Calling the artifact the output is not the same as calling it the point.

The constraint is the feature

Staged delegation trades flexibility for structure, and the trade is deliberate.

What it gives up is flexibility. A power user who knows exactly what they want cannot skip straight to enrichment without at least a degenerate pass through scope and discovery. There is a command-based interface for those users, and individual commands work fine on their own. But even the commands enforce the state-machine preconditions: you cannot enrich a component that does not exist, you cannot classify a data item without a flow. When the preconditions are not met the commands fail loudly rather than auto-running the upstream steps and producing a silent partial model. The ordering is not in the UX; it is in the model. The guided workflow simply makes the ordering explicit and comfortable for a user who would otherwise have to discover it by running into errors.

It also assumes the shape of the artifact is roughly known. For the common case (a service with a codebase, IaC, a CI pipeline, a recognisable architecture) the shape fits. For systems where it does not — brownfield models inherited from an acquisition with no source to scan, SaaS integrations where most of the system is someone else's, regulated environments where scope is dictated by an auditor rather than a conversation, or architectures whose components fall outside the installed class library (a mainframe tier, a bespoke message bus, a medical-device subsystem) — the eleven-step shape is the wrong shape. The individual commands remain available and the guided workflow is not forced. What is given up is the scaffolding, and with it, the population the scaffolding was built for.

Two engineers running the same eleven steps on the same repo will not produce byte-identical models. The LLM-assisted steps (pass-two classification, the enricher's attribute inference) are non-deterministic, and two authors will make different calls when they adjudicate. The workflow narrows the variance by fixing scope, by matching against a class library, by forcing the same sequence of questions, but it does not eliminate it. The same engineer running the same workflow against the same repo six months later, after the model provider has updated the underlying LLM, will also see variance.

For regulated environments where reproducibility matters — an auditor reviewing the model against a specific point-in-time version of the system — this is not just a variance concern but a reproducibility one. The model lives on disk and commits to the same repo as the codebase, so git carries the versioning for both together: a tag pins the commit, which pins the model, the codebase, and the timestamp. Pinning the LLM is not enough on its own. The class library and the ATT&CK/D3FEND graphs version too, and reproducibility needs those recorded alongside the commit — a note in the commit message, a footer in the scope file, whatever the team's practice allows. There is no separate manifest in the tool; there is git and there is the author's discipline. If you want byte-identical models without that plumbing, you write them by hand, which brings the articulation barrier back. The trade is reducing variance while keeping articulation affordable, not zeroing it.

And the quality floor is still set by the adjudicator. An engineer who cannot recognise a bad proposal will accept one, and a user who clicks through proposals without reading them reproduces the form failure one layer up — the workflow completes, the model is wrong, the failure has just moved from the input side to the adjudication side. Staged delegation cannot prevent this. What it offers is proposals that are small enough and specific enough that reading them costs less than ignoring them.

There is a related limit worth naming, and it has two parts.

The first is what the scout cannot see no matter how much access you grant it: systems behind credentials it does not hold, third-party SaaS whose APIs it cannot reach, human-process steps that form part of the real threat model (a Slack approval gate in a deployment pipeline), and anything that lives only in someone's head. Even with full cluster access, runtime-only behaviour — cron jobs buried in container entrypoints, sidecar injections from admission controllers, service meshes that rewrite traffic paths — is only partially visible: what the scout sees and what the system does at runtime are not the same set. These gaps do not close with more tooling; they close only with an author who notices and fills them in by hand.

The second is what it can see but might not be allowed to. The scout reads the codebase by default, and if the workstation has kubectl, aws, or terraform configured, it can introspect live infrastructure through read-only commands and pick up runtime-only components that never appear in source. Whether you grant it that access is a trust decision, not a default. An LLM running aws describe against a production account is not a choice to make casually, and the answers address two different risks. Read-only roles and test-environment restrictions mitigate the blast radius: even if the agent misbehaves, it cannot mutate state it was not given permission to mutate. Pre-extracting the data and handing the agent a file is a different mitigation — it addresses the data egress risk. Everything the scout reads, including kubectl stdout, IAM role names, security group rules, S3 ARNs, along with the Terraform code and the source itself, is sent to whoever hosts the model as context. Read-only does not mean read-nothing-sensitive.

Which model provider sees that context is part of the workflow decision, not just the procurement decision. A regulated shop picks along three axes: self-hosted inference (no third-party provider sees the context), redaction at the scout boundary (identifiers, secrets, and customer data stripped before they leave the workstation), or scope restriction (point the agent only at what you are already willing to send outside the perimeter). This is true of every AI-assisted workflow, not just this tool.

A related risk neither half of the split addresses: the agent can be manipulated by its inputs. An IaC comment, a Dockerfile, or kubectl describe output in a compromised repo is attacker-controlled in adversarial settings, and a prompt-injection payload riding that input is something neither read-only roles nor pre-extraction prevents. It lives in the same class of problem as malicious pull-request reviews and needs the same kinds of defence — input sanitisation, scope limits on what tools the agent can call on what it reads — with the caveat that sanitisation here is best-effort: LLM context has no parameterised-query equivalent.

The workflow is only as good as what the scout can see, given the access you are willing to grant it, plus what the author adds by hand.

The trade buys three things: resumability, inspectability, composability. Each falls out of the state machine and the directory tree on disk. None of them survive in a free-form chat.

Because the workflow is a state machine, the user can stop at any step, close the session, come back a week later, and pick up exactly where they left off. The progress table shows what is done, what is auto-skipped, what is current, and what is pending. When the session dies in a chat the context dies with it; here the context is the directory.

Every step produces an output that lives on disk in a human-readable format. Scope is a JSON file. Discovery produces a structure file. Classification updates class fields. Enrichment writes per-element attribute files. The user can read any of it, edit any of it in a text editor, commit any of it to git, and point an auditor at any of it. The model is not a hidden state inside an agent; it is a directory tree on the user's disk, under their filesystem permissions, in their git history.

And because the steps are semantically well-defined, the agent can auto-skip steps whose conditions are already met. If every discovered component matches a class unambiguously on the first pass, step six shows a green check and the LLM-assisted pass has nothing to resolve. If the user adds a component during enrichment, the state reverts to STRUCTURE_COMPLETE, the new element gets flagged as stale, and enrichment re-runs only on the stale element. Staleness propagates: a changed component invalidates flows crossing it, which invalidates data items on those flows, and the agent computes the closure before re-running. The same logic holds across sessions — a developer opening a pull request two months later runs the workflow on the diff, and only the stale elements go through classification and enrichment again. None of this would work if the steps were just narrative waypoints in a long prompt.

Three things underneath

This shape rests on three things the later pieces in the series will take on directly.

First, a graph-native backend whose topology actually enforces state transitions. A graph with typed nodes, typed edges, and enforced classes, where STRUCTURE_COMPLETE is not a flag on a document but a condition on the graph: every component belongs to exactly one boundary, no orphan flows, every flow has a classified source and target. The state machine above is the user-visible expression of invariants the graph already enforces.

Second, a modular analysis layer on the platform. Analyses like attack path generation, compliance mapping, and control coverage read the same graph through the same interface and produce exposures — reachable attack paths, policy violations, control gaps — rather than proprietary output. Because MITRE ATT&CK and D3FEND are loaded into the same graph, each exposure is linked to the ATT&CK techniques an adversary would use against it and, where a countermeasure applies, to the D3FEND techniques that defend against it. "Deterministic" here means the mapping is a pure function of the graph state, given a fixed ruleset and taxonomy version. Not authoritative. Reproducible. Attacker and defender views meet on the same model, not in a spreadsheet next to it.

Exposures are written by the plugin; their links to ATT&CK and D3FEND techniques are added deterministically on the backend, closing the loop between attacker and defender views

Third, a role-separated agent architecture where cross-agent permission boundaries are enforced at the tool layer rather than in the prompt. That last guarantee is narrower than it sounds — permissions stop one agent from doing another's work, they do not prevent any of them from being wrong — but it is real, and almost nothing else in the multi-agent space bothers to enforce it.

The paradigm is transferable

The shape is not really about threat modeling.

Any expert-knowledge domain where a non-expert has to produce a structured artifact, on a pace that allows per-step supervision, runs into the same articulation barrier. Architecture review is the clearest example. An engineer proposing a design is asked to produce a component diagram, a trust-boundary analysis, a failure-mode table, and a written rationale in a specific format. The established tooling there — ADRs, C4 diagrams, RFC templates — gives them the outline but not the content. They cannot articulate what goes inside in one prompt, not because they lack skill but because the work of thinking about it is exactly what they are being asked to do. A guided workflow that delegates the legwork to specialists — one agent reads the codebase and proposes the component diagram, another walks the trust boundaries, a third scans for failure modes, a reviewer checks against architectural principles — does not turn them into a senior architect. It lets them produce a usable review by recognising good answers rather than recalling them, inside the editor they are already writing the design in. Compliance gap analysis, regulated-document drafting, and clinical decision support have the same shape. Real-time adversarial work does not: an analyst paged at two in the morning has no time for eleven supervised steps, and incident response is about moving faster than the attacker, not producing an inspectable artifact. The pattern is for slow expert-knowledge work.

Staged delegation is one operational answer to the articulation barrier: a fixed outer workflow, specialist agents that articulate where they can, supervised proposals where the user has to adjudicate, delivered in the tool the user already has open. It generalizes to any domain where the artifact has enough internal structure to decompose. The hard part is not the technology. It is the discipline of saying no to the free-form chat box, to the general-purpose agent, and to the power-user shortcut.

A better interface removes the excuse that the tool was in the way. It does not remove the rest. The incentive and loop problems named at the start are still there, untouched, and a team that does not threat-model will not start just because the tool got better. Those are different conversations, and this piece was about only one of them.

The constraint is not a limitation to apologize for. It is what makes a language model useful for this kind of work.

Footnotes

  1. Jakob Nielsen, Intent by Discovery: Designing the AI User Experience, March 26, 2026. "Articulation barrier" and "intent by discovery" are his terms, picked up here because they name the problem cleanly. The broader HCI tradition (mixed-initiative interaction, scaffolded workflows, progressive disclosure, wizard-style UIs) has been working this territory for decades and the debt is acknowledged. "Staged delegation" is used here to name a distinct resolution to the same problem.
  2. How the workflow produces artifacts an auditor will accept — the connection between attributes, the compliance taxonomies loaded in the graph, and what lands in an evidence bundle — is deferred to a later piece on the analysis layer.
  3. The book-length articulation is Izar Tarandach and Matthew J. Coles, Threat Modeling: A Practical Guide for Development Teams (O'Reilly, 2020), and the continuous-threat-modeling community that grew around it.

Related Insights

graph theorysecurity architecture

Where the Map Ends

The Củ Chi tunnels were 250 kilometers of passages dug with shovels. The US had satellites. The tunnels worked because they exploited topology, not topography. Attackers still do.