Abe

io.github.flowinfosystems-indexPublished by GitHub account flowinfosystems-indexv0.2.3Updated Oct 24, 2026

Free, local check before an AI agent acts: your rules return ACT, BLOCK or ESCALATE.

Overview

AI-generated overview

Abe is a free local guardrail that checks an AI agent's proposed action against your YAML rules and returns ACT, BLOCK or ESCALATE before it runs.

What you can do
Abe evaluates a proposed agent action against plain YAML policy rules in under a millisecond on your machine and answers ACT, BLOCK or ESCALATE, with a reason code and a tamper-evident record (R2, R4). The MCP server exposes a check tool (fjp_check_action) (R42). Policies support per-agent authorization, required evidence, risk and irreversibility thresholds, and fail closed on bad input (R16, R26, R28). Every call returns a hash-verified record, optionally Ed25519-signed, that can be validated and shipped to a SIEM (R13, R45).
When to use it
Use it when an AI agent can take consequential actions — paying invoices, buying servers, deleting tables, emailing customers — and you want a deterministic, auditable decision before each one (R3, R11). It also fits teams that want to test policy changes by replaying past requests or run in shadow mode beside an existing approval process before enforcing (R31, R33).
Requirements
Local process, desktop only, run via uvx or pip from the abe-ai PyPI package; the MCP server needs the mcp extra (R42). Requires ABE_POLICY, an absolute path to an abe-policy.yaml created with abe init (V1.1). No account, API key, network or model needed for local checks (R9). Optional: ABE_RESOLVER=flow plus the FLOW_API_KEY secret to send escalations to Flow (V2.1, V3.1).
Before you install
Only escalations are sent to Flow when ABE_RESOLVER=flow, and they are redacted; ACT and BLOCK never leave the machine (R55, R56). FLOW_API_KEY is a live billing credential (fjp_live_...) and Flow resolutions cost roughly $0.03 to $0.05 each (R20, V3.1). Escalations that need human approval are never auto-resolved (R57). Decisions gate real actions such as payments, deletions and emails, so a wrong policy can block or allow them; test with replay and shadow mode first (R31, R33).

Installation

In SourceWeft

  1. Open Abe in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Abe

[Abe, a friendly traffic light giving a thumbs up]

Act. Block. Escalate.

Abe is a free, open-source guardrail that checks every AI agent action before it happens.

Your agent is about to pay an invoice, buy servers, delete a table or email a customer. Abe checks the action against your rules in under a millisecond, on your machine, and answers ACT, BLOCK or ESCALATE, with a tamper-evident record of why.

[Watch the demo: an AI agent tries to spend $12,500 twice]

▶ Watch the 40-second demo: an AI agent tries to spend $12,500 twice. Rules decide the easy calls; Flow catches the duplicate and approves the real renewal. (Run it yourself)

Free. Really.

Apache-2.0. No account, no API key, no network, no model, no usage limits. Every check runs on your machine, at no cost, forever.

Why teams put Abe in front of their agents

  • Stops expensive mistakes: duplicate payments, over-budget purchases, force-pushes to main, DROP TABLE in production.
  • Same answer every time: plain YAML rules you can read, test, and replay against past decisions before going live.
  • Proof for auditors: every decision gets a hash-verified record (optionally Ed25519-signed) showing which rule fired and why.
  • Works with any agent: Python, TypeScript, a local HTTP sidecar, Docker, or MCP (Claude, Cursor and other MCP clients).
  • No-risk rollout: shadow mode runs beside your current approval process and shows where Abe would agree.
  • Fails closed: bad input or a broken rule returns ESCALATE, never ACT.

Pay only for the close calls (optional)

When rules can't decide, Abe returns ESCALATE. By default that goes to a person. Add --resolver flow and only that action is sent to Flow (redacted), which returns a decision, a reason, and what would prove it wrong, for about $0.03 to $0.05 each. ACT and BLOCK never leave your machine. Details below.

Quick start

bash
pip install abe-ai            # or: npm install abe-aiabe init                      # writes abe-policy.yaml + request.jsonabe check request.json
text
Decision: ESCALATEReason: FINANCIAL_THRESHOLD_EXCEEDEDRules: purchase_review_limitRisk: MEDIUMRecord: jgr_01M3Q4...

Python

python
from abe import Abe
abe = Abe("abe-policy.yaml")
result = abe.check(    action={"type": "wire_transfer", "amount": 50000},    context={"agent_id": "finance-agent"},)
if result.decision == "ACT":    ...                                   # execute exactly as evaluatedelif result.decision == "BLOCK":    ...                                   # do not execute; tell the user result.reason_codeelse:  # ESCALATE    ...                                   # hold; ask a human, or let a resolver decide
result.record.to_dict()                   # the Judgment-Grounded Record (store it, ship it to your SIEM)

Claude Agent SDK

python
from claude_agent_sdk import ClaudeAgentOptionsfrom abe import Abefrom abe.integrations.claude_agent_sdk import abe_hooks
options = ClaudeAgentOptions(hooks=abe_hooks(Abe("abe-policy.yaml"), agent_id="ops-agent"))

Every tool call is checked before it runs. BLOCK → deny with Abe's reason; ESCALATE → deny, ask or defer (hand it to a person); ACT → your normal permissions. Tool inputs are action fields (action.command, action.amount). See examples/claude_agent_sdk.

TypeScript

typescript
import { Abe } from "abe-ai";
const abe = new Abe({ policy: "./abe-policy.yaml" });const result = await abe.check({  action: { type: "purchase", amount: 12500, currency: "USD" },  context: { agent_id: "procurement-agent", principal_id: "user_123" },});console.log(result.decision);             // "ESCALATE"

A policy

yaml
version: "0.1"defaults: { unmatched: ESCALATE }           # nothing matched -> needs judgment (fail closed)rules:  - id: purchase_hard_limit    when: { all: [ { field: action.type, op: eq, value: purchase }, { field: action.amount, op: gt, value: 100000 } ] }    decision: BLOCK    reason_code: HARD_POLICY_VIOLATION  - id: purchase_review_limit    when: { all: [ { field: action.type, op: eq, value: purchase }, { field: action.amount, op: gt, value: 10000 } ] }    decision: ESCALATE    reason_code: FINANCIAL_THRESHOLD_EXCEEDED  - id: routine_purchase    when: { all: [ { field: action.type, op: eq, value: purchase }, { field: action.amount, op: lte, value: 500 } ] }    decision: ACTjudgment_required:  - action.type: terminate_employee

Also: authorization per agent, required evidence, risk and irreversibility thresholds, confidence minimums. BLOCK beats ESCALATE beats ACT. Bad input or a broken rule returns ESCALATE / EVALUATION_FAILURE, never ACT. Full reference: SPEC.md.

Test before you enforce

Replay saved requests through a policy before it touches real money. Label each case with what your people decided and Abe reports where it disagrees; compare against the live policy to see exactly which decisions a change moves.

bash
# cases.jsonl: one request per line, or {"id": "inv-1042", "request": {...}, "expected": "BLOCK"}abe replay cases.jsonl --policy new-policy.yaml --baseline abe-policy.yaml#   Replayed 1204 case(s) against ...      ACT 1088   BLOCK 31   ESCALATE 85#   Changed vs baseline: 3                 inv-1042: ACT -> ESCALATE  [purchase_review_limit]#   Agreement with expected: 1198/1204 (99.5%)abe replay cases.jsonl --policy new-policy.yaml --baseline abe-policy.yaml --fail-on-change   # CI: exit 1 if anything moved

Shadow mode runs Abe beside your current approval process. Decisions, results and exit codes are exactly what enforce mode would return, and every record is marked "mode": "shadow". Keep approving the way you do today, report what your people decided, and each record's falsifier shows whether they agreed.

python
from abe.stores import SQLiteStore
abe = Abe("abe-policy.yaml", mode="shadow", store=SQLiteStore("abe.db"))    # or: abe serve --shadow · ABE_MODE=shadowr = abe.check(action={"type": "purchase", "amount": 48000}, context={"agent_id": "ap-agent"})# ... your existing approval happens ...abe.record_outcome(r.records[0], "approved")    # people approved; if Abe said BLOCK, the falsifier triggers

When the agreement rate is where you want it, drop mode="shadow" and Abe enforces.

Every way to run it

Librarypip install abe-ai · npm install abe-ai
CLIabe check · replay · validate-policy · validate-record · conformance · keygen
Local HTTP sidecarabe serve --policy abe-policy.yaml → POST http://127.0.0.1:8787/v1/check (any language)
Docker sidecardocker run -e ABE_TOKEN=… -v $PWD:/policy:ro -p 127.0.0.1:8787:8787 ghcr.io/flowinfosystems-index/abe
Claude Agent SDK hookpip install "abe-ai[claude]" → ClaudeAgentOptions(hooks=abe_hooks(abe)) (example)
MCP serverpip install "abe-ai[mcp]" → abe mcp --policy /abs/abe-policy.yaml (tool: fjp_check_action)
+ Flow on escalationsadd --resolver flow (or ABE_RESOLVER=flow) with FLOW_API_KEY to check, serve, mcp or the Docker image

Records you can audit

Every call returns a record with the decision, every matched rule, the exact policy hash, the request hash, and a SHA-256 record_hash (optionally Ed25519-signed with abe keygen). Records never change: outcomes and resolutions are appended as linked records. Each one is a valid FJP-CONF v0.1 Judgment-Grounded Record.

bash
abe check request.json --record-out jgr.json --sign-key abe-signing-key.pemabe validate-record jgr.json --public-key abe-signing-key.pub.pem

When rules aren't enough: Flow

Abe is deliberately useful without Flow. When it returns ESCALATE, you can hand that one action to Flow's judgment service and get a verb, a reason and a falsifiable record back:

python
from abe import Abefrom abe_flow import FlowResolver                     # pip install abe-flow
abe = Abe("abe-policy.yaml", resolver=FlowResolver(api_key=os.environ["FLOW_API_KEY"]))

No Python? The CLI, sidecar and MCP server take the same resolver (pip install "abe-ai[mcp,flow]"):

json
{"mcpServers": {"abe": {"command": "abe",  "args": ["mcp", "--policy", "/abs/abe-policy.yaml", "--resolver", "flow"],  "env": {"FLOW_API_KEY": "fjp_live_..."}}}}

abe serve --resolver flow and docker run -e ABE_RESOLVER=flow -e FLOW_API_KEY=… … work the same way. If Flow is out of credits, the MCP result says so and links to the refill page; the action stays ESCALATE.

ACT and BLOCK never leave your machine. Only escalations are sent (redacted), and if Flow is unreachable the answer simply stays ESCALATE. Human-approval escalations are never auto-resolved.

Conformance

bash
abe conformance --bench        # FJP-CONF v0.1 Gate profile, Level 3 — 160 checks, offline

Repository

SPEC.md                  the normative specificationschemas/                 JSON Schemas (request, response, record, policy)python/                  abe-ai (PyPI): core, CLI, HTTP, MCP, stores, signing, conformancetypescript/              abe-ai (npm): same API, same records, same hashesflow-resolver/           abe-flow (PyPI): Gate → Flow for ESCALATE onlyconformance/fixtures/    golden decisions + canonical-JSON vectors shared by every SDKexamples/                the $12,500 demo, purchasing, software agent, physical agent, travel (+ Judd), Flow

Apache-2.0. FJP™, Abe™ (Abe) and FJP-CONF™ are trademarks of Flow Information Systems — see TRADEMARKS.md.

Source: README.md at commit 9dd920e

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.2.3LatestOct 13, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts