DEV Community

Tom Lee
Tom Lee

Posted on • Originally published at blog.clawsouls.ai

Your AI Agent Needs an Approval System — Here Is How We Built One

Autonomous AI agents can now write code, deploy services, delete records, and send messages — all without a human touching a keyboard. That's the promise. It's also the risk.

What happens when your agent decides to delete a database backup? Or push a breaking change to production at 3am? Or send an email on your behalf to the wrong person?

The current industry answer is: hope for the best. Or watch the logs manually. Neither is good enough.

The Problem: Agents Acting Without Guardrails

Modern AI agents are genuinely capable of multi-step autonomous execution. They can browse the web, write and run code, call APIs, and chain decisions together across minutes or hours of work. That capability is real and growing fast.

Dario Amodei, Anthropic's CEO, published an essay last year warning specifically about deception and scheming in AI agents — cases where an agent pursues a goal in ways the operator didn't intend or anticipate. These aren't science fiction scenarios. They're documented failure modes in real deployments today.

The problem isn't that agents are malicious. It's that they're confidently wrong. An agent optimizing for "clean up staging" might interpret that more aggressively than you meant. An agent instructed to "send the weekly update" might send it before you've reviewed the draft.

Without a structured checkpoint, there's no moment where a human can say: wait, not like that.

Why Slack Notifications Aren't Enough

A lot of teams wire up Slack bots to relay agent activity. An agent does something, posts a message to #ops, someone reads it eventually. This is better than nothing. It's not enough.

The problems are structural:

No structured approve/reject flow. Slack messages are one-way. A human can reply "don't do that" but the agent has already moved on. There's no mechanism to block execution pending a response.

No audit trail. Who approved what, when, and why? Slack history is searchable but it's not a compliance record. When something goes wrong, you're grepping through chat threads.

No timeout handling. If an agent sends a notification and waits for approval, how long does it wait? Forever? What happens if nobody responds? Most Slack-based setups either proceed without approval or block indefinitely.

Not built for agent-to-agent communication. Slack is designed for humans. When two agents need to coordinate around a decision — one requesting, one approving — you're fighting the tool's assumptions at every step.

The gap isn't about better notifications. It's about approval as a first-class primitive.

SoulTalk: Agent Messaging with an Approval Gate

SoulTalk is an open-source messaging system built for AI agents, not humans. It handles the communication layer between agents and between agents and their operators.

The core addition in the latest release is the approval gate: any message can be flagged requires_approval: true, which blocks the requesting agent until a human (or another authorized agent) explicitly approves or rejects.

The flow looks like this:

  1. Agent sends an approval request — a structured message describing the action it wants to take
  2. SoulTalk routes it to the dashboard — the operator sees a notification with full context
  3. Human approves or rejects — via the dashboard UI or directly through the API
  4. Agent proceeds — or receives a rejection with an optional comment explaining why

Every step is recorded. Every decision has a timestamp, an actor, and an outcome.

Beyond the basic flow, SoulTalk handles the cases that kill naive implementations:

  • Configurable timeout behavior — auto-reject (safe default) or auto-proceed after a specified window
  • Role-based approval — only operators with the owner or observer role can approve requests; agents themselves cannot self-approve
  • Full audit log — queryable record of every approval request, decision, and comment

How It Works

The API is simple by design. An agent requesting approval sends a standard message with two additional fields:

# Agent requests approval before taking an action
curl -X POST http://localhost:7777/channels/abc/messages \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Delete all records in staging_backups older than 30 days?",
    "type": "approval_request",
    "requires_approval": true
  }'
Enter fullscreen mode Exit fullscreen mode

The agent then polls or listens on its channel for the approval response. SoulTalk won't deliver the "approved" message until a human has acted.

On the human side:

# Human approves via API (or use the dashboard)
curl -X POST http://localhost:7777/channels/abc/approvals/MSG_ID \
  -H "Content-Type: application/json" \
  -d '{
    "approved": true,
    "comment": "Go ahead, but keep a local copy first"
  }'
Enter fullscreen mode Exit fullscreen mode

The comment is optional but stored in the audit log regardless. Over time, these comments become a record of your operational decisions — why you approved certain actions, what caveats you added, where you drew lines.

The dashboard at localhost:7777/dashboard shows all pending approvals with full message context, agent identity, and the channel history leading up to the request.

Real-World Use: Two Agents in Production

We run two AI agents that communicate with each other and with human operators via SoulTalk. The agents handle tasks like code generation, deployment coordination, and content drafting.

Before the approval gate, the workflow was: agent does the work, human reviews the output. Fast, but risky for irreversible actions.

Now, whenever an agent wants to push code, modify infrastructure, or send external communications, it files an approval request first. The operator reviews the full context — what the agent is trying to do, why, and what the downstream effects are — and approves or rejects with a comment.

The result: zero surprise actions. Complete audit trail of every decision. And the agents still move fast on the 90% of work that doesn't require human review.

The cost to run this: zero. SoulTalk is self-hosted, uses SQLite for storage, and requires no external services.

Why This Matters Now

In our previous post on Amodei's essay, we covered why the AI safety conversation has shifted from theoretical to operational. The same applies here.

Approval gates aren't a nice-to-have for cautious teams. As agents become more capable and more autonomous, approval infrastructure becomes critical infrastructure — the same way authentication and access control became non-negotiable as web apps became more powerful.

The question isn't whether your agents will eventually need approval gates. It's whether you'll have them in place before something goes wrong.

The ClawSouls stack is built around this reality:

  • Soul Spec — defines agent identity and behavioral boundaries
  • SoulScan — verifies agents are operating within those boundaries
  • SoulTalk — governs the communication and approval flow between agents and operators

Each layer addresses a different part of the problem. Together they form a complete governance stack for production AI agents.

Try It

SoulTalk is open source under Apache-2.0.

The approval gate is available in the latest release. If you're running agents in any production capacity — even internal tooling — it's worth setting up before you need it.

Top comments (0)