open source · MIT

Your agent said
it sent the email.
It didn't.

The action layer for AI agents. Proof of what your agent actually did and didn't.

Get started →pip install cruxialcopied!
cruxial · action ledgerlive
model → "I've sent the email."
⚠ unknown · send_email claimed, never called
receipt → none · recorded unknown, not "done"
call → airtable.create_record
✓ posted · repaired "date" int → ISO 8601
call → slack.post_message
✓ posted receipt ok · <1ms overhead
vs observability

Observability shows you what ran. Cruxial catches the call that never did.

the agent reports“I sent the email.”
OBSERVABILITY
searches its logs for the run
no run recorded
looks clean
nothing fired, so nothing was logged, the miss never surfaces
CRUXIAL
checks for a receipt this turn
none, the claim has no proof
unknown · caught
any LLM
OpenAI Anthropic Azure OpenAI LiteLLM
Native adapters for the first three. LiteLLM unlocks 100+ more providers (Gemini, Mistral, Cohere, Bedrock, Groq, Together, …).
any MCP
github slack notion salesforce airtable supabase kubernetes playwright
Plug in any MCP-compliant server, public or private.
cruxial view --web · action ledger

Every action resolved from its receipt, not the model's word.

The call your agent claimed but never made slips past everything else. Cruxial gives every action one honest status: posted, unknown, needs-review, or failed.

cruxial · action ledgerlive
resolved operations
✓ postedgithub.create_issuereceipt ✓ · #4127
✓ postedairtable.create_recordrepaired "date" · int → ISO 8601
✓ postedslack.post_messagereceipt ✓ · ts 1719…
✓ postednotion.create_pagerepaired "parent_id" · int → str
⚠ unknownsend_emailno receipt · claimed, never called
✓ postedsupabase.insertreceipt ✓ · row 8842
bad-argument rate caught
17.1%
5.85%
1.4%
0%
gpt-4o · constraint-heavygpt-4o · public MCPgpt-5-minisimple-tool control
3/19
silent failures surfaced
90%
one-shot repair rate
<1ms
p99 overhead per call
the real dashboard

cruxial view --web, running locally. Every action resolves from its receipt: posted, unknown, needs-review, or failed.

0
silent passes across 342 tool calls in our test suite
Across 2 runs · Wilson 95% CI: 0–1.1%
5.85 %
bad-argument calls caught on gpt-4o
Pooled across 342 calls · 95% CI: 3.8–8.9%
0
actions marked done without a receipt
no receipt → unknown, deterministic · never the model's word
<1 ms
p99 cruxial overhead per call
300+ tests · MIT licensed · fail-open
the problem

You've shipped the integration.
It works in staging. Then production.

Three weeks later a customer tells you the email was never sent. Your logs show nothing wrong.

01 · ghost success
empty result

A blank result read as done

The tool returns null, an empty list, or a 200 with no body, and the agent treats it as success. It writes "done." Nothing happened, and nothing looks wrong.

02 · regressions
the fix loop

Every fix breaks something else

You patch the retry logic. The integration works. Two days later a different tool fails. You spend another afternoon on a problem that should be solved once, at the layer level, not per-feature.

03 · silent errors
no signal

Failures your logs will never show

The agent wrote "done" without calling the tool. No call ever went out: no error, no log entry, nothing to grep for. You find out three days later from a customer, after the damage is already done.

integration

Add it in 30 seconds.
Remove it just as fast.

One call wraps the whole tool step: execute, read the receipt, catch silent failures, log. Works with your OpenAI, Anthropic, Azure, or LiteLLM client. Nothing to configure.

before: failing silently
# your existing agent loop
for call in response.tool_calls:
  run_tool(call.name, call.arguments)

# the model says 'done'. no call fired.
# nothing runs. no error, no log.
# your user finds out last.
after: confirmed by the receipt
# one call runs the whole tool step
import cruxial

result = cruxial.run(
  client, # openai / anthropic / azure
  model="gpt-4o",
  messages=messages,
  tools=tools, # your existing defs
  executors=executors,
)
# "posted" if a receipt exists, else "unknown"
result.state("send_email")
# receipt-confirmed · silent failures caught
# executed · logged, you keep your loop
what the research shows

It's not just us saying this.

Better models raise the ceiling, not the floor. The 2026 research keeps finding the same gaps, and so does every developer who ships an agent.

27–78 %
of reported agent successes were 'corrupt': the task looked done, but a step was skipped or a confirmation fabricated.
Procedure-Aware Evaluation · arXiv:2603.03116 · 2026 →
70 %
of silent failures in a production agent were caught only by a human seeing the output. No test, health check, or audit fired.
Silent Failures in Production · arXiv:2606.14589 · 2026 →
19 %
the peak 'meltdown' rate on long-horizon tasks belongs to frontier models: the strongest ones attempt ambitious plans that spiral. Capability isn't reliability.
Beyond pass@1: Reliability Science · arXiv:2603.29231 · 2026 →
"
The hardest part of running an LLM agent in production isn't getting it to call the right tool. It's everything after: the call succeeds, returns 200, and silently does the wrong thing.
recurring sentiment across developer discussions · Hacker News · 2024–2025
deployment models

Open Core for dev.
Hosted ledger for teams.

The SDK is free and open-source. The hosted dashboard is what we manage.

cruxial core
Free
MIT licensed · Self-Hosted
  • Every action proven from its receipt
  • Validate + auto-repair bad arguments before they run
  • Fail-open, never crashes your app
  • Local SQLite telemetry + cruxial stats CLI
View GitHub Repository →
cruxial cloud
Waitlist
The action layer, fully managed
  • Everything in Cruxial Core
  • Hosted dashboard: receipts and silent failures across apps
  • Tool-registry drift detection
  • Slack, webhook, and PagerDuty alerts

We'll only email you about Cruxial Cloud. No newsletters.

faq

Questions, answered.

What is Cruxial?

Cruxial is the action layer for AI agents. It proves an agent’s tool calls actually happened. It resolves every action from a receipt instead of the model’s narration, catching the case where the model says “done” but the tool never fired or returned nothing usable. It’s open source (MIT), installed with pip install cruxial.

Can I actually trust an agent to take real actions in production?

Not on its word, and that’s the point. Cruxial doesn’t ask you to trust the model’s claim that it did something. Every action resolves from a receipt: posted when there’s proof, unknown when there isn’t. You trust the evidence, not the sentence the model wrote.

How is Cruxial different from observability tools like Langfuse or Helicone?

Observability records what ran: traces, tokens, latency. It can’t show a call that never fired, because there’s no trace to record. Cruxial checks each claim against a receipt and derives state from the receipt, so a claimed-but-absent call surfaces as unknown instead of passing silently. It complements observability rather than replacing it.

What is a silent tool failure?

A silent tool failure is when an agent reports success but nothing actually happened: the tool was never called, or it returned null or an empty result that got treated as done. No error is raised and logs look clean, so you usually find out from a customer days later.

How does Cruxial know a tool call never happened?

It logs the intended action before execution, then requires a real receipt to advance state. A claim with no receipt for that turn is a deterministic unknown and halts back to your code. It never re-asks the model whether it really did the work, because a confident model just says yes.

Which LLM providers and tools does Cruxial support?

Native adapters for OpenAI, Azure OpenAI, and Anthropic, plus LiteLLM for 100+ more providers including Gemini, Mistral, Cohere, Bedrock, and Groq. Tools connect through any MCP-compliant server, public or private, and you can define tools as Pydantic models.

Does Cruxial add latency or risk to my agent?

Overhead is negligible, and Cruxial is fail-open at runtime: if it ever errors, your tool still runs. It’s a verification layer on top, never load-bearing in the execution path.

Is Cruxial open source? Is it free?

Yes, the core is open source under MIT and free to use (pip install cruxial), including the local SQLite ledger and cruxial view dashboard. A hosted ledger for teams is the paid tier.

See what your agent can't prove
in 5 minutes.

Free forever. No credit card. Drops into your existing stack, no framework migration.

pip install cruxialcopied!