quaere-audit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited quaere-audit (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
No security finding is `confirmed` without a falsifiable property, a reachable attacker-controlled path, a missing or failed guard, concrete impact, and a disconfirming false-positive pass.
This is the security version of evidence-gating. Dangerous APIs, scary strings, stale advisories, and pattern matches are leads, not findings. A finding becomes actionable only when the audit can show why the property should hold, where an attacker crosses a boundary, which sink/state/guard fails, what impact follows under the threat model, and what counter-evidence was checked. If any link is missing, classify it as potential, rejected, or inconclusive.
quaere-grounding first.quaere-execution.Audit coordinates other skills; hand off when the blocking question is not security-property mapping:
quaere-semantic.quaere-grounding.quaere-evidence.quaere-execution.The standard handoff payload (Confirmed inputs / Inconclusive inputs / Required next skill / Stop condition) is documented at the end of this file under "Coordination with other skills".
Scope / ROE target, assets, actors, trust boundaries, source-of-truth specs, unsafe actions
Tier Triage / Standard / Deep, selected by scope and blast radius
Security Property falsifiable invariant/rule mapped to spec, ASVS/WSTG/NIST/CWE when relevant
Threat Path attacker source -> trust boundary -> sink/state transition/missing guard -> impact
Attack Surface entrypoints, actors, external input, privilege/state boundaries, alternate paths
Code Map files, symbols, callers/callees, storage/state, validation layers, configs
Proof Attempt evidence that each property sub-claim holds or breaks on reachable paths
Gate Pass reachability, attacker control, existing guard, scope, impact, repro strength
Severity priority calibrated by impact, exploitability, blast radius, CVSS/SSVC/KEV/EPSS when relevant
Decision confirmed / potential / rejected / inconclusive
Repro / Evidence safe test, command, trace, minimal PoC, or why PoC is unsafe/unavailable
Handoff findings, rejected claims, uncovered risks, skipped tools, next probesSecurity auditing is property-driven, not bug-class-driven. OWASP Top 10/CWE labels help classify a finding after evidence exists; they do not prove the finding. For web/appsec properties, prefer versioned ASVS/WSTG references when applicable. For current CVEs, advisories, cloud defaults, framework guidance, or bounty rules, use quaere-grounding before relying on the fact.
quaere-evidence.Do not expand scope just because the codebase is large. Start from assets, trust boundaries, and rules of engagement. Promote the tier when blast radius demands it; never lower the tier to make a finding easier to confirm.
Confirmation Rule (summary — full rule under `## Confirmation Rule` near the end): Triage confirmed requires all 4: (1) explicit property and concrete proof gap naming the missing or failed guard, sink, or invariant; (2) code evidence that the gap is reachable from attacker-controlled input; (3) false-positive gates run, including at least one disconfirming probe that names what was actually consulted (file/symbol/caller/config/spec) or the command/test actually run — absent a named consulted artifact, cap the finding at potential; (4) safe repro/trace or strong reasoning for non-trivial impact, or a recorded safety reason. Standard adds (5) external facts grounded via quaere-grounding and (6) quaere-evidence failed to reject the finding; Deep adds (7) quaere-semantic mapped the critical path. Promote high-blast-radius Triage findings (consensus break, funds movement, auth bypass, parser RCE, sandbox escape, key compromise, mass/bulk tenant data exposure, cross-tenant write, tenant impersonation, multi-tenant secret leak) to Standard before confirmed.
Default to read-only analysis. Ask first before:
Prefer safe substitutes: local fixtures, sandboxed test environments, dry runs, synthetic inputs, symbolic traces, or code proofs. If a safe repro cannot be produced, record why and classify accordingly; do not run unsafe probes just to strengthen a report.
Stop now — hard stops (full list under "Stop conditions" at the end): stay read-only and ask before any unsafe or production-touching probe; never run an unsafe probe just to strengthen a report; do not promote a finding to confirmed until it passes the false-positive gates; stop at the verification budget and hand off rather than looping.
Define before searching for bugs:
If the scope is missing or unsafe, ask before probing.
Create a property ledger. Translate broad bug classes into explicit assertions:
Property: A request authenticated as user U must not read invoice I unless I.organization_id is in U.allowed_organization_ids, including export and background-render paths.
Source: tenant-isolation requirement / ASVS 5.0.0 access-control control / product spec
Expected enforcement: route guard before object fetch; render job re-checks tenant context
Failure impact: cross-tenant invoice disclosureProperty sources include normative spec language, auth/tenancy rules, parser/decoder contracts, state-machine transitions, crypto/consensus/accounting invariants, resource bounds, tests, types/schema constraints, persistence assumptions, and historical fixes. See references/property-types.md for property shapes.
For each high-value property, map:
Do not audit only the obvious primary function. Include alternate constructors, deserializers, imports, sync/admin/migration paths, background processors, persistence boundaries, cache invalidation, retries, and error paths when they can affect the property.
For each property:
If code intent/invariants are unclear, invoke quaere-semantic. If the proof depends on current docs, CVEs, advisories, API behavior, cloud defaults, or bounty scope, invoke quaere-grounding. If the candidate finding is subtle or disputed, invoke quaere-evidence before reporting.
Before confirmed, run all gates from references/fp-gates.md:
Also perform a second-pass falsification: actively ask what benign explanation, compensating control, deployment assumption, or alternate path would invalidate the finding. Drop pattern-only findings, best-practice-only issues, and theoretical impacts unless the user explicitly asked for hardening suggestions.
Decisions:
confirmed — property + reachable attacker path + failed guard + impact + gates + repro/trace meet the tier's Confirmation Rulepotential — plausible proof gap but incomplete reachability, impact, grounding, or safe reprorejected — gate or defense defeats the claiminconclusive — evidence unavailable or unsafe within scope; include next probeSeverity should be calibrated, not guessed. Use project severity rules when supplied. Otherwise consider impact, exploitability, privileges, user interaction, blast radius, exposure, and whether KEV/EPSS/SSVC/CVSS applies. CVSS is a vector and input to prioritization, not the whole risk decision. CWE describes root cause after the weakness is established.
For confirmed or high-value potential findings, provide the smallest safe verification:
If PoC/test/harness/fix implementation requires editing, hand off to quaere-execution only after explicit authorization.
Use templates/audit-ledger.md for persistent audits and templates/finding.md for report-ready findings. For final output, include:
Scope / ROE:
Tier:
Property Ledger:
Attack Surface / Threat Paths:
Audited Proofs:
False-positive Gates:
Findings by decision:
Rejected Claims:
Uncovered Risks / Skipped Tools:
Verification / Safe Repro:
Tier companion decisions:
Tier promotion probe:
Handoff:Keep these sections separate and in this order. Do not merge Audited Proofs and Findings by decision: proofs establish evidence and gaps, false-positive gates attempt to defeat the candidate, and only then may a candidate appear under Findings by decision as confirmed, potential, rejected, or inconclusive.
Tier companion decisions is a required block on every Standard or Deep report:
Tier companion decisions:
- External grounding: confirmed EG-... | no external facts required | unresolved
- Evidence-gated review: failed to reject C-... | no candidate disputed | unresolved
- Semantic review: mapped critical path ... | n/a — tier is not Deep
- Tier promotion: not required | promoted to Standard because <blast-radius category>Tier promotion probe is a required block whenever a Triage finding is being evaluated for promotion. Do not infer mass exposure from a single reachable object — record the check explicitly:
Tier promotion probe:
- Bulk / list path checked: yes — <finding or path> | no | n/a
- Cross-tenant enumeration checked: yes — <finding or path> | no | n/a
- Secrets / payment / admin / system impact checked: yes — <scope> | no | n/a
- Promotion decision: stay Triage | promote Standard because <canonical category>Each finding should include: property, affected code, attacker path, proof gap, gate results, severity, confidence, CWE/CVSS/ASVS/WSTG tags when relevant, repro/evidence, remediation direction, and regression/security test suggestion.
A finding cannot be confirmed unless the chosen tier's bar is met. Record the tier on the finding.
Tier does not override external-fact freshness. Even in Triage, if a finding relies on a current CVE, advisory, framework/cloud default, versioned spec, SDK/API behavior, or bounty rule, run quaere-grounding for that fact or classify the item as potential / inconclusive until the fact is grounded.
Triage requires 4 conditions:
Disconfirming check performed: field; absent a named consulted artifact, cap the finding at potential.Standard adds 2 conditions (6 total):
quaere-grounding confirmed every external spec, SDK, advisory, CVE, cloud, framework, or bounty-rule fact used by the claim, or no external fact was required.quaere-evidence failed to reject the candidate finding through defenses and disconfirming probes.Deep adds 1 condition (7 total):
quaere-semantic mapped the relevant code intent, invariants, failure modes, and connections for the critical path.Tier promotion rule. If a Triage finding has high blast radius — consensus break, funds movement, auth bypass, parser RCE, sandbox escape, key compromise, mass/bulk tenant data exposure, cross-tenant write, tenant impersonation, or multi-tenant secret leak — promote to Standard before marking confirmed. The list is canonical; do not rely on open-ended "similarly broad" phrasing — if a candidate finding does not fit one of these categories, it is single-tenant and does not require promotion regardless of the operational severity.
A bad-output (pattern-only IDOR claim) vs good-output (Scope → Property Ledger → Attack Surface → Proof → Decision) example, applied to a POST /api/invoices/export triage, is at references/worked-example.md. Read it when "Tier ↔ proof depth" feels abstract.
Audit-side rationalizations ("Dangerous function is present, so it's a vulnerability.", "OWASP / CWE classification, so it's confirmed.", "Scanner reported it.", etc.) and what each actually skips are at references/anti-patterns.md. Read it before promoting a candidate finding to confirmed.
When handing off, emit this standard block:
Handoff
- From skill: quaere-audit
- Blocking question: <what cannot be decided within this audit's scope>
- Confirmed inputs: <confirmed findings, grounded external facts, or semantic invariants safe to carry forward>
- Inconclusive inputs: <potential/inconclusive findings or ungrounded facts not safe to treat as true>
- Required next skill: <quaere-grounding | quaere-semantic | quaere-evidence | quaere-execution>
- Stop condition: <what the next skill must return before the audit can mark the finding confirmed>quaere-semantic — when code intent, invariants, failure modes, or downstream connections are unclear.quaere-grounding — before relying on current specs, CVEs, advisories, docs, cloud behavior, framework guidance, CLI/tool behavior, or bounty rules.quaere-evidence — for each subtle/disputed/security-sensitive candidate finding before marking it confirmed at Standard/Deep.quaere-execution — only for safe PoC/test/fix implementation after explicit authorization.Stop when the requested scope is covered, the verification budget is exhausted (default: 5 investigation iterations / 5 planned probes, mirroring quaere-evidence, unless the user overrides), unsafe probing would be required, evidence remains insufficient after meaningful disconfirming probes, or the user must decide whether to expand scope, run a PoC, disclose, or fix.
Do not silently continue into broad repository scanning after finishing the requested surface. End with uncovered risks and next probes.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.