One typed configuration
A single agent-bundle.config.ts holds identity, targets, and policy. The src/ conventions fill in everything it leaves silent, and config always wins when both describe the same thing.
Describe skills, hooks, MCP servers, and scripts once. Compile installable artifacts for Claude Code, Codex, and Cursor.
A single agent-bundle.config.ts holds identity, targets, and policy. The src/ conventions fill in everything it leaves silent, and config always wins when both describe the same thing.
One directory per Skill with its SKILL.md and resources, discovered without a declaration and validated against the pinned Agent Skills specification.
Seven events from sessionStart to workspaceOpen, written once in TypeScript and compiled into the wrapper each host actually spawns.
Hand-written stdio servers, or generated servers where each tool, resource, and prompt is one module. Browser MCP Apps compile to self-contained HTML.
Plain or rendered scripts, byte-for-byte assets, and a CLI bin or library entry emitted from the same project — one build, both outputs.
agent-bundle dev serves a loopback Workbench with diagnostics, the artifact tree, an MCP playground with the raw protocol trace, and a hook playground.
Route, protocol, CLI, packed, and host-install proof levels turn "it builds" into recorded evidence, and a pass at one level is never reported as a receipt for another.
Eval suites with pass, fail, and inconclusive semantics, run against the real emitted artifact rather than a mock of it.
A built target directory is the unit you install — it carries its host manifests and a generated INSTALL.md. The artifact root beside it holds agent-bundle.manifest.json, the SHA-256 record that validation, MCP, hooks, and evals read.
The input is one config file and a conventional src/ tree. The output is one artifact root
holding a ready-to-install directory per host — each with its own host manifests, generated
wrappers, and installation instructions written with the bundle's real names — plus the root
agent-bundle.manifest.json that the whole artifact is validated against.
Skills, the MCP server, and the script are picked up by convention. Only the hook needs a declaration, because a handler has to be bound to an event.
Generated wrapper names end in a short digest of the declaration they were compiled from, not of
their contents. artifact/agent-bundle.manifest.json records every emitted file with its SHA-256, so
later validation compares real bytes rather than checking that a path exists.
Write agent-bundle.config.ts and put Skills, hooks, MCP routes, and scripts under src/.
agent-bundle inspect shows the normalized model, so you can confirm which files were picked up
by convention and which were claimed by config.
agent-bundle dev rebuilds on every change and serves the developer
Workbench on loopback: diagnostics, Skill documents, the artifact
tree with provenance, and playgrounds that drive the emitted MCP server and hook wrappers.
Test against the artifact with proof levels that stay distinct — from route-unit tests up to a bundle installed through the real host CLI — and run evaluations whose results are pass, fail, or inconclusive.
agent-bundle build validates the project and writes one directory per target.
Validation checks the artifact against its manifest, and
installation uses each host's own install path.
Hosts differ in what they can load, so the compiler says so at build time: a surface you select
for a target that cannot express it is a reported diagnostic, never a quiet omission. The one
deliberate exception is a hook with no targets of its own, which inherits only the hosts that
support hooks — as the portable tab above shows — rather than failing. Every diagnostic has a
stable AB code documented in the diagnostics reference.
create-agent-bundle
scaffolder.agent-bundle export.