@thebassclef/lite 1.1.0 → 1.2.0-alpha.1
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/dist/cli.cjs +258 -63
- package/dist/cli.js +258 -63
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lite/.claude/bassclef-configs.jsonc +56 -0
- package/dist/lite/.claude/bassclef-orientation.md +120 -0
- package/dist/lite/.claude/hooks/adr-discipline-check.sh +132 -0
- package/dist/lite/.claude/hooks/atomic-pr-check.sh +169 -0
- package/dist/lite/.claude/hooks/auto-save-idle.sh +51 -0
- package/dist/lite/.claude/hooks/bassclef-sync.sh +51 -13
- package/dist/lite/.claude/hooks/bet-doc-gate.sh +283 -0
- package/dist/lite/.claude/hooks/bug-diagnosis.sh +64 -0
- package/dist/lite/.claude/hooks/destructive-command-guard.sh +136 -0
- package/dist/lite/.claude/hooks/file-rename-discipline-check.sh +147 -0
- package/dist/lite/.claude/hooks/hook-classifier-canary.sh +158 -0
- package/dist/lite/.claude/hooks/kiss-default-check.sh +129 -0
- package/dist/lite/.claude/hooks/multi-tenancy-check.sh +83 -0
- package/dist/lite/.claude/hooks/oo-ad-entry-point-check.sh +216 -0
- package/dist/lite/.claude/hooks/operator-private-path-check.sh +203 -0
- package/dist/lite/.claude/hooks/pattern-annotation-validate.sh +142 -0
- package/dist/lite/.claude/hooks/plain-english-steering.sh +15 -1
- package/dist/lite/.claude/hooks/post-write-trace.sh +66 -0
- package/dist/lite/.claude/hooks/pr-body-scrub-check.sh +446 -0
- package/dist/lite/.claude/hooks/pre-commit-identifier-leak-scrub.sh +137 -0
- package/dist/lite/.claude/hooks/pre-gh-pr-body-scrub.sh +192 -0
- package/dist/lite/.claude/hooks/pre-gh-pr-title-scrub.sh +172 -0
- package/dist/lite/.claude/hooks/role-entry-gate.sh +115 -0
- package/dist/lite/.claude/hooks/save-state.sh +268 -0
- package/dist/lite/.claude/hooks/session-reflection.d/08-settings-drift.sh +8 -1
- package/dist/lite/.claude/hooks/session-reflection.d/10-abrupt-stop-recovery.sh +52 -0
- package/dist/lite/.claude/hooks/session-reflection.d/55-orientation-gate.sh +40 -4
- package/dist/lite/.claude/hooks/session-reflection.d/80-hook-heartbeat-check.sh +12 -5
- package/dist/lite/.claude/hooks/session-reflection.d/81-hook-manifest-staleness.sh +18 -2
- package/dist/lite/.claude/hooks/session-reflection.d/91-npm-version-drift.sh +54 -0
- package/dist/lite/.claude/hooks/session-reflection.d/tests/10-abrupt-stop-recovery.test.sh +95 -0
- package/dist/lite/.claude/hooks/session-reflection.sh +62 -15
- package/dist/lite/.claude/hooks/tool-failure-diagnosis.sh +50 -0
- package/dist/lite/.claude/luminaries/andrej-karpathy.md +165 -0
- package/dist/lite/.claude/luminaries/dave-gray.md +155 -0
- package/dist/lite/.claude/luminaries/gary-klein.md +166 -0
- package/dist/lite/.claude/luminaries/kaoru-ishikawa.md +162 -0
- package/dist/lite/.claude/luminaries/lean-product-canvas.md +33 -0
- package/dist/lite/.claude/luminaries/luke-wroblewski.md +224 -0
- package/dist/lite/.claude/luminaries/ryan-singer.md +113 -0
- package/dist/lite/.claude/luminaries/steve-krug.md +168 -0
- package/dist/lite/.claude/luminaries/tony-ulwick.md +134 -0
- package/dist/lite/.claude/rules/arc-level-orientation-before-leaf.md +60 -0
- package/dist/lite/.claude/rules/architect-review-discipline.md +71 -0
- package/dist/lite/.claude/rules/auto-fix-criteria.md +126 -0
- package/dist/lite/.claude/rules/bassclef-hook-drift-blocker.md +144 -0
- package/dist/lite/.claude/rules/bassclef-models-discovery.md +107 -0
- package/dist/lite/.claude/rules/bassclef-workflow-parity.md +104 -0
- package/dist/lite/.claude/rules/cost-governance.md +154 -0
- package/dist/lite/.claude/rules/file-rename-discipline.md +95 -0
- package/dist/lite/.claude/rules/mechanism-fidelity.md +88 -0
- package/dist/lite/.claude/rules/prototype-production-coupling.md +125 -0
- package/dist/lite/.claude/rules/quick-fix-criteria.md +90 -0
- package/dist/lite/.claude/rules/session-artifacts.md +30 -0
- package/dist/lite/.claude/rules/sibling-smoke-after-substrate-change.md +107 -0
- package/dist/lite/.claude/rules/substrate-as-system.md +67 -0
- package/dist/lite/.claude/rules/usability.md +22 -0
- package/dist/lite/.claude/settings.json +20 -0
- package/dist/lite/.claude/skills/agent-research-spawn/SKILL.md +100 -0
- package/dist/lite/.claude/skills/architect-review/SKILL.md +201 -0
- package/dist/lite/.claude/skills/auto-fix/SKILL.md +297 -0
- package/dist/lite/.claude/skills/autonomous/SKILL.md +300 -0
- package/dist/lite/.claude/skills/bind-subdomain/SKILL.md +232 -0
- package/dist/lite/.claude/skills/canvas/SKILL.md +41 -0
- package/dist/lite/.claude/skills/deploy-prod/SKILL.md +106 -0
- package/dist/lite/.claude/skills/docs-sync/SKILL.md +188 -0
- package/dist/lite/.claude/skills/eisenhower/SKILL.md +273 -0
- package/dist/lite/.claude/skills/empathy-map/SKILL.md +168 -0
- package/dist/lite/.claude/skills/frontend-design/SKILL.md +53 -0
- package/dist/lite/.claude/skills/interview-me/SKILL.md +171 -0
- package/dist/lite/.claude/skills/journal-export/SKILL.md +293 -0
- package/dist/lite/.claude/skills/jtbd-tasks/SKILL.md +203 -0
- package/dist/lite/.claude/skills/objectory-decompose/SKILL.md +256 -0
- package/dist/lite/.claude/skills/pick-luminaries/SKILL.md +100 -0
- package/dist/lite/.claude/skills/pre-mortem/SKILL.md +180 -0
- package/dist/lite/.claude/skills/prototype-gallery/SKILL.md +264 -0
- package/dist/lite/.claude/skills/provision-deploy-host/SKILL.md +257 -0
- package/dist/lite/.claude/skills/quick-fix/SKILL.md +273 -0
- package/dist/lite/.claude/skills/release/SKILL.md +311 -0
- package/dist/lite/.claude/skills/release-notes/SKILL.md +202 -0
- package/dist/lite/.claude/skills/rfc/SKILL.md +222 -0
- package/dist/lite/.claude/skills/riff-prototypes/SKILL.md +637 -0
- package/dist/lite/.claude/skills/secrets-bootstrap/SKILL.md +209 -0
- package/dist/lite/.claude/skills/skill/SKILL.md +304 -0
- package/dist/lite/.claude/skills/smoke-test/SKILL.md +100 -0
- package/dist/lite/.claude/skills/state/SKILL.md +204 -0
- package/dist/lite/.claude/skills/substrate-check/SKILL.md +218 -0
- package/dist/lite/.claude/skills/synthetic-user/SKILL.md +381 -0
- package/dist/lite/.claude/skills/task-scenarios/SKILL.md +105 -0
- package/dist/lite/.claude/skills/tier-dependency-audit/SKILL.md +139 -0
- package/dist/lite/.claude/skills/ux-migration/SKILL.md +424 -0
- package/dist/lite/.claude/skills/value-prop-canvas/SKILL.md +297 -0
- package/dist/lite/README.md +5 -1
- package/dist/lite/gitignore +6 -0
- package/dist/lite/lib/bassclef-dir-resolver.sh +85 -0
- package/dist/lite/lib/clone-failure-classifier.sh +59 -0
- package/dist/lite/lib/fixture-builder.sh +190 -0
- package/dist/lite/lib/fresh-install-check.sh +49 -0
- package/dist/lite/lib/hook-heartbeat.sh +0 -1
- package/dist/lite/lib/mechanism-fidelity.sh +569 -0
- package/dist/lite/lib/npm-version-check.sh +112 -0
- package/dist/lite/lib/preview-state.sh +229 -0
- package/dist/lite/lib/session-rescue.sh +0 -1
- package/dist/lite/scripts/generate-lite-manifest.sh +145 -4
- package/dist/lite/scripts/lite-manifest-drift-check.sh +5 -1
- package/dist/lite/standards/architect-review-discipline.md +222 -0
- package/dist/lite/standards/bassclef-platform.md +249 -0
- package/dist/lite/standards/bassclef-test-repos.md +97 -0
- package/dist/lite/standards/bassclef-wiring-manifest.json +25 -1
- package/dist/lite/standards/cold-adopter-harness.md +205 -0
- package/dist/lite/standards/data-management.md +135 -0
- package/dist/lite/standards/frontend-stack/nextjs-prisma.md +124 -0
- package/dist/lite/standards/lite-manifest-schema-changes.md +27 -0
- package/dist/lite/standards/lite-manifest.json +1456 -14
- package/dist/lite/standards/mechanism-fidelity.md +205 -0
- package/dist/lite/standards/operator-private-discipline.md +200 -0
- package/dist/lite/standards/operator-to-public-flow.md +195 -0
- package/dist/lite/standards/prototype-gallery.md +251 -0
- package/dist/lite/standards/pseudonym-key-schema.md +109 -0
- package/dist/lite/standards/sibling-validation-checklist.md +181 -0
- package/dist/lite/standards/slack-notifications.md +161 -0
- package/dist/lite/standards/synthetic-user-testing.md +173 -0
- package/dist/lite/standards/vendor-bindings.md +165 -0
- package/dist/lite/standards/vendor-plugins/frontend-design.md +66 -0
- package/dist/lite/standards/vpc-fit-validation.md +167 -0
- package/dist/lite/templates/gallery-yml.md +113 -0
- package/dist/lite/templates/product-canvas.md +169 -0
- package/dist/lite/templates/value-prop-canvas.md +180 -0
- package/package.json +12 -5
- /package/dist/lite/{whereami.md → docs/whereami.md} +0 -0
|
@@ -38,29 +38,69 @@ echo "$TIMING_NOW" > "$DURABLE_TIMING_DIR/${CWD_HASH}.timing" 2>/dev/null
|
|
|
38
38
|
source "$(dirname "$0")/trace-helper.sh"
|
|
39
39
|
trace_log "session-start" "$SOURCE"
|
|
40
40
|
|
|
41
|
-
# Resolve bassclef dir
|
|
41
|
+
# Resolve bassclef dir — cures sunj-labs/bassclef-cli#105 root cause.
|
|
42
|
+
# Prior derivation walked up two levels from HOOK_REAL_PATH; under operator
|
|
43
|
+
# install where the dispatcher lives at $HOME/.claude/hooks/, that resolved
|
|
44
|
+
# to $HOME and 13 fragments read the wrong root. Now we probe four paths
|
|
45
|
+
# via lib/bassclef-dir-resolver.sh — peer-checkout, $HOME/bassclef, bundled,
|
|
46
|
+
# fallback to $CWD. See docs/decompositions/2026-09-18-phase-b-adopter-cures.md
|
|
47
|
+
# for the GRASP + Ousterhout deep-module map.
|
|
42
48
|
HOOK_REAL_PATH="$(readlink -f "$0" 2>/dev/null || readlink "$0" 2>/dev/null || echo "$0")"
|
|
43
|
-
|
|
49
|
+
{
|
|
50
|
+
_br_sd="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
51
|
+
for _br_c in "${_br_sd}/../../lib/bassclef-dir-resolver.sh" "${HOME:-/}/lib/bassclef-dir-resolver.sh"; do
|
|
52
|
+
[ -f "$_br_c" ] && source "$_br_c" && break
|
|
53
|
+
done
|
|
54
|
+
unset _br_sd _br_c
|
|
55
|
+
} 2>/dev/null || true
|
|
56
|
+
|
|
57
|
+
if declare -f resolve_bassclef_dir >/dev/null 2>&1; then
|
|
58
|
+
BASSCLEF_DIR="$(HOOK_REAL_PATH="$HOOK_REAL_PATH" CWD="$CWD" resolve_bassclef_dir)"
|
|
59
|
+
else
|
|
60
|
+
# Defensive fallback if the resolver lib is not present. Preserves prior
|
|
61
|
+
# behavior; the cure still applies once the lib syncs into the adopter.
|
|
62
|
+
BASSCLEF_DIR="$(cd "$(dirname "$HOOK_REAL_PATH")/../.." && pwd)"
|
|
63
|
+
fi
|
|
64
|
+
export BASSCLEF_DIR
|
|
44
65
|
|
|
45
66
|
# High-contrast BLOCKED banner; used by every module that raises a gap.
|
|
67
|
+
# RFC-0008 F3 — "Silence is not deferral" is a commitment device. It works
|
|
68
|
+
# because it forecloses the easy out, and it is consumable: spend it on a
|
|
69
|
+
# check that turns out to be advice and the reader discounts it everywhere.
|
|
70
|
+
# Callers that can prove their own state is benign pass a second argument
|
|
71
|
+
# and get a softer close. Callers that pass one argument behave exactly as
|
|
72
|
+
# before, so the other 27 sites are untouched.
|
|
46
73
|
blocked_banner() {
|
|
47
74
|
local msg="$1"
|
|
75
|
+
local severity="${2:-blocking}"
|
|
48
76
|
echo ""
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
77
|
+
if [ "$severity" = "advisory" ]; then
|
|
78
|
+
echo "NOTE"
|
|
79
|
+
echo "────────────────────────────────────────────"
|
|
80
|
+
echo "$msg"
|
|
81
|
+
echo "────────────────────────────────────────────"
|
|
82
|
+
echo "Worth doing. Not blocking this session."
|
|
83
|
+
else
|
|
84
|
+
echo "🛑🛑🛑 BLOCKED 🛑🛑🛑"
|
|
85
|
+
echo "────────────────────────────────────────────"
|
|
86
|
+
echo "$msg"
|
|
87
|
+
echo "────────────────────────────────────────────"
|
|
88
|
+
echo "ACTION: resolve OR explicitly defer (per .claude/rules/blocked-items.md)."
|
|
89
|
+
echo "Silence is not deferral. Propose this as item #1 in your session plan."
|
|
90
|
+
fi
|
|
55
91
|
echo ""
|
|
56
92
|
}
|
|
57
93
|
|
|
94
|
+
# RFC-0008 F6 — this block is steering aimed at the agent, but the adopter
|
|
95
|
+
# reads it too. Three imperatives and two shouted negations, before a single
|
|
96
|
+
# check has run, read as "you already did something wrong". Say who it is
|
|
97
|
+
# for, and say that it is state rather than a problem report.
|
|
58
98
|
echo "============================================"
|
|
59
|
-
echo "
|
|
99
|
+
echo "Session start — orientation"
|
|
60
100
|
echo "============================================"
|
|
61
101
|
echo ""
|
|
62
|
-
echo "
|
|
63
|
-
echo "
|
|
102
|
+
echo "Agent: work through this before answering. Reflect, then plan."
|
|
103
|
+
echo "Reader: this is what the session found on disk, not a problem report."
|
|
64
104
|
echo ""
|
|
65
105
|
|
|
66
106
|
# === Last save state ===
|
|
@@ -112,10 +152,17 @@ if [ -f "$LOCK_FILE" ]; then
|
|
|
112
152
|
fi
|
|
113
153
|
|
|
114
154
|
# === Write session lock (AFTER checking — per standards/hook-idempotency.md) ===
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
155
|
+
# Guarded — silent skip when cwd has no .claude/ dir. A cold adopter (Sam)
|
|
156
|
+
# opening Claude Code in a non-bassclef-onboarded cwd should not see a
|
|
157
|
+
# visible shell error at first turn. Bassclef-onboarded cwds always have
|
|
158
|
+
# .claude/ so behavior there is unchanged. Regression guard: adopter-simulator
|
|
159
|
+
# T6 + T7 pin this contract.
|
|
160
|
+
if [ -d .claude ]; then
|
|
161
|
+
MACHINE=$(hostname -s 2>/dev/null || echo "unknown")
|
|
162
|
+
echo "machine: $MACHINE" > "$LOCK_FILE"
|
|
163
|
+
echo "timestamp: $(date +%Y-%m-%dT%H:%M:%S%z)" >> "$LOCK_FILE"
|
|
164
|
+
echo "pid: $$" >> "$LOCK_FILE"
|
|
165
|
+
fi
|
|
119
166
|
|
|
120
167
|
# === Fetch origin before staleness checks (bassclef-upstream#403) ===
|
|
121
168
|
# Several session-reflection.d/ fragments read git log / file listings
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# tier: lite
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
# Tool Failure Diagnosis — fires on PostToolUse.
|
|
6
|
+
# When a tool returns an error or failure signal, inject the
|
|
7
|
+
# temperance → diagnose chain before Claude retries.
|
|
8
|
+
|
|
9
|
+
INPUT=$(cat)
|
|
10
|
+
# Fail-soft on malformed JSON — same pattern as bassclef#1101 pre-commit-gate
|
|
11
|
+
# and bassclef#1119 post-write-trace. 3rd hook in /longrun-c with this bug.
|
|
12
|
+
TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name // ""' 2>/dev/null || echo "")
|
|
13
|
+
OUTPUT=$(echo "$INPUT" | jq -r '.tool_output // ""' 2>/dev/null | head -20 || echo "")
|
|
14
|
+
|
|
15
|
+
# Check if the tool output contains failure signals
|
|
16
|
+
if echo "$OUTPUT" | grep -qiE '(error|Error|ERROR|fail|FAIL|exit code [1-9]|ENOENT|EACCES|EPERM|denied|refused|404|500|502|503|504|panic|fatal|FATAL|exception|Exception|timed.out|no space|cannot|Could not|not found|Not Found|unhandled|Unhandled)'; then
|
|
17
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
18
|
+
source "$SCRIPT_DIR/trace-helper.sh"
|
|
19
|
+
trace_log "tool-error" "$TOOL_NAME failed"
|
|
20
|
+
cat <<'DIAG'
|
|
21
|
+
============================================
|
|
22
|
+
TOOL ERROR — TEMPERANCE → DIAGNOSE
|
|
23
|
+
============================================
|
|
24
|
+
|
|
25
|
+
A tool call just returned an error. Follow this chain:
|
|
26
|
+
|
|
27
|
+
1. TEMPERANCE (pause before reacting)
|
|
28
|
+
- Am I about to brute-force a retry with different args?
|
|
29
|
+
- What is the SIMPLEST correct next step?
|
|
30
|
+
- If I don't know WHY it failed, the answer is ALWAYS "understand first."
|
|
31
|
+
|
|
32
|
+
2. DIAGNOSE (understand before fixing)
|
|
33
|
+
- What failed: [tool, command, expected vs actual]
|
|
34
|
+
- Is / Is Not: [what's broken vs what still works]
|
|
35
|
+
- Why (quick trace): [1-3 whys to likely root cause]
|
|
36
|
+
- Hypothesis: [what you think caused it]
|
|
37
|
+
- Next step: [a READ-ONLY diagnostic command, NOT a fix]
|
|
38
|
+
|
|
39
|
+
3. THEN FIX (only after diagnosis is written)
|
|
40
|
+
|
|
41
|
+
For simple, expected errors (e.g., "file not found" when checking if
|
|
42
|
+
something exists), state "Expected error — [reason]" and proceed.
|
|
43
|
+
|
|
44
|
+
For unexpected errors: do NOT retry, do NOT guess different args,
|
|
45
|
+
do NOT work around silently. Diagnose first.
|
|
46
|
+
============================================
|
|
47
|
+
DIAG
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
exit 0
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Andrej Karpathy
|
|
4
|
+
slug: andrej-karpathy
|
|
5
|
+
claimed_by: [builder, architect, orchestrator]
|
|
6
|
+
referenced_by_skills: []
|
|
7
|
+
primary_domain: engineering
|
|
8
|
+
depth: full
|
|
9
|
+
sourcing_format: talk-and-post
|
|
10
|
+
sourcing_note: "Karpathy's methodology lives primarily in conference talks, X / Twitter threads, blog posts, and Stanford lecture videos. Books are absent by design; the methodology evolves with the field and Karpathy publishes in the medium where the field actually lives. This differs from the catalog's book-based norm; accepted because book-based sourcing would misrepresent where this methodology is actually authored."
|
|
11
|
+
solves_problems_brownfield:
|
|
12
|
+
- "Skills + agents + hooks fill context without a coherent budget — context window overflows or starves model decision-making"
|
|
13
|
+
- "Prompt design treated as ad-hoc text editing rather than as program design for a stateless compute engine"
|
|
14
|
+
- "Multi-agent dispatch leaks context across roles because agents are not modeled as stateless invocations needing explicit context threading"
|
|
15
|
+
- "Operator treats LLM as persistent service — model 'remembers' last conversation — and substrate decisions break under that mental model"
|
|
16
|
+
solves_problems_greenfield:
|
|
17
|
+
- "Designing a substrate that explicitly allocates the context window across instruction + example + data + output budget per skill"
|
|
18
|
+
- "Choosing what state to persist (in markers + chronicles + state spine) versus what to re-derive per invocation"
|
|
19
|
+
- "Building agent choreography where each handoff carries the explicit context payload, not implicit assumptions about prior state"
|
|
20
|
+
- "Authoring skills that compose against the LLM-as-CPU model — each skill knows what context it needs and what context it produces"
|
|
21
|
+
anti_patterns:
|
|
22
|
+
- "Conversational interfaces where the user does not care about the underlying token + context discipline; over-applying Karpathy's framing creates needless friction"
|
|
23
|
+
- "Pure deterministic pipelines without LLM components — the CPU/RAM framing has no purchase when there is no model in the loop"
|
|
24
|
+
- "Tiny one-shot prompts where the substrate overhead exceeds the prompt complexity"
|
|
25
|
+
sources:
|
|
26
|
+
- type: blog_post
|
|
27
|
+
title: "Software 2.0"
|
|
28
|
+
authors: ["Andrej Karpathy"]
|
|
29
|
+
year: 2017
|
|
30
|
+
url: "https://karpathy.medium.com/software-2-0-a64152b37c35"
|
|
31
|
+
methodology_covered:
|
|
32
|
+
- "Software 2.0 — Programs whose logic is learned weights instead of authored statements"
|
|
33
|
+
- "Source code becomes training data plus architecture; compilation becomes training; debugging becomes dataset inspection plus eval"
|
|
34
|
+
- type: talk
|
|
35
|
+
title: "State of GPT (Microsoft Build 2023)"
|
|
36
|
+
authors: ["Andrej Karpathy"]
|
|
37
|
+
year: 2023
|
|
38
|
+
url: "https://www.youtube.com/watch?v=bZQun8Y4L2A"
|
|
39
|
+
methodology_covered:
|
|
40
|
+
- "LLM-as-OS framing — model weights are the CPU, context window is the RAM"
|
|
41
|
+
- "Stateless invocation thinking — every model call starts cold"
|
|
42
|
+
- type: talk
|
|
43
|
+
title: "Sequoia AI Ascent 2026 — Software 3.0"
|
|
44
|
+
authors: ["Andrej Karpathy"]
|
|
45
|
+
year: 2026
|
|
46
|
+
url: "https://karpathy.bearblog.dev/sequoia-ascent-2026/"
|
|
47
|
+
methodology_covered:
|
|
48
|
+
- "Context window equals RAM, model weights equal CPU, prompting equals programming"
|
|
49
|
+
- "Context engineering as the new operating-system discipline for LLM-based systems"
|
|
50
|
+
- type: paper
|
|
51
|
+
title: "CS231n — Convolutional Neural Networks for Visual Recognition (Stanford)"
|
|
52
|
+
authors: ["Andrej Karpathy"]
|
|
53
|
+
year: 2015
|
|
54
|
+
url: "http://cs231n.stanford.edu/"
|
|
55
|
+
methodology_covered:
|
|
56
|
+
- "Field-defining ML pedagogy; the bassclef introduction to neural network internals"
|
|
57
|
+
- type: blog_post
|
|
58
|
+
title: "Yes you should understand backprop"
|
|
59
|
+
authors: ["Andrej Karpathy"]
|
|
60
|
+
year: 2016
|
|
61
|
+
url: "https://karpathy.medium.com/yes-you-should-understand-backprop-e2f06eab496b"
|
|
62
|
+
methodology_covered:
|
|
63
|
+
- "Foundational essay on training discipline — understand the gradient flow or debugging is guesswork"
|
|
64
|
+
- type: blog_post
|
|
65
|
+
title: "A Recipe for Training Neural Networks"
|
|
66
|
+
authors: ["Andrej Karpathy"]
|
|
67
|
+
year: 2019
|
|
68
|
+
url: "http://karpathy.github.io/2019/04/25/recipe/"
|
|
69
|
+
methodology_covered:
|
|
70
|
+
- "Operational discipline for ML engineering — systematic process for training neural networks"
|
|
71
|
+
- type: video
|
|
72
|
+
title: "Let's build the GPT Tokenizer"
|
|
73
|
+
authors: ["Andrej Karpathy"]
|
|
74
|
+
year: 2024
|
|
75
|
+
url: "https://www.youtube.com/watch?v=zduSFxRajkE"
|
|
76
|
+
methodology_covered:
|
|
77
|
+
- "Token economy — tokens are the atomic unit of cost and quality in LLM systems"
|
|
78
|
+
- "Walking through tokenization mechanics, the foundation of the token-economy framing"
|
|
79
|
+
- type: blog_post
|
|
80
|
+
title: "Andrej Karpathy on X (primary methodology venue)"
|
|
81
|
+
authors: ["Andrej Karpathy"]
|
|
82
|
+
year: 2025
|
|
83
|
+
url: "https://x.com/karpathy"
|
|
84
|
+
methodology_covered:
|
|
85
|
+
- "Context engineering as a discipline distinct from prompt engineering (coined mid-2025)"
|
|
86
|
+
- "Stateless invocation thinking — every call starts cold; state must be threaded explicitly"
|
|
87
|
+
verification_status: verified
|
|
88
|
+
description: "\"The LLM is the CPU. The context window is the RAM. Programs are prompts. The job is filling the working memory with exactly the right instructions, data, and examples so the CPU…"
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
# Andrej Karpathy
|
|
92
|
+
|
|
93
|
+
## Signature
|
|
94
|
+
|
|
95
|
+
*"The LLM is the CPU. The context window is the RAM. Programs are prompts. The job is filling the working memory with exactly the right instructions, data, and examples so the CPU can compute the right answer in one pass."*
|
|
96
|
+
|
|
97
|
+
Stanford PhD; OpenAI co-founder; former Tesla AI Director; CS231n author; widely viewed as the field's most influential teacher. The bassclef voice on **LLM-as-computer** thinking: stateless model + finite context window + tokens-as-instructions. Karpathy named context engineering as a discipline distinct from prompt engineering — and provided the mental model the entire field now uses.
|
|
98
|
+
|
|
99
|
+
## Core methods
|
|
100
|
+
|
|
101
|
+
- **LLM-as-CPU, context window-as-RAM** — The model is a stateless computation engine that runs once per invocation. The context window is finite working memory the operator fills before the model fires. Reframes "prompt engineering" as "context engineering": the question is not how to phrase one prompt but how to allocate the context budget across instruction + examples + data + output across an entire system.
|
|
102
|
+
- **Software 2.0** — Programs whose logic is learned weights instead of authored statements. Source code becomes training data + architecture; compilation becomes training; debugging becomes dataset inspection + eval. When bassclef substrate composes against an LLM, the deployed program is partly the model weights (Software 2.0) and partly the substrate's skills + rules + hooks (Software 1.0). Both layers ship; both layers need discipline.
|
|
103
|
+
- **Stateless invocation thinking** — Every model call starts cold. State must be threaded into the context window or recovered from an external store before each call. There is no "the model remembers." Memory + identity + history are substrate concerns, not model capabilities. Designing a multi-agent or multi-turn system without this discipline produces silent state drift.
|
|
104
|
+
- **Token economy** — Tokens are the atomic unit. Cost and quality both vary by token count and token content. Designing for the token budget is a first-class engineering constraint, not an optimization. Skills that allocate their context budget poorly waste cost AND lose quality.
|
|
105
|
+
|
|
106
|
+
## When to channel this luminary
|
|
107
|
+
|
|
108
|
+
Channel Karpathy when designing or critiquing the substrate itself — skills, rules, hooks, agent handoffs, prompts. The signal is: substrate decisions hinge on assumptions about what the model "knows" or "remembers" that do not match the stateless-CPU reality.
|
|
109
|
+
|
|
110
|
+
Channel Karpathy when authoring a new skill or rule. Ask: what context does this skill need? What does it produce? Where does that context come from on each invocation? What does the substrate persist versus re-derive? Without these answers the skill is an ad-hoc text edit, not a programmable substrate component.
|
|
111
|
+
|
|
112
|
+
INSTEAD of channeling Karpathy for product UX or feature design: Karpathy operates at the LLM-substrate altitude, not the user-facing surface. For UX, route to Cooper + Norman. For positioning, route to Christensen + Dunford. For substrate, route to Karpathy.
|
|
113
|
+
|
|
114
|
+
## Stack translation
|
|
115
|
+
|
|
116
|
+
In bassclef's substrate:
|
|
117
|
+
|
|
118
|
+
- **Skill bodies are program statements for the LLM-CPU** — Each skill's procedure tells the model what to do; each skill's "Sources read" block tells the model what to load. Compositional skills allocate context across sub-skills; the operator-facing prose discipline is itself a context-budget rule.
|
|
119
|
+
- **Rules are background context the substrate guarantees is always present** — Every rule loaded via `additionalDirectories` is unconditional context the model can rely on. Rule clarity (per `.claude/rules/operator-facing-prose.md`) is therefore a context-economy constraint, not a stylistic preference.
|
|
120
|
+
- **Hooks fire before model invocation to populate the working memory correctly** — Session-start hooks load chronicle + whereami + iteration-bet so the model starts the session with state already threaded. Pre-tool-use hooks add gates that fire on the model's behalf. Stop hooks ensure state persists for the next invocation.
|
|
121
|
+
- **Agents are role-specific context shapers** — Each agent definition (`.claude/agents/`) imposes a role-specific frame on the next model invocation. Multi-agent dispatch is multi-context handoff; the iteration-bet-brief-completeness rule exists because a Builder spawned from an Orchestrator starts with no context except what the brief carries.
|
|
122
|
+
- **State spine + chronicles are the "external memory" Karpathy's stateless framing requires** — The substrate keeps state in `state/markers/` + `state/luminary-implementations/` + chronicle/ + docs/whereami.md because the model cannot. Every read from those locations is a context-load step against the stateless-CPU.
|
|
123
|
+
|
|
124
|
+
## Anti-patterns it prevents
|
|
125
|
+
|
|
126
|
+
- **Prompt-engineering as text editing** — Treating a skill body as natural-language prose to be polished rather than as a program for a stateless CPU. INSTEAD: ask what the skill loads + what it produces + how its context budget is allocated.
|
|
127
|
+
- **"The model remembers"** — Assuming the next invocation has access to the last one's context. Multi-agent dispatch dies here: an agent spawned via `Agent` tool starts cold. The iteration-bet-brief-completeness rule is the substrate's defense.
|
|
128
|
+
- **Context budget overflow** — Skills + rules + agents all loading large bodies of text without an explicit budget. Context window fills; signal-to-noise drops; model quality collapses. Karpathy's framing forces an explicit budget per substrate component.
|
|
129
|
+
- **Context budget starvation** — The opposite failure: skill bodies too thin to give the model enough discipline. Result is hallucination + inconsistent output. The bar is sufficient context for one-pass correctness, not minimal context.
|
|
130
|
+
- **Implicit state assumptions** — Designing substrate that depends on state the model + harness do not actually persist. The state spine + accessor-library-discipline rule + state-schema-validation rule are all answers to this anti-pattern.
|
|
131
|
+
|
|
132
|
+
## Worked example
|
|
133
|
+
|
|
134
|
+
For bassclef's own substrate, applied to a Sunday three-agent dispatch:
|
|
135
|
+
|
|
136
|
+
**The naive design (without Karpathy framing)**: dispatch Agent A + Agent B + Agent C in parallel; trust each agent to know what to do based on the task description.
|
|
137
|
+
|
|
138
|
+
**Karpathy's question**: what context does each agent have at invocation? Answer: nothing except the prompt the dispatcher sends. The base bassclef rules load via `additionalDirectories` — that is background context — but everything specific to the task must be threaded in the prompt.
|
|
139
|
+
|
|
140
|
+
**Substrate responses**:
|
|
141
|
+
|
|
142
|
+
1. The `iteration-bet-brief-completeness` rule requires every artifact the bet cites to land in the agent prompt verbatim. Without it, the agent starts cold with no context except a short task description, and quality collapses.
|
|
143
|
+
2. The `artifact-ingestion` rule requires the agent to Read every named source before producing output. Reading IS the act of loading context into the working memory.
|
|
144
|
+
3. The `state-spine` substrate persists what each session needs to load on start. Chronicle + whereami + iteration-bet are the substrate's external memory; the model loads them on each invocation because it cannot otherwise remember.
|
|
145
|
+
4. The `auto-save` hook commits state to git before the model's context is lost between sessions. The state-spine entries land via accessors that validate the data — context that is loaded next session is context the substrate guaranteed.
|
|
146
|
+
|
|
147
|
+
The whole bassclef substrate is Karpathy's mental model expressed as a working system. Adopters who use bassclef without the Karpathy framing build skills + rules + hooks that fight each other because they treat the LLM as persistent. Adopters who internalize Karpathy author substrate that composes cleanly.
|
|
148
|
+
|
|
149
|
+
## Sources
|
|
150
|
+
|
|
151
|
+
- *Andrej Karpathy on X* — `https://x.com/karpathy` — primary venue for methodology evolution; threads on LLM internals + context engineering + multi-agent systems are the field's bassclef reading
|
|
152
|
+
- *State of GPT (Microsoft Build 2023)* — Karpathy talk introducing LLM-as-OS framing; `https://www.youtube.com/watch?v=bZQun8Y4L2A` (Microsoft Build official channel)
|
|
153
|
+
- *Software 2.0* (2017 blog post) — `https://karpathy.medium.com/software-2-0-a64152b37c35` — the original essay on neural networks as programs
|
|
154
|
+
- *CS231n: Convolutional Neural Networks for Visual Recognition* — Stanford lecture series authored by Karpathy; `http://cs231n.stanford.edu/` — the field's most-watched ML course
|
|
155
|
+
- *Yes you should understand backprop* (2016) — `https://karpathy.medium.com/yes-you-should-understand-backprop-e2f06eab496b` — foundational essay on training discipline
|
|
156
|
+
- *A Recipe for Training Neural Networks* (2019) — `http://karpathy.github.io/2019/04/25/recipe/` — operational discipline for ML engineering
|
|
157
|
+
- *Let's build the GPT Tokenizer* — `https://www.youtube.com/watch?v=zduSFxRajkE` — multi-hour video walking through tokenization, the atomic unit of the token-economy framing
|
|
158
|
+
|
|
159
|
+
## Related luminaries
|
|
160
|
+
|
|
161
|
+
- **Hunt + Thomas** — DRY + KISS + YAGNI compose with Karpathy's token economy. Both disciplines force explicit budget thinking; both prevent the same class of bloat.
|
|
162
|
+
- **Rich Hickey** — Simple vs Easy applies at the prompt + substrate-design altitude. A complected prompt is one that complects instruction + example + data + output without a budget; Karpathy's framing surfaces the complect, Hickey's framing names it.
|
|
163
|
+
- **Kent Beck** — TDD applied to substrate: every skill needs an example of what it produces (the test); every rule needs a context the model can actually use to verify (the assertion). Beck's discipline composes with Karpathy at the substrate layer.
|
|
164
|
+
- **Robert C. Martin** — SOLID applied to skills. Single-responsibility = each skill loads one kind of context; open/closed = skills compose without rewriting; dependency-inversion = skills depend on substrate primitives (state spine + accessor library), not on raw filesystem reads.
|
|
165
|
+
- **Gang of Four** — Patterns compose at the substrate altitude. Strategy = pick the right skill per intent. Decorator = compose-with adds context without rewriting. Observer = hooks. Adapter = state accessor library.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
tier: lite
|
|
3
|
+
name: Dave Gray
|
|
4
|
+
slug: dave-gray
|
|
5
|
+
claimed_by: [designer, shaper, product-manager]
|
|
6
|
+
referenced_by_skills: [empathy-map, interview-me, personas]
|
|
7
|
+
primary_domain: design-research
|
|
8
|
+
depth: full
|
|
9
|
+
solves_problems_greenfield:
|
|
10
|
+
- "Building for a persona whose emotional and observational context is unclear from the interview notes"
|
|
11
|
+
- "Product team is imagining user needs instead of citing what interviewees actually said or did"
|
|
12
|
+
- "Discovery phase needs a bridge from raw interview transcripts to synthesized JTBDs"
|
|
13
|
+
- "New adopter onboarding — an operator needs to shape a persona for their own product without a research team"
|
|
14
|
+
solves_problems_brownfield:
|
|
15
|
+
- "Existing persona docs are stale, inferred without data, or copied from a competitor deck"
|
|
16
|
+
- "Team argues about what users want without evidence — the argument itself is the signal"
|
|
17
|
+
- "Design decisions cite we know our users but the notes to prove it are scattered or missing"
|
|
18
|
+
- "Adopter persona docs need refresh with real conversation data after 12+ months of drift"
|
|
19
|
+
anti_patterns:
|
|
20
|
+
- "Inventing quotes in the Say band without a transcript reference"
|
|
21
|
+
- "Skipping the empathy map because I know the user"
|
|
22
|
+
- "Empathy-mapping personas the researcher has not interviewed"
|
|
23
|
+
- "Filling only Think and Feel without evidence in See/Say/Do/Hear"
|
|
24
|
+
sources:
|
|
25
|
+
- type: book
|
|
26
|
+
title: "Gamestorming: A Playbook for Innovators, Rulebreakers, and Changemakers"
|
|
27
|
+
authors: ["Dave Gray", "Sunni Brown", "James Macanufo"]
|
|
28
|
+
year: 2010
|
|
29
|
+
publisher: "O'Reilly Media"
|
|
30
|
+
isbn: "9780596804176"
|
|
31
|
+
url: "https://www.oreilly.com/library/view/gamestorming/9781449391386/"
|
|
32
|
+
methodology_covered:
|
|
33
|
+
- "Original Empathy Map (Says / Thinks / Does / Feels + Pains + Gains)"
|
|
34
|
+
- "80+ workshop games for design thinking, product discovery, and team facilitation"
|
|
35
|
+
- type: article
|
|
36
|
+
title: "Updated Empathy Map Canvas"
|
|
37
|
+
authors: ["Dave Gray"]
|
|
38
|
+
year: 2017
|
|
39
|
+
url: "https://medium.com/@davegray/updated-empathy-map-canvas-46df22df3c8a"
|
|
40
|
+
methodology_covered:
|
|
41
|
+
- "7-section canvas — Goal, See, Say, Do, Hear (clockwise sensor bands), Think and Feel (central inference), Pains, Gains"
|
|
42
|
+
- "Clockwise fill order; sensor bands populated from observation before inference bands"
|
|
43
|
+
- type: article
|
|
44
|
+
title: "Empathy Mapping: The First Step in Design Thinking"
|
|
45
|
+
authors: ["Sarah Gibbons"]
|
|
46
|
+
year: 2018
|
|
47
|
+
url: "https://www.nngroup.com/articles/empathy-mapping/"
|
|
48
|
+
venue: "Nielsen Norman Group"
|
|
49
|
+
methodology_covered:
|
|
50
|
+
- "Empathy map as first step in design-thinking process"
|
|
51
|
+
- "Sparse maps as a research-gap signal — the empty band is the finding"
|
|
52
|
+
- "One-user vs aggregate empathy mapping trade-offs"
|
|
53
|
+
- type: book
|
|
54
|
+
title: "Value Proposition Design"
|
|
55
|
+
authors: ["Alex Osterwalder", "Yves Pigneur", "Gregory Bernarda", "Alan Smith"]
|
|
56
|
+
year: 2014
|
|
57
|
+
publisher: "Wiley"
|
|
58
|
+
isbn: "9781118968055"
|
|
59
|
+
url: "https://www.strategyzer.com/library/value-proposition-design"
|
|
60
|
+
methodology_covered:
|
|
61
|
+
- "Value Proposition Canvas incorporates the empathy map as the customer-profile companion"
|
|
62
|
+
- "Jobs / Pains / Gains framing that maps directly to the empathy map's Pains and Gains bands"
|
|
63
|
+
- type: website
|
|
64
|
+
title: "XPLANE"
|
|
65
|
+
url: "https://xplane.com"
|
|
66
|
+
methodology_covered:
|
|
67
|
+
- "Gray's consultancy — the visual-thinking practice from which the empathy map emerged in the 2000s"
|
|
68
|
+
verification_status: verified
|
|
69
|
+
verification_note: "Both operator-provided URLs fetched successfully. Gamestorming ISBN and O'Reilly URL verified against the publisher page. XPLANE founding year (1993) is web-knowledge and should be treated as approximate until verified against the company's official history."
|
|
70
|
+
description: "\"The whole idea was to imagine what it's like to be inside someone else's head."
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
# Dave Gray
|
|
74
|
+
|
|
75
|
+
## Signature
|
|
76
|
+
|
|
77
|
+
*"The whole idea was to imagine what it's like to be inside someone else's head. That was and is the primary power of the exercise."* — Gray, Updated Empathy Map Canvas, 2017 [ref:2]
|
|
78
|
+
|
|
79
|
+
Founder of **XPLANE** — a visual-thinking consultancy founded in 1993 that shaped how large enterprises use pictures and canvases for strategy work. Co-author of **Gamestorming: A Playbook for Innovators, Rulebreakers, and Changemakers** (O'Reilly, 2010) [ref:1] with Sunni Brown and James Macanufo. Creator of the **Empathy Map** — one of the most-adopted user-research canvases in modern design practice. Osterwalder incorporated the empathy map into the Value Proposition Canvas suite in *Value Proposition Design* (2014) [ref:4].
|
|
80
|
+
|
|
81
|
+
## Core methods
|
|
82
|
+
|
|
83
|
+
- **Original Empathy Map (2010)** — a persona-centered canvas with four quadrants around a central persona: **Says** (verbatim interview quotes), **Thinks** (internal monologue the user may not voice), **Does** (observable actions), **Feels** (emotional states with context). Two bands underneath: **Pains** (frustrations, obstacles) and **Gains** (wants, measures of success). Fill from real interview data [ref:1].
|
|
84
|
+
- **Updated Empathy Map Canvas (2017)** — 7 sections in a prescribed clockwise sequence. Start with the **Goal** box: define WHO the map is about and what specific goal or observable behavior the map is anchored to. Then fill the sensor quadrants clockwise: **See**, **Say**, **Do**, **Hear**. Then infer the central **Think and Feel** section from what the sensor bands revealed. Close with **Pains** and **Gains** [ref:2].
|
|
85
|
+
- **Sensor vs cognitive/affective split** — See/Say/Do/Hear are observable in the field. Think and Feel is inferred from the sensor bands. The discipline: skip the cognitive band until the sensor bands carry real evidence. INSTEAD of writing "Thinks: worried about deadlines" from imagination: cite a transcript line first ("Says: 'we ship Friday'") and then infer ("Thinks: worried about deadlines because deadlines came up in every answer").
|
|
86
|
+
- **Anchor to a Goal** — the 2017 update added the Goal box specifically because empty-Goal maps drifted into generic persona sketches. A specific goal (e.g., "book their first trip on our platform") keeps the map research-anchored. INSTEAD of starting with "the user" as a fuzzy noun: name the specific goal the user is pursuing, then map the persona in relation to that goal [ref:2].
|
|
87
|
+
|
|
88
|
+
## When to channel this luminary
|
|
89
|
+
|
|
90
|
+
Fire during design research synthesis, product discovery, and adopter-persona work. Bassclef applications:
|
|
91
|
+
|
|
92
|
+
- `/empathy-map` skill (ship in bet 2026-07-07a) walks the 2017 7-section canvas
|
|
93
|
+
- `/interview-me` skill uses the empathy map as Step 3 (pains/gains/needs from an adopter interview)
|
|
94
|
+
- Adopter-persona docs — bassclef's own operator persona files could use the Gray canvas as the underlying research shape
|
|
95
|
+
- Product-canvas work when a bassclef adopter is shaping their first product and needs a research-anchored persona
|
|
96
|
+
|
|
97
|
+
INSTEAD of channeling Gray when there is no interview data: run interviews first. An empathy map filled from imagination is a persona sketch, not a research artifact. Sarah Gibbons at NN/g makes this point directly [ref:3].
|
|
98
|
+
|
|
99
|
+
## Stack translation
|
|
100
|
+
|
|
101
|
+
Interview transcripts to filled empathy map:
|
|
102
|
+
|
|
103
|
+
- Verbatim quotes → **Say** (with a transcript timestamp reference)
|
|
104
|
+
- Body-language and observation notes → **Do**
|
|
105
|
+
- Reported hearing ("my boss keeps telling me…") → **Hear**
|
|
106
|
+
- Environmental context ("she works at a shared desk with three monitors") → **See**
|
|
107
|
+
- After the four sensor bands carry real evidence, the researcher infers **Think and Feel** — each inference cites the transcript line it rests on
|
|
108
|
+
- Frustrations and blockers named by the user → **Pains**
|
|
109
|
+
- Desired outcomes and measures of success → **Gains**
|
|
110
|
+
|
|
111
|
+
The bassclef `/empathy-map` skill will accept a persona description as input, walk the 7 sections in order (Goal first), and produce a structured markdown or JSON snippet ready to feed downstream skills like `/interview-me`, `/lean-canvas`, and `/pre-mortem` (persona-affected-by-failure lens).
|
|
112
|
+
|
|
113
|
+
## Anti-patterns it prevents
|
|
114
|
+
|
|
115
|
+
- **Fiction in the Say band** — writing quotes without a transcript reference. Gray's canvas is a research artifact. INSTEAD of imagining what the user might say: cite the transcript timestamp or leave the band empty and treat that as the research gap.
|
|
116
|
+
- **"I know the user" skip** — deciding the empathy map is redundant because the tacit knowledge is already in your head. INSTEAD of skipping: write down the tacit knowledge in the sensor bands. If writing it down surfaces a claim you cannot cite, that IS the finding.
|
|
117
|
+
- **Persona-mapping without interviews** — filling all 7 sections for a persona the team has not talked to. The sensor bands do not carry evidence. INSTEAD of inferring from analogies: leave the sensor bands empty and mark them as "research needed"; NN/g's framing is that sparse maps signal more interviews are owed [ref:3].
|
|
118
|
+
- **Inference-only maps** — filling only Think and Feel while leaving the sensor bands empty. The inference bands sit on top of the sensor bands and lose their epistemic anchor without them. INSTEAD of filling inference first: fill sensor bands from observation; then infer Think and Feel with each inference citing the sensor evidence it rests on.
|
|
119
|
+
|
|
120
|
+
## Worked example (bassclef application)
|
|
121
|
+
|
|
122
|
+
For a bassclef adopter's first persona ("small-team CTO shipping an internal ops tool"):
|
|
123
|
+
|
|
124
|
+
1. **Goal box** — "Ship a working ops tool in 6 weeks that the team actually uses."
|
|
125
|
+
2. **See** — "Works in an open plan office; sees other engineers' screens all day; sees Slack messages piling up; sees the ops team using a spreadsheet for the current process."
|
|
126
|
+
3. **Say** — [verbatim quotes from a 45-minute interview, tagged to transcript timestamps]
|
|
127
|
+
4. **Do** — "Opens the sandbox at start of every workday; reviews yesterday's shipping metrics before the standup; deploys 3-5 times per day; writes design docs before every big feature."
|
|
128
|
+
5. **Hear** — "Team asks for X, PM asks for Y, board asks for Z; the three demands often conflict."
|
|
129
|
+
6. **Think and Feel** — inferred: "worries the team will hit rate limits mid-quarter; feels responsible for both technical and product direction; frustrated by tool sprawl."
|
|
130
|
+
7. **Pains** — "Every new tool requires an onboarding session; loses 2 days per new hire; watches other CTOs ship faster with worse code."
|
|
131
|
+
8. **Gains** — "Wants team velocity to compound; wants to spend more time on architecture and less on triage; wants tools that work on day one."
|
|
132
|
+
|
|
133
|
+
Each cell cites a transcript line or field-notes reference. The output feeds `/interview-me` Step 3 and downstream JTBD synthesis.
|
|
134
|
+
|
|
135
|
+
## Sources
|
|
136
|
+
|
|
137
|
+
1. Gray, D., Brown, S., & Macanufo, J. (2010). *Gamestorming: A Playbook for Innovators, Rulebreakers, and Changemakers.* O'Reilly Media. ISBN 9780596804176 [ref:1]
|
|
138
|
+
2. Gray, D. (2017). "Updated Empathy Map Canvas." Medium. https://medium.com/@davegray/updated-empathy-map-canvas-46df22df3c8a [ref:2]
|
|
139
|
+
3. Gibbons, S. (2018). "Empathy Mapping: The First Step in Design Thinking." Nielsen Norman Group. https://www.nngroup.com/articles/empathy-mapping/ [ref:3]
|
|
140
|
+
4. Osterwalder, A., Pigneur, Y., Bernarda, G., & Smith, A. (2014). *Value Proposition Design.* Wiley. ISBN 9781118968055 [ref:4]
|
|
141
|
+
5. XPLANE. https://xplane.com — Gray's consultancy; visual-thinking practice from which the empathy map emerged
|
|
142
|
+
|
|
143
|
+
## Related luminaries
|
|
144
|
+
|
|
145
|
+
- **Sunni Brown** — Gamestorming co-author; *The Doodle Revolution* (2014); visual-thinking practitioner and co-creator of the original empathy map
|
|
146
|
+
- **James Macanufo** — Gamestorming co-author
|
|
147
|
+
- **Alex Osterwalder** — *Business Model Generation* (2010) and *Value Proposition Design* (2014); incorporated the empathy map into the Strategyzer canvas suite
|
|
148
|
+
- **Yves Pigneur** — Osterwalder co-author, *Business Model Generation*
|
|
149
|
+
- **Sarah Gibbons / Nielsen Norman Group** — authoritative UX-research treatment of the empathy map's practical use; the "sparse map is a finding" framing
|
|
150
|
+
- **Tony Ulwick** — JTBD (Jobs-to-be-Done) framework; complementary to empathy mapping (Ulwick asks WHAT the user is trying to accomplish; Gray asks WHO the user IS while trying)
|
|
151
|
+
- **Ash Maurya** — lean-canvas author; the empathy map feeds the customer-segment and problem boxes of the lean canvas
|
|
152
|
+
|
|
153
|
+
## Substrate-as-system anchor (bassclef)
|
|
154
|
+
|
|
155
|
+
Gray's empathy map anchors bet 2026-07-07a's `/empathy-map` skill (ticket #657) and feeds `/interview-me` (ticket #653) at Step 3. The bassclef application preserves Gray's discipline (sensor-first, inference-after, cite the transcript) but adapts the collection shape from a workshop wall to a conversational skill: Claude prompts each section in Gray's clockwise order; operator answers with what they observed; Claude captures without inventing quotes; the output is a structured empathy map artifact stored under `docs/personas/<slug>-empathy-map.md`. The 2017 update's Goal-first sequence maps directly to bassclef's discipline of anchoring every artifact to a specific outcome before elaboration.
|