一键导入
distilling
Analyze a user canvas and distill structured fears, steering targets, and synthesis features into a cognition sidecar file.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Analyze a user canvas and distill structured fears, steering targets, and synthesis features into a cognition sidecar file.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Capture point-in-time MER (MiDi Experience Record) for a wallet — data state, visual screenshot, perception context, and decision metadata.
Compare user expectations (UTCs) with code reality to identify gaps. Use when you need to understand discrepancies between what users expect and what code actually does.
Batch scan canvases for GAP sections, deduplicate, route to correct repos, draft issue bodies, and file confirmed issues.
Parallel multi-user processing using Claude Code native teams. Leader spawns workers per user, each runs /ingest-dm, leader aggregates for cross-canvas patterns.
Validate gap hypotheses by manually simulating features for individual users and measuring commitment, not satisfaction.
Automated end-to-end feedback pipeline that pulls new Supabase entries, enriches, classifies, routes to canvases, and generates a synthesis report.
| name | distilling |
| description | Analyze a user canvas and distill structured fears, steering targets, and synthesis features into a cognition sidecar file. |
| allowed-tools | [] |
Analyze a single user's canvas state and produce structured cognition output. This skill runs as a prompt-only subagent — it receives all data in its prompt and returns YAML text. The parent orchestrator (/think or /follow-up auto-refresh) handles filesystem operations.
The parent orchestrator provides these sections in the prompt:
| Input | Description |
|---|---|
| Canvas body | Full markdown of grimoires/keeper/canvas/{user}.md |
| Score API snapshot | JSON from score-api-query.sh profile <wallet> --format snapshot (or null if unavailable) |
| Growth state | YAML from grimoires/keeper/growth/{user}.yaml (or null if new user) |
| Provenance records | Filtered JSONL entries for this user from grimoires/mining/provenance/index.jsonl |
| Config | observer.cognition.* values (fear_types, max_fears_per_user, stale_after_cycles) |
Return a single YAML document matching the cognition sidecar schema (SDD §2). The parent validates this output against required keys and types before writing to disk.
Required top-level keys: schema_version, user, fears, steering_targets, synthesis_features
The parent orchestrator injects these computed fields after validation (do NOT include them in output):
generated_atdistilled_at_cycle_indexinput_anchorsstale_after_cyclesExtract all hypotheses from the canvas. Each has:
id (e.g., H1, H2)text (hypothesis statement)confidence (High, Medium, Low)evidence_quotes (list of quotes with optional provenance hashes)gaps (associated gap sections)has_quotes = len(provenance_records where canvas_target == user) > 0
is_bootstrap = NOT has_quotes
Generate 1-3 exploratory fears derived from:
Every bootstrap fear MUST have:
class: exploratoryevidence_plan describing what to ask/observe to obtain first evidencebacking_quote_hash: nullBootstrap output uses stale_after_cycles: 1 (parent sets this).
For each hypothesis with confidence < High:
Gate check: Does this hypothesis have at least one quote with a verified provenance hash?
YES → Generate evidence_backed fear:
class: evidence_backed
type: <classified_type>
text: "what if <invalidation scenario>?"
backing_hypothesis: <hypothesis.id>
backing_quote_hash: <strongest evidence quote hash>
invalidation_signal: <observable behavior that would confirm or kill this fear>
confidence_impact: "would <validate|kill> <hypothesis.id>"
priority: <from confidence: Low=1, Medium=2>
NO → Downgrade to exploratory fear:
class: exploratory
type: <classified_type>
text: "what if <invalidation scenario>?"
backing_hypothesis: <hypothesis.id>
backing_quote_hash: null
evidence_plan: "obtain direct quote from user about <hypothesis.text> — ask in next follow-up"
invalidation_signal: <observable behavior>
confidence_impact: "would <validate|kill> <hypothesis.id>"
priority: <from confidence>
For each gap with status != Resolved:
evidence_backed fearexploratory fearIf growth state shows ineffective patterns (effectiveness < 20):
exploratory fear about engagement approachengagement or irrelevanceIf score_snapshot shows rank <= 10 AND no active progression hypothesis:
exploratory fear about progression ceilingprogressionfears = sort_by_priority(fears)[:config.max_fears_per_user]
For each fear, generate a steering target:
steering_targets:
- fear_id: <fear.id>
approach: "<how to steer conversation toward this fear>"
pattern_preference: "<best matching pattern name>" # E9 L4: from effectiveness data
The approach should be a concrete conversational strategy, not a template. Reference specific user data (scores, quotes, badges, rank) when available.
Pattern preference (E9 L4): If pattern effectiveness data is provided in the prompt context, set pattern_preference to the name of the most effective question pattern that fits this steering target's approach. If no effectiveness data is available, omit the pattern_preference field entirely (backward-compatible).
synthesis_features:
lifecycle_state: <from canvas frontmatter or inferred>
dominant_fear_type: <mode of fear types, or null if no fears>
hypothesis_ids: [<H_IDs from canvas>]
hypothesis_confidences: {<H_ID>: <confidence>, ...}
gap_types: [<unique gap types from canvas>]
behavior_tags: [<extracted from canvas + growth state>]
score_summary: {og: <int>, nft: <int>, onchain: <int>, rank: <int>}
Safe defaults: If no fears were generated, set dominant_fear_type: null. If no hypotheses exist, set empty lists/objects.
FUNCTION classify_fear_type(hypothesis, growth_state):
IF hypothesis.cycles_without_evidence >= 3 AND growth has silence outcomes:
RETURN "engagement"
IF hypothesis relates to fixed bug AND no subsequent engagement:
RETURN "irrelevance"
IF hypothesis references data accuracy or wrong scores:
RETURN "trust_erosion"
IF hypothesis references "what's the plan" or evaluation language:
RETURN "pmf"
IF hypothesis references negative labeling of system:
RETURN "identity"
IF user rank is top-10 AND hypothesis relates to goals:
RETURN "progression"
IF hypothesis references confusion about scoring:
RETURN "complexity"
IF hypothesis references feature we won't build:
RETURN "constraint_mismatch"
RETURN "engagement" # default
The parent orchestrator validates output against these rules:
| Rule | Condition |
|---|---|
evidence_backed fears | backing_quote_hash MUST be non-null |
exploratory fears | evidence_plan MUST be non-null, backing_quote_hash MUST be null |
| All fears | invalidation_signal and confidence_impact MUST be non-null |
constraint_mismatch type | non_goal_constraint and salvage_question MUST be non-null |
| Established canvases | >= 2 evidence_backed fears (if sufficient quotes available) |
| Bootstrap canvases | >= 1 exploratory fear |
| Fear IDs | Format FEAR-<user>-<N>, sequential starting at 1 |
constraint_mismatch Additional FieldsWhen type: constraint_mismatch, include:
non_goal_constraint: "<what we won't build>"
salvage_question: "<what alternative value could still work>"
exit_signal: "<what indicates churn>"
schema_version: 1
user: xabbu
fears:
- id: FEAR-xabbu-1
class: evidence_backed
type: irrelevance
text: "xabbu reports issues as a completionist, not because they matter to him"
backing_hypothesis: H1_2
backing_quote_hash: "sha256:abc123..."
invalidation_signal: "stops checking scores for 2+ weeks"
confidence_impact: "would kill H1_2 if confirmed"
priority: 1
- id: FEAR-xabbu-2
class: evidence_backed
type: trust_erosion
text: "the badge system feels arbitrary — pioneer badges earned but unclear value"
backing_hypothesis: H4
backing_quote_hash: "sha256:def456..."
invalidation_signal: "mentions badges positively without prompting"
confidence_impact: "would validate H4 if disconfirmed"
priority: 2
- id: FEAR-xabbu-3
class: exploratory
type: progression
text: "rank #1 means no progression left — the game is over"
backing_hypothesis: null
backing_quote_hash: null
evidence_plan: "ask what their goals are now that ranking is maxed — look for engagement signals beyond leaderboard"
invalidation_signal: "describes new goals beyond ranking"
confidence_impact: "new hypothesis if confirmed"
priority: 3
steering_targets:
- fear_id: FEAR-xabbu-1
approach: "probe whether checking scores is a habit or intentional — ask about last time they checked without a notification"
pattern_preference: "verify_action"
- fear_id: FEAR-xabbu-2
approach: "reference a specific badge they earned and ask what they thought it meant"
pattern_preference: "probe_gap"
- fear_id: FEAR-xabbu-3
approach: "ask what happens next now that they're #1 — does the game change?"
pattern_preference: "explore_motivation"
synthesis_features:
lifecycle_state: power_user
dominant_fear_type: irrelevance
hypothesis_ids: [H1_2, H3, H4]
hypothesis_confidences: {H1_2: high, H3: medium, H4: low}
gap_types: [feature, ux]
behavior_tags: [completionist, data_auditor]
score_summary: {og: 98, nft: 99, onchain: 99, rank: 1}