BYO Everything agent infrastructure
Build custom AI agents without surrendering your architecture.
An opinionated Agent Development Kit for building custom AI agents with bring-your-own infrastructure and opt-in batteries.
The framework should have a job, not an empire.
ADK takes the contracts agents routinely get wrong and leaves the rest under your control. It is strict about execution, budgets, failure, and boundaries because ambiguity is not a feature.
Operating model
Do whatever you want. Do it correctly.
Weird deployments, swapped providers, local-first storage, custom observability: all fine. Sloppy turn boundaries, implicit state, swallowed failures, and mystery tool contracts: disappointing, avoidable, and not fine.
- 01OwnBring the model, retrieval, persistence, prompts, and deployment you trust. ADK stays on its side of the boundary.
- 02StandardizePut hard contracts around the seams that cannot be left to vibes: turns, context, budgets, events, tools, artifacts, and failure.
- 03ExtendCompose middleware and registries freely. Add batteries and adapters when they earn their place in the system.
- 04MoveSwap providers, runtimes, persistence, and observability. Movement is a design requirement, not a future apology.
Context budget discipline
Token estimation belongs in the architecture.
Every prompt, memory, artifact, and tool result is competing for the same finite context window. ADK provides Tokenizable as a first-party utility for reasonable estimates across common model encodings, cached until the content changes. Use it or ignore it. The mechanism is there because guessing is not budget management.
Explore Tokenizable- Estimate before you spend
- Common model encodings
- Cached until content changes
- Use it or ignore it
The strict core
Opinionated where freedom without discipline breaks.
ADK is permissive about architecture and intolerant of mushy execution semantics. It validates early, emits throughout the turn, separates functional events from observability, and treats context, memory, and runtime resources as hard budgets. That is the standard. It is not especially negotiable.
Batteries, not bait
The boring pieces are available.
Teams rebuild the same tools and storage helpers over and over. ADK makes the useful ones available as first-party batteries, so you can reach for predictable building blocks when they help and ignore them when they do not.
Browse batteries- Common tasks covered
- Maintained by default
- Opt in when useful
- Ignore without penalty
Portability proof
If TypeScript can run there, ADK has no objection.
Static site, worker, desktop app, CLI: same contracts, different shell. ADK has no blessed runtime, no sacred deployment shape, and no taste for artificial constraints. Cross-realm guards and environment-tagged tests exist because portability is a promise, not decoration.
Start small
Adopt the loop. Keep the escape routes open.
Wire ADK into the stack you already operate. Inject persistence at the boundary, keep tool schemas authoritative, listen to the event stream, and ignore anything you do not need. The correct abstraction makes movement safer, which is the entire point.