Claude plugins
Atomic Agent reads plugin packages made for Claude Code, and also the Codex and Cursor plugin formats. You install a plugin with one command, and its skills, slash commands, MCP servers and hooks join the agent. You can install from a folder on disk or by name from a plugin marketplace.
Plugins are managed from the terminal with atomic-agent plugin. The desktop app has no Plugins screen yet.
Install a plugin
From a folder:
atomic-agent plugin install ./my-pluginFrom a marketplace, after you add one (see Marketplaces):
atomic-agent plugin install <name>atomic-agent plugin install <name>@<marketplace>The agent looks for a manifest in this order: .claude-plugin/plugin.json, .codex-plugin/plugin.json, .cursor-plugin/plugin.json, then plugin.json at the root. A folder with no manifest also works if it has the usual layout (skills/, commands/, agents/, hooks/, .mcp.json).
Installing a plugin never runs its code. Parts that would run a program on your computer stay off until you allow them. See Code stays off until you allow it.
What a plugin adds
| Part | How it shows up |
|---|---|
| Skills | Listed as plugin:skill, for example review-kit:changelog. Turn one off by adding its name to skills.disabled. |
| Slash commands | /plugin:command in the TUI. A short /command alias works too when no built-in command, skill or other plugin uses that name. |
| MCP servers | Added as <plugin>-<server>. They always ask for approval, whatever trust level the plugin asks for. They start on the next agent start. |
| Hooks | PreToolUse and PostToolUse command hooks. See Hooks. |
In plugin files, ${CLAUDE_PLUGIN_ROOT}, ${CLAUDE_PLUGIN_DATA}, ${PLUGIN_ROOT} and ${PLUGIN_DATA} are replaced with the plugin’s folder and its data folder. Other variables in .mcp.json, such as ${GITHUB_TOKEN}, are left as written.
Plugin state lives in <stateDir>/plugins/, by default ~/.atomic-agent/plugins/, not in config.json.
Slash commands
A plugin command is a Markdown file. When you run it, the text you type after the command fills its placeholders:
$ARGUMENTSis everything you typed.$1to$9are single words, and single or double quotes group words, so"high priority"is one argument.$ARGUMENTS[N]is the argument at position N, counting from 0.- If the command has no placeholder, your text is added at the end as
ARGUMENTS: ....
The description and argument-hint fields from the command’s frontmatter show in the command palette. allowed-tools is read as a hint only and grants nothing. model is ignored.
Two things work differently from Claude Code. !`cmd` lines are not run and @file references are not inlined; both stay as plain text. Commands from ~/.claude/commands/ are not loaded. Plugin commands work in the TUI only.
Manage installed plugins
atomic-agent plugin listatomic-agent plugin show <name>atomic-agent plugin update <name>atomic-agent plugin enable <name>atomic-agent plugin disable <name>atomic-agent plugin remove <name>If the agent is running when you enable a plugin, restart it to start the plugin’s MCP servers.
Marketplaces
A marketplace is a list of plugins in a git repository or at a URL. No marketplace is added by default. Add one, then install plugins from it by name:
atomic-agent plugin marketplace add anthropics/claude-plugins-officialatomic-agent plugin install <name>marketplace add accepts owner/repo, a git URL, a local folder, or a URL to a marketplace.json file. --ref <branch|tag> pins a branch or tag.
| Command | What it does |
|---|---|
plugin marketplace list | List added marketplaces. |
plugin marketplace show <name> | List the plugins in one marketplace. |
plugin marketplace update [name] | Fetch the latest list. |
plugin marketplace remove <name> | Remove a marketplace. Plugins you installed from it stay. |
The agent reads .claude-plugin/marketplace.json and .omp-plugin/marketplace.json. Entries that point to a folder, GitHub, a URL or git are supported. Entries that install through npm, pip or a custom command are refused. Git hooks are turned off while a marketplace is fetched. Private repositories work only if git already has your credentials.
Code stays off until you allow it
Every install and update runs a security scan of the plugin. If the scan flags something, the install asks you to confirm, or stops if the plugin looks dangerous. The scan also shows what changed in what the plugin can run.
A plugin’s local MCP servers and hooks run only after you allow its code:
atomic-agent plugin install ./my-plugin --accept-codeatomic-agent plugin allow-code <name>atomic-agent plugin deny-code <name>When an update changes what the plugin runs, your earlier permission is dropped and you are asked again. If there is no terminal to ask in and you did not pass --accept-code, the plugin installs with its code off. Its skills and commands still load.
| Flag | What it does |
|---|---|
--accept-code | Allow the plugin’s local programs (MCP servers, hooks) at install time. |
--yes | Install even if the scan asked for confirmation. |
--acknowledge-risk | Install even if the scan flagged the plugin as dangerous. |
--force | Reinstall over an existing copy. |
Hooks
Hooks are your own scripts that run before or after the agent calls a tool. They use the same hooks.json format as Claude Code. A PreToolUse hook can block a call. A PostToolUse hook can add a note that the agent reads after the call.
Hooks come from two places:
- Your own file,
~/.atomic-agent/hooks.json(in general<stateDir>/hooks.json). The agent re-reads it when it changes, without a restart. Your own hooks run without a separate permission step. - Plugins, from
hooks/hooks.jsonor ahooksblock inplugin.json. Plugin hooks run only after you allow the plugin’s code.
{ "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "~/bin/check-shell.sh", "timeout": 30 } ] } ] }}Matchers use Claude Code’s tool names. Bash means os.shell.run. Read, Write, Edit, MultiEdit, Glob, Grep, LS, WebFetch and WebSearch map to the matching agent tools. Task means fusion.delegate. MCP tools are written mcp__<server>__<tool>.
How a hook decides:
- Exit code
2blocks the call. - JSON output with
hookSpecificOutput.permissionDecisionset toallow,denyoraskworks, as do the olderdecision: block|approveandcontinue: falsewithstopReason. - A PostToolUse hook can return
additionalContextfor the agent to read.
Hooks only make the agent stricter. allow does not skip an approval prompt, and a hook that answers ask can be followed by the tool’s own approval prompt. The default timeout is 60 seconds per hook, set with timeout per hook or defaultTimeout per file, up to 600. Hooks also run for Fusion worker calls. Hook messages go to the log; there is no screen to list or edit hooks yet.
Not supported yet
- Plugin output styles, LSP servers, monitors,
binandsettingsare skipped with the note “not supported yet”. - Plugin subagents (
agents/*.md) are read but nothing runs them. - Only PreToolUse and PostToolUse hooks fire. SessionStart, Stop, UserPromptSubmit and the other Claude Code events are read but not run.
- Only
{"type": "command"}hooks run. Other hook types, such asprompt, are skipped. - The desktop app has no Plugins screen and does not offer plugin slash commands.
Related
Get updates by email
One email when a new version comes out.