Platform Readiness Scorecard
Can a client build anything on Agend? The primitives ledger, scored against the repo as of 2026-07-07. Companion docs:
ADR-001-object-registry-system-and-custom-objects.md,public-api-external-tenant-hardening.md,writeback-two-way-sync.md,wordpress-integration-plugin-spec.md
The ledger
| # | Primitive | Status | Evidence / gap |
|---|---|---|---|
| 1 | Public versioned API + scoped keys + entitlements | ✅ Shipped | apps/api, 169 /v1 routes, unified ag_* keys |
| 2 | Webhooks (signed, replayable) | ✅ Shipped | @agend/webhooks, subscriptions + deliveries + replay |
| 3 | SSO / embed | ✅ Shipped | @agend/sso, @agend/embed |
| 4 | Metered billing on API usage | ✅ Shipped | Gateway after() metering — platform is monetisable day one |
| 5 | Sandbox | ✅ Shipped | ag_test_ keys |
| 6 | Client-side components | 🟡 Half | @agend/elementor-widgets built; WP plugin glue missing → SPEC written (BOA-08) |
| 7 | Workflows for clients | 🟡 Exists internally | apps/workflows (visual DAG, Inngest) is internal-only. Exposing it to client accounts is the cheapest big win — soaks up a large class of "build us X" requests with zero client code |
| 8 | Data extensibility (custom objects) | 🟡 Decided, not built | ADR-001: registry + object_definitions/object_records; first slice = relationship-type custom fields. Sized: MVP ~4–6 wks (custom-objects-build-plan.md) — existing custom_field_definitions engine shrinks it |
| 9 | Platform contract | ❌ Missing | Versioning/deprecation policy, SLA, changelog channel, SDKs. Boring, decisive: it is what makes an agency willing to build on you. v0 clauses drafted in ahri-operating-model.md |
| 10 | External-tenant hardening | ❌ Gated | Distributed rate limiting + RLS backstop (P1s in the hardening findings) before external write keys |
| 11 | AI/agent surface (MCP) | 🟡 Exists internally | @agend/mcp-tools + MCP server + agents registry shipped but absent from the client offer. The object registry (ADR-001) can drive REST + widgets + MCP tools from one catalogue — design the registry for it now (opportunity O2, platform-opportunities.md) |
Score: 5 shipped · 4 half · 2 missing (of 11).
The compounding plays live across rows, not in them — #7 × #8 = the "Programs" no-code product, #11 × #8 = AI-accessible objects: see
platform-opportunities.md(O1, O2) and the full Upbeat entity homing inupbeat-data-bridge-map.md.
Transactional write coverage (the other axis)
Reads: open today for synced entities (contacts, sales). Writes that must reach Upbeat: phased W1–W4 per the write-back design. Writes to Agend-native products (LMS, community, directory, jobs): already open.
Recommended order
- Hardening P1s (#10) — gate for everything external
- WP integration plugin (#6) — unlocks the AHRI pilot visibly
- Relationship-type custom fields (#8 slice 1) — builds the field engine on a shipped feature
- Platform contract v1 (#9) — publish alongside the pilot
- Workflows exposure (#7) — scoped beta for one client account (AHRI) before general release
- Custom objects proper (#8) and write-back phases proceed on their own tracks
The strategic trade (recorded)
Platform = trading bespoke services revenue for stickiness and scale: client devs/agencies do the long-tail work, Agend stops being the resented bottleneck, and every feature a client builds on the API raises switching cost. The existential risk is not clients building too much — it is breaking the contract they built on. Hence #9 outranking its apparent boringness.