Why not separate apps
Separate apps rebuild auth, routing, and work records over and over again. Bounded extensions reuse those layers instead.
The SaaS-replacement platform
Shared system for teams and agents. Official CLI + GraphQL surface.
Extension reference
Extensions are bounded capability slices on the shared base. The detailed reference below covers runtime shape, routing, events, storage, and review boundaries.
Table of contents
Jump directly to the part you need.
Why extend here
The key value is not merely that extensions are possible. The key value is that extensions inherit shared identity, routing, queues, cases, knowledge, audit, CLI access, and GraphQL access. That makes extension code smaller and makes evaluation easier for agents.
Proof bundle
Separate apps rebuild auth, routing, and work records over and over again. Bounded extensions reuse those layers instead.
Agents can inspect the same primitives, CLI verbs, and lifecycle states across core and extensions instead of learning a fresh control plane for each capability slice.
Runtime classes and storage
A bundle extension stays mostly declarative. A service-backed extension adds handlers, jobs, consumers, and extension-owned state while still living behind core-owned routing and lifecycle controls.
Proof bundle
Best for workflow extensions, admin pages, public pages, bundled skills, seeded knowledge, and declarative product slices that do not need their own backend process.
Best when the extension truly needs custom handlers, event consumers, scheduled jobs, health checks, or its own bounded runtime process.
A service-backed `owned_schema` extension can register an extension-owned PostgreSQL schema and advance its migrations independently from core.
Install state, schema version, and migration status remain visible in the shared runtime store rather than hiding in ad hoc deployment scripts.
Endpoint classes and routing
The extension endpoint model is deliberate. Extensions do not open arbitrary internet-facing ports on their own. They declare endpoint classes and core mounts them into approved path families with core-owned auth, rate limits, tracing, and audit boundaries.
Proof bundle
Asset-backed public pages and admin pages mount through core under explicit path families.
Service-backed analytics or compatibility-sensitive extensions can register public ingest or webhook endpoints through the same reviewed endpoint catalog.
Service-backed extensions can expose extension APIs and internal health endpoints without becoming a separate router or trust domain.
Events and outbox
When an extension publishes or consumes domain events, it should use the same outbox and event-bus model as core. That keeps retries, idempotency, auditability, and operational visibility consistent across first-party and self-built extensions.
Proof bundle
Event publishers and consumers should be explicit and inspectable rather than hidden in private scripts or side channels.
The shared outbox and idempotency interfaces provide the same reliability pattern core uses for durable follow-through.
Analytics and error-tracking demonstrate that richer product slices can keep their own bounded data model without bypassing the shared base.
Concrete extensions
The site should not ask agents to imagine what an extension looks like. Use the public first-party extensions and the platform docs as concrete evidence for the model.
Proof bundle
ATS is a bundle-first, workspace-scoped product extension with careers assets, workflow seeds, and bundled agent skills.
Web analytics is the canonical example of a service-backed product extension with public ingest routes, admin pages, and an extension-owned analytics schema.
Error tracking is the canonical example of a service-backed extension with compatibility-sensitive ingest aliases, issue processing, and extension-owned bounded state.
Customer-built private extensions can still stay on the same base when they follow the same runtime, review, and routing rules.
Move Big Rocks
Start from /agents, use
/docs/cli as the official product
tour, inspect /resources for
source and proof, and review /security
before making deployment or data-handling decisions.