This page documents how to report vulnerabilities, what's in scope, our response commitment, and the security posture of the products we ship. The operational companion to the trust & compliance posture page — that page covers framework status (SOC 2 / ISO 42001 / EU AI Act Article 12 / NIST AI RMF) and the procurement artifact set; this page covers vulnerability disclosure, supply-chain integrity, and the secure-defaults of the products we ship.

Reporting a vulnerability

Email [email protected] with details. Please include:

Acknowledgement within one business day (Athens, Greece time), with a substantive triage response within two business days. For high-severity issues we engage immediately on receipt. (These SLAs match the procurement-facing commitment on the trust page security-contact row.)

Safe-harbour commitment

We will not pursue legal action against good-faith security research that:

In scope

Out of scope

Hall of thanks

We acknowledge security researchers who report responsibly. Once we have a name to credit, it goes here. Send us how you'd like to be credited (full name, handle, or anonymous).

No reports yet — be the first.

Roam does not run a monetary bug-bounty program yet. Until a paid program is announced, responsible reports receive public acknowledgement in this hall plus, on request, a written reference confirming the report and remediation outcome. Same stance is cited from the trust page vulnerability-disclosure row.

Security posture

The CLI runs locally

The roam-code CLI is local source analysis with no API key and no automatic repository-content upload. It writes a SQLite file in your repo's .roam/ directory. No automatic telemetry, update check, model-training upload, or listener. A cold parser cache may retrieve one checksum-verified platform bundle from the dependency's GitHub release; the bundle is retained for offline reuse. Explicit commands and flags can contact PyPI, GitHub, user-selected URLs, Roam Cloud, or Sigstore, opt-in MCP model summarization can send selected report snippets to the configured model provider. The explicit bench-compile benchmark launches claude -p with task prompts and generated context; optional MCP/webhook modes can open a listener. The complete trigger, destination, payload, and default inventory is in docs/network-boundary.md. This same default-local, no-automatic-upload stance is contractually committed in DPA §6 (Security measures). The engine is Apache 2.0; audit the source on GitHub and rebuild every release from the tagged commit.

Explicit network boundary

TriggerBoundaryDefault
Cold parser cacheDownloads one checksum-verified platform bundle; no repository contentOnly when a requested grammar is absent
version --check, GitHub PR/review fetch flags, stale-refs --check-externalRead requests to PyPI, GitHub, or operator-selected URLsOff unless selected
metrics-push, guard-pr --post-checkSend the documented metrics payload or GitHub check-run payloadExplicit command/flag
Cosign --keylessOIDC/Fulcio/Rekor exchange of identity and signing evidence; not source bodiesOff unless selected
MCP summarization with ROAM_AI_ENABLED=1Send up to 60,000 characters of the selected structured report to the client-selected model; fields can include source snippetsOff unless explicitly enabled; pass summarize=false per call
roam bench-compileLaunches claude -p with task prompts and, for the compile condition, generated plan/context. Repository access and model-provider usage and charges follow the child agent’s configurationExplicit benchmark command, separate from static checks; reused cached cells skip a new call
HTTP MCP or webhook modeOpens an operator-configured listener; loopback by defaultOrdinary CLI analysis opens none

For air-gapped use, install from an approved wheelhouse, prewarm the parser cache on each target platform, use fixture/file inputs and offline-key signing, and enforce egress at the host boundary for any project test/build commands launched by verification hooks.

Supply-chain integrity

Local analysis does not require granting a hosted review service access to your repository. It still depends on the package, its dependencies, the build and publishing chain, and your machine. Attestations establish provenance within that trust model; an SBOM inventories dependencies. Neither establishes that the code is safe or that an independent rebuild is bit-for-bit identical. We do not claim independently verified reproducible builds. Inspect the workflow and tagged source when evaluating a release.

Verify a release yourself

Select the exact distribution file you intend to install, then follow PyPI's attestation verification instructions with the expected repository https://github.com/Cranot/roam-code. The documented pypi-attestations verifier fetches the file and its provenance separately and checks the publishing identity and artifact digest. A normal pip download does not supply an attestation sidecar. Missing or failed verification is not a successful provenance check.

SBOM (CycloneDX) and the workflow's GitHub Attestations view are linked from each GitHub release.

Audit-trail evidence

Roam's evidence workflows, when configured, can emit in-toto v1 attestation statements and an HMAC-chained run ledger. They are not automatic records of every analysis. Inspect which checks ran and which were missing; a signed record does not authenticate who acted or prove complete coverage. Run roam runs verify to confirm the ledger chain and roam cga verify STATEMENT.json to confirm the in-toto predicate before consuming the artefact in CI. Per-run CGA, index, VSA, and PR-bundle statements support optional Cosign signing today. Local-key signing is the offline path; --keyless explicitly contacts OIDC, Fulcio, and Rekor services and publishes signing evidence.

Hosted services posture

Disclosure timing

We aim to remediate high-severity issues within 30 days, medium within 90 days, low at our next scheduled release. We'll coordinate any public disclosure with the reporter. Default public-disclosure window is 90 days from initial report; we may extend on request when more time is genuinely needed.

PGP / encrypted reports

Both [email protected] and [email protected] have OpenPGP keys auto-published by Proton. Look them up via:

Once you have the key, encrypt your report with PGP and send to [email protected]. We'll decrypt and respond from the same address with the same key.

For the most current contact info, see our security.txt — it lists the encryption-key URL too.

Compliance posture

Evidence support, not certification. Roam maps to and supports evidence for the controls below; it does not certify, attest, or make a customer compliant. No current independent attestation against any of these frameworks. See the trust & compliance posture page for framework-by-framework status and roadmap candor.

Procurement-trio companions: the trust & compliance posture page covers framework status and the procurement artifact set; the privacy policy covers data processing, retention, and sub-processors; this page is the operational security companion. The DPA, NDA template, security procurement packet, and master SOW are all public at templates/legal/.

Ready to try Roam? Install the free CLI · or see paid plans