codymaster 4.4.5 → 4.5.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/CHANGELOG.md +33 -0
- package/README.md +29 -14
- package/commands/demo.md +1 -1
- package/dist/context-bus.js +70 -0
- package/dist/context-db.js +265 -0
- package/dist/continuity.js +12 -0
- package/dist/file-watcher.js +79 -0
- package/dist/index.js +152 -1
- package/dist/l0-indexer.js +158 -0
- package/dist/mcp-context-server.js +400 -0
- package/dist/migrate-json-to-sqlite.js +126 -0
- package/dist/skill-chain.js +19 -3
- package/dist/token-budget.js +108 -0
- package/dist/uri-resolver.js +203 -0
- package/package.json +5 -1
- package/scripts/gate-0-secrets.js +63 -0
- package/scripts/gate-1-syntax.js +53 -0
- package/scripts/gate-5-dist-verify.js +55 -0
- package/scripts/gate-6-smoke-test.js +30 -0
- package/scripts/index-codebase.sh +552 -0
- package/scripts/mcp-bridge.js +284 -0
- package/scripts/postinstall.js +301 -0
- package/scripts/security-fixer.js +143 -0
- package/scripts/security-scan.js +55 -0
- package/scripts/test-gemini.js +13 -0
- package/scripts/todo-bridge.js +112 -0
- package/skills/_shared/helpers.md +50 -14
- package/skills/cm-autopilot/SKILL.md +29 -0
- package/skills/cm-autopilot/scripts/autopilot.py +190 -0
- package/skills/cm-continuity/SKILL.md +90 -28
- package/skills/cm-skill-chain/SKILL.md +47 -1
- package/skills/cm-start/SKILL.md +11 -2
- package/skills/boxme-git-config/SKILL.md +0 -56
- package/skills/boxme-local-dev/SKILL.md +0 -66
- package/skills/jobs-to-be-done/SKILL.md +0 -266
- package/skills/jobs-to-be-done/references/case-studies.md +0 -154
- package/skills/jobs-to-be-done/references/competitive-strategy.md +0 -280
- package/skills/jobs-to-be-done/references/diagnostics.md +0 -158
- package/skills/jobs-to-be-done/references/innovation-process.md +0 -392
- package/skills/jobs-to-be-done/references/organizational-change.md +0 -328
- package/skills/marketplace-report-crawler/SKILL.md +0 -176
- package/skills/marketplace-report-crawler/config/accounts.json +0 -41
- package/skills/marketplace-report-crawler/config/report-types.json +0 -422
- package/skills/marketplace-report-crawler/config/sessions.json +0 -3
- package/skills/marketplace-report-crawler/scripts/ab-wrapper.sh +0 -102
- package/skills/marketplace-report-crawler/scripts/browser-actions/lazada/lazada-actions.js +0 -114
- package/skills/marketplace-report-crawler/scripts/browser-actions/shopee/shopee-actions.js +0 -94
- package/skills/marketplace-report-crawler/scripts/browser-actions/tiktok/tiktok-actions.js +0 -272
- package/skills/marketplace-report-crawler/scripts/crawl-runner.js +0 -281
- package/skills/marketplace-report-crawler/scripts/session-check.sh +0 -72
- package/skills/marketplace-report-crawler/scripts/session-manager.sh +0 -349
- package/skills/marketplace-report-crawler/scripts/setup-folders.sh +0 -83
- package/skills/medical-research/SKILL.md +0 -194
- package/skills/medical-research/scripts/evidence_checker.py +0 -288
- package/skills/mom-test/SKILL.md +0 -267
- package/skills/mom-test/references/avoiding-bad-data.md +0 -221
- package/skills/mom-test/references/case-studies.md +0 -306
- package/skills/mom-test/references/commitment-advancement.md +0 -219
- package/skills/mom-test/references/finding-conversations.md +0 -251
- package/skills/mom-test/references/processing-learning.md +0 -256
- package/skills/mom-test/references/question-patterns.md +0 -198
- package/skills/pandasai-analytics/SKILL.md +0 -251
- package/skills/release-it/SKILL.md +0 -235
- package/skills/release-it/references/anti-patterns.md +0 -279
- package/skills/release-it/references/capacity-planning.md +0 -285
- package/skills/release-it/references/chaos-engineering.md +0 -325
- package/skills/release-it/references/deployment-strategies.md +0 -331
- package/skills/release-it/references/observability.md +0 -301
- package/skills/release-it/references/stability-patterns.md +0 -355
- package/skills/skill-creator-ultra/.agents/workflows/skill-audit.md +0 -37
- package/skills/skill-creator-ultra/.agents/workflows/skill-compare.md +0 -34
- package/skills/skill-creator-ultra/.agents/workflows/skill-export.md +0 -51
- package/skills/skill-creator-ultra/.agents/workflows/skill-generate.md +0 -39
- package/skills/skill-creator-ultra/.agents/workflows/skill-scaffold.md +0 -52
- package/skills/skill-creator-ultra/.agents/workflows/skill-simulate.md +0 -25
- package/skills/skill-creator-ultra/.agents/workflows/skill-stats.md +0 -31
- package/skills/skill-creator-ultra/.agents/workflows/skill-validate.md +0 -25
- package/skills/skill-creator-ultra/README.md +0 -1242
- package/skills/skill-creator-ultra/SKILL.md +0 -388
- package/skills/skill-creator-ultra/agents/analyzer.md +0 -274
- package/skills/skill-creator-ultra/agents/comparator.md +0 -202
- package/skills/skill-creator-ultra/agents/grader.md +0 -223
- package/skills/skill-creator-ultra/assets/eval_review.html +0 -146
- package/skills/skill-creator-ultra/eval-viewer/generate_review.py +0 -471
- package/skills/skill-creator-ultra/eval-viewer/viewer.html +0 -1325
- package/skills/skill-creator-ultra/examples/example_anthropic_frontend.md +0 -109
- package/skills/skill-creator-ultra/examples/example_anthropic_pdf.md +0 -116
- package/skills/skill-creator-ultra/examples/example_api_docs.md +0 -189
- package/skills/skill-creator-ultra/examples/example_db_migration.md +0 -253
- package/skills/skill-creator-ultra/examples/example_git_commit.md +0 -111
- package/skills/skill-creator-ultra/install.ps1 +0 -289
- package/skills/skill-creator-ultra/install.sh +0 -313
- package/skills/skill-creator-ultra/phases/phase1_interview.md +0 -202
- package/skills/skill-creator-ultra/phases/phase2_extract.md +0 -55
- package/skills/skill-creator-ultra/phases/phase3_detect.md +0 -57
- package/skills/skill-creator-ultra/phases/phase4_generate.md +0 -543
- package/skills/skill-creator-ultra/phases/phase5_test.md +0 -319
- package/skills/skill-creator-ultra/phases/phase6_eval.md +0 -301
- package/skills/skill-creator-ultra/phases/phase7_iterate.md +0 -103
- package/skills/skill-creator-ultra/phases/phase8_optimize.md +0 -113
- package/skills/skill-creator-ultra/resources/advanced_patterns.md +0 -499
- package/skills/skill-creator-ultra/resources/anti_patterns.md +0 -376
- package/skills/skill-creator-ultra/resources/blueprints.md +0 -498
- package/skills/skill-creator-ultra/resources/checklist.md +0 -243
- package/skills/skill-creator-ultra/resources/composition_cookbook.md +0 -291
- package/skills/skill-creator-ultra/resources/description_optimization.md +0 -90
- package/skills/skill-creator-ultra/resources/eval_guide.md +0 -133
- package/skills/skill-creator-ultra/resources/industry_questions.md +0 -189
- package/skills/skill-creator-ultra/resources/interview_questions.md +0 -200
- package/skills/skill-creator-ultra/resources/pattern_detection.md +0 -200
- package/skills/skill-creator-ultra/resources/prompt_engineering.md +0 -531
- package/skills/skill-creator-ultra/resources/schemas.md +0 -430
- package/skills/skill-creator-ultra/resources/script_integration.md +0 -593
- package/skills/skill-creator-ultra/resources/scripts_guide.md +0 -339
- package/skills/skill-creator-ultra/resources/skill_template.md +0 -124
- package/skills/skill-creator-ultra/resources/skill_writing_guide.md +0 -634
- package/skills/skill-creator-ultra/resources/versioning_guide.md +0 -193
- package/skills/skill-creator-ultra/scripts/ci_eval.py +0 -200
- package/skills/skill-creator-ultra/scripts/package_skill.py +0 -165
- package/skills/skill-creator-ultra/scripts/simulate_skill.py +0 -398
- package/skills/skill-creator-ultra/scripts/skill_audit.py +0 -611
- package/skills/skill-creator-ultra/scripts/skill_compare.py +0 -265
- package/skills/skill-creator-ultra/scripts/skill_export.py +0 -334
- package/skills/skill-creator-ultra/scripts/skill_scaffold.py +0 -403
- package/skills/skill-creator-ultra/scripts/skill_stats.py +0 -339
- package/skills/skill-creator-ultra/scripts/validate_skill.py +0 -411
- package/skills/tailwind-mastery/SKILL.md +0 -229
- package/skills/vercel-react-best-practices/AGENTS.md +0 -3373
- package/skills/vercel-react-best-practices/README.md +0 -123
- package/skills/vercel-react-best-practices/SKILL.md +0 -143
- package/skills/vercel-react-best-practices/rules/_sections.md +0 -46
- package/skills/vercel-react-best-practices/rules/_template.md +0 -28
- package/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
- package/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
- package/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
- package/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
- package/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -80
- package/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
- package/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
- package/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
- package/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -59
- package/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
- package/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
- package/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
- package/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
- package/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
- package/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
- package/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
- package/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
- package/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
- package/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
- package/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
- package/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
- package/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
- package/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
- package/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
- package/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
- package/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
- package/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
- package/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
- package/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
- package/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
- package/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
- package/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
- package/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
- package/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
- package/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
- package/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
- package/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
- package/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
- package/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
- package/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
- package/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
- package/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
- package/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
- package/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
- package/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
- package/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
- package/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
- package/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
- package/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
- package/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
- package/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
- package/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
- package/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +0 -64
- package/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
- package/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +0 -59
- package/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
- package/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
- package/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
- package/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
- package/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
- package/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
- package/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -142
- package/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
- package/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
- package/skills/web-design-guidelines/SKILL.md +0 -39
|
@@ -29,8 +29,25 @@ cm continuity init
|
|
|
29
29
|
# Check current state
|
|
30
30
|
cm continuity status
|
|
31
31
|
|
|
32
|
-
# View captured learnings
|
|
32
|
+
# View captured learnings / decisions
|
|
33
33
|
cm continuity learnings
|
|
34
|
+
cm continuity decisions
|
|
35
|
+
|
|
36
|
+
# ── Smart Spine v5 commands ──────────────────────────────
|
|
37
|
+
# Regenerate L0 compact indexes (learnings-index.md, skeleton-index.md)
|
|
38
|
+
cm continuity index
|
|
39
|
+
|
|
40
|
+
# Show token budget allocation + usage per category
|
|
41
|
+
cm continuity budget
|
|
42
|
+
|
|
43
|
+
# Pretty-print current context bus state (active skill chain)
|
|
44
|
+
cm continuity bus
|
|
45
|
+
|
|
46
|
+
# Print Claude Desktop MCP config snippet for cm-context server
|
|
47
|
+
cm continuity mcp
|
|
48
|
+
|
|
49
|
+
# Migrate learnings.json + decisions.json → SQLite (one-time)
|
|
50
|
+
cm continuity migrate
|
|
34
51
|
```
|
|
35
52
|
|
|
36
53
|
## The Protocol
|
|
@@ -130,45 +147,84 @@ Project: [project name]
|
|
|
130
147
|
- [file path]: [what we're changing]
|
|
131
148
|
```
|
|
132
149
|
|
|
133
|
-
##
|
|
150
|
+
## Memory Architecture (v5 — Smart Spine)
|
|
134
151
|
|
|
135
152
|
```
|
|
136
153
|
Tier 1: SENSORY MEMORY (seconds — within current tool call)
|
|
137
154
|
→ Internal variables, intermediate results
|
|
138
155
|
→ NEVER written to file — discarded when action completes
|
|
139
|
-
→ Example: "File X has 200 lines" — no need to remember next session
|
|
140
156
|
|
|
141
157
|
Tier 2: WORKING MEMORY (current session → 7 days)
|
|
142
|
-
→ CONTINUITY.md — the active scratchpad
|
|
158
|
+
→ CONTINUITY.md — the active scratchpad (max 500 words / ~400 tokens)
|
|
143
159
|
→ Auto-rotates: entries > 7 days promote to Tier 3 or decay
|
|
144
|
-
→
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
→ .cm/decisions.json — architecture decisions with supersedence
|
|
149
|
-
→ Entries MUST be reinforced (same pattern ≥ 2x) to survive
|
|
150
|
-
→ Decay: auto-archive if not relevant after TTL expires
|
|
160
|
+
→ Context bus (.cm/context-bus.json) — live skill chain state
|
|
161
|
+
· initBus() on chain start, updateBusStep() on each advance
|
|
162
|
+
· cm://pipeline/current resolves to bus JSON
|
|
163
|
+
· Read via: cm continuity bus | cm_bus_read MCP tool
|
|
151
164
|
|
|
152
|
-
Tier
|
|
165
|
+
Tier 3: LONG-TERM MEMORY (30+ days, only if reinforced)
|
|
166
|
+
→ Primary: .cm/context.db (SQLite + FTS5) ← v5 default
|
|
167
|
+
· learnings table + learnings_fts (BM25 keyword search)
|
|
168
|
+
· decisions table + decisions_fts
|
|
169
|
+
· skill_outputs per session/chain
|
|
170
|
+
· indexes table (cached L0/L1 content + staleness hash)
|
|
171
|
+
→ Fallback: .cm/memory/learnings.json + decisions.json (kept for compat)
|
|
172
|
+
→ L0 indexes: .cm/learnings-index.md (~100 tok), .cm/skeleton-index.md (~500 tok)
|
|
173
|
+
· Auto-regenerated on addLearning() + on demand via cm continuity index
|
|
174
|
+
· File watcher auto-refreshes learnings L0 on JSON change (300ms debounce)
|
|
175
|
+
→ Token budget: .cm/token-budget.json — 200k window, per-category soft limits
|
|
176
|
+
· Enforced at load time: checkBudget() → allowed/remaining/suggestion
|
|
177
|
+
· View: cm continuity budget
|
|
178
|
+
|
|
179
|
+
Tier 4: EXTERNAL SEMANTIC MEMORY (optional — large projects)
|
|
153
180
|
→ tobi/qmd — BM25 + Vector + LLM re-ranking, 100% local
|
|
154
|
-
→
|
|
155
|
-
→ AI queries via MCP: qmd query "keyword" → relevant snippets
|
|
156
|
-
→ See cm-deep-search skill for setup & detection thresholds
|
|
157
|
-
→ ONLY suggested when project >50 docs or >200 source files
|
|
181
|
+
→ See cm-deep-search skill — ONLY when >50 docs or >200 source files
|
|
158
182
|
|
|
159
|
-
Tier 5: STRUCTURAL CODE MEMORY (optional —
|
|
183
|
+
Tier 5: STRUCTURAL CODE MEMORY (optional — code-heavy projects)
|
|
160
184
|
→ CodeGraph — tree-sitter AST → SQLite graph → MCP server
|
|
161
|
-
→
|
|
162
|
-
→ AI queries: codegraph_context, codegraph_impact, codegraph_callers
|
|
163
|
-
→ See cm-codeintell skill for setup & integration
|
|
164
|
-
→ ONLY suggested when project >50 source files
|
|
185
|
+
→ See cm-codeintell skill — ONLY when >50 source files
|
|
165
186
|
```
|
|
166
187
|
|
|
167
|
-
**CONTINUITY.md
|
|
168
|
-
**
|
|
169
|
-
**
|
|
188
|
+
**CONTINUITY.md = "what am I doing NOW?"**
|
|
189
|
+
**context bus = "what did upstream skills produce in this chain?"**
|
|
190
|
+
**L0 indexes = "cheapest possible memory load (~600 tokens)"**
|
|
191
|
+
**context.db = "keyword search across all learnings + decisions"**
|
|
170
192
|
**qmd (optional) = "find what was written across hundreds of docs"**
|
|
171
193
|
|
|
194
|
+
### MCP Context Server (Claude Desktop integration)
|
|
195
|
+
|
|
196
|
+
Seven tools exposed over stdio to Claude Desktop and MCP-compatible clients:
|
|
197
|
+
|
|
198
|
+
| Tool | Purpose |
|
|
199
|
+
|---|---|
|
|
200
|
+
| `cm_query` | FTS5 keyword search — learnings, decisions, or both |
|
|
201
|
+
| `cm_resolve` | Load any `cm://` URI at L0/L1/L2 depth |
|
|
202
|
+
| `cm_bus_read` | Read live context bus state |
|
|
203
|
+
| `cm_bus_write` | Publish skill output to the bus |
|
|
204
|
+
| `cm_budget_check` | Pre-flight token check by category |
|
|
205
|
+
| `cm_memory_decay` | Archive expired learnings (supports dry_run) |
|
|
206
|
+
| `cm_index_refresh` | Regenerate L0 indexes on demand |
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# Get install snippet for Claude Desktop config
|
|
210
|
+
cm continuity mcp
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### cm:// URI Scheme
|
|
214
|
+
|
|
215
|
+
Reference any memory resource by URI — resolver handles depth + caching:
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
cm://memory/working → CONTINUITY.md
|
|
219
|
+
cm://memory/learnings → learnings-index.md (L0) or SQLite (L1/L2)
|
|
220
|
+
cm://memory/learnings/{id} → specific learning by ID
|
|
221
|
+
cm://memory/decisions → decisions index
|
|
222
|
+
cm://skills/{name} → SKILL.md at depth
|
|
223
|
+
cm://skills/{name}/L0 → front matter + description only (~50 tokens)
|
|
224
|
+
cm://resources/skeleton → skeleton-index.md (L0) or full
|
|
225
|
+
cm://pipeline/current → live context bus state
|
|
226
|
+
```
|
|
227
|
+
|
|
172
228
|
---
|
|
173
229
|
|
|
174
230
|
## Memory Audit Protocol (Auto — Every Session Start)
|
|
@@ -383,22 +439,28 @@ WHY: Smaller scope = less noise = AI only reads what's relevant.
|
|
|
383
439
|
|
|
384
440
|
```
|
|
385
441
|
✅ DO:
|
|
386
|
-
-
|
|
442
|
+
- Check context bus FIRST at session start (free, ~50 tokens)
|
|
443
|
+
- Load L0 indexes BEFORE full files (learnings-index + skeleton-index)
|
|
444
|
+
- Use cm_query for keyword search — don't scan JSON manually
|
|
445
|
+
- Read CONTINUITY.md after L0 indexes (not before)
|
|
387
446
|
- Run Memory Audit at session start (decay + conflicts + scope filter)
|
|
388
447
|
- Update CONTINUITY.md at session end (ALWAYS)
|
|
389
448
|
- Tag EVERY learning/decision with scope (global/module/file)
|
|
390
449
|
- Reinforce existing learnings instead of creating duplicates
|
|
391
450
|
- Keep CONTINUITY.md under 500 words (rotate to Tier 3)
|
|
392
451
|
- Be specific: "Fixed auth bug in login.ts:42" not "Fixed stuff"
|
|
452
|
+
- Run cm continuity index after bulk learning additions
|
|
393
453
|
|
|
394
454
|
❌ DON'T:
|
|
455
|
+
- Load full learnings.json or skeleton.md as first action (use L0 first)
|
|
456
|
+
- Skip context bus check when inside a skill chain
|
|
395
457
|
- Skip Memory Audit ("I'll read everything, it's fine")
|
|
396
458
|
- Write learnings without scope ("it applies everywhere" = almost never true)
|
|
397
459
|
- Create duplicate learnings (reinforce existing ones instead)
|
|
398
|
-
- Let learnings.json grow unbounded (TTL + decay handles this)
|
|
399
|
-
- Read ALL learnings regardless of current module (use scope filter)
|
|
460
|
+
- Let learnings.json grow unbounded (TTL + decay + cm_memory_decay handles this)
|
|
461
|
+
- Read ALL learnings regardless of current module (use scope filter / cm_query)
|
|
400
462
|
- Ignore superseded decisions (they cause conflicting code)
|
|
401
|
-
-
|
|
463
|
+
- Inject skeleton.md (20KB) when skeleton-index.md (~2KB) is sufficient
|
|
402
464
|
```
|
|
403
465
|
|
|
404
466
|
## The Bottom Line
|
|
@@ -65,6 +65,47 @@ Full skill names: `cm-brainstorm-idea`, `cm-planning`, `cm-tdd`, `cm-execution`,
|
|
|
65
65
|
- **cm-continuity**: Chain progress persists across sessions via CONTINUITY.md working memory
|
|
66
66
|
- **cm-execution**: Each chain step delegates to cm-execution for actual implementation
|
|
67
67
|
- **cm-quality-gate**: Automatically runs at end of each development chain
|
|
68
|
+
- **Context Bus (v5)**: Every chain automatically maintains `.cm/context-bus.json` — shared state across all steps
|
|
69
|
+
|
|
70
|
+
## Context Bus — Inter-Skill Coordination (v5)
|
|
71
|
+
|
|
72
|
+
When `chain start` runs, the context bus is initialized automatically:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
chain start feature-development "add payment flow"
|
|
76
|
+
→ Creates .cm/context-bus.json with:
|
|
77
|
+
pipeline: "feature-development"
|
|
78
|
+
session_id: "<uuid>"
|
|
79
|
+
current_step: "brainstorm-idea"
|
|
80
|
+
shared_context: {}
|
|
81
|
+
resource_state: { skeleton_generated: null, learnings_indexed: null, ... }
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
When `chain advance` runs after each skill completes:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
chain advance <exec-id> "summary of what was done"
|
|
88
|
+
→ Updates context-bus.json:
|
|
89
|
+
current_step: "planning" ← moved forward
|
|
90
|
+
shared_context.brainstorm-idea: { summary, affected_files, output_path }
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**What downstream skills gain:**
|
|
94
|
+
- `cm-planning` can read brainstorm output path → no re-read of full filesystem
|
|
95
|
+
- `cm-tdd` can see which files planning created → targeted test generation
|
|
96
|
+
- `cm-quality-gate` knows exactly which files changed → focused review
|
|
97
|
+
|
|
98
|
+
**Reading the bus:**
|
|
99
|
+
```bash
|
|
100
|
+
cm continuity bus # terminal pretty-print
|
|
101
|
+
cm_bus_read # MCP tool (Claude Desktop)
|
|
102
|
+
cm://pipeline/current # URI resolver (in skill prompts)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Publishing to the bus (inside a skill):**
|
|
106
|
+
```bash
|
|
107
|
+
cm_bus_write skill=cm-planning summary="tasks.md created" output_path=openspec/...
|
|
108
|
+
```
|
|
68
109
|
|
|
69
110
|
## For AI Agents
|
|
70
111
|
|
|
@@ -74,5 +115,10 @@ When dispatching tasks that match a chain pattern:
|
|
|
74
115
|
1. Check if task matches a chain: suggestChain(taskTitle)
|
|
75
116
|
2. If match found, suggest to user: "This task matches the X chain pipeline"
|
|
76
117
|
3. If user agrees, start the chain and invoke skills in order
|
|
77
|
-
4.
|
|
118
|
+
4. At the START of each skill step:
|
|
119
|
+
→ Read cm://pipeline/current to see upstream skill outputs
|
|
120
|
+
→ Check shared_context to avoid re-doing work
|
|
121
|
+
5. After completing each skill, advance the chain:
|
|
122
|
+
→ chain advance <id> "summary"
|
|
123
|
+
→ This updates context bus + CONTINUITY.md simultaneously
|
|
78
124
|
```
|
package/skills/cm-start/SKILL.md
CHANGED
|
@@ -10,8 +10,15 @@ description: Start the CM Workflow to execute your objective from idea to produc
|
|
|
10
10
|
When this workflow is called, the AI Assistant should execute the following action sequence in the spirit of the **CodyMaster Kit**:
|
|
11
11
|
|
|
12
12
|
0. **Load Working Memory:**
|
|
13
|
-
Per `_shared/helpers.md#Load-Working-Memory`
|
|
14
|
-
|
|
13
|
+
Per `_shared/helpers.md#Load-Working-Memory` — **use Smart Spine order:**
|
|
14
|
+
1. Check `.cm/context-bus.json` → any active pipeline? any prior skill output to reuse?
|
|
15
|
+
2. Load L0 indexes: `learnings-index.md` (~100 tok) + `skeleton-index.md` (~500 tok)
|
|
16
|
+
3. Scope-filter learnings via `cm_query` — only load what matches current objective
|
|
17
|
+
4. Read `CONTINUITY.md` → set Active Goal to the new objective
|
|
18
|
+
5. Run token budget check: `cm continuity budget` → confirm no category is over soft limit
|
|
19
|
+
|
|
20
|
+
> ⚡ Total context load: ~700 tokens. Full load used to be ~3,200.
|
|
21
|
+
> Only escalate to L2 (full files) if L0 index explicitly flags a match.
|
|
15
22
|
|
|
16
23
|
0.5. **Skill Coverage Check (Adaptive Discovery):**
|
|
17
24
|
- Scan the objective for technologies, frameworks, or patterns mentioned
|
|
@@ -73,5 +80,7 @@ When this workflow is called, the AI Assistant should execute the following acti
|
|
|
73
80
|
4. **Complete:**
|
|
74
81
|
Per `_shared/helpers.md#Update-Continuity`
|
|
75
82
|
- Record any new learnings or decisions made during this workflow
|
|
83
|
+
- If inside a skill chain: `cm continuity bus` → verify context bus reflects completed step
|
|
84
|
+
- Refresh L0 indexes: `cm continuity index` (auto-runs on `addLearning`, manual refresh here)
|
|
76
85
|
|
|
77
86
|
> **Note for AI:** If this is a brand new project, suggest running `cm-project-bootstrap` first. If the working environment has a risk of accidentally switching accounts/projects, remind about `cm-identity-guard` (Per `_shared/helpers.md#Identity-Check`).
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Verify and fix git configuration to ensure all pushes go to omisocial GitHub account
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Git Account Verification
|
|
6
|
-
|
|
7
|
-
Use this skill when: "check git", "verify git", "git account", "fix remote", "push fails", or before any deploy/push operation.
|
|
8
|
-
|
|
9
|
-
## Expected Configuration
|
|
10
|
-
|
|
11
|
-
| Setting | Expected Value |
|
|
12
|
-
|---------|---------------|
|
|
13
|
-
| `gh auth status` | `omisocial` |
|
|
14
|
-
| `git remote origin` | `https://github.com/omisocial/boxme_levelling.git` |
|
|
15
|
-
| `git config user.name` | `omisocial` |
|
|
16
|
-
| `git config user.email` | `omisocial@users.noreply.github.com` |
|
|
17
|
-
|
|
18
|
-
## Quick Check
|
|
19
|
-
|
|
20
|
-
Run this one-liner to verify everything:
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
echo "=== GitHub CLI ===" && gh auth status 2>&1 | head -3 && echo "=== Git Remote ===" && git remote get-url origin && echo "=== Git User ===" && git config user.name && git config user.email
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Fix if Wrong
|
|
27
|
-
|
|
28
|
-
### GitHub CLI (gh) logged into wrong account
|
|
29
|
-
```bash
|
|
30
|
-
gh auth logout
|
|
31
|
-
gh auth login
|
|
32
|
-
# Select: Login with web browser → omisocial
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Git remote pointing to wrong repo
|
|
36
|
-
```bash
|
|
37
|
-
git remote set-url origin https://github.com/omisocial/boxme_levelling.git
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### Git user config wrong
|
|
41
|
-
```bash
|
|
42
|
-
git config user.name "omisocial"
|
|
43
|
-
git config user.email "omisocial@users.noreply.github.com"
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## Project Root
|
|
47
|
-
```
|
|
48
|
-
/Users/todyle/Library/Mobile Documents/com~apple~CloudDocs/Code/Boxme_Projects/boxme_levelling-main
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## Account History
|
|
52
|
-
|
|
53
|
-
| Account | Purpose | Status |
|
|
54
|
-
|---------|---------|--------|
|
|
55
|
-
| `omisocial` | Current active GitHub account | ✅ Active |
|
|
56
|
-
| `boxmevibe` | Previous GitHub account | ⚠️ Archived as `old-boxmevibe` remote |
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Start all Boxme Scoring System local development modules (PRMS, Seller SOS, Docs Site)
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Boxme Local Dev — Start All Modules
|
|
6
|
-
|
|
7
|
-
Use this skill when the user says any of: "start local", "run local", "dev local", "start dev", or asks to run the Boxme project locally.
|
|
8
|
-
|
|
9
|
-
## Project Root
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
/Users/todyle/Library/Mobile Documents/com~apple~CloudDocs/Code/Boxme_Projects/boxme_levelling-main
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Modules
|
|
16
|
-
|
|
17
|
-
| Module | Directory | Command | URL |
|
|
18
|
-
|--------|-----------|---------|-----|
|
|
19
|
-
| **PRMS** (Performance Review) | project root | `npm run dev` | http://localhost:5173 |
|
|
20
|
-
| **Seller SOS** | `seller-sos/` | `npm run dev` | http://localhost:5174 |
|
|
21
|
-
| **Docs Site** (Docusaurus) | `docs-site/` | `npm start` | http://localhost:3000 |
|
|
22
|
-
|
|
23
|
-
## Instructions
|
|
24
|
-
|
|
25
|
-
### Step 1 – Start PRMS
|
|
26
|
-
|
|
27
|
-
Open terminal and run:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
cd "/Users/todyle/Library/Mobile Documents/com~apple~CloudDocs/Code/Boxme_Projects/boxme_levelling-main"
|
|
31
|
-
npm run dev
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
### Step 2 – Start Seller SOS
|
|
35
|
-
|
|
36
|
-
Open a **new terminal** and run:
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
cd "/Users/todyle/Library/Mobile Documents/com~apple~CloudDocs/Code/Boxme_Projects/boxme_levelling-main/seller-sos"
|
|
40
|
-
npm run dev
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
### Step 3 – Start Docs Site
|
|
44
|
-
|
|
45
|
-
Open another **new terminal** and run:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
cd "/Users/todyle/Library/Mobile Documents/com~apple~CloudDocs/Code/Boxme_Projects/boxme_levelling-main/docs-site"
|
|
49
|
-
npm start
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Notes
|
|
53
|
-
|
|
54
|
-
- PRMS uses **Vite + Hono** (Cloudflare Workers backend), served via `@hono/vite-dev-server`
|
|
55
|
-
- Seller SOS also uses **Vite + Hono**, port 5174
|
|
56
|
-
- Docs Site is **Docusaurus 3.x**, starts on port 3000
|
|
57
|
-
- All modules use their own `node_modules` — run `npm install` in each directory if fresh clone
|
|
58
|
-
- If a port is busy, kill it: `lsof -ti:5173 | xargs kill -9`
|
|
59
|
-
|
|
60
|
-
## Ports Quick Reference
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
http://localhost:5173 → PRMS
|
|
64
|
-
http://localhost:5174 → Seller SOS
|
|
65
|
-
http://localhost:3000 → Docs Site
|
|
66
|
-
```
|
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: jobs-to-be-done
|
|
3
|
-
description: 'Discover what customers truly need by analyzing the "job" they hire your product to do. Use when the user mentions "customer discovery", "why customers churn", "what job does this solve", "competing against luck", or "product-market fit". Covers JTBD interviews, competition analysis, and jobs-oriented roadmaps. For product positioning, see obviously-awesome. For rapid validation, see design-sprint.'
|
|
4
|
-
license: MIT
|
|
5
|
-
metadata:
|
|
6
|
-
author: wondelai
|
|
7
|
-
version: "1.1.1"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Jobs to Be Done Framework
|
|
11
|
-
|
|
12
|
-
Framework for discovering innovation based on a fundamental truth: customers don't buy products - they "hire" them to do a specific job in their lives.
|
|
13
|
-
|
|
14
|
-
## Core Principle
|
|
15
|
-
|
|
16
|
-
**Job to Be Done** = the progress a customer wants to make in specific circumstances.
|
|
17
|
-
|
|
18
|
-
Key elements of the definition:
|
|
19
|
-
- **Progress** (not goal, not solution) - customer wants to move from current state to a better one
|
|
20
|
-
- **Circumstances** - context determines the job, not customer attributes (demographics are useless)
|
|
21
|
-
- **Hiring/Firing** - customer actively chooses a product for the "job"
|
|
22
|
-
|
|
23
|
-
## Scoring
|
|
24
|
-
|
|
25
|
-
**Goal: 10/10.** When reviewing or creating product strategy or positioning, rate it 0-10 based on adherence to the principles below. A 10/10 means full alignment with all guidelines; lower scores indicate gaps to address. Always provide the current score and specific improvements needed to reach 10/10.
|
|
26
|
-
|
|
27
|
-
## Three Dimensions of Every Job
|
|
28
|
-
|
|
29
|
-
Every job has three inseparable dimensions - omitting any means failure:
|
|
30
|
-
|
|
31
|
-
| Dimension | Question | Example (milkshake) |
|
|
32
|
-
|-----------|----------|---------------------|
|
|
33
|
-
| **Functional** | What does the customer need to do? | Occupy myself during boring commute |
|
|
34
|
-
| **Emotional** | How do they want to feel? | Have a small treat for myself |
|
|
35
|
-
| **Social** | How do they want to be perceived? | As a sensible parent (not buying donuts) |
|
|
36
|
-
|
|
37
|
-
## Framework
|
|
38
|
-
|
|
39
|
-
### 1. The Job Statement
|
|
40
|
-
|
|
41
|
-
**Core concept:** A job statement captures the progress a customer seeks in a specific circumstance, expressed in a structured format that separates context, desired progress, and expected outcome.
|
|
42
|
-
|
|
43
|
-
**Why it works:** By forcing teams to articulate the job in the customer's language and circumstances, it prevents solution-first thinking and keeps innovation grounded in real human progress.
|
|
44
|
-
|
|
45
|
-
**Key insights:**
|
|
46
|
-
- The format is: "When [circumstances], I want to [progress], so I can [outcome]"
|
|
47
|
-
- Circumstances matter more than customer demographics - the same person has different jobs in different situations
|
|
48
|
-
- A well-written job statement never mentions your product or any specific solution
|
|
49
|
-
- Jobs are stable over time; solutions change but the underlying job persists
|
|
50
|
-
|
|
51
|
-
**Product applications:**
|
|
52
|
-
|
|
53
|
-
| Context | Application | Example |
|
|
54
|
-
|---------|-------------|---------|
|
|
55
|
-
| New product ideation | Define the job before brainstorming features | "When I'm commuting alone, I want something to occupy me and satisfy hunger, so I'm not hungry until lunch" |
|
|
56
|
-
| Feature prioritization | Evaluate whether a feature serves the core job | Prioritize features that help accomplish the stated job over nice-to-have additions |
|
|
57
|
-
| Positioning & messaging | Use the job statement language in marketing copy | Lead with the circumstance and desired progress, not product specs |
|
|
58
|
-
|
|
59
|
-
**Copy patterns:**
|
|
60
|
-
- "When you're [circumstance], you need [progress] -- that's exactly what [product] does"
|
|
61
|
-
- Lead with the situation the customer recognizes, not the product category
|
|
62
|
-
- Mirror the emotional and social dimensions alongside the functional one
|
|
63
|
-
|
|
64
|
-
**Ethical boundary:** Never fabricate or exaggerate circumstances to manufacture urgency. The job must reflect genuine customer progress, not artificially created anxiety.
|
|
65
|
-
|
|
66
|
-
See: [references/innovation-process.md](references/innovation-process.md)
|
|
67
|
-
|
|
68
|
-
### 2. Forces of Progress (Push, Pull, Anxiety, Habit)
|
|
69
|
-
|
|
70
|
-
**Core concept:** The decision to "hire" a new product results from the interplay of four forces: Push (frustration with current situation), Pull (attraction of new solution), Anxiety (fear of the new), and Habit (comfort with current behavior). Change only happens when Push + Pull > Habit + Anxiety.
|
|
71
|
-
|
|
72
|
-
**Why it works:** Most innovation efforts focus only on making the product better (increasing Pull), but ignore the equally powerful anti-change forces. Understanding all four forces reveals why great products still fail to gain adoption.
|
|
73
|
-
|
|
74
|
-
**Key insights:**
|
|
75
|
-
- Push is frustration with the current situation ("this annoys me")
|
|
76
|
-
- Pull is the attraction of a new solution ("I want this")
|
|
77
|
-
- Habit is attachment to current behavior ("I've always done it this way")
|
|
78
|
-
- Anxiety is fear of the new ("what if it doesn't work?")
|
|
79
|
-
- Often it's more effective to reduce anxiety and habit than to increase push and pull
|
|
80
|
-
- Passive seekers (vaguely aware of a problem) are easier to influence than active seekers who already have criteria
|
|
81
|
-
|
|
82
|
-
**Product applications:**
|
|
83
|
-
|
|
84
|
-
| Context | Application | Example |
|
|
85
|
-
|---------|-------------|---------|
|
|
86
|
-
| Onboarding design | Reduce anxiety with free trials, guarantees, and social proof | Money-back guarantee addresses "what if it doesn't work?" anxiety |
|
|
87
|
-
| Switching campaigns | Address habit directly by making migration effortless | One-click data import from competitor reduces habit friction |
|
|
88
|
-
| Content marketing | Awaken push in passive seekers by naming their frustration | Blog post: "5 signs your current tool is costing you hours every week" |
|
|
89
|
-
|
|
90
|
-
**Copy patterns:**
|
|
91
|
-
- Address anxiety directly: "No lock-in, cancel anytime, your data is always yours"
|
|
92
|
-
- Name the push: "Tired of [frustration]? There's a better way"
|
|
93
|
-
- Reduce habit friction: "Switch in 5 minutes -- we import everything automatically"
|
|
94
|
-
|
|
95
|
-
**Ethical boundary:** Never manufacture artificial push by exaggerating pain or creating fear. Reducing real anxiety is ethical; creating new anxiety to drive sales is manipulation.
|
|
96
|
-
|
|
97
|
-
See: [references/competitive-strategy.md](references/competitive-strategy.md)
|
|
98
|
-
|
|
99
|
-
### 3. The Big Hire & Little Hire
|
|
100
|
-
|
|
101
|
-
**Core concept:** There are two distinct decision moments: the Big Hire (purchase/signup decision, happens once) and the Little Hire (decision to use in the moment, happens repeatedly). Winning the Big Hire does not guarantee the Little Hire.
|
|
102
|
-
|
|
103
|
-
**Why it works:** Many products win the sale but lose the customer because they optimize only for the purchase decision and neglect the repeated usage decision. Understanding both moments reveals where retention problems truly originate.
|
|
104
|
-
|
|
105
|
-
**Key insights:**
|
|
106
|
-
- Big Hire is driven by marketing, onboarding, and first impressions
|
|
107
|
-
- Little Hire is driven by product quality, UX, and ongoing value delivery
|
|
108
|
-
- Many products lose at the Little Hire stage -- purchased but never used
|
|
109
|
-
- The forces of progress operate differently at each stage: Big Hire anxiety is about the purchase risk; Little Hire anxiety is about effort and learning curves
|
|
110
|
-
- Retention problems are almost always Little Hire failures, not Big Hire failures
|
|
111
|
-
|
|
112
|
-
**Product applications:**
|
|
113
|
-
|
|
114
|
-
| Context | Application | Example |
|
|
115
|
-
|---------|-------------|---------|
|
|
116
|
-
| Retention analysis | Distinguish Big Hire metrics from Little Hire metrics | Track "first use after signup" and "weekly active usage" separately from signup conversion |
|
|
117
|
-
| Product design | Optimize the repeated usage experience, not just first impression | Reduce friction in daily workflows even if onboarding is already smooth |
|
|
118
|
-
| Customer success | Monitor Little Hire signals to predict churn | Declining usage frequency is a Little Hire failure signaling upcoming churn |
|
|
119
|
-
|
|
120
|
-
**Copy patterns:**
|
|
121
|
-
- Big Hire copy focuses on the promise: "Transform how you [job]"
|
|
122
|
-
- Little Hire copy focuses on ease: "One click and you're done"
|
|
123
|
-
- Re-engagement copy addresses Little Hire failure: "We've made [specific friction] easier"
|
|
124
|
-
|
|
125
|
-
**Ethical boundary:** Never design dark patterns that win the Big Hire (e.g., hidden fees, misleading trials) while failing the Little Hire. Both decisions must deliver genuine progress.
|
|
126
|
-
|
|
127
|
-
See: [references/case-studies.md](references/case-studies.md)
|
|
128
|
-
|
|
129
|
-
### 4. Competitive Landscape (Non-Obvious Competition)
|
|
130
|
-
|
|
131
|
-
**Core concept:** True competition is everything a customer can "hire" for the same job, often from completely different product categories. Competitors are defined by the job, not by industry classification.
|
|
132
|
-
|
|
133
|
-
**Why it works:** Analyzing competition through product categories creates blind spots. A milkshake competes with bananas, bagels, boredom, and podcasts. Netflix competes with TikTok, sleep, family conversation, and games. By mapping the full competitive landscape around the job, teams spot threats and opportunities invisible to traditional analysis.
|
|
134
|
-
|
|
135
|
-
**Key insights:**
|
|
136
|
-
- Non-consumption (doing nothing) is often the biggest competitor
|
|
137
|
-
- Workarounds and compensating behaviors reveal unserved jobs: people hack, combine, and improvise solutions
|
|
138
|
-
- Online courses compete with books, YouTube, mentoring, and doing nothing
|
|
139
|
-
- Integration is needed when performance is "not good enough" for the job; modularization when it's "good enough"
|
|
140
|
-
- The best competitive positioning answers "what job are we the best hire for?" not "how do we compare to similar products?"
|
|
141
|
-
|
|
142
|
-
**Product applications:**
|
|
143
|
-
|
|
144
|
-
| Context | Application | Example |
|
|
145
|
-
|---------|-------------|---------|
|
|
146
|
-
| Competitive analysis | Map all hires for the same job across categories | A project management tool competes with spreadsheets, sticky notes, email threads, and memory |
|
|
147
|
-
| Positioning strategy | Position against the real alternative, not the obvious one | Position against "doing it manually" rather than against a named competitor |
|
|
148
|
-
| Pricing strategy | Price relative to the job's value, not competitor pricing | If the job saves 10 hours per week, price against the value of that time, not against similar SaaS products |
|
|
149
|
-
|
|
150
|
-
**Copy patterns:**
|
|
151
|
-
- "Stop using [workaround] for [job] -- there's a purpose-built solution"
|
|
152
|
-
- "You wouldn't hire a [bad fit] to [job] -- so why are you using [current hack]?"
|
|
153
|
-
- Position around the job outcome, not feature comparison charts
|
|
154
|
-
|
|
155
|
-
**Ethical boundary:** Never misrepresent competitors or create false equivalences. Honest competitive framing based on the job is powerful; distorting alternatives is deceptive.
|
|
156
|
-
|
|
157
|
-
See: [references/competitive-strategy.md](references/competitive-strategy.md)
|
|
158
|
-
|
|
159
|
-
### 5. Customer Discovery Interviews
|
|
160
|
-
|
|
161
|
-
**Core concept:** Don't ask customers directly "what do you need" -- they don't know. Instead, investigate the purchase timeline by reconstructing the moments of first thought, search, purchase, and usage to uncover the real job.
|
|
162
|
-
|
|
163
|
-
**Why it works:** Customers rationalize decisions after the fact and can't articulate latent needs. By walking backward through the concrete events of their decision journey, you uncover the true circumstances, forces, and tradeoffs that drove their behavior.
|
|
164
|
-
|
|
165
|
-
**Key insights:**
|
|
166
|
-
- First thought questions: "When did you first think about looking for a solution?", "What was happening in your life then?", "What was frustrating you?"
|
|
167
|
-
- Search questions: "What alternatives did you look for?", "What eliminated options?", "Who did you talk to about this decision?"
|
|
168
|
-
- Purchase moment questions: "Where were you?", "What ultimately convinced you?", "What were you afraid of?"
|
|
169
|
-
- Usage questions: "Is the product doing what you expected?", "What surprised you?", "What's still missing?"
|
|
170
|
-
- Signals of undiscovered jobs: workarounds, non-consumption, compensating behaviors, negative emotions with current solutions
|
|
171
|
-
|
|
172
|
-
**Product applications:**
|
|
173
|
-
|
|
174
|
-
| Context | Application | Example |
|
|
175
|
-
|---------|-------------|---------|
|
|
176
|
-
| New market entry | Interview people who recently switched to or from a competitor | Reconstruct the timeline to find what pushed them away and pulled them toward the new solution |
|
|
177
|
-
| Churn reduction | Interview churned customers about their decision timeline | Discover whether the failure was Big Hire (wrong expectations) or Little Hire (poor daily experience) |
|
|
178
|
-
| Feature discovery | Interview customers using workarounds | A customer using spreadsheets alongside your product reveals an unmet job dimension |
|
|
179
|
-
|
|
180
|
-
**Copy patterns:**
|
|
181
|
-
- Use exact customer language from interviews in marketing copy
|
|
182
|
-
- "We heard you say [verbatim quote] -- so we built [feature]"
|
|
183
|
-
- Frame benefits using the circumstances and emotions customers actually described
|
|
184
|
-
|
|
185
|
-
**Ethical boundary:** Never lead interview subjects toward predetermined conclusions. The goal is genuine discovery, not confirmation of existing assumptions.
|
|
186
|
-
|
|
187
|
-
See: [references/innovation-process.md](references/innovation-process.md)
|
|
188
|
-
|
|
189
|
-
### 6. Designing for the Job
|
|
190
|
-
|
|
191
|
-
**Core concept:** Build the entire product experience -- features, metrics, and organization -- around helping the customer accomplish their job, not around internal capabilities or competitive feature parity.
|
|
192
|
-
|
|
193
|
-
**Why it works:** When every product decision answers "will this help the customer better accomplish their job?", teams avoid feature bloat, build coherent experiences, and create products that customers genuinely value. If you can't answer the question, you don't understand the job yet.
|
|
194
|
-
|
|
195
|
-
**Key insights:**
|
|
196
|
-
- Replace customer satisfaction metrics with "did the job get done?" metrics
|
|
197
|
-
- Replace NPS with "reasons for hiring and firing"
|
|
198
|
-
- Replace feature usage metrics with "progress on the job"
|
|
199
|
-
- When the job is poorly understood, integrate (control entire experience); when well understood, modularize (specialize components)
|
|
200
|
-
- Integrate where performance is "not good enough" for the job; modularize where it's "good enough"
|
|
201
|
-
- Every product decision should answer: "Will this help the customer better accomplish their job?"
|
|
202
|
-
|
|
203
|
-
**Product applications:**
|
|
204
|
-
|
|
205
|
-
| Context | Application | Example |
|
|
206
|
-
|---------|-------------|---------|
|
|
207
|
-
| Metrics design | Define success metrics around job completion | Track "time from problem to resolution" instead of "features used per session" |
|
|
208
|
-
| Product roadmap | Prioritize based on job dimensions (functional, emotional, social) | A functional improvement that ignores the emotional dimension may not move the needle |
|
|
209
|
-
| Organizational alignment | Structure teams around jobs, not product components | A "morning commute job" team owns everything from content to packaging to distribution |
|
|
210
|
-
|
|
211
|
-
**Copy patterns:**
|
|
212
|
-
- "Built for [the job], not for [the category]"
|
|
213
|
-
- Emphasize outcome and progress, not features and specifications
|
|
214
|
-
- "Everything you need to [job] -- nothing you don't"
|
|
215
|
-
|
|
216
|
-
**Ethical boundary:** Never design addictive patterns that serve engagement metrics rather than genuine customer progress. The job framework demands that the customer's progress is the true north, not your retention numbers.
|
|
217
|
-
|
|
218
|
-
See: [references/organizational-change.md](references/organizational-change.md)
|
|
219
|
-
|
|
220
|
-
## Common Mistakes
|
|
221
|
-
|
|
222
|
-
| Mistake | Why It Fails | Fix |
|
|
223
|
-
|---------|-------------|-----|
|
|
224
|
-
| Defining jobs too narrowly around your product | You miss the real competitive landscape and build features no one needs | Define the job from the customer's perspective, never mentioning your product |
|
|
225
|
-
| Ignoring the emotional and social dimensions | Functional-only jobs miss why customers actually choose (and stay with) products | Always complete all three dimensions: functional, emotional, and social |
|
|
226
|
-
| Confusing jobs with goals or tasks | Goals are too abstract ("be healthy") and tasks are too specific ("click button") to drive strategy | Jobs describe progress in specific circumstances -- more concrete than goals, more strategic than tasks |
|
|
227
|
-
| Only increasing Pull while ignoring Anxiety and Habit | A great product still fails if switching costs and fear are too high | Map all four forces and design interventions for each, especially reducing anti-change forces |
|
|
228
|
-
| Winning the Big Hire but ignoring the Little Hire | High acquisition with high churn -- purchased but never used | Track and optimize the repeated usage decision separately from the purchase decision |
|
|
229
|
-
| Asking customers "what do you want?" | Customers rationalize and can't articulate latent needs; you get incremental feature requests | Use timeline-based discovery interviews that reconstruct actual behavior and decisions |
|
|
230
|
-
| Defining competition by product category | You miss the real threats and opportunities from adjacent categories and non-consumption | Map every alternative the customer could "hire" for the same job, including doing nothing |
|
|
231
|
-
|
|
232
|
-
## Quick Diagnostic
|
|
233
|
-
|
|
234
|
-
| Question | If No | Action |
|
|
235
|
-
|----------|-------|--------|
|
|
236
|
-
| Can you state the job in one sentence without mentioning your product? | You're product-focused, not job-focused | Write a job statement: "When [circumstances], I want to [progress], so I can [outcome]" |
|
|
237
|
-
| Have you mapped all four forces (Push, Pull, Anxiety, Habit)? | You're likely over-investing in Pull and ignoring barriers | Map each force and design specific interventions for Anxiety and Habit |
|
|
238
|
-
| Do you know the emotional and social dimensions of the job? | Your product may win functionally but lose on experience | Conduct discovery interviews focused on feelings and social context around the decision |
|
|
239
|
-
| Have you identified non-obvious competitors from other categories? | You have blind spots in your competitive landscape | List everything a customer could "hire" for the same job, including non-consumption |
|
|
240
|
-
| Are you tracking Little Hire separately from Big Hire? | You can't distinguish acquisition problems from retention problems | Create separate metrics for purchase conversion and repeated usage engagement |
|
|
241
|
-
| Can your team explain how a feature helps accomplish the job? | You're building features without strategic grounding | Require every feature proposal to reference the specific job dimension it serves |
|
|
242
|
-
| Have you interviewed customers about their purchase timeline? | Your understanding of the job is based on assumptions, not evidence | Conduct 10+ discovery interviews reconstructing the first-thought-to-usage journey |
|
|
243
|
-
|
|
244
|
-
See: [references/diagnostics.md](references/diagnostics.md) for the full diagnostic checklist.
|
|
245
|
-
|
|
246
|
-
## Examples and Case Studies
|
|
247
|
-
|
|
248
|
-
See: [references/case-studies.md](references/case-studies.md) for detailed analyses (SNHU, American Girl, Intuit).
|
|
249
|
-
|
|
250
|
-
## Reference Files
|
|
251
|
-
|
|
252
|
-
- [innovation-process.md](references/innovation-process.md): Job hunting methodology, job atlas, prototype testing, job statements
|
|
253
|
-
- [competitive-strategy.md](references/competitive-strategy.md): Non-obvious competition, jobs-based positioning, pricing strategy
|
|
254
|
-
- [organizational-change.md](references/organizational-change.md): Overcoming objections, feature-factory trap, executive buy-in, change management
|
|
255
|
-
- [diagnostics.md](references/diagnostics.md): Diagnostic checklist for evaluating products through the jobs lens
|
|
256
|
-
- [case-studies.md](references/case-studies.md): Detailed analyses of SNHU, American Girl, Intuit, and more
|
|
257
|
-
|
|
258
|
-
## About the Author
|
|
259
|
-
|
|
260
|
-
Clayton M. Christensen (1952-2020) was the Kim B. Clark Professor of Business Administration at Harvard Business School and one of the most influential management thinkers of the modern era. He is best known for introducing the theory of disruptive innovation in his landmark book *The Innovator's Dilemma* (1997), which fundamentally changed how business leaders think about competition and market evolution. Christensen developed the Jobs to Be Done framework as a practical methodology for understanding customer motivation and driving successful innovation, detailed in *Competing Against Luck* (2016). He co-founded the innovation consulting firm Innosight and the Clayton Christensen Institute for Disruptive Innovation. Christensen was ranked the #1 management thinker in the world by Thinkers50 and received the award multiple times. His body of work, spanning nine books including *The Innovator's Solution* and *How Will You Measure Your Life?*, continues to shape product strategy, corporate innovation, and entrepreneurial thinking worldwide.
|
|
261
|
-
|
|
262
|
-
## Further Reading
|
|
263
|
-
|
|
264
|
-
This skill is based on the Jobs to Be Done framework developed by Clayton M. Christensen. For the complete methodology, case studies, and deeper insights, read the original book:
|
|
265
|
-
|
|
266
|
-
- [*"Competing Against Luck: The Story of Innovation and Customer Choice"*](https://www.amazon.com/Competing-Against-Luck-Innovation-Customer/dp/0062435612?tag=wondelai00-20) by Clayton M. Christensen, Taddy Hall, Karen Dillon, and David S. Duncan
|