@agentxm/client-core 0.4.1 → 0.4.3
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/README.md +11 -0
- package/package.json +51 -45
- package/site-content/install.md +241 -79
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# @agentxm/client-core
|
|
2
|
+
|
|
3
|
+
> ⚠️ **Unstable, unsupported library.** This package exists to support the
|
|
4
|
+
> [`axm.sh`](https://www.npmjs.com/package/axm.sh) CLI. Its APIs live under
|
|
5
|
+
> `./unstable/*` and can change or disappear in any release without notice.
|
|
6
|
+
>
|
|
7
|
+
> **Use the [`axm.sh`](https://www.npmjs.com/package/axm.sh) CLI instead.**
|
|
8
|
+
>
|
|
9
|
+
> See https://axm.sh.
|
|
10
|
+
|
|
11
|
+
MIT © 2025-2026 AgentXM, Inc.
|
package/package.json
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentxm/client-core",
|
|
3
|
-
"version": "0.4.
|
|
4
|
-
"description": "Core library for the axm agent extension manager",
|
|
3
|
+
"version": "0.4.3",
|
|
4
|
+
"description": "Core library for the axm agent extension manager. Unstable and unsupported — use the axm.sh CLI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
|
+
"homepage": "https://axm.sh",
|
|
8
|
+
"bugs": {
|
|
9
|
+
"url": "https://github.com/agentxm/axm/issues"
|
|
10
|
+
},
|
|
11
|
+
"author": "AgentXM <hello@agentxm.ai> (https://agentxm.ai)",
|
|
7
12
|
"repository": {
|
|
8
13
|
"type": "git",
|
|
9
14
|
"url": "https://github.com/agentxm/axm.git",
|
|
@@ -11,175 +16,176 @@
|
|
|
11
16
|
},
|
|
12
17
|
"exports": {
|
|
13
18
|
"./unstable/app-error": {
|
|
14
|
-
"types": "./src/unstable/app-error/index.ts",
|
|
19
|
+
"types": "./dist/src/unstable/app-error/index.d.ts",
|
|
15
20
|
"default": "./dist/src/unstable/app-error/index.js"
|
|
16
21
|
},
|
|
17
22
|
"./unstable/prompt-cancelled": {
|
|
18
|
-
"types": "./src/unstable/cli-prompt/prompt-cancelled.ts",
|
|
23
|
+
"types": "./dist/src/unstable/cli-prompt/prompt-cancelled.d.ts",
|
|
19
24
|
"default": "./dist/src/unstable/cli-prompt/prompt-cancelled.js"
|
|
20
25
|
},
|
|
21
26
|
"./unstable/version-constraints": {
|
|
22
|
-
"types": "./src/unstable/version-constraints/version-constraints.ts",
|
|
27
|
+
"types": "./dist/src/unstable/version-constraints/version-constraints.d.ts",
|
|
23
28
|
"default": "./dist/src/unstable/version-constraints/version-constraints.js"
|
|
24
29
|
},
|
|
25
30
|
"./unstable/branding": {
|
|
26
|
-
"types": "./src/unstable/branding.ts",
|
|
31
|
+
"types": "./dist/src/unstable/branding.d.ts",
|
|
27
32
|
"default": "./dist/src/unstable/branding.js"
|
|
28
33
|
},
|
|
29
34
|
"./unstable/date-time": {
|
|
30
|
-
"types": "./src/unstable/date-time.ts",
|
|
35
|
+
"types": "./dist/src/unstable/date-time.d.ts",
|
|
31
36
|
"default": "./dist/src/unstable/date-time.js"
|
|
32
37
|
},
|
|
33
38
|
"./unstable/utils": {
|
|
34
|
-
"types": "./src/unstable/utils/index.ts",
|
|
39
|
+
"types": "./dist/src/unstable/utils/index.d.ts",
|
|
35
40
|
"default": "./dist/src/unstable/utils/index.js"
|
|
36
41
|
},
|
|
37
42
|
"./unstable/agents": {
|
|
38
|
-
"types": "./src/unstable/agents/index.ts",
|
|
43
|
+
"types": "./dist/src/unstable/agents/index.d.ts",
|
|
39
44
|
"default": "./dist/src/unstable/agents/index.js"
|
|
40
45
|
},
|
|
41
46
|
"./unstable/extensions": {
|
|
42
|
-
"types": "./src/unstable/extensions/index.ts",
|
|
47
|
+
"types": "./dist/src/unstable/extensions/index.d.ts",
|
|
43
48
|
"default": "./dist/src/unstable/extensions/index.js"
|
|
44
49
|
},
|
|
45
50
|
"./unstable/extensions/common": {
|
|
46
|
-
"types": "./src/unstable/extensions/common.ts",
|
|
51
|
+
"types": "./dist/src/unstable/extensions/common.d.ts",
|
|
47
52
|
"default": "./dist/src/unstable/extensions/common.js"
|
|
48
53
|
},
|
|
49
54
|
"./unstable/extensions/fqn": {
|
|
50
|
-
"types": "./src/unstable/extensions/fqn.ts",
|
|
55
|
+
"types": "./dist/src/unstable/extensions/fqn.d.ts",
|
|
51
56
|
"default": "./dist/src/unstable/extensions/fqn.js"
|
|
52
57
|
},
|
|
53
58
|
"./unstable/extensions/handle": {
|
|
54
|
-
"types": "./src/unstable/extensions/handle.ts",
|
|
59
|
+
"types": "./dist/src/unstable/extensions/handle.d.ts",
|
|
55
60
|
"default": "./dist/src/unstable/extensions/handle.js"
|
|
56
61
|
},
|
|
57
62
|
"./unstable/extensions/registry-source": {
|
|
58
|
-
"types": "./src/unstable/extensions/registry-source.ts",
|
|
63
|
+
"types": "./dist/src/unstable/extensions/registry-source.d.ts",
|
|
59
64
|
"default": "./dist/src/unstable/extensions/registry-source.js"
|
|
60
65
|
},
|
|
61
66
|
"./unstable/lockfile": {
|
|
62
|
-
"types": "./src/unstable/lockfile/index.ts",
|
|
67
|
+
"types": "./dist/src/unstable/lockfile/index.d.ts",
|
|
63
68
|
"default": "./dist/src/unstable/lockfile/index.js"
|
|
64
69
|
},
|
|
65
70
|
"./unstable/schema": {
|
|
66
|
-
"types": "./src/unstable/schema/index.ts",
|
|
71
|
+
"types": "./dist/src/unstable/schema/index.d.ts",
|
|
67
72
|
"default": "./dist/src/unstable/schema/index.js"
|
|
68
73
|
},
|
|
69
74
|
"./unstable/settings": {
|
|
70
|
-
"types": "./src/unstable/settings/index.ts",
|
|
75
|
+
"types": "./dist/src/unstable/settings/index.d.ts",
|
|
71
76
|
"default": "./dist/src/unstable/settings/index.js"
|
|
72
77
|
},
|
|
73
78
|
"./unstable/sources": {
|
|
74
|
-
"types": "./src/unstable/sources/index.ts",
|
|
79
|
+
"types": "./dist/src/unstable/sources/index.d.ts",
|
|
75
80
|
"default": "./dist/src/unstable/sources/index.js"
|
|
76
81
|
},
|
|
77
82
|
"./unstable/cli-flags": {
|
|
78
|
-
"types": "./src/unstable/cli-flags/index.ts",
|
|
83
|
+
"types": "./dist/src/unstable/cli-flags/index.d.ts",
|
|
79
84
|
"default": "./dist/src/unstable/cli-flags/index.js"
|
|
80
85
|
},
|
|
81
86
|
"./unstable/cli-runtime": {
|
|
82
|
-
"types": "./src/unstable/cli-runtime/index.ts",
|
|
87
|
+
"types": "./dist/src/unstable/cli-runtime/index.d.ts",
|
|
83
88
|
"default": "./dist/src/unstable/cli-runtime/index.js"
|
|
84
89
|
},
|
|
85
90
|
"./unstable/telemetry": {
|
|
86
|
-
"types": "./src/unstable/telemetry/index.ts",
|
|
91
|
+
"types": "./dist/src/unstable/telemetry/index.d.ts",
|
|
87
92
|
"default": "./dist/src/unstable/telemetry/index.js"
|
|
88
93
|
},
|
|
89
94
|
"./unstable/cli-renderer": {
|
|
90
|
-
"types": "./src/unstable/cli-renderer/index.ts",
|
|
95
|
+
"types": "./dist/src/unstable/cli-renderer/index.d.ts",
|
|
91
96
|
"default": "./dist/src/unstable/cli-renderer/index.js"
|
|
92
97
|
},
|
|
93
98
|
"./unstable/git": {
|
|
94
|
-
"types": "./src/unstable/git/index.ts",
|
|
99
|
+
"types": "./dist/src/unstable/git/index.d.ts",
|
|
95
100
|
"default": "./dist/src/unstable/git/index.js"
|
|
96
101
|
},
|
|
97
102
|
"./unstable/registry": {
|
|
98
|
-
"types": "./src/unstable/registry/index.ts",
|
|
103
|
+
"types": "./dist/src/unstable/registry/index.d.ts",
|
|
99
104
|
"default": "./dist/src/unstable/registry/index.js"
|
|
100
105
|
},
|
|
101
106
|
"./unstable/auth": {
|
|
102
|
-
"types": "./src/unstable/auth/index.ts",
|
|
107
|
+
"types": "./dist/src/unstable/auth/index.d.ts",
|
|
103
108
|
"default": "./dist/src/unstable/auth/index.js"
|
|
104
109
|
},
|
|
105
110
|
"./unstable/plan": {
|
|
106
|
-
"types": "./src/unstable/plan/index.ts",
|
|
111
|
+
"types": "./dist/src/unstable/plan/index.d.ts",
|
|
107
112
|
"default": "./dist/src/unstable/plan/index.js"
|
|
108
113
|
},
|
|
109
114
|
"./unstable/lint": {
|
|
110
|
-
"types": "./src/unstable/lint/index.ts",
|
|
115
|
+
"types": "./dist/src/unstable/lint/index.d.ts",
|
|
111
116
|
"default": "./dist/src/unstable/lint/index.js"
|
|
112
117
|
},
|
|
113
118
|
"./unstable/workspace": {
|
|
114
|
-
"types": "./src/unstable/workspace/index.ts",
|
|
119
|
+
"types": "./dist/src/unstable/workspace/index.d.ts",
|
|
115
120
|
"default": "./dist/src/unstable/workspace/index.js"
|
|
116
121
|
},
|
|
117
122
|
"./unstable/source-resolution": {
|
|
118
|
-
"types": "./src/unstable/source-resolution/index.ts",
|
|
123
|
+
"types": "./dist/src/unstable/source-resolution/index.d.ts",
|
|
119
124
|
"default": "./dist/src/unstable/source-resolution/index.js"
|
|
120
125
|
},
|
|
121
126
|
"./unstable/skills": {
|
|
122
|
-
"types": "./src/unstable/skills/index.ts",
|
|
127
|
+
"types": "./dist/src/unstable/skills/index.d.ts",
|
|
123
128
|
"default": "./dist/src/unstable/skills/index.js"
|
|
124
129
|
},
|
|
125
130
|
"./unstable/packs": {
|
|
126
|
-
"types": "./src/unstable/packs/index.ts",
|
|
131
|
+
"types": "./dist/src/unstable/packs/index.d.ts",
|
|
127
132
|
"default": "./dist/src/unstable/packs/index.js"
|
|
128
133
|
},
|
|
129
134
|
"./unstable/commands": {
|
|
130
|
-
"types": "./src/unstable/commands/index.ts",
|
|
135
|
+
"types": "./dist/src/unstable/commands/index.d.ts",
|
|
131
136
|
"default": "./dist/src/unstable/commands/index.js"
|
|
132
137
|
},
|
|
133
138
|
"./unstable/mcp-servers": {
|
|
134
|
-
"types": "./src/unstable/mcp-servers/index.ts",
|
|
139
|
+
"types": "./dist/src/unstable/mcp-servers/index.d.ts",
|
|
135
140
|
"default": "./dist/src/unstable/mcp-servers/index.js"
|
|
136
141
|
},
|
|
137
142
|
"./unstable/workflows": {
|
|
138
|
-
"types": "./src/unstable/workflows/index.ts",
|
|
143
|
+
"types": "./dist/src/unstable/workflows/index.d.ts",
|
|
139
144
|
"default": "./dist/src/unstable/workflows/index.js"
|
|
140
145
|
},
|
|
141
146
|
"./unstable/publish": {
|
|
142
|
-
"types": "./src/unstable/publish/index.ts",
|
|
147
|
+
"types": "./dist/src/unstable/publish/index.d.ts",
|
|
143
148
|
"default": "./dist/src/unstable/publish/index.js"
|
|
144
149
|
},
|
|
145
150
|
"./unstable/site-content/schemas/*": "./site-content/__generated__/schemas/*",
|
|
146
151
|
"./unstable/site-content/*": "./site-content/*",
|
|
147
152
|
"./unstable/install-method": {
|
|
148
|
-
"types": "./src/unstable/install-method/install-method.ts",
|
|
153
|
+
"types": "./dist/src/unstable/install-method/install-method.d.ts",
|
|
149
154
|
"default": "./dist/src/unstable/install-method/install-method.js"
|
|
150
155
|
},
|
|
151
156
|
"./unstable/install-meta": {
|
|
152
|
-
"types": "./src/unstable/install-meta/install-meta.ts",
|
|
157
|
+
"types": "./dist/src/unstable/install-meta/install-meta.d.ts",
|
|
153
158
|
"default": "./dist/src/unstable/install-meta/install-meta.js"
|
|
154
159
|
},
|
|
155
160
|
"./unstable/update-check": {
|
|
156
|
-
"types": "./src/unstable/update-check/update-check.ts",
|
|
161
|
+
"types": "./dist/src/unstable/update-check/update-check.d.ts",
|
|
157
162
|
"default": "./dist/src/unstable/update-check/update-check.js"
|
|
158
163
|
},
|
|
159
164
|
"./unstable/version-resolution": {
|
|
160
|
-
"types": "./src/unstable/version-resolution/version-resolution.ts",
|
|
165
|
+
"types": "./dist/src/unstable/version-resolution/version-resolution.d.ts",
|
|
161
166
|
"default": "./dist/src/unstable/version-resolution/version-resolution.js"
|
|
162
167
|
},
|
|
163
168
|
"./unstable/packaging": {
|
|
164
|
-
"types": "./src/unstable/packaging/index.ts",
|
|
169
|
+
"types": "./dist/src/unstable/packaging/index.d.ts",
|
|
165
170
|
"default": "./dist/src/unstable/packaging/index.js"
|
|
166
171
|
},
|
|
167
172
|
"./unstable/discover": {
|
|
168
|
-
"types": "./src/unstable/discover/index.ts",
|
|
173
|
+
"types": "./dist/src/unstable/discover/index.d.ts",
|
|
169
174
|
"default": "./dist/src/unstable/discover/index.js"
|
|
170
175
|
},
|
|
171
176
|
"./unstable/subagents": {
|
|
172
|
-
"types": "./src/unstable/subagents/index.ts",
|
|
177
|
+
"types": "./dist/src/unstable/subagents/index.d.ts",
|
|
173
178
|
"default": "./dist/src/unstable/subagents/index.js"
|
|
174
179
|
},
|
|
175
180
|
"./unstable/cli/prompt": {
|
|
176
|
-
"types": "./src/unstable/cli/prompt/index.ts",
|
|
181
|
+
"types": "./dist/src/unstable/cli/prompt/index.d.ts",
|
|
177
182
|
"default": "./dist/src/unstable/cli/prompt/index.js"
|
|
178
183
|
}
|
|
179
184
|
},
|
|
180
185
|
"files": [
|
|
181
186
|
"dist/src/",
|
|
182
|
-
"site-content/"
|
|
187
|
+
"site-content/",
|
|
188
|
+
"!**/*.map"
|
|
183
189
|
],
|
|
184
190
|
"publishConfig": {
|
|
185
191
|
"access": "public"
|
|
@@ -209,6 +215,6 @@
|
|
|
209
215
|
"typescript": "^5.9.3",
|
|
210
216
|
"vitest": "^4.0.0",
|
|
211
217
|
"yaml": "^2.8.2",
|
|
212
|
-
"@agentxm/client-utils": "0.4.
|
|
218
|
+
"@agentxm/client-utils": "^0.4.3"
|
|
213
219
|
}
|
|
214
220
|
}
|
package/site-content/install.md
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
# Install axm
|
|
2
2
|
|
|
3
|
-
**DONE WHEN:** `axm --version
|
|
3
|
+
**DONE WHEN:** `axm --version` succeeds and (if the user chose workspace setup)
|
|
4
|
+
`axm setup` has completed.
|
|
4
5
|
|
|
5
6
|
---
|
|
6
7
|
|
|
7
8
|
## TODO
|
|
8
9
|
|
|
9
|
-
- [ ]
|
|
10
|
-
- [ ]
|
|
11
|
-
|
|
10
|
+
- [ ] Detect existing install (`axm --version`)
|
|
11
|
+
- [ ] If installed: `axm upgrade`. Otherwise: detect available package
|
|
12
|
+
managers (brew, npm) and pick the install method
|
|
13
|
+
- [ ] If multiple install methods are available: ask the user which to use
|
|
14
|
+
- [ ] Run the chosen installer
|
|
15
|
+
- [ ] Verify `axm --version`
|
|
16
|
+
- [ ] Check sign-in state with `axm whoami --json`
|
|
17
|
+
- [ ] If not signed in: ask the user to choose between signing in to
|
|
18
|
+
AgentXM.ai or going directly to workspace setup
|
|
19
|
+
- [ ] If the user chose to sign in: hand off signup/login, then re-check
|
|
20
|
+
`axm whoami`
|
|
21
|
+
- [ ] Run `axm setup --yes` to initialize the project workspace
|
|
12
22
|
|
|
13
23
|
---
|
|
14
24
|
|
|
@@ -16,33 +26,108 @@
|
|
|
16
26
|
|
|
17
27
|
axm is the open extension manager for AI coding agents. It lets you discover,
|
|
18
28
|
install, publish, and manage skills, commands, subagents, MCP servers, and
|
|
19
|
-
extension packs across your AI agents from a single CLI.
|
|
29
|
+
extension packs across your AI agents from a single CLI. axm is the CLI;
|
|
30
|
+
[AgentXM.ai](https://agentxm.ai) is the extension registry it connects to —
|
|
31
|
+
accounts, publishing, and extension discovery live there. An AgentXM.ai
|
|
32
|
+
account is only required for publishing extensions or installing private
|
|
33
|
+
extensions; public extensions install without an account.
|
|
20
34
|
|
|
21
|
-
##
|
|
35
|
+
## Detect existing install
|
|
22
36
|
|
|
23
|
-
|
|
24
|
-
npx is the recommended default.
|
|
37
|
+
Before installing, check whether axm is already on the machine:
|
|
25
38
|
|
|
26
|
-
|
|
39
|
+
```bash
|
|
40
|
+
axm --version
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- **Succeeds** (prints `X.Y.Z`) → axm is installed. Upgrade it to the latest
|
|
44
|
+
version and skip the Install section:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
axm upgrade
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
`axm upgrade` auto-detects how axm was installed. For script installs it
|
|
51
|
+
downloads and swaps the binary in place. For Homebrew or npm installs it
|
|
52
|
+
prints the exact command to run (`brew upgrade agentxm/tap/axm` or
|
|
53
|
+
`npm update -g axm.sh`) — run whichever it emits, then re-run
|
|
54
|
+
`axm --version`. Continue to **Verify** when done.
|
|
55
|
+
|
|
56
|
+
- **Fails** with `command not found` → axm is not installed. Continue to
|
|
57
|
+
**Install**.
|
|
58
|
+
- **Fails** with any other error → treat as not installed and reinstall via
|
|
59
|
+
the Install section.
|
|
60
|
+
|
|
61
|
+
## Choose install method
|
|
27
62
|
|
|
28
|
-
|
|
63
|
+
axm can be installed via a standalone binary script, Homebrew, or npm. Pick
|
|
64
|
+
based on what's already on the machine — don't install a new package manager
|
|
65
|
+
just to install axm.
|
|
66
|
+
|
|
67
|
+
### 1. Detect available package managers
|
|
68
|
+
|
|
69
|
+
Check which package managers are installed. A manager is "available" if the
|
|
70
|
+
`--version` command exits successfully.
|
|
71
|
+
|
|
72
|
+
On macOS / Linux:
|
|
29
73
|
|
|
30
74
|
```bash
|
|
31
|
-
|
|
75
|
+
brew --version >/dev/null 2>&1 && echo "brew: available"
|
|
76
|
+
npm --version >/dev/null 2>&1 && echo "npm: available"
|
|
32
77
|
```
|
|
33
78
|
|
|
34
|
-
|
|
79
|
+
On Windows (PowerShell):
|
|
35
80
|
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
|
|
81
|
+
```powershell
|
|
82
|
+
if (Get-Command brew -ErrorAction SilentlyContinue) { "brew: available" }
|
|
83
|
+
if (Get-Command npm -ErrorAction SilentlyContinue) { "npm: available" }
|
|
39
84
|
```
|
|
40
85
|
|
|
41
|
-
###
|
|
86
|
+
### 2. Pick the method
|
|
87
|
+
|
|
88
|
+
Use this decision table — same logic on every platform:
|
|
89
|
+
|
|
90
|
+
| Detected managers | Chosen method |
|
|
91
|
+
| ------------------------------ | ------------------------------------------------------------- |
|
|
92
|
+
| Neither | Install script (Option A on macOS/Linux, Option B on Windows) |
|
|
93
|
+
| Homebrew only | Homebrew (Option D) |
|
|
94
|
+
| npm only | npm (Option E) |
|
|
95
|
+
| Homebrew and npm (two or more) | **STOP AND ASK** the user — see the prompt below |
|
|
96
|
+
|
|
97
|
+
The install script is always a valid fallback. If a package-manager install
|
|
98
|
+
fails, retry with Option A or B.
|
|
99
|
+
|
|
100
|
+
### 3. Ask the user when multiple managers are available
|
|
42
101
|
|
|
43
|
-
|
|
102
|
+
All three options install the same axm binary. **The main difference is how
|
|
103
|
+
you'll update it later.** Frame the choice that way when asking.
|
|
44
104
|
|
|
45
|
-
**
|
|
105
|
+
**STOP HERE AND ASK THE USER:**
|
|
106
|
+
|
|
107
|
+
> Multiple install methods are available on this machine. The main
|
|
108
|
+
> difference is how you'll update axm later — pick the update path that
|
|
109
|
+
> matches how you manage other tools.
|
|
110
|
+
>
|
|
111
|
+
> 1. **Install script** (recommended) — Updates via `axm upgrade`
|
|
112
|
+
> (self-managed, independent of any package manager). Standalone binary
|
|
113
|
+
> installed to `~/.axm/bin` (macOS/Linux) or `%LOCALAPPDATA%\axm`
|
|
114
|
+
> (Windows). No extra tools required.
|
|
115
|
+
> 2. **Homebrew** — Updates via `brew upgrade agentxm/tap/axm`, alongside
|
|
116
|
+
> your other brew packages. Choose this if you already manage most CLIs
|
|
117
|
+
> with brew.
|
|
118
|
+
> 3. **npm** — Updates via `npm update -g axm.sh`, alongside your other
|
|
119
|
+
> global npm packages. Choose this if axm is part of a Node.js-heavy
|
|
120
|
+
> environment. Requires Node.js.
|
|
121
|
+
|
|
122
|
+
Wait for the user's response before continuing. Then run the corresponding
|
|
123
|
+
option below.
|
|
124
|
+
|
|
125
|
+
## Install
|
|
126
|
+
|
|
127
|
+
Each option below installs a persistent `axm` binary on the machine. Run the
|
|
128
|
+
option selected in **Choose install method**.
|
|
129
|
+
|
|
130
|
+
### Option A: macOS / Linux (install script)
|
|
46
131
|
|
|
47
132
|
```bash
|
|
48
133
|
curl -fsSL https://axm.sh/install.sh | sh
|
|
@@ -54,7 +139,7 @@ Installs to `~/.axm/bin/axm`. If `axm` is not found after install, add to PATH:
|
|
|
54
139
|
export PATH="$HOME/.axm/bin:$PATH"
|
|
55
140
|
```
|
|
56
141
|
|
|
57
|
-
|
|
142
|
+
### Option B: Windows (PowerShell)
|
|
58
143
|
|
|
59
144
|
```powershell
|
|
60
145
|
irm https://axm.sh/install.ps1 | iex
|
|
@@ -63,9 +148,7 @@ irm https://axm.sh/install.ps1 | iex
|
|
|
63
148
|
Installs to `%LOCALAPPDATA%\axm\axm.exe`. Follow the printed PATH instructions
|
|
64
149
|
if `axm` is not recognized.
|
|
65
150
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
Download and run `install.cmd` from `https://axm.sh/install.cmd`:
|
|
151
|
+
### Option C: Windows (CMD)
|
|
69
152
|
|
|
70
153
|
```cmd
|
|
71
154
|
curl -fsSL -o install.cmd https://axm.sh/install.cmd && install.cmd
|
|
@@ -74,80 +157,182 @@ curl -fsSL -o install.cmd https://axm.sh/install.cmd && install.cmd
|
|
|
74
157
|
Installs to `%LOCALAPPDATA%\axm\axm.exe`. Follow the printed PATH instructions
|
|
75
158
|
if `axm` is not recognized.
|
|
76
159
|
|
|
77
|
-
### Option
|
|
160
|
+
### Option D: Homebrew (macOS / Linux)
|
|
78
161
|
|
|
79
162
|
```bash
|
|
80
163
|
brew install agentxm/tap/axm
|
|
81
164
|
```
|
|
82
165
|
|
|
83
|
-
|
|
166
|
+
### Option E: npm (any OS with Node.js)
|
|
167
|
+
|
|
168
|
+
Installs the `axm.sh` package globally. Requires Node.js.
|
|
84
169
|
|
|
85
170
|
```bash
|
|
86
|
-
axm
|
|
87
|
-
# Expected: X.Y.Z
|
|
171
|
+
npm install -g axm.sh
|
|
88
172
|
```
|
|
89
173
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
### Non-interactive (agents, CI, scripts)
|
|
93
|
-
|
|
94
|
-
Set the `AXM_TOKEN` environment variable with a pre-provisioned token:
|
|
174
|
+
If `axm` is not found after install, ensure the npm global bin directory is on
|
|
175
|
+
PATH:
|
|
95
176
|
|
|
96
177
|
```bash
|
|
97
|
-
export
|
|
178
|
+
export PATH="$(npm config get prefix)/bin:$PATH"
|
|
98
179
|
```
|
|
99
180
|
|
|
100
|
-
|
|
101
|
-
extract a reusable token:
|
|
181
|
+
## Verify
|
|
102
182
|
|
|
103
183
|
```bash
|
|
104
|
-
|
|
184
|
+
axm --version
|
|
185
|
+
# Expected: X.Y.Z
|
|
105
186
|
```
|
|
106
187
|
|
|
107
|
-
|
|
188
|
+
---
|
|
108
189
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
190
|
+
EXECUTE NOW: Run `axm --version`. If it succeeds, run `axm upgrade`. If it
|
|
191
|
+
fails, detect available package managers per **Choose install method**, ask
|
|
192
|
+
the user if more than one is available, and run the chosen installer. Stop
|
|
193
|
+
when `axm --version` succeeds, then proceed to **Check sign-in state**.
|
|
194
|
+
|
|
195
|
+
---
|
|
112
196
|
|
|
113
|
-
|
|
197
|
+
## Check sign-in state
|
|
114
198
|
|
|
115
|
-
|
|
199
|
+
axm is installed. Before continuing, detect whether this machine is already
|
|
200
|
+
signed in to AgentXM.ai — the result decides whether to ask the user about
|
|
201
|
+
signing in or skip straight to workspace setup.
|
|
116
202
|
|
|
117
203
|
```bash
|
|
118
|
-
axm whoami
|
|
119
|
-
# Expected: displays your handle and account
|
|
204
|
+
axm whoami --json
|
|
120
205
|
```
|
|
121
206
|
|
|
122
|
-
|
|
207
|
+
- **Exit 0 with an identity** → already signed in. Skip to **Workspace setup**.
|
|
208
|
+
- **Exit non-zero** (for example, error code `AUTH_LOGIN_REQUIRED`) → not
|
|
209
|
+
signed in. Continue to **Ask the user what to do next**.
|
|
210
|
+
|
|
211
|
+
## Ask the user what to do next
|
|
212
|
+
|
|
213
|
+
This machine is not signed in to AgentXM.ai.
|
|
214
|
+
|
|
215
|
+
Before asking, tell the user why the choice matters: signing in is only
|
|
216
|
+
needed to publish extensions or install private extensions, so the workspace
|
|
217
|
+
can still be set up without it. The choice is about whether to do that
|
|
218
|
+
sign-in now or defer it.
|
|
219
|
+
|
|
220
|
+
**STOP HERE AND ASK THE USER:**
|
|
123
221
|
|
|
124
|
-
|
|
125
|
-
|
|
222
|
+
> axm is installed. Before setting up the project workspace, would you like
|
|
223
|
+
> to sign in to AgentXM.ai? Signing in is only needed if you plan to
|
|
224
|
+
> publish extensions or install private extensions — public extensions
|
|
225
|
+
> install without an account.
|
|
226
|
+
>
|
|
227
|
+
> 1. **Sign up or log in to AgentXM.ai** (recommended if you plan to
|
|
228
|
+
> publish extensions or install private extensions)
|
|
229
|
+
> 2. **Proceed to setting up your project workspace** (you can sign in
|
|
230
|
+
> later with `axm login`)
|
|
231
|
+
|
|
232
|
+
Wait for the user's response before continuing.
|
|
233
|
+
|
|
234
|
+
- **Option 1** → continue with **Sign up or log in to AgentXM.ai** below,
|
|
235
|
+
then **Workspace setup**.
|
|
236
|
+
- **Option 2** → skip to **Workspace setup**.
|
|
126
237
|
|
|
127
238
|
---
|
|
128
239
|
|
|
129
|
-
##
|
|
240
|
+
## Sign up or log in to AgentXM.ai
|
|
241
|
+
|
|
242
|
+
AgentXM.ai is the extension registry that axm connects to. Accounts live on
|
|
243
|
+
AgentXM.ai, not in the CLI — `axm login` signs this machine in to an
|
|
244
|
+
AgentXM.ai account.
|
|
245
|
+
|
|
246
|
+
### If the user does not have an AgentXM.ai account
|
|
247
|
+
|
|
248
|
+
You cannot create an account for the user. Hand off:
|
|
130
249
|
|
|
131
|
-
|
|
250
|
+
1. Tell the user to open https://agentxm.ai/signup and create an account —
|
|
251
|
+
explain that this sets up the AgentXM.ai account that `axm login` will
|
|
252
|
+
later authenticate against, and that axm can't create the account
|
|
253
|
+
because signup happens through the web.
|
|
254
|
+
2. Wait for the user to confirm signup is complete.
|
|
255
|
+
3. Continue to **Log in** below.
|
|
256
|
+
|
|
257
|
+
### Log in
|
|
258
|
+
|
|
259
|
+
Explain to the user what logging in will do before handing off: it proves
|
|
260
|
+
to AgentXM.ai that this machine belongs to their account, and stores a
|
|
261
|
+
local token so subsequent `axm` commands can reach the registry.
|
|
262
|
+
|
|
263
|
+
Offer both paths and let the user pick:
|
|
264
|
+
|
|
265
|
+
- **Interactive (recommended):** ask the user to run `axm login` in their
|
|
266
|
+
terminal. Tell them this opens a browser for a one-time OAuth device
|
|
267
|
+
flow; axm can't run it on their behalf because the browser step requires
|
|
268
|
+
them to be present.
|
|
269
|
+
- **Non-interactive:** ask the user to export `AXM_TOKEN` in the
|
|
270
|
+
environment where axm will run. Explain that `AXM_TOKEN` is a
|
|
271
|
+
pre-generated credential that skips the browser step; you must not
|
|
272
|
+
paste a token the user has not shared with you.
|
|
273
|
+
|
|
274
|
+
Wait for the user to confirm sign-in is complete. Tell them you're about to
|
|
275
|
+
re-run `axm whoami --json` to verify the sign-in succeeded before moving
|
|
276
|
+
on:
|
|
132
277
|
|
|
133
278
|
```bash
|
|
134
|
-
|
|
135
|
-
|
|
279
|
+
axm whoami --json
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
If it returns an identity, continue to **Workspace setup**. If not, the
|
|
283
|
+
sign-in did not complete — explain which check failed and ask the user to
|
|
284
|
+
retry the same path or switch paths.
|
|
285
|
+
|
|
286
|
+
---
|
|
136
287
|
|
|
137
|
-
|
|
138
|
-
axm skills install @acme/skills/code-review --yes --non-interactive
|
|
288
|
+
## Workspace setup
|
|
139
289
|
|
|
140
|
-
|
|
141
|
-
axm
|
|
290
|
+
Before running the command, tell the user what it will do to their project:
|
|
291
|
+
create `.axm/` configuration files, install default extensions (including
|
|
292
|
+
`@agentxm/skills/axm`), and register agent discovery symlinks in the
|
|
293
|
+
current working directory.
|
|
294
|
+
|
|
295
|
+
Run:
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
axm setup --yes
|
|
142
299
|
```
|
|
143
300
|
|
|
301
|
+
Once it succeeds, consult the installed `@agentxm/skills/axm` skill for
|
|
302
|
+
day-to-day operations — workspace scenarios (greenfield, brownfield,
|
|
303
|
+
unmanaged skills), extension management, and publishing.
|
|
304
|
+
|
|
305
|
+
## Invariants
|
|
306
|
+
|
|
307
|
+
- **Explain why you're asking.** Whenever you need the user's consent, input,
|
|
308
|
+
or out-of-band action — picking an install method, running `axm login`,
|
|
309
|
+
opening a signup URL, approving a command you'd otherwise run yourself —
|
|
310
|
+
state the purpose first: what you're about to do, why it's needed for
|
|
311
|
+
this install, and what the user should do next. No yes/no prompts without
|
|
312
|
+
context; no command handoffs without explaining the effect.
|
|
313
|
+
- **Never** run `axm login` without explicit user consent. The device flow
|
|
314
|
+
opens a browser and requires the user to be present. When requesting
|
|
315
|
+
consent, tell the user that `axm login` will open a browser, complete an
|
|
316
|
+
OAuth device flow with AgentXM.ai, and store a local token so axm can
|
|
317
|
+
talk to the registry on their behalf.
|
|
318
|
+
- **Never** set or paste an `AXM_TOKEN` the user has not shared. If the
|
|
319
|
+
user is providing a token, explain that it authenticates the CLI against
|
|
320
|
+
the user's AgentXM.ai account for the current shell session.
|
|
321
|
+
- **Always** re-run `axm whoami` after any user-driven sign-in step before
|
|
322
|
+
running `axm setup`. Tell the user you're verifying the sign-in succeeded
|
|
323
|
+
before moving on.
|
|
324
|
+
- **Resume, do not restart.** If the user completes sign-in out-of-band and
|
|
325
|
+
returns, skip to **Workspace setup** — do not re-ask which option they
|
|
326
|
+
picked.
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
144
330
|
## Troubleshooting
|
|
145
331
|
|
|
146
332
|
**`axm: command not found`**
|
|
147
333
|
|
|
148
334
|
The fix depends on how you installed:
|
|
149
335
|
|
|
150
|
-
- **npx:** Use `npx axm.sh` instead of `axm`. Ensure Node.js is installed.
|
|
151
336
|
- **Install script (macOS/Linux):** Add `~/.axm/bin` to PATH:
|
|
152
337
|
```bash
|
|
153
338
|
export PATH="$HOME/.axm/bin:$PATH"
|
|
@@ -160,30 +345,7 @@ The fix depends on how you installed:
|
|
|
160
345
|
$env:Path = "$env:LOCALAPPDATA\axm;$env:Path"
|
|
161
346
|
```
|
|
162
347
|
- **Homebrew:** Run `brew link axm` or check `brew --prefix axm`.
|
|
163
|
-
- **npm
|
|
348
|
+
- **npm:** Ensure the global npm bin directory is on PATH:
|
|
164
349
|
```bash
|
|
165
350
|
export PATH="$(npm config get prefix)/bin:$PATH"
|
|
166
351
|
```
|
|
167
|
-
|
|
168
|
-
**Not authenticated / `AUTH_LOGIN_REQUIRED`**
|
|
169
|
-
|
|
170
|
-
```bash
|
|
171
|
-
axm auth login
|
|
172
|
-
# Or for non-interactive: export AXM_TOKEN=<token>
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
**Wrong account**
|
|
176
|
-
|
|
177
|
-
```bash
|
|
178
|
-
axm auth logout && axm auth login
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**Registry unreachable**
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
# Check connectivity to the default registry
|
|
185
|
-
curl -sf https://registry.agentxm.ai/v1/health || echo "Registry unreachable"
|
|
186
|
-
# Or override the built-in default source for development/testing:
|
|
187
|
-
export AXM_REGISTRY_LOCATION=http://localhost:4300
|
|
188
|
-
# AXM_REGISTRY_LOCATION may also be a file path or file:// URL
|
|
189
|
-
```
|