fallow security produces deterministic candidates. It does not call a model, decide exploitability, or emit verified vulnerabilities. Use this recipe when an agent or external harness should turn raw candidates into a shorter survivor list.
Inputs
Use the CLI when you want a standalone JSON file:surface: true forwards --surface and includes top-level attack_surface[] entries. Set gate to new for changed-line candidates or newly-reachable for candidates that became reachable from entry points; newly-reachable requires changed_since. paths forwards repeated --file filters and scopes returned candidates to matching anchors, trace hops, source-trace hops, and unresolved-callee diagnostics.
Each candidate includes severity, a review-priority tier (high, medium, or low). It is not a verified vulnerability verdict. When reachability.taint_confidence is present, use it to distinguish arg-level source association from weaker module-level reachability.
Verifier packet
For eachsecurity_findings[] item, build one packet from deterministic fallow evidence plus caller-collected source windows:
blind_spots.unresolved_callee_diagnostics can copy the top-level fallow output when a verifier queue wants sample locations for dynamic-dispatch follow-up. It is bounded metadata, not proof of a vulnerability.
Prompt contract
Ask the verifier to dismiss candidates unless the supplied evidence supports a real exploit path:attack_surface.defensive_boundary.verification_prompt is present, include it as an additional question, not as a verdict.
Verdict schema
Require a compact JSON verdict:survivor: the verifier could not dismiss the candidate from the supplied evidence.dismissed: the candidate is not exploitable from the supplied evidence.needs-human-review: the evidence is incomplete, contradictory, or blocked by missing context.
finding_id. Do not write verdict fields back into fallow output.
Render survivors
Join the candidates and the verdict file withfallow security survivors to render only the candidates the verifier retained:
summary.unverdicted so unreviewed candidates stay visible; add --require-verdict-for-each-candidate to fail CI when any candidate lacks a verdict. To see where the structural trace stopped (unresolved callees the verifier should inspect by hand), run fallow security blind-spots.
Caveats
Candidate quality depends on source and trace fidelity. HTTP-input source patterns are receiver-gated to avoid broad*.query collisions with unrelated APIs, but framework-specific request aliases can still need verifier judgment. reachability.taint_confidence distinguishes arg-level from module-level source association; use severity and taint_confidence for triage order, then verify source control, value flow, sink behavior, and defensive controls from source windows before reporting a survivor.
See also
fallow security
CLI reference for security candidates.
MCP integration
Agent setup and tool contracts.