@agents-inc/cli 0.60.1 → 0.64.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.
- package/CHANGELOG.md +48 -0
- package/README.md +23 -172
- package/dist/{chunk-G6WHCALR.js → chunk-3YNT3NX3.js} +13 -11
- package/dist/chunk-3YNT3NX3.js.map +1 -0
- package/dist/{chunk-WF6RM73R.js → chunk-4C7CSZC5.js} +27 -149
- package/dist/chunk-4C7CSZC5.js.map +1 -0
- package/dist/{chunk-EMIUPGPL.js → chunk-4KVBH2X4.js} +33 -14
- package/dist/chunk-4KVBH2X4.js.map +1 -0
- package/dist/{chunk-KIWFEBKH.js → chunk-52THXN5G.js} +14 -5
- package/dist/chunk-52THXN5G.js.map +1 -0
- package/dist/{chunk-TZXYBG3R.js → chunk-53URJ5XK.js} +448 -153
- package/dist/chunk-53URJ5XK.js.map +1 -0
- package/dist/{chunk-MKCHLXMY.js → chunk-6DEK3TDF.js} +10 -10
- package/dist/chunk-6DEK3TDF.js.map +1 -0
- package/dist/{chunk-SDKCQXWE.js → chunk-6IK2TCK7.js} +13 -6
- package/dist/chunk-6IK2TCK7.js.map +1 -0
- package/dist/chunk-6VIOO74O.js +51 -0
- package/dist/chunk-6VIOO74O.js.map +1 -0
- package/dist/{chunk-52XO4ULK.js → chunk-7DI3HGKL.js} +32 -14
- package/dist/chunk-7DI3HGKL.js.map +1 -0
- package/dist/{chunk-MGNYPVOJ.js → chunk-AQYAVLZK.js} +2 -2
- package/dist/{chunk-BNQ5O6LE.js → chunk-AUNBGZS4.js} +2 -2
- package/dist/chunk-BGPGQF35.js +248 -0
- package/dist/chunk-BGPGQF35.js.map +1 -0
- package/dist/chunk-BKL3DF2Q.js +45 -0
- package/dist/chunk-BKL3DF2Q.js.map +1 -0
- package/dist/{chunk-AX3SZZWA.js → chunk-BKTPEATV.js} +13 -6
- package/dist/chunk-BKTPEATV.js.map +1 -0
- package/dist/{chunk-H7WJK7NJ.js → chunk-CKPJTMNC.js} +13 -6
- package/dist/chunk-CKPJTMNC.js.map +1 -0
- package/dist/{chunk-MR6OBL3B.js → chunk-CXRVM7BA.js} +2 -4
- package/dist/chunk-CXRVM7BA.js.map +1 -0
- package/dist/{chunk-VR3CDXDT.js → chunk-EE5EPS32.js} +2 -2
- package/dist/{chunk-6OWHQ7HM.js → chunk-EGMQ3SXN.js} +2 -11
- package/dist/{chunk-6OWHQ7HM.js.map → chunk-EGMQ3SXN.js.map} +1 -1
- package/dist/{chunk-BMJZBLP7.js → chunk-EZ35IPXZ.js} +10 -7
- package/dist/chunk-EZ35IPXZ.js.map +1 -0
- package/dist/{chunk-OCEFD7V6.js → chunk-F3REOP7N.js} +3 -3
- package/dist/{chunk-C577AJE7.js → chunk-FGLUQSVU.js} +3 -3
- package/dist/{chunk-SEJF7CGJ.js → chunk-J4POGAJF.js} +24 -24
- package/dist/chunk-J4POGAJF.js.map +1 -0
- package/dist/{chunk-O6BA7Q2B.js → chunk-KFDTVSIC.js} +18 -8
- package/dist/chunk-KFDTVSIC.js.map +1 -0
- package/dist/{chunk-LWXRUR6B.js → chunk-LMZXL5RQ.js} +2 -2
- package/dist/{chunk-LWXRUR6B.js.map → chunk-LMZXL5RQ.js.map} +1 -1
- package/dist/{chunk-7FMEMXJ4.js → chunk-MOMI77PL.js} +100 -59
- package/dist/chunk-MOMI77PL.js.map +1 -0
- package/dist/{chunk-BFD5NZQ4.js → chunk-MVYJVKVT.js} +19 -11
- package/dist/chunk-MVYJVKVT.js.map +1 -0
- package/dist/{chunk-X5EG4EFP.js → chunk-MWGDG4QN.js} +2 -2
- package/dist/{chunk-TGLRDEEL.js → chunk-O2HK3NTG.js} +10 -6
- package/dist/chunk-O2HK3NTG.js.map +1 -0
- package/dist/{chunk-6G3KZSO4.js → chunk-OORWBS6F.js} +45 -52
- package/dist/chunk-OORWBS6F.js.map +1 -0
- package/dist/{chunk-CIG7IKX3.js → chunk-OV5UJWS5.js} +4 -4
- package/dist/{chunk-RO6LX3UV.js → chunk-R46CB36B.js} +5 -5
- package/dist/{chunk-52M2XF3W.js → chunk-RG3KDXMR.js} +16 -8
- package/dist/chunk-RG3KDXMR.js.map +1 -0
- package/dist/{chunk-MMFQNJPE.js → chunk-SXGBPQY6.js} +3 -3
- package/dist/chunk-SXGBPQY6.js.map +1 -0
- package/dist/{chunk-XUDTFI4M.js → chunk-T5DJCIUP.js} +2 -2
- package/dist/{chunk-AJJJE7F7.js → chunk-TQLDQ3XZ.js} +2 -2
- package/dist/{chunk-SZRK3VOR.js → chunk-WSMQ5GAP.js} +33 -21
- package/dist/chunk-WSMQ5GAP.js.map +1 -0
- package/dist/{chunk-WYVDNGJB.js → chunk-XMLCXRTS.js} +3 -3
- package/dist/{chunk-K6OLORQL.js → chunk-YEGPTBX5.js} +4 -4
- package/dist/{chunk-YHCYKUA3.js → chunk-ZFY5EMDV.js} +5 -5
- package/dist/{chunk-BKJHAJQW.js → chunk-ZYUASJUN.js} +7 -4
- package/dist/chunk-ZYUASJUN.js.map +1 -0
- package/dist/commands/build/marketplace.js +4 -4
- package/dist/commands/build/plugins.js +7 -6
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +7 -6
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +79 -138
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/index.js +7 -6
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/path.js +6 -5
- package/dist/commands/config/path.js.map +1 -1
- package/dist/commands/config/show.js +7 -6
- package/dist/commands/diff.js +6 -5
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +11 -15
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +63 -69
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +13 -13
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +7 -6
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +14 -16
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +32 -30
- package/dist/commands/list.js +6 -5
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +7 -6
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/marketplace.js +28 -11
- package/dist/commands/new/marketplace.js.map +1 -1
- package/dist/commands/new/skill.js +7 -6
- package/dist/commands/outdated.js +6 -5
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +13 -11
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +9 -10
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +12 -8
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +20 -42
- package/dist/commands/validate.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +4 -3
- package/dist/components/wizard/category-grid.js +5 -3
- package/dist/components/wizard/category-grid.test.js +242 -194
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/checkbox-grid.js +5 -5
- package/dist/components/wizard/checkbox-grid.test.js +5 -5
- package/dist/components/wizard/domain-selection.js +12 -11
- package/dist/components/wizard/help-modal.js +3 -2
- package/dist/components/wizard/menu-item.js +1 -1
- package/dist/components/wizard/search-modal.js +3 -2
- package/dist/components/wizard/search-modal.test.js +3 -2
- package/dist/components/wizard/search-modal.test.js.map +1 -1
- package/dist/components/wizard/section-progress.js +2 -2
- package/dist/components/wizard/section-progress.test.js +3 -3
- package/dist/components/wizard/section-progress.test.js.map +1 -1
- package/dist/components/wizard/selection-card.js +2 -2
- package/dist/components/wizard/source-grid.js +6 -4
- package/dist/components/wizard/source-grid.test.js +65 -40
- package/dist/components/wizard/source-grid.test.js.map +1 -1
- package/dist/components/wizard/stack-selection.js +9 -8
- package/dist/components/wizard/step-agents.js +11 -10
- package/dist/components/wizard/step-agents.test.js +28 -25
- package/dist/components/wizard/step-agents.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +12 -10
- package/dist/components/wizard/step-build.test.js +28 -34
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +6 -4
- package/dist/components/wizard/step-confirm.test.js +11 -15
- package/dist/components/wizard/step-confirm.test.js.map +1 -1
- package/dist/components/wizard/step-refine.js +3 -2
- package/dist/components/wizard/step-refine.test.js +3 -2
- package/dist/components/wizard/step-refine.test.js.map +1 -1
- package/dist/components/wizard/step-settings.js +10 -8
- package/dist/components/wizard/step-settings.test.js +17 -13
- package/dist/components/wizard/step-settings.test.js.map +1 -1
- package/dist/components/wizard/step-sources.js +13 -11
- package/dist/components/wizard/step-sources.test.js +17 -14
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +15 -14
- package/dist/components/wizard/step-stack.test.js +42 -38
- package/dist/components/wizard/step-stack.test.js.map +1 -1
- package/dist/components/wizard/view-title.js +2 -2
- package/dist/components/wizard/wizard-layout.js +10 -8
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard-tabs.test.js +2 -2
- package/dist/components/wizard/wizard.js +29 -27
- package/dist/hooks/init.js +32 -30
- package/dist/hooks/init.js.map +1 -1
- package/dist/{loader-2O32KKAQ.js → loader-4YOZCFIP.js} +4 -4
- package/dist/plugins/dummy-skill/.claude-plugin/.content-hash +1 -0
- package/dist/plugins/dummy-skill/.claude-plugin/plugin.json +13 -0
- package/dist/{source-loader-A6B3NDI4.js → source-loader-O5RMYUBW.js} +6 -5
- package/dist/{source-manager-Q7IQSGIX.js → source-manager-NKLL6HCL.js} +6 -5
- package/dist/stores/matrix-store.js +15 -0
- package/dist/stores/matrix-store.js.map +1 -0
- package/dist/stores/matrix-store.test.js +146 -0
- package/dist/stores/matrix-store.test.js.map +1 -0
- package/dist/stores/wizard-store.js +6 -5
- package/dist/stores/wizard-store.test.js +159 -107
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-52M2XF3W.js.map +0 -1
- package/dist/chunk-52XO4ULK.js.map +0 -1
- package/dist/chunk-6G3KZSO4.js.map +0 -1
- package/dist/chunk-7FMEMXJ4.js.map +0 -1
- package/dist/chunk-AX3SZZWA.js.map +0 -1
- package/dist/chunk-BFD5NZQ4.js.map +0 -1
- package/dist/chunk-BKJHAJQW.js.map +0 -1
- package/dist/chunk-BMJZBLP7.js.map +0 -1
- package/dist/chunk-EMIUPGPL.js.map +0 -1
- package/dist/chunk-G6WHCALR.js.map +0 -1
- package/dist/chunk-H7WJK7NJ.js.map +0 -1
- package/dist/chunk-KIWFEBKH.js.map +0 -1
- package/dist/chunk-MKCHLXMY.js.map +0 -1
- package/dist/chunk-MMFQNJPE.js.map +0 -1
- package/dist/chunk-MR6OBL3B.js.map +0 -1
- package/dist/chunk-O6BA7Q2B.js.map +0 -1
- package/dist/chunk-SDKCQXWE.js.map +0 -1
- package/dist/chunk-SEJF7CGJ.js.map +0 -1
- package/dist/chunk-SZRK3VOR.js.map +0 -1
- package/dist/chunk-TC3NHO34.js +0 -151
- package/dist/chunk-TC3NHO34.js.map +0 -1
- package/dist/chunk-TGLRDEEL.js.map +0 -1
- package/dist/chunk-TZXYBG3R.js.map +0 -1
- package/dist/chunk-WF6RM73R.js.map +0 -1
- /package/dist/{chunk-MGNYPVOJ.js.map → chunk-AQYAVLZK.js.map} +0 -0
- /package/dist/{chunk-BNQ5O6LE.js.map → chunk-AUNBGZS4.js.map} +0 -0
- /package/dist/{chunk-VR3CDXDT.js.map → chunk-EE5EPS32.js.map} +0 -0
- /package/dist/{chunk-OCEFD7V6.js.map → chunk-F3REOP7N.js.map} +0 -0
- /package/dist/{chunk-C577AJE7.js.map → chunk-FGLUQSVU.js.map} +0 -0
- /package/dist/{chunk-X5EG4EFP.js.map → chunk-MWGDG4QN.js.map} +0 -0
- /package/dist/{chunk-CIG7IKX3.js.map → chunk-OV5UJWS5.js.map} +0 -0
- /package/dist/{chunk-RO6LX3UV.js.map → chunk-R46CB36B.js.map} +0 -0
- /package/dist/{chunk-XUDTFI4M.js.map → chunk-T5DJCIUP.js.map} +0 -0
- /package/dist/{chunk-AJJJE7F7.js.map → chunk-TQLDQ3XZ.js.map} +0 -0
- /package/dist/{chunk-WYVDNGJB.js.map → chunk-XMLCXRTS.js.map} +0 -0
- /package/dist/{chunk-K6OLORQL.js.map → chunk-YEGPTBX5.js.map} +0 -0
- /package/dist/{chunk-YHCYKUA3.js.map → chunk-ZFY5EMDV.js.map} +0 -0
- /package/dist/{loader-2O32KKAQ.js.map → loader-4YOZCFIP.js.map} +0 -0
- /package/dist/{source-loader-A6B3NDI4.js.map → source-loader-O5RMYUBW.js.map} +0 -0
- /package/dist/{source-manager-Q7IQSGIX.js.map → source-manager-NKLL6HCL.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,54 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
+
## [0.64.0] - 2026-03-10
|
|
13
|
+
|
|
14
|
+
**Dual-installation scope splitting, config writer named variables, global defaults**
|
|
15
|
+
|
|
16
|
+
- Scope-aware config splitting: global items write to `~/.claude-src/`, project items import from global (D-76/D-80)
|
|
17
|
+
- Config writer extracts typed named variables above export default for readability (D-81)
|
|
18
|
+
- Default scope changed to global; methodology skill auto-injection removed
|
|
19
|
+
|
|
20
|
+
See [changelogs/0.64.0.md](./changelogs/0.64.0.md) for full details.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## [0.63.0] - 2026-03-09
|
|
25
|
+
|
|
26
|
+
**Wizard UX polish, hotkey registry, store-only matrix access**
|
|
27
|
+
|
|
28
|
+
- Centralize wizard hotkeys into `hotkeys.ts` registry with `isHotkey()` helper
|
|
29
|
+
- Remove `--output` flag from compile, remove `label` from `SourceOption`
|
|
30
|
+
- Replace direct `matrix.skills[id]` with store accessors in 7 production files
|
|
31
|
+
|
|
32
|
+
See [changelogs/0.63.0.md](./changelogs/0.63.0.md) for full details.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## [0.62.0] - 2026-03-09
|
|
37
|
+
|
|
38
|
+
**Matrix store — centralized skill lookups, remove parameter threading**
|
|
39
|
+
|
|
40
|
+
- `useMatrixStore` Zustand store replaces matrix parameter threading across resolver, wizard, config, and all commands
|
|
41
|
+
- Remove `matrix` parameter from 9 resolver functions, 4 wizard store functions, 3 build-step functions, and config generator
|
|
42
|
+
- Remove redundant `slug`/`displayName`/`description` from `SkillOption` — derive from store
|
|
43
|
+
|
|
44
|
+
See [changelogs/0.62.0.md](./changelogs/0.62.0.md) for full details.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## [0.61.0] - 2026-03-08
|
|
49
|
+
|
|
50
|
+
**Dual-pass compile for global and project installations**
|
|
51
|
+
|
|
52
|
+
- `compile` detects both global and project installations, runs independent passes for each
|
|
53
|
+
- `writeProjectConfig()` E2E helper with `ProjectConfig` typing, all inline config writes migrated
|
|
54
|
+
- 6 new dual-scope E2E tests covering scope isolation, single-installation fallbacks, and verbose output
|
|
55
|
+
|
|
56
|
+
See [changelogs/0.61.0.md](./changelogs/0.61.0.md) for full details.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
12
60
|
## [0.60.1] - 2026-03-08
|
|
13
61
|
|
|
14
62
|
**Type redundancy cleanup and test infrastructure improvements**
|
package/README.md
CHANGED
|
@@ -1,189 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
<img alt="Agents Inc" src="./assets/logo.svg" width="300">
|
|
3
|
-
</p>
|
|
1
|
+
# cli
|
|
4
2
|
|
|
5
|
-
|
|
3
|
+
Private marketplace for custom skills and stacks.
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
## Directory Structure
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
<!-- TODO: Add animated GIF of the full init wizard flow (stack selection -> skill grid -> agent config -> done).
|
|
15
|
-
This is the hero image. It should show the complete happy path in ~15-20 seconds.
|
|
16
|
-
<p align="center">
|
|
17
|
-
<img src="./assets/init-wizard.gif" alt="Agents Inc init wizard" width="700">
|
|
18
|
-
</p>
|
|
19
|
-
-->
|
|
20
|
-
|
|
21
|
-
## Overview
|
|
22
|
-
|
|
23
|
-
Agents Inc comprises two parts:
|
|
24
|
-
|
|
25
|
-
- **[Marketplace](https://github.com/agents-inc/skills):** 87+ atomic, best-practice skills spanning web, API, CLI, infra, and meta domains
|
|
26
|
-
- **CLI:** installs, ejects, creates, compiles, and updates skills and subagents
|
|
27
|
-
|
|
28
|
-
Skills are composed into 18+ domain-specific subagents through templates and modular agent partials, all validated against strict Zod schemas. Everything is ejectable so there's endless customisation with no lock-in.
|
|
29
|
-
|
|
30
|
-
## How It Works
|
|
31
|
-
|
|
32
|
-
Each subagent is composed from modular partials (role, workflow, output format) plus a set of atomic skills. The CLI manages the full lifecycle:
|
|
33
|
-
|
|
34
|
-
- **Install:** pull skills from the public marketplace, your own, or a local directory either as plugins or directly as source files
|
|
35
|
-
- **Compose:** map skills to subagents, configure preloaded vs dynamic loading
|
|
36
|
-
- **Compile:** resolve skill mappings, Liquid templates, and agent partials into `.claude/agents/`
|
|
37
|
-
- **Eject:** take progressive ownership of any layer (partials, templates, skills, subagents)
|
|
38
|
-
- **Update:** pull upstream skill changes without losing local customizations
|
|
7
|
+
```
|
|
8
|
+
config/stacks.ts # Stack definitions (agent groupings with skill mappings)
|
|
9
|
+
src/skills/ # Custom skill definitions
|
|
10
|
+
```
|
|
39
11
|
|
|
40
|
-
##
|
|
12
|
+
## Creating Skills
|
|
41
13
|
|
|
42
14
|
```bash
|
|
43
|
-
|
|
15
|
+
agentsinc new skill <name> --category <category-name>
|
|
44
16
|
```
|
|
45
17
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
The wizard has three steps:
|
|
49
|
-
|
|
50
|
-
**1. Pick a stack or start from scratch** (or create your own in your custom marketplace):
|
|
51
|
-
|
|
52
|
-
| Stack | Technologies |
|
|
53
|
-
| ------------------ | ------------------------------------------------------------------ |
|
|
54
|
-
| `nextjs-fullstack` | Next.js + React + Hono + Drizzle + PostHog + Zustand + React Query |
|
|
55
|
-
| `angular-stack` | Angular 19 + Signals + NgRx SignalStore + Hono + Drizzle |
|
|
56
|
-
| `vue-stack` | Vue 3 Composition API + Pinia + Hono + Drizzle |
|
|
57
|
-
| `nuxt-stack` | Nuxt + Vue 3 full-stack + Pinia + Hono + Drizzle |
|
|
58
|
-
| `remix-stack` | Remix + React + Hono + Drizzle |
|
|
59
|
-
| `solidjs-stack` | SolidJS + Hono + Drizzle |
|
|
60
|
-
|
|
61
|
-
**2. Customize skills.** Add or remove from the interactive grid.
|
|
62
|
-
|
|
63
|
-
**3. Select subagents.** Choose which role-based subagents to include.
|
|
64
|
-
|
|
65
|
-
**4. Compile.** After init, use `agentsinc edit` to change selections and `agentsinc compile` to rebuild.
|
|
66
|
-
|
|
67
|
-
## Skills
|
|
68
|
-
|
|
69
|
-
87+ skills organized by category:
|
|
70
|
-
|
|
71
|
-
**Web:** `React` `Vue` `Angular` `SolidJS` `Next.js` `Remix` `Nuxt` `SCSS Modules` `CVA` `Zustand` `Pinia` `NgRx SignalStore` `Jotai` `React Query` `SWR` `tRPC` `GraphQL` `React Hook Form` `Zod` `shadcn/ui` `Radix UI` `TanStack Table` `Vitest` `Playwright` `Cypress` `MSW` `Framer Motion` `Storybook` `Accessibility`
|
|
72
|
-
|
|
73
|
-
**API:** `Hono` `Express` `Fastify` `Drizzle` `Prisma` `Better Auth` `PostHog` `Resend` `Axiom + Pino + Sentry` `GitHub Actions`
|
|
74
|
-
|
|
75
|
-
**Mobile:** `React Native` `Expo`
|
|
76
|
-
|
|
77
|
-
**CLI:** `Commander` `oclif + Ink`
|
|
18
|
+
Each skill lives in `src/skills/<skill-name>/` with:
|
|
78
19
|
|
|
79
|
-
|
|
20
|
+
- `SKILL.md` -- Skill content (what the skill teaches)
|
|
21
|
+
- `metadata.yaml` -- Skill metadata (category, author, description, custom: true)
|
|
80
22
|
|
|
81
|
-
|
|
23
|
+
## Using This Marketplace
|
|
82
24
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
17 roles across 7 categories:
|
|
86
|
-
|
|
87
|
-
| Category | Subagents |
|
|
88
|
-
| ---------------- | ------------------------------------------------------------------ |
|
|
89
|
-
| Developers | `web-developer` `api-developer` `cli-developer` `web-architecture` |
|
|
90
|
-
| Reviewers | `web-reviewer` `api-reviewer` `cli-reviewer` |
|
|
91
|
-
| Testers | `web-tester` `cli-tester` |
|
|
92
|
-
| Researchers | `web-researcher` `api-researcher` |
|
|
93
|
-
| Planning | `web-pm` |
|
|
94
|
-
| Pattern Analysis | `pattern-scout` `web-pattern-critique` |
|
|
95
|
-
| Documentation | `documentor` |
|
|
96
|
-
| Meta | `skill-summoner` `agent-summoner` |
|
|
97
|
-
|
|
98
|
-
## Commands
|
|
99
|
-
|
|
100
|
-
### Primary
|
|
101
|
-
|
|
102
|
-
| Command | Description |
|
|
103
|
-
| --------- | --------------------------------------------------------------------------- |
|
|
104
|
-
| `init` | Interactive setup wizard: pick a stack, customize skills, compile subagents |
|
|
105
|
-
| `edit` | Modify skill selection in the interactive wizard |
|
|
106
|
-
| `compile` | Recompile subagents after changes |
|
|
107
|
-
| `update` | Pull latest skills from source |
|
|
108
|
-
|
|
109
|
-
### Customization
|
|
110
|
-
|
|
111
|
-
| Command | Description |
|
|
112
|
-
| -------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
113
|
-
| `eject <type>` | Export for customization (`agent-partials`, `templates`, `skills`, `all`) |
|
|
114
|
-
| `new skill` | Scaffold a custom skill  |
|
|
115
|
-
| `new agent` | Scaffold a custom agent  |
|
|
116
|
-
| `import skill` | Import a skill from an external GitHub repository  |
|
|
117
|
-
| `search` | Search skills across sources  |
|
|
118
|
-
|
|
119
|
-
### Diagnostics
|
|
120
|
-
|
|
121
|
-
| Command | Description |
|
|
122
|
-
| ----------- | ------------------------------------------------------------------------------------------------------------ |
|
|
123
|
-
| `doctor` | Diagnose setup issues |
|
|
124
|
-
| `diff` | Show changes between local and source skills  |
|
|
125
|
-
| `outdated` | Check for skill updates |
|
|
126
|
-
| `validate` | Validate config and skill structure |
|
|
127
|
-
| `info` | Show project configuration details |
|
|
128
|
-
| `uninstall` | Remove Agents Inc from your project |
|
|
129
|
-
|
|
130
|
-
Run `agentsinc --help` for full usage.
|
|
131
|
-
|
|
132
|
-
## Customization
|
|
133
|
-
|
|
134
|
-
Progressive layers from config to full extension:
|
|
135
|
-
|
|
136
|
-
| Layer | How |
|
|
137
|
-
| --------------- | ---------------------------------------------------------------------------------------------- |
|
|
138
|
-
| Edit config | `.claude-src/config.yaml`; skill-to-subagent mappings, preloaded/dynamic |
|
|
139
|
-
| Wizard | `agentsinc edit`; add/remove skills interactively |
|
|
140
|
-
| Eject partials | `agentsinc eject agent-partials`; customize agent partials such as intro, workflow, and output |
|
|
141
|
-
| Eject templates | `agentsinc eject templates`; modify Liquid templates |
|
|
142
|
-
| Eject skills | `agentsinc eject skills`; fork skills for local editing |
|
|
143
|
-
| Custom skills | `agentsinc new skill`; scaffold with proper metadata |
|
|
144
|
-
| Custom agents | `agentsinc new agent`; scaffold agent files |
|
|
145
|
-
| Custom sources | Point to a private repo or local directory as a skill source |
|
|
146
|
-
| Plugins | Package skills/subagents as Claude Code plugins for distribution |
|
|
147
|
-
|
|
148
|
-
Templates apply globally across all subagents; partials apply to specific roles. Put shared conventions in a template for consistency, and role-specific behaviour in partials.
|
|
149
|
-
|
|
150
|
-
Import skills from any GitHub repository:
|
|
25
|
+
Point the CLI at this marketplace as a source:
|
|
151
26
|
|
|
152
27
|
```bash
|
|
153
|
-
|
|
154
|
-
agentsinc
|
|
155
|
-
agentsinc import skill github:your-org/skills --all
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
## Tech Stack
|
|
159
|
-
|
|
160
|
-
| Component | Technology |
|
|
161
|
-
| ------------ | ------------------------------------- |
|
|
162
|
-
| Commands | oclif |
|
|
163
|
-
| Terminal UI | Ink + React |
|
|
164
|
-
| Wizard state | Zustand |
|
|
165
|
-
| Validation | Zod (30+ schemas at parse boundaries) |
|
|
166
|
-
| Compilation | LiquidJS |
|
|
167
|
-
| Testing | Vitest |
|
|
28
|
+
# Local development
|
|
29
|
+
agentsinc init --source /path/to/cli
|
|
168
30
|
|
|
31
|
+
# From a git repository
|
|
32
|
+
agentsinc init --source github:your-org/cli
|
|
169
33
|
```
|
|
170
|
-
src/cli/
|
|
171
|
-
commands/ # oclif command definitions
|
|
172
|
-
components/ # Ink/React terminal UI components
|
|
173
|
-
lib/ # Core logic (compiler, loader, resolver, schemas)
|
|
174
|
-
stores/ # Zustand state management
|
|
175
|
-
utils/ # Shared utilities
|
|
176
|
-
src/agents/ # Subagent definitions (18 roles)
|
|
177
|
-
config/ # Skills matrix, stacks, default mappings
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
See [docs/reference/architecture.md](./docs/reference/architecture.md) for the full reference.
|
|
181
|
-
|
|
182
|
-
## Links
|
|
183
34
|
|
|
184
|
-
|
|
185
|
-
- [Architecture Reference](./docs/reference/architecture.md): full system documentation
|
|
186
|
-
|
|
187
|
-
## License
|
|
35
|
+
## How It Works
|
|
188
36
|
|
|
189
|
-
|
|
37
|
+
The CLI auto-discovers skills from the `src/skills/` directory
|
|
38
|
+
and stacks from `config/stacks.ts`.
|
|
39
|
+
Custom categories are discovered from skill `metadata.yaml` files with `custom: true`.
|
|
40
|
+
Custom skills appear alongside built-in ones in the wizard. No manual registration needed.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
Wizard
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-OORWBS6F.js";
|
|
5
5
|
import {
|
|
6
6
|
STATUS_MESSAGES,
|
|
7
7
|
SUCCESS_MESSAGES
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-CXRVM7BA.js";
|
|
9
9
|
import {
|
|
10
10
|
claudePluginInstall,
|
|
11
11
|
claudePluginMarketplaceAdd,
|
|
@@ -21,11 +21,15 @@ import {
|
|
|
21
21
|
installPluginConfig,
|
|
22
22
|
loadProjectConfig,
|
|
23
23
|
loadSkillsMatrixFromSource
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-53URJ5XK.js";
|
|
25
|
+
import {
|
|
26
|
+
getSkill,
|
|
27
|
+
useMatrixStore
|
|
28
|
+
} from "./chunk-BKL3DF2Q.js";
|
|
25
29
|
import {
|
|
26
30
|
BaseCommand,
|
|
27
31
|
EXIT_CODES
|
|
28
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-EE5EPS32.js";
|
|
29
33
|
import {
|
|
30
34
|
disableBuffering,
|
|
31
35
|
drainBuffer,
|
|
@@ -36,7 +40,7 @@ import {
|
|
|
36
40
|
settingsFileSchema,
|
|
37
41
|
warn,
|
|
38
42
|
warnUnknownFields
|
|
39
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-LMZXL5RQ.js";
|
|
40
44
|
import {
|
|
41
45
|
ASCII_LOGO,
|
|
42
46
|
CLAUDE_DIR,
|
|
@@ -46,7 +50,7 @@ import {
|
|
|
46
50
|
DEFAULT_BRANDING,
|
|
47
51
|
GLOBAL_INSTALL_ROOT,
|
|
48
52
|
MAX_CONFIG_FILE_SIZE
|
|
49
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-EGMQ3SXN.js";
|
|
50
54
|
import {
|
|
51
55
|
init_esm_shims
|
|
52
56
|
} from "./chunk-DHET7RCE.js";
|
|
@@ -407,11 +411,11 @@ var Init = class _Init extends BaseCommand {
|
|
|
407
411
|
disableBuffering();
|
|
408
412
|
let wizardResult = null;
|
|
409
413
|
const marketplaceLabel = getMarketplaceLabel(sourceResult);
|
|
414
|
+
useMatrixStore.getState().setMatrix(sourceResult.matrix);
|
|
410
415
|
const { waitUntilExit } = render(
|
|
411
416
|
/* @__PURE__ */ jsx2(
|
|
412
417
|
Wizard,
|
|
413
418
|
{
|
|
414
|
-
matrix: sourceResult.matrix,
|
|
415
419
|
version: this.config.version,
|
|
416
420
|
marketplaceLabel,
|
|
417
421
|
logo: ASCII_LOGO,
|
|
@@ -530,7 +534,6 @@ var Init = class _Init extends BaseCommand {
|
|
|
530
534
|
}
|
|
531
535
|
}
|
|
532
536
|
async installLocalMode(result, sourceResult, flags, projectDir) {
|
|
533
|
-
const matrix = sourceResult.matrix;
|
|
534
537
|
this.log("Copying skills to local directory...");
|
|
535
538
|
try {
|
|
536
539
|
const installResult = await installLocal({
|
|
@@ -555,8 +558,7 @@ var Init = class _Init extends BaseCommand {
|
|
|
555
558
|
this.log("Skills copied to:");
|
|
556
559
|
this.log(` ${installResult.skillsDir}`);
|
|
557
560
|
for (const copiedSkill of installResult.copiedSkills) {
|
|
558
|
-
const
|
|
559
|
-
const displayName = skill?.displayName || copiedSkill.skillId;
|
|
561
|
+
const displayName = getSkill(copiedSkill.skillId).displayName;
|
|
560
562
|
this.log(` ${displayName}/`);
|
|
561
563
|
}
|
|
562
564
|
this.log("");
|
|
@@ -590,4 +592,4 @@ export {
|
|
|
590
592
|
showDashboard,
|
|
591
593
|
Init
|
|
592
594
|
};
|
|
593
|
-
//# sourceMappingURL=chunk-
|
|
595
|
+
//# sourceMappingURL=chunk-3YNT3NX3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/init.tsx","../src/cli/lib/permission-checker.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nimport { Flags } from \"@oclif/core\";\nimport { render, Box, Text, useApp, useInput } from \"ink\";\nimport os from \"os\";\nimport path from \"path\";\n\nimport { BaseCommand } from \"../base-command.js\";\nimport { Wizard, type WizardResultV2 } from \"../components/wizard/wizard.js\";\nimport {\n loadSkillsMatrixFromSource,\n getMarketplaceLabel,\n type SourceLoadResult,\n} from \"../lib/loading/index.js\";\nimport {\n installLocal,\n installPluginConfig,\n detectGlobalInstallation,\n detectProjectInstallation,\n deriveInstallMode,\n} from \"../lib/installation/index.js\";\nimport { checkPermissions } from \"../lib/permission-checker.js\";\nimport { getInstallationInfo } from \"../lib/plugins/plugin-info.js\";\nimport { hasIndividualPlugins } from \"../lib/plugins/index.js\";\nimport {\n claudePluginInstall,\n claudePluginMarketplaceExists,\n claudePluginMarketplaceAdd,\n} from \"../utils/exec.js\";\nimport {\n ASCII_LOGO,\n CLAUDE_SRC_DIR,\n CLI_BIN_NAME,\n CLI_COLORS,\n DEFAULT_BRANDING,\n GLOBAL_INSTALL_ROOT,\n} from \"../consts.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { getSkill, useMatrixStore } from \"../stores/matrix-store\";\nimport { loadProjectConfig } from \"../lib/configuration/project-config.js\";\nimport {\n enableBuffering,\n drainBuffer,\n disableBuffering,\n type StartupMessage,\n} from \"../utils/logger.js\";\nimport { SUCCESS_MESSAGES, STATUS_MESSAGES } from \"../utils/messages.js\";\nimport { ensureBlankGlobalConfig } from \"../lib/configuration/config-writer.js\";\n\ntype DashboardOption = {\n label: string;\n command: string;\n};\n\nconst DASHBOARD_OPTIONS: DashboardOption[] = [\n { label: \"Edit\", command: \"edit\" },\n { label: \"Compile\", command: \"compile\" },\n { label: \"Doctor\", command: \"doctor\" },\n { label: \"List\", command: \"list\" },\n];\n\ntype DashboardProps = DashboardData & {\n onSelect: (command: string) => void;\n onCancel: () => void;\n};\n\nconst Dashboard: React.FC<DashboardProps> = ({\n skillCount,\n agentCount,\n source,\n mode,\n onSelect,\n onCancel,\n}) => {\n const { exit } = useApp();\n const [focusIndex, setFocusIndex] = useState(0);\n\n useInput((_input, key) => {\n if (key.escape) {\n onCancel();\n exit();\n return;\n }\n if (key.return) {\n onSelect(DASHBOARD_OPTIONS[focusIndex].command);\n exit();\n return;\n }\n if (key.leftArrow) {\n setFocusIndex((i) => (i > 0 ? i - 1 : DASHBOARD_OPTIONS.length - 1));\n }\n if (key.rightArrow) {\n setFocusIndex((i) => (i < DASHBOARD_OPTIONS.length - 1 ? i + 1 : 0));\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold>{DEFAULT_BRANDING.NAME}</Text>\n <Text> </Text>\n <Text> Skills: {skillCount} installed</Text>\n <Text> Agents: {agentCount} compiled</Text>\n <Text> Mode: {mode === \"plugin\" ? \"Plugin\" : \"Local\"}</Text>\n {source && <Text> Source: {source}</Text>}\n <Text> </Text>\n <Box>\n <Text> </Text>\n {DASHBOARD_OPTIONS.map((option, index) => (\n <Box key={option.command} marginRight={1}>\n <Text\n color={index === focusIndex ? CLI_COLORS.FOCUS : undefined}\n bold={index === focusIndex}\n >\n [{option.label}]\n </Text>\n </Box>\n ))}\n </Box>\n <Text dimColor> Use arrow keys to select, Enter to confirm, Esc to exit</Text>\n </Box>\n );\n};\n\ntype GlobalConfigChoice = \"edit-global\" | \"create-project\";\n\nconst GLOBAL_CONFIG_OPTIONS: { label: string; choice: GlobalConfigChoice }[] = [\n { label: \"Edit global installation\", choice: \"edit-global\" },\n { label: \"Create new project installation\", choice: \"create-project\" },\n];\n\ntype GlobalConfigPromptProps = {\n globalConfigDir: string;\n onSelect: (choice: GlobalConfigChoice) => void;\n onCancel: () => void;\n};\n\nconst GlobalConfigPrompt: React.FC<GlobalConfigPromptProps> = ({\n globalConfigDir,\n onSelect,\n onCancel,\n}) => {\n const { exit } = useApp();\n const [focusIndex, setFocusIndex] = useState(0);\n\n useInput((_input, key) => {\n if (key.escape) {\n onCancel();\n exit();\n return;\n }\n if (key.return) {\n onSelect(GLOBAL_CONFIG_OPTIONS[focusIndex].choice);\n exit();\n return;\n }\n if (key.leftArrow) {\n setFocusIndex((i) => (i > 0 ? i - 1 : GLOBAL_CONFIG_OPTIONS.length - 1));\n }\n if (key.rightArrow) {\n setFocusIndex((i) => (i < GLOBAL_CONFIG_OPTIONS.length - 1 ? i + 1 : 0));\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text>A global installation was found at {globalConfigDir}</Text>\n <Text>What would you like to do?</Text>\n <Text> </Text>\n <Box>\n <Text> </Text>\n {GLOBAL_CONFIG_OPTIONS.map((option, index) => (\n <Box key={option.choice} marginRight={1}>\n <Text\n color={index === focusIndex ? CLI_COLORS.FOCUS : undefined}\n bold={index === focusIndex}\n >\n [{option.label}]\n </Text>\n </Box>\n ))}\n </Box>\n <Text dimColor> Use arrow keys to select, Enter to confirm, Esc to exit</Text>\n </Box>\n );\n};\n\nexport type DashboardData = {\n skillCount: number;\n agentCount: number;\n mode: string;\n source?: string;\n};\n\n/** Gathers dashboard data from the installation and project config. */\nexport async function getDashboardData(projectDir: string): Promise<DashboardData> {\n const [info, loaded] = await Promise.all([getInstallationInfo(), loadProjectConfig(projectDir)]);\n\n // Skill count from config (canonical source of truth for installed skills)\n const skillCount = loaded?.config?.skills?.length ?? 0;\n // Agent count from filesystem (compiled .md files in agents dir)\n const agentCount = info?.agentCount ?? 0;\n const mode =\n info?.mode ?? (loaded?.config?.skills ? deriveInstallMode(loaded.config.skills) : \"local\");\n const source = loaded?.config?.source;\n\n return { skillCount, agentCount, mode, source };\n}\n\n/** Formats the dashboard summary as plain text lines (for non-interactive/test output). */\nexport function formatDashboardText(data: DashboardData): string {\n const modeLabel = data.mode === \"plugin\" ? \"Plugin\" : \"Local\";\n const lines = [\n DEFAULT_BRANDING.NAME,\n \"\",\n ` Skills: ${data.skillCount} installed`,\n ` Agents: ${data.agentCount} compiled`,\n ` Mode: ${modeLabel}`,\n ];\n if (data.source) {\n lines.push(` Source: ${data.source}`);\n }\n lines.push(\"\");\n lines.push(` [Edit] [Compile] [Doctor] [List]`);\n return lines.join(\"\\n\");\n}\n\n/**\n * Shows the project dashboard and returns the selected command (or null if cancelled).\n * In non-interactive environments (no TTY), prints the summary text and returns null.\n */\nexport async function showDashboard(\n projectDir: string,\n log?: (message: string) => void,\n): Promise<string | null> {\n const data = await getDashboardData(projectDir);\n\n // Non-interactive: print text summary and exit (CI, piped, tests)\n if (!process.stdin.isTTY) {\n const output = log ?? console.log;\n output(formatDashboardText(data));\n return null;\n }\n\n let selectedCommand: string | null = null;\n\n const { waitUntilExit } = render(\n <Dashboard\n skillCount={data.skillCount}\n agentCount={data.agentCount}\n source={data.source}\n mode={data.mode}\n onSelect={(command) => {\n selectedCommand = command;\n }}\n onCancel={() => {\n selectedCommand = null;\n }}\n />,\n );\n\n await waitUntilExit();\n\n return selectedCommand;\n}\n\nexport default class Init extends BaseCommand {\n static summary = `Initialize ${DEFAULT_BRANDING.NAME} in this project`;\n static description =\n \"Interactive wizard to set up skills and agents. Supports Plugin Mode (native install) and Local Mode (copy to .claude/).\";\n\n static examples = [\n {\n description: \"Start the setup wizard\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n {\n description: \"Initialize from a custom marketplace\",\n command: \"<%= config.bin %> <%= command.id %> --source github:org/marketplace\",\n },\n {\n description: \"Force refresh skills from remote\",\n command: \"<%= config.bin %> <%= command.id %> --refresh\",\n },\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n refresh: Flags.boolean({\n description: \"Force refresh from remote source\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Init);\n const projectDir = process.cwd();\n\n // For \"already initialized\" check, only look at the target directory (no global fallback)\n const individualPluginsExist = await hasIndividualPlugins(projectDir);\n const existingInstallation = await detectProjectInstallation(projectDir);\n\n if (individualPluginsExist || existingInstallation) {\n const selectedCommand = await showDashboard(projectDir, (msg) => this.log(msg));\n if (selectedCommand) {\n await this.config.runCommand(selectedCommand);\n }\n return;\n }\n\n // No project config exists: check if a global installation exists\n const globalInstallation = await detectGlobalInstallation();\n if (globalInstallation) {\n const globalConfigDir = path.join(os.homedir(), CLAUDE_SRC_DIR);\n\n // Non-interactive: skip prompt and fall through to wizard\n if (process.stdin.isTTY) {\n let globalChoice: GlobalConfigChoice | null = null;\n\n const { waitUntilExit: waitForPrompt } = render(\n <GlobalConfigPrompt\n globalConfigDir={globalConfigDir}\n onSelect={(choice) => {\n globalChoice = choice;\n }}\n onCancel={() => {\n globalChoice = null;\n }}\n />,\n );\n\n await waitForPrompt();\n\n if (globalChoice === \"edit-global\") {\n const selectedCommand = await showDashboard(os.homedir(), (msg) => this.log(msg));\n if (selectedCommand) {\n await this.config.runCommand(selectedCommand);\n }\n return;\n }\n\n // User cancelled (Esc)\n if (globalChoice === null) {\n return;\n }\n\n // \"create-project\" falls through to wizard below\n }\n }\n\n // Auto-create blank global config on first init from a project directory.\n // This ensures the project config can always import from global.\n if (projectDir !== GLOBAL_INSTALL_ROOT) {\n const created = await ensureBlankGlobalConfig();\n if (created) {\n this.log(\"Created blank global config at ~/\" + CLAUDE_SRC_DIR);\n }\n }\n\n enableBuffering();\n\n let sourceResult: SourceLoadResult;\n let startupMessages: StartupMessage[] = [];\n try {\n sourceResult = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n projectDir,\n forceRefresh: flags.refresh,\n });\n } catch (error) {\n disableBuffering();\n this.error(getErrorMessage(error), {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n startupMessages = drainBuffer();\n disableBuffering();\n\n let wizardResult: WizardResultV2 | null = null;\n\n const marketplaceLabel = getMarketplaceLabel(sourceResult);\n useMatrixStore.getState().setMatrix(sourceResult.matrix);\n const { waitUntilExit } = render(\n <Wizard\n version={this.config.version}\n marketplaceLabel={marketplaceLabel}\n logo={ASCII_LOGO}\n projectDir={projectDir}\n startupMessages={startupMessages}\n onComplete={(result) => {\n // Boundary cast: Ink render callback returns unknown result type\n wizardResult = result as WizardResultV2;\n }}\n onCancel={() => {\n this.log(\"Setup cancelled\");\n }}\n />,\n );\n\n await waitUntilExit();\n\n // Boundary cast: re-narrow after Ink waitUntilExit()\n const result = wizardResult as WizardResultV2 | null;\n if (!result || result.cancelled) {\n this.exit(EXIT_CODES.CANCELLED);\n }\n\n if (result.skills.length === 0) {\n this.error(\"No skills selected\", { exit: EXIT_CODES.ERROR });\n }\n\n await this.handleInstallation(result, sourceResult, flags);\n }\n\n private async handleInstallation(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string; refresh: boolean },\n ): Promise<void> {\n const projectDir = process.cwd();\n const installMode = deriveInstallMode(result.skills);\n\n this.log(\"\\n\");\n this.log(`Selected ${result.skills.length} skills`);\n this.log(\n `Install mode: ${installMode === \"plugin\" ? \"Plugin (native install)\" : \"Local (copy to .claude/skills/)\"}`,\n );\n\n if (installMode === \"plugin\") {\n if (sourceResult.marketplace) {\n await this.installIndividualPlugins(result, sourceResult, flags, projectDir);\n } else {\n this.warn(\"Plugin Mode requires a marketplace for individual skill installation.\");\n this.log(`Falling back to Local Mode (copying to .claude/skills/)...`);\n this.log(\"To use Plugin Mode, either select a stack or configure a marketplace source.\\n\");\n await this.installLocalMode(result, sourceResult, flags, projectDir);\n }\n return;\n }\n\n await this.installLocalMode(result, sourceResult, flags, projectDir);\n }\n\n private async installIndividualPlugins(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string },\n projectDir: string,\n ): Promise<void> {\n if (sourceResult.marketplace) {\n const marketplaceExists = await claudePluginMarketplaceExists(sourceResult.marketplace);\n\n if (!marketplaceExists) {\n this.log(`Registering marketplace \"${sourceResult.marketplace}\"...`);\n try {\n const marketplaceSource = sourceResult.sourceConfig.source.replace(/^github:/, \"\");\n await claudePluginMarketplaceAdd(marketplaceSource);\n this.log(`Registered marketplace: ${sourceResult.marketplace}`);\n } catch (error) {\n this.error(getErrorMessage(error), {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n }\n\n this.log(\"Installing skill plugins...\");\n for (const skill of result.skills.filter((s) => s.source !== \"local\")) {\n const pluginRef = `${skill.id}@${sourceResult.marketplace}`;\n const pluginScope = skill.scope === \"global\" ? \"user\" : \"project\";\n try {\n await claudePluginInstall(pluginRef, pluginScope, projectDir);\n this.log(` Installed ${pluginRef}`);\n } catch (error) {\n this.error(`Failed to install plugin ${pluginRef}: ${getErrorMessage(error)}`, {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n\n const pluginSkillCount = result.skills.filter((s) => s.source !== \"local\").length;\n this.log(`Installed ${pluginSkillCount} skill plugins\\n`);\n\n this.log(\"Generating configuration...\");\n try {\n const configResult = await installPluginConfig({\n wizardResult: result,\n sourceResult,\n projectDir,\n sourceFlag: flags.source,\n });\n\n if (configResult.wasMerged) {\n this.log(`Merged with existing config at ${configResult.mergedConfigPath}`);\n }\n\n this.log(`Configuration saved (${configResult.config.agents.length} agents)\\n`);\n this.log(STATUS_MESSAGES.COMPILING_AGENTS);\n this.log(`Compiled ${configResult.compiledAgents.length} agents to .claude/agents/\\n`);\n\n this.log(`${SUCCESS_MESSAGES.INIT_SUCCESS}\\n`);\n this.log(\"Agents compiled to:\");\n this.log(` ${configResult.agentsDir}`);\n for (const agentName of configResult.compiledAgents) {\n this.log(` ${agentName}.md`);\n }\n this.log(\"\");\n this.log(\"Configuration:\");\n this.log(` ${configResult.configPath}`);\n this.log(\"\");\n this.log(\"To customize agent-skill assignments:\");\n this.log(` 1. Edit .claude-src/config.ts`);\n this.log(` 2. Run '${CLI_BIN_NAME} compile' to regenerate agents`);\n this.log(\"\");\n\n const permissionWarning = await checkPermissions(projectDir);\n if (permissionWarning) {\n const { waitUntilExit } = render(permissionWarning);\n await waitUntilExit();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async installLocalMode(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string },\n projectDir: string,\n ): Promise<void> {\n this.log(\"Copying skills to local directory...\");\n try {\n const installResult = await installLocal({\n wizardResult: result,\n sourceResult,\n projectDir,\n sourceFlag: flags.source,\n });\n\n this.log(`Copied ${installResult.copiedSkills.length} skills to .claude/skills/\\n`);\n this.log(\"Generating configuration...\");\n\n if (installResult.wasMerged) {\n this.log(`Merged with existing config at ${installResult.mergedConfigPath}`);\n }\n\n this.log(`Configuration saved (${installResult.config.agents.length} agents)\\n`);\n this.log(STATUS_MESSAGES.COMPILING_AGENTS);\n this.log(`Compiled ${installResult.compiledAgents.length} agents to .claude/agents/\\n`);\n\n this.log(`${SUCCESS_MESSAGES.INIT_SUCCESS}\\n`);\n this.log(\"Skills copied to:\");\n this.log(` ${installResult.skillsDir}`);\n for (const copiedSkill of installResult.copiedSkills) {\n const displayName = getSkill(copiedSkill.skillId).displayName;\n this.log(` ${displayName}/`);\n }\n this.log(\"\");\n this.log(\"Agents compiled to:\");\n this.log(` ${installResult.agentsDir}`);\n for (const agentName of installResult.compiledAgents) {\n this.log(` ${agentName}.md`);\n }\n this.log(\"\");\n this.log(\"Configuration:\");\n this.log(` ${installResult.configPath}`);\n this.log(\"\");\n this.log(\"To customize agent-skill assignments:\");\n this.log(` 1. Edit .claude-src/config.ts`);\n this.log(` 2. Run '${CLI_BIN_NAME} compile' to regenerate agents`);\n this.log(\"\");\n\n const permissionWarning = await checkPermissions(projectDir);\n if (permissionWarning) {\n const { waitUntilExit } = render(permissionWarning);\n await waitUntilExit();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n}\n","import React from \"react\";\n\nimport { Text, Box } from \"ink\";\nimport path from \"path\";\n\nimport { CLAUDE_DIR, CLI_COLORS, MAX_CONFIG_FILE_SIZE } from \"../consts\";\nimport { fileExists, readFileSafe } from \"../utils/fs\";\nimport { warn } from \"../utils/logger\";\nimport { settingsFileSchema, warnUnknownFields } from \"./schemas\";\n\ntype PermissionConfig = {\n allow?: string[];\n deny?: string[];\n};\n\ntype SettingsFile = {\n permissions?: PermissionConfig;\n};\n\nexport async function checkPermissions(projectRoot: string): Promise<React.ReactElement | null> {\n const settingsPath = path.join(projectRoot, CLAUDE_DIR, \"settings.json\");\n const localSettingsPath = path.join(projectRoot, CLAUDE_DIR, \"settings.local.json\");\n\n let permissions: PermissionConfig | undefined;\n\n for (const filePath of [localSettingsPath, settingsPath]) {\n if (await fileExists(filePath)) {\n try {\n const content = await readFileSafe(filePath, MAX_CONFIG_FILE_SIZE);\n const raw = JSON.parse(content);\n if (typeof raw === \"object\" && raw !== null && !Array.isArray(raw)) {\n // Known Claude CLI settings.json fields (permissions is ours; the rest are managed by Claude CLI)\n const EXPECTED_SETTINGS_KEYS = [\n \"permissions\",\n \"enabledPlugins\",\n \"env\",\n \"allowedTools\",\n \"customInstructions\",\n \"defaultModel\",\n ] as const;\n warnUnknownFields(\n raw as Record<string, unknown>,\n EXPECTED_SETTINGS_KEYS,\n `settings file '${filePath}'`,\n );\n }\n const result = settingsFileSchema.safeParse(raw);\n const parsed: SettingsFile = result.success ? (result.data as SettingsFile) : {};\n if (parsed.permissions) {\n permissions = parsed.permissions;\n break;\n }\n } catch {\n warn(`Malformed settings file at '${filePath}' — skipping`);\n }\n }\n }\n\n if (!permissions) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={CLI_COLORS.WARNING} padding={1}>\n <Text bold color={CLI_COLORS.WARNING}>\n Permission Notice\n </Text>\n <Text>No permissions configured in .claude/settings.json</Text>\n <Text>Agents will prompt for approval on each tool use.</Text>\n <Text> </Text>\n <Text>For autonomous operation, add to .claude/settings.json:</Text>\n <Text> </Text>\n <Text color=\"dim\">{\"{\"}</Text>\n <Text color=\"dim\">{' \"permissions\": {'}</Text>\n <Text color=\"dim\">{' \"allow\": ['}</Text>\n <Text color=\"dim\">{' \"Read(*)\",'}</Text>\n <Text color=\"dim\">{' \"Bash(git *)\",'}</Text>\n <Text color=\"dim\">{' \"Bash(bun *)\"'}</Text>\n <Text color=\"dim\">{\" ]\"}</Text>\n <Text color=\"dim\">{\" }\"}</Text>\n <Text color=\"dim\">{\"}\"}</Text>\n </Box>\n );\n }\n\n const hasRestrictiveBash = permissions.deny?.some(\n (rule) => rule === \"Bash(*)\" || rule === \"Bash\",\n );\n const hasNoAllows = !permissions.allow || permissions.allow.length === 0;\n\n if (hasRestrictiveBash || hasNoAllows) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={CLI_COLORS.WARNING} padding={1}>\n <Text bold color={CLI_COLORS.WARNING}>\n Permission Warnings\n </Text>\n {hasRestrictiveBash && (\n <Text>\n ⚠ Bash is denied in permissions. Some agents require Bash for git, testing, and build\n commands.\n </Text>\n )}\n {hasNoAllows && (\n <Text>⚠ No allow rules configured. Agents will prompt for each tool use.</Text>\n )}\n </Box>\n );\n }\n\n return null;\n}\n"],"mappings":"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","names":["Box","Text","path","jsx","jsxs","Box","Text","path","result"]}
|