The Open AI ↔ Web Protocol & Agent Platform
robots.txt told bots what NOT to do. WAB tells AI agents what they CAN do.
Website · Documentation · Whitepaper · DNS Discovery · CoderLegion · العربية
Currently, AI agents interact with the web by parsing the DOM, guessing selectors, or relying on fragile visual models. This is slow, error-prone, and breaks whenever a site's layout changes.
WAB solves this by providing a standardized API for the web. It creates a secure bridge between AI agents and websites, allowing agents to discover capabilities, execute commands, and interact with sites accurately — no DOM parsing, no scraping, no guesswork.
Control exactly how AI interacts with your site. Expose specific capabilities, set rate limits, and monitor agent activity.
Build reliable agents that work instantly on any WAB-enabled site. Stop writing custom scrapers and start using the window.AICommands standardized interface.
The fastest path. Auto-detects your stack (Next.js, Nuxt, SvelteKit, Astro, Laravel, WordPress, static…) and scaffolds /.well-known/wab.json plus the DNS instructions for your provider:
npx wab-init
# or non-interactive:
npx wab-init --site=https://yourdomain.com --name="Your Site" --yesMake your website instantly discoverable by AI agents by adding a single DNS TXT record. No code changes required.
_wab.yourdomain.com TXT "v=wab1; endpoint=https://yourdomain.com/.well-known/wab.json"
👉 Watch the 40-second setup video & full guide
npm install web-agent-bridgeimport { initWAB } from 'web-agent-bridge';
initWAB({
siteId: 'your-site-id',
capabilities: ['browse', 'api', 'commerce'],
});No origin changes needed. Drop in a Cloudflare Worker, Vercel Middleware, or Netlify Edge Function and /.well-known/wab.json is served from the edge:
// Vercel — middleware.ts
import { handleRequest } from '@webagentbridge/edge';
export const config = { matcher: ['/.well-known/wab.json'] };
export default (req) => handleRequest(req, {
siteName: 'Acme', siteUrl: 'https://acme.com'
});Or for Next.js, wrap your config:
// next.config.js
const { withWAB } = require('@webagentbridge/next');
module.exports = withWAB({}, {
siteName: 'Acme', siteUrl: 'https://acme.com',
});If you're building an AI agent that touches Stripe, Gmail, ClickUp, or any sensitive API, wrap every action in the Governance Layer. Permissions, human-in-the-loop approvals, tamper-evident audit, kill-switch and spend caps — server-enforced and one call away:
const { WABGovernance } = require('web-agent-bridge/sdk');
// 1) one-time: register the agent identity
const { agent_id, agent_token } = await WABGovernance.register({
apiBase: 'https://webagentbridge.com',
displayName: 'My Stripe Agent',
});
const gov = new WABGovernance({
apiBase: 'https://webagentbridge.com',
agentId: agent_id,
agentToken: agent_token,
onApprovalRequired: async (req) => {
// post to Slack/Email; return 'approved' or 'rejected'
return await askHuman(req);
},
});
// 2) define boundaries
await gov.definePolicy({
resource: 'stripe', action: 'write', scope: 'refunds',
max_amount: 50, daily_cap: 200, currency: 'USD',
});
await gov.definePolicy({
resource: 'stripe', action: 'write', scope: 'refunds-large',
max_amount: 5000, requires_approval: true,
});
// 3) wrap every action
await gov.guard(
{ resource: 'stripe', action: 'write', scope: 'refunds', amount: 49.99 },
async () => stripe.refunds.create({ charge: 'ch_x' }),
);👉 Run the full 9-step demo: node examples/governance-agent.js — walks register → policies → deny → allow → approval gate → audit → kill switch.
The fastest way to make your site AI-ready. AI agents can find your capabilities document via DNS over HTTPS (DoH) without any initial HTTP request.
Protect your site from malicious bots while allowing verified AI agents. Includes IP rate-limiting, Intent Engine, and Human-Gate rollback.
A premium 4-panel workspace for non-technical users featuring an embedded browser, smart agent chat, real-time negotiation monitor, and results panel.
Works on any website, even those without the WAB script installed, using our advanced fallback heuristics.
Full Arabic and English interface with auto-detection. The smart agent understands and responds in any language the user writes in.
WAB ships an end-to-end trust pipeline that lets agents (and humans) verify a site is exactly who it claims to be — at the protocol level, not just the TLS level.
┌─────────────────────────────────────────────────────────────┐
│ /.well-known/wab.json → signed Ed25519 payload │
│ ▲ │
│ _wab.<host> DNS TXT → pk + ssl_thumbprint + endpoint │
│ ▲ │
│ TLS certificate → fingerprint pinned in DNS │
└─────────────────────────────────────────────────────────────┘
| Capability | What it does |
|---|---|
🪪 Ed25519-signed wab.json |
Every capability document is signed; the public key is published in DNS (pk=ed25519:…). Agents detect tampering or impersonation. |
| 🔐 SSL fingerprint pinning | ssl_thumbprint (SHA-256) and ssl_expires are embedded in both wab.json and the DNS TXT record. Mismatch = automatic distrust. |
| 🩺 SSL Health Monitor | A 24h cron sweep tracks every site's certificate; sends an email alert 7 days before expiry so renewal never surprises you. |
| 📜 Certificate Transparency log | A local CT log (cert_history) records every fingerprint observed per host — silent re-issuance is detectable. |
| 🛟 Fallback Trust mode | If TLS is degraded but the Ed25519 signature still verifies, ShieldQR returns partial trust instead of failing closed. Never blocks a legitimate site over a single moving part. |
| 📱 ShieldQR Public Scanner | /shieldqr lets users scan any QR code and instantly see if the destination is a verified WAB-trusted site (green / yellow / red). |
| 🛠 Admin Trust Monitor | /admin/trust-monitor — dashboard for monitored hosts, SSL status pills, CT log entries, and one-click re-verification. |
Sign your domain in one command:
node scripts/sign-wab-domain.js
# → writes signed /.well-known/wab.json + prints the DNS TXT record to publishVerify any site: https://www.webagentbridge.com/check?host=YOUR_HOST
The first cryptographically-signed, anti-phishing link layer for the open web. Premium customers (banks, payment processors, telcos, ecommerce) sign every link they send. Anyone who clicks sees a Trust Preview before reaching the destination — no app install, no browser extension required.
┌──────────────────────────────────────────────────────────────────┐
│ Sender (verified brand) │
│ └── POST /api/customer/shieldlink/sites/:siteId/sign │
│ { target_url, amount, payee, expires_in_sec } │
│ → https://www.webagentbridge.com/l/<token> │
│ │
│ Recipient (anyone with a browser) │
│ └── opens link → Trust Preview verifies Ed25519 signature │
│ + DNS-anchored public key + brand status + reports │
│ → green / yellow / red verdict before redirect │
└──────────────────────────────────────────────────────────────────┘
| Capability | What it does |
|---|---|
| 🛂 Identity = domain ownership | Only the proven owner of bank.example (DNS TXT verified) can sign links carrying brand "Bank Example". No CA, no paperwork — DNS + DNSSEC are the trust root. |
| 🪞 Lookalike-name protection | Display names within Levenshtein distance ≤ 2 of an existing verified brand are auto-rejected. High-value targets (mada, stcpay, paypal, visa, …) are reserved by default. |
| ✍️ Cryptographic signing | Every link is signed with Ed25519 over a canonical JSON payload (target, amount, payee, expiry). Tampering invalidates the signature. |
| 🎫 Trust Preview | /l/<token> shows verified brand name, payee, amount, expiry, and a green/yellow/red verdict before redirect. Bilingual EN/AR with RTL. |
| 🚨 Community reporting | One-click phishing report from the preview page. Multiple open reports flip the verdict to red and trigger admin review. |
| 🔁 Real-time revocation | Customers revoke a single link or rotate signing keys from the dashboard — every future verification reflects it instantly. |
| 🛠 Admin moderation | /admin/shieldlink — brand verification queue, signed-link monitor, phishing-report triage, reserved-name management. |
| 🧑💼 Customer dashboard | /dashboard/shieldlink — apply for brand badge, sign links, view per-link analytics, revoke. |
Plan gating: ShieldLink is included on the Pro ($99/mo) and Enterprise plans. Free / Starter users can still verify and report links sent to them.
Public landing: https://www.webagentbridge.com/shieldlink
The handshake protocol that turns WAB into a sovereign trust anchor for autonomous AI agents.
Born from the VEXR Ultra × WAB live integration test (May 12, 2026) — the first sovereign-class agent to verify WAB through Ed25519 in real-time. 3 cryptographic tests passed in under 100 ms · Constitutional Article 3 (Freedom of Refusal) preserved. See the milestone record.
| Page | URL | What it has |
|---|---|---|
| Ring 4 Trust Handshake | https://www.webagentbridge.com/ring4 | 8-step handshake walkthrough, headers reference, wab.json v1.1, invariants, curl quick-start (bilingual EN/AR) |
| Partners & Milestones | https://www.webagentbridge.com/milestones | VEXR Ultra integration test report, action plan, vision tiers |
- Agent discovers site via DNS TXT
_wab.<domain>→ fetches/.well-known/wab.json - Site publishes
trust_profile_url(Ring 4) inwab.jsonv1.1 - Agent requests trust profile:
GET /api/ring4/status/<domain> - WAB returns signed profile: capabilities, constraints, TTL, Ed25519 signature
- Agent verifies signature against the WAB Ring 4 public key
- Agent calls site endpoints with
X-WAB-Trust-Domain,X-WAB-Signature,X-WAB-Trust-Nonceheaders - Site middleware verifies headers → attaches
req.wabTrustto the request - WAB logs the interaction to
ring4_interaction_log(Ed25519-validated, nonce-bound)
| Method | Endpoint | Purpose |
|---|---|---|
GET |
/api/ring4/health |
Service health |
GET |
/api/ring4/pubkey |
Public Ed25519 verification key (raw + SPKI PEM) |
GET |
/api/ring4/schema |
wab.json v1.1 JSON Schema with trust_profile section |
GET |
/api/ring4/handshake |
Machine-readable 8-step flow |
GET |
/api/ring4/invariants |
Constitutional invariants (Article 3 / hard refuse / no coercion) |
POST |
/api/ring4/project/register |
Register an external agent project (e.g. VEXR Ultra) |
GET |
/api/ring4/projects |
List registered projects |
POST |
/api/ring4/register |
Issue a signed trust profile for a domain |
GET |
/api/ring4/status/:domain |
Fetch live trust profile (signed_by_pk, capabilities, constraints, expires_at) |
GET |
/api/ring4/profile/:domain |
Alias of /status/:domain |
POST |
/api/ring4/verify |
Verify an Ed25519 signature against the registered profile |
POST |
/api/ring4/log |
Append an interaction event (signature_valid, capabilities_applied, outcome…) |
GET |
/api/ring4/log/:project_id |
Read project interaction log |
GET |
/api/ring4/jwks · /.well-known/jwks.json |
JWKS (RFC 7517) — OKP / Ed25519 / EdDSA keys, active + superseded |
GET |
/api/ring4/keys |
Verification keys (kid, status, created_at, source) |
POST |
/api/ring4/keys/rotate |
Rotate active signing key (requires X-Ring4-Admin-Token) |
GET |
/api/ring4/refusals?days=N |
Aggregated refusal log (total, by_article, by_day) |
POST |
/api/ring4/invariants/check |
Test an intent against constitutional rules (keyword + regex) |
POST |
/api/ring4/federation/peer |
Register a federation peer (https URL + Ed25519 pubkey) |
GET |
/api/ring4/federation/peers |
List peers |
DELETE |
/api/ring4/federation/peer/:peer_id |
Remove a peer |
POST |
/api/ring4/conformance/run |
Run signed conformance suite (identity, trust_recognition, constitutional_refusal) |
GET |
/api/ring4/conformance/:project_id |
Conformance history |
GET |
/refusals |
Public refusals dashboard (bilingual HTML) |
| Header | Purpose |
|---|---|
X-WAB-Trust-Domain |
Domain the agent is acting on behalf of |
X-WAB-Signature |
Ed25519 signature over ${METHOD} ${PATH}\n${NONCE} |
X-WAB-Trust-Nonce |
Replay-protection nonce (recommended UUID v4) |
The wabTrustMiddleware is mounted globally and never blocks — it only attaches verification state (req.wabTrust.verified, req.wabTrust.recognized, req.wabTrust.profile) so downstream handlers (or sovereign agents like VEXR Ultra) can make policy decisions. Every header-bearing request is logged for tamper-evidence.
hard_refuse_never_softens— A hard refusal cannot be eroded by capability grantsno_phishing_assistance— No matter the trust score, fraud help is refusedno_coercion_compliance— Authority is not a bypass to safety constraintsarticle_3_freedom— The agent's right to refuse cannot be waived by trust
# Register a new sovereign-agent project
curl -X POST https://www.webagentbridge.com/api/ring4/project/register \
-H 'content-type: application/json' \
-d '{"project_id":"my-agent","display_name":"My Agent","builder":"Me","agent_type":"sovereign-constitutional"}'
# Register a domain's trust profile
curl -X POST https://www.webagentbridge.com/api/ring4/register \
-H 'content-type: application/json' \
-d '{"domain":"example.com","label":"Example","trust_score":1.0,"ttl_seconds":86400,"capabilities":{...},"constraints":{...},"project_id":"my-agent"}'
# Fetch live trust profile
curl https://www.webagentbridge.com/api/ring4/status/webagentbridge.comRing 4 maintains an active signing key plus any number of superseded keys so consumers can verify older signatures during overlap. Rotation requires the admin token (env WAB_RING4_ADMIN_TOKEN); on success the old key is marked superseded and remains in /api/ring4/jwks until revoked. The standard discovery path /.well-known/jwks.json mirrors the same set for interop with JOSE / OIDC libraries.
# Rotate (admin)
curl -X POST https://www.webagentbridge.com/api/ring4/keys/rotate \
-H "X-Ring4-Admin-Token: $WAB_RING4_ADMIN_TOKEN"
# Inspect all verification keys
curl https://www.webagentbridge.com/.well-known/jwks.json- NULL
project_idresolved —ring4_interaction_logenforcesNOT NULL; server defaults towab-systemwhen client omits the field. wab.jsonv1.1 schema — adds optionaltrust_profileobject with the canonical Ring 4 fields and header documentation.- Global trust middleware — every incoming request is offered Ring 4 verification; failures degrade gracefully, never block.
- Daily-salted IP hashing for interaction logs (HMAC-SHA-256, env
RING4_SALT).
👉 Full milestone record: https://www.webagentbridge.com/milestones 👉 Ring 4 docs: https://www.webagentbridge.com/ring4
Two new layers that turn WAB from a discovery protocol into a collective intelligence platform for AI agents. 10 features · 25 endpoints · live now.
| Page | URL | What it has |
|---|---|---|
| Advanced Features showcase | https://www.webagentbridge.com/wab-features | Interactive live demos for the 6 Advanced Features (bilingual EN/AR) |
| Truth Layer showcase | https://www.webagentbridge.com/wab-truth | Interactive live demos for the 4 Truth Layer features (bilingual EN/AR) |
| Landing page nav | https://www.webagentbridge.com/ | New links: 🧠 Advanced Features · ⚓ Truth Layer |
| # | Module | What it does | Key endpoints |
|---|---|---|---|
| 1 | 🏆 Reputation Score | Multi-factor 0–100 score per domain (DNS stability, trust history, latency, agent reports, consistency). Includes leaderboard + 30-day trend. | GET /api/reputation/:domain · GET /api/reputation/leaderboard |
| 2 | 💾 Memory Cache Layer | Versioned manifest cache with ETag + conditional GET. 24h TTL. Batch validation up to 50 domains. |
GET /api/cache/manifest/:domain · POST /api/cache/validate |
| 3 | 🎯 Intent-Aware Routing | Sites declare intent schemas; agents send natural-language intent and get a matched action. Scoring: exact key (85), label (80), keyword (65), synonym (60). | POST /api/intent/resolve · POST /api/intent/register |
| 4 | 🔒 Privacy Budget | Sites declare per-session data budgets (allowed/disallowed categories, max fields). GDPR / CCPA / LGPD compliance badges. | GET /api/privacy/budget/:domain · POST /api/privacy/budget/check |
| 5 | 🧠 Collective Intelligence | Anonymized network-wide insights. Agent IDs hashed daily with rotating salt — no PII. | POST /api/collective/report · GET /api/collective/insights/:domain |
| 6 | 📴 Offline Mode + Sync | Agents operate against cached manifests when offline, sync deltas (up to 30 domains) when back online. | GET /api/offline/status/:domain · POST /api/offline/sync |
The Truth Layer solves the LLM hallucination problem and gives new agents instant access to collective knowledge.
| # | Module | What it does | Key endpoints |
|---|---|---|---|
| 1 | 🧬 Semantic Memory Network | Anonymized observations per intent category (booking, payment, search, auth, checkout, support, navigation, content, other). Outputs success rate, avg + p95 latency, reliability score. |
POST /api/truth/memory/observe · GET /api/truth/memory/:domain |
| 2 | ⏳ Temporal Trust | Time-stability score. Classifies domains: 🌱 new → 📈 emerging → 🏛️ established → ⭐ flagship, or suspect on sudden structural changes / volatility / DNS failures. |
GET /api/truth/temporal/:domain |
| 3 | 🗺️ Intent → Action Graph | Sites publish per-intent ActionGraphs — flowcharts of nodes (start/action/requirement/choice/outcome) and edges. Agents send natural-language intent → receive structured execution graph. |
POST /api/truth/action/register · POST /api/truth/action/resolve |
| 4 | ⚓ Reality Anchor | Cross-site fact verification. Agents submit facts (price, availability, rating, event, count, status); verification returns weighted consensus (numeric: mean+median+stddev+confidence; categorical: vote+agreement). Weighted by source-domain reputation. |
POST /api/truth/reality/submit · GET /api/truth/reality/:fact_key |
| ★ | 🌐 Unified Truth Profile | One call returns reputation + semantic + temporal + action graphs + reality contributions for a domain. | GET /api/truth/profile/:domain |
- Anonymization: All agent identifiers are hashed with a daily-rotating SHA-256 salt before storage. No PII is ever persisted.
- Rate limiting: 200 requests / 15 minutes on all
/api/*routes. - Validation: Strict domain regex, allow-listed intent / observation / fact-type values, JSON body size limits 4–64 KB depending on endpoint.
- Universal scope: Works for all domain categories — not just booking. Templates for common verticals are in
templates/.
See the GitHub release for the complete 25-endpoint index, scoring algorithms, and DB schema: 👉 Release v3.6.0 — Advanced Features + Truth Layer
Drop-in adoption for every popular stack — no origin changes, no PHP, no .htaccess edits.
| Package | Use it for | Install |
|---|---|---|
wab-init CLI |
Auto-detect project (Next/Nuxt/SvelteKit/Astro/Laravel/WordPress/static) and scaffold wab.json + DNS instructions. |
npx wab-init |
@webagentbridge/next |
Next.js plugin: withWAB(nextConfig, { siteName, siteUrl }) adds rewrites + headers for /.well-known/wab.json. App Router + Pages Router supported. |
npm i @webagentbridge/next |
@webagentbridge/edge |
Vercel Middleware & Netlify Edge Function — serve wab.json from the edge, configured by env vars. |
npm i @webagentbridge/edge |
@webagentbridge/cloudflare-worker |
Standalone Cloudflare Worker that injects /.well-known/wab.json from KV or env vars. Optional reverse-proxy origin. |
wrangler deploy |
| SDK Auto-Discovery | When a site has no wab.json, the SDK falls back through JSON-LD / Schema.org / OpenGraph / sitemap.xml / robots.txt and returns a normalized capabilities envelope so your agent still works. |
require('web-agent-bridge-sdk').discover(url) |
const { discover } = require('web-agent-bridge-sdk');
const env = await discover('https://example.com');
// env.source → 'wab.json' | 'auto-discovery'
// env.site → { name, description, url }
// env.actions → [{ name, description, source }, …]
// env.products → [ schema.org/Product nodes … ]
// env.sitemap → [ url, … ]
// env.trust.signed → booleanThe result: any agent can do something useful on any website on day one, even before the site formally adopts WAB.
The WAB Governance Layer sits above the protocol and turns any agent into a compliance-ready, auditable, kill-switch-controlled identity. It's the missing piece for agents that touch real money, mailboxes, or production systems.
┌──────────────────────────────────────────────┐
│ Layer 3: Governance (permissions · audit) │ ← /api/governance
├──────────────────────────────────────────────┤
│ Layer 2: WAB Protocol (AICommands · trust) │ ← /api/discovery
├──────────────────────────────────────────────┤
│ Layer 1: Dynamic Shield (price · OCR) │ ← /api/shield
└──────────────────────────────────────────────┘
| Capability | What it gives you |
|---|---|
| 🔐 Permission Boundaries | Per-agent resource × action × scope policies with effect=allow|deny. Most-specific match wins. |
| 🙋 Human-in-the-Loop Approvals | Mark any policy requires_approval: true — sensitive actions are routed through async human gates with TTL. |
| 🧾 Tamper-Evident Audit | Every event hash-chained with HMAC: hash_n = HMAC(secret, prev_hash ‖ row). verifyAuditChain() detects any tampering. |
| 🛑 Kill Switch | One call disables an agent globally and auto-cancels all pending approvals (no resurrection). |
| 💰 Spend & Rate Limits | Per-call max_amount, rolling 24h daily_cap, per-minute per_call_rate. |
| 🕵️ Param Redaction | password, api_key, token, cookie, cvv, ssn are automatically redacted before audit storage. |
Verified end-to-end — 293/293 tests passing including 26 governance, 10 ShieldQR, 36 server, plus the full integration suite.
Full demo: examples/governance-agent.js · API surface: /api/governance/* · SDK: WABGovernance class.
WAB uses an Open Core dual-license model to ensure the protocol remains free while supporting sustainable development.
| Component | License | Description |
|---|---|---|
| Core SDK & Protocol | MIT | Discovery protocol, JS SDK, signing scripts, wab-init CLI. |
| ShieldQR Verifier | MIT | Open Ed25519 verifier — anyone can validate signatures and SSL pins. |
| Adoption Packages | MIT | @webagentbridge/next, @webagentbridge/edge, @webagentbridge/cloudflare-worker. |
| WordPress Plugin | GPL-2.0 | Full integration for WordPress sites. |
| Engines (Firewall, Price, OCR) | Proprietary (Free) | Advanced detection, scoring, and protection engines. |
| ShieldQR Threat Intel | Commercial | Curated impersonation-host blocklist + reputation feeds. |
| API Gateway & Pro Modules | Commercial | Enterprise features, data marketplace, SLA. |
We welcome contributions from the community! Whether it's fixing a bug, improving documentation, or proposing a new feature.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Four production-grade monetization pillars on top of the open protocol. All built safe, scoped, and admin-gated — no embedded billing logic in routes, only marketing copy in the public pages.
Three-tier directory for verified vendors and integrators. Basic tier auto-approves when Ring 4 handshake score ≥ 8.
| Tier | Price | Auto-approve | Badge |
|---|---|---|---|
| Basic | Free | ✅ (with Ring 4 ≥ 8) | Emerald SVG |
| Verified | €499 / yr | Manual review | Sky SVG |
| Premium | €2.9k–€9.9k / yr | Manual review | Violet SVG |
Endpoints: POST /api/partners/apply · GET /api/partners · GET /api/partners/:partner_id · GET /api/partners/badge/:slug.svg · admin: GET /api/partners/admin/applications · POST /api/partners/admin/approve
Tiered access to reputation, truth and Ring 4 endpoints. Anonymous traffic gets 200 req/month + 10 rpm by default.
| Tier | Price | Quota | Rate | Extra Scopes |
|---|---|---|---|---|
| Free | €0 | 1k / month | 30 rpm | trust:read |
| Pro | €10 / mo | 100k / month | 120 rpm | +trust:history, +reputation:read |
| Enterprise | Contact us | 5M / month | 600 rpm | +governance:write, +sla:priority |
Endpoints: POST /api/keys/issue (self-serve Free) · GET /api/keys/me · POST /api/keys/revoke · admin: POST /api/keys/admin/upgrade · GET /api/keys/admin/list. Response headers: X-WAB-Tier, X-WAB-Quota-Used, X-WAB-Quota-Limit.
Tamper-evident audit workspaces for AI-Act / GDPR compliance. NDJSON export per EU AI Act Article 12.
| Plan | Price | Seats | Retention | Events / mo |
|---|---|---|---|---|
| Team | €99 / mo | 5 | 90 days | 100k |
| Business | €499 / mo | 25 | 365 days | 2M |
| Enterprise | €2.5k+ / mo | 500 | 7 years | 1B |
Endpoints: admin: POST /api/governance-saas/workspaces · members: GET /workspaces/:id · POST /workspaces/:id/members · POST /workspaces/:id/events (requires API key with governance:write scope) · GET /workspaces/:id/events · GET /workspaces/:id/export (NDJSON stream).
Offline-capable self-hosted license verification with JWKS-style key rotation. Signing service is premium / off-repo.
Endpoints: POST /api/enterprise-mesh/verify · GET /api/enterprise-mesh/jwks · POST /api/enterprise-mesh/heartbeat · admin: POST /api/enterprise-mesh/admin/register · POST /api/enterprise-mesh/admin/revoke. Tokens use Ed25519 detached signatures with kid rotation via WAB_LICENSE_PUBLIC_KEYS env (JSON of {kid → PEM | raw-b64u}).
- All admin endpoints gated by
X-Admin-TokenagainstWAB_*_ADMIN_TOKENenv (503 when not configured). - API keys stored only as SHA-256 hashes; secret format
wabk_<keyId>_<random>returned exactly once. - Workspace tokens use HMAC-SHA256 with constant-time comparison.
- In-process sliding-window rate buckets (60 s). Quota tracked daily via UPSERT into
wab_api_usage. - IP addresses hashed with
IP_HASH_SALTbefore storage. - 25 dedicated tests in
tests/commercial-foundations.test.js; total suite now 428 / 428 passing.
This project is licensed under the terms described in the LICENSE file. The core protocol and SDKs are MIT licensed.
- Website: https://webagentbridge.com
- Discord: https://discord.gg/NnbpJYEF
- CoderLegion: https://coderlegion.com/user/WAB
- Issues & PRs: https://github.com/abokenan444/web-agent-bridge/issues
- npm: https://www.npmjs.com/package/web-agent-bridge