axm.sh 0.10.0 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/__generated__/help-topics.js +5 -5
- package/dist/src/__generated__/help-topics.js.map +1 -1
- package/dist/src/app.d.ts +1 -1
- package/dist/src/app.d.ts.map +1 -1
- package/dist/src/json-output.d.ts +5 -5
- package/dist/src/json-output.d.ts.map +1 -1
- package/dist/src/json-output.js +3 -3
- package/dist/src/root/auth/_auth.d.ts +1 -1
- package/dist/src/root/auth/_auth.d.ts.map +1 -1
- package/dist/src/root/auth/login.d.ts +7 -8
- package/dist/src/root/auth/login.d.ts.map +1 -1
- package/dist/src/root/auth/login.js +15 -3
- package/dist/src/root/auth/login.js.map +1 -1
- package/dist/src/root/auth/token.d.ts +21 -3
- package/dist/src/root/auth/token.d.ts.map +1 -1
- package/dist/src/root/auth/token.js +232 -5
- package/dist/src/root/auth/token.js.map +1 -1
- package/dist/src/root/auth/whoami.d.ts.map +1 -1
- package/dist/src/root/auth/whoami.js +4 -28
- package/dist/src/root/auth/whoami.js.map +1 -1
- package/dist/src/root/commands/disable.js +1 -1
- package/dist/src/root/commands/enable.js +1 -1
- package/dist/src/root/commands/install/command-actions.js +9 -9
- package/dist/src/root/commands/new.js +5 -5
- package/dist/src/root/commands/publish.js +7 -7
- package/dist/src/root/commands/uninstall/command-actions.js +1 -1
- package/dist/src/root/commands/update.js +1 -1
- package/dist/src/root/discover/handler.d.ts +18 -12
- package/dist/src/root/discover/handler.d.ts.map +1 -1
- package/dist/src/root/discover/handler.js +28 -22
- package/dist/src/root/discover/handler.js.map +1 -1
- package/dist/src/root/help/command.js +1 -1
- package/dist/src/root/install/resolve-root-install-intent.js +4 -4
- package/dist/src/root/mcp-servers/install/command-actions.js +9 -9
- package/dist/src/root/mcp-servers/uninstall/command-actions.js +1 -1
- package/dist/src/root/packs/_packs.d.ts.map +1 -1
- package/dist/src/root/packs/_packs.js +2 -0
- package/dist/src/root/packs/_packs.js.map +1 -1
- package/dist/src/root/packs/add.js +6 -6
- package/dist/src/root/packs/install/command-actions.js +9 -9
- package/dist/src/root/packs/list.d.ts +7 -0
- package/dist/src/root/packs/list.d.ts.map +1 -0
- package/dist/src/root/packs/list.js +59 -0
- package/dist/src/root/packs/list.js.map +1 -0
- package/dist/src/root/packs/new.js +5 -5
- package/dist/src/root/packs/publish.js +12 -10
- package/dist/src/root/packs/publish.js.map +1 -1
- package/dist/src/root/packs/remove.js +5 -5
- package/dist/src/root/packs/uninstall/command-actions.js +1 -1
- package/dist/src/root/packs/unpack/handler.js +1 -1
- package/dist/src/root/shared/extension-version.js +1 -1
- package/dist/src/root/shared/publish-preflight.js +1 -1
- package/dist/src/root/shared/publish-success.d.ts +2 -2
- package/dist/src/root/shared/publish-success.d.ts.map +1 -1
- package/dist/src/root/shared/publish-success.js +1 -1
- package/dist/src/root/shared/resolve-owner.js +1 -1
- package/dist/src/root/shared/version-command.js +2 -2
- package/dist/src/root/skills/disable.js +2 -2
- package/dist/src/root/skills/disable.js.map +1 -1
- package/dist/src/root/skills/enable.js +2 -2
- package/dist/src/root/skills/enable.js.map +1 -1
- package/dist/src/root/skills/install/command-actions.d.ts +1 -1
- package/dist/src/root/skills/install/command-actions.js +3 -3
- package/dist/src/root/skills/install/command-actions.js.map +1 -1
- package/dist/src/root/skills/install/resolve-skill-install-source.js +4 -4
- package/dist/src/root/skills/install/resolve-skill-install-source.js.map +1 -1
- package/dist/src/root/skills/list.js +3 -3
- package/dist/src/root/skills/list.js.map +1 -1
- package/dist/src/root/skills/new.js +4 -4
- package/dist/src/root/skills/new.js.map +1 -1
- package/dist/src/root/skills/prune/handler.js +2 -2
- package/dist/src/root/skills/prune/handler.js.map +1 -1
- package/dist/src/root/skills/publish.js +4 -4
- package/dist/src/root/skills/publish.js.map +1 -1
- package/dist/src/root/skills/update/handler.js +5 -5
- package/dist/src/root/skills/update/handler.js.map +1 -1
- package/dist/src/root/subagents/disable/handler.js +1 -1
- package/dist/src/root/subagents/enable/handler.js +1 -1
- package/dist/src/root/subagents/install/command-actions.js +3 -3
- package/dist/src/root/subagents/install/handler.js +2 -2
- package/dist/src/root/subagents/install/resolve-subagent-install-source.js +9 -9
- package/dist/src/root/subagents/install/select-subagents.js +1 -1
- package/dist/src/root/subagents/new/handler.js +6 -6
- package/dist/src/root/subagents/publish/handler.js +9 -9
- package/dist/src/root/subagents/update/handler.js +1 -1
- package/dist/src/root/{breadcrumbs.d.ts → suggested-actions.d.ts} +5 -1
- package/dist/src/root/suggested-actions.d.ts.map +1 -0
- package/dist/src/root/{breadcrumbs.js → suggested-actions.js} +5 -1
- package/dist/src/root/suggested-actions.js.map +1 -0
- package/dist/src/root/uninstall/resolve-root-uninstall-intent.js +4 -4
- package/dist/src/root/update/resolve-root-update-intent.js +4 -4
- package/dist/src/root/upgrade/handler.js +11 -11
- package/dist/src/root/upgrade/subprocess.js +2 -2
- package/dist/src/root/view/handler.js +6 -6
- package/package.json +3 -3
- package/dist/src/root/breadcrumbs.d.ts.map +0 -1
- package/dist/src/root/breadcrumbs.js.map +0 -1
|
@@ -15,13 +15,13 @@ export const HELP_TOPIC_NAMES = [
|
|
|
15
15
|
];
|
|
16
16
|
export const HELP_TOPICS = {
|
|
17
17
|
"basic-usage": '# Basic usage\n\nAXM is the agent extension manager for coding agents and AI assistants.\n\n- One tool to manage agent skills, subagents, commands, and more across agents.\n- Bundle skills, subagents, commands and more with packs\n- Package and publish your extensions to the AgentXM.ai registry\n- Discover and distribute agent extensions for your platform package ecosystems, including JavaScript, Python, Rust, Java, .NET, Ruby, Go, and more\n\n## How to use AXM\n\nThe best way to use AXM is just to ask your agent to do it:\n\n- "Create a new skill to do <x>"\n- "Update subagent to do <y>"\n- "Disable the doomscroll skill"\n- "Publish a new pack with my karate-shihan subagent, rei command, and nunchuck skill"\n\nUse `axm help` to see a list of topics on how to use AXM for your specific use case.\n\nYou will need to have an AgentXM.ai account to publish extensions to the registry or install private extensions.\n\n## How AXM works\n\n_Extensions_ are agent extensions managed by AXM: skills, subagents, and commands. Coding agents may have other extensibility mechanisms (e.g. hooks, plugins, etc.) that aren\'t managed by AXM.\n\nAfter running `axm setup`, AXM configures a workspace settings file at [`.axm/settings.json`](https://axm.sh/schemas/settings.schema.json). Installed extensions are listed there, sometimes with extended metadata. Management operations apply to every coding agent configured in `$.agents`.\n\nExtensions are typically referenced by their full name: `<@owner>/<skills|subagents|...>/<name>` and vendored under `.axm/extensions/<@owner>/<type>/<name>`. Non-registry sourced extensions are vendored under `.axm/extensions/external/<type>/<name>`. `.axm` should not be ignored by source control. The `.axm/axm-lock.yaml` file records resolved metadata captured at install time.\n\n### Authoring and editing extensions\n\nAn `authored: true` flag in the settings entry for an extension indicates that it is acceptable to make changes to the extension in the workspace. Set this to `true` for any workspace where you anticipate making and publishing changes for an extension.\n\nMake any desired changes to authored extensions inside the extension\'s directory `.axm/extensions/<@owner>/<type>/<name>` per the appropriate help topic for that extension type, followed by `axm sync` to render the changes to different coding agent folders and configurations.\n\n### Publishing extensions\n\nUse `axm view` to get the latest published version and use `axm version` to bump if needed.\n\n### Enabling and disabling extensions\n\nAXM makes it easy to enable or disable extensions on the fly.\n\n- `axm skills disable doomscroll`\n- `axm subagents enable karate-shihan`\n\n### Ignoring extensions\n\nIt\'s possible to ignore pre-existing skills and other extensions in your workspace so that AXM won\'t modify or prune them. This is helpful when these extensions are installed/managed by some other tool or mechanism.\n\n## Where to go next\n\n**Use `axm help` to see a list of topics and select the one relevant to your task.**\n\n- `axm help getting-started` — first-time setup for a workspace that has never used AXM\n- `axm help settings` — `.axm/settings.json` fields and schema\n- `axm help skills` — working with skills\n- `axm help subagents` — working with subagents\n- `axm help commands` — working with slash commands\n- `axm help packs` — working with packs\n- `axm help exit-codes` — process exit codes and their meaning\n- `axm <command> --help` — flags and examples for any command\n',
|
|
18
|
-
commands: '# Commands\n\nCommand packages live in `./.axm/extensions/<@owner>/commands/<command-name>`.\n\nA command is two files: a registry manifest plus a Markdown content file that\nholds agent-facing frontmatter and the slash-command prompt body.\n\n## command.json\n\n[`command.json`](https://axm.sh/schemas/command.schema.json)\n\n### Schema\n\n```json\n{\n "$schema": "http://json-schema.org/draft-07/schema#",\n "$ref": "#/definitions/CommandManifest",\n "definitions": {\n "Handle": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?$",\n "title": "Handle",\n "description": "A unique username or organization name starting with @, like @my-org.",\n "examples": ["@my-org", "@username"]\n }\n ]\n },\n "Version": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?$",\n "title": "Version",\n "description": "A semver version like 1.0.0. Ranges are not allowed here.",\n "examples": ["1.0.0", "2.3.1", "0.1.0-beta.1"]\n }\n ]\n },\n "Repository": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review", "github:acme/code-review"],\n "format": "uri-reference"\n },\n {\n "type": "object",\n "properties": {\n "type": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Version control system (e.g., `git`).",\n "examples": ["git"]\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "url": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Repository URL.",\n "examples": ["https://github.com/acme/code-review"],\n "format": "uri"\n }\n ]\n },\n "directory": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Subdirectory within the repository, for monorepo publishers.",\n "examples": ["packages/code-review"]\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "required": ["url"],\n "additionalProperties": false\n }\n ],\n "title": "Repository",\n "description": "Source repository for this extension. Accepts a URL string (or `host:owner/repo` shorthand) or an object with `type`, `url`, and optional `directory`."\n },\n "Bugs": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n },\n {\n "type": "object",\n "properties": {\n "url": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Issue tracker URL.",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "email": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Contact email for bug reports.",\n "examples": ["bugs@acme.dev"],\n "format": "email"\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "additionalProperties": false\n }\n ],\n "title": "Bugs",\n "description": "Where to report bugs against this extension. Accepts a URL string or an object with optional `url` and `email`."\n },\n "Author": {\n "type": "object",\n "properties": {\n "name": { "type": "string" },\n "email": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] }\n },\n "required": ["name"],\n "additionalProperties": false,\n "title": "Author",\n "description": "A person credited as a creator or maintainer of this extension."\n },\n "PackageIdentityPurl": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\\\/.+$",\n "title": "Package Identity Purl",\n "description": "A Package URL (purl) identity for a companion package. Companion package purls are identities, not pins: omit the purl @version segment and put compatibility constraints in versionRange.",\n "examples": ["pkg:npm/react", "pkg:pypi/requests", "pkg:cargo/serde"]\n }\n ]\n },\n "VersRange": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "examples": ["vers:npm/>=18.0.0|<19.0.0", "vers:pypi/>=2.31.0", "vers:cargo/>=1.0.0"]\n }\n ]\n },\n "CompanionPackage": {\n "type": "object",\n "properties": {\n "purl": { "$ref": "#/definitions/PackageIdentityPurl" },\n "versionRange": { "anyOf": [{ "$ref": "#/definitions/VersRange" }, { "type": "null" }] }\n },\n "required": ["purl"],\n "additionalProperties": false,\n "title": "Companion Package",\n "description": "A companion package purl identity with an optional VERS compatibility range."\n },\n "PackSpec": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^(@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?)\\\\/packs\\\\/([a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?)(?:@.+)?$",\n "title": "Pack Spec",\n "description": "Pack reference with an optional version constraint suffix.",\n "examples": ["@acme/packs/typescript", "@acme/packs/typescript@^1.0.0"]\n }\n ]\n },\n "ExtensionName": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",\n "title": "Extension Name",\n "description": "Short name for this command within its owner namespace. Combined with owner, forms the FQN @owner/commands/<name>.",\n "examples": ["my-skill", "code-review", "prettier"]\n }\n ]\n },\n "CommandManifest": {\n "type": "object",\n "properties": {\n "$schema": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "owner": { "$ref": "#/definitions/Handle" },\n "version": { "$ref": "#/definitions/Version" },\n "description": {\n "anyOf": [\n {\n "type": "string",\n "description": "Short, registry-facing summary of this extension shown in listings and search results."\n },\n { "type": "null" }\n ]\n },\n "keywords": {\n "anyOf": [\n {\n "type": "array",\n "examples": [["lint", "typescript", "review"]],\n "items": { "type": "string", "allOf": [{ "minLength": 1 }] }\n },\n { "type": "null" }\n ]\n },\n "repository": { "anyOf": [{ "$ref": "#/definitions/Repository" }, { "type": "null" }] },\n "homepage": {\n "anyOf": [\n { "type": "string", "examples": ["https://acme.dev/code-review"], "format": "uri" },\n { "type": "null" }\n ]\n },\n "license": {\n "anyOf": [\n {\n "type": "string",\n "title": "License",\n "description": "SPDX license expression, or `UNLICENSED` for proprietary code.",\n "examples": ["MIT", "Apache-2.0", "MIT OR Apache-2.0", "UNLICENSED"],\n "format": "spdx-expression"\n },\n { "type": "null" }\n ]\n },\n "bugs": { "anyOf": [{ "$ref": "#/definitions/Bugs" }, { "type": "null" }] },\n "authors": {\n "anyOf": [\n { "type": "array", "items": { "$ref": "#/definitions/Author" } },\n { "type": "null" }\n ]\n },\n "companionPackages": {\n "anyOf": [\n {\n "type": "array",\n "description": "External ecosystem packages this extension is designed to work with, declared as identity Package URLs with optional VERS compatibility ranges.",\n "items": { "$ref": "#/definitions/CompanionPackage" }\n },\n { "type": "null" }\n ]\n },\n "recommendedPacks": {\n "anyOf": [\n {\n "type": "array",\n "description": "Packs this extension is designed to work alongside. Each entry is a pack spec, optionally pinned to a version range.",\n "items": { "$ref": "#/definitions/PackSpec" }\n },\n { "type": "null" }\n ]\n },\n "standalone": {\n "anyOf": [\n {\n "type": "boolean",\n "description": "Set to false to indicate this extension only makes sense when installed alongside one of its recommendedPacks.",\n "default": true\n },\n { "type": "null" }\n ]\n },\n "type": { "type": "string", "enum": ["command"] },\n "name": { "$ref": "#/definitions/ExtensionName" }\n },\n "required": ["owner", "version", "type", "name"],\n "additionalProperties": false,\n "title": "Command Manifest",\n "description": "Extension manifest file for slash-command. Carries registry-facing identity, version, and metadata. Per-agent frontmatter overrides live in the content file."\n }\n }\n}\n```\n\n## Content File\n\nThe command content file is `<command-name>.md`. Its YAML frontmatter is passed\nthrough verbatim. AXM does not rename or translate fields such as\n`argumentHint` to `argument-hint`; write the target agent\'s native key, or put\nper-agent shape changes in `command.json` `agentOverrides`.\n\n```markdown\n---\ndescription: Review code\nargument-hint: "[scope]"\nallowed-tools:\n - Read\n - Grep\n---\n\nReview {{arguments}}.\n```\n\nSupported body placeholders:\n\n- `{{arguments}}` — all arguments the user passed to the command.\n- `{{arguments[N]}}` — the Nth positional argument, zero-indexed.\n- `{{arg:name}}` — a named argument slot, rendered with each target agent\'s named-argument syntax (e.g. `${input:name}` on Copilot, `$name` on Junie). Families without native named arguments — Claude Code, Cursor, Gemini — render the placeholder as a context appendix instead of inlining a value.\n\nUse `\\{{` to render a literal `{{` without substitution.\n\nUse `agentOverrides` in the content file frontmatter for per-agent differences.\nEach `agentOverrides.<agent-id>` entry is applied as an RFC 7396 JSON Merge\nPatch on top of the content file\'s frontmatter for that agent: objects merge\nrecursively, `null` deletes a key, arrays replace wholesale, and primitive\nvalues replace.\n\n## Rendering\n\n`axm install` and `axm sync` render commands into each configured agent\'s\nnative command directory:\n\n- **Markdown + YAML** (Claude Code, Codex, OpenCode, Augment, Junie, Kilo,\n Roo) — frontmatter keys become YAML; body follows the `---` block.\n- **Markdown body only** (Cursor) — body only; frontmatter is dropped.\n- **Prompt Markdown** (GitHub Copilot IDE) — frontmatter keys become YAML;\n file names end in `.prompt.md`.\n- **TOML** (Gemini CLI) — frontmatter keys become TOML; body becomes `prompt`.\n Nested filenames map to Gemini `:` command namespaces.\n- **Plain text** (Kiro CLI) — body only; frontmatter is not rendered.\n\nTargets that drop frontmatter (such as Cursor\'s body-only Markdown) ignore keys like `argument-hint` and `allowed-tools` entirely. Keep the body self-explanatory so the command still works on those agents, and use `agentOverrides` for anything that must vary by target.\n\nDo not edit rendered command files directly. Edit the command package source and re-render.\n\n## Where to go next\n\n- `axm help packs` — bundling command extensions with extension packs\n- `axm commands --help` — full command subcommand surface\n',
|
|
18
|
+
commands: '# Commands\n\nCommand packages live in `./.axm/extensions/<@owner>/commands/<command-name>`.\n\nA command is two files: a registry manifest plus a Markdown content file that\nholds agent-facing frontmatter and the slash-command prompt body.\n\n## command.json\n\n[`command.json`](https://axm.sh/schemas/command.schema.json)\n\n### Schema\n\n```json\n{\n "$schema": "http://json-schema.org/draft-07/schema#",\n "$ref": "#/definitions/CommandManifest",\n "definitions": {\n "Handle": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?$",\n "title": "Handle",\n "description": "A unique username or organization name starting with @, like @my-org.",\n "examples": ["@my-org", "@username"]\n }\n ]\n },\n "Version": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?$",\n "title": "Version",\n "description": "A semver version like 1.0.0. Ranges are not allowed here.",\n "examples": ["1.0.0", "2.3.1", "0.1.0-beta.1"]\n }\n ]\n },\n "Repository": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review", "github:acme/code-review"],\n "format": "uri-reference"\n },\n {\n "type": "object",\n "properties": {\n "type": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Version control system (e.g., `git`).",\n "examples": ["git"]\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "url": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Repository URL.",\n "examples": ["https://github.com/acme/code-review"],\n "format": "uri"\n }\n ]\n },\n "directory": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Subdirectory within the repository, for monorepo publishers.",\n "examples": ["packages/code-review"]\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "required": ["url"],\n "additionalProperties": false\n }\n ],\n "title": "Repository",\n "description": "Source repository for this extension. Accepts a URL string (or `host:owner/repo` shorthand) or an object with `type`, `url`, and optional `directory`."\n },\n "Bugs": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n },\n {\n "type": "object",\n "properties": {\n "url": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Issue tracker URL.",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "email": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Contact email for bug reports.",\n "examples": ["bugs@acme.dev"],\n "format": "email"\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "additionalProperties": false\n }\n ],\n "title": "Bugs",\n "description": "Where to report bugs against this extension. Accepts a URL string or an object with optional `url` and `email`."\n },\n "Author": {\n "type": "object",\n "properties": {\n "name": { "type": "string" },\n "email": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] }\n },\n "required": ["name"],\n "additionalProperties": false,\n "title": "Author",\n "description": "A person credited as a creator or maintainer of this extension."\n },\n "PackageIdentityPurl": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\\\/.+$",\n "title": "Package Identity Purl",\n "description": "A Package URL (purl) identity for a companion package. Companion package purls are identities, not pins: omit the purl @version segment and put compatibility constraints in versionRange.",\n "examples": ["pkg:npm/react", "pkg:pypi/requests", "pkg:cargo/serde"]\n }\n ]\n },\n "VersRange": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "examples": ["vers:npm/>=18.0.0|<19.0.0", "vers:pypi/>=2.31.0", "vers:cargo/>=1.0.0"]\n }\n ]\n },\n "CompanionPackage": {\n "type": "object",\n "properties": {\n "purl": { "$ref": "#/definitions/PackageIdentityPurl" },\n "versionRange": { "anyOf": [{ "$ref": "#/definitions/VersRange" }, { "type": "null" }] }\n },\n "required": ["purl"],\n "additionalProperties": false,\n "title": "Companion Package",\n "description": "A companion package purl identity with an optional VERS compatibility range."\n },\n "PackSpec": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^(@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?)\\\\/packs\\\\/([a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?)(?:@.+)?$",\n "title": "Pack Spec",\n "description": "Pack reference with an optional version constraint suffix.",\n "examples": ["@acme/packs/typescript", "@acme/packs/typescript@^1.0.0"]\n }\n ]\n },\n "ExtensionName": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",\n "title": "Extension Name",\n "description": "Short name for this command within its owner namespace. Combined with owner, forms the FQN @owner/commands/<name>.",\n "examples": ["my-skill", "code-review", "prettier"]\n }\n ]\n },\n "CommandManifest": {\n "type": "object",\n "properties": {\n "$schema": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "owner": { "$ref": "#/definitions/Handle" },\n "version": { "$ref": "#/definitions/Version" },\n "description": {\n "anyOf": [\n {\n "type": "string",\n "description": "Short, registry-facing summary of this extension shown in listings and search results."\n },\n { "type": "null" }\n ]\n },\n "keywords": {\n "anyOf": [\n {\n "type": "array",\n "examples": [["lint", "typescript", "review"]],\n "items": { "type": "string", "allOf": [{ "minLength": 1 }] }\n },\n { "type": "null" }\n ]\n },\n "repository": { "anyOf": [{ "$ref": "#/definitions/Repository" }, { "type": "null" }] },\n "homepage": {\n "anyOf": [\n { "type": "string", "examples": ["https://acme.dev/code-review"], "format": "uri" },\n { "type": "null" }\n ]\n },\n "license": {\n "anyOf": [\n {\n "type": "string",\n "title": "License",\n "description": "SPDX license expression, or `UNLICENSED` for proprietary code.",\n "examples": ["MIT", "Apache-2.0", "MIT OR Apache-2.0", "UNLICENSED"],\n "format": "spdx-expression"\n },\n { "type": "null" }\n ]\n },\n "bugs": { "anyOf": [{ "$ref": "#/definitions/Bugs" }, { "type": "null" }] },\n "authors": {\n "anyOf": [\n { "type": "array", "items": { "$ref": "#/definitions/Author" } },\n { "type": "null" }\n ]\n },\n "packages": {\n "anyOf": [\n {\n "type": "array",\n "description": "External ecosystem packages this extension is designed to work with, declared as identity Package URLs with optional VERS compatibility ranges.",\n "items": { "$ref": "#/definitions/CompanionPackage" }\n },\n { "type": "null" }\n ]\n },\n "recommendedPacks": {\n "anyOf": [\n {\n "type": "array",\n "description": "Packs this extension is designed to work alongside. Each entry is a pack spec, optionally pinned to a version range.",\n "items": { "$ref": "#/definitions/PackSpec" }\n },\n { "type": "null" }\n ]\n },\n "standalone": {\n "anyOf": [\n {\n "type": "boolean",\n "description": "Set to false to indicate this extension only makes sense when installed alongside one of its recommendedPacks.",\n "default": true\n },\n { "type": "null" }\n ]\n },\n "type": { "type": "string", "enum": ["command"] },\n "name": { "$ref": "#/definitions/ExtensionName" }\n },\n "required": ["owner", "version", "type", "name"],\n "additionalProperties": false,\n "title": "Command Manifest",\n "description": "Extension manifest file for slash-command. Carries registry-facing identity, version, and metadata. Per-agent frontmatter overrides live in the content file."\n }\n }\n}\n```\n\n## Content File\n\nThe command content file is `<command-name>.md`. Its YAML frontmatter is passed\nthrough verbatim. AXM does not rename or translate fields such as\n`argumentHint` to `argument-hint`; write the target agent\'s native key, or put\nper-agent shape changes in `command.json` `agentOverrides`.\n\n```markdown\n---\ndescription: Review code\nargument-hint: "[scope]"\nallowed-tools:\n - Read\n - Grep\n---\n\nReview {{arguments}}.\n```\n\nSupported body placeholders:\n\n- `{{arguments}}` — all arguments the user passed to the command.\n- `{{arguments[N]}}` — the Nth positional argument, zero-indexed.\n- `{{arg:name}}` — a named argument slot, rendered with each target agent\'s named-argument syntax (e.g. `${input:name}` on Copilot, `$name` on Junie). Families without native named arguments — Claude Code, Cursor, Gemini — render the placeholder as a context appendix instead of inlining a value.\n\nUse `\\{{` to render a literal `{{` without substitution.\n\nUse `agentOverrides` in the content file frontmatter for per-agent differences.\nEach `agentOverrides.<agent-id>` entry is applied as an RFC 7396 JSON Merge\nPatch on top of the content file\'s frontmatter for that agent: objects merge\nrecursively, `null` deletes a key, arrays replace wholesale, and primitive\nvalues replace.\n\n## Rendering\n\n`axm install` and `axm sync` render commands into each configured agent\'s\nnative command directory:\n\n- **Markdown + YAML** (Claude Code, Codex, OpenCode, Augment, Junie, Kilo,\n Roo) — frontmatter keys become YAML; body follows the `---` block.\n- **Markdown body only** (Cursor) — body only; frontmatter is dropped.\n- **Prompt Markdown** (GitHub Copilot IDE) — frontmatter keys become YAML;\n file names end in `.prompt.md`.\n- **TOML** (Gemini CLI) — frontmatter keys become TOML; body becomes `prompt`.\n Nested filenames map to Gemini `:` command namespaces.\n- **Plain text** (Kiro CLI) — body only; frontmatter is not rendered.\n\nTargets that drop frontmatter (such as Cursor\'s body-only Markdown) ignore keys like `argument-hint` and `allowed-tools` entirely. Keep the body self-explanatory so the command still works on those agents, and use `agentOverrides` for anything that must vary by target.\n\nDo not edit rendered command files directly. Edit the command package source and re-render.\n\n## Where to go next\n\n- `axm help packs` — bundling command extensions with extension packs\n- `axm commands --help` — full command subcommand surface\n',
|
|
19
19
|
"exit-codes": "# Exit codes\n\n| Code | Meaning |\n| ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| 0 | Success. Also used for help output and cancelled prompts. |\n| 1 | Command ran successfully but reported problems requiring attention (e.g., `axm lint` findings, doctor-style checks). Not lint-only — any \"ran but found problems\" outcome belongs here. |\n| 2 | Invalid command, flags, or arguments. Fix the invocation. |\n| 3 | Resource doesn't exist or isn't visible. |\n| 4 | Credentials are missing, expired, or invalid. Sign in again. |\n| 5 | Signed in, but not authorized for this action. |\n| 6 | Conflicts with current state (already exists, version mismatch, concurrent update). Reconcile and retry. |\n| 7 | Rate limited. Retry after a backoff. |\n| 8 | Couldn't reach the remote service (DNS, TCP, TLS, timeout). Usually retryable. |\n| 9 | Input parsed but failed validation. Correct it and retry. |\n| 10 | Unexpected internal error. Likely a bug — please report it. |\n| 11 | Service is responsive but temporarily unable to serve. |\n| 12 | Quota, storage, or plan limit exhausted. |\n",
|
|
20
20
|
"getting-started": "# Getting started\n\nUse this when the current workspace has never been managed by AXM before. It\nwalks through first-time setup. Once `.axm/` exists, switch to\n`axm help basic-usage`.\n\nAXM manages agent extensions for a workspace: skills, commands, MCP servers,\nsubagents, and packs. A workspace is the project (or user) directory whose\nextensions AXM tracks.\n\n## Confirm AXM is installed\n\n```bash\naxm --version\n```\n\nIf this fails, follow the install bootstrap at `https://axm.sh/install.md`\nbefore continuing. Do not invent a runner fallback such as `bunx`, `pnpx`, or\n`npx` — they skip `axm setup` and split state across cached versions.\n\n## Add AXM CLI to allowed tools\n\nAdd the `axm` CLI to the list of allowed tools for your coding agent.\n\n## Initialize the workspace\n\nRun setup in the project you want AXM to manage:\n\n```bash\naxm setup\n```\n\nSetup is idempotent. It creates `.axm/`, detects supported coding agents,\nrecords workspace settings, and writes the resolution lockfile. Read\n`axm help basic-usage` to learn what those files do and which ones must be\nchecked in.\n\nFor non-interactive environments, pass `--yes`. To pin which agents AXM\nconfigures, pass one or more `--agent <id>` flags instead of relying on\nauto-detection.\n\n## Add your first extension\n\nOnce setup is complete, install extensions in one of these ways:\n\n```bash\naxm discover --json # suggestions from project deps\naxm install @profile/skills/<name> --yes # install a known registry FQN\naxm skills install owner/repo --yes # install from a GitHub source\n```\n\n`axm discover` is read-only and a good starting point when you do not already\nknow what to install.\n\n## Where to go next\n\n- `axm help basic-usage` — what each workspace file is for, what is safe to inspect, what changes state, and what must be checked in\n- `axm help settings` — `.axm/settings.json` fields and schema\n- `axm help skills` — anatomy of a native managed skill on disk\n- `axm <command> --help` — flags and examples for any command\n- `axm help` — list every available help topic\n",
|
|
21
|
-
"package-extensions": '# Packages and extensions\n\nAXM links extensions and packages in two directions. Extension authors declare **companion packages**; package authors declare **recommended extensions**; when both sides agree, the extension is **official** for that package.\n\n## Companion packages\n\nAny extension author may declare one or more `
|
|
22
|
-
packs: '# Packs\n\nPack packages live in `./.axm/extensions/<@owner>/packs/<pack-name>`.\n\n## pack.json\n\n[`pack.json`](https://axm.sh/schemas/pack.schema.json)\n\n### Schema\n\n```json\n{\n "$schema": "http://json-schema.org/draft-07/schema#",\n "$ref": "#/definitions/PackManifest",\n "definitions": {\n "Handle": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?$",\n "title": "Handle",\n "description": "A unique username or organization name starting with @, like @my-org.",\n "examples": ["@my-org", "@username"]\n }\n ]\n },\n "Version": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?$",\n "title": "Version",\n "description": "A semver version like 1.0.0. Ranges are not allowed here.",\n "examples": ["1.0.0", "2.3.1", "0.1.0-beta.1"]\n }\n ]\n },\n "Repository": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review", "github:acme/code-review"],\n "format": "uri-reference"\n },\n {\n "type": "object",\n "properties": {\n "type": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Version control system (e.g., `git`).",\n "examples": ["git"]\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "url": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Repository URL.",\n "examples": ["https://github.com/acme/code-review"],\n "format": "uri"\n }\n ]\n },\n "directory": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Subdirectory within the repository, for monorepo publishers.",\n "examples": ["packages/code-review"]\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "required": ["url"],\n "additionalProperties": false\n }\n ],\n "title": "Repository",\n "description": "Source repository for this extension. Accepts a URL string (or `host:owner/repo` shorthand) or an object with `type`, `url`, and optional `directory`."\n },\n "Bugs": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n },\n {\n "type": "object",\n "properties": {\n "url": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Issue tracker URL.",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "email": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Contact email for bug reports.",\n "examples": ["bugs@acme.dev"],\n "format": "email"\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "additionalProperties": false\n }\n ],\n "title": "Bugs",\n "description": "Where to report bugs against this extension. Accepts a URL string or an object with optional `url` and `email`."\n },\n "Author": {\n "type": "object",\n "properties": {\n "name": { "type": "string" },\n "email": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] }\n },\n "required": ["name"],\n "additionalProperties": false,\n "title": "Author",\n "description": "A person credited as a creator or maintainer of this extension."\n },\n "PackageIdentityPurl": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\\\/.+$",\n "title": "Package Identity Purl",\n "description": "A Package URL (purl) identity for a companion package. Companion package purls are identities, not pins: omit the purl @version segment and put compatibility constraints in versionRange.",\n "examples": ["pkg:npm/react", "pkg:pypi/requests", "pkg:cargo/serde"]\n }\n ]\n },\n "VersRange": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "examples": ["vers:npm/>=18.0.0|<19.0.0", "vers:pypi/>=2.31.0", "vers:cargo/>=1.0.0"]\n }\n ]\n },\n "CompanionPackage": {\n "type": "object",\n "properties": {\n "purl": { "$ref": "#/definitions/PackageIdentityPurl" },\n "versionRange": { "anyOf": [{ "$ref": "#/definitions/VersRange" }, { "type": "null" }] }\n },\n "required": ["purl"],\n "additionalProperties": false,\n "title": "Companion Package",\n "description": "A companion package purl identity with an optional VERS compatibility range."\n },\n "ExtensionName": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",\n "title": "Extension Name",\n "description": "Short name for this pack within its owner namespace. Combined with owner, forms the FQN @owner/packs/<name>.",\n "examples": ["my-skill", "code-review", "prettier"]\n }\n ]\n },\n "NonPackExtensionFqn": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^(@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?)\\\\/(skills|commands|mcp-servers|subagents|files|rules)\\\\/([a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?)$",\n "title": "Non-Pack Extension FQN",\n "description": "Extension identifier restricted to non-pack types (skills, commands, mcp-servers, subagents, files, rules).",\n "examples": ["@acme/skills/code-review", "@my-org/commands/format"]\n }\n ]\n },\n "VersionRange": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[~^<>=*xXvV0-9A-Za-z| .-]+$",\n "title": "Version Range",\n "description": "A semver version range like ^1.0.0, ~2.3.0, >=1.0.0 <3.0.0, or an exact version 1.2.3. Use \\"*\\" to always resolve to the latest available version.",\n "examples": ["^1.0.0", "~2.4", ">=1 <3", "1.2.3", "*"]\n }\n ]\n },\n "PackManifest": {\n "type": "object",\n "properties": {\n "$schema": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "owner": { "$ref": "#/definitions/Handle" },\n "version": { "$ref": "#/definitions/Version" },\n "description": {\n "anyOf": [\n {\n "type": "string",\n "description": "Short, registry-facing summary of this extension shown in listings and search results."\n },\n { "type": "null" }\n ]\n },\n "keywords": {\n "anyOf": [\n {\n "type": "array",\n "examples": [["lint", "typescript", "review"]],\n "items": { "type": "string", "allOf": [{ "minLength": 1 }] }\n },\n { "type": "null" }\n ]\n },\n "repository": { "anyOf": [{ "$ref": "#/definitions/Repository" }, { "type": "null" }] },\n "homepage": {\n "anyOf": [\n { "type": "string", "examples": ["https://acme.dev/code-review"], "format": "uri" },\n { "type": "null" }\n ]\n },\n "license": {\n "anyOf": [\n {\n "type": "string",\n "title": "License",\n "description": "SPDX license expression, or `UNLICENSED` for proprietary code.",\n "examples": ["MIT", "Apache-2.0", "MIT OR Apache-2.0", "UNLICENSED"],\n "format": "spdx-expression"\n },\n { "type": "null" }\n ]\n },\n "bugs": { "anyOf": [{ "$ref": "#/definitions/Bugs" }, { "type": "null" }] },\n "authors": {\n "anyOf": [\n { "type": "array", "items": { "$ref": "#/definitions/Author" } },\n { "type": "null" }\n ]\n },\n "companionPackages": {\n "anyOf": [\n {\n "type": "array",\n "description": "External ecosystem packages this extension is designed to work with, declared as identity Package URLs with optional VERS compatibility ranges.",\n "items": { "$ref": "#/definitions/CompanionPackage" }\n },\n { "type": "null" }\n ]\n },\n "type": { "type": "string", "enum": ["pack"] },\n "name": { "$ref": "#/definitions/ExtensionName" },\n "dependencies": {\n "type": "object",\n "description": "Map of fully-qualified non-pack extension names to version ranges. Packs cannot depend on other packs.",\n "propertyNames": { "$ref": "#/definitions/NonPackExtensionFqn" },\n "additionalProperties": { "$ref": "#/definitions/VersionRange" }\n }\n },\n "required": ["owner", "version", "type", "name", "dependencies"],\n "additionalProperties": false,\n "title": "Pack Manifest",\n "description": "Extension manifest file for extension packs. Bundles a curated set of skills, commands, MCP servers, subagents, files, and rules into a single installable unit."\n }\n }\n}\n```\n\n## Authoring and editing packs\n\nRun `axm packs new <name>` to scaffold a managed pack. Use `axm packs add <pack> <extension>` and `axm packs remove <pack> <extension>` to edit dependencies when possible.\n\nRun `axm packs publish <pack>` to release a new version. Install with `axm packs install @owner/packs/<name>`.\n\n## Pack dependencies\n\nBundle extensions by defining the pack dependencies in `pack.json`. Each key uses the same fully qualified form as the extension directories (`<@owner>/<type>/<name>`, with the plural type segment):\n\n```\n"dependencies": {\n "@acme/skills/brick-building": "*",\n "@acme/subagents/brick-layer": "^1.0.0"\n}\n```\n\nUse `"*"` to indicate the latest version (recommended) unless there is a specific reason to constrain it.\n\n## No transitive dependencies\n\nPacks may not depend on other extension packs. A pack\'s dependency graph is exactly the extensions it lists.\n\n## Recommended packs\n\nExtensions that are designed to work with a specific pack should declare it in `recommendedPacks`:\n\n```\n{\n "recommendedPacks": [\n "@acme/packs/bricks"\n ]\n}\n```\n\nSee the individual help topics for each extension type for more details.\n\n## Standalone extensions\n\n`standalone` defaults to `false`. Set it to `true` only when the extension is meaningless outside its recommended packs. Otherwise leave the field undefined.\n\n## Where to go next\n\n- `axm packs --help` — full pack subcommand surface\n',
|
|
21
|
+
"package-extensions": '# Packages and extensions\n\nAXM links extensions and packages in two directions. Extension authors declare **companion packages**; package authors declare **recommended extensions**; when both sides agree, the extension is **official** for that package.\n\n## Companion packages\n\nAny extension author may declare one or more `packages` on an extension manifest (`skill.json`, `subagent.json`, `pack.json`, etc.) to signal that the extension is designed to work with those packages. Companion packages use [Package URL](https://github.com/package-url/purl-spec) identities, with an optional [VERS](https://github.com/package-url/vers-spec) range when the extension truly depends on a bounded package-version span.\n\nDefault to identity-only. The declaration usually means "this extension targets this package," not "this extension is tied to a specific release":\n\n```jsonc\n{\n "packages": [{ "purl": "pkg:npm/example-tinyflags" }],\n}\n```\n\nUse `versionRange` only when the extension has a real compatibility constraint. The `versionRange` value is a VERS expression whose scheme matches the purl ecosystem:\n\n```jsonc\n{\n "packages": [\n {\n "purl": "pkg:npm/example-tinyflags",\n "versionRange": "vers:npm/>=1.0.0|<2.0.0",\n },\n ],\n}\n```\n\nDo not put `@version` on the purl. A versioned purl like `pkg:npm/example-tinyflags@0.1.0` is an exact pin, with real downsides:\n\n- The declaration goes stale on every new package release.\n- Users on any other version see no signal that the extension applies to them.\n- The extension author must republish to track upstream package releases.\n\nWhen the package author recommends an extension from package metadata, they still use `extensions` to express which extension version pairs with their package release. `packages.versionRange` is for the extension author\'s side of the relationship: use it only when the extension itself depends on package APIs introduced or removed in a known range.\n\n## Recommended extensions\n\nAny package author may declare `extensions` in their package\'s native metadata to signal that those extensions are recommended for working with the package. Each entry is an object with an extension reference (`ref`) and an optional semver `versionRange`. For npm, that field lives in `package.json`:\n\n```jsonc\n// package.json\n{\n "axm": {\n "extensions": [{ "ref": "@acme/packs/widget-kit" }],\n },\n}\n```\n\nA recommendation can target any extension type — skill, subagent, command, MCP server, or pack. When recommending more than one extension, prefer a pack: one stable reference for the package author, with evolvable contents over time.\n\nFor the equivalent location in other package formats, see [Specifying recommended extensions in package metadata](#specifying-recommended-extensions-in-package-metadata) below.\n\nDefault to identity-only — omit `versionRange`. A recommendation is a discovery signal: AXM resolves it to the newest matching extension version and pins that exact version in `.axm/axm-lock.yaml`, so the range never controls what the user ends up installing. An identity-only recommendation never goes stale and always points at the current extension.\n\nAdd a semver `versionRange` only when your package genuinely pairs with a bounded major line of the extension — for example, when a later major release of the extension drops an API your package relies on:\n\n```jsonc\n{\n "axm": {\n "extensions": [{ "ref": "@acme/packs/widget-kit", "versionRange": "^1.0.0" }],\n },\n}\n```\n\nA `^major` range still lets the extension author ship minor and patch releases without you republishing; it goes stale only on a major bump. Do not exact-pin (`"versionRange": "1.2.3"`): like a versioned companion-package purl, an exact pin goes stale on every extension release and forces you to republish to track it. Writing `"versionRange": "*"` is equivalent to omitting it — omit it. For pre-1.0 extensions, prefer identity-only: a caret range on a `0.x` version (`^0.1.0` resolves to `>=0.1.0 <0.2.0`) behaves almost like an exact pin and goes stale on every minor release.\n\n## Official extensions\n\nBoth declarations are unilateral — any extension author may name any package as a companion, and any package author may recommend any extension. **Official** status is the only signal in this system that both sides agree, and it is derived: when an extension declares a package as a companion **and** that package recommends the same extension, the extension is official for that package.\n\n## Specifying recommended extensions in package metadata\n\nThe location depends on the package format.\n\n| Package format | Metadata location |\n| ----------------------------- | ------------------------------------------------------------------ |\n| Cargo (Rust) | `[package.metadata.axm]` table in `Cargo.toml` |\n| CocoaPods (Swift) | `axm.json` sidecar at the pod root (retained via `preserve_paths`) |\n| Composer (PHP) | `axm` field in `composer.json` |\n| Conan (C++) | top-level `axm:` key in `conandata.yml` |\n| CPAN (Perl) | `x_axm` field in `META.json` |\n| CRAN (R) | `Config/axm` field in `DESCRIPTION` (JSON-encoded, single line) |\n| Go modules | `axm.json` sidecar at the module root |\n| Hackage (Haskell) | `x-axm-<field>:` custom fields in the `.cabal` file |\n| Hex (Elixir) | `axm.json` sidecar at the package root |\n| JSR (Deno / TypeScript) | top-level `axm` field in `deno.json` |\n| Julia (General) | `[axm]` section in `Project.toml` |\n| LuaRocks (Lua) | `axm.json` sidecar (shipped via `build.copy_directories`) |\n| Maven (Java / Kotlin / Scala) | `axm.json` under `src/main/resources/META-INF/` |\n| npm (JavaScript) | `axm` field in `package.json` |\n| NuGet (.NET C# / F#) | `axm.json` sidecar at the package root |\n| opam (OCaml) | `x-axm-<field>:` custom fields in the `.opam` file |\n| Pub (Dart) | `axm` field in `pubspec.yaml` |\n| PyPI (Python) | `[tool.axm]` table in `pyproject.toml` |\n| RubyGems (Ruby) | stringified array in `spec.metadata["axm_extensions"]` |\n| SwiftPM (Swift) | `axm.json` sidecar at the package root |\n| Zig | `axm.json` sidecar at the package root (listed in `.paths`) |\n\nFor a complete, working example for every package format above — including paired library and consumer-app fixtures and the exact file shapes AXM reads — see [agentxm/polyglot-examples](https://github.com/agentxm/polyglot-examples).\n\n## Where to go next\n\n- `axm help packs` — bundling multiple extensions into a single recommendable pack\n- `axm help skills` — skill manifest details\n- `axm help subagents` — subagent manifest details\n',
|
|
22
|
+
packs: '# Packs\n\nPack packages live in `./.axm/extensions/<@owner>/packs/<pack-name>`.\n\n## pack.json\n\n[`pack.json`](https://axm.sh/schemas/pack.schema.json)\n\n### Schema\n\n```json\n{\n "$schema": "http://json-schema.org/draft-07/schema#",\n "$ref": "#/definitions/PackManifest",\n "definitions": {\n "Handle": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?$",\n "title": "Handle",\n "description": "A unique username or organization name starting with @, like @my-org.",\n "examples": ["@my-org", "@username"]\n }\n ]\n },\n "Version": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?$",\n "title": "Version",\n "description": "A semver version like 1.0.0. Ranges are not allowed here.",\n "examples": ["1.0.0", "2.3.1", "0.1.0-beta.1"]\n }\n ]\n },\n "Repository": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review", "github:acme/code-review"],\n "format": "uri-reference"\n },\n {\n "type": "object",\n "properties": {\n "type": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Version control system (e.g., `git`).",\n "examples": ["git"]\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "url": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Repository URL.",\n "examples": ["https://github.com/acme/code-review"],\n "format": "uri"\n }\n ]\n },\n "directory": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Subdirectory within the repository, for monorepo publishers.",\n "examples": ["packages/code-review"]\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "required": ["url"],\n "additionalProperties": false\n }\n ],\n "title": "Repository",\n "description": "Source repository for this extension. Accepts a URL string (or `host:owner/repo` shorthand) or an object with `type`, `url`, and optional `directory`."\n },\n "Bugs": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n },\n {\n "type": "object",\n "properties": {\n "url": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Issue tracker URL.",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "email": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Contact email for bug reports.",\n "examples": ["bugs@acme.dev"],\n "format": "email"\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "additionalProperties": false\n }\n ],\n "title": "Bugs",\n "description": "Where to report bugs against this extension. Accepts a URL string or an object with optional `url` and `email`."\n },\n "Author": {\n "type": "object",\n "properties": {\n "name": { "type": "string" },\n "email": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] }\n },\n "required": ["name"],\n "additionalProperties": false,\n "title": "Author",\n "description": "A person credited as a creator or maintainer of this extension."\n },\n "PackageIdentityPurl": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\\\/.+$",\n "title": "Package Identity Purl",\n "description": "A Package URL (purl) identity for a companion package. Companion package purls are identities, not pins: omit the purl @version segment and put compatibility constraints in versionRange.",\n "examples": ["pkg:npm/react", "pkg:pypi/requests", "pkg:cargo/serde"]\n }\n ]\n },\n "VersRange": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "examples": ["vers:npm/>=18.0.0|<19.0.0", "vers:pypi/>=2.31.0", "vers:cargo/>=1.0.0"]\n }\n ]\n },\n "CompanionPackage": {\n "type": "object",\n "properties": {\n "purl": { "$ref": "#/definitions/PackageIdentityPurl" },\n "versionRange": { "anyOf": [{ "$ref": "#/definitions/VersRange" }, { "type": "null" }] }\n },\n "required": ["purl"],\n "additionalProperties": false,\n "title": "Companion Package",\n "description": "A companion package purl identity with an optional VERS compatibility range."\n },\n "ExtensionName": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",\n "title": "Extension Name",\n "description": "Short name for this pack within its owner namespace. Combined with owner, forms the FQN @owner/packs/<name>.",\n "examples": ["my-skill", "code-review", "prettier"]\n }\n ]\n },\n "NonPackExtensionFqn": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^(@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?)\\\\/(skills|commands|mcp-servers|subagents|files|rules)\\\\/([a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?)$",\n "title": "Non-Pack Extension FQN",\n "description": "Extension identifier restricted to non-pack types (skills, commands, mcp-servers, subagents, files, rules).",\n "examples": ["@acme/skills/code-review", "@my-org/commands/format"]\n }\n ]\n },\n "VersionRange": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[~^<>=*xXvV0-9A-Za-z| .-]+$",\n "title": "Version Range",\n "description": "A semver version range like ^1.0.0, ~2.3.0, >=1.0.0 <3.0.0, or an exact version 1.2.3. Use \\"*\\" to always resolve to the latest available version.",\n "examples": ["^1.0.0", "~2.4", ">=1 <3", "1.2.3", "*"]\n }\n ]\n },\n "PackManifest": {\n "type": "object",\n "properties": {\n "$schema": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "owner": { "$ref": "#/definitions/Handle" },\n "version": { "$ref": "#/definitions/Version" },\n "description": {\n "anyOf": [\n {\n "type": "string",\n "description": "Short, registry-facing summary of this extension shown in listings and search results."\n },\n { "type": "null" }\n ]\n },\n "keywords": {\n "anyOf": [\n {\n "type": "array",\n "examples": [["lint", "typescript", "review"]],\n "items": { "type": "string", "allOf": [{ "minLength": 1 }] }\n },\n { "type": "null" }\n ]\n },\n "repository": { "anyOf": [{ "$ref": "#/definitions/Repository" }, { "type": "null" }] },\n "homepage": {\n "anyOf": [\n { "type": "string", "examples": ["https://acme.dev/code-review"], "format": "uri" },\n { "type": "null" }\n ]\n },\n "license": {\n "anyOf": [\n {\n "type": "string",\n "title": "License",\n "description": "SPDX license expression, or `UNLICENSED` for proprietary code.",\n "examples": ["MIT", "Apache-2.0", "MIT OR Apache-2.0", "UNLICENSED"],\n "format": "spdx-expression"\n },\n { "type": "null" }\n ]\n },\n "bugs": { "anyOf": [{ "$ref": "#/definitions/Bugs" }, { "type": "null" }] },\n "authors": {\n "anyOf": [\n { "type": "array", "items": { "$ref": "#/definitions/Author" } },\n { "type": "null" }\n ]\n },\n "packages": {\n "anyOf": [\n {\n "type": "array",\n "description": "External ecosystem packages this extension is designed to work with, declared as identity Package URLs with optional VERS compatibility ranges.",\n "items": { "$ref": "#/definitions/CompanionPackage" }\n },\n { "type": "null" }\n ]\n },\n "type": { "type": "string", "enum": ["pack"] },\n "name": { "$ref": "#/definitions/ExtensionName" },\n "dependencies": {\n "type": "object",\n "description": "Map of fully-qualified non-pack extension names to version ranges. Packs cannot depend on other packs.",\n "propertyNames": { "$ref": "#/definitions/NonPackExtensionFqn" },\n "additionalProperties": { "$ref": "#/definitions/VersionRange" }\n }\n },\n "required": ["owner", "version", "type", "name", "dependencies"],\n "additionalProperties": false,\n "title": "Pack Manifest",\n "description": "Extension manifest file for extension packs. Bundles a curated set of skills, commands, MCP servers, subagents, files, and rules into a single installable unit."\n }\n }\n}\n```\n\n## Authoring and editing packs\n\nRun `axm packs new <name>` to scaffold a managed pack. Use `axm packs add <pack> <extension>` and `axm packs remove <pack> <extension>` to edit dependencies when possible.\n\nRun `axm packs publish <pack>` to release a new version. Install with `axm packs install @owner/packs/<name>`.\n\n## Pack dependencies\n\nBundle extensions by defining the pack dependencies in `pack.json`. Each key uses the same fully qualified form as the extension directories (`<@owner>/<type>/<name>`, with the plural type segment):\n\n```\n"dependencies": {\n "@acme/skills/brick-building": "*",\n "@acme/subagents/brick-layer": "^1.0.0"\n}\n```\n\nUse `"*"` to indicate the latest version (recommended) unless there is a specific reason to constrain it.\n\n## No transitive dependencies\n\nPacks may not depend on other extension packs. A pack\'s dependency graph is exactly the extensions it lists.\n\n## Recommended packs\n\nExtensions that are designed to work with a specific pack should declare it in `recommendedPacks`:\n\n```\n{\n "recommendedPacks": [\n "@acme/packs/bricks"\n ]\n}\n```\n\nSee the individual help topics for each extension type for more details.\n\n## Standalone extensions\n\n`standalone` defaults to `false`. Set it to `true` only when the extension is meaningless outside its recommended packs. Otherwise leave the field undefined.\n\n## Where to go next\n\n- `axm packs --help` — full pack subcommand surface\n',
|
|
23
23
|
settings: '# Settings\n\nAXM workspace state lives in `.axm/settings.json`.\n\n## `.axm/settings.json`\n\n[`settings.json`](https://axm.sh/schemas/settings.schema.json)\n\n### Schema\n\n```json\n{\n "$schema": "http://json-schema.org/draft-07/schema#",\n "$ref": "#/definitions/AxmSettings",\n "definitions": {\n "TelemetryMode": {\n "anyOf": [{ "type": "boolean" }, { "type": "string", "enum": ["errors"] }],\n "title": "Telemetry Mode",\n "description": "`true` sends usage and error telemetry, `\\"errors\\"` sends only errors, and `false` disables telemetry.",\n "examples": [true, "errors", false]\n },\n "Handle": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?$",\n "title": "Handle",\n "description": "A unique username or organization name starting with @, like @my-org.",\n "examples": ["@my-org", "@username"]\n }\n ]\n },\n "AgentId": {\n "type": "string",\n "enum": [\n "adal",\n "amp",\n "antigravity",\n "augment",\n "claude-code",\n "cline",\n "codebuddy",\n "codex",\n "command-code",\n "continue",\n "crush",\n "cursor",\n "droid",\n "gemini-cli",\n "github-copilot",\n "goose",\n "iflow-cli",\n "junie",\n "kilo",\n "kimi-cli",\n "kiro-cli",\n "kode",\n "mcpjam",\n "mistral-vibe",\n "mux",\n "neovate",\n "openclaw",\n "opencode",\n "openhands",\n "pi",\n "pochi",\n "qoder",\n "qwen-code",\n "replit",\n "roo",\n "trae",\n "trae-cn",\n "windsurf",\n "zencoder"\n ],\n "title": "Agent ID",\n "description": "Supported coding agent identifier used in `.axm/settings.json` `agents`.",\n "examples": ["claude-code", "codex", "cursor"]\n },\n "SourceName": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^[a-z0-9][a-z0-9.-]*$",\n "title": "Source Name",\n "description": "Alias used in entry source strings for this source host.",\n "examples": ["github", "my-registry.dev"]\n }\n ]\n },\n "GitHubSourceHostConfig": {\n "type": "object",\n "properties": {\n "name": { "$ref": "#/definitions/SourceName" },\n "type": { "type": "string", "enum": ["github"] },\n "url": { "type": "string" }\n },\n "required": ["name", "type", "url"],\n "additionalProperties": false,\n "title": "GitHub Source Host",\n "description": "A GitHub source host."\n },\n "GitLabSourceHostConfig": {\n "type": "object",\n "properties": {\n "name": { "$ref": "#/definitions/SourceName" },\n "type": { "type": "string", "enum": ["gitlab"] },\n "url": { "type": "string" }\n },\n "required": ["name", "type", "url"],\n "additionalProperties": false,\n "title": "GitLab Source Host",\n "description": "A GitLab source host."\n },\n "BitbucketSourceHostConfig": {\n "type": "object",\n "properties": {\n "name": { "$ref": "#/definitions/SourceName" },\n "type": { "type": "string", "enum": ["bitbucket"] },\n "url": { "type": "string" }\n },\n "required": ["name", "type", "url"],\n "additionalProperties": false,\n "title": "Bitbucket Source Host",\n "description": "A Bitbucket source host."\n },\n "AzureReposSourceHostConfig": {\n "type": "object",\n "properties": {\n "name": { "$ref": "#/definitions/SourceName" },\n "type": { "type": "string", "enum": ["azurerepos"] },\n "url": { "type": "string" }\n },\n "required": ["name", "type", "url"],\n "additionalProperties": false,\n "title": "Azure Repos Source Host",\n "description": "An Azure Repos source host."\n },\n "RegistrySourceHostConfig": {\n "type": "object",\n "properties": {\n "name": { "$ref": "#/definitions/SourceName" },\n "type": { "type": "string", "enum": ["registry"] },\n "location": { "type": "string" }\n },\n "required": ["name", "type", "location"],\n "additionalProperties": false,\n "title": "Registry Source Host",\n "description": "A package registry source host."\n },\n "SourceHostConfig": {\n "anyOf": [\n { "$ref": "#/definitions/GitHubSourceHostConfig" },\n { "$ref": "#/definitions/GitLabSourceHostConfig" },\n { "$ref": "#/definitions/BitbucketSourceHostConfig" },\n { "$ref": "#/definitions/AzureReposSourceHostConfig" },\n { "$ref": "#/definitions/RegistrySourceHostConfig" }\n ],\n "title": "Source Host Config",\n "description": "A source host configuration: GitHub, GitLab, Bitbucket, Azure Repos, or a package registry."\n },\n "SkillEntry": {\n "anyOf": [\n { "type": "string" },\n {\n "type": "object",\n "properties": {\n "source": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "FQN with optional version constraint, source-scheme ref like github:owner/repo, or local path.",\n "examples": [\n "@acme/skills/code-review@^1.0.0",\n "github:acme/agent-extensions",\n "./extensions/code-review"\n ]\n }\n ]\n },\n "enabled": {\n "type": "boolean",\n "description": "Set to false to disable this entry. Omit otherwise — true is the default and should not be written explicitly.",\n "default": true\n },\n "authored": {\n "type": "boolean",\n "description": "Set to true to mark this entry as authored locally in this workspace. Omit otherwise — false is the default and should not be written explicitly.",\n "default": false\n }\n },\n "required": ["source"],\n "additionalProperties": false,\n "title": "Skill Entry Object",\n "description": "A skill entry with source and optional enabled/authored flags."\n }\n ],\n "title": "Skill Entry",\n "description": "A skill entry: a source string, or an object with source plus optional flags.",\n "examples": [\n "@acme/skills/code-review@^1.0.0",\n { "source": "github:acme/agent-extensions", "enabled": false }\n ]\n },\n "SkillsMap": {\n "type": "object",\n "title": "Skills Map",\n "description": "A map of skill names to skill entries.",\n "propertyNames": { "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },\n "additionalProperties": { "$ref": "#/definitions/SkillEntry" }\n },\n "SkillsConfig": {\n "type": "object",\n "properties": {\n "ignore": {\n "type": "array",\n "description": "Installed skill names AXM should leave unmanaged.",\n "examples": [["local-*", "legacy-helper"]],\n "items": { "type": "string" }\n }\n },\n "additionalProperties": false,\n "title": "Skills Config",\n "description": "Feature-level configuration for skills."\n },\n "CommandEntry": {\n "anyOf": [\n { "type": "string" },\n {\n "type": "object",\n "properties": {\n "source": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "FQN with optional version constraint, source-scheme ref like github:owner/repo, or local path.",\n "examples": [\n "@acme/commands/code-review@^1.0.0",\n "github:acme/agent-extensions",\n "./extensions/code-review"\n ]\n }\n ]\n },\n "enabled": {\n "type": "boolean",\n "description": "Set to false to disable this entry. Omit otherwise — true is the default and should not be written explicitly.",\n "default": true\n },\n "authored": {\n "type": "boolean",\n "description": "Set to true to mark this entry as authored locally in this workspace. Omit otherwise — false is the default and should not be written explicitly.",\n "default": false\n }\n },\n "required": ["source"],\n "additionalProperties": false,\n "title": "Command Entry Object",\n "description": "A command entry with source and optional enabled/authored flags."\n }\n ],\n "title": "Command Entry",\n "description": "A command entry: a source string, or an object with source plus optional flags.",\n "examples": [\n "@acme/commands/code-review@^1.0.0",\n { "source": "github:acme/agent-extensions", "enabled": false }\n ]\n },\n "CommandsMap": {\n "type": "object",\n "title": "Commands Map",\n "description": "A map of command names to command entries.",\n "propertyNames": { "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },\n "additionalProperties": { "$ref": "#/definitions/CommandEntry" }\n },\n "CommandsConfig": {\n "type": "object",\n "properties": {\n "ignore": {\n "type": "array",\n "description": "Installed command names AXM should leave unmanaged.",\n "examples": [["local-*", "legacy-helper"]],\n "items": { "type": "string" }\n }\n },\n "additionalProperties": false,\n "title": "Commands Config",\n "description": "Feature-level configuration for commands."\n },\n "SubagentEntry": {\n "anyOf": [\n { "type": "string" },\n {\n "type": "object",\n "properties": {\n "source": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "FQN with optional version constraint, source-scheme ref like github:owner/repo, or local path.",\n "examples": [\n "@acme/subagents/code-review@^1.0.0",\n "github:acme/agent-extensions",\n "./extensions/code-review"\n ]\n }\n ]\n },\n "enabled": {\n "type": "boolean",\n "description": "Set to false to disable this entry. Omit otherwise — true is the default and should not be written explicitly.",\n "default": true\n },\n "authored": {\n "type": "boolean",\n "description": "Set to true to mark this entry as authored locally in this workspace. Omit otherwise — false is the default and should not be written explicitly.",\n "default": false\n }\n },\n "required": ["source"],\n "additionalProperties": false,\n "title": "Subagent Entry Object",\n "description": "A subagent entry with source and optional enabled/authored flags."\n }\n ],\n "title": "Subagent Entry",\n "description": "A subagent entry: a source string, or an object with source plus optional flags.",\n "examples": [\n "@acme/subagents/reviewer@^1.0.0",\n { "source": "github:acme/agent-extensions", "enabled": false }\n ]\n },\n "SubagentsMap": {\n "type": "object",\n "title": "Subagents Map",\n "description": "A map of subagent names to subagent entries.",\n "propertyNames": { "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },\n "additionalProperties": { "$ref": "#/definitions/SubagentEntry" }\n },\n "SubagentsConfig": {\n "type": "object",\n "properties": {\n "ignore": {\n "type": "array",\n "description": "Installed subagent names AXM should leave unmanaged.",\n "examples": [["local-*", "legacy-helper"]],\n "items": { "type": "string" }\n }\n },\n "additionalProperties": false,\n "title": "Subagents Config",\n "description": "Feature-level configuration for subagents."\n },\n "PackEntry": {\n "anyOf": [\n { "type": "string" },\n {\n "type": "object",\n "properties": {\n "source": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "FQN with optional version constraint, source-scheme ref like github:owner/repo, or local path.",\n "examples": [\n "@acme/packs/code-review@^1.0.0",\n "github:acme/agent-extensions",\n "./extensions/code-review"\n ]\n }\n ]\n },\n "authored": {\n "type": "boolean",\n "description": "Set to true to mark this entry as authored locally in this workspace. Omit otherwise — false is the default and should not be written explicitly.",\n "default": false\n }\n },\n "required": ["source"],\n "additionalProperties": false,\n "title": "Pack Entry Object",\n "description": "A pack entry with source and optional authored flag."\n }\n ],\n "title": "Pack Entry",\n "description": "A pack entry: a source string, or an object with source plus optional authored flag.",\n "examples": [\n "@acme/packs/typescript@^1.0.0",\n { "source": "github:acme/agent-extensions", "authored": true }\n ]\n },\n "PacksMap": {\n "type": "object",\n "title": "Packs Map",\n "description": "A map of pack names to pack entries.",\n "propertyNames": { "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },\n "additionalProperties": { "$ref": "#/definitions/PackEntry" }\n },\n "PacksConfig": {\n "type": "object",\n "properties": {\n "ignore": {\n "type": "array",\n "description": "Installed pack names AXM should leave unmanaged.",\n "examples": [["local-*", "legacy-helper"]],\n "items": { "type": "string" }\n }\n },\n "additionalProperties": false,\n "title": "Packs Config",\n "description": "Feature-level configuration for packs."\n },\n "McpServerEntry": {\n "anyOf": [\n { "type": "string" },\n {\n "type": "object",\n "properties": {\n "source": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "FQN with optional version constraint, source-scheme ref like github:owner/repo, or local path.",\n "examples": [\n "@acme/mcp-servers/code-review@^1.0.0",\n "github:acme/agent-extensions",\n "./extensions/code-review"\n ]\n }\n ]\n },\n "authored": {\n "type": "boolean",\n "description": "Set to true to mark this entry as authored locally in this workspace. Omit otherwise — false is the default and should not be written explicitly.",\n "default": false\n }\n },\n "required": ["source"],\n "additionalProperties": false,\n "title": "MCP Server Entry Object",\n "description": "An MCP server entry with source and optional authored flag."\n }\n ],\n "title": "MCP Server Entry",\n "description": "An MCP server entry: a source string, or an object with source plus optional authored flag.",\n "examples": [\n "@acme/mcp-servers/context@^1.0.0",\n { "source": "github:acme/agent-extensions", "authored": true }\n ]\n },\n "McpServersMap": {\n "type": "object",\n "title": "MCP Servers Map",\n "description": "A map of MCP server names to MCP server entries.",\n "propertyNames": { "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$" },\n "additionalProperties": { "$ref": "#/definitions/McpServerEntry" }\n },\n "McpServersConfig": {\n "type": "object",\n "properties": {\n "ignore": {\n "type": "array",\n "description": "Installed MCP server names AXM should leave unmanaged.",\n "examples": [["local-*", "legacy-helper"]],\n "items": { "type": "string" }\n }\n },\n "additionalProperties": false,\n "title": "MCP Servers Config",\n "description": "Feature-level configuration for MCP servers."\n },\n "LintRuleSeverity": {\n "type": "string",\n "enum": ["off", "info", "warn", "error"],\n "title": "Lint Rule Severity",\n "description": "Severity override for a lint rule: \'off\' silences it, \'info\'/\'warn\'/\'error\' raise or lower severity."\n },\n "LintConfig": {\n "type": "object",\n "properties": {\n "rules": {\n "type": "object",\n "additionalProperties": { "$ref": "#/definitions/LintRuleSeverity" },\n "title": "Lint Rules Map",\n "description": "Map of exact <namespace>/<name> rule ids to severity overrides for `axm lint`."\n }\n },\n "additionalProperties": false,\n "title": "Lint Config",\n "description": "Lint configuration under `lint` in `.axm/settings.json`."\n },\n "AxmSettings": {\n "type": "object",\n "properties": {\n "$schema": {\n "type": "string",\n "description": "URL to the AXM settings JSON Schema. Editors use this to provide autocomplete and validation.",\n "examples": ["https://axm.sh/schemas/settings.schema.json"]\n },\n "telemetry": {\n "anyOf": [{ "$ref": "#/definitions/TelemetryMode" }],\n "description": "Workspace telemetry mode: full, errors-only, or disabled."\n },\n "owner": {\n "anyOf": [{ "$ref": "#/definitions/Handle" }],\n "description": "Default owner handle used when AXM scaffolds or resolves workspace extensions."\n },\n "agents": {\n "type": "array",\n "description": "Coding agents AXM should sync managed extensions into.",\n "examples": [["claude-code", "codex"]],\n "allOf": [{ "uniqueItems": true }],\n "items": { "$ref": "#/definitions/AgentId" }\n },\n "sources": {\n "type": "array",\n "description": "Named source hosts used to resolve source-scheme entry references.",\n "items": { "$ref": "#/definitions/SourceHostConfig" }\n },\n "skills": {\n "anyOf": [{ "$ref": "#/definitions/SkillsMap" }],\n "description": "Your installed skills, keyed by workspace skill name. Prefer plain source strings; use the object form only to set `enabled: false` or `authored: true`, and never write `enabled: true` or `authored: false` explicitly."\n },\n "skillsConfig": {\n "anyOf": [{ "$ref": "#/definitions/SkillsConfig" }],\n "description": "Feature-level options for skill management."\n },\n "commands": {\n "anyOf": [{ "$ref": "#/definitions/CommandsMap" }],\n "description": "Your installed commands, keyed by workspace command name. Prefer plain source strings; use the object form only to set `enabled: false` or `authored: true`, and never write `enabled: true` or `authored: false` explicitly."\n },\n "commandsConfig": {\n "anyOf": [{ "$ref": "#/definitions/CommandsConfig" }],\n "description": "Feature-level options for command management."\n },\n "subagents": {\n "anyOf": [{ "$ref": "#/definitions/SubagentsMap" }],\n "description": "Your installed subagents, keyed by workspace subagent name. Prefer plain source strings; use the object form only to set `enabled: false` or `authored: true`, and never write `enabled: true` or `authored: false` explicitly."\n },\n "subagentsConfig": {\n "anyOf": [{ "$ref": "#/definitions/SubagentsConfig" }],\n "description": "Feature-level options for subagent management."\n },\n "packs": {\n "anyOf": [{ "$ref": "#/definitions/PacksMap" }],\n "description": "Your installed packs, keyed by workspace pack name. Prefer plain source strings; use the object form only to set `authored: true`, and never write `authored: false` explicitly. Pack entries do not support `enabled` yet."\n },\n "packsConfig": {\n "anyOf": [{ "$ref": "#/definitions/PacksConfig" }],\n "description": "Feature-level options for pack management."\n },\n "mcpServers": {\n "anyOf": [{ "$ref": "#/definitions/McpServersMap" }],\n "description": "Your installed MCP servers, keyed by workspace MCP server name. Prefer plain source strings; use the object form only to set `authored: true`, and never write `authored: false` explicitly. MCP server entries do not support `enabled` yet."\n },\n "mcpServersConfig": {\n "anyOf": [{ "$ref": "#/definitions/McpServersConfig" }],\n "description": "Feature-level options for MCP server management."\n },\n "lint": {\n "anyOf": [{ "$ref": "#/definitions/LintConfig" }],\n "description": "Lint configuration for `axm lint` in this workspace."\n }\n },\n "additionalProperties": false,\n "title": "AXM Settings",\n "description": "Your workspace configuration — owner, sources, installed extensions, feature config, and lint config.",\n "examples": [\n {\n "telemetry": "errors",\n "agents": ["claude-code", "codex"],\n "skills": {\n "code-review": "@acme/skills/code-review@^1.0.0",\n "legacy-rules": { "source": "@acme/skills/legacy-rules@^1.0.0", "enabled": false }\n },\n "skillsConfig": { "ignore": ["local-*"] },\n "lint": { "rules": { "workspace/settings-schema-valid": "error" } }\n }\n ]\n }\n }\n}\n```\n\n## Anatomy\n\n`owner` is the default handle AXM uses when creating or resolving workspace-owned extensions.\n\n`agents` lists the coding agents AXM syncs into. `sources` names registries and source hosts that entries can reference.\n\nExtension entries live under `skills`, `commands`, `subagents`, `packs`, and `mcpServers`. Each entry can be a source string or an object with metadata such as `enabled` or `authored`.\n\nPrefer the plain source string. Use the object form only when you need to depart from the defaults — set `enabled: false` to disable an entry, or `authored: true` to mark it as locally authored. Never write `enabled: true` or `authored: false` explicitly; those are the defaults and should be omitted.\n\n```jsonc\n{\n "skills": {\n "code-review": "@acme/skills/code-review@^1.0.0",\n "legacy-rules": { "source": "@acme/skills/legacy-rules@^1.0.0", "enabled": false },\n "house-style": { "source": "./skills/house-style", "authored": true },\n },\n}\n```\n\nFeature config lives under `skillsConfig`, `commandsConfig`, `subagentsConfig`, `packsConfig`, and `mcpServersConfig`.\n\n`lint` configures workspace-only severity overrides for `axm lint`.\n\n## Authoring\n\nLet AXM edit settings for routine install, remove, enable, disable, and source changes. Hand-edit settings when reviewing generated changes, adding source hosts, or adjusting `lint.rules`.\n\nSet `authored: true` only for extensions you expect to edit in this workspace. Omit `authored` otherwise — `false` is the default and should not be written explicitly. Likewise, omit `enabled` unless you are disabling an entry with `enabled: false`.\n\n## Ignoring Extensions\n\nUse each feature\'s `ignore` list to leave matching pre-existing extensions unmanaged. Ignored extensions are not pruned or reconciled by AXM.\n\n## Where to go next\n\n- `axm help basic-usage` — workspace file overview\n- `axm help skills` — working with skills\n- `axm help commands` — working with slash commands\n- `axm help subagents` — working with subagents\n- `axm help packs` — working with packs\n',
|
|
24
|
-
skills: '# Skills\n\nSkill packages live in `./.axm/extensions/<@owner>/skills/<skill-name>`.\n\n## skill.json\n\n[`skill.json`](https://axm.sh/schemas/skill.schema.json)\n\n### Schema\n\n```json\n{\n "$schema": "http://json-schema.org/draft-07/schema#",\n "$ref": "#/definitions/SkillManifest",\n "definitions": {\n "Handle": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?$",\n "title": "Handle",\n "description": "A unique username or organization name starting with @, like @my-org.",\n "examples": ["@my-org", "@username"]\n }\n ]\n },\n "Version": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?$",\n "title": "Version",\n "description": "A semver version like 1.0.0. Ranges are not allowed here.",\n "examples": ["1.0.0", "2.3.1", "0.1.0-beta.1"]\n }\n ]\n },\n "Repository": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review", "github:acme/code-review"],\n "format": "uri-reference"\n },\n {\n "type": "object",\n "properties": {\n "type": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Version control system (e.g., `git`).",\n "examples": ["git"]\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "url": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Repository URL.",\n "examples": ["https://github.com/acme/code-review"],\n "format": "uri"\n }\n ]\n },\n "directory": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Subdirectory within the repository, for monorepo publishers.",\n "examples": ["packages/code-review"]\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "required": ["url"],\n "additionalProperties": false\n }\n ],\n "title": "Repository",\n "description": "Source repository for this extension. Accepts a URL string (or `host:owner/repo` shorthand) or an object with `type`, `url`, and optional `directory`."\n },\n "Bugs": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n },\n {\n "type": "object",\n "properties": {\n "url": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Issue tracker URL.",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "email": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Contact email for bug reports.",\n "examples": ["bugs@acme.dev"],\n "format": "email"\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "additionalProperties": false\n }\n ],\n "title": "Bugs",\n "description": "Where to report bugs against this extension. Accepts a URL string or an object with optional `url` and `email`."\n },\n "Author": {\n "type": "object",\n "properties": {\n "name": { "type": "string" },\n "email": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] }\n },\n "required": ["name"],\n "additionalProperties": false,\n "title": "Author",\n "description": "A person credited as a creator or maintainer of this extension."\n },\n "PackageIdentityPurl": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\\\/.+$",\n "title": "Package Identity Purl",\n "description": "A Package URL (purl) identity for a companion package. Companion package purls are identities, not pins: omit the purl @version segment and put compatibility constraints in versionRange.",\n "examples": ["pkg:npm/react", "pkg:pypi/requests", "pkg:cargo/serde"]\n }\n ]\n },\n "VersRange": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "examples": ["vers:npm/>=18.0.0|<19.0.0", "vers:pypi/>=2.31.0", "vers:cargo/>=1.0.0"]\n }\n ]\n },\n "CompanionPackage": {\n "type": "object",\n "properties": {\n "purl": { "$ref": "#/definitions/PackageIdentityPurl" },\n "versionRange": { "anyOf": [{ "$ref": "#/definitions/VersRange" }, { "type": "null" }] }\n },\n "required": ["purl"],\n "additionalProperties": false,\n "title": "Companion Package",\n "description": "A companion package purl identity with an optional VERS compatibility range."\n },\n "PackSpec": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^(@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?)\\\\/packs\\\\/([a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?)(?:@.+)?$",\n "title": "Pack Spec",\n "description": "Pack reference with an optional version constraint suffix.",\n "examples": ["@acme/packs/typescript", "@acme/packs/typescript@^1.0.0"]\n }\n ]\n },\n "ExtensionName": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",\n "title": "Extension Name",\n "description": "Short name for this skill within its owner namespace. Combined with owner, forms the FQN @owner/skills/<name>.",\n "examples": ["my-skill", "code-review", "prettier"]\n }\n ]\n },\n "SkillManifest": {\n "type": "object",\n "properties": {\n "$schema": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "owner": { "$ref": "#/definitions/Handle" },\n "version": { "$ref": "#/definitions/Version" },\n "description": {\n "anyOf": [\n {\n "type": "string",\n "description": "Short, registry-facing summary of this extension shown in listings and search results."\n },\n { "type": "null" }\n ]\n },\n "keywords": {\n "anyOf": [\n {\n "type": "array",\n "examples": [["lint", "typescript", "review"]],\n "items": { "type": "string", "allOf": [{ "minLength": 1 }] }\n },\n { "type": "null" }\n ]\n },\n "repository": { "anyOf": [{ "$ref": "#/definitions/Repository" }, { "type": "null" }] },\n "homepage": {\n "anyOf": [\n { "type": "string", "examples": ["https://acme.dev/code-review"], "format": "uri" },\n { "type": "null" }\n ]\n },\n "license": {\n "anyOf": [\n {\n "type": "string",\n "title": "License",\n "description": "SPDX license expression, or `UNLICENSED` for proprietary code.",\n "examples": ["MIT", "Apache-2.0", "MIT OR Apache-2.0", "UNLICENSED"],\n "format": "spdx-expression"\n },\n { "type": "null" }\n ]\n },\n "bugs": { "anyOf": [{ "$ref": "#/definitions/Bugs" }, { "type": "null" }] },\n "authors": {\n "anyOf": [\n { "type": "array", "items": { "$ref": "#/definitions/Author" } },\n { "type": "null" }\n ]\n },\n "companionPackages": {\n "anyOf": [\n {\n "type": "array",\n "description": "External ecosystem packages this extension is designed to work with, declared as identity Package URLs with optional VERS compatibility ranges.",\n "items": { "$ref": "#/definitions/CompanionPackage" }\n },\n { "type": "null" }\n ]\n },\n "recommendedPacks": {\n "anyOf": [\n {\n "type": "array",\n "description": "Packs this extension is designed to work alongside. Each entry is a pack spec, optionally pinned to a version range.",\n "items": { "$ref": "#/definitions/PackSpec" }\n },\n { "type": "null" }\n ]\n },\n "standalone": {\n "anyOf": [\n {\n "type": "boolean",\n "description": "Set to false to indicate this extension only makes sense when installed alongside one of its recommendedPacks.",\n "default": true\n },\n { "type": "null" }\n ]\n },\n "type": { "type": "string", "enum": ["skill"] },\n "name": { "$ref": "#/definitions/ExtensionName" }\n },\n "required": ["owner", "version", "type", "name"],\n "additionalProperties": false,\n "title": "Skill Manifest",\n "description": "Extension manifest file for skill. Carries the registry-facing identity, version, and metadata."\n }\n }\n}\n```\n\n## `src/`\n\nThe `src/` directory holds `SKILL.md` and any other files described by the [agentskills.io](https://agentskills.io) specification.\n\n`SKILL.md` is Markdown with YAML frontmatter. Only `name` is required, and it must match both the manifest\'s `name` and the skill directory name. Everything else in the frontmatter passes through verbatim to the rendered agent file.\n\n## Authoring and editing skills\n\nThe contents of `src/` are symlinked by AXM into each configured agent\'s skill directory, so you do not need to run `axm sync` after an edit. Run `axm sync` only if symlinks or copies are broken.\n\n## Where to go next\n\n- `axm skills --help` — full skill subcommand surface\n- `axm help packs` — bundling skill extensions with extension packs\n',
|
|
25
|
-
subagents: '# Subagents\n\nSubagent packages live in `./.axm/extensions/<@owner>/subagents/<subagent-name>`.\n\nA subagent is two coordinated files: a portable manifest plus a content file that holds the system prompt and any agent-facing frontmatter.\n\n## subagent.json\n\n[`subagent.json`](https://axm.sh/schemas/subagent.schema.json)\n\nTargeting is workspace-owned through `.axm/settings.json` `agents`; publish rejects manifest `agents`. The manifest does not carry per-agent behavior — that lives in the content file.\n\n### Schema\n\n```json\n{\n "$schema": "http://json-schema.org/draft-07/schema#",\n "$ref": "#/definitions/SubagentManifest",\n "definitions": {\n "Handle": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?$",\n "title": "Handle",\n "description": "A unique username or organization name starting with @, like @my-org.",\n "examples": ["@my-org", "@username"]\n }\n ]\n },\n "Version": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?$",\n "title": "Version",\n "description": "A semver version like 1.0.0. Ranges are not allowed here.",\n "examples": ["1.0.0", "2.3.1", "0.1.0-beta.1"]\n }\n ]\n },\n "Repository": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review", "github:acme/code-review"],\n "format": "uri-reference"\n },\n {\n "type": "object",\n "properties": {\n "type": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Version control system (e.g., `git`).",\n "examples": ["git"]\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "url": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Repository URL.",\n "examples": ["https://github.com/acme/code-review"],\n "format": "uri"\n }\n ]\n },\n "directory": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Subdirectory within the repository, for monorepo publishers.",\n "examples": ["packages/code-review"]\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "required": ["url"],\n "additionalProperties": false\n }\n ],\n "title": "Repository",\n "description": "Source repository for this extension. Accepts a URL string (or `host:owner/repo` shorthand) or an object with `type`, `url`, and optional `directory`."\n },\n "Bugs": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n },\n {\n "type": "object",\n "properties": {\n "url": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Issue tracker URL.",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "email": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Contact email for bug reports.",\n "examples": ["bugs@acme.dev"],\n "format": "email"\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "additionalProperties": false\n }\n ],\n "title": "Bugs",\n "description": "Where to report bugs against this extension. Accepts a URL string or an object with optional `url` and `email`."\n },\n "Author": {\n "type": "object",\n "properties": {\n "name": { "type": "string" },\n "email": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] }\n },\n "required": ["name"],\n "additionalProperties": false,\n "title": "Author",\n "description": "A person credited as a creator or maintainer of this extension."\n },\n "PackageIdentityPurl": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\\\/.+$",\n "title": "Package Identity Purl",\n "description": "A Package URL (purl) identity for a companion package. Companion package purls are identities, not pins: omit the purl @version segment and put compatibility constraints in versionRange.",\n "examples": ["pkg:npm/react", "pkg:pypi/requests", "pkg:cargo/serde"]\n }\n ]\n },\n "VersRange": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "examples": ["vers:npm/>=18.0.0|<19.0.0", "vers:pypi/>=2.31.0", "vers:cargo/>=1.0.0"]\n }\n ]\n },\n "CompanionPackage": {\n "type": "object",\n "properties": {\n "purl": { "$ref": "#/definitions/PackageIdentityPurl" },\n "versionRange": { "anyOf": [{ "$ref": "#/definitions/VersRange" }, { "type": "null" }] }\n },\n "required": ["purl"],\n "additionalProperties": false,\n "title": "Companion Package",\n "description": "A companion package purl identity with an optional VERS compatibility range."\n },\n "PackSpec": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^(@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?)\\\\/packs\\\\/([a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?)(?:@.+)?$",\n "title": "Pack Spec",\n "description": "Pack reference with an optional version constraint suffix.",\n "examples": ["@acme/packs/typescript", "@acme/packs/typescript@^1.0.0"]\n }\n ]\n },\n "ExtensionName": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",\n "title": "Extension Name",\n "description": "Short name for this subagent within its owner namespace. Combined with owner, forms the FQN @owner/subagents/<name>.",\n "examples": ["my-skill", "code-review", "prettier"]\n }\n ]\n },\n "SubagentManifest": {\n "type": "object",\n "properties": {\n "$schema": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "owner": { "$ref": "#/definitions/Handle" },\n "version": { "$ref": "#/definitions/Version" },\n "description": {\n "anyOf": [\n {\n "type": "string",\n "description": "Short, registry-facing summary of this extension shown in listings and search results."\n },\n { "type": "null" }\n ]\n },\n "keywords": {\n "anyOf": [\n {\n "type": "array",\n "examples": [["lint", "typescript", "review"]],\n "items": { "type": "string", "allOf": [{ "minLength": 1 }] }\n },\n { "type": "null" }\n ]\n },\n "repository": { "anyOf": [{ "$ref": "#/definitions/Repository" }, { "type": "null" }] },\n "homepage": {\n "anyOf": [\n { "type": "string", "examples": ["https://acme.dev/code-review"], "format": "uri" },\n { "type": "null" }\n ]\n },\n "license": {\n "anyOf": [\n {\n "type": "string",\n "title": "License",\n "description": "SPDX license expression, or `UNLICENSED` for proprietary code.",\n "examples": ["MIT", "Apache-2.0", "MIT OR Apache-2.0", "UNLICENSED"],\n "format": "spdx-expression"\n },\n { "type": "null" }\n ]\n },\n "bugs": { "anyOf": [{ "$ref": "#/definitions/Bugs" }, { "type": "null" }] },\n "authors": {\n "anyOf": [\n { "type": "array", "items": { "$ref": "#/definitions/Author" } },\n { "type": "null" }\n ]\n },\n "companionPackages": {\n "anyOf": [\n {\n "type": "array",\n "description": "External ecosystem packages this extension is designed to work with, declared as identity Package URLs with optional VERS compatibility ranges.",\n "items": { "$ref": "#/definitions/CompanionPackage" }\n },\n { "type": "null" }\n ]\n },\n "recommendedPacks": {\n "anyOf": [\n {\n "type": "array",\n "description": "Packs this extension is designed to work alongside. Each entry is a pack spec, optionally pinned to a version range.",\n "items": { "$ref": "#/definitions/PackSpec" }\n },\n { "type": "null" }\n ]\n },\n "standalone": {\n "anyOf": [\n {\n "type": "boolean",\n "description": "Set to false to indicate this extension only makes sense when installed alongside one of its recommendedPacks.",\n "default": true\n },\n { "type": "null" }\n ]\n },\n "type": { "type": "string", "enum": ["subagent"] },\n "name": { "$ref": "#/definitions/ExtensionName" }\n },\n "required": ["owner", "version", "type", "name"],\n "additionalProperties": false,\n "title": "Subagent Manifest",\n "description": "Extension manifest file for subagent. Carries the registry-facing identity, version, and metadata."\n }\n }\n}\n```\n\n## `src/`\n\nThe `src/` directory holds `<subagent-name>.md` — Markdown with YAML frontmatter and a body containing the system prompt.\n\nOnly one frontmatter field is required: `name`. Everything else you write in the frontmatter passes through verbatim into the rendered agent-native file. AXM does not interpret or reshape it.\n\nPut fields that every target agent understands at the top level. Put agent-specific fields under `agentOverrides.<agent-id>` so they only render for that agent. See each agent\'s official subagent documentation for the supported fields.\n\n```markdown\n---\nname: code-reviewer\ndescription: "call me uncle bob"\nagentOverrides:\n claude-code:\n model: claude-opus-4-6\n codex:\n model: gpt-5-codex\n sandbox_mode: read-only\n description: null\n---\n\nYou are a senior code reviewer...\n```\n\n`name` must match both the manifest\'s `name` and the filename stem.\n\n## Pass-through rendering\n\n`axm install` and `axm sync` translate the content file\'s frontmatter into each target agent\'s native format and place the body in the format\'s natural slot:\n\n- **Markdown + YAML** (Claude Code, Copilot, Cursor, Gemini CLI, OpenCode, Augment, Junie, Kilo Code, Kiro IDE) — frontmatter keys → YAML; body follows the `---` block.\n- **TOML** (Codex) — frontmatter keys → TOML key-value lines; body becomes `developer_instructions`.\n- **JSON** (Kiro CLI) — frontmatter keys → JSON object; body becomes `prompt`.\n- **Roo modes** (Roo Code) — `slug` and `name` are set to the subagent name; the body splits at the first blank line into `roleDefinition` and `customInstructions`; `groups` defaults to `[read, edit, command, mcp]` if not in frontmatter; other frontmatter keys flow through.\n\nWhatever you write in your frontmatter is what shows up in the rendered file. If you want different values for different agents, use `agentOverrides`. Do not edit the rendered subagents directly.\n\n## Agent overrides\n\n`agentOverrides.<agent-id>` is the one recognized convention key in frontmatter. It is consumed by the renderer and never appears in the rendered output. Each entry is applied as an RFC 7396 JSON Merge Patch on top of the rendered fields for that agent: objects merge recursively, `null` deletes a key, arrays replace wholesale, and primitive values replace.\n\n```yaml\nagentOverrides:\n claude-code:\n permissions:\n write: false\n legacyMode: null\n allowedTools:\n - Read\n - Grep\n codex:\n sandbox_mode: workspace-write\n```\n\nOverrides for agents not in your configured `agents` set are ignored, with a warning.\n\n## Updating subagents\n\nEdit the content file under `src/`. `axm sync` re-renders the agent-native files from the content file\'s frontmatter and body; it does not write to `subagent.json`.\n\nRun `axm subagents publish` to release a new version. Publish validates the manifest, checks that `src/<subagent-name>.md` exists and that its frontmatter `name` matches the manifest, then zips the extension directory, computes its SRI integrity hash, and uploads the version to the target registry. Publish never edits `subagent.json` — whatever is on disk is what gets shipped.\n\n## Where to go next\n\n- `axm subagents --help` — full subagent subcommand surface\n- `axm help packs` — bundling subagent extensions with extension packs\n',
|
|
24
|
+
skills: '# Skills\n\nSkill packages live in `./.axm/extensions/<@owner>/skills/<skill-name>`.\n\n## skill.json\n\n[`skill.json`](https://axm.sh/schemas/skill.schema.json)\n\n### Schema\n\n```json\n{\n "$schema": "http://json-schema.org/draft-07/schema#",\n "$ref": "#/definitions/SkillManifest",\n "definitions": {\n "Handle": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?$",\n "title": "Handle",\n "description": "A unique username or organization name starting with @, like @my-org.",\n "examples": ["@my-org", "@username"]\n }\n ]\n },\n "Version": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?$",\n "title": "Version",\n "description": "A semver version like 1.0.0. Ranges are not allowed here.",\n "examples": ["1.0.0", "2.3.1", "0.1.0-beta.1"]\n }\n ]\n },\n "Repository": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review", "github:acme/code-review"],\n "format": "uri-reference"\n },\n {\n "type": "object",\n "properties": {\n "type": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Version control system (e.g., `git`).",\n "examples": ["git"]\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "url": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Repository URL.",\n "examples": ["https://github.com/acme/code-review"],\n "format": "uri"\n }\n ]\n },\n "directory": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Subdirectory within the repository, for monorepo publishers.",\n "examples": ["packages/code-review"]\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "required": ["url"],\n "additionalProperties": false\n }\n ],\n "title": "Repository",\n "description": "Source repository for this extension. Accepts a URL string (or `host:owner/repo` shorthand) or an object with `type`, `url`, and optional `directory`."\n },\n "Bugs": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n },\n {\n "type": "object",\n "properties": {\n "url": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Issue tracker URL.",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "email": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Contact email for bug reports.",\n "examples": ["bugs@acme.dev"],\n "format": "email"\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "additionalProperties": false\n }\n ],\n "title": "Bugs",\n "description": "Where to report bugs against this extension. Accepts a URL string or an object with optional `url` and `email`."\n },\n "Author": {\n "type": "object",\n "properties": {\n "name": { "type": "string" },\n "email": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] }\n },\n "required": ["name"],\n "additionalProperties": false,\n "title": "Author",\n "description": "A person credited as a creator or maintainer of this extension."\n },\n "PackageIdentityPurl": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\\\/.+$",\n "title": "Package Identity Purl",\n "description": "A Package URL (purl) identity for a companion package. Companion package purls are identities, not pins: omit the purl @version segment and put compatibility constraints in versionRange.",\n "examples": ["pkg:npm/react", "pkg:pypi/requests", "pkg:cargo/serde"]\n }\n ]\n },\n "VersRange": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "examples": ["vers:npm/>=18.0.0|<19.0.0", "vers:pypi/>=2.31.0", "vers:cargo/>=1.0.0"]\n }\n ]\n },\n "CompanionPackage": {\n "type": "object",\n "properties": {\n "purl": { "$ref": "#/definitions/PackageIdentityPurl" },\n "versionRange": { "anyOf": [{ "$ref": "#/definitions/VersRange" }, { "type": "null" }] }\n },\n "required": ["purl"],\n "additionalProperties": false,\n "title": "Companion Package",\n "description": "A companion package purl identity with an optional VERS compatibility range."\n },\n "PackSpec": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^(@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?)\\\\/packs\\\\/([a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?)(?:@.+)?$",\n "title": "Pack Spec",\n "description": "Pack reference with an optional version constraint suffix.",\n "examples": ["@acme/packs/typescript", "@acme/packs/typescript@^1.0.0"]\n }\n ]\n },\n "ExtensionName": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",\n "title": "Extension Name",\n "description": "Short name for this skill within its owner namespace. Combined with owner, forms the FQN @owner/skills/<name>.",\n "examples": ["my-skill", "code-review", "prettier"]\n }\n ]\n },\n "SkillManifest": {\n "type": "object",\n "properties": {\n "$schema": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "owner": { "$ref": "#/definitions/Handle" },\n "version": { "$ref": "#/definitions/Version" },\n "description": {\n "anyOf": [\n {\n "type": "string",\n "description": "Short, registry-facing summary of this extension shown in listings and search results."\n },\n { "type": "null" }\n ]\n },\n "keywords": {\n "anyOf": [\n {\n "type": "array",\n "examples": [["lint", "typescript", "review"]],\n "items": { "type": "string", "allOf": [{ "minLength": 1 }] }\n },\n { "type": "null" }\n ]\n },\n "repository": { "anyOf": [{ "$ref": "#/definitions/Repository" }, { "type": "null" }] },\n "homepage": {\n "anyOf": [\n { "type": "string", "examples": ["https://acme.dev/code-review"], "format": "uri" },\n { "type": "null" }\n ]\n },\n "license": {\n "anyOf": [\n {\n "type": "string",\n "title": "License",\n "description": "SPDX license expression, or `UNLICENSED` for proprietary code.",\n "examples": ["MIT", "Apache-2.0", "MIT OR Apache-2.0", "UNLICENSED"],\n "format": "spdx-expression"\n },\n { "type": "null" }\n ]\n },\n "bugs": { "anyOf": [{ "$ref": "#/definitions/Bugs" }, { "type": "null" }] },\n "authors": {\n "anyOf": [\n { "type": "array", "items": { "$ref": "#/definitions/Author" } },\n { "type": "null" }\n ]\n },\n "packages": {\n "anyOf": [\n {\n "type": "array",\n "description": "External ecosystem packages this extension is designed to work with, declared as identity Package URLs with optional VERS compatibility ranges.",\n "items": { "$ref": "#/definitions/CompanionPackage" }\n },\n { "type": "null" }\n ]\n },\n "recommendedPacks": {\n "anyOf": [\n {\n "type": "array",\n "description": "Packs this extension is designed to work alongside. Each entry is a pack spec, optionally pinned to a version range.",\n "items": { "$ref": "#/definitions/PackSpec" }\n },\n { "type": "null" }\n ]\n },\n "standalone": {\n "anyOf": [\n {\n "type": "boolean",\n "description": "Set to false to indicate this extension only makes sense when installed alongside one of its recommendedPacks.",\n "default": true\n },\n { "type": "null" }\n ]\n },\n "type": { "type": "string", "enum": ["skill"] },\n "name": { "$ref": "#/definitions/ExtensionName" }\n },\n "required": ["owner", "version", "type", "name"],\n "additionalProperties": false,\n "title": "Skill Manifest",\n "description": "Extension manifest file for skill. Carries the registry-facing identity, version, and metadata."\n }\n }\n}\n```\n\n## `src/`\n\nThe `src/` directory holds `SKILL.md` and any other files described by the [agentskills.io](https://agentskills.io) specification.\n\n`SKILL.md` is Markdown with YAML frontmatter. Only `name` is required, and it must match both the manifest\'s `name` and the skill directory name. Everything else in the frontmatter passes through verbatim to the rendered agent file.\n\n## Authoring and editing skills\n\nThe contents of `src/` are symlinked by AXM into each configured agent\'s skill directory, so you do not need to run `axm sync` after an edit. Run `axm sync` only if symlinks or copies are broken.\n\n## Where to go next\n\n- `axm skills --help` — full skill subcommand surface\n- `axm help packs` — bundling skill extensions with extension packs\n',
|
|
25
|
+
subagents: '# Subagents\n\nSubagent packages live in `./.axm/extensions/<@owner>/subagents/<subagent-name>`.\n\nA subagent is two coordinated files: a portable manifest plus a content file that holds the system prompt and any agent-facing frontmatter.\n\n## subagent.json\n\n[`subagent.json`](https://axm.sh/schemas/subagent.schema.json)\n\nTargeting is workspace-owned through `.axm/settings.json` `agents`; publish rejects manifest `agents`. The manifest does not carry per-agent behavior — that lives in the content file.\n\n### Schema\n\n```json\n{\n "$schema": "http://json-schema.org/draft-07/schema#",\n "$ref": "#/definitions/SubagentManifest",\n "definitions": {\n "Handle": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?$",\n "title": "Handle",\n "description": "A unique username or organization name starting with @, like @my-org.",\n "examples": ["@my-org", "@username"]\n }\n ]\n },\n "Version": {\n "type": "string",\n "allOf": [\n {\n "pattern": "^(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)\\\\.(0|[1-9]\\\\d*)(?:-((?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\\\.(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\\\+([0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*))?$",\n "title": "Version",\n "description": "A semver version like 1.0.0. Ranges are not allowed here.",\n "examples": ["1.0.0", "2.3.1", "0.1.0-beta.1"]\n }\n ]\n },\n "Repository": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review", "github:acme/code-review"],\n "format": "uri-reference"\n },\n {\n "type": "object",\n "properties": {\n "type": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Version control system (e.g., `git`).",\n "examples": ["git"]\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "url": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Repository URL.",\n "examples": ["https://github.com/acme/code-review"],\n "format": "uri"\n }\n ]\n },\n "directory": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Subdirectory within the repository, for monorepo publishers.",\n "examples": ["packages/code-review"]\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "required": ["url"],\n "additionalProperties": false\n }\n ],\n "title": "Repository",\n "description": "Source repository for this extension. Accepts a URL string (or `host:owner/repo` shorthand) or an object with `type`, `url`, and optional `directory`."\n },\n "Bugs": {\n "anyOf": [\n {\n "type": "string",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n },\n {\n "type": "object",\n "properties": {\n "url": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Issue tracker URL.",\n "examples": ["https://github.com/acme/code-review/issues"],\n "format": "uri"\n }\n ]\n },\n { "type": "null" }\n ]\n },\n "email": {\n "anyOf": [\n {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "description": "Contact email for bug reports.",\n "examples": ["bugs@acme.dev"],\n "format": "email"\n }\n ]\n },\n { "type": "null" }\n ]\n }\n },\n "additionalProperties": false\n }\n ],\n "title": "Bugs",\n "description": "Where to report bugs against this extension. Accepts a URL string or an object with optional `url` and `email`."\n },\n "Author": {\n "type": "object",\n "properties": {\n "name": { "type": "string" },\n "email": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "url": { "anyOf": [{ "type": "string" }, { "type": "null" }] }\n },\n "required": ["name"],\n "additionalProperties": false,\n "title": "Author",\n "description": "A person credited as a creator or maintainer of this extension."\n },\n "PackageIdentityPurl": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[Pp][Kk][Gg]:[a-zA-Z][a-zA-Z0-9.+-]*\\\\/.+$",\n "title": "Package Identity Purl",\n "description": "A Package URL (purl) identity for a companion package. Companion package purls are identities, not pins: omit the purl @version segment and put compatibility constraints in versionRange.",\n "examples": ["pkg:npm/react", "pkg:pypi/requests", "pkg:cargo/serde"]\n }\n ]\n },\n "VersRange": {\n "type": "string",\n "allOf": [\n {\n "minLength": 1,\n "examples": ["vers:npm/>=18.0.0|<19.0.0", "vers:pypi/>=2.31.0", "vers:cargo/>=1.0.0"]\n }\n ]\n },\n "CompanionPackage": {\n "type": "object",\n "properties": {\n "purl": { "$ref": "#/definitions/PackageIdentityPurl" },\n "versionRange": { "anyOf": [{ "$ref": "#/definitions/VersRange" }, { "type": "null" }] }\n },\n "required": ["purl"],\n "additionalProperties": false,\n "title": "Companion Package",\n "description": "A companion package purl identity with an optional VERS compatibility range."\n },\n "PackSpec": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^(@[a-z0-9_](?:[a-z0-9_-]*[a-z0-9_])?)\\\\/packs\\\\/([a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?)(?:@.+)?$",\n "title": "Pack Spec",\n "description": "Pack reference with an optional version constraint suffix.",\n "examples": ["@acme/packs/typescript", "@acme/packs/typescript@^1.0.0"]\n }\n ]\n },\n "ExtensionName": {\n "type": "string",\n "allOf": [\n { "minLength": 1 },\n {\n "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",\n "title": "Extension Name",\n "description": "Short name for this subagent within its owner namespace. Combined with owner, forms the FQN @owner/subagents/<name>.",\n "examples": ["my-skill", "code-review", "prettier"]\n }\n ]\n },\n "SubagentManifest": {\n "type": "object",\n "properties": {\n "$schema": { "anyOf": [{ "type": "string" }, { "type": "null" }] },\n "owner": { "$ref": "#/definitions/Handle" },\n "version": { "$ref": "#/definitions/Version" },\n "description": {\n "anyOf": [\n {\n "type": "string",\n "description": "Short, registry-facing summary of this extension shown in listings and search results."\n },\n { "type": "null" }\n ]\n },\n "keywords": {\n "anyOf": [\n {\n "type": "array",\n "examples": [["lint", "typescript", "review"]],\n "items": { "type": "string", "allOf": [{ "minLength": 1 }] }\n },\n { "type": "null" }\n ]\n },\n "repository": { "anyOf": [{ "$ref": "#/definitions/Repository" }, { "type": "null" }] },\n "homepage": {\n "anyOf": [\n { "type": "string", "examples": ["https://acme.dev/code-review"], "format": "uri" },\n { "type": "null" }\n ]\n },\n "license": {\n "anyOf": [\n {\n "type": "string",\n "title": "License",\n "description": "SPDX license expression, or `UNLICENSED` for proprietary code.",\n "examples": ["MIT", "Apache-2.0", "MIT OR Apache-2.0", "UNLICENSED"],\n "format": "spdx-expression"\n },\n { "type": "null" }\n ]\n },\n "bugs": { "anyOf": [{ "$ref": "#/definitions/Bugs" }, { "type": "null" }] },\n "authors": {\n "anyOf": [\n { "type": "array", "items": { "$ref": "#/definitions/Author" } },\n { "type": "null" }\n ]\n },\n "packages": {\n "anyOf": [\n {\n "type": "array",\n "description": "External ecosystem packages this extension is designed to work with, declared as identity Package URLs with optional VERS compatibility ranges.",\n "items": { "$ref": "#/definitions/CompanionPackage" }\n },\n { "type": "null" }\n ]\n },\n "recommendedPacks": {\n "anyOf": [\n {\n "type": "array",\n "description": "Packs this extension is designed to work alongside. Each entry is a pack spec, optionally pinned to a version range.",\n "items": { "$ref": "#/definitions/PackSpec" }\n },\n { "type": "null" }\n ]\n },\n "standalone": {\n "anyOf": [\n {\n "type": "boolean",\n "description": "Set to false to indicate this extension only makes sense when installed alongside one of its recommendedPacks.",\n "default": true\n },\n { "type": "null" }\n ]\n },\n "type": { "type": "string", "enum": ["subagent"] },\n "name": { "$ref": "#/definitions/ExtensionName" }\n },\n "required": ["owner", "version", "type", "name"],\n "additionalProperties": false,\n "title": "Subagent Manifest",\n "description": "Extension manifest file for subagent. Carries the registry-facing identity, version, and metadata."\n }\n }\n}\n```\n\n## `src/`\n\nThe `src/` directory holds `<subagent-name>.md` — Markdown with YAML frontmatter and a body containing the system prompt.\n\nOnly one frontmatter field is required: `name`. Everything else you write in the frontmatter passes through verbatim into the rendered agent-native file. AXM does not interpret or reshape it.\n\nPut fields that every target agent understands at the top level. Put agent-specific fields under `agentOverrides.<agent-id>` so they only render for that agent. See each agent\'s official subagent documentation for the supported fields.\n\n```markdown\n---\nname: code-reviewer\ndescription: "call me uncle bob"\nagentOverrides:\n claude-code:\n model: claude-opus-4-6\n codex:\n model: gpt-5-codex\n sandbox_mode: read-only\n description: null\n---\n\nYou are a senior code reviewer...\n```\n\n`name` must match both the manifest\'s `name` and the filename stem.\n\n## Pass-through rendering\n\n`axm install` and `axm sync` translate the content file\'s frontmatter into each target agent\'s native format and place the body in the format\'s natural slot:\n\n- **Markdown + YAML** (Claude Code, Copilot, Cursor, Gemini CLI, OpenCode, Augment, Junie, Kilo Code, Kiro IDE) — frontmatter keys → YAML; body follows the `---` block.\n- **TOML** (Codex) — frontmatter keys → TOML key-value lines; body becomes `developer_instructions`.\n- **JSON** (Kiro CLI) — frontmatter keys → JSON object; body becomes `prompt`.\n- **Roo modes** (Roo Code) — `slug` and `name` are set to the subagent name; the body splits at the first blank line into `roleDefinition` and `customInstructions`; `groups` defaults to `[read, edit, command, mcp]` if not in frontmatter; other frontmatter keys flow through.\n\nWhatever you write in your frontmatter is what shows up in the rendered file. If you want different values for different agents, use `agentOverrides`. Do not edit the rendered subagents directly.\n\n## Agent overrides\n\n`agentOverrides.<agent-id>` is the one recognized convention key in frontmatter. It is consumed by the renderer and never appears in the rendered output. Each entry is applied as an RFC 7396 JSON Merge Patch on top of the rendered fields for that agent: objects merge recursively, `null` deletes a key, arrays replace wholesale, and primitive values replace.\n\n```yaml\nagentOverrides:\n claude-code:\n permissions:\n write: false\n legacyMode: null\n allowedTools:\n - Read\n - Grep\n codex:\n sandbox_mode: workspace-write\n```\n\nOverrides for agents not in your configured `agents` set are ignored, with a warning.\n\n## Updating subagents\n\nEdit the content file under `src/`. `axm sync` re-renders the agent-native files from the content file\'s frontmatter and body; it does not write to `subagent.json`.\n\nRun `axm subagents publish` to release a new version. Publish validates the manifest, checks that `src/<subagent-name>.md` exists and that its frontmatter `name` matches the manifest, then zips the extension directory, computes its SRI integrity hash, and uploads the version to the target registry. Publish never edits `subagent.json` — whatever is on disk is what gets shipped.\n\n## Where to go next\n\n- `axm subagents --help` — full subagent subcommand surface\n- `axm help packs` — bundling subagent extensions with extension packs\n',
|
|
26
26
|
};
|
|
27
27
|
//# sourceMappingURL=help-topics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help-topics.js","sourceRoot":"","sources":["../../../src/__generated__/help-topics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,aAAa;IACb,UAAU;IACV,YAAY;IACZ,iBAAiB;IACjB,oBAAoB;IACpB,OAAO;IACP,UAAU;IACV,QAAQ;IACR,WAAW;CACH,CAAC;AAIX,MAAM,CAAC,MAAM,WAAW,GAAkC;IACxD,aAAa,EACX,y8GAAy8G;IAC38G,QAAQ,EACN,
|
|
1
|
+
{"version":3,"file":"help-topics.js","sourceRoot":"","sources":["../../../src/__generated__/help-topics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,aAAa;IACb,UAAU;IACV,YAAY;IACZ,iBAAiB;IACjB,oBAAoB;IACpB,OAAO;IACP,UAAU;IACV,QAAQ;IACR,WAAW;CACH,CAAC;AAIX,MAAM,CAAC,MAAM,WAAW,GAAkC;IACxD,aAAa,EACX,y8GAAy8G;IAC38G,QAAQ,EACN,09ZAA09Z;IAC59Z,YAAY,EACV,g5FAAg5F;IACl5F,iBAAiB,EACf,6lEAA6lE;IAC/lE,oBAAoB,EAClB,yzOAAyzO;IAC3zO,KAAK,EACH,u9XAAu9X;IACz9X,QAAQ,EACN,4qwBAA4qwB;IAC9qwB,MAAM,EACJ,2iWAA2iW;IAC7iW,SAAS,EACP,k7bAAk7b;CACr7b,CAAC"}
|
package/dist/src/app.d.ts
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
* Root CLI application.
|
|
3
3
|
*/
|
|
4
4
|
import { Command } from "effect/unstable/cli";
|
|
5
|
-
export declare const rootCommand: Command.Command<"axm", {}, {}, never, import("packages/core/dist/src/unstable/auth/device-login.js").DeviceLoginInteraction>;
|
|
5
|
+
export declare const rootCommand: Command.Command<"axm", {}, {}, never, import("packages/core/dist/src/unstable/auth/device-login.js").DeviceLoginInteraction | import("packages/core/dist/src/unstable/auth/login-interaction.js").AuthLoginInteraction>;
|
|
6
6
|
export declare const run: (args?: ReadonlyArray<string>) => Promise<void>;
|
|
7
7
|
//# sourceMappingURL=app.d.ts.map
|
package/dist/src/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAa,OAAO,EAAc,MAAM,qBAAqB,CAAC;AAiDrE,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAa,OAAO,EAAc,MAAM,qBAAqB,CAAC;AAiDrE,eAAO,MAAM,WAAW,yNAgDvB,CAAC;AAWF,eAAO,MAAM,GAAG,GAAU,OAAM,aAAa,CAAC,MAAM,CAAyB,KAAG,OAAO,CAAC,IAAI,CA+B3F,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
2
|
import * as Schema from "effect/Schema";
|
|
3
3
|
import { CliRenderer } from "@agentxm/client-core/unstable/cli-renderer";
|
|
4
|
-
import type {
|
|
4
|
+
import type { SuggestedAction, CommandOutcomeSummary, SourceKind, SubjectType } from "@agentxm/client-core/unstable/cli-runtime";
|
|
5
5
|
import type { PlanResolution } from "@agentxm/client-core/unstable/plan";
|
|
6
6
|
export declare const PlanResolutionResultSchema: Schema.Struct<{
|
|
7
7
|
readonly outcome: Schema.Literals<readonly ["previewed", "cancelled", "applied", "no-op"]>;
|
|
@@ -29,8 +29,8 @@ export type PlanResolutionResult = typeof PlanResolutionResultSchema.Type;
|
|
|
29
29
|
export declare const toPlanResolutionResult: (resolution: PlanResolution) => PlanResolutionResult;
|
|
30
30
|
export declare const emitPlanResolutionResult: <TCommand extends string>(command: TCommand, resolution: PlanResolution, options?: {
|
|
31
31
|
readonly summary?: string;
|
|
32
|
-
readonly
|
|
33
|
-
readonly
|
|
32
|
+
readonly suggestions?: ReadonlyArray<SuggestedAction>;
|
|
33
|
+
readonly withoutSuggestions?: boolean;
|
|
34
34
|
}) => Effect.Effect<boolean, never, CliRenderer>;
|
|
35
35
|
/**
|
|
36
36
|
* Convert a PlanResolution to a CommandOutcomeSummary for telemetry.
|
|
@@ -44,7 +44,7 @@ export declare const emitNoOpResult: <TCommand extends string>(command: TCommand
|
|
|
44
44
|
readonly planName: string;
|
|
45
45
|
readonly planDescription?: string;
|
|
46
46
|
readonly message: string;
|
|
47
|
-
readonly
|
|
48
|
-
readonly
|
|
47
|
+
readonly suggestions?: ReadonlyArray<SuggestedAction>;
|
|
48
|
+
readonly withoutSuggestions?: boolean;
|
|
49
49
|
}) => Effect.Effect<boolean, never, CliRenderer>;
|
|
50
50
|
//# sourceMappingURL=json-output.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-output.d.ts","sourceRoot":"","sources":["../../src/json-output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"json-output.d.ts","sourceRoot":"","sources":["../../src/json-output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,UAAU,EACV,WAAW,EACZ,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAGV,cAAc,EAEf,MAAM,oCAAoC,CAAC;AAkC5C,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;EAsBrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,0BAA0B,CAAC,IAAI,CAAC;AAkD1E,eAAO,MAAM,sBAAsB,GAAI,YAAY,cAAc,KAAG,oBA8CnE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,SAAS,MAAM,EAC9D,SAAS,QAAQ,EACjB,YAAY,cAAc,EAC1B,UAAU;IACR,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACtD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC,+CASC,CAAC;AAEL;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAClC,YAAY,cAAc,EAC1B,SAAS;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;CAAE,KAChF,qBAUF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,QAAQ,SAAS,MAAM,EACpD,SAAS,QAAQ,EACjB,MAAM;IACJ,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACtD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC,+CAgCF,CAAC"}
|
package/dist/src/json-output.js
CHANGED
|
@@ -155,9 +155,9 @@ export const planResolutionToSummary = (resolution, context) => {
|
|
|
155
155
|
};
|
|
156
156
|
export const emitNoOpResult = (command, args) => {
|
|
157
157
|
const options = {
|
|
158
|
-
...(args.
|
|
159
|
-
...(args.
|
|
160
|
-
? {
|
|
158
|
+
...(args.suggestions !== undefined ? { suggestions: args.suggestions } : {}),
|
|
159
|
+
...(args.withoutSuggestions !== undefined
|
|
160
|
+
? { withoutSuggestions: args.withoutSuggestions }
|
|
161
161
|
: {}),
|
|
162
162
|
};
|
|
163
163
|
return Effect.gen(function* () {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Command } from "effect/unstable/cli";
|
|
2
|
-
export declare const authCommand: Command.Command<"auth", {}, {}, never, "effect/unstable/cli/GlobalFlag/axm-non-interactive" | import("packages/core/dist/src/unstable/auth/device-login.js").DeviceLoginInteraction | "effect/unstable/cli/GlobalFlag/axm-json" | "effect/unstable/cli/GlobalFlag/axm-quiet" | "effect/unstable/cli/GlobalFlag/axm-verbose" | "effect/unstable/cli/GlobalFlag/axm-debug">;
|
|
2
|
+
export declare const authCommand: Command.Command<"auth", {}, {}, never, "effect/unstable/cli/GlobalFlag/axm-non-interactive" | import("packages/core/dist/src/unstable/auth/device-login.js").DeviceLoginInteraction | import("packages/core/dist/src/unstable/auth/login-interaction.js").AuthLoginInteraction | "effect/unstable/cli/GlobalFlag/axm-json" | "effect/unstable/cli/GlobalFlag/axm-quiet" | "effect/unstable/cli/GlobalFlag/axm-verbose" | "effect/unstable/cli/GlobalFlag/axm-debug">;
|
|
3
3
|
//# sourceMappingURL=_auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_auth.d.ts","sourceRoot":"","sources":["../../../../src/root/auth/_auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAO9C,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"_auth.d.ts","sourceRoot":"","sources":["../../../../src/root/auth/_auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAO9C,eAAO,MAAM,WAAW,scAQvB,CAAC"}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
2
|
import { Command, Prompt } from "effect/unstable/cli";
|
|
3
|
-
import { AuthClient, RegistryUrl, CredentialStore, type LoopbackCallbackRejected, type LoopbackLoginFallback } from "@agentxm/client-core/unstable/auth";
|
|
3
|
+
import { AuthClient, RegistryUrl, CredentialStore, type LoopbackCallbackRejected, type LoopbackLoginFallback, type RunDeviceLoginOptions, type RunLoopbackLoginOptions } from "@agentxm/client-core/unstable/auth";
|
|
4
4
|
import { CliRenderer } from "@agentxm/client-core/unstable/cli-renderer";
|
|
5
5
|
import { type AppError } from "@agentxm/client-core/unstable/app-error";
|
|
6
6
|
import type { PromptCancelled } from "@agentxm/client-core/unstable/prompt-cancelled";
|
|
7
7
|
interface LoginInteractions {
|
|
8
8
|
readonly confirmRelogin?: (message: string) => Effect.Effect<boolean, PromptCancelled | AppError>;
|
|
9
|
-
readonly runLoopbackLogin?: (registryUrl: string) => Effect.Effect<void, AppError | LoopbackLoginFallback | LoopbackCallbackRejected>;
|
|
10
|
-
readonly runDeviceLogin?: (registryUrl: string, options?:
|
|
11
|
-
readonly openBrowser?: boolean;
|
|
12
|
-
}) => Effect.Effect<void, AppError>;
|
|
9
|
+
readonly runLoopbackLogin?: (registryUrl: string, options?: RunLoopbackLoginOptions) => Effect.Effect<void, AppError | LoopbackLoginFallback | LoopbackCallbackRejected>;
|
|
10
|
+
readonly runDeviceLogin?: (registryUrl: string, options?: RunDeviceLoginOptions) => Effect.Effect<void, AppError>;
|
|
13
11
|
}
|
|
14
12
|
export declare const handleLogin: (options: {
|
|
15
|
-
yes: boolean;
|
|
16
|
-
deviceCode: boolean;
|
|
17
|
-
noBrowser: boolean;
|
|
13
|
+
readonly yes: boolean;
|
|
14
|
+
readonly deviceCode: boolean;
|
|
15
|
+
readonly noBrowser: boolean;
|
|
16
|
+
readonly scopes: ReadonlyArray<string>;
|
|
18
17
|
}, interactions?: LoginInteractions | undefined) => Effect.Effect<void, AppError | PromptCancelled, CliRenderer | Prompt.Environment | "effect/unstable/cli/GlobalFlag/axm-non-interactive" | RegistryUrl | CredentialStore | AuthClient | import("@agentxm/client-core/unstable/auth").DeviceLoginInteraction>;
|
|
19
18
|
export declare const loginCommand: Command.Command<"login", Record<string, unknown>, {}, never, "effect/unstable/cli/GlobalFlag/axm-non-interactive" | import("@agentxm/client-core/unstable/auth").DeviceLoginInteraction | "effect/unstable/cli/GlobalFlag/axm-json" | "effect/unstable/cli/GlobalFlag/axm-quiet" | "effect/unstable/cli/GlobalFlag/axm-verbose" | "effect/unstable/cli/GlobalFlag/axm-debug">;
|
|
20
19
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../../src/root/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,UAAU,EACV,WAAW,EACX,eAAe,EAKf,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../../src/root/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,UAAU,EACV,WAAW,EACX,eAAe,EAKf,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC7B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAGzE,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAItF,UAAU,iBAAiB;IACzB,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAAC,CAAC;IAClG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAC1B,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,uBAAuB,KAC9B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,qBAAqB,GAAG,wBAAwB,CAAC,CAAC;IACtF,QAAQ,CAAC,cAAc,CAAC,EAAE,CACxB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,qBAAqB,KAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;CACpC;AA2BD,eAAO,MAAM,WAAW;kBAEN,OAAO;yBACA,OAAO;wBACR,OAAO;qBACV,aAAa,CAAC,MAAM,CAAC;+SAqEzB,CAAC;AAkBlB,eAAO,MAAM,YAAY,+WAkBxB,CAAC"}
|