joycraft 0.6.15 → 0.6.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,7 +31,15 @@ Most developers plateau at Level 2. Joycraft's job is to move you up.
31
31
 
32
32
  ### Platform support
33
33
 
34
- Joycraft supports **Claude Code**, **OpenAI Codex**, and **Pi** out of the box. Running `npx joycraft init` auto-detects which harnesses your project uses and installs the matching skills no flags, no configuration:
34
+ Joycraft supports **Claude Code**, **OpenAI Codex**, and **Pi** out of the box. When you run `npx joycraft init`, it opens with a quick picker choose any combination of the three, and only the harnesses you select get installed:
35
+
36
+ ```
37
+ Which AI harnesses should Joycraft install?
38
+ claude — Claude Code (.claude/)
39
+ codex — OpenAI Codex (.agents/)
40
+ pi — Pi (.pi/)
41
+ Harnesses [comma-separated, or "all"] (none): claude,pi
42
+ ```
35
43
 
36
44
  | Harness | Skills installed to | Invocation |
37
45
  |---------|---------------------|------------|
@@ -39,7 +47,7 @@ Joycraft supports **Claude Code**, **OpenAI Codex**, and **Pi** out of the box.
39
47
  | Codex | `.agents/skills/` (+ `AGENTS.md`) | `$joycraft-*` |
40
48
  | Pi | `.pi/skills/` (+ pipeline runtime, see below) | `/skill:joycraft-*` |
41
49
 
42
- All three get the same structured workflows, adapted for each tool's invocation model. Codex and Pi surfaces install when their directory (`.agents/` or `.pi/`) is present in the project.
50
+ All three get the same structured workflows, adapted for each tool's invocation model. A single-harness install carries **no footprint from the others** — pick `codex` only and you get `.agents/` with no `.claude/` or `.pi/` in sight. In a non-interactive run (CI, piped, no TTY) `init` installs all three so existing scripts keep working. The shared docs (`CLAUDE.md`, `AGENTS.md`, `docs/`) are written regardless of which harnesses you pick.
43
51
 
44
52
  ### Headless spec execution (Pi)
45
53
 
@@ -70,16 +78,21 @@ cd /path/to/your/project
70
78
  npx joycraft init
71
79
  ```
72
80
 
73
- Joycraft auto-detects your tech stack and creates:
81
+ `init` first asks which harnesses to install (see [Platform support](#platform-support) above), then auto-detects your tech stack and creates:
74
82
 
75
83
  - **CLAUDE.md** with behavioral boundaries (Always / Ask First / Never) and correct build/test/lint commands
76
- - **AGENTS.md** for Codex compatibility
77
- - **20 skills** installed to `.claude/skills/` (Claude Code), `.agents/skills/` (Codex), and `.pi/skills/` (Pi) — see [Which skill do I need?](#which-skill-do-i-need) below
78
- - **Pi pipeline runtime** in `.pi/scripts/joycraft/` (when `.pi/` is present) — the headless spec-execution driver and its helpers
79
- - **docs/** structure: `docs/context/` is created up front; feature work lands in `docs/features/<slug>/{brief.md, research.md, design.md, specs/}` and deferred work in `docs/backlog/` these are created lazily by the skills that write to them
84
+ - **AGENTS.md** for Codex/Pi compatibility
85
+ - **20 skills** installed to the selected harnesses — `.claude/skills/` (Claude Code), `.agents/skills/` (Codex), and/or `.pi/skills/` (Pi) — see [Which skill do I need?](#which-skill-do-i-need) below
86
+ - **Pi pipeline runtime** in `.pi/scripts/joycraft/` (when Pi is selected) — the headless spec-execution driver and its helpers
87
+ - **Agent teams enabled** when Claude Code is selected, `init` sets `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` in `.claude/settings.json` so subagent-driven skills like `/joycraft-research` work out of the box (idempotent it never clobbers a value you already set)
88
+ - **docs/** structure: `docs/context/` is created up front; feature work lands in `docs/features/<slug>/{brief.md, research.md, design.md, specs/}` and deferred work in `docs/backlog/` — these are created lazily by the skills that write to them. Joycraft's own upgrade state lives hidden at `docs/.joycraft/state.json` (harness-neutral, gitignored — never committed)
80
89
  - **Context documents** in `docs/context/`: production map, dangerous assumptions, decision log, institutional knowledge, and troubleshooting guide
81
90
  - **Templates** including atomic spec, feature brief, implementation plan, boundary framework, and workflow templates for scenario generation and autofix loops
82
91
 
92
+ > Pick nothing at the harness prompt and `init` installs nothing — it tells you to re-run and choose at least one harness.
93
+
94
+ **`init` only creates *missing* files.** It is safe to run on a project that already has Joycraft (or a hand-tuned `CLAUDE.md`): an existing `CLAUDE.md`, `AGENTS.md`, template, or skill file is **skipped, never regenerated** — your customizations are left untouched. Only `--force` overwrites existing files. The run summary lists what it skipped (`Skipped N file(s) (already exist, use --force to overwrite)`) so you can see exactly what was preserved. This makes `init` the right command to **fill in a private-profile clone**: a teammate who clones a `private` repo gets the committed `CLAUDE.md`/`AGENTS.md`/`docs/` but not the gitignored harness dirs — running `npx joycraft init` regenerates the missing skill files locally and leaves the committed files alone.
95
+
83
96
  ### Git tracking: shared vs private
84
97
 
85
98
  By default Joycraft assumes you want to **commit** the harness so your whole team
@@ -91,21 +104,26 @@ npx joycraft init --gitignore=shared # default — commit .claude/, .agents/,
91
104
  npx joycraft init --gitignore=private # gitignore them; track only CLAUDE.md, AGENTS.md, docs/
92
105
  ```
93
106
 
94
- Run interactively without the flag and `init` will ask. The choice is saved, so
95
- `npx joycraft upgrade` re-applies it automatically. To switch an existing
96
- project later (or decide from CI), pass the same flag to upgrade:
97
- `npx joycraft upgrade --gitignore=private`. `.gitignore` edits are
98
- append-only — Joycraft never rewrites or removes your existing lines.
107
+ Run interactively without the flag and `init` asks (right after the harness
108
+ picker). The choice is saved, so `npx joycraft upgrade` re-applies it
109
+ automatically. To switch an existing project later (or decide from CI), pass the
110
+ same flag to upgrade: `npx joycraft upgrade --gitignore=private`. `.gitignore`
111
+ edits are append-only — Joycraft never rewrites or removes your existing lines.
99
112
 
100
113
  | Profile | Tracked in git | Gitignored |
101
114
  |---------|----------------|------------|
102
- | `shared` (default) | `CLAUDE.md`, `AGENTS.md`, `docs/`, `.claude/skills/`, `.agents/`, `.pi/` | hidden upgrade state only |
115
+ | `shared` (default) | `CLAUDE.md`, `AGENTS.md`, `docs/`, `.claude/skills/`, `.agents/`, `.pi/` | hidden upgrade state only (`docs/.joycraft/state.json`) |
103
116
  | `private` | `CLAUDE.md`, `AGENTS.md`, `docs/` | `.claude/`, `.agents/`, `.pi/` |
104
117
 
105
118
  > Switching an existing project to `private` only updates `.gitignore`. If
106
119
  > harness files were already committed, untrack them with
107
120
  > `git rm -r --cached .claude .agents .pi` (Joycraft prints this reminder and
108
121
  > never runs git for you).
122
+ >
123
+ > Under `private`, the harness dirs aren't committed — so a teammate who clones
124
+ > the repo gets `CLAUDE.md`/`AGENTS.md` but no skills until they run
125
+ > `npx joycraft init` to regenerate them locally. Joycraft adds a one-line
126
+ > reminder to your generated `CLAUDE.md` and `AGENTS.md` for exactly this reason.
109
127
 
110
128
  ### Supported Stacks
111
129
 
@@ -198,6 +216,8 @@ npx joycraft upgrade
198
216
 
199
217
  Joycraft tracks what it installed vs. what you've customized. Unmodified files update automatically. Customized files show a diff and ask before overwriting. Use `--yes` for CI.
200
218
 
219
+ `upgrade` only refreshes the harnesses you installed at init — a Codex-only project stays Codex-only and never grows a `.claude/` tree. (Projects from before harness selection existed have no recorded choice, so `upgrade` refreshes all three, preserving the old behavior.)
220
+
201
221
  > **Note:** If you're upgrading from an early version, deprecated skill directories (e.g., `/joy`, `/joysmith`, `/tune`) are automatically removed during upgrade.
202
222
 
203
223
  ## Why This Exists