allagents 1.0.11 → 1.0.14

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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 EntityProcess
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 EntityProcess
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,471 +1,471 @@
1
- # AllAgents
2
-
3
- CLI tool for managing multi-repo AI agent workspaces with plugin synchronization across multiple AI clients.
4
-
5
- ## Why AllAgents?
6
-
7
- **The Problem:** AI coding assistants (Claude, Copilot, Cursor, Codex, etc.) each have their own configuration formats and directory structures. If you want to share skills across multiple projects or use multiple AI clients, you need to manually copy and transform files.
8
-
9
- **AllAgents solves this by:**
10
-
11
- | Feature | Claude Code Plugins | AllAgents |
12
- |---------|--------------------|-----------|
13
- | Scope | Single project | Multi-repo workspace |
14
- | Client support | Claude only | 23 AI clients |
15
- | File location | Runtime lookup from cache | Copied to workspace (git-versioned) |
16
- | Project structure | AI config mixed with code | Separate workspace repo |
17
-
18
- ### Key Differentiators
19
-
20
- 1. **Multi-repo workspaces** - One workspace references multiple project repositories. Your AI tooling lives separately from your application code.
21
-
22
- 2. **Multi-client distribution** - Write plugins once, sync to all clients. AllAgents transforms and copies files to each client's expected paths.
23
-
24
- 3. **Workspace is a git repo** - Unlike Claude's runtime plugin system, AllAgents copies files into your workspace. Team members get the same AI tooling via git.
25
-
26
- 4. **Clean separation** - Project repos stay clean. AI configuration lives in the workspace.
27
-
28
- ```
29
- ┌─────────────────┐
30
- │ Marketplace │ (plugin source - GitHub repos)
31
- └────────┬────────┘
32
-
33
-
34
- ┌─────────────────┐
35
- │ AllAgents │ (sync & transform)
36
- │ workspace sync │
37
- └────────┬────────┘
38
-
39
- ┌────┴────┬────────┬─────────┐
40
- ▼ ▼ ▼ ▼
41
- .claude/ .agents/ .cursor/ .factory/ (client paths)
42
- ```
43
-
44
- ## Installation
45
-
46
- ```bash
47
- # Using npm
48
- npm install -g allagents
49
-
50
- # Or run directly without installing
51
- npx allagents
52
- ```
53
-
54
- ## Quick Start
55
-
56
- ```bash
57
- # Create a new workspace
58
- allagents workspace init my-workspace
59
- cd my-workspace
60
-
61
- # Or initialize from a remote GitHub template
62
- allagents workspace init my-workspace --from owner/repo/path/to/template
63
-
64
- # Add a marketplace (or let auto-registration handle it)
65
- allagents plugin marketplace add anthropics/claude-plugins-official
66
-
67
- # Install plugins to workspace
68
- allagents plugin install code-review@claude-plugins-official
69
- allagents plugin install my-plugin@someuser/their-repo
70
-
71
- # Sync plugins to workspace
72
- allagents workspace sync
73
- ```
74
-
75
- ### Initialize from Remote Template
76
-
77
- Start a new workspace instantly from any GitHub repository containing a `workspace.yaml`:
78
-
79
- ```bash
80
- # From GitHub URL
81
- allagents workspace init ~/my-project --from https://github.com/myorg/templates/tree/main/nodejs
82
-
83
- # From shorthand
84
- allagents workspace init ~/my-project --from myorg/templates/nodejs
85
-
86
- # From repo root (looks for .allagents/workspace.yaml or workspace.yaml)
87
- allagents workspace init ~/my-project --from myorg/templates
88
- ```
89
-
90
- This fetches the workspace configuration directly from GitHub - no cloning required.
91
-
92
- ## Commands
93
-
94
- ### Workspace Commands
95
-
96
- ```bash
97
- # Initialize a new workspace from template
98
- allagents workspace init <path>
99
- allagents workspace init <path> --from <source> # From local path or GitHub URL
100
-
101
- # Sync all plugins to workspace (non-destructive)
102
- allagents workspace sync [options]
103
- --force Force re-fetch of remote plugins even if cached
104
- --dry-run Preview changes without applying
105
-
106
- # Non-destructive sync: your files are safe
107
- # - First sync overlays without deleting existing files
108
- # - Subsequent syncs only remove files AllAgents previously synced
109
- # - Tracked in .allagents/sync-state.json
110
-
111
- # Show status of workspace and plugins
112
- allagents workspace status
113
-
114
- # Add a repository to the workspace (auto-detects git remote source)
115
- allagents workspace repo add <path>
116
- allagents workspace repo add <path> --description "My project"
117
-
118
- # Remove a repository from the workspace
119
- allagents workspace repo remove <path>
120
-
121
- # List all repositories in the workspace
122
- allagents workspace repo list
123
- ```
124
-
125
- ### VSCode Workspace Generation
126
-
127
- When `vscode` is included in the `clients` list, `workspace sync` automatically generates a `.code-workspace` file. Repository paths are resolved to absolute paths. Plugin folders are included with prompt/instruction file location settings for Copilot.
128
-
129
- ```yaml
130
- # workspace.yaml
131
- clients:
132
- - vscode
133
- - claude
134
- ```
135
-
136
- #### Output filename
137
-
138
- The output filename defaults to `<dirname>.code-workspace`. Override with `vscode.output`:
139
-
140
- ```yaml
141
- # workspace.yaml
142
- vscode:
143
- output: my-project
144
- ```
145
-
146
- #### Template file
147
-
148
- Create `.allagents/template.code-workspace` for VSCode-specific settings, launch configurations, extensions, and extra folders. The template supports `{path:../...}` placeholders that resolve to absolute paths using repository paths from workspace.yaml.
149
-
150
- ```json
151
- {
152
- "folders": [
153
- { "path": "{path:../Shared}", "name": "SharedLib" }
154
- ],
155
- "settings": {
156
- "cSpell.words": ["myterm"],
157
- "chat.agent.maxRequests": 999,
158
- "chat.useAgentSkills": true
159
- },
160
- "launch": {
161
- "configurations": [
162
- {
163
- "type": "node",
164
- "name": "dev",
165
- "cwd": "{path:../myapp}/src",
166
- "runtimeExecutable": "npm",
167
- "runtimeArgs": ["run", "dev"]
168
- }
169
- ]
170
- },
171
- "extensions": {
172
- "recommendations": ["dbaeumer.vscode-eslint"]
173
- }
174
- }
175
- ```
176
-
177
- The generated workspace includes:
178
- - Repository folders from workspace.yaml (resolved to absolute paths, listed first)
179
- - Template folders (deduplicated against repository folders)
180
- - All other template content (settings, launch, extensions) with `{repo:..}` placeholders resolved
181
-
182
- ### Plugin Marketplace Commands
183
-
184
- ```bash
185
- # List registered marketplaces
186
- allagents plugin marketplace list
187
-
188
- # Add a marketplace from GitHub or local path
189
- allagents plugin marketplace add <source>
190
- # Examples:
191
- # allagents plugin marketplace add anthropics/claude-plugins-official
192
- # allagents plugin marketplace add /path/to/local/marketplace
193
-
194
- # Remove a marketplace
195
- allagents plugin marketplace remove <name>
196
-
197
- # Update marketplace(s) from remote
198
- allagents plugin marketplace update [name]
199
- ```
200
-
201
- ### Plugin Commands
202
-
203
- ```bash
204
- # Install a plugin to .allagents/workspace.yaml (auto-registers marketplace if needed)
205
- allagents plugin install <plugin@marketplace>
206
-
207
- # Remove a plugin from .allagents/workspace.yaml
208
- allagents plugin uninstall <plugin>
209
-
210
- # List available plugins from marketplaces
211
- allagents plugin list [marketplace]
212
-
213
- # Validate a plugin or marketplace structure
214
- allagents plugin validate <path>
215
- ```
216
-
217
- ### Skills Commands
218
-
219
- ```bash
220
- # Add a specific skill from a GitHub repo
221
- allagents skills add reddit --from ReScienceLab/opc-skills
222
-
223
- # Add a skill via GitHub URL (skill name extracted from path)
224
- allagents skills add https://github.com/owner/repo/tree/main/skills/my-skill
225
-
226
- # List all skills and their enabled/disabled status
227
- allagents skills list
228
-
229
- # Disable a skill without uninstalling its plugin
230
- allagents skills remove brainstorming
231
-
232
- # Re-enable a previously disabled skill
233
- allagents skills add brainstorming
234
- ```
235
-
236
- ### GitHub Overrides
237
-
238
- For **Copilot** and **VSCode**, AllAgents copies GitHub-specific files from a plugin's `.github/` folder into the workspace's `.github/` directory:
239
-
240
- - `.github/prompts/` — prompt files
241
- - `.github/agents/` — agent overrides
242
- - `.github/hooks/` — hook overrides
243
- - `copilot-instructions.md` — root Copilot instructions
244
-
245
- Root `agents/` and `hooks/` directories in a plugin also map to `.github/agents/` and `.github/hooks/` for Copilot/VSCode.
246
-
247
- ## .allagents/workspace.yaml
248
-
249
- The workspace configuration file lives in `.allagents/workspace.yaml` and defines repositories, plugins, workspace files, and target clients:
250
-
251
- ```yaml
252
- # Workspace file sync (optional) - copy files from a shared source
253
- workspace:
254
- source: ../shared-config # Default base for relative paths
255
- files:
256
- - AGENTS.md # String shorthand: same source and dest
257
- - source: docs/guide.md # Object form: explicit source
258
- dest: GUIDE.md # Optional dest (defaults to basename)
259
- - dest: CUSTOM.md # File-level source override
260
- source: ../other-config/CUSTOM.md
261
- - dest: AGENTS.md # GitHub source
262
- source: owner/repo/path/AGENTS.md
263
-
264
- repositories:
265
- - path: ../my-project
266
- source: github
267
- repo: myorg/my-project
268
- description: Main project repository
269
- - path: ../my-api
270
- source: github
271
- repo: myorg/my-api
272
- description: API service
273
-
274
- plugins:
275
- - code-review@claude-plugins-official # plugin@marketplace format
276
- - context7@claude-plugins-official
277
- - my-plugin@someuser/their-repo # fully qualified for custom marketplaces
278
-
279
- clients:
280
- - claude
281
- - copilot
282
- - cursor
283
- ```
284
-
285
- ### Workspace File Sync
286
-
287
- The `workspace:` section enables syncing files from external sources to your workspace root. This is useful for sharing agent configurations (AGENTS.md, CLAUDE.md) across multiple projects.
288
-
289
- **Key behaviors:**
290
- - **Source of truth is remote** - Local copies are overwritten on every sync
291
- - **Deleted files are restored** - If you delete AGENTS.md locally, sync restores it
292
- - **WORKSPACE-RULES injection** - AGENTS.md and CLAUDE.md automatically get workspace discovery rules injected
293
-
294
- **Source resolution:**
295
- | Format | Example | Resolves to |
296
- |--------|---------|-------------|
297
- | String shorthand | `AGENTS.md` | `{workspace.source}/AGENTS.md` |
298
- | Relative source | `source: docs/guide.md` | `{workspace.source}/docs/guide.md` |
299
- | File-level override | `source: ../other/file.md` | `../other/file.md` (relative to workspace) |
300
- | GitHub source | `source: owner/repo/path/file.md` | Fetched from GitHub cache |
301
-
302
- **GitHub sources** are fetched fresh on every sync (always pulls latest).
303
-
304
- ### Plugin Spec Format
305
-
306
- Plugins use the `plugin@marketplace` format:
307
-
308
- | Format | Example | Description |
309
- |--------|---------|-------------|
310
- | Well-known | `code-review@claude-plugins-official` | Uses known marketplace mapping |
311
- | owner/repo | `my-plugin@owner/repo` | Auto-registers GitHub repo, looks in `plugins/` |
312
- | owner/repo/subpath | `my-plugin@owner/repo/extensions` | Looks in custom subdirectory |
313
-
314
- The subpath format is useful when plugins aren't in the standard `plugins/` directory:
315
-
316
- ```yaml
317
- plugins:
318
- - feature-dev@anthropics/claude-plugins-official/plugins # explicit plugins/ dir
319
- - my-addon@someuser/repo/addons # custom addons/ dir
320
- - tool@org/monorepo/packages/tools # nested path
321
- ```
322
-
323
- ### Well-Known Marketplaces
324
-
325
- These marketplace names auto-resolve to their GitHub repos:
326
-
327
- - `claude-plugins-official` → `anthropics/claude-plugins-official`
328
-
329
- ### Supported Clients
330
-
331
- AllAgents supports 23 AI coding assistants:
332
-
333
- #### Universal Clients (share `.agents/skills/`)
334
-
335
- | Client | Skills | Agent File | Hooks | Commands |
336
- |--------|--------|------------|-------|----------|
337
- | copilot | `.github/skills/` | `AGENTS.md` | `.github/hooks/` | No |
338
- | codex | `.agents/skills/` | `AGENTS.md` | No | No |
339
- | opencode | `.agents/skills/` | `AGENTS.md` | No | `.opencode/commands/` |
340
- | gemini | `.agents/skills/` | `GEMINI.md` | No | No |
341
- | ampcode | `.agents/skills/` | `AGENTS.md` | No | No |
342
- | vscode | `.agents/skills/` | `AGENTS.md` | No | No |
343
- | replit | `.agents/skills/` | `AGENTS.md` | No | No |
344
- | kimi | `.agents/skills/` | `AGENTS.md` | No | No |
345
-
346
- #### Provider-Specific Clients
347
-
348
- | Client | Skills | Agent File | Hooks | Commands |
349
- |--------|--------|------------|-------|----------|
350
- | claude | `.claude/skills/` | `CLAUDE.md` | `.claude/hooks/` | `.claude/commands/` |
351
- | cursor | `.cursor/skills/` | `AGENTS.md` | No | No |
352
- | factory | `.factory/skills/` | `AGENTS.md` | `.factory/hooks/` | No |
353
- | openclaw | `skills/` | `AGENTS.md` | No | No |
354
- | windsurf | `.windsurf/skills/` | `AGENTS.md` | No | No |
355
- | cline | `.cline/skills/` | `AGENTS.md` | No | No |
356
- | continue | `.continue/skills/` | `AGENTS.md` | No | No |
357
- | roo | `.roo/skills/` | `AGENTS.md` | No | No |
358
- | kilo | `.kilocode/skills/` | `AGENTS.md` | No | No |
359
- | trae | `.trae/skills/` | `AGENTS.md` | No | No |
360
- | augment | `.augment/skills/` | `AGENTS.md` | No | No |
361
- | zencoder | `.zencoder/skills/` | `AGENTS.md` | No | No |
362
- | junie | `.junie/skills/` | `AGENTS.md` | No | No |
363
- | openhands | `.openhands/skills/` | `AGENTS.md` | No | No |
364
- | kiro | `.kiro/skills/` | `AGENTS.md` | No | No |
365
-
366
- > **Note:** Universal clients share the same `.agents/skills/` directory. See [GitHub Overrides](#github-overrides) for how Copilot and VSCode handle `.github/` content.
367
-
368
- ## Marketplace Structure
369
-
370
- Marketplaces contain multiple plugins:
371
-
372
- ```
373
- my-marketplace/
374
- ├── plugins/
375
- │ ├── code-review/
376
- │ │ └── skills/
377
- │ └── debugging/
378
- │ └── skills/
379
- └── README.md
380
- ```
381
-
382
- ## Plugin Structure
383
-
384
- Each plugin follows this structure:
385
-
386
- ```
387
- my-plugin/
388
- ├── skills/ # Skill directories with SKILL.md (all clients)
389
- │ └── debugging/
390
- │ └── SKILL.md
391
- ├── commands/ # Command files (.md) - Claude, OpenCode
392
- │ ├── build.md
393
- │ └── deploy.md
394
- ├── .github/ # GitHub overrides (Copilot, VSCode)
395
- │ └── prompts/
396
- │ └── review.md
397
- ├── hooks/ # Hook files (Claude/Factory only)
398
- │ └── pre-commit.md
399
- └── AGENTS.md # Agent configuration (optional)
400
- ```
401
-
402
- ### Skill Validation
403
-
404
- Skills must have a valid `SKILL.md` file with YAML frontmatter:
405
-
406
- ```yaml
407
- ---
408
- name: my-skill # Required: lowercase, alphanumeric + hyphens, max 64 chars
409
- description: Description of the skill # Required
410
- allowed-tools: # Optional
411
- - Read
412
- - Write
413
- model: claude-3-opus # Optional
414
- ---
415
-
416
- # Skill Content
417
-
418
- Skill instructions go here...
419
- ```
420
-
421
- ### Self Commands
422
-
423
- ```bash
424
- # Update to latest version (auto-detects package manager)
425
- allagents self update
426
-
427
- # Force a specific package manager
428
- allagents self update --npm
429
- allagents self update --bun
430
- ```
431
-
432
- When using the interactive TUI, AllAgents automatically checks for newer versions in the background and shows a notice on startup when an update is available.
433
-
434
- ## Storage Locations
435
-
436
- ```
437
- ~/.allagents/
438
- ├── marketplaces.json # Registry of marketplaces
439
- ├── version-check.json # Cached update check (auto-managed)
440
- └── marketplaces/ # Cloned marketplace repos
441
- ├── claude-plugins-official/
442
- └── someuser-their-repo/
443
- ```
444
-
445
- ## Development
446
-
447
- ```bash
448
- # Install dependencies
449
- bun install
450
-
451
- # Run in development
452
- bun run dev workspace init test-ws
453
-
454
- # Run tests
455
- bun run test
456
-
457
- # Type check
458
- bun run typecheck
459
-
460
- # Build
461
- bun run build
462
- ```
463
-
464
- ## Related Projects
465
-
466
- - [dotagents](https://github.com/iannuttall/dotagents) - Unified AI agent configuration management
467
- - [vercel-labs/skills](https://github.com/vercel-labs/skills) - Universal skills for AI coding assistants
468
-
469
- ## License
470
-
471
- MIT
1
+ # AllAgents
2
+
3
+ CLI tool for managing multi-repo AI agent workspaces with plugin synchronization across multiple AI clients.
4
+
5
+ ## Why AllAgents?
6
+
7
+ **The Problem:** AI coding assistants (Claude, Copilot, Cursor, Codex, etc.) each have their own configuration formats and directory structures. If you want to share skills across multiple projects or use multiple AI clients, you need to manually copy and transform files.
8
+
9
+ **AllAgents solves this by:**
10
+
11
+ | Feature | Claude Code Plugins | AllAgents |
12
+ |---------|--------------------|-----------|
13
+ | Scope | Single project | Multi-repo workspace |
14
+ | Client support | Claude only | 23 AI clients |
15
+ | File location | Runtime lookup from cache | Copied to workspace (git-versioned) |
16
+ | Project structure | AI config mixed with code | Separate workspace repo |
17
+
18
+ ### Key Differentiators
19
+
20
+ 1. **Multi-repo workspaces** - One workspace references multiple project repositories. Your AI tooling lives separately from your application code.
21
+
22
+ 2. **Multi-client distribution** - Write plugins once, sync to all clients. AllAgents transforms and copies files to each client's expected paths.
23
+
24
+ 3. **Workspace is a git repo** - Unlike Claude's runtime plugin system, AllAgents copies files into your workspace. Team members get the same AI tooling via git.
25
+
26
+ 4. **Clean separation** - Project repos stay clean. AI configuration lives in the workspace.
27
+
28
+ ```
29
+ ┌─────────────────┐
30
+ │ Marketplace │ (plugin source - GitHub repos)
31
+ └────────┬────────┘
32
+
33
+
34
+ ┌─────────────────┐
35
+ │ AllAgents │ (sync & transform)
36
+ │ workspace sync │
37
+ └────────┬────────┘
38
+
39
+ ┌────┴────┬────────┬─────────┐
40
+ ▼ ▼ ▼ ▼
41
+ .claude/ .agents/ .cursor/ .factory/ (client paths)
42
+ ```
43
+
44
+ ## Installation
45
+
46
+ ```bash
47
+ # Using npm
48
+ npm install -g allagents
49
+
50
+ # Or run directly without installing
51
+ npx allagents
52
+ ```
53
+
54
+ ## Quick Start
55
+
56
+ ```bash
57
+ # Create a new workspace
58
+ allagents workspace init my-workspace
59
+ cd my-workspace
60
+
61
+ # Or initialize from a remote GitHub template
62
+ allagents workspace init my-workspace --from owner/repo/path/to/template
63
+
64
+ # Add a marketplace (or let auto-registration handle it)
65
+ allagents plugin marketplace add anthropics/claude-plugins-official
66
+
67
+ # Install plugins to workspace
68
+ allagents plugin install code-review@claude-plugins-official
69
+ allagents plugin install my-plugin@someuser/their-repo
70
+
71
+ # Sync plugins to workspace
72
+ allagents workspace sync
73
+ ```
74
+
75
+ ### Initialize from Remote Template
76
+
77
+ Start a new workspace instantly from any GitHub repository containing a `workspace.yaml`:
78
+
79
+ ```bash
80
+ # From GitHub URL
81
+ allagents workspace init ~/my-project --from https://github.com/myorg/templates/tree/main/nodejs
82
+
83
+ # From shorthand
84
+ allagents workspace init ~/my-project --from myorg/templates/nodejs
85
+
86
+ # From repo root (looks for .allagents/workspace.yaml or workspace.yaml)
87
+ allagents workspace init ~/my-project --from myorg/templates
88
+ ```
89
+
90
+ This fetches the workspace configuration directly from GitHub - no cloning required.
91
+
92
+ ## Commands
93
+
94
+ ### Workspace Commands
95
+
96
+ ```bash
97
+ # Initialize a new workspace from template
98
+ allagents workspace init <path>
99
+ allagents workspace init <path> --from <source> # From local path or GitHub URL
100
+
101
+ # Sync all plugins to workspace (non-destructive)
102
+ allagents workspace sync [options]
103
+ --force Force re-fetch of remote plugins even if cached
104
+ --dry-run Preview changes without applying
105
+
106
+ # Non-destructive sync: your files are safe
107
+ # - First sync overlays without deleting existing files
108
+ # - Subsequent syncs only remove files AllAgents previously synced
109
+ # - Tracked in .allagents/sync-state.json
110
+
111
+ # Show status of workspace and plugins
112
+ allagents workspace status
113
+
114
+ # Add a repository to the workspace (auto-detects git remote source)
115
+ allagents workspace repo add <path>
116
+ allagents workspace repo add <path> --description "My project"
117
+
118
+ # Remove a repository from the workspace
119
+ allagents workspace repo remove <path>
120
+
121
+ # List all repositories in the workspace
122
+ allagents workspace repo list
123
+ ```
124
+
125
+ ### VSCode Workspace Generation
126
+
127
+ When `vscode` is included in the `clients` list, `workspace sync` automatically generates a `.code-workspace` file. Repository paths are resolved to absolute paths. Plugin folders are included with prompt/instruction file location settings for Copilot.
128
+
129
+ ```yaml
130
+ # workspace.yaml
131
+ clients:
132
+ - vscode
133
+ - claude
134
+ ```
135
+
136
+ #### Output filename
137
+
138
+ The output filename defaults to `<dirname>.code-workspace`. Override with `vscode.output`:
139
+
140
+ ```yaml
141
+ # workspace.yaml
142
+ vscode:
143
+ output: my-project
144
+ ```
145
+
146
+ #### Template file
147
+
148
+ Create `.allagents/template.code-workspace` for VSCode-specific settings, launch configurations, extensions, and extra folders. The template supports `{path:../...}` placeholders that resolve to absolute paths using repository paths from workspace.yaml.
149
+
150
+ ```json
151
+ {
152
+ "folders": [
153
+ { "path": "{path:../Shared}", "name": "SharedLib" }
154
+ ],
155
+ "settings": {
156
+ "cSpell.words": ["myterm"],
157
+ "chat.agent.maxRequests": 999,
158
+ "chat.useAgentSkills": true
159
+ },
160
+ "launch": {
161
+ "configurations": [
162
+ {
163
+ "type": "node",
164
+ "name": "dev",
165
+ "cwd": "{path:../myapp}/src",
166
+ "runtimeExecutable": "npm",
167
+ "runtimeArgs": ["run", "dev"]
168
+ }
169
+ ]
170
+ },
171
+ "extensions": {
172
+ "recommendations": ["dbaeumer.vscode-eslint"]
173
+ }
174
+ }
175
+ ```
176
+
177
+ The generated workspace includes:
178
+ - Repository folders from workspace.yaml (resolved to absolute paths, listed first)
179
+ - Template folders (deduplicated against repository folders)
180
+ - All other template content (settings, launch, extensions) with `{repo:..}` placeholders resolved
181
+
182
+ ### Plugin Marketplace Commands
183
+
184
+ ```bash
185
+ # List registered marketplaces
186
+ allagents plugin marketplace list
187
+
188
+ # Add a marketplace from GitHub or local path
189
+ allagents plugin marketplace add <source>
190
+ # Examples:
191
+ # allagents plugin marketplace add anthropics/claude-plugins-official
192
+ # allagents plugin marketplace add /path/to/local/marketplace
193
+
194
+ # Remove a marketplace
195
+ allagents plugin marketplace remove <name>
196
+
197
+ # Update marketplace(s) from remote
198
+ allagents plugin marketplace update [name]
199
+ ```
200
+
201
+ ### Plugin Commands
202
+
203
+ ```bash
204
+ # Install a plugin to .allagents/workspace.yaml (auto-registers marketplace if needed)
205
+ allagents plugin install <plugin@marketplace>
206
+
207
+ # Remove a plugin from .allagents/workspace.yaml
208
+ allagents plugin uninstall <plugin>
209
+
210
+ # List available plugins from marketplaces
211
+ allagents plugin list [marketplace]
212
+
213
+ # Validate a plugin or marketplace structure
214
+ allagents plugin validate <path>
215
+ ```
216
+
217
+ ### Skills Commands
218
+
219
+ ```bash
220
+ # Add a specific skill from a GitHub repo
221
+ allagents skills add reddit --from ReScienceLab/opc-skills
222
+
223
+ # Add a skill via GitHub URL (skill name extracted from path)
224
+ allagents skills add https://github.com/owner/repo/tree/main/skills/my-skill
225
+
226
+ # List all skills and their enabled/disabled status
227
+ allagents skills list
228
+
229
+ # Disable a skill without uninstalling its plugin
230
+ allagents skills remove brainstorming
231
+
232
+ # Re-enable a previously disabled skill
233
+ allagents skills add brainstorming
234
+ ```
235
+
236
+ ### GitHub Overrides
237
+
238
+ For **Copilot** and **VSCode**, AllAgents copies GitHub-specific files from a plugin's `.github/` folder into the workspace's `.github/` directory:
239
+
240
+ - `.github/prompts/` — prompt files
241
+ - `.github/agents/` — agent overrides
242
+ - `.github/hooks/` — hook overrides
243
+ - `copilot-instructions.md` — root Copilot instructions
244
+
245
+ Root `agents/` and `hooks/` directories in a plugin also map to `.github/agents/` and `.github/hooks/` for Copilot/VSCode.
246
+
247
+ ## .allagents/workspace.yaml
248
+
249
+ The workspace configuration file lives in `.allagents/workspace.yaml` and defines repositories, plugins, workspace files, and target clients:
250
+
251
+ ```yaml
252
+ # Workspace file sync (optional) - copy files from a shared source
253
+ workspace:
254
+ source: ../shared-config # Default base for relative paths
255
+ files:
256
+ - AGENTS.md # String shorthand: same source and dest
257
+ - source: docs/guide.md # Object form: explicit source
258
+ dest: GUIDE.md # Optional dest (defaults to basename)
259
+ - dest: CUSTOM.md # File-level source override
260
+ source: ../other-config/CUSTOM.md
261
+ - dest: AGENTS.md # GitHub source
262
+ source: owner/repo/path/AGENTS.md
263
+
264
+ repositories:
265
+ - path: ../my-project
266
+ source: github
267
+ repo: myorg/my-project
268
+ description: Main project repository
269
+ - path: ../my-api
270
+ source: github
271
+ repo: myorg/my-api
272
+ description: API service
273
+
274
+ plugins:
275
+ - code-review@claude-plugins-official # plugin@marketplace format
276
+ - context7@claude-plugins-official
277
+ - my-plugin@someuser/their-repo # fully qualified for custom marketplaces
278
+
279
+ clients:
280
+ - claude
281
+ - copilot
282
+ - cursor
283
+ ```
284
+
285
+ ### Workspace File Sync
286
+
287
+ The `workspace:` section enables syncing files from external sources to your workspace root. This is useful for sharing agent configurations (AGENTS.md, CLAUDE.md) across multiple projects.
288
+
289
+ **Key behaviors:**
290
+ - **Source of truth is remote** - Local copies are overwritten on every sync
291
+ - **Deleted files are restored** - If you delete AGENTS.md locally, sync restores it
292
+ - **WORKSPACE-RULES injection** - AGENTS.md and CLAUDE.md automatically get workspace discovery rules injected
293
+
294
+ **Source resolution:**
295
+ | Format | Example | Resolves to |
296
+ |--------|---------|-------------|
297
+ | String shorthand | `AGENTS.md` | `{workspace.source}/AGENTS.md` |
298
+ | Relative source | `source: docs/guide.md` | `{workspace.source}/docs/guide.md` |
299
+ | File-level override | `source: ../other/file.md` | `../other/file.md` (relative to workspace) |
300
+ | GitHub source | `source: owner/repo/path/file.md` | Fetched from GitHub cache |
301
+
302
+ **GitHub sources** are fetched fresh on every sync (always pulls latest).
303
+
304
+ ### Plugin Spec Format
305
+
306
+ Plugins use the `plugin@marketplace` format:
307
+
308
+ | Format | Example | Description |
309
+ |--------|---------|-------------|
310
+ | Well-known | `code-review@claude-plugins-official` | Uses known marketplace mapping |
311
+ | owner/repo | `my-plugin@owner/repo` | Auto-registers GitHub repo, looks in `plugins/` |
312
+ | owner/repo/subpath | `my-plugin@owner/repo/extensions` | Looks in custom subdirectory |
313
+
314
+ The subpath format is useful when plugins aren't in the standard `plugins/` directory:
315
+
316
+ ```yaml
317
+ plugins:
318
+ - feature-dev@anthropics/claude-plugins-official/plugins # explicit plugins/ dir
319
+ - my-addon@someuser/repo/addons # custom addons/ dir
320
+ - tool@org/monorepo/packages/tools # nested path
321
+ ```
322
+
323
+ ### Well-Known Marketplaces
324
+
325
+ These marketplace names auto-resolve to their GitHub repos:
326
+
327
+ - `claude-plugins-official` → `anthropics/claude-plugins-official`
328
+
329
+ ### Supported Clients
330
+
331
+ AllAgents supports 23 AI coding assistants:
332
+
333
+ #### Universal Clients (share `.agents/skills/`)
334
+
335
+ | Client | Skills | Agent File | Hooks | Commands |
336
+ |--------|--------|------------|-------|----------|
337
+ | copilot | `.github/skills/` | `AGENTS.md` | `.github/hooks/` | No |
338
+ | codex | `.agents/skills/` | `AGENTS.md` | No | No |
339
+ | opencode | `.agents/skills/` | `AGENTS.md` | No | `.opencode/commands/` |
340
+ | gemini | `.agents/skills/` | `GEMINI.md` | No | No |
341
+ | ampcode | `.agents/skills/` | `AGENTS.md` | No | No |
342
+ | vscode | `.agents/skills/` | `AGENTS.md` | No | No |
343
+ | replit | `.agents/skills/` | `AGENTS.md` | No | No |
344
+ | kimi | `.agents/skills/` | `AGENTS.md` | No | No |
345
+
346
+ #### Provider-Specific Clients
347
+
348
+ | Client | Skills | Agent File | Hooks | Commands |
349
+ |--------|--------|------------|-------|----------|
350
+ | claude | `.claude/skills/` | `CLAUDE.md` | `.claude/hooks/` | `.claude/commands/` |
351
+ | cursor | `.cursor/skills/` | `AGENTS.md` | No | No |
352
+ | factory | `.factory/skills/` | `AGENTS.md` | `.factory/hooks/` | No |
353
+ | openclaw | `skills/` | `AGENTS.md` | No | No |
354
+ | windsurf | `.windsurf/skills/` | `AGENTS.md` | No | No |
355
+ | cline | `.cline/skills/` | `AGENTS.md` | No | No |
356
+ | continue | `.continue/skills/` | `AGENTS.md` | No | No |
357
+ | roo | `.roo/skills/` | `AGENTS.md` | No | No |
358
+ | kilo | `.kilocode/skills/` | `AGENTS.md` | No | No |
359
+ | trae | `.trae/skills/` | `AGENTS.md` | No | No |
360
+ | augment | `.augment/skills/` | `AGENTS.md` | No | No |
361
+ | zencoder | `.zencoder/skills/` | `AGENTS.md` | No | No |
362
+ | junie | `.junie/skills/` | `AGENTS.md` | No | No |
363
+ | openhands | `.openhands/skills/` | `AGENTS.md` | No | No |
364
+ | kiro | `.kiro/skills/` | `AGENTS.md` | No | No |
365
+
366
+ > **Note:** Universal clients share the same `.agents/skills/` directory. See [GitHub Overrides](#github-overrides) for how Copilot and VSCode handle `.github/` content.
367
+
368
+ ## Marketplace Structure
369
+
370
+ Marketplaces contain multiple plugins:
371
+
372
+ ```
373
+ my-marketplace/
374
+ ├── plugins/
375
+ │ ├── code-review/
376
+ │ │ └── skills/
377
+ │ └── debugging/
378
+ │ └── skills/
379
+ └── README.md
380
+ ```
381
+
382
+ ## Plugin Structure
383
+
384
+ Each plugin follows this structure:
385
+
386
+ ```
387
+ my-plugin/
388
+ ├── skills/ # Skill directories with SKILL.md (all clients)
389
+ │ └── debugging/
390
+ │ └── SKILL.md
391
+ ├── commands/ # Command files (.md) - Claude, OpenCode
392
+ │ ├── build.md
393
+ │ └── deploy.md
394
+ ├── .github/ # GitHub overrides (Copilot, VSCode)
395
+ │ └── prompts/
396
+ │ └── review.md
397
+ ├── hooks/ # Hook files (Claude/Factory only)
398
+ │ └── pre-commit.md
399
+ └── AGENTS.md # Agent configuration (optional)
400
+ ```
401
+
402
+ ### Skill Validation
403
+
404
+ Skills must have a valid `SKILL.md` file with YAML frontmatter:
405
+
406
+ ```yaml
407
+ ---
408
+ name: my-skill # Required: lowercase, alphanumeric + hyphens, max 64 chars
409
+ description: Description of the skill # Required
410
+ allowed-tools: # Optional
411
+ - Read
412
+ - Write
413
+ model: claude-3-opus # Optional
414
+ ---
415
+
416
+ # Skill Content
417
+
418
+ Skill instructions go here...
419
+ ```
420
+
421
+ ### Self Commands
422
+
423
+ ```bash
424
+ # Update to latest version (auto-detects package manager)
425
+ allagents self update
426
+
427
+ # Force a specific package manager
428
+ allagents self update --npm
429
+ allagents self update --bun
430
+ ```
431
+
432
+ When using the interactive TUI, AllAgents automatically checks for newer versions in the background and shows a notice on startup when an update is available.
433
+
434
+ ## Storage Locations
435
+
436
+ ```
437
+ ~/.allagents/
438
+ ├── marketplaces.json # Registry of marketplaces
439
+ ├── version-check.json # Cached update check (auto-managed)
440
+ └── marketplaces/ # Cloned marketplace repos
441
+ ├── claude-plugins-official/
442
+ └── someuser-their-repo/
443
+ ```
444
+
445
+ ## Development
446
+
447
+ ```bash
448
+ # Install dependencies
449
+ bun install
450
+
451
+ # Run in development
452
+ bun run dev workspace init test-ws
453
+
454
+ # Run tests
455
+ bun run test
456
+
457
+ # Type check
458
+ bun run typecheck
459
+
460
+ # Build
461
+ bun run build
462
+ ```
463
+
464
+ ## Related Projects
465
+
466
+ - [dotagents](https://github.com/iannuttall/dotagents) - Unified AI agent configuration management
467
+ - [vercel-labs/skills](https://github.com/vercel-labs/skills) - Universal skills for AI coding assistants
468
+
469
+ ## License
470
+
471
+ MIT
package/dist/index.js CHANGED
@@ -6378,7 +6378,7 @@ var require_parse = __commonJS((exports, module) => {
6378
6378
  var token;
6379
6379
  var key;
6380
6380
  var root;
6381
- module.exports = function parse2(text, reviver) {
6381
+ module.exports = function parse(text, reviver) {
6382
6382
  source = String(text);
6383
6383
  parseState = "start";
6384
6384
  stack = [];
@@ -13446,7 +13446,7 @@ function gitInstanceFactory(baseDir, options2) {
13446
13446
  }
13447
13447
  var import_file_exists, import_debug, import_promise_deferred, import_promise_deferred2, __defProp2, __getOwnPropDesc2, __getOwnPropNames2, __hasOwnProp2, __esm2 = (fn, res) => function __init() {
13448
13448
  return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res;
13449
- }, __commonJS2 = (cb, mod) => function __require2() {
13449
+ }, __commonJS2 = (cb, mod) => function __require() {
13450
13450
  return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
13451
13451
  }, __export2 = (target, all) => {
13452
13452
  for (var name in all)
@@ -21933,7 +21933,7 @@ var require_is_extendable = __commonJS((exports, module) => {
21933
21933
  // node_modules/extend-shallow/index.js
21934
21934
  var require_extend_shallow = __commonJS((exports, module) => {
21935
21935
  var isObject2 = require_is_extendable();
21936
- module.exports = function extend3(o) {
21936
+ module.exports = function extend(o) {
21937
21937
  if (!isObject2(o)) {
21938
21938
  o = {};
21939
21939
  }
@@ -22127,7 +22127,7 @@ var require_exception = __commonJS((exports, module) => {
22127
22127
  }
22128
22128
  YAMLException2.prototype = Object.create(Error.prototype);
22129
22129
  YAMLException2.prototype.constructor = YAMLException2;
22130
- YAMLException2.prototype.toString = function toString2(compact) {
22130
+ YAMLException2.prototype.toString = function toString(compact) {
22131
22131
  var result = this.name + ": ";
22132
22132
  result += this.reason || "(unknown reason)";
22133
22133
  if (!compact && this.mark) {
@@ -22180,7 +22180,7 @@ var require_mark = __commonJS((exports, module) => {
22180
22180
  return common2.repeat(" ", indent) + head + snippet2 + tail + `
22181
22181
  ` + common2.repeat(" ", indent + this.position - start + head.length) + "^";
22182
22182
  };
22183
- Mark.prototype.toString = function toString2(compact) {
22183
+ Mark.prototype.toString = function toString(compact) {
22184
22184
  var snippet2, where = "";
22185
22185
  if (this.name) {
22186
22186
  where += 'in "' + this.name + '" ';
@@ -23275,7 +23275,7 @@ var require_loader = __commonJS((exports, module) => {
23275
23275
  }
23276
23276
  }
23277
23277
  var directiveHandlers2 = {
23278
- YAML: function handleYamlDirective2(state, name, args) {
23278
+ YAML: function handleYamlDirective(state, name, args) {
23279
23279
  var match, major, minor;
23280
23280
  if (state.version !== null) {
23281
23281
  throwError2(state, "duplication of %YAML directive");
@@ -23298,7 +23298,7 @@ var require_loader = __commonJS((exports, module) => {
23298
23298
  throwWarning2(state, "unsupported YAML version of the document");
23299
23299
  }
23300
23300
  },
23301
- TAG: function handleTagDirective2(state, name, args) {
23301
+ TAG: function handleTagDirective(state, name, args) {
23302
23302
  var handle, prefix;
23303
23303
  if (args.length !== 2) {
23304
23304
  throwError2(state, "TAG directive accepts exactly two arguments");
@@ -30789,9 +30789,13 @@ function classifyDestination(dest) {
30789
30789
  }
30790
30790
  function classifyCopyResults(copyResults) {
30791
30791
  const clientCounts = new Map;
30792
+ const seenDestinations = new Set;
30792
30793
  for (const result of copyResults) {
30793
30794
  if (result.action !== "copied")
30794
30795
  continue;
30796
+ if (seenDestinations.has(result.destination))
30797
+ continue;
30798
+ seenDestinations.add(result.destination);
30795
30799
  const classification = classifyDestination(result.destination);
30796
30800
  if (!classification)
30797
30801
  continue;
@@ -30847,6 +30851,14 @@ function formatPluginArtifacts(copyResults, indent = " ") {
30847
30851
  }
30848
30852
  return formatArtifactLines(classified, indent);
30849
30853
  }
30854
+ function formatSyncHeader(result) {
30855
+ const pluginCount = result.pluginResults.length;
30856
+ const successCount = result.pluginResults.filter((p) => p.success).length;
30857
+ return [
30858
+ `Updating ${pluginCount} plugin(s)...`,
30859
+ `✓ Successfully updated ${successCount} marketplace(s)`
30860
+ ];
30861
+ }
30850
30862
  function formatSyncSummary(result, { dryRun = false, label = "Sync" } = {}) {
30851
30863
  const lines = [];
30852
30864
  const allCopied = result.pluginResults.flatMap((pr) => pr.copyResults.filter((r) => r.action === "copied"));
@@ -33430,7 +33442,7 @@ var package_default;
33430
33442
  var init_package = __esm(() => {
33431
33443
  package_default = {
33432
33444
  name: "allagents",
33433
- version: "1.0.11",
33445
+ version: "1.0.14",
33434
33446
  description: "CLI tool for managing multi-repo AI agent workspaces with plugin synchronization",
33435
33447
  type: "module",
33436
33448
  bin: {
@@ -35379,18 +35391,10 @@ var syncCmd = import_cmd_ts2.command({
35379
35391
  }
35380
35392
  let combined = null;
35381
35393
  if (userConfigExists) {
35382
- if (!isJsonMode()) {
35383
- console.log(`Syncing user workspace...
35384
- `);
35385
- }
35386
35394
  const userResult = await syncUserWorkspace({ offline, dryRun, force });
35387
35395
  combined = userResult;
35388
35396
  }
35389
35397
  if (projectConfigExists) {
35390
- if (!isJsonMode()) {
35391
- console.log(`Syncing project workspace...
35392
- `);
35393
- }
35394
35398
  const projectResult = await syncWorkspace(process.cwd(), {
35395
35399
  offline,
35396
35400
  dryRun
@@ -35422,6 +35426,10 @@ var syncCmd = import_cmd_ts2.command({
35422
35426
  }
35423
35427
  console.log("");
35424
35428
  }
35429
+ for (const line of formatSyncHeader(result)) {
35430
+ console.log(line);
35431
+ }
35432
+ console.log("");
35425
35433
  for (const pluginResult of result.pluginResults) {
35426
35434
  const status = pluginResult.success ? "✓" : "✗";
35427
35435
  console.log(`${status} Plugin: ${pluginResult.plugin}`);
@@ -36760,11 +36768,6 @@ Warnings:`);
36760
36768
  return { ok: result.success && result.totalFailed === 0, syncData };
36761
36769
  }
36762
36770
  async function runUserSyncAndPrint() {
36763
- if (!isJsonMode()) {
36764
- console.log(`
36765
- Syncing user workspace...
36766
- `);
36767
- }
36768
36771
  const result = await syncUserWorkspace();
36769
36772
  if (!result.success && result.error) {
36770
36773
  if (!isJsonMode()) {
@@ -1,15 +1,15 @@
1
- # Workspace root files (optional)
2
- # workspace:
3
- # source: ./path/to/config # local path, GitHub URL, or plugin@marketplace
4
- # files:
5
- # - CLAUDE.md
6
- # - AGENTS.md
7
- # - source: docs/CLAUDE.md # explicit source/dest mapping
8
- # dest: CLAUDE.md
9
-
10
- repositories: []
11
-
12
- plugins: []
13
-
14
- clients:
15
- - universal
1
+ # Workspace root files (optional)
2
+ # workspace:
3
+ # source: ./path/to/config # local path, GitHub URL, or plugin@marketplace
4
+ # files:
5
+ # - CLAUDE.md
6
+ # - AGENTS.md
7
+ # - source: docs/CLAUDE.md # explicit source/dest mapping
8
+ # dest: CLAUDE.md
9
+
10
+ repositories: []
11
+
12
+ plugins: []
13
+
14
+ clients:
15
+ - universal
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "allagents",
3
- "version": "1.0.11",
3
+ "version": "1.0.14",
4
4
  "description": "CLI tool for managing multi-repo AI agent workspaces with plugin synchronization",
5
5
  "type": "module",
6
6
  "bin": {