Loading...
Loading...
Synthesizes trust boundaries, attack surfaces, and attacker profiles into a living threat model. Use as Stage B of the Knowledge Base generation process, reading architecture and entity definitions from the KB. Don't use for analyzing source code or extracting raw learnings from JSONL files.
npx skill4agent add google/mantis mantis-threat-modelTHREAT_MODEL.md/mantis-threat-model--state_root <dir>workspace/./workspace/....mantis_state.json--snapshot_id <id>SNAPSHOT_IDTHREAT_MODEL.mdKB_SNAPSHOT:active_snapshot.snapshot_idsnapshot_pinnedUNPINNED--snapshot_root <dir>workspace/.mantis_state.jsonpass_numberactive_snapshot{root, snapshot_id, snapshot_pinned}workspace/kb/architecture.mdworkspace/kb/entities/*.mdworkspace/kb/THREAT_MODEL.mdKB_SNAPSHOT:workspace/kb/THREAT_MODEL.mdKB_SNAPSHOT:workspace/kb/THREAT_MODEL.mdworkspace/archive/kb/THREAT_MODEL_pass_${N}.mdTHREAT_MODEL.mdworkspace/kb/THREAT_MODEL.mdSTALELOCATOR RESOLUTION (before reading ANY target code or artifact):
0. ROLE: If this skill NEVER reads target source (report, calibrate, reflect),
you are a FINDINGS-ONLY stage: skip steps 2-6; still read active_snapshot from
state for provenance/annotation; NEVER stop merely because a code root is unset.
1. Determine CODE_ROOT, in this priority order:
a. If --target_root is passed on THIS invocation, CODE_ROOT = --target_root.
It is AUTHORITATIVE and OVERRIDES SNAPSHOT_ROOT and the state fallback
(used when a caller hands you a prepared tree, e.g. a patched shadow).
b. Else if --snapshot_root (or SNAPSHOT_ROOT) is passed, use it.
c. Else read state_root/workspace/.mantis_state.json (state_root from
--state_root if passed, else ./workspace/... relative to the current dir)
-> active_snapshot.root / .snapshot_id / .snapshot_pinned.
d. Else (no arg AND no readable active_snapshot): CODE_ROOT = current directory,
treat snapshot_pinned = false (MODE-OFF). Do NOT stop.
2. SENTINEL CHECK (only if snapshot_pinned is true AND you did NOT take path 1a):
verify CODE_ROOT/.mantis_snapshot_id exists and equals SNAPSHOT_ID. If missing
or different -> STOP "snapshot sentinel mismatch". (A --target_root tree (1a) is
deliberately mutated and is sentinel-EXEMPT.)
3. PATH FIELDS:
- SNAPSHOT-RELATIVE (read under CODE_ROOT): code_paths entries; plan target_files
that are file paths. Strip ONLY a trailing ":<digits>". A code_paths entry
containing "://" is a URL/endpoint, NOT a file read. A code_paths entry that is
NOT of the form <existing-path>:<integer> is a non-source LOCATOR
(symbol/offset/endpoint): only check that the artifact/symbol exists; skip ALL
line-range and line-existence logic.
- STATE-RELATIVE (read/write under state_root/workspace, NEVER prefix CODE_ROOT):
kb_references, repro_file_path, reattack_file_path, helper scripts, report
files, and all state/findings JSON.
4. Never WRITE under CODE_ROOT when snapshot_pinned is true. Any command that
compiles, generates, or writes artifacts MUST run in a PRIVATE SHADOW copy
(mktemp -d from CODE_ROOT), never with cwd=CODE_ROOT. Read-only inspection may
cd into CODE_ROOT.
5. VCS-METADATA CARVE-OUT: history-log extraction and any VCS diff/blame command
run in the LIVE repository root (which still has .git/.hg/.repo), NOT CODE_ROOT
(the snapshot copy strips VCS metadata). Do NOT stop merely because CODE_ROOT
lacks .git/.hg/.repo.
6. Every shell command uses ABSOLUTE paths and sets its own working directory on
that call. Do NOT assume the working directory persists between calls./mantis-threat-modelarchitecture.mdentities/*.mdTHREAT_MODEL.md.mantis_state.jsonstate_root/workspaceCODE_ROOTactive_snapshotCUR--snapshot_idCURactive_snapshot.snapshot_pinnedCURactive_snapshot.snapshot_idCURUNPINNEDPREV_TM^KB_SNAPSHOT:workspace/kb/THREAT_MODEL.mdPREV_TMPREV_TM""CUR == "UNPINNED"SYNC_OCCURRED = truePREV_TM == ""SYNC_OCCURRED = truePREV_TM != CURSYNC_OCCURRED = truePREV_TM == CURSYNC_OCCURRED = falseN"pass_number"workspace/.mantis_state.jsonworkspace/archive/findings_pass_NloopN_findingsN = max_found + 11workspace/kb/THREAT_MODEL.mdworkspace/archive/kb/mkdir -p workspace/archive/kb/workspace/archive/kb/THREAT_MODEL_pass_${N}.mdstate_root/workspaceCODE_ROOTCURSYNC_OCCURREDNworkspace/kb/architecture.mdworkspace/kb/entities//mantis-architectureworkspace/kb/THREAT_MODEL.mdarchitecture.mdIntent: PRODUCTIONIntent: SAMPLE_OR_TEST_ONLY/mantis-criticSAMPLE_OR_TESTIntent: SAMPLE_OR_TEST_ONLYSAMPLE_OR_TEST_ONLYIntent: SAMPLE_OR_TEST_ONLYIntent: PRODUCTIONworkspace/kb/entities/*.mdCRITICALSTANDARDarchitecture.mddockerk8sconsole_scriptsentry_pointsmain()testtestsexampleexamplessamplesamplestutorialdemodocsfixturessrclibpkginternalcmdappservercoreSYNC_OCCURRED == trueIntent:[Auth Module](entities/auth_module.md)CRITICALSTANDARDLOW_CRITICALITYworkspace/kb/THREAT_MODEL.mdKB_SNAPSHOT: CURKB_SNAPSHOT: <CUR>KB_SNAPSHOT: UNPINNEDPREV_TMmantis-criticSYNC_OCCURRED == falseKB_SNAPSHOT:> STALE: Threat model NOT re-evaluated this pass; carried unchanged from snapshot <CUR>.SYNC_OCCURRED == trueworkspace/kb/THREAT_MODEL.md