Skip to content

Pre-release · local · Rust

Code security for the agentic era.

int3 checks every file your coding agent writes, before and after the write, and hands the agent a fix in the same turn.

claude — ~/acme-api
⏺ Write(src/lib/billing.ts)
  ✕ int3 blocked this write
    secrets/stripe-live-key  critical  [pattern]
    src/lib/billing.ts:4  const key = "sk_live_…"
    A live Stripe secret key would be committed to source.
    fix: read it from process.env.STRIPE_SECRET_KEY

⏺ Agent applied the fix and retried.
⏺ Edit(src/routes/users.ts)
  ! int3 found 1 issue after the write
    ts/sql-injection  high  [dataflow]
    req.query.id  src/routes/users.ts:12
      → findUser(id)  src/db/users.ts:7
      → db.query(`… WHERE id = ${id}`)
    fix:
    - db.query(`SELECT * FROM users WHERE id = ${id}`)
    + db.query("SELECT * FROM users WHERE id = $1", [id])

> 
Illustrative output. int3 is not released yet.

// how it works

Two checks on every edit.

01 · before the write

int3 scans the proposed file in memory. It blocks only secrets and high-confidence critical findings, and tells the agent why.

patternsecrets/aws-access-key

config/deploy.py:9

An AWS access key ID and secret would be written to a tracked file. Write blocked.

- AWS_SECRET = "wJalr…"
+ AWS_SECRET = os.environ["AWS_SECRET"]

02 · after the write

int3 follows data across files and returns findings with a minimal patch into the agent's context, so it corrects itself in the same turn.

dataflowpy/path-traversal

app/views.py:21 → app/storage.py:14

request.args['name'] reaches open() through read_upload() without a path check.

- open(base / name)
+ open(safe_join(base, name))

// why

The deterministic layer under every coding agent.

Fast
Built for under 50 ms per check before a write and under 250 ms for cross-file analysis after it, from one local binary.
Clean
Few findings, each with its evidence level and a fix the agent can apply. Rules below the precision bar never reach the agent.
Unified
One engine for every language and entry point: the same finding and fingerprint before the write, after it, in CI and from the CLI.

// works with

Claude Code first. Any agent through MCP.

  • now

    Claude Code

    PreToolUse and PostToolUse hooks. One-command setup is planned.

  • planned

    Any MCP agent

    MCP server with scan_file, scan_diff and explain_finding

  • planned

    Cursor

    Native hooks, as its hook API allows

  • planned

    Codex

    Native hooks, as its hook API allows

// local-first

Nothing leaves your machine.

  • One binary on your machine. No cloud service.
  • No network calls and no telemetry with default settings.
  • Your code is never uploaded. Optional LLM steps use your own API key and stay off until you turn them on.
  • Facts about your own functions live in .int3/facts.yaml, in your repo, reviewed like code.

Try int3 before it ships.

We are looking for teams that use coding agents every day. Tell us your stack and which agent you use.