Adeia

Agents that act inside a fence

Policy check

$0.00 Executed

Distance from the centre is the amount requested. The per-action limit is $50.00; the hard ceiling is $1,000.00.

Capability

Four parts. Each does one thing.

Hover a band, or tab through them

It takes an action request and the day's spend and hands back one of three words — allow, hold, deny — with the figure that produced it. It reads no clock, no database and no network, so every rule in it can be tested on its own.

pure function · no i/o

Approach

How an action moves

  1. Request

    The agent calls requestAction with a type, an amount and a recipient. Nothing has moved yet — the call asks for permission, it does not give an instruction.

  2. Evaluate

    The policy engine measures the amount against the $50.00 per-action limit, the $2,000.00 daily cap and the recipient allowlist. It returns a single decision together with the reason that produced it.

  3. Settle

    In bounds it executes at once and the result is recorded. Over the limit it holds for a human; past the $1,000.00 ceiling it is denied, and no approval can move it.

The shape of it

A fence is three decisions.

  1. A plain metal railing running along the top of a blank concrete wall.

    $50.00

    Per action

    The most one request may spend on its own. Over it, nothing happens until a person says so.

  2. A single hard diagonal shadow falling across a flat grey concrete surface.

    $1,000.00

    Hard ceiling

    The one line nobody moves. Past it the action is refused outright — no email is sent, and there is no button that lets a tired human wave it through.

  3. A concrete passage lit from one end, the light falling in a hard band across the floor.

    $2,000.00

    Daily cap

    The running total for the day, counted per currency. Inside all three, an action executes immediately and nobody is asked anything.

Proof — live ledger

Two payments clear. The third waits for a person.

READ THE QUICKSTART

Action ledger · project demo

  • Per action $50.00
  • Daily cap $2,000.00
  • Spent today $0.00

    Waiting for the agent's first request.

    • $25.00 inside the fence, runs
    • $500.00 over the limit, stops
    • $5,000.00 past the ceiling, refused

    Policy — the fence

    Four numbers, set once.

    • $50.00

      Per-action limit

      Over it, the action stops and a person decides.

    • $2,000.00

      Daily cap

      The running total for the day, counted per currency.

    • $1,000.00

      Hard ceiling

      The most any single action may ask for. No exceptions.

    • optional

      Recipient allowlist

      Leave it unset and every recipient is in scope.

    A denial is not an error. The request was well formed and the call succeeded; the answer was no. Adeia returns that answer with the figure that produced it — amount 500000 exceeds hard maximum 100000 — so your agent can read the reason, say it out loud to whoever asked, and stop, instead of retrying a call that will never pass. The hard ceiling is the one line nobody gets to move: past it the action is refused outright, no approval request is sent, and there is no button anywhere that lets a tired human wave it through.

    Quickstart

    Three commands, then your agent asks.

    Adeia is open source and self-hosted. You run the server, it holds your policy and your audit log, and nothing leaves your machine unless you send it there.

    1. 01

      git clone https://github.com/NayanVangala/adeia.git
      cd adeia && npm install

      Node 22 or newer.

    2. 02

      npm run seed

      Creates a project, a policy, and an API key. The key is printed once and stored only as a hash — copy it when you see it.

    3. 03

      npm run dev

      Refuses to start without somewhere to send approval mail, so an over-limit action can never pause with nobody told.

    Then, from your agent

    const action = await adeia.requestAction({
      type: "payment",
      params: {
        amountCents: 50_000,
        currency: "usd",
        recipient: "acct_contractor",
      },
    });
    
    // "executed" | "pending_approval" | "denied"
    if (action.status === "pending_approval") {
      const settled = await adeia.waitForAction(action.id);
    }

    Under the per-action limit it has already run by the time this resolves. Over it, a human has been emailed and waitForAction blocks until they decide.

    FULL QUICKSTART

    Start here

    Give your agent hands

    Adeia is developer infrastructure for teams shipping agents — spend limits, a human approval step and an append-only audit trail, so the guardrails are not yours to build. It is open source and self-hosted: clone it, seed a project, point your agent at it.

    READ THE SOURCE