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.