The action layer for AI agents. Proof of what your agent actually did and didn't.
pip install cruxialThe 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 view --web, running locally. Every action resolves from its receipt: posted, unknown, needs-review, or failed.
Three weeks later a customer tells you the email was never sent. Your logs show nothing wrong.
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.
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.
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.
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.
# 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.
# 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
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.
The SDK is free and open-source. The hosted dashboard is what we manage.
cruxial stats CLIWe'll only email you about Cruxial Cloud. No newsletters.
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.
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.
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.
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.
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.
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.
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.
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.
Free forever. No credit card. Drops into your existing stack, no framework migration.