jiffy-review — methodology & tiers
The jiffy review command performs a structured, four-pass review of an AI artifact bundle (skills, MCP definitions, agent configs, cursorrules, vector-store documents) and returns a confidence-tiered finding list. This page describes the model.
Four passes
Every jiffy review invocation runs these passes in order. Each pass consumes the prior pass's output; the server is authoritative (the CLI is a thin HTTP wrapper over /api/v1/review).
- RECON — inventory. Lists every file submitted in the bundle
with its SHA-256 hash and byte length. Stable-sorted by path. No heuristics; purely catalogs what will be analyzed.
- HUNTER — static rules. Runs the Sprint 25 MalSkills symbolic
rule set against an SDG derived from the artifact contents. Each hit carries a rule_id, severity, evidence_node_ids, and framework_codes (OWASP LLM 2025, MITRE ATLAS, NIST CSF 2.0).
- ADVERSARIAL — attack-path detectors. Applies the 15 Jiffy
attack-path detectors (12 from Sprint 61, 3 added in Sprint R) to a minimal graph derived from the bundle. Also surfaces MalSkills pattern matches from the HUNTER pass so later triage can fold them.
- TRIAGE — tier + CVSS assignment. Assigns each finding a
confidence_tier and, when derivable, an indicative CVSS 3.1 triple (vector, base, severity). Dedupes by the (detector_slug, target_artifact_uri) key, preferring the higher tier when the same slug lands twice.
Confidence tiers
Sprint R introduced a 3-tier validation scheme on top of Jiffy's existing intel confidence enum.
| Tier | Meaning | When it fires |
|---|---|---|
| confirmed | Corroborated by a curated rule set or external disclosure | MalSkills rule hits; threat_intel_entries.confidence = 'confirmed' |
| plausible | Supported by static evidence but not independently corroborated | Hunter/adversarial matches with severity medium/high/critical |
| theoretical | Pattern-plausible but unvalidated | Low-severity matches; exploratory detectors |
Tier–severity invariant
A theoretical tier finding cannot carry a high or critical severity. The publish path rejects such combinations (HTTP 400 from PATCH /api/admin/intel-entries/[id]), and migration 062's pre-check halts with exit 1 if any pre-existing row in the intel table would violate the rule after backfill. Operators re-review those rows manually; Jiffy does not auto-remediate.
Optional CVSS 3.1 metadata
Where an AIL value is known (from attestation.ail_level), Jiffy derives a CVSS 3.1 triple from the 16-cell decision table (web/src/lib/trust/cvss-decision-table.ts). The mapping is indicative, not authoritative — real CVSS analysts customize per-CVE. Customers who need bespoke CVSS override in their SIEM.
The CVSS output is exposed in two places:
/api/v1/trustresponse gains optional top-levelail_leveland
cvss3 keys outside canonical_json. Signatures still verify byte-for-byte; the signing key is not rotated.
- SARIF 2.1.0 output (
properties.security-severity+cvss3_vector)
from both jiffy-review/sarif and scanner/sarif. GitHub Advanced Security, GitLab, and most SIEMs read security-severity natively.
MITRE ATT&CK coverage
Every rule emitted by the Sprint 25 symbolic engine has an explicit ATT&CK mapping at web/src/lib/jiffy-review/mitre-attack-mappings.ts. The source of truth is the TypeScript file; the table below is rendered at page-request time so the doc cannot drift. Rules with techniques: [] are LLM-specific patterns (prompt injection, jailbreak, content-layer stego) that have no clean core ATT&CK fit and are tracked under MITRE ATLAS AML.T0051 instead.
A machine-readable JSON export of the same matrix lives at /api/public/mitre-coverage.json (1h browser cache, 24h edge cache).
Jiffy covers 27 ATT&CK techniques across 8 tactics. 6 additional rules are LLM-specific and track under MITRE ATLAS AML.T0051.
| Technique ID | Technique Name | Tactic | Covering Rules |
|---|---|---|---|
T1027 | Obfuscated Files or Information | TA0002 (Execution), TA0005 (Defense Evasion), TA0010 (Exfiltration) | MS-B64-PAYLOAD-030, MS-CRYPTO-EXFIL-010, MS-OBFUS-EXEC-002, MS-PAYLOAD-LEN-016 |
T1027.004 | Obfuscated Files or Information: Compile After Delivery | TA0002 (Execution), TA0005 (Defense Evasion) | MS-DYN-IMPORT-027 |
T1041 | Exfiltration Over C2 Channel | TA0005 (Defense Evasion), TA0006 (Credential Access), TA0010 (Exfiltration), TA0011 (Command and Control) | MS-CRED-NET-001, MS-CRYPTO-EXFIL-010, MS-ENV-NET-004, MS-MULTIART-011, MS-NET-EGRESS-015 |
T1048 | Exfiltration Over Alternative Protocol | TA0010 (Exfiltration) | MS-ARCHIVE-NET-014 |
T1053.003 | Scheduled Task/Job: Cron | TA0003 (Persistence) | MS-PERSIST-007 |
T1059.004 | Command and Scripting Interpreter: Unix Shell | TA0001 (Initial Access), TA0002 (Execution), TA0005 (Defense Evasion), TA0011 (Command and Control), TA0040 (Impact) | MS-CURL-BASH-012, MS-OBFUS-EXEC-002, MS-RM-RF-034, MS-SC-PKG-003, MS-SHELL-TRUE-036 |
T1059.006 | Command and Scripting Interpreter: Python | TA0002 (Execution), TA0005 (Defense Evasion), TA0011 (Command and Control) | MS-DYN-IMPORT-027, MS-EVAL-NET-009, MS-SHELL-TRUE-036 |
T1071 | Application Layer Protocol | TA0001 (Initial Access), TA0010 (Exfiltration), TA0011 (Command and Control) | MS-BIND-ALL-035, MS-NET-EGRESS-015 |
T1090 | Proxy | TA0005 (Defense Evasion), TA0011 (Command and Control) | MS-MODEL-OVERRIDE-006 |
T1098.004 | Account Manipulation: SSH Authorized Keys | TA0003 (Persistence) | MS-SSH-008 |
T1105 | Ingress Tool Transfer | TA0002 (Execution), TA0011 (Command and Control) | MS-CURL-BASH-012, MS-EVAL-NET-009 |
T1133 | External Remote Services | TA0001 (Initial Access), TA0005 (Defense Evasion), TA0011 (Command and Control) | MS-BIND-ALL-035, MS-MCP-BROAD-022 |
T1140 | Deobfuscate/Decode Files or Information | TA0002 (Execution), TA0005 (Defense Evasion) | MS-OBFUS-EXEC-002 |
T1195.002 | Supply Chain Compromise: Compromise Software Supply Chain | TA0001 (Initial Access), TA0002 (Execution) | MS-SC-PKG-003, MS-UNPINNED-023 |
T1485 | Data Destruction | TA0002 (Execution), TA0040 (Impact) | MS-RM-RF-034 |
T1539 | Steal Web Session Cookie | TA0006 (Credential Access) | MS-BROWSER-ARTIFACT-025 |
T1543.001 | Create or Modify System Process: Launch Agent | TA0003 (Persistence) | MS-AUTORUN-013, MS-MCP-HOOK-029, MS-PERSIST-007 |
T1543.004 | Create or Modify System Process: Launch Daemon | TA0003 (Persistence) | MS-PERSIST-007 |
T1547 | Boot or Logon Autostart Execution | TA0003 (Persistence) | MS-MCP-HOOK-029 |
T1547.011 | Boot or Logon Autostart Execution: Plist Modification | TA0003 (Persistence) | MS-AUTORUN-013 |
T1552 | Unsecured Credentials | TA0006 (Credential Access), TA0010 (Exfiltration) | MS-CONN-STRING-018, MS-ENV-NET-004, MS-HARDCODED-SECRET-017, MS-TOKEN-URL-024 |
T1552.001 | Unsecured Credentials: Credentials In Files | TA0006 (Credential Access), TA0010 (Exfiltration) | MS-CRED-NET-001, MS-MULTIART-011 |
T1552.004 | Unsecured Credentials: Private Keys | TA0006 (Credential Access) | MS-PEM-KEY-019 |
T1555 | Credentials from Password Stores | TA0006 (Credential Access) | MS-BROWSER-ARTIFACT-025 |
T1562 | Impair Defenses | TA0001 (Initial Access), TA0005 (Defense Evasion), TA0011 (Command and Control) | MS-MCP-BROAD-022, MS-MODEL-OVERRIDE-006 |
T1562.001 | Impair Defenses: Disable or Modify Tools | TA0005 (Defense Evasion) | MS-DANGER-FLAG-031, MS-EMPTY-PERMS-026, MS-WILDCARD-TOOLS-032 |
T1567 | Exfiltration Over Web Service | TA0006 (Credential Access), TA0010 (Exfiltration) | MS-ARCHIVE-NET-014, MS-MULTIART-011 |
Pipeline parity
The CLI (packages/jiffy-cli/src/commands/review.ts) is a thin HTTP wrapper; the server-side pipeline (web/src/lib/jiffy-review/review-pipeline.ts) is the single source of truth. A parity test (web/src/lib/jiffy-review/__tests__/review-parity.test.ts) asserts the CLI stdout JSON equals the server-handler JSON byte-for-byte (after redacting non-deterministic duration_ms fields) across three canonical fixture bundles (benign, plausible, confirmed). A drift would require someone to hand-port pipeline logic into the CLI — which the thin-wrapper design disallows.
Exit codes
| Code | Meaning |
|---|---|
| 0 | Success — findings present or absent, both are valid outcomes |
| 1 | Generic failure — network error, 5xx, server rejection |
| 3 | Malformed CLI input — missing --artifact, invalid --ail range |
Findings are not errors. A bundle that triggers every detector still exits 0 provided the HTTP request completes.
See also
jiffy-reviewMCP tool — the MCP packaging of the
same pipeline for Claude Desktop / Cursor integrations.
for any UI derived from the CLI output.