Railpane
RAILPANE ENGINE · CENTRAL AUTHORIZATION

SettleAgent

Trust and transaction infrastructure for autonomous AI agents. Every consequential action passes through identity, delegated authority, policy, approval, guarded execution, and tamper-evident receipts.

Agent → SettleAgent → Policy / Authority / Approvals → Tool / MCP / API

github.com/GregDixonMXN/settleagent · Go TypeScript Python SDK · License: BSL 1.1 → Apache 2.0 on Change Date

Railpane role

SettleAgent is the strongest starting point for the Railpane central authorization/control-plane backend: agent identity, orgs/tenancy, ALLOW / DENY / REQUIRE_APPROVAL / ALLOW_WITH_CONSTRAINTS, transaction lifecycle + idempotency, saga compensation, MCP proxying, audit trail, receipts, Postgres persistence, dashboard, OpenTelemetry. Railpane reuses it, refactors boundaries where needed, and adds workload identity, delegation, credential brokering, and signed provenance around it.

Quickstart (local)

Prereqs: Go 1.26+, Node 20+, Python 3.12. Docker optional. Postgres optional (memory store by default).

# 1. API (prints demo org, principal, one-time operator token).
# AG_DEMO_MOCKS=1 keeps the demo on mock tools.
AG_DEMO_MOCKS=1 go run ./apps/api
# store: memory (demo org <ORG> principal <PRIN>)
# operator token (dashboard/human): sto_...

# 2. Governed demo agent (new terminal)
API_URL=http://127.0.0.1:8080 ORG=<ORG> PRINCIPAL=<PRIN> \
  OPERATOR_TOKEN=<sto_...> python3 examples/simple-agent/demo.py
# -> CRM update ALLOW, $80 refund ALLOW, $300 refund approval -> approved,
#    $2000 refund DENY, 20-event audit timeline, DEMO OK

# 3. Dashboard (new terminal)
cd apps/dashboard && npm install
SETTLEAGENT_API_URL=http://127.0.0.1:8080 SETTLEAGENT_OPERATOR_TOKEN=<sto_...> npm run dev
# open http://localhost:3000 (Transactions, Approvals, Receipts, Audit)

Durable: set DATABASE_URL before starting; migrations auto-apply. Compose: docker compose up --build (dashboard :3000, Jaeger :16686).

What the demo proves

ActionOutcome
crm.lookup_customer, crm.update_recordALLOW, executed
stripe.refund $80ALLOW (support auto-limit $100)
stripe.refund $300REQUIRE_APPROVAL → human approves → executed
stripe.refund $2000DENY (above $500 prohibited), never executes
Failure after compensable stepcompensates; PARTIALLY_COMPENSATED if irreversible steps ran
Duplicate delivery (same idempotency key)returns original record, no duplicate side effect

Every request carries Authorization (agent st_… or operator sto_…); every action needs an idempotency key; every denial explains why.

Repo map

PathPurpose
apps/apiHTTP gateway (/v1, OpenAPI at /openapi.json)
apps/dashboardNext.js control plane
internal/gatewaytransaction engine (saga semantics)
internal/policiesdeterministic versioned policy engine + simulation
internal/integrationsStripe test-mode, GitHub, Postgres read-only, HTTP allowlist, MCP proxy
internal/storeMemory (dev) + Postgres (prod)
packages/sdk-pythonPython SDK

Paid tiers (upstream)

Community free (self-hosted). Pilot $500/mo (design-partner onboarding, capped cohorts). Enterprise custom (SSO, retention, SLA). See PILOT.md upstream.