Open source · Plumbline

Catch AI failures before they reach production.

Plumbline is an open-source analyzer for LLM and agentic code. It finds the defects that make agents fall over — unbounded loops, calls with no timeout, model output reaching a shell — before a single line ships. Trust starts before production.

Open source · Apache-2.0 32 rules of a published 61-rule taxonomy No telemetry SARIF · CI-native
Example output
$ pip install actaclad-plumbline
$ plumb scan ./agent

PLB-AGT-001 · Blocker · agent/loop.py:42
Agent loop without max-iteration limit.

PLB-RES-001 · High · agent/llm.py:18
LLM/tool call without timeout.

PLB-SEC-003 · Medium · tools/exec.py:7
LLM output passed to a shell command.

3 findings · scan completed in 1.2s
Not a style linter

A reliability analyzer that reasons about what your code actually does.

Plumbline uses taint and dataflow analysis to reason about real properties of LLM and agentic code — not formatting, not naming. The defects that break agents in production are structural, and they're written long before deployment.

Deterministic

Same code, same findings, every run. No flakiness, no model calls in the analysis path, no surprises — safe to gate a build on.

Private by default

Offline by default and no telemetry — nothing leaves your machine. The one exception is opt-in AI enrichment, which you turn on yourself.

Standards-native

Emits SARIF for GitHub code scanning and your IDE, JSON for tooling, and ships a pre-commit hook.

What it catches

The defects that don't show up until an agent is live.

The bugs that survive testing and surface only under real traffic — the ones a code review misses because they're about behaviour, not syntax.

PLB-AGT
Unbounded agent loops

A loop with no iteration cap or exit condition — the runaway cost and latency risk.

PLB-RES
Missing timeouts and retries

A call with no timeout, or retries turned off — the agent stalls when the provider does.

PLB-SEC
Model output reaching a shell

Generated output passed to a shell, eval, or a SQL query.

PLB-MDL
Deprecated and unpinned models

A sunset model identifier, or a version nothing pins — behaviour drifts and nobody notices.

Where it runs

A quality gate for AI code, in the pipeline you already run.

Plumbline lives on the left of the lifecycle — design-time. AgentGuard picks it up on the right — runtime. Together they cover the whole path.

01
IDE

Run plumb scan locally before you commit.

02
Pre-commit

The ships-with hook scans every change automatically.

03
CI/CD

A quality gate the build can fail on — deterministic, so it's fair.

04
Code scanning

SARIF findings surface right in GitHub, next to your other checks.

Plumbline guards the code before it gets there. AgentGuard guards it once it's live.

Open by design

Read the rules. Run the scan. Trust nothing you can't inspect.

Plumbline is Apache-2.0 and public — because you shouldn't have to trust a black box to tell you your AI is sound. Install it in a minute; gate your next build on it.

pip install actaclad-plumbline · plumb scan

ACTACLAD · The craft of intelligence