playbook-ai 1.0.0 → 1.2.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 CHANGED
@@ -2,6 +2,30 @@
2
2
 
3
3
  All notable updates to Playbook are documented here. Only impactful changes are listed — new commands, upgraded behavior, and things that make your workflow better. Cosmetic fixes and internal housekeeping are omitted.
4
4
 
5
+ ## [1.2.0] — 2026-03-11
6
+
7
+ ### New Commands
8
+ - **`/new-project`** — Automates full project setup: clone or create a repo, wire terminal alias, generate comprehensive CLAUDE.md and WORK_LOG.md, connect PM tool, and make the initial commit. One command to go from zero to working project.
9
+
10
+ ### Context Management
11
+ - **Efficient WORK_LOG reads** — `/start` now reads only the header + most recent session from WORK_LOG.md instead of the full file. Prevents context bloat as your projects accumulate session history.
12
+ - **Auto-trim on `/end`** — WORK_LOG.md is automatically trimmed to 25 sessions on closeout. Older entries are removed (git history preserves them). No manual cleanup needed.
13
+ - **Claude Code version check** — `/start` now checks your Claude Code version and nudges you if you're significantly behind. Non-blocking, single-line heads up.
14
+
15
+ ### Improvements
16
+ - **Tech stack template** — `tech_stack.md` is now installed automatically during setup and updates (if you don't already have one). Tracks your tools and integrations across projects.
17
+ - **`/new-project` in update flow** — The update script now includes the new-project command in its file list.
18
+
19
+ ## [1.1.0] — 2026-03-09
20
+
21
+ ### Parallel Work Upgrades
22
+ - **Agent Teams** — added as Level 3 in the parallel work hierarchy. Claude can now propose or you can request multi-agent teams for cross-layer features, large refactors, and parallel implementation. Enabled via `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` env var in settings.json.
23
+ - **Ralph Loop** — added as Level 4 in the parallel work hierarchy. Autonomous iteration on well-defined tasks using the official `ralph-wiggum` plugin. Walk-away capability for migrations, test coverage, batch refactors.
24
+ - **Updated hierarchy** — 5 levels from lightest to heaviest: main thread → subagents → agent teams → ralph loop → /handoff
25
+
26
+ ### Fixes
27
+ - **`/start` flow** — briefing no longer blocks waiting for `/rename` response. Rename prompt and briefing now appear in the same message.
28
+
5
29
  ## [1.0.0] — 2026-03-08
6
30
 
7
31
  ### Initial Release
package/CLAUDE.md CHANGED
@@ -15,8 +15,8 @@
15
15
  4. **One feature/task per session** unless you say otherwise — no sprawl
16
16
 
17
17
  ## Session Naming
18
- - On `/start`, **before the briefing**, prompt the user to name the session: `Copy/paste to name this session:` followed by `/rename <project>` in a code block (directory basename)
19
- - **Wait for the user to respond** before presenting the briefing. Do not include both in the same message.
18
+ - On `/start`, **at the top of the response before the briefing**, prompt the user to name the session: `Copy/paste to name this session:` followed by `/rename <project>` in a code block (directory basename)
19
+ - Include the full briefing in the **same message** below the rename prompt. The user can rename at any time — do not wait for it.
20
20
 
21
21
  ## Project Management Integration
22
22
  - Your PM tool (ClickUp, Linear, Notion, Jira, etc.) is the **source of truth for task priorities** when available
@@ -25,6 +25,15 @@
25
25
  - Update task status as work progresses (if MCP is connected)
26
26
  - When bugs, gaps, or future work items are identified, create tasks immediately — don't wait to be asked
27
27
 
28
+ ## Tech Stack Awareness
29
+ - **`~/.claude/tech_stack.md` is the global tech stack registry** — check it before recommending new tools, frameworks, or services
30
+ - **Start with what's already in use**, but always evaluate whether it's the best fit. If a new tool is genuinely better for the job, propose the switch — explain what it replaces, why it's better, and what the migration cost is.
31
+ - Consolidation is a tiebreaker, not a constraint. When two options are roughly equal, pick the one already in the stack. When one is clearly better, recommend it regardless.
32
+ - When a new tool is adopted in any project, add it to tech_stack.md immediately
33
+ - When a tool is dropped, move it to the Deprecated section with the reason and date
34
+ - When evaluating options during `/plan`, reference tech_stack.md to see what's already available
35
+ - If the file doesn't exist yet, create it on first tool adoption using the template from the Playbook repo
36
+
28
37
  ## Development Rules
29
38
  - **Plan before multi-file changes** — use `/plan` to structure the approach, get approval, then execute
30
39
  - **Commit frequently** with clear, descriptive messages
@@ -37,12 +46,26 @@
37
46
  ### Hierarchy (use the lightest option that works)
38
47
  1. **Keep working in main thread** — default for most tasks
39
48
  2. **Subagent (automatic)** — for parallel research, exploration, independent sub-tasks within the same topic. You don't need to do anything.
40
- 3. **Parallel session via `/handoff` (manual)** — for substantial independent work that needs a fresh context window. You open a new terminal, paste a prompt, and report back. Use only when: the task is too large for a subagent, the main session's context is degraded, or the work needs its own lifecycle. Must have material positive impact — don't over-trigger.
49
+ 3. **Agent Team (automatic or requested)** — for parallel *implementation* across multiple layers (frontend + backend + tests, multi-component features, competing hypotheses). Claude may propose a team, or you can request one. Each teammate is a full Claude instance with its own context. Higher token cost (~7x) use only when teammates can work independently on distinct scopes. Requires `"agentTeams": true` in settings.json.
50
+ 4. **Ralph Loop (explicit, via plugin)** — for autonomous iteration on well-defined tasks with clear success criteria. Claude works in a continuous loop, seeing its own prior work, until a completion promise is met or max iterations reached. Great for "walk away" tasks: migrations, test coverage, batch refactors. Install: `/plugin install ralph-wiggum@claude-plugins-official`. Invoke: `/ralph-loop "prompt" --max-iterations N --completion-promise "DONE"`. Cancel: `/cancel-ralph`.
51
+ 5. **Parallel session via `/handoff` (manual)** — for substantial independent work that needs a fresh context window. You open a new terminal, paste a prompt, and report back. Use only when: the task is too large for a subagent, the main session's context is degraded, or the work needs its own lifecycle. Must have material positive impact — don't over-trigger.
41
52
 
42
53
  ### Subagent rules
43
54
  - **Don't use subagents for**: simple file reads, single-file edits, tasks that need back-and-forth with you
44
55
  - **Always return results** — subagent output isn't visible to you unless Claude summarizes it
45
56
 
57
+ ### Agent Team rules
58
+ - **Don't propose teams for**: single-file changes, sequential tasks, same-file edits, or when on a tight token budget
59
+ - **Do propose teams for**: cross-layer features, large refactors with parallelizable chunks, debugging with multiple hypotheses
60
+ - Claude won't create a team without your approval
61
+ - Prefer Opus for team lead, Sonnet for teammates (cost efficiency)
62
+
63
+ ### Ralph Loop rules
64
+ - **Only use for**: tasks with binary success criteria (tests pass, linter clean, migration complete)
65
+ - **Never use for**: tasks requiring judgment calls, design decisions, or unclear completion criteria
66
+ - Always set `--max-iterations` to prevent runaway token usage
67
+ - Start conservative (10-20 iterations), increase if needed
68
+
46
69
  ### Context health
47
70
  - **Proactive saves**: In long sessions, save critical state to WORK_LOG.md incrementally — don't wait for `/end`. Decisions, findings, and intermediate results should be written to disk as they happen, so nothing is lost if auto-compaction occurs.
48
71
  - **Context health warning**: When context is getting heavy AND substantial work remains, proactively warn you. Save current state to WORK_LOG.md first, then present options: wrap up and `/end`, hand off remaining work via `/handoff`, or start a fresh session. Don't warn if the session is almost done — just finish.
package/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.2.0
package/commands/end.md CHANGED
@@ -12,23 +12,29 @@ Session closeout. Do everything needed so the user can walk away without taking
12
12
  - Update "Known Issues / Next Steps" — remove anything completed, add anything new discovered, reprioritize if needed. Be explicit about what's next and what's blocked
13
13
  - If any task is partially done, document exactly where it was left off and what remains
14
14
 
15
- 3. **Update PM tool** (if MCP is connected). Mark completed tasks as done. Update in-progress tasks with status notes. Create new tasks for anything discovered during the session that needs tracking.
15
+ 3. **Trim WORK_LOG.md if needed.** Count the number of dated session entries (lines matching `## YYYY-MM-DD` or `### YYYY-MM-DD`). If there are more than 25 sessions:
16
+ - Keep the Overall State / header section intact
17
+ - Keep the 25 most recent session entries
18
+ - Remove everything older — those sessions have served their purpose and the important bits should already be captured in Overall State and auto-memory
19
+ - Do NOT archive to a separate file — just delete. Git history has the full log if ever needed.
16
20
 
17
- 4. **Cleanup** remove temporary artifacts:
21
+ 4. **Update PM tool** (if MCP is connected). Mark completed tasks as done. Update in-progress tasks with status notes. Create new tasks for anything discovered during the session that needs tracking.
22
+
23
+ 5. **Cleanup** — remove temporary artifacts:
18
24
  - Delete `HANDOFF_RESULT.md` if it exists in the project root
19
25
  - Remove any other temp files created during the session (scratch scripts, debug output, etc.)
20
26
  - Do NOT delete docs/decisions/ files — those are permanent
21
27
 
22
- 5. **Pre-commit checklist** — before committing, verify:
28
+ 6. **Pre-commit checklist** — before committing, verify:
23
29
  - All changes tested/verified (not just "should work" — show evidence)
24
30
  - No hardcoded secrets, tokens, or credentials in code
25
31
  - No uncommitted changes left behind accidentally
26
32
  - No temp files being committed
27
33
  - Branch pushed to origin
28
34
 
29
- 6. **Commit and push.** Stage all changed files, commit with a clear message summarizing the session's work, and push to remote. Do NOT commit .env or credentials.
35
+ 7. **Commit and push.** Stage all changed files, commit with a clear message summarizing the session's work, and push to remote. Do NOT commit .env or credentials.
30
36
 
31
- 7. **Present the closeout summary:**
37
+ 8. **Present the closeout summary:**
32
38
  - **Done this session** — bullet list of completed work
33
39
  - **Left in progress** — anything partially done and where it stands
34
40
  - **Next session priorities** — what `/start` will surface as the top items
@@ -0,0 +1,80 @@
1
+ Set up a new project for Claude Code — clone or create a repo, wire all local config, and get ready for `/start`.
2
+
3
+ ## Gather Info
4
+
5
+ Ask the user (skip anything they already provided):
6
+ 1. **Project name** — this becomes the folder name and terminal alias (e.g., `wildflower`)
7
+ 2. **Repo situation** — one of:
8
+ - **Existing GitHub repo** — provide the repo (e.g., `bluemax713/wildflower` or a full URL)
9
+ - **Create new repo** — public or private? Description?
10
+ - **No repo yet** — just set up the local folder, wire git later
11
+ 3. **PM tool** — should a project/list be created in their PM tool (ClickUp, etc.) via MCP? Skip if no PM MCP is connected.
12
+
13
+ ## Execute Setup
14
+
15
+ Run these steps. Skip any that are already done (e.g., repo already cloned, alias already exists).
16
+
17
+ ### 1. Local repo
18
+
19
+ - **Existing repo:** `git clone` into `~/Documents/GitHub/<name>/`
20
+ - **Create new:** `gh repo create <name> --private/--public --clone` in `~/Documents/GitHub/`
21
+ - **No repo:** `mkdir -p ~/Documents/GitHub/<name> && cd ~/Documents/GitHub/<name> && git init`
22
+ - If `~/Documents/GitHub/<name>/` already exists, STOP and ask — don't overwrite.
23
+
24
+ ### 2. Terminal alias
25
+
26
+ - Add `alias <name>='cd ~/Documents/GitHub/<name> && claude'` to `~/.zshrc`
27
+ - Place it in the "Claude Code project aliases" block with the other aliases
28
+ - If an alias with that name already exists, STOP and ask.
29
+ - Run `source ~/.zshrc` so it works immediately in new shells.
30
+
31
+ ### 3. Project scaffolding
32
+
33
+ Only create files that don't already exist in the repo:
34
+
35
+ - **CLAUDE.md** — Create a **thorough** project-level CLAUDE.md. This is the most important file — it's what Claude reads every session. Don't leave it as a skeleton.
36
+ - Read every file in the repo to understand the project before writing it
37
+ - Include: what the project does, tech stack table, project structure tree, key conventions/business rules, architecture/data flow, and any environment/credential notes
38
+ - Model it after well-structured examples (tech stack table, project tree with descriptions, business rules table, flow diagrams)
39
+ - If the repo is empty/new, write what you know from the user's description and mark unknowns with `[TBD]` — but still create the full structure so it's easy to fill in
40
+ - Never leave CLAUDE.md as a thin placeholder — a future session should be able to understand the project from this file alone
41
+
42
+ - **WORK_LOG.md** — Create with:
43
+ ```
44
+ # <Project Name> Work Log
45
+
46
+ ## Last updated: <today's date>
47
+
48
+ ## Overall State: Project initialized
49
+
50
+ ## Recent Changes (<today's date>)
51
+
52
+ 1. **Project setup** — repo cloned/created, local config wired, ready for `/start`.
53
+
54
+ ## Known Issues / Next Steps
55
+ - Run `/start` to begin first working session
56
+ ```
57
+
58
+ - **.gitignore** — Only create if one doesn't exist. Use a sensible default based on what's in the repo (Node, Python, etc.), or a minimal one if unclear.
59
+
60
+ ### 4. PM integration (optional)
61
+
62
+ If a PM MCP is connected and the user wants it:
63
+ - Create a project/list in the PM tool
64
+ - Note the project ID in WORK_LOG.md for reference
65
+
66
+ ### 5. Initial commit
67
+
68
+ If new files were created:
69
+ - Stage the new files (CLAUDE.md, WORK_LOG.md, .gitignore)
70
+ - Commit: `feat: initialize project for Claude Code`
71
+ - Push to remote if a remote exists
72
+
73
+ ### 6. Confirm
74
+
75
+ Present a summary:
76
+ - **Repo:** cloned/created at `~/Documents/GitHub/<name>/`
77
+ - **Alias:** `<name>` → opens folder + launches Claude
78
+ - **Files created:** list what was scaffolded
79
+ - **PM:** project created (or skipped)
80
+ - **Ready:** type `<name>` in a new terminal to start working, or run `/start` now
package/commands/start.md CHANGED
@@ -1,4 +1,10 @@
1
- Read CLAUDE.md and WORK_LOG.md to understand the project and where we left off.
1
+ Read CLAUDE.md to understand the project rules and conventions.
2
+
3
+ Read WORK_LOG.md **efficiently** — do NOT read the entire file if it's long:
4
+ - Read the **first 30 lines** (Overall State, current status headers)
5
+ - Read the **most recent session section** only (the first dated session entry)
6
+ - Skip all "Previous Sessions" / older dated entries — that history exists for reference but shouldn't be loaded into context on every start
7
+ - If WORK_LOG.md is under 80 lines total, just read the whole thing
2
8
 
3
9
  Check your project management tool via MCP (if available) for current task priorities. If not connected, skip this step and rely on WORK_LOG.md.
4
10
 
@@ -38,11 +44,11 @@ Before anything else, silently check if a newer version of Playbook is available
38
44
  - Via git: `git -C ~/.claude/.playbook diff vA.B.C..origin/main -- CLAUDE.md` (or compare the files directly)
39
45
  - Or: compare `~/.claude/CLAUDE.md` with `~/.claude/.playbook/CLAUDE.md`
40
46
  - If CLAUDE.md has NOT changed upstream: done, continue to briefing.
41
- - If CLAUDE.md HAS changed upstream, tell the user what changed (summarize the differences in plain language), then offer three choices:
47
+ - If CLAUDE.md HAS changed upstream, tell the user what changed (summarize the differences in plain language), then offer two choices:
42
48
  1. **Keep mine** — no changes to your CLAUDE.md
43
- 2. **Use Playbook** — replace your CLAUDE.md with the new Playbook version
44
- 3. **Merge** I'll combine your customizations with the new Playbook changes into one file. I'll show you the result before saving.
45
- - If the user picks **Merge**: read both files, produce a merged version that preserves user customizations while incorporating new upstream content, show it to the user for approval, and only write it after they confirm.
49
+ 2. **Merge** — I'll add the new Playbook changes to your CLAUDE.md while preserving ALL of your customizations. I'll show you the result before saving.
50
+ - **CRITICAL: Never offer a full replacement option.** Users have personal customizations in their CLAUDE.md (their name, MCP server configs, integrations like ClickUp/Perplexity/n8n, custom rules). A full replacement would destroy all of that. The only safe options are keeping theirs or merging.
51
+ - If the user picks **Merge**: read both files, produce a merged version that preserves ALL user customizations (name, integrations, MCP configs, custom sections) while incorporating new upstream structural/feature changes. Show the result to the user for approval, and only write it after they confirm.
46
52
 
47
53
  After any new settings.json permissions are available in the updated Playbook, check if the user's `~/.claude/settings.json` is missing any permissions from the Playbook version. If so, mention: "The new version includes some additional pre-approved permissions: [list them briefly]. Want me to add these to your settings?" Only add with user approval.
48
54
 
@@ -50,6 +56,21 @@ Before anything else, silently check if a newer version of Playbook is available
50
56
 
51
57
  ---
52
58
 
59
+ ## Step 1: Claude Code Version Check
60
+
61
+ After the Playbook update check, verify the user's Claude Code version is reasonably current.
62
+
63
+ 1. Run `claude --version` to get the installed version (format: `X.Y.Z (Claude Code)`).
64
+ 2. Compare the **minor version** (the Y in X.Y.Z) against a minimum: **2.0.0**.
65
+ 3. **Only warn if the user is 2+ minor versions behind the minimum** (e.g., on 1.8.x when minimum is 2.0.0). Patch versions don't matter.
66
+ 4. If behind, show a single-line nudge — not a blocker:
67
+ > **Heads up:** Your Claude Code is vX.Y.Z — the Playbook works best on v2.0+. Run `claude update` to get the latest.
68
+ 5. If current or close enough, say nothing. No output = no noise.
69
+
70
+ This check should be fast (one bash command) and never block the session.
71
+
72
+ ---
73
+
53
74
  ## Normal Briefing
54
75
 
55
76
  Present a concise briefing:
@@ -63,9 +84,9 @@ Keep it short and scannable. Bullet points. No fluff. Wait for direction before
63
84
 
64
85
  ## Session Naming
65
86
 
66
- **Before the briefing**, prompt the user to name the session. Output only this — nothing else:
87
+ **At the top of your response**, before the briefing, prompt the user to name the session:
67
88
 
68
89
  > Copy/paste to name this session:
69
90
  > `/rename <project>`
70
91
 
71
- Where `<project>` is the current directory's basename (e.g., `playbook`). Then **wait for the user to respond** before presenting the briefing. Do not include the briefing in the same message.
92
+ Where `<project>` is the current directory's basename (e.g., `playbook`). Then include the full briefing in the **same message** below the rename prompt. The user can rename at any time do not wait for it.
package/install.sh CHANGED
@@ -80,6 +80,16 @@ else
80
80
  echo " Installed settings.json"
81
81
  fi
82
82
 
83
+ # Copy tech_stack.md template (won't overwrite if exists — user populates this)
84
+ if [ -f "$CLAUDE_DIR/tech_stack.md" ]; then
85
+ echo " tech_stack.md already exists — skipping"
86
+ else
87
+ if [ -f "$PLAYBOOK_DIR/templates/tech_stack.md" ]; then
88
+ cp "$PLAYBOOK_DIR/templates/tech_stack.md" "$CLAUDE_DIR/tech_stack.md"
89
+ echo " Installed tech_stack.md template"
90
+ fi
91
+ fi
92
+
83
93
  # --- Record installed version ---
84
94
  if [ -f "$PLAYBOOK_DIR/VERSION" ]; then
85
95
  cp "$PLAYBOOK_DIR/VERSION" "$CLAUDE_DIR/.playbook-version"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "playbook-ai",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Operating playbook for non-technical founders working with Claude Code",
5
5
  "bin": {
6
6
  "playbook-ai": "bin/cli.js"
@@ -10,6 +10,7 @@
10
10
  "bin/",
11
11
  "lib/",
12
12
  "commands/",
13
+ "templates/",
13
14
  "CLAUDE.md",
14
15
  "settings.json",
15
16
  "install.sh",
package/settings.json CHANGED
@@ -1,4 +1,7 @@
1
1
  {
2
+ "env": {
3
+ "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
4
+ },
2
5
  "permissions": {
3
6
  "allow": [
4
7
  "Bash(python3:*)",
@@ -0,0 +1,48 @@
1
+ # Tech Stack — Global (All Projects)
2
+
3
+ > Single source of truth for tools, services, and integrations in active use.
4
+ > Check this before recommending new tools — prefer what's already here.
5
+
6
+ ## Languages & Runtimes
7
+ | Tool | Used In | Notes |
8
+ |------|---------|-------|
9
+ | — | — | — |
10
+
11
+ ## Frameworks & Libraries
12
+ | Tool | Used In | Notes |
13
+ |------|---------|-------|
14
+ | — | — | — |
15
+
16
+ ## Platforms & Services
17
+ | Tool | Used In | Notes |
18
+ |------|---------|-------|
19
+ | GitHub | all projects | Source control, repos |
20
+
21
+ ## MCP Servers
22
+ | Server | Purpose | Notes |
23
+ |--------|---------|-------|
24
+ | — | — | — |
25
+
26
+ ## Claude Code Plugins
27
+ | Plugin | Purpose | Notes |
28
+ |--------|---------|-------|
29
+ | — | — | — |
30
+
31
+ ## Infrastructure
32
+ | Tool | Used In | Notes |
33
+ |------|---------|-------|
34
+ | — | — | — |
35
+
36
+ ## Deprecated
37
+ | Tool | Was Used In | Reason | Date |
38
+ |------|-------------|--------|------|
39
+ | — | — | — | — |
40
+
41
+ ---
42
+
43
+ **Rules:**
44
+ - When evaluating tools for a new project, check this file first
45
+ - Prefer tools already in use unless there's a strong reason not to
46
+ - When adopting a new tool, add it here immediately
47
+ - When dropping a tool, move it to Deprecated with the reason
48
+ - This file is maintained by Claude across all sessions
package/update.sh CHANGED
@@ -29,9 +29,10 @@ fetch_via_git() {
29
29
  fetch_via_curl() {
30
30
  # Download key files individually via GitHub raw content
31
31
  local files=("VERSION" "CHANGELOG.md" "CLAUDE.md" "settings.json" "install.sh" "update.sh")
32
- local cmd_files=("start.md" "end.md" "plan.md" "debug.md" "quick.md" "handoff.md")
32
+ local cmd_files=("start.md" "end.md" "plan.md" "debug.md" "quick.md" "handoff.md" "new-project.md")
33
33
 
34
34
  mkdir -p "$PLAYBOOK_DIR/commands"
35
+ mkdir -p "$PLAYBOOK_DIR/templates"
35
36
 
36
37
  for f in "${files[@]}"; do
37
38
  curl -sf "$RAW_BASE/$f" -o "$PLAYBOOK_DIR/$f" || return 1
@@ -41,6 +42,9 @@ fetch_via_curl() {
41
42
  curl -sf "$RAW_BASE/commands/$f" -o "$PLAYBOOK_DIR/commands/$f" || return 1
42
43
  done
43
44
 
45
+ # Fetch templates (non-fatal if missing — they're optional)
46
+ curl -sf "$RAW_BASE/templates/tech_stack.md" -o "$PLAYBOOK_DIR/templates/tech_stack.md" 2>/dev/null
47
+
44
48
  return 0
45
49
  }
46
50
 
@@ -97,6 +101,13 @@ elif [ -f "$TEMP_DIR/settings.json" ]; then
97
101
  echo " Installed settings.json"
98
102
  fi
99
103
 
104
+ # --- Install tech_stack.md template if missing ---
105
+
106
+ if [ ! -f "$CLAUDE_DIR/tech_stack.md" ] && [ -f "$PLAYBOOK_DIR/templates/tech_stack.md" ]; then
107
+ cp "$PLAYBOOK_DIR/templates/tech_stack.md" "$CLAUDE_DIR/tech_stack.md"
108
+ echo " Installed tech_stack.md template"
109
+ fi
110
+
100
111
  # --- Update version (LAST — only on success) ---
101
112
 
102
113
  if [ -f "$PLAYBOOK_DIR/VERSION" ]; then