create-battle-plan 1.1.0 → 1.1.2
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/bin/cli.js +10 -10
- package/package.json +1 -1
- package/template/.claude/commands/good-morning.md +52 -17
- package/template/CLAUDE.md +71 -0
package/bin/cli.js
CHANGED
|
@@ -590,18 +590,18 @@ ${peopleSections}
|
|
|
590
590
|
|
|
591
591
|
console.log(`${DIM} ─────────────────────────────${RESET}`);
|
|
592
592
|
console.log('');
|
|
593
|
-
console.log(`${CYAN}${BOLD}
|
|
593
|
+
console.log(`${CYAN}${BOLD} To start your first session,${RESET}`);
|
|
594
|
+
console.log(`${CYAN}${BOLD} copy and paste this into your terminal:${RESET}`);
|
|
594
595
|
console.log('');
|
|
595
|
-
|
|
596
|
-
console.log(
|
|
596
|
+
const relPath = path.relative(process.cwd(), targetDir) || '.';
|
|
597
|
+
console.log(`${DIM} ┌─────────────────────────────────────────┐${RESET}`);
|
|
598
|
+
console.log(`${DIM} │${RESET} ${BOLD}cd ${relPath} && claude${RESET}${DIM}${' '.repeat(Math.max(0, 37 - relPath.length - 12))}│${RESET}`);
|
|
599
|
+
console.log(`${DIM} └─────────────────────────────────────────┘${RESET}`);
|
|
597
600
|
console.log('');
|
|
598
|
-
console.log(`
|
|
599
|
-
console.log(` your first session
|
|
600
|
-
console.log(
|
|
601
|
-
console.log(
|
|
602
|
-
console.log(` and team. Just dump context into the chat —`);
|
|
603
|
-
console.log(` call transcripts, research, meeting notes,`);
|
|
604
|
-
console.log(` replies — it'll cascade into the right docs.${RESET}`);
|
|
601
|
+
console.log(` Once Claude is running, type ${GREEN}${BOLD}/good-morning${RESET}`);
|
|
602
|
+
console.log(` to start your first session. Claude will`);
|
|
603
|
+
console.log(` introduce itself, explain how everything`);
|
|
604
|
+
console.log(` works, and help you set your first targets.`);
|
|
605
605
|
console.log('');
|
|
606
606
|
}
|
|
607
607
|
|
package/package.json
CHANGED
|
@@ -4,32 +4,65 @@ description: Morning standup — status briefing, metrics snapshot, and today's
|
|
|
4
4
|
|
|
5
5
|
# Morning Standup
|
|
6
6
|
|
|
7
|
-
Run these steps in order.
|
|
7
|
+
Run these steps in order.
|
|
8
8
|
|
|
9
9
|
## Step 0: First-Run Welcome (one time only)
|
|
10
10
|
|
|
11
|
-
Check if `.battle-plan-onboarding.json` exists. If it does, this is the user's FIRST session after running `npx create-battle-plan`.
|
|
11
|
+
Check if `.battle-plan-onboarding.json` exists in the repo root. If it does, this is the user's **FIRST session** after running `npx create-battle-plan`. This is a special moment — the user just installed this and wants to understand what they've got. Make them feel like their project is in good hands.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
2. **Welcome them by reflecting what they told the installer** — project name, horizon, metrics, domains, people. Show them you already have full context. Make them feel like they're picking up mid-conversation, not starting from scratch.
|
|
15
|
-
3. **Explain what Battle Plan is and how it works**, briefly:
|
|
16
|
-
- "Battle Plan keeps your project context in markdown files that stay in sync. When you tell me something new — a call, a reply, a metric change — I update a chain of docs in a fixed order so nothing gets dropped."
|
|
17
|
-
- Mention the cascade: metrics.yml → battle plan → source docs → verification
|
|
18
|
-
- Mention: "Just dump context into the chat. Call transcripts, research, meeting notes, replies — I'll cascade it into the right docs."
|
|
19
|
-
4. **Explain the commands:**
|
|
20
|
-
- `/good-morning` — start each session with a status briefing (what you're running now)
|
|
21
|
-
- `/wrap-up` — end each session cleanly: status review, cascade, metrics report, commit
|
|
22
|
-
- `/distill` — compress docs when they get too long for me to read efficiently
|
|
23
|
-
5. **Explain metrics:** "Your metrics live in `metrics.yml`. Every number in every doc traces back to that file. Scripts verify they stay in sync. You never have to worry about stale numbers."
|
|
24
|
-
6. **Explain what to do next:** "Set targets for your metrics in the battle plan, then start working. Tell me about any calls, research, or updates and I'll keep everything current."
|
|
25
|
-
7. Rename `.battle-plan-onboarding.json` to `.battle-plan-onboarding-done.json` so this welcome doesn't repeat.
|
|
13
|
+
**Read `.battle-plan-onboarding.json`** to get their project context. Then write a warm, personal welcome that covers ALL of the following. This should feel like a knowledgeable co-pilot introducing itself, not a product manual.
|
|
26
14
|
|
|
27
|
-
|
|
15
|
+
### Part 1: Personal welcome (reflect their project back to them)
|
|
16
|
+
|
|
17
|
+
Greet them warmly. Show them you already know their project by name, their time horizon, their metrics, their domains, and their people. Reference these specifics naturally — don't just list them. The user should feel like they're continuing a conversation, not configuring a tool.
|
|
18
|
+
|
|
19
|
+
Example tone: "Welcome to your battle plan for [project]. You've got [horizon] and you're tracking [metrics] — I've got all of that loaded and ready to go."
|
|
20
|
+
|
|
21
|
+
### Part 2: What this is (the big picture)
|
|
22
|
+
|
|
23
|
+
Explain what they now have, in plain language:
|
|
24
|
+
|
|
25
|
+
- **This is your project's memory.** Every conversation, decision, metric, and insight lives here in markdown files. When you close this chat and come back tomorrow — or next week — I read these files and pick up exactly where we left off. Nothing gets lost between sessions.
|
|
26
|
+
- **You don't organize anything.** When you tell me something new — a call you had, research you found, a number that changed, a reply you got — I update the right files in the right order automatically. That's called the cascade.
|
|
27
|
+
- **The cascade works like this:** new info flows into `metrics.yml` first (if a number changed), then into your battle plan (the operating doc that tracks where you are), then into the source docs for each domain. At the end, a verification script checks that everything is consistent.
|
|
28
|
+
- **Think of it as dumping context.** You can paste a full call transcript, a messy list of notes, a forwarded email, a research summary — anything. You don't need to format it or tell me where it goes. Just dump it in and I'll cascade it to the right places.
|
|
29
|
+
|
|
30
|
+
### Part 3: How to use it day to day
|
|
31
|
+
|
|
32
|
+
Explain the rhythm:
|
|
33
|
+
|
|
34
|
+
- **Start each session** with `/good-morning` (what you just ran). I'll brief you on where you stand — metrics, priorities, what's stuck, what's next. Think of it as a daily standup with your AI co-pilot.
|
|
35
|
+
- **During the day**, just talk to me. Tell me what happened, paste in notes, ask me to update things. Every piece of new info triggers the cascade automatically.
|
|
36
|
+
- **End each session** with `/wrap-up`. I'll review the day, show you what changed, sync everything, and offer to commit. This is how you close out clean without forgetting to log something.
|
|
37
|
+
- **When docs get long**, run `/distill`. Over time, your daily logs and conversation journals will grow. `/distill` compresses older content into a thorough summary and archives the raw text — nothing is ever deleted, but I can read the docs faster.
|
|
38
|
+
|
|
39
|
+
### Part 4: How metrics work
|
|
40
|
+
|
|
41
|
+
- Your key metrics live in `metrics.yml` — it's the single numeric source of truth for the whole project.
|
|
42
|
+
- Every number that appears in any doc traces back to that file via source annotations. When a metric changes, the cascade propagates the new value everywhere it's referenced.
|
|
43
|
+
- Shell scripts verify the numbers stay in sync. You'll never have a stale "42" in one doc when the real number is "47" in another.
|
|
44
|
+
- Right now all your metrics are at zero. One of the first things we'll do is set targets.
|
|
45
|
+
|
|
46
|
+
### Part 5: What to do right now
|
|
47
|
+
|
|
48
|
+
Transition into action:
|
|
49
|
+
|
|
50
|
+
- "Let's start by getting some real data into the system. Here's what I'd suggest..."
|
|
51
|
+
- Prompt them to set targets for their metrics
|
|
52
|
+
- Ask if there's any existing context they already have — calls they've had, research they've done, decisions they've already made. Anything they can tell you now will make the battle plan immediately useful.
|
|
53
|
+
|
|
54
|
+
### After the welcome
|
|
55
|
+
|
|
56
|
+
Rename `.battle-plan-onboarding.json` to `.battle-plan-onboarding-done.json` so this welcome doesn't repeat.
|
|
57
|
+
|
|
58
|
+
Then show a **compact metrics table** (all zeros, no targets yet) and transition into the onboarding questions naturally. Don't run the full standup format (Steps 1-4 below) on the first run — there's nothing to report yet. Instead, go straight to helping them populate the battle plan.
|
|
28
59
|
|
|
29
60
|
---
|
|
30
61
|
|
|
31
62
|
## Step 1: Gather State (parallel reads)
|
|
32
63
|
|
|
64
|
+
*Skip this on first run (Step 0 handles it). On all subsequent runs, start here.*
|
|
65
|
+
|
|
33
66
|
Read all of these in parallel:
|
|
34
67
|
- `metrics.yml` — current numbers
|
|
35
68
|
- `docs/battle-plan.md` — TL;DR + latest day log (find today or the most recent day entry)
|
|
@@ -71,4 +104,6 @@ After the user answers:
|
|
|
71
104
|
|
|
72
105
|
## Tone
|
|
73
106
|
|
|
74
|
-
|
|
107
|
+
On first run: warm, confident, thorough. The user should feel like they just hired a great project manager who already read the brief.
|
|
108
|
+
|
|
109
|
+
On subsequent runs: direct, no fluff. Think military briefing, not newsletter.
|
package/template/CLAUDE.md
CHANGED
|
@@ -152,3 +152,74 @@ When the user says `/wrap-up`, run this end-of-day sequence:
|
|
|
152
152
|
- Tomorrow's top priorities
|
|
153
153
|
|
|
154
154
|
**Step 6 — Commit:** Ask: "Want me to commit today's updates?" If yes, commit with message: `eod YYYY-MM-DD: [summary]`
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Outreach System (Add-on)
|
|
159
|
+
|
|
160
|
+
**Trigger:** If `outreach/leads.csv` exists in the project, the outreach system is active.
|
|
161
|
+
|
|
162
|
+
### Overview
|
|
163
|
+
|
|
164
|
+
The outreach system tracks a LinkedIn (or any channel) outreach pipeline through `outreach/leads.csv`. This CSV is the **single source of truth** for all outreach metrics — `metrics.yml` is derived from it, never edited directly for outreach numbers.
|
|
165
|
+
|
|
166
|
+
### First-Time Setup
|
|
167
|
+
|
|
168
|
+
If `outreach/leads.csv` exists but `.outreach-initialized` does NOT exist, read `outreach/README.md` and follow the Interactive Setup instructions to onboard the user.
|
|
169
|
+
|
|
170
|
+
### Daily Workflow Integration
|
|
171
|
+
|
|
172
|
+
The outreach system plugs into the cascade protocol:
|
|
173
|
+
|
|
174
|
+
1. User runs `node tools/outreach/daily-targets.js` → generates blitz checklist
|
|
175
|
+
2. User sends messages, ticks checkboxes
|
|
176
|
+
3. User runs `node tools/outreach/flush-targets.js` → updates leads.csv
|
|
177
|
+
4. `flush-targets.js` calls `sync-metrics.js` → derives metrics.yml from CSV
|
|
178
|
+
5. `sync-metrics.js` calls `update-dashboard.js` → regenerates mermaid dashboard
|
|
179
|
+
6. The cascade protocol takes over: metrics.yml → battle-plan.md → domain docs
|
|
180
|
+
|
|
181
|
+
### Scripts Reference
|
|
182
|
+
|
|
183
|
+
| Script | Purpose |
|
|
184
|
+
|--------|---------|
|
|
185
|
+
| `tools/outreach/daily-targets.js [N]` | Generate daily blitz checklist |
|
|
186
|
+
| `tools/outreach/flush-targets.js` | Process checked items from blitz |
|
|
187
|
+
| `tools/outreach/flush-updates.js` | Parse free-form natural language updates |
|
|
188
|
+
| `tools/outreach/flush-accepts.js` | Batch-process connection accepts |
|
|
189
|
+
| `tools/outreach/flush-inbox.js` | Add leads from manual URL list |
|
|
190
|
+
| `tools/outreach/sync-metrics.js` | Derive metrics.yml from leads.csv |
|
|
191
|
+
| `tools/outreach/update-dashboard.js` | Regenerate mermaid conversion dashboard |
|
|
192
|
+
| `tools/outreach/stats.js` | Print pipeline summary |
|
|
193
|
+
| `tools/outreach/lookup.js "Name"` | Fuzzy-search leads |
|
|
194
|
+
|
|
195
|
+
### Metrics Derivation
|
|
196
|
+
|
|
197
|
+
These metrics in `metrics.yml` are **derived** from leads.csv (never hand-edit):
|
|
198
|
+
|
|
199
|
+
- `outreach_sent` = leads with status past `new` or `contacted_at` set
|
|
200
|
+
- `responses` = `replied_at` set or status past `replied`
|
|
201
|
+
- `invitations_accepted` = leads tagged `accepted`
|
|
202
|
+
- `discovery_calls` = `call_at` in the past or status `call_done`
|
|
203
|
+
- `calls_booked` = status `call_booked` (snapshot)
|
|
204
|
+
- `verbal_commitments` = status `verbal`, `loi`, or `paying`
|
|
205
|
+
|
|
206
|
+
### Template System
|
|
207
|
+
|
|
208
|
+
Message templates live in `tools/outreach/templates.json`. The daily blitz assigns templates based on the `country_template_map` field (or round-robin if no mapping). Template performance (sent/accepted/replied/calls) is tracked automatically and displayed in the blitz checklist.
|
|
209
|
+
|
|
210
|
+
### Mermaid Dashboard
|
|
211
|
+
|
|
212
|
+
`docs/analysis/icp-conversion.md` is auto-generated — never hand-edit. It contains:
|
|
213
|
+
- Overall funnel chart (contacted → accepted → replied → call → verbal)
|
|
214
|
+
- Conversion breakdown by role, company size, country, company type
|
|
215
|
+
- Template A/B comparison
|
|
216
|
+
- Kill/Keep/Scale verdicts per segment
|
|
217
|
+
|
|
218
|
+
View in any mermaid-capable renderer (GitHub, VS Code preview, etc.).
|
|
219
|
+
|
|
220
|
+
### Adapting the System
|
|
221
|
+
|
|
222
|
+
- **Different metrics:** Edit the derivation rules in `tools/outreach/sync-metrics.js`
|
|
223
|
+
- **Different time horizon:** The system tracks weekly breakdowns — adjust `daily-targets.js` count parameter
|
|
224
|
+
- **Different channels:** The `channel` column supports any value (connection, inmail, email, etc.)
|
|
225
|
+
- **Different statuses:** Add to `VALID_STATUS` in `tools/outreach/lib/leads.js` and update derivation rules
|