Add Attacker
add_attackerAdd a new attacker to a threat model by specifying its capability, position, archetype, and trust boundaries; creates a new model version for security analysis.
Instructions
Add a new attacker to a threat model. Creates a new version.
Authoring contract: capability names the operations the
attacker can perform from its position and what they achieve —
not just the access or vantage point. Phrase it as "From
[position], the attacker can [concrete operations] …" (e.g. "From
the network path between the API server and the database, the
attacker can read and alter requests and responses to exfiltrate
data in transit or inject forged responses"). A capability that
states only access is flagged with a quality_warning and the
control objectives derived from it may be under-specified.
The caller supplies identity-bearing fields (capability, position,
archetype, trust_boundary_ids); the backend reasons the factors.
Override one later via edit_attacker with a change_reason.
Three outcomes (normal create / auto-restore / similar-rejection)
mirror add_asset (entities holds the attacker). 503 on
factor-reasoning or restore-candidate evaluator outage, 502 on malformed
restore-candidate response.
surface_extent says how much of the reached interface this
attacker's operations range over. An attacker ranging over the whole
interface makes the objectives it appears in for-all obligations,
which only a sound witness (typed_boundary /
sink_default_deny) can credit. Declaring it here is a statement about
the attacker's reach, taken with its change_reason: a person's is
recorded attested; a program's only under a workspace rule delegating
extent_attested, otherwise the attacker is added, the extent lands
unattested and the attestation waits for a person (the answer's
attestation.escalation_id). Only whole
is declarable on a create: narrowing to one named entry is a statement
about the objectives the attacker anchors, and a create has none yet —
add the attacker, then narrow it with edit_attacker and a
change_reason, where the narrowing is checked against the assets
those objectives defend. There is no attacker status to set.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | ID of the threat model. | |
| position | No | Position/access level. | |
| archetype | No | Archetype (e.g., "insider", "external"). | |
| capability | Yes | Attacker capability description (required). | |
| change_reason | No | Required when ``surface_extent`` is supplied — documents the declaration for the audit trail. | |
| server_version | Yes | ||
| surface_extent | No | ``"whole"`` when, from its position, the attacker's operations range over ANY entry of the interface it reaches (any endpoint, request, row, file, message or frame). Requires ``change_reason``. Omit to leave it undeclared, which is the ordinary case. | |
| trust_boundary_ids | No | Comma-separated ids of the boundaries the attacker has crossed. Naming them attests the position: a person's is recorded attested; a program's only under a rule delegating ``position_attested``, otherwise the position lands suggested and the attestation waits for a person (``attestation.escalation_id``). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||