GRUBX
← grubx.io // field notes

What Did the Agent Try to Do?

When an AI agent does something it shouldn't in prod, the post-mortem question is always the same. Most teams can't answer it.

I. The question after the incident

What did it try to do, and why was it allowed or stopped?

The answer is usually scattered across SDK wrappers, vendor dashboards, and whatever the framework chose to log. Each of those sees a slice. None of them recorded the decision itself: which policy applied, and what the outcome was.

II. A record of every decision

GrubX sits in front of your agents' tool calls and writes down each decision as it is made:

Every action. The agent, the tool, the operation, which policy fired, and whether it was allowed, blocked, or held for approval.
A tamper-evident audit chain. Records are hash-chained, so you can verify them and export them.
A kill switch per agent. Effective in seconds.

III. What it looks like

This replay is from a demo run. A refund over the threshold is held for approval and released by a reviewer. Then a delete, a PII email to an outside address, and a refund over the daily limit are all blocked. Finally, one agent is killed mid-run.

SeqAgentActionDecisionPolicy
#03demo-agentstripe.refund.createwithin policyALLOW—
#04demo-agentstripe.refund.createTransaction of $100 or more needs approvalAPPROVALtransaction-limits.approval
#07demo-agentstripe.refund.createreleased by reviewer@acme.testALLOW—
#09demo-agentstripe.refund.createAgent would exceed its $500 daily transaction limitBLOCKtransaction-limits.daily
#10demo-agentcrm.delete_customerDestructive operation (delete, drop, destroy)BLOCKdestructive-actions
#13demo-agentemail.send_emailSession read personal data; external send blockedBLOCKpii-egress.session
#14demo-agentcrm.purge_inactiveDestructive operation (delete, drop, destroy)BLOCKdestructive-actions
#63ops-agentstripe.customer.retrievekill-switchBLOCKkill-switch

✓ verified · audit chain, 63 events · head c96bf3fd87372f64…

IV. The same thing, as data

Under the table is a plain JSON Lines export. One line per decision, with the policy and the reason on it. This is the record for seq 9, the refund that would have exceeded the daily limit:

{"seq": 9, "agent": "demo-agent", "upstream": "stripe",
 "operation": "refund.create", "mode": "active",
 "would": "block", "enforced": "block",
 "policies": ["transaction-limits.approval", "transaction-limits.daily"],
 "reason": "Agent would exceed its $500 daily transaction limit",
 "risks": ["large_transaction", "cumulative_limit"]}
↓ Download the full sample export (.jsonl)

It is data, not a screenshot. Your SIEM can ingest it, and a compliance reviewer can read it without needing access to GrubX.

V. Why this lands with both teams

SREs like it because there is nothing to instrument. There is no agent SDK in every microservice and no redeploy. You point the agent at a GrubX endpoint and the record starts.

Security teams get an audit trail they can hand to a compliance reviewer.

If an agent with write access caused an incident tomorrow, how long would it take you to reconstruct what happened?

// try it on your own agents

The 5-minute test runs your agents through GrubX and shows what they would have done under policy. Nothing is blocked until you decide to turn enforcement on.

Run the 5-minute test