Open beta  ·  2,000 free checks

A circuit breaker
for AI agents

One check before every action. ProceedGate detects loops, enforces budgets, and returns a signed token as proof.

POST /v1/check → 200 allowed
// request { "agent_id": "scraper-prod-1", "action": "http_request", "task_hash": "aHR0cHM6Ly9leGFtcGxlLmNvbS9wcm9kdWN0cy8x" } // response { "decision": "allow", "proceed_token": "eyJhbGciOiJFUzI1NiJ9.eyJkZWNpc2lvbiI6ImFsbG93In0...", "zone": "safe", "iteration_count": 2, "credits_remaining": 1847 }

In action

Watch a loop get stopped

Three scenarios, cycling automatically. Same agent, same URL — iteration count is the only thing that changes.

loading…
agent
POST /check
safe · ≤5
gray · 6–10
storm · >10
iter ProceedGate
0 safe gray storm 10+

How it works

Three zones. One decision.

Every check is evaluated in under 50ms at the edge. Your agent gets a signed token or a hard block — decided before the API call is made.

01

Agent calls /check

Before every action — model call, HTTP request, tool use — send the action type and a hash of what the agent is about to do.

02

Pattern is evaluated

≤ 5 repeats → auto-allow.
6–10 repeats → AI decides (Llama 3.1 8B).
> 10 repeats → hard block, 429.

03

Token or block

Allowed: a signed proceed_token (ES256, 45s TTL). Blocked: a loop_detected reason with retry-after and loop data.

The check endpoint

Designed to stay out of your way

One POST. Works with any agent framework, language, or orchestrator. If the check passes, attach the token to your downstream call as proof of governance.

If the check fails with 429, the loop is stopped before it touches your API quota.

ES256 signed TTL 45s P-256 keypair <50ms edge JWKS endpoint
loop blocked — 429
// iteration_count: 11 · zone: storm { "decision": "block", "reason": "loop_detected", "zone": "storm", "iteration_count": 11, "human_reason": "Repeated 11× in 60s. Stopping.", "retry_after": 60 }

Features

What's actually built

No vaporware. Everything below is live in the free tier today.

Loop detection

SHA-256 hash of action + task_hash + step_hash, tracked in a 60s sliding window per workspace. Three zones: safe, gray (AI), storm. Zero config.

Signed proceed tokens

Every allowed action returns a JWT signed ES256 (P-256). 45s TTL. Verify downstream at /.well-known/jwks. Cryptographic proof the action was governed.

Per-agent budgets

Credits-based hard cap per workspace. When credits hit zero, checks return 402 — the agent can't spend past the limit even if it ignores the response.

Agent reputation

Each workspace accumulates a trust score 0–100. Trusted agents get looser thresholds. Untrusted agents face tighter gates. Updates automatically from behavior.

MPP payments

Machine Payments Protocol (Stripe + Tempo). Agents pay per-check via HTTP 402 with TIP-20 tokens. All payments recorded in a CostLedger Durable Object, queryable via GET /costs/:agentId.

Webhook alerts

POST to Slack or Discord when a loop is blocked or credits fall below threshold. Configure per workspace. No polling required to know when something went wrong.

Pricing

Simple, usage-based tiers

All plans include the full API. No feature gating on loop detection or proceed tokens.

Free
$0
2,000 checks · 14-day trial

  • 2,000 checks included
  • 1 workspace
  • Loop detection
  • Proceed tokens
  • 3-day log retention
Start free →
Most common
Starter
$19
per month

  • 25k checks / month
  • 3 workspaces
  • Webhook alerts
  • Agent reputation
  • 30-day log retention
Get started →
Pro
$49
per month

  • 1M checks / month
  • 5 workspaces
  • Custom policies
  • MPP payments
  • CostLedger audit trail
  • 90-day log retention
Get started →

Integration

Three lines in your agent loop

The Node SDK wraps the check endpoint. Drop it into any framework — LangChain, CrewAI, Apify, or raw fetch.

agent.ts curl works too — see below
// One endpoint — loop detection + credits + proceed_token
curl -X POST https://governor.proceedgate.dev/v1/check \
  -H "Authorization: Bearer $PG_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id":  "my-agent",
    "task_hash": "sha256-of-task",
    "action":    "tool_call"
  }'

// Response when allowed:
{
  "allowed": true,
  "zone": "safe",
  "iteration_count": 3,
  "proceed_token": "eyJ...",
  "credits_remaining": 9950
}