Adding Capabilities
You don't have to write everything your agent can do.
axon install @axon/discord # your agent becomes a Discord bot
axon install @cody/eslint-scout # your agent gains a task it can run
Run either from your agent directory. Both are one command, and both are additive — nothing you wrote changes.
What you get
A module contributes tools, routes, and boot-time setup. After installing
@axon/discord, your agent has a Discord client wired into its lifecycle and
typed tools on axon.tools. You configure env keys and subscribe to its hooks;
you never touch its source.
A prompt package contributes tasks. After installing @cody/eslint-scout,
axon run @cody/eslint-scout:scout works — the instruction is now something
your agent knows how to carry out.
Run axon prepare after either, to regenerate type declarations. Your editor
then knows exactly what was added.
Where they land
export default defineAgent({
modules: ["@axon/discord"],
prompts: ["@cody/eslint-scout"],
})
axon install writes these for you. Both are just declarations — the artifacts
resolve out of node_modules like any dependency, so a fresh clone plus
axon prepare reproduces the same agent.
Names never collide
An installed prompt is namespaced by its package, so it cannot shadow one you wrote:
src/prompts/scout.vue → axon run scout
@cody/eslint-scout:scout → axon run @cody/eslint-scout:scout
Different namespaces by construction, rather than a precedence rule you have to keep in your head.
Going further
Installing is covered in full — env keys, options, hooks, contributed tools — in Installing.
When you want to publish something yourself, a prompt package is two commands and no build step. Building a module is the deeper track, for when a task isn't enough and you need to add a real capability.