name: onboard
description: One-time researcher onboarding interview that compiles a taste/ corpus (SOUL.md, STYLE.md, METHODOLOGY.md, DISMISSALS.md, MEMORY.md, INDEX.md) capturing the researcher's intellectual taste, beliefs, and values. Auto-injects INDEX.md into every future session via SessionStart. Triggers on first install ("no taste corpus found"), explicit /onboard, /onboard --deep for Tier 2 voice laddering, or /onboard --redo / /onboard --section <name> to refresh.
/onboard — researcher taste interview
The marquee onboarding skill. Produces a durable, agent-injectable record of who the researcher is, what they believe, how they judge work, and what dead ends they refuse to revisit.
Sister to AGENTS.md. AGENTS.md says what to do in this repo. The
taste/ corpus says who this researcher is — installed per-repo
today, with cross-repo portability planned (symlink
~/.rockie/taste/ → <repo>/.rockie/taste/ is the recommended
manual interim).
When to run
- First-run — SessionStart hook flags absence of
.rockie/taste/INDEX.md; agent suggests/onboard. - Explicit invocation — user types
/onboard. - Refresh —
/onboard --redorewrites everything;/onboard --section <soul|style|methodology|dismissals>refreshes one file. - Deep mode —
/onboard --deepruns Tier 2 (20–30 min, voice-first laddering). Otherwise Tier 1 (5–7 questions, ~5 min).
What the skill does
- Loads
prompts/interviewer-tier1.md(orinterviewer-tier2.mdif--deep) into the active agent's system context. - The agent runs the interview turn-by-turn following the prompt's
phase-gated state machine. The user answers via text or
/voice tap. - As the interview progresses, the agent writes intermediate state
to
.rockie/taste/.draft.jsonafter every turn (so the session can be resumed if interrupted). - When coverage reaches the end-condition, the agent emits a summary
round, asks the user to confirm or correct, then runs
runtime/compile.pyto produce the six markdown files in.rockie/taste/. - The agent opens
INDEX.mdin the user's editor for final review, then commits the corpus.
Hard rules
- One question per turn. The interviewer prompt enforces this with a question-mark self-check; the agent must respect it.
- Never press a dodged question. Mark SOFT in the scratchpad and move on. Pressing produces confabulation, not truth.
- Never silently rewrite an existing taste file.
/onboard --redois explicit; the agent cannot decide to overwrite SOUL.md unprompted. (MEMORY.md and DISMISSALS.md are append-only and may be written to by Stop-hook flow, not this skill.) - Never invent answers. If the user is short on a topic, the
generated file marks the topic as
[SOFT — needs deepening]rather than embellishing. - Voice opt-in only. Tier 1 is text-default; Tier 2 prompts the
user to
/voice tapfor each answer if they want, but never requires it.
Outputs
.rockie/taste/
├── INDEX.md # auto-injected every session via SessionStart
├── SOUL.md # identity, worldview, hot takes
├── STYLE.md # written + spoken voice
├── METHODOLOGY.md # rigor standards, success criteria
├── DISMISSALS.md # append-only "never again" log
├── MEMORY.md # append-only session-experience log
└── .draft.json # interview transcript (gitignored)
The corpus is gitignored by default (personal — like .env). Users
can opt to commit it by removing the entry from
.rockie/taste/.gitignore. (For shared-team taste, see future
roadmap entry on team-level taste compositing.)
Agent invocation protocol
When this skill fires, the agent should:
- Resolve which mode: Tier 1 (default), Tier 2 (
--deep), refresh (--redoor--section). - Read
prompts/interviewer-tier1.md(or tier2) — this is the active system prompt for the duration of the interview. - Begin Turn 1 by greeting the user briefly and asking the first question. Do NOT explain the schema; the prompt is structured so the user discovers what they're contributing turn by turn.
- After each user answer, regenerate the full scratchpad (do not append to it) following the MIRROR structure in the prompt.
- Persist
.draft.jsonafter every answer. Schema:{ "started_at": "...", "tier": 1, "topics": { "identity": {"q": "...", "a": "...", "soft": false, "ladder": []}, ... }, "coverage": {"identity": 2, "soul": 1, ...} } - End-condition: all topics ≥ 1 AND (all topics ≥ 2 OR seven questions asked). At end-condition, summarize captured signal per file, ask user to confirm or correct, then compile.
- Run
python3 .claude/skills/onboard/runtime/compile.py .rockie/taste/.draft.json— this writes the six markdown files from templates and the draft JSON. - Open
.rockie/taste/INDEX.mdfor the user to review and edit.
Failure modes
- User goes off-topic for 3+ turns — agent bridges back per the prompt's anti-drift rule.
- User signals exhaustion ("can we wrap up?") — agent honors;
emits compile from current coverage; marks low-coverage files
[SOFT — needs deepening]. - Voice transcript is empty / garbled — agent asks user to type this answer instead.
- Compile script errors — agent reports the error, retains
.draft.json, and suggests re-running/onboard(the existing draft is loaded from disk and the interview continues from where it stopped). - Partial draft (interview interrupted before 3 topics covered)
—
compile.pyexits 3 with a "refusing to compile" message. Agent re-runs/onboardto continue the interview rather than shipping a placeholder corpus.
Re-runs
/onboard --redo archives the existing corpus to
.rockie/taste/.archive/<timestamp>/ and starts fresh. Identity
shifts deserve audit trail.
/onboard --section <name> runs only the questions for that section,
re-compiles only that file, archives the prior version.