skills/distilling/SKILL.md
Analyze a user canvas and distill structured fears, steering targets, and synthesis features into a cognition sidecar file.
npx skillsauth add 0xHoneyJar/construct-beehive distillingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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/observer/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/observer/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}
data-ai
Cognition orchestrator — analyze canvases, distill fears via /distill subagent, run gap analysis, optional cross-user synthesis.
development
Golden path /speak — generate RLM-isolated follow-ups with chronicle temporal context injection.
testing
# /snapshot — MiDi Experience Record (MER) Capture Capture a point-in-time MER for a wallet. Produces a 4-layer snapshot: data state, visual screenshot, user perception, and decision context. ## Usage ``` /snapshot <wallet-or-alias> /snapshot xabbu --trigger feedback /snapshot xabbu --data-only /snapshot --cohort /snapshot --cohort --diff MER-2026-001 ``` ## Arguments | Argument | Description | Required | |----------|-------------|----------| | `wallet-or-alias` | Wallet address or alias fr
development
Golden path /shape — consolidate journey patterns across canvases and file gap issues.