Plugin-first, all the way down
Models, tools, memory, MCP servers and user interfaces attach through the same lifecycle. A plugin can inject another plugin's service without importing its code.
A kernel, an agent runtime and a plugin host behind one small protocol. Run agents on any desktop OS or orchestration platform; drive them from a browser, desktop shell or phone.
# Anywhere Node 22 runs
pnpm install && pnpm build
KESTREL_PLUGINS=plugins,examples/plugins node apps/server/dist/bin.js
# Or a container
docker build -t kestrel . && docker run --rm -p 7331:7331 -v "$PWD:/workspace" kestrelThe server exposes a small REST surface plus an event stream. The bundled console is a static application: it can be served by the agent host, by a CDN, or wrapped by a desktop or mobile shell without changing a line of agent code.
| Concern | Plugin | Contract |
|---|---|---|
| Model access | @kestrel/plugin-openai, @kestrel/plugin-anthropic | provide models |
| Filesystem and shell tools | @kestrel/plugin-tools-core | provides tools |
| Durable notes | @kestrel/plugin-memory | injects tools, provides memory |
| Model Context Protocol | @kestrel/plugin-mcp | injects tools, provides mcp |
| Skills | @kestrel/plugin-skills | injects prompts, tools, provides skills |
| Delegation | @kestrel/plugin-subagents | injects sessions, tools, prompts, provides subagents |
| Your product | anything in plugins/ | whatever you declare |
There is no privileged core plugin. tools-core is simply the plugin that happens to ship with the repository. Removing it yields an agent that can still talk, but cannot touch the workspace.