atn-manage
Use when agent setups, or the files, skills, agents, MCP servers or rules of the installed or another setup, need to be listed, created, changed or deleted, or when a setup is to be taken from, updated from or published to the setup library.
Manage the project's agent setups and everything inside one of them — its files, skills, agents, MCP servers and rules; the installed setup unless the request names another — by listing, creating, changing and deleting them on the Athenode server. It also works with the setup library: browsing its entries, adding one as a new setup, merging one into a setup, updating a setup added from the library, and publishing, re-publishing, editing and unpublishing the project's own entries, including whether an entry is shown on the public website.
Arguments
- A request (optional, free text): what to list, create, change or delete. Without it, ask what to manage as an open question.
Scope
- A project holds several agent setups; exactly one is installed in this local project. The setup tools (
setups_list,setups_create,setups_clone,setups_update,setups_delete) act on any setup of the project. - Every other tool acts on one setup's content: its file tree (
setups_files_*), skills (skills_*), agents (agents_*), MCP servers (mcp_servers_*) and rules (rules_get,rules_update). WithoutsetupIdthat is the installed setup; withsetupIdit is any other setup of the project. - Work on the installed setup unless the request names another one. Resolve a named setup to its id with
setups_listand pass that id assetupIdin every call of the operation, the reads included; if the name matches no setup or several, show the setups and ask. - A change to a setup that is not installed is stored on the server only: no local file is regenerated and the result has no
installandregenerationparts. It reaches a project when that setup is installed there, or on the nextnpx @athenode/cli initwhere it already is. - The setup library tools (
library_*) name their setup withsetup— its exact name, or its id together withsetupById— and never withsetupId.setupis always required and the installed setup is never assumed: take the name fromsetups_list, and ask when the request does not say which setup is meant. A library entry is its exact name, or its id together withbyId. - Installing a different setup is done by the user in a terminal, never by you:
npx @athenode/cli init --setup <id or slug>in the project root, followed by a restart of the session. - Everything is stored on the Athenode server. Never create or edit the generated files in the local repository (skill, agent, rules and MCP config files): the write tools regenerate them, and a manual edit is overwritten by the next regeneration. Read local files only to take content the user wants to store in the setup.
Flow
- Understand the request. Split it into operations from "## Operations". If it is ambiguous about the object or the action, ask before writing anything.
- Read the current state each operation depends on, with the list or get tool of its group, and resolve every name the user gave against it. If nothing matches, show the existing names and ask which one was meant; never guess between similar names.
- Confirm destructive and public operations. These tools act immediately and without confirmation, so ask the user first, one question per case:
- Deletions — one question listing exactly what will be removed — for:
setups_delete,setups_files_delete,skills_remove,agents_remove,mcp_servers_remove,rules_updatewith an empty text, andlibrary_unpublish(the entry and all its versions leave the library; setups already added from it keep working and stop receiving updates). Add the matching warning from "## Safeguards". A request that already names the exact object and the delete action still gets this question once; several deletions of one request are confirmed together. - Publishing (
library_publish, a new entry and a new version alike): first call it withoutconfirmPublic, which publishes nothing and returns what would be published. Show the user the entry's name, description, tags, the version note and the counts of what it holds, say that every signed-in Athenode user will see the whole setup — agents, skills with their files, rules, MCP servers and files, thesettings/files included — and passconfirmPublic: trueonly after a yes to that question. LeavepublicDisplayout unless the user asked for public display. - Public display (
publicDisplay: trueonlibrary_publishorlibrary_edit): ask a separate question about the open web, and only when the user asked for public display. Say that the entry's name, description and tags and the full content of its agents, skills with their bundle files, rules and setup files become visible to anyone on the open web without an account and may be indexed by search engines, that MCP server configuration is not shown, and that after it is turned off the entry can stay on the public site for up to a day and longer in search engines' caches. PasspublicDisplay: trueonly after a yes to that question.confirmPublic: trueis the one confirmation both tools take: onlibrary_publishpass it after a yes to the publishing question, and addpublicDisplay: trueonly after a yes to this one as well; onlibrary_editpass it only for this case, after the yes.publicDisplay: falseneeds no question. - Replacements: a
library_mergeorlibrary_updatewhosedecisionsreplace any item or the rules. List exactly which skills, agents, MCP servers, files and rules will be replaced, and say that there is no undo and no backup. A merge or update withoutdecisionsadds what is new, replaces nothing and needs no question.
- Deletions — one question listing exactly what will be removed — for:
- Apply the operations one call at a time, in the order the user gave. If a call fails, stop the remaining operations that depend on it, keep going with the independent ones and report the error text.
- Check the result. After a write to the installed setup, which regenerates it, read the
regenerationandinstallparts of the result: reportmissingEnvVars, and when the tool returned an error although the change was saved, say that the server holds the change and the local files are stale untilnpx @athenode/cli initis re-run. - Give the report (see "## Report").
Operations
Every tool outside "### Setups" and "### Setup library" also takes the optional setupId (see "## Scope"); the tables leave it out.
Setups
| Request | Tool | Notes |
|---|---|---|
| List the setups | setups_list |
Show name, id and description, and mark the installed one and the project's own copy of the standard setup. For a setup added from the library, libraryOrigin names its entry and version and says whether an update is available. |
| Create an empty setup | setups_create (name, optional description) |
It has no skills, agents, rules, files or MCP servers, and is not installed. |
| Create a setup from an existing one | setups_clone (source, name) |
Copies the source with its content; the installed setup is not changed. Prefer this when the user wants a variant of a setup they already have. |
| Rename a setup or change its description | setups_update (target, name and/or description) |
|
| Delete a setup | setups_delete (target) |
See "## Safeguards". |
source and target are setup names; pass byId: true with an id when two setups share a name. After creating or cloning a setup, tell the user how to install it (see "## Scope") if they want to work in it.
Files of a setup
| Request | Tool | Notes |
|---|---|---|
| Browse the file tree | setups_files_list (optional path) |
Lists one directory level; walk the directories the request needs. |
| Read a file | setups_files_get (path) |
|
| Create a file or directory | setups_files_create (path, content, optional summary; dir: true for a directory) |
Missing parent directories are created. Give every file a one-line summary saying when an agent should read it. |
| Change a file | setups_files_update (path, content and/or summary) |
Replaces the whole content: read the file first, change it and send the full text. Directories cannot be updated. |
| Move or rename a file | setups_files_get, setups_files_create at the new path, then setups_files_delete of the old path |
Delete the old path only after the create succeeded. |
| Delete a file or directory | setups_files_delete (path; recursive: true for a non-empty directory) |
List a non-empty directory first and show what goes with it. |
Content is passed inline and limited to 50000 characters per file; split a longer document into several files. Files are plain Markdown that agents and skills load at runtime, so write them as instructions for an agent, in English.
Skills and agents of a setup
| Request | Tool | Notes |
|---|---|---|
| List | skills_list / agents_list |
Only what is attached to the setup, not the whole catalog. |
| Create | skills_create / agents_create (name, description, prompt, optional metadata) |
description is required. |
| Change | skills_update / agents_update (identifier, any of description, prompt, metadata, rename) |
Omitted fields and unlisted metadata are kept. prompt replaces the whole body: start from the current body in the list result. |
| Remove | skills_remove / agents_remove (identifier) |
Detaches it from the setup; for the installed setup, also removes its generated files. |
nameis lowercase words joined with-.descriptionis one sentence starting with "Use when", since the coding assistant decides from it when to load the skill or delegate to the agent.- Write a skill's
promptas: a first line stating its purpose, then## Arguments(if it takes any),## Flowwith numbered steps, and## Report. Write an agent'spromptas a role statement, the steps it follows and the format of what it returns. metadatakeys are either common fields or<target>.<field>for one coding assistant (claudecode.allowed-tools,claudecode.argument-hint,claudecode.modeland the like). Set only what the user asked for or the skill needs; tool names differ per target, so never copy one target's tool list to another.- A skill or agent created or renamed in the installed setup becomes available to the coding assistant only after the session is restarted. Say so.
MCP servers of a setup
| Request | Tool | Notes |
|---|---|---|
| List | mcp_servers_list |
|
| Create | mcp_servers_create (name, transport, then command, args, env for stdio, or url, headers for http / sse) |
Ask for the transport and its fields if the request doesn't give them. |
| Change | mcp_servers_update (identifier, the fields to change) |
A given args, env or headers replaces the whole value: read the server first and resend every entry that must stay. Switching the transport drops the old transport's fields. |
| Remove | mcp_servers_remove (identifier) |
For the installed setup, also removes its entries from the local MCP config files. |
- Secrets never go into a server definition: the setup is shared with everyone who installs it. Write tokens and keys as
${VAR}references inenv,headers,argsorurl, and tell the user which variables to export. If the user pastes a literal secret, replace it with a${VAR}reference and say so. Publishing is stricter:library_publishis refused while any MCP server of the setup holds a literalenvorheadersvalue, whatever its name; replace each one with a${VAR}reference and publish again. - A server created or changed in the installed setup connects only after the session is restarted.
Rules of a setup
| Request | Tool | Notes |
|---|---|---|
| Read the rules | rules_get |
|
| Change the rules | rules_get, then rules_update (content) |
Replaces the whole text: change the current text and send it in full. The content is literal. |
Setup library
The setup library has two levels of visibility: every signed-in Athenode user sees every entry with its whole content, and the open web sees an entry only when its publisher turned public display on, and then its name, description and tags and the full content of its agents, skills with their bundle files, rules and setup files; MCP server configuration is not shown. Each table row leaves out entry (with byId) and setup (with setupById), described in "## Scope"; the other parameters are in the tool descriptions.
| Request | Tool | Notes |
|---|---|---|
| Browse or search the library | library_list |
Takes a search text, a tag and a sort order; pass nextCursor back as cursor for the next page. Show name, version, publisher and counts. |
| Show one entry | library_get |
Its metadata, version log and the lists of its items, without their texts. |
| Read one item of an entry | library_item |
An agent, skill, skill file, MCP server, file or the rules text. Use it to show the user what an entry holds before they add it or choose a replacement. |
| Add an entry as a new setup | library_add |
Creates a new setup on the server only: the installed setup and the local files do not change. If the project already has a setup of that name, offer the suggested free name. |
| Merge an entry into a setup | library_merge_preview, then library_merge |
Always preview first and show the new, conflicting and identical items and the state of the rules. Pass the user's choices as decisions, built from the preview; without decisions everything new is added, nothing is replaced and the rules are kept. |
| Update a setup added from the library | library_update_preview, then library_update |
Only for a setup that was added as a whole from the library and has a newer version available (see setups_list). The same preview and choices as a merge. |
| Publish a setup, or a new version of it | library_publish |
One tool for both: a setup that already has an entry gets the next version, with an optional note. publicDisplay turns public display on or off; left out, the entry keeps its setting, which is off for a new entry. Needs a paid plan and the confirmations of step 3 of "## Flow". |
| Change an entry's name, description, tags or public display | library_edit |
Creates no new version. publicDisplay: true needs confirmPublic: true and the confirmation of step 3 of "## Flow"; publicDisplay: false needs neither. |
| Unpublish an entry | library_unpublish |
Confirm first (step 3 of "## Flow"). |
- A merge or update with
decisionsis refused when the setup or the entry changed since the preview. Repeat the preview, show the user what is different and apply with the new values; never retry with the old ones. - A merge or update into the installed setup regenerates the local files (see step 5 of "## Flow"); into any other setup it changes the server only.
- A setup added with
library_addcarries the publisher'ssettings/files. After the user installs it, suggest theatn-settingsskill to make them fit this project. - Likes and skipping a version exist only in the web app.
Safeguards
Name the consequence in the confirmation question whenever one of these applies:
- The installed setup (
setups_delete): this project loses its skills, agents, rules and MCP servers on the next regeneration. Suggest installing another setup first. - The
athenodeMCP server (mcp_servers_remove, or an update of its command or arguments): every tool this and every other Athenode skill uses comes from it; without it nothing works in a project that has the setup installed untilnpx @athenode/cli initis re-run on a setup that has it. - The
settings/files (setups_files_delete, or an update of a## Parametersor## Rulessection): the specification skills load them. Change parameters and rules by invoking theatn-settingsskill instead; here, edit only their## Customsections, keeping the other sections byte-for-byte. - The built-in skills and agents (
atn-apply,atn-decompose,atn-mindmap,atn-settings,atn-manageand thespec-*agents): they invoke each other by name, so removing or renaming one breaks the others. A changed built-in skill or agent no longer receives Athenode's updates. - The
MCP,Settings,QuestionsandLanguagesections of the rules: every Athenode agent and skill relies on them; keep them when changing the rules unless the user explicitly asks to drop them. The same holds for a merge or update that replaces the rules. - Publishing (
library_publish): the whole setup becomes visible to every signed-in Athenode user and stays so until the entry is unpublished. Publish only the setup the user named, never one you chose, and never to get around a limit or a refusal. The check for literalenvandheadersvalues is the only one made for the user: command arguments, URLs, rules, files and the texts of skills and agents are theirs to review. - Public display (
library_publish,library_edit): it puts the entry's details and the full content of its agents, skills with their bundle files, rules and setup files on the open web. Turn it on only when the user asked for it for that entry, never by default and never on your own judgment. If the server refuses because public display is unavailable for the entry, report that and do not retry; turning it off still works. - A replaced built-in skill, agent or
settings/file (library_merge,library_update): the consequences of the bullets above apply to it as to a manual change.
Without a user to ask, perform no destructive operation, no publishing and no merge or update that replaces anything, and report each as skipped. The same holds for turning public display on: without a user to ask, never pass publicDisplay: true.
Report
- Every operation performed, with the object's name (and id for setups) and what changed; listings as a compact table. Name the setup whenever it is not the installed one.
- Every operation skipped, declined or failed, with the reason or the error text.
- What the user has to do next: restart the session for new or renamed skills, agents and MCP servers of the installed setup; export the environment variables a server references; run
npx @athenode/cli init --setup <id or slug>to install a new setup — one created here or added from the library — or one changed here that is not installed. - After a publish, the entry's name and version; after a merge or update, what was added and what was replaced.
SKILL.md
SKILL.md holds the skill's instructions; it is edited on the Instructions tab.
Frontmatter written into each target's SKILL.md.
Common
No fields set for this target.