Your customers describe what they want. Forge ships it.
Your customers ask for features you haven't built. Forge writes, validates, and ships them into your product — scoped per customer, sandboxed per namespace, and only able to touch what you've declared. You bring the trigger. We bring the agent.
Codegen, validate, retry, ship
Forge interprets your customer's intent, writes the extension against your tools, type-checks it, validates every trigger and tool binding against your registry, and retries on error. It's the loop most platforms try to build themselves and stall on.
Your tools, auto-discovered
Point Forge at your MCP, OpenAPI, or GraphQL endpoint. Forge introspects it and exposes only those operations to the build-time agent. Extensions can never reach a tool you didn't declare — sandbox-safe by construction.
One namespace per extension, per customer
Shipped extensions run in isolated namespaces with scoped secrets, state, and triggers. No shared globals, no cross-customer reads. You stay in control of what each extension can touch.
You keep the surface. We do the work no one wants to maintain.
- → The trigger — chat box, button, ticket pattern, scheduled job.
- → The model provider — BYO key or pay through us.
- → The product surface where extensions live.
- → The build-time agent — codegen, validation, retry-with-error-feedback.
- → The capability registry — sources auto-discovered from your MCP / OpenAPI / GraphQL.
- → The event-type catalog and event delivery into runtime extensions.
- → The runtime, lifecycle API, and management surface.
Nothing crosses customer lines.
Every architectural choice starts from one principle: an extension built for one of your customers cannot reach anything outside its sandbox or anything you didn't declare.
How isolation works →- → One sandboxed namespace per extension. Scoped secrets, scoped state, no cross-customer reads.
- → Capabilities are validated at build time; extensions can't call a tool you didn't expose.
- → HMAC-signed dispatch with per-subject headers. Forge stores no per-customer credentials.
- → Every extension lands in pending_approval. Nothing runs until your customer approves.
Forge doesn't change what an agent can author. It changes who can build the agent in the first place.