Metadata-Version: 2.4
Name: holdmyagent
Version: 0.5.0
Summary: Self-hosted, fail-closed approval server for AI agents (Arbiter)
License: MIT
Project-URL: Homepage, https://holdmyagent.com
Project-URL: Repository, https://github.com/holdmyagent/arbiter
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: fastapi>=0.115
Requires-Dist: uvicorn[standard]>=0.32
Requires-Dist: httpx[http2]>=0.27
Requires-Dist: pyjwt[crypto]>=2.9
Requires-Dist: pydantic>=2.9
Requires-Dist: segno>=1.6
Requires-Dist: jinja2>=3.1
Requires-Dist: itsdangerous>=2.2
Requires-Dist: python-multipart>=0.0.9
Requires-Dist: tomlkit>=0.12
Requires-Dist: click>=8.1
Provides-Extra: dev
Requires-Dist: pytest>=8.3; extra == "dev"
Requires-Dist: pytest-asyncio>=0.24; extra == "dev"
Requires-Dist: ruff>=0.6; extra == "dev"

# Hold My Agent — Arbiter

Self-hosted, fail-closed approval server for AI agents. Before your agent
does something irreversible, it asks a human — Arbiter holds the request,
pushes an alert to your phone (APNs, ntfy, or a webhook), and waits for a
real decision. If the server is unreachable or the request times out, the
answer defaults to **no**.

```bash
pip install holdmyagent
hma init
hma serve
```

## Roles & capabilities

Four kinds of caller talk to the API, each scoped to a different slice:

| Role | Can do |
|---|---|
| `agent` | Create requests; read its own requests and verdicts. |
| `warden` | Everything `agent` can, plus send `canonical_action`/`action_hash` at create and consume an approved verdict (single-use, any warden identity). |
| `app` | List and decide all requests, manage devices, read notify policy, open the live stream, export the audit log. |
| admin session | View-only dashboard, plus audit export. |

Full capability matrix (exact routes and status codes):
[`docs/api.md`](../docs/api.md#authentication-and-roles).

- Homepage: https://holdmyagent.com
- Source / issues: https://github.com/holdmyagent/arbiter
