From 0bfcaa3b595b6d37f8c831061fefc3de3aeca9ec Mon Sep 17 00:00:00 2001
From: juanfiguera
Date: Sat, 13 Jun 2026 00:07:00 -0700
Subject: [PATCH] docs: polish README nav, dedupe quickstart, clarify
comparison table
- Trim top nav from 18 links to 8 single-row primary intents
- Make SDK Quickstarts TS example additive (constraints + rules) instead
of repeating the 60-second snippet
- Normalize comparison table "Partial" to a consistent glyph + add legend
Co-Authored-By: Claude Opus 4.8 (1M context)
---
README.md | 39 +++++++++++++++++++--------------------
1 file changed, 19 insertions(+), 20 deletions(-)
diff --git a/README.md b/README.md
index ccff9d2..bb8a310 100644
--- a/README.md
+++ b/README.md
@@ -20,21 +20,10 @@
What It Does ·
SDKs ·
Protocol ·
- Integrations ·
- Problem ·
Mode B ·
- Compatibility ·
- Delegation ·
- Demos
-
- Alternatives ·
- Ecosystem ·
- Prior Art ·
- Foundation ·
- Status ·
- Get Involved ·
- License ·
- Origin
+ Compare ·
+ Demos ·
+ Get Involved
## Try APOA in 60 Seconds
@@ -108,6 +97,8 @@ It is inspired by power of attorney: a principal grants an agent bounded authori
## SDK Quickstarts
+You already saw the core create → validate → check loop above. These quickstarts go one step further: the TypeScript example shows how hard constraints and behavioral rules ride along on the same grant, and the Python example walks the full loop in Python.
+
### TypeScript Facade
```bash
@@ -120,23 +111,29 @@ import { APOA, generateKeyPair } from '@apoa/core';
const keys = await generateKeyPair();
const apoa = new APOA({ privateKey: keys.privateKey });
+// Same grant as the quickstart, now with a hard constraint and a behavioral rule.
const token = await apoa.tokens.createGrant({
principal: "did:apoa:alex",
agent: { id: "did:apoa:docs-assistant", name: "Docs Assistant" },
service: "knowledge-base",
scopes: ["articles:search", "articles:summarize"],
+ constraints: { externalSharing: false },
+ rules: [
+ {
+ id: "no-external-sharing",
+ description: "Never share internal documents externally",
+ enforcement: "hard", // denied at check() time, matched on rule id
+ },
+ ],
expiresIn: "24h",
});
-const valid = await apoa.tokens.validate(token.raw, { publicKey: keys.publicKey });
-console.log(valid.valid); // true
-
const result = await apoa.authorizations.check(
token,
"knowledge-base",
"articles:summarize"
);
-console.log(result.authorized); // true
+console.log(result.authorized); // true — within scope, no rule violated
```
### Python Facade
@@ -346,8 +343,8 @@ The same SAFE-negotiation flow packaged as an OpenClaw skill: founder and invest
| Approach | APIs? | Browsers? | Scoped? | Revocable? | Auditable? | Delegation? | Legal? |
| --- | --- | --- | --- | --- | --- | --- | --- |
-| OAuth 2.0 | ✅ | ❌ | ✅ | ✅ | Partial | ❌ | ❌ |
-| MCP Auth | ✅ | ❌ | ✅ | ❌ | Partial | ❌ | ❌ |
+| OAuth 2.0 | ✅ | ❌ | ✅ | ✅ | 🟡 | ❌ | ❌ |
+| MCP Auth | ✅ | ❌ | ✅ | ❌ | 🟡 | ❌ | ❌ |
| ZCAP-LD | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ |
| South et al. (2025) | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ |
| `agent-passport-system` | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ |
@@ -356,6 +353,8 @@ The same SAFE-negotiation flow packaged as an OpenClaw skill: founder and invest
| 1Password Autofill | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| **APOA** | **✅** | **✅** | **✅** | **✅** | **✅** | **✅** | **✅** |
+✅ full · 🟡 partial · ❌ none. The decisive row: APOA is the only option that covers both API-based and browser-based services.
+
On the API side, the closest work is South et al.'s framework and `agent-passport-system`; APOA's distinct contribution is extending the model to browser-based services and adding explicit legal alignment. See [`docs/PRIOR_ART.md`](docs/PRIOR_ART.md) for the dated landscape.
---