Skip to main content

audit-findings

Records the findings of a code or interface audit in an append-only log and renders them into a PDF report, an HTML report, and ready-to-paste GitHub issues. It is the tool behind the audit-* skills in fabiommendes/skills.

The log lets several agents record findings in parallel, and an audit continue across sessions, without any of them reading or rewriting the whole report:

  • every write goes through the command line, which holds a file lock, assigns ids, and validates the record before appending it;
  • a finding's location and snippet are checked against the source when it is recorded, so mistakes surface to the agent that made them;
  • status prints a compact summary to resume from.

Usage

uvx audit-findings --help

Records are JSON objects passed on stdin:

audit-findings -a webserver init <<'EOF'
{"lang": "en", "title": "Security Audit Report", "project": "acme-api"}
EOF

audit-findings -a webserver add category <<'EOF'
[{"id": "idor", "title": "IDOR"},
 {"id": "xss", "title": "XSS", "applies": false, "note": "no HTML rendering"}]
EOF

audit-findings -a webserver add finding <<'EOF'
{"category": "idor", "severity": "critical",
 "title": "GET /invoices/{id} does not check the tenant",
 "location": "src/api/invoices.py:42-47",
 "snippet": "return db.query(Invoice).filter(Invoice.id == invoice_id).first()",
 "description": "...", "impact": "...", "fix": "..."}
EOF
# prints the new id: F1

audit-findings -a webserver status
audit-findings -a webserver render

The log is docs/audits/<area>/findings.jsonl. --area and --dir may be omitted when the project holds a single log.

Command Purpose
init Create the log; optional meta JSON on stdin.
import FILE Create the log from an existing findings.json.
add KIND Add a record or an array of records; prints the ids.
update ID Merge a JSON object into a record; null deletes a field.
remove ID... Remove records nothing else refers to.
start, done, reopen Track progress per category.
status, list, show Read the log.
check Check every location and snippet against the source again.
build Validate and write findings.json.
render [FILE] Build, then write report.pdf, report.html, issues.md.

Record kinds: category, finding, strength, risk, recommendation, issue, inventory (a coverage table), and row (a row of one). The fields are described in the audit-report skill.

Log format

Each line of findings.jsonl is one event:

{"op": "add", "type": "finding", "id": "F3", "data": {"...": "..."}, "agent": "a1", "ts": "2026-10-08T12:00:00+00:00"}
{"op": "update", "id": "F3", "data": {"severity": "high"}, "ts": "..."}
{"op": "remove", "id": "F3", "ts": "..."}

Replaying the events gives the current records; build turns them into findings.json. Removed ids are never reused.

Metadata

Release files for audit-findings 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for audit-findings 0.1.0
File Size Uploaded Provenance Actions
audit_findings-0.1.0.tar.gz 24.2 kB Without provenance Details for audit_findings-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for audit-findings 0.1.0
File Interpreter ABI Platform Actions
audit_findings-0.1.0-py3-none-any.whl Python 3 none any Details for audit_findings-0.1.0-py3-none-any.whl

Total release size: 51.7 kB

Release files / audit_findings-0.1.0.tar.gz

Download URL audit_findings-0.1.0.tar.gz
Size 24.2 kB
Tags Source
SHA-256 checksum
How to use checksums
7dfe26f288cb0b2e0d51d95d91dbd0ae9b66fbb5c0edd7359519c32cf0ba99ff
BLAKE2b-256 checksum
How to use checksums
da7b6b480f3beb5f0bb0819f11fed94f262a9c49138ccd1ff84667ae839a9e35
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / audit_findings-0.1.0-py3-none-any.whl

Download URL audit_findings-0.1.0-py3-none-any.whl
Size 27.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b3e8853a7ed310cf246321fcd2d1c20fa850503affbb87872676558adbf9e0a3
BLAKE2b-256 checksum
How to use checksums
5554a7db793722ecbe54fb75b7109510f0138610746232752e11dceb4f7dd87d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for audit-findings 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page