Design notes for AI-led TypeScript systems
One container. One schema. Many agent-facing surfaces.
A short-form publication for the ideas behind AgentBack: dependency injection, Zod-first contracts, REST, MCP, errors agents can act on, and the architectural choices that keep it all coherent.
Latest posts
Notes from the framework boundary
These posts are repo-local, dependency-free HTML. They are meant to be easy to review in diffs and easy to publish from any static host.
One framework, multi-faced agentic access
One @tool class is now a REST route, an MCP tool, an AI agent's own tool, an operator CLI command, and a read-only introspection feed — every face sharing one validation, auth, and metering pipeline.
Read postOne handler, every runtime
A framework usually marries you to a host. AgentBack's REST and MCP surfaces run on Node, Fastify, Hono, Bun, Deno, or Workers from one fetch(Request) handler.
Read postDo frameworks still matter when agents write code?
AI coding does not make frameworks obsolete. It changes their job: helping coding agents build correct APIs and MCP tools while turning those APIs into agentic interfaces.
Read postA console for one container
A read-only dev console that renders the same DI container and Zod schemas your servers run on — bindings, five kinds of wiring edge, routes, tools, and the schema graph. It reads what runs, so it can't drift.
Read postBuilding with an agent inside the framework
How the agentback-demo weather MCP server was built with Claude Code, commit by commit — and what the framework's constraints changed about the experience.
Read postIntroducing AgentBack
A TypeScript framework for agent-facing services: one Zod contract across REST, MCP, docs, typed clients, policy, and usage rails.
Read postCharge agents per call
One @price decorator meters a route or MCP tool and gates it behind a payment rail — x402 today, Stripe metered billing from the same usage log.
Read postErrors an agent can fix, operations an agent can't break
Stable codes, field-level issues, the violated schema, and a retry hint in every failure — plus confirmation tokens and idempotency keys for the calls that must not run twice.
Read postTools are not endpoints
Every tool definition is paid for in context-window tokens on every connection. Why @tool is opt-in, and how toolCostReport makes the bill visible.
Read postYour API's first reader is an agent
/llms.txt and /llms-full.txt served from the same registry as /openapi.json, and an agent-context manual you can commit — derived contracts can't drift.
Read postBoundary coherence is the product
Why AgentBack treats a Zod schema as the same artifact across runtime validation, TypeScript, OpenAPI, MCP, and docs.
Read postOne container, two surfaces
The practical shape of a hybrid REST + MCP app, and why discovery by tag keeps feature work local.
Read postContract-first clients without codegen
How shared schemas let TypeScript clients stay typed and runtime-validated without importing a running server.
Read post