agentpacks 0.2.0 → 0.3.0

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.
Files changed (2) hide show
  1. package/README.md +561 -0
  2. package/package.json +3 -3
package/README.md ADDED
@@ -0,0 +1,561 @@
1
+ # agentpacks
2
+
3
+ [![npm version](https://img.shields.io/npm/v/agentpacks.svg)](https://www.npmjs.com/package/agentpacks)
4
+ [![npm downloads](https://img.shields.io/npm/dm/agentpacks.svg)](https://www.npmjs.com/package/agentpacks)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+ [![Tests](https://img.shields.io/badge/tests-247%20passing-brightgreen.svg)](https://github.com/lssm-tech/contractspec/tree/main/packages/tools/agentpacks)
7
+
8
+ **Composable AI agent configuration manager.**
9
+
10
+ Write your rules, commands, skills, hooks, and MCP configs once — in a pack — and sync them automatically to OpenCode, Cursor, Claude Code, Codex CLI, Gemini CLI, GitHub Copilot, and 13 more tools.
11
+
12
+ ---
13
+
14
+ ## Why agentpacks?
15
+
16
+ AI coding tools are proliferating fast. Every tool has its own config format:
17
+
18
+ - Cursor wants `.cursor/rules/*.mdc`
19
+ - Claude Code wants `CLAUDE.md` and `.claude/rules/*.md`
20
+ - OpenCode wants `.opencode/agent/*.md`, `.opencode/skill/*.md`, `opencode.json`
21
+ - Codex wants `.codex/memories/*.md`
22
+ - And so on for 20+ tools…
23
+
24
+ **Maintaining all of these by hand means:**
25
+
26
+ - Rules drift between tools — your Cursor context differs from your Claude context
27
+ - Adding a new rule means editing 5+ files in 5+ formats
28
+ - Onboarding a new tool means starting from scratch
29
+
30
+ **agentpacks solves this with a pack-based architecture:**
31
+
32
+ 1. Write your rules/commands/agents/skills once, in plain Markdown with simple frontmatter
33
+ 2. Group them into a _pack_ (a folder with a `pack.json` manifest)
34
+ 3. Run `agentpacks generate` — all 20 supported tools get their configs, properly formatted
35
+
36
+ ### vs rulesync
37
+
38
+ [rulesync](https://github.com/dyoshikawa/rulesync) is great inspiration but uses a flat file model. agentpacks goes further:
39
+
40
+ | | agentpacks | rulesync |
41
+ | -------------------- | --------------------------------------- | ------------- |
42
+ | Architecture | Composable packs | Flat files |
43
+ | Pack distribution | npm, git, local | Local only |
44
+ | OpenCode plugins | Per-pack `.ts` plugin files | Not supported |
45
+ | Cursor plugin export | Native plugin format | Not supported |
46
+ | Import from tools | Cursor, Claude Code, OpenCode, rulesync | — |
47
+ | Dependency resolver | Topological sort + conflict detection | — |
48
+ | Monorepo / metarepo | Built-in baseDirs | — |
49
+
50
+ ---
51
+
52
+ ## Quick Start
53
+
54
+ ```bash
55
+ # Install globally
56
+ npm install -g agentpacks
57
+ # or
58
+ bun add -g agentpacks
59
+
60
+ # Initialize in your project
61
+ cd my-project
62
+ agentpacks init
63
+
64
+ # Generate configs for all your AI tools
65
+ agentpacks generate
66
+ ```
67
+
68
+ After `init`, you'll have:
69
+
70
+ ```
71
+ my-project/
72
+ ├── agentpacks.jsonc # workspace config
73
+ └── packs/
74
+ └── default/
75
+ ├── pack.json # pack manifest
76
+ └── rules/
77
+ └── overview.md # starter rule
78
+ ```
79
+
80
+ After `generate`, every supported tool gets its config — no manual formatting needed.
81
+
82
+ ### Migrating from rulesync
83
+
84
+ Already using rulesync? Import your existing setup in one command:
85
+
86
+ ```bash
87
+ agentpacks import --from rulesync
88
+ ```
89
+
90
+ This reads your `.rulesync/` directory and `rulesync.jsonc`, and creates an equivalent agentpacks pack + workspace config.
91
+
92
+ ---
93
+
94
+ ## Supported Tools
95
+
96
+ ### Core targets — full feature support
97
+
98
+ | Target | ID | Rules | Commands | Agents | Skills | Hooks | Plugins | MCP | Ignore |
99
+ | -------------- | ------------ | :---: | :------: | :----: | :----: | :---: | :-----: | :-: | :----: |
100
+ | OpenCode | `opencode` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
101
+ | Cursor | `cursor` | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ |
102
+ | Claude Code | `claudecode` | ✓ | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ |
103
+ | Codex CLI | `codexcli` | ✓ | | | ✓ | ✓ | | ✓ | |
104
+ | Gemini CLI | `geminicli` | ✓ | ✓ | | ✓ | ✓ | | ✓ | ✓ |
105
+ | GitHub Copilot | `copilot` | ✓ | ✓ | ✓ | ✓ | | | ✓ | ✓ |
106
+ | AGENTS.md | `agentsmd` | ✓ | | | | | | | |
107
+
108
+ ### Additional targets — rules, MCP, and more
109
+
110
+ | Target | ID | Rules | Commands | MCP | Ignore |
111
+ | ------------- | -------------- | :---: | :------: | :-: | :----: |
112
+ | Cline | `cline` | ✓ | ✓ | ✓ | ✓ |
113
+ | Kilo Code | `kilo` | ✓ | ✓ | ✓ | ✓ |
114
+ | Roo Code | `roo` | ✓ | ✓ | ✓ | ✓ |
115
+ | Qwen Code | `qwencode` | ✓ | | ✓ | ✓ |
116
+ | Windsurf | `windsurf` | ✓ | | ✓ | ✓ |
117
+ | Kiro | `kiro` | ✓ | | ✓ | |
118
+ | Augment Code | `augmentcode` | ✓ | | ✓ | |
119
+ | Replit Agent | `replit` | ✓ | | ✓ | |
120
+ | Zed | `zed` | ✓ | | ✓ | |
121
+ | Junie | `junie` | ✓ | | ✓ | |
122
+ | Factory Droid | `factorydroid` | ✓ | | ✓ | |
123
+ | AntiGravity | `antigravity` | ✓ | | ✓ | |
124
+ | Warp | `warp` | ✓ | | | |
125
+
126
+ ---
127
+
128
+ ## Features
129
+
130
+ agentpacks supports 8 feature types inside a pack:
131
+
132
+ | Feature | Description | Example files |
133
+ | ------------ | ---------------------------------------------------- | ------------------------------------------- |
134
+ | **rules** | Project/coding guidelines injected as context | `rules/security.md`, `rules/style.md` |
135
+ | **commands** | Slash commands (e.g. `/lint`, `/review`) | `commands/lint.md`, `commands/deploy.md` |
136
+ | **agents** | Named sub-agents with specific personas | `agents/reviewer.md`, `agents/architect.md` |
137
+ | **skills** | Step-by-step skill guides (with structured SKILL.md) | `skills/migrate/SKILL.md` |
138
+ | **hooks** | Shell commands triggered by agent events | `hooks.json` |
139
+ | **plugins** | Raw TypeScript plugin files (OpenCode) | `plugins/my-plugin.ts` |
140
+ | **mcp** | MCP server definitions | `mcp.json` |
141
+ | **ignore** | Patterns the agent should ignore | `ignore` |
142
+
143
+ ---
144
+
145
+ ## CLI Reference
146
+
147
+ ### `agentpacks init`
148
+
149
+ Initialize agentpacks in the current project. Creates `agentpacks.jsonc` and a starter pack under `packs/default/`.
150
+
151
+ ```bash
152
+ agentpacks init
153
+ ```
154
+
155
+ ---
156
+
157
+ ### `agentpacks generate`
158
+
159
+ Generate tool configs from all active packs.
160
+
161
+ ```bash
162
+ agentpacks generate [options]
163
+
164
+ Options:
165
+ -t, --targets <targets> Comma-separated target IDs, or * for all (default: from config)
166
+ -f, --features <features> Comma-separated feature IDs, or * for all (default: from config)
167
+ --dry-run Preview changes without writing files
168
+ --diff Show a diff of what would change
169
+ -v, --verbose Enable verbose output
170
+ ```
171
+
172
+ ```bash
173
+ # Generate for all configured targets
174
+ agentpacks generate
175
+
176
+ # Generate only for Cursor and Claude Code
177
+ agentpacks generate --targets cursor,claudecode
178
+
179
+ # Preview changes without writing
180
+ agentpacks generate --dry-run --diff
181
+ ```
182
+
183
+ ---
184
+
185
+ ### `agentpacks install`
186
+
187
+ Install remote packs (npm packages or git repos) into the local pack cache.
188
+
189
+ ```bash
190
+ agentpacks install [options]
191
+
192
+ Options:
193
+ --update Re-resolve all refs, ignoring the lockfile
194
+ --frozen Fail if the lockfile is missing or incomplete (useful in CI)
195
+ -v, --verbose
196
+ ```
197
+
198
+ ```bash
199
+ # Install all remote packs listed in agentpacks.jsonc
200
+ agentpacks install
201
+
202
+ # Update all remote packs to latest
203
+ agentpacks install --update
204
+
205
+ # CI: fail fast if lockfile is out of date
206
+ agentpacks install --frozen
207
+ ```
208
+
209
+ ---
210
+
211
+ ### `agentpacks import`
212
+
213
+ Import from an existing tool configuration into a new pack.
214
+
215
+ ```bash
216
+ agentpacks import --from <source> [options]
217
+
218
+ Sources: rulesync | cursor | claudecode | opencode
219
+
220
+ Options:
221
+ --from <source> Source format to import from (required)
222
+ -o, --output <dir> Output directory for the generated pack
223
+ ```
224
+
225
+ ```bash
226
+ # Import from rulesync (.rulesync/ + rulesync.jsonc)
227
+ agentpacks import --from rulesync
228
+
229
+ # Import from existing Cursor rules
230
+ agentpacks import --from cursor --output ./packs/from-cursor
231
+ ```
232
+
233
+ ---
234
+
235
+ ### `agentpacks export`
236
+
237
+ Export a pack to a target-native format (e.g. a Cursor plugin).
238
+
239
+ ```bash
240
+ agentpacks export --format <format> [options]
241
+
242
+ Formats: cursor-plugin
243
+
244
+ Options:
245
+ --format <format> Export format (required)
246
+ -o, --output <dir> Output directory
247
+ --pack <name> Export a specific pack only
248
+ -v, --verbose
249
+ ```
250
+
251
+ ```bash
252
+ # Export all packs as a single Cursor plugin
253
+ agentpacks export --format cursor-plugin --output ./cursor-plugin-dist
254
+ ```
255
+
256
+ ---
257
+
258
+ ### `agentpacks pack create <name>`
259
+
260
+ Scaffold a new pack with the correct directory structure.
261
+
262
+ ```bash
263
+ agentpacks pack create my-pack
264
+ ```
265
+
266
+ Creates:
267
+
268
+ ```
269
+ packs/my-pack/
270
+ ├── pack.json
271
+ └── rules/
272
+ └── overview.md
273
+ ```
274
+
275
+ ---
276
+
277
+ ### `agentpacks pack list`
278
+
279
+ List all configured packs and their enabled/disabled status.
280
+
281
+ ```bash
282
+ agentpacks pack list
283
+ ```
284
+
285
+ ---
286
+
287
+ ### `agentpacks pack validate`
288
+
289
+ Validate pack manifests and feature files for schema errors.
290
+
291
+ ```bash
292
+ agentpacks pack validate
293
+ ```
294
+
295
+ ---
296
+
297
+ ### `agentpacks pack enable <name>` / `agentpacks pack disable <name>`
298
+
299
+ Enable or disable a pack without removing it from `agentpacks.jsonc`.
300
+
301
+ ```bash
302
+ agentpacks pack disable my-pack # adds to "disabled" array
303
+ agentpacks pack enable my-pack # removes from "disabled" array
304
+ ```
305
+
306
+ ---
307
+
308
+ ## Configuration
309
+
310
+ ### Workspace config — `agentpacks.jsonc`
311
+
312
+ Created at your project root by `agentpacks init`.
313
+
314
+ ```jsonc
315
+ {
316
+ "$schema": "https://unpkg.com/agentpacks/schema.json",
317
+
318
+ // Packs to load — local paths, npm packages, or git repos
319
+ "packs": [
320
+ "./packs/default",
321
+ "agentpacks-typescript-rules", // npm package
322
+ "github:myorg/agent-packs#main/python", // git ref
323
+ ],
324
+
325
+ // Temporarily disable a pack without removing it
326
+ "disabled": [],
327
+
328
+ // Which AI tools to generate configs for (* = all 20)
329
+ "targets": [
330
+ "opencode",
331
+ "cursor",
332
+ "claudecode",
333
+ "geminicli",
334
+ "codexcli",
335
+ "copilot",
336
+ ],
337
+
338
+ // Which feature types to generate (* = all 8)
339
+ "features": ["*"],
340
+
341
+ // Repository mode: "repo" | "monorepo" | "metarepo"
342
+ "mode": "repo",
343
+
344
+ // Base directories to generate into (monorepo mode)
345
+ "baseDirs": ["."],
346
+
347
+ // Generate user-global configs (XDG-aware, applies to all projects)
348
+ "global": false,
349
+
350
+ // Delete existing generated files before regenerating
351
+ "delete": true,
352
+ }
353
+ ```
354
+
355
+ ### Pack manifest — `pack.json`
356
+
357
+ Lives at the root of each pack directory.
358
+
359
+ ```json
360
+ {
361
+ "name": "my-pack",
362
+ "version": "1.0.0",
363
+ "description": "My custom agent rules and commands",
364
+ "author": "Your Name",
365
+ "tags": ["typescript", "testing"],
366
+ "dependencies": ["base-pack"],
367
+ "conflicts": [],
368
+ "targets": ["*"],
369
+ "features": ["*"]
370
+ }
371
+ ```
372
+
373
+ ---
374
+
375
+ ## Authoring a Pack
376
+
377
+ A pack is a directory with a `pack.json` and any combination of feature subdirectories:
378
+
379
+ ```
380
+ my-pack/
381
+ ├── pack.json
382
+ ├── rules/
383
+ │ ├── overview.md # root: true → included in AGENTS.md / CLAUDE.md
384
+ │ └── security.md # root: false → detail rule
385
+ ├── commands/
386
+ │ └── review.md
387
+ ├── agents/
388
+ │ └── architect.md
389
+ ├── skills/
390
+ │ └── migrate/
391
+ │ └── SKILL.md
392
+ ├── hooks.json
393
+ ├── mcp.json
394
+ └── ignore
395
+ ```
396
+
397
+ ### Rule frontmatter
398
+
399
+ ```markdown
400
+ ---
401
+ root: true # true = root context (AGENTS.md, CLAUDE.md); false = detail rule
402
+ targets: ['*'] # which tools this rule applies to
403
+ description: 'Overview' # shown in Cursor rules UI
404
+ globs: ['src/**/*.ts'] # (optional) file-pattern-scoped rule
405
+ ---
406
+
407
+ Your rule content here.
408
+ ```
409
+
410
+ ### Command frontmatter
411
+
412
+ ```markdown
413
+ ---
414
+ name: review # command name (becomes /review)
415
+ targets: ['*']
416
+ description: 'Run a code review'
417
+ ---
418
+
419
+ Review the selected code for correctness, style, and potential bugs.
420
+ ```
421
+
422
+ ### MCP config — `mcp.json`
423
+
424
+ ```json
425
+ {
426
+ "mcpServers": {
427
+ "my-server": {
428
+ "command": "npx",
429
+ "args": ["-y", "my-mcp-server"],
430
+ "env": { "API_KEY": "$MY_API_KEY" }
431
+ },
432
+ "remote-server": {
433
+ "url": "https://mcp.example.com/sse",
434
+ "headers": { "Authorization": "Bearer $TOKEN" }
435
+ }
436
+ }
437
+ }
438
+ ```
439
+
440
+ ### Hooks — `hooks.json`
441
+
442
+ ```json
443
+ {
444
+ "hooks": {
445
+ "sessionStart": [{ "command": "echo 'Session started'" }],
446
+ "postToolUse": [
447
+ {
448
+ "command": "bun run lint",
449
+ "matcher": "write_file|edit_file"
450
+ }
451
+ ]
452
+ }
453
+ }
454
+ ```
455
+
456
+ Supported hook events: `sessionStart`, `preToolUse`, `postToolUuse`, `afterFileEdit`, `afterShellExecution`, `stop`
457
+
458
+ ---
459
+
460
+ ## Monorepo Support
461
+
462
+ For monorepo setups, set `mode: "monorepo"` and list your sub-packages in `baseDirs`:
463
+
464
+ ```jsonc
465
+ {
466
+ "mode": "monorepo",
467
+ "baseDirs": ["packages/api", "packages/web", "packages/shared"],
468
+ }
469
+ ```
470
+
471
+ `agentpacks generate` will write tool configs into each listed base directory.
472
+
473
+ For metarepo setups (a repo of repos), set `mode: "metarepo"` and agentpacks will discover sub-repos that contain their own `agentpacks.jsonc` and process them.
474
+
475
+ ---
476
+
477
+ ## Pack Distribution
478
+
479
+ Packs can be shared as:
480
+
481
+ ### npm packages
482
+
483
+ ```bash
484
+ npm install my-agent-pack
485
+ ```
486
+
487
+ ```jsonc
488
+ { "packs": ["my-agent-pack"] }
489
+ ```
490
+
491
+ ### Git repos
492
+
493
+ ```jsonc
494
+ {
495
+ "packs": [
496
+ "github:myorg/agent-packs", // defaults to main branch
497
+ "github:myorg/agent-packs#v2.0.0", // specific tag
498
+ "github:myorg/agent-packs#main/python", // subdirectory
499
+ ],
500
+ }
501
+ ```
502
+
503
+ ### Local directories (monorepo / private)
504
+
505
+ ```jsonc
506
+ { "packs": ["./packs/default", "../shared/agent-packs"] }
507
+ ```
508
+
509
+ ---
510
+
511
+ ## Global Mode
512
+
513
+ Generate user-scope configs that apply to all projects on your machine (useful for personal preferences):
514
+
515
+ ```bash
516
+ agentpacks generate --global
517
+ ```
518
+
519
+ agentpacks uses XDG-aware paths:
520
+
521
+ - **macOS/Linux**: `~/.config/agentpacks/`
522
+ - **Windows**: `%APPDATA%\agentpacks\`
523
+
524
+ ---
525
+
526
+ ## About
527
+
528
+ ### ContractSpec
529
+
530
+ [ContractSpec](https://contractspec.io) is the deterministic, spec-first compiler that keeps AI-written software coherent, safe, and regenerable. As AI coding tools generate more and more code, ContractSpec provides the governance layer: canonical contracts, multi-surface consistency, and safe regeneration without lock-in.
531
+
532
+ > "You keep your app. We stabilize it, one module at a time. You own the code. It's standard tech. We're the compiler, not the prison."
533
+
534
+ ### LSSM
535
+
536
+ [LSSM](https://github.com/lssm-tech) is the team behind ContractSpec. We build tools for AI-native software development — infrastructure that makes AI-generated code safe, maintainable, and production-ready.
537
+
538
+ agentpacks is built by LSSM as an open-source part of the ContractSpec ecosystem, published independently on npm so any project can adopt it without adopting the full ContractSpec platform.
539
+
540
+ ---
541
+
542
+ ## Contributing
543
+
544
+ We welcome contributions of all kinds — bug reports, feature requests, documentation improvements, and code.
545
+
546
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) for setup instructions, code style guidelines, and the pull request process.
547
+
548
+ **Quick links:**
549
+
550
+ - [Report a bug](https://github.com/lssm-tech/contractspec/issues/new?template=bug_report.md&labels=agentpacks)
551
+ - [Request a feature](https://github.com/lssm-tech/contractspec/issues/new?template=feature_request.md&labels=agentpacks)
552
+ - [Ask a question](https://github.com/lssm-tech/contractspec/discussions)
553
+ - [View the roadmap](https://github.com/lssm-tech/contractspec/issues?q=is%3Aissue+label%3Aagentpacks+label%3Aroadmap)
554
+
555
+ ---
556
+
557
+ ## License
558
+
559
+ MIT — see [LICENSE](../../LICENSE) for details.
560
+
561
+ Built with love by [LSSM](https://github.com/lssm-tech) — contributors of [ContractSpec](https://contractspec.io).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentpacks",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "description": "Composable AI agent configuration manager. Pack-based rules, commands, skills, hooks, and MCP sync across OpenCode, Cursor, Claude Code, Codex, Gemini, Copilot, and more.",
6
6
  "keywords": [
@@ -420,8 +420,8 @@
420
420
  "glob": "^13.0.3"
421
421
  },
422
422
  "devDependencies": {
423
- "@contractspec/tool.typescript": "2.3.0",
424
- "@contractspec/tool.bun": "2.3.0",
423
+ "@contractspec/tool.typescript": "2.4.0",
424
+ "@contractspec/tool.bun": "2.4.0",
425
425
  "@types/fs-extra": "^11.0.4",
426
426
  "typescript": "^5.9.3"
427
427
  },