Agents get the work done. They never get the keys.

Pyloros is the governed front door between AI agents and your company's systems.

Ledger · agent:pricer-7for user:alice
seqcalldecisionprevhash
21fx.quoteallow9c41…e07a3b8d…41f2
22fx.tradeapproval3b8d…41f2e5a0…9c13
23fx.tradeallowe5a0…9c1371fe…0b6d
24ledger.readdeny71fe…0b6dc2d9…a58e

Sealed through seq 24. A signed checkpoint fixes the ledger in write-once storage.

Illustrative records. Hashes are shortened.

Why Pyloros

Three proofs in every call.

Self-hosted. Your credentials and records never leave your infrastructure.

The approval releases the credential.

Credentials live in Pyloros's vault (OpenBao). Pyloros uses one only for an allowed or approved call. Agents, logs and records never see it.

Every approval is a signature.

A named person signs the exact call with a passkey: Touch ID, Windows Hello or a security key.

Your auditor checks the evidence without us.

Hash-linked records, signed checkpoints, independent timestamps and an offline verifier.

How it works

One front door. Five steps. Every call.

  1. Identify

    A signed token names the agent and the person it acts for.

  2. Decide

    Cedar policy by group, agent and tool returns Allow, Ask or Deny.

  3. Approve

    Ask waits for a passkey signature from someone else. One call, once.

  4. Record

    If it can't be recorded, it doesn't run.

  5. Forward

    Pyloros adds the credential and sends the call on, over MCP or A2A.

Evidence

The record proves itself.

Even a database admin can't rewrite it.

The ledger as writtenexit 0
$ pyloros-verify --checkpoints checkpoints.jsonl \
    --pubkey checkpoint.pub records.jsonl
checkpoints: 25 verified, last #25 at 2026-10-03T10:38:05Z
chain agent:treasury-assistant: 24 records
sealed through seq 24 (checkpoint 25)
chain agent:treasury-assistant: OK

OK. Every record matches its chain and its signed checkpoint.

After an admin rewrote historyexit 1
# record 16 edited, every hash recomputed
$ pyloros-verify --checkpoints checkpoints.jsonl \
    --pubkey checkpoint.pub records.jsonl
FAIL chain agent:pricer-7: sealed history rewritten: seq 16 differs from checkpoint 3 (the change is within seq 15..16)
pyloros-verify exit code: 1

FAIL. The chain looks consistent, but it no longer matches the signed checkpoint. The verifier also names where the change is.

Why recomputing hashes fails: the checkpoints are signed with a key the database doesn't hold, in storage nobody can rewrite.

Human oversight

A person signs inside the call, not after it.

  • Held, not lostThe call waits up to 60 seconds. The agent hears "approval pending" and retries. Once approved, the same call goes through.
  • The right peoplePolicy names the approver group. Approvers sign in through your identity provider.
  • Nothing leaksA signed webhook notifies the group. It never carries the request's content.
Approval consoleIllustrative
fx.trade is waitingfx-desk-heads
Agent
agent:pricer-7
For
user:alice
Arguments
pair EUR/USD · notional 2,500,000
Rule
notional ≥ 1,000,000 needs a desk head
Held 18 of 60 s
You can't approve this: you're user:alice.
Single use · applies to this call only

Console

One console for the people who answer for agents.

Roadmap: an audit search screen.

Desktop app

The server is the product. The desktop app covers the edge.

Who it's for

Teams that answer for what their agents do.

Pharma and life sciences

Agents do the work. A named person signs.

Agent output is reviewed and signed by a named person, as the FDA's April 2026 warning letter (320-26-58) requires of the quality unit. Every signature lands in an audit trail your inspector checks offline.

Built for 21 CFR Part 11, EU Annex 11 and draft Annex 22.

Financial services

Agents prepare. A second person approves.

Maker-checker for agents. Trades, payments and limit changes wait for a second signature, and every call leaves books-and-records evidence.

Built for FINRA 3110, SEC 17a-4, DORA, SR 11-7 and EU AI Act Articles 12 and 14.

Also built for

  • Self-driving labsAgents run the experiments. Scientists sign for them.Runs, reagent orders, LIMS and notebook records.
  • Factories with AI agentsAgents propose the change. QA signs it.Supervisory layer only, never inside a control or safety loop.
  • Teams changing productionAgents change production. Someone answers for it.Kubernetes, databases, cloud.
  • Public sector and defenceAgents assist the mission. A named officer signs.Non-kinetic only; never part of targeting or weapons systems.

Control mappings are indicative and not legal advice. You validate the system for your own use.

For engineers

Connect an agent in two lines

Each company system gets its own endpoint. Point the agent at it with a token that names the person and the agent. No SDK, no plugin.

mcp.jsonthe whole change
 {"mcpServers": {"tools": {
   "type": "http",
-  "url": "https://tools.internal/mcp"
+  "url": "https://pyloros.internal/mcp/tools",
+  "headers": {"Authorization": "Bearer <delegation token>"}
 }}}
More client examples and agent replies
Claude Code
# pyloros.json
{"mcpServers":{"tools":{"type":"http","url":"https://pyloros.internal/mcp/tools",
  "headers":{"Authorization":"Bearer <token>"}}}}

$ claude --mcp-config pyloros.json --strict-mcp-config
Claude Desktop / Inspector
# Same URL, same header.
url:     https://pyloros.internal/mcp/tools
header:  Authorization: Bearer <token>

# The demo bundle sets Claude Desktop up for you:
$ make claude-desktop
Python
# The official MCP Python SDK (2.x), Streamable HTTP client
# Requires Python 3.10+ and `pip install mcp`.
import httpx2
from mcp import ClientSession
from mcp.client.streamable_http import streamable_http_client

headers = {"Authorization": f"Bearer {token}"}
async with httpx2.AsyncClient(headers=headers) as http:
    async with streamable_http_client(
        "https://pyloros.internal/mcp/tools", http_client=http
    ) as (read, write, *_):
        async with ClientSession(read, write) as session:
            await session.initialize()
            await session.call_tool("get-sum", {"a": 2, "b": 3})
curl
# Raw JSON-RPC, for the skeptical engineer
$ curl -s https://pyloros.internal/mcp/tools \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"get-sum","arguments":{"a":2,"b":3}}}'

What your agent sees

Allowed

The tool's normal result, unchanged. It was recorded in the ledger before it was forwarded.

Denied by policy

{"code": -32003,
 "message": "denied by policy",
 "data": {"reason": "no_permit", …}}

A standard JSON-RPC error.

Needs a person

{"code": -32004,
 "message": "approval pending",
 "data": {"approval_id": "apr_…",
          "console_url": "…",
          "expires_at": "…"}}

The agent retries the same call, and it goes through once someone approves it.

The token names the person and the agent (user:alice → agent:pricer-7). In a company deployment, your identity provider issues it.1

Agent to agent? Call https://pyloros.internal/a2a/<agent> instead of the agent.

1 In the demo bundle, make token creates one.

ProtocolsMCP over Streamable HTTP. A2A v1.0, plus v0.3 method names. Pinned Agent Cards.
IdentitySigned JWTs with RFC 8693 delegation chains.
PolicyCedar, deny by default, in an isolated engine. If it crashes, the gateway stays up.
StackElixir/OTP, Cedar, Go, PostgreSQL, OpenBao.
Try itA Docker demo bundle runs the whole flow on a laptop. It is available to design partners. Request it →

Roadmap

Running today, and where we're going.

NowRunning today

Product

  • Policy by company group
  • Passkey four-eyes approvals
  • Credentials per approved call
  • Offline-verifiable evidence
  • Audit packs
  • Desktop edge app with managed laptops

Integrations

  • Any MCP or A2A agent
  • OpenBao
  • S3 Object Lock
  • RFC 3161 timestamps
  • Company SSO

Assurance

  • Tamper-evident ledger
  • Offline verifier
  • Mapped to Part 11, Annex 11
  • Mapped to EU AI Act, DORA, SR 11-7

Where we're going

  • Credentials that expireShort-lived access, issued per approved call.
  • Connectors to regulated systemsQuality, lab, payment and record systems.
  • Stricter approval controlsTighter rules on who and what can sign.
  • Independent assuranceExpert opinions, a validation kit for regulated customers, security audits.

Direction, not a commitment. Customers validate Pyloros for their own use.

Design partners and pilots

See it on your own agent calls.

We work with a small number of design partners. In a demo, an agent call is held for approval, recorded, then checked by the verifier, tamper case included.

Write to us and we will set up a demo on your own agent calls.

Email hello@arxytas.com