# Onboard

> Interactive onboarding — sets up your first project, learns who you are, generates _core/identity.md profile, creates your first daily note, then loads vault context. For returning users, skips setup and loads context directly.

- Skill: `kv0906/onboard` (Agent Skill)
- Install (CLI): `npx skillmds@latest add kv0906/onboard`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kv0906/onboard/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kv0906 (https://skillmd.com/u/kv0906)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kv0906/onboard

---


# /onboard — Interactive Onboarding & Context Loading

Set up your first project, run an interactive interview, generate a personalized `_core/identity.md`, create your first daily note, then load vault context. Returning users skip straight to context loading.

## Usage

```
/onboard          # First time: project setup → interview → profile → daily → context. Returning: context only.
/onboard --reset  # Re-run interview even if profile exists (skips project setup if already configured)
```

## Flow

```
/onboard
  ├── _core/identity.md populated + config has real projects + no --reset?
  │   → Returning user → Load context → "Welcome back"
  │
  └── First time (no profile OR default projects OR --reset)?
       │
       ├── Phase 1: Welcome message
       ├── Phase 2: Project Setup (if config still has default project-a)
       │   ├── Read config.yaml
       │   ├── Detect default project-a/project-b
       │   ├── AskUserQuestion: project name
       │   ├── Edit config.yaml (replace project-a, remove project-b)
       │   ├── Create dirs: docs/{id}/, decisions/{id}/, blockers/{id}/
       │   └── Create 01-index/{id}.md from template
       │
       ├── Phase 3: Personal Interview (3 rounds, 7 questions)
       │   └── Generate _core/identity.md
       │
       ├── Phase 4: First Daily Note
       │   └── Create daily/{today}.md with welcome content
       │
       ├── Phase 5: Load Context
       │
       └── Phase 6: Handoff with "what to do next"
```

## Phase 1: Detect & Welcome

Check if `_core/identity.md` has been populated (not just the default template):

```
Read: _core/identity.md
```

Also read `_core/config.yaml` to check if projects are still defaults:

```
Read: _core/config.yaml
```

**Detection logic:**
- **Returning user**: `_core/identity.md` is populated (has a real role, not placeholder brackets) AND config does NOT contain `id: project-a` AND no `--reset` flag → Skip to Phase 5 (Load Context). Greet with:
  > Welcome back! Loading your vault context...
- **First time or --reset**: Continue to Phase 2.

Display welcome message (for new users):

> **Welcome to PM-Kit!**
>
> I'm your AI-augmented knowledge partner for technical PM and engineering work. Let me get you set up — this takes about 3 minutes.
>
> We'll do three things:
> 1. Set up your first project
> 2. Learn how you work (7 quick questions)
> 3. Load your vault context
>
> Let's get started.

Create session tasks for progress tracking:

```
Task 1: "Set up first project" (activeForm: "Setting up first project...")
Task 2: "Complete onboarding interview" (activeForm: "Running onboarding interview...", blockedBy: Task 1)
Task 3: "Generate personal profile" (activeForm: "Generating personal profile...", blockedBy: Task 2)
Task 4: "Create first daily note" (activeForm: "Creating first daily note...", blockedBy: Task 3)
Task 5: "Load vault context" (activeForm: "Loading vault context...", blockedBy: Task 4)
```

## Phase 2: Project Setup

Mark Task 1 as in_progress.

**Skip condition:** If config.yaml does NOT contain `id: project-a`, projects are already configured. Mark Task 1 as completed and skip to Phase 3.

If config still has the default `project-a`, ask the user to name their project:

### AskUserQuestion

| # | Header | Question | Options | multiSelect |
|---|--------|----------|---------|-------------|
| 1 | Project | "What's your main project called? (This becomes your folder name — lowercase, hyphens ok)" | "my-product": "A product you're building" / "my-team": "Team-level tracking" / "my-company": "Company-wide knowledge" | false |

The user can pick a preset or type a custom name via "Other".

### After receiving the answer

1. **Derive project ID**: Use the answer directly as the ID (already lowercase with hyphens). If the user typed a display name with spaces/caps, slugify it (lowercase, replace spaces with hyphens, remove special characters).

2. **Derive display name**: Capitalize the ID (e.g., `my-product` → `My Product`, `acme-app` → `Acme App`).

3. **Edit config.yaml**: Use the `Edit` tool to:
   - Replace `id: project-a` with `id: {project-id}`
   - Replace `name: Project A` with `name: {Display Name}`
   - Replace `description: Your first project` with `description: {Display Name} workspace`
   - Remove the entire `project-b` block (the 4 lines: `- id: project-b`, `name: Project B`, `description: Your second project`, `active: true`)

4. **Create project directories**:
   ```
   Write empty .gitkeep files to:
   - docs/{project-id}/.gitkeep
   - decisions/{project-id}/.gitkeep
   - blockers/{project-id}/.gitkeep
   ```

5. **Create project index**: Write `01-index/{project-id}.md`:

   ```markdown
   ---
   type: index
   project: {project-id}
   status: active
   ---

   # {Display Name}

   > {Display Name} workspace

   ---

   ## Open Blockers

   *No open blockers*

   ---

   ## Active Docs

   *No active docs*

   ---

   ## Recent Dailies (7 days)

   *No dailies yet*

   ---

   ## Recent Decisions (30 days)

   *No decisions yet*

   ---

   ## Manual Notes

   %% Add your own notes below — this section is preserved during updates %%
   ```

Mark Task 1 as completed.

## Phase 3: Interview (3 Rounds)

Mark Task 2 as in_progress.

**Skip condition for --reset**: If `--reset` flag is set but projects are already configured (no `project-a` in config), skip Phase 2 but still run the interview.

Use `AskUserQuestion` for each round. All 3 rounds use a single AskUserQuestion call each (multiple questions per call).

### Round 1 — Who Are You

Ask these 2 questions in a single AskUserQuestion call:

| # | Header | Question | Options | multiSelect |
|---|--------|----------|---------|-------------|
| 1 | Role | "What's your primary role?" | Product Manager: "Roadmaps, specs, stakeholder alignment" / Engineering Lead: "Architecture, team velocity, technical decisions" / Founder-Operator: "Wearing all hats — product, eng, strategy" / Researcher: "Deep exploration, synthesis, knowledge work" | false |
| 2 | AI Experience | "What's your experience with AI-assisted workflows?" | New to this: "First time using AI for structured work" / Getting started: "Tried a few tools, learning the ropes" / Experienced: "Regular AI user, ready for advanced workflows" | false |

### Round 2 — How You Work

Ask these 3 questions in a single AskUserQuestion call:

| # | Header | Question | Options | multiSelect |
|---|--------|----------|---------|-------------|
| 3 | Communication | "How do you prefer feedback and communication?" | Direct: "Cut to the chase, no fluff" / Collaborative: "Think together, build on ideas" / Detailed: "Thorough explanations, show your work" | false |
| 4 | Planning | "How do you prefer to plan?" | Detailed plans: "Upfront structure, clear milestones" / Flexible: "Rough direction, adapt as we go" / Minimal: "Just start building, plan emerges" | false |
| 5 | Energy | "When do you do your best focused work?" | Morning: "Peak focus before noon" / Afternoon: "Hit my stride after lunch" / Evening: "Night owl, late-day clarity" / Flexible: "Varies day to day" | false |

### Round 3 — What Drives You

Ask these 2 questions in a single AskUserQuestion call:

| # | Header | Question | Options | multiSelect |
|---|--------|----------|---------|-------------|
| 6 | Focus | "What matters most in your work right now?" | Shipping fast: "Velocity and momentum above all" / Quality depth: "Doing fewer things really well" / Clarity: "Understanding before building" / Alignment: "Getting everyone on the same page" | true |
| 7 | Coaching | "How should I challenge you?" | Gentle nudges: "Light reminders, supportive tone" / Moderate push: "Flag issues directly, suggest alternatives" / Intense coach: "Call out everything, hold me accountable" | false |

After all 3 rounds complete, mark Task 2 as completed.

## Phase 4: Generate Profile

Mark Task 3 as in_progress.

Map answers to `_core/identity.md`. Write to the bootloader directory.

### Answer Mapping

**Work Hours** (derived from Energy answer):
- Morning → "7am - 3pm"
- Afternoon → "10am - 6pm"
- Evening → "1pm - 9pm"
- Flexible → "Flexible"

**Scope Creep Alerts** (derived from Coaching answer):
- Gentle nudges → "Gentle reminders"
- Moderate push → "Flag when noticed"
- Intense coach → "Call out aggressively"

**Working Philosophy** (generate a 1-2 sentence statement based on role + focus areas):
Combine the role and selected focus areas into a concise personal statement. Examples:
- PM + Shipping fast + Clarity → "Ship with intention — move fast but make sure every feature tells a clear story."
- Engineering Lead + Quality depth → "Build it right the first time — depth over breadth, craft over speed."
- Founder-Operator + Shipping fast + Alignment → "Move fast together — velocity means nothing if the team isn't aligned."
- Researcher + Clarity + Quality depth → "Understand deeply, document clearly — knowledge compounds when it's well-structured."

Write the file using `Write` tool to `_core/identity.md`:

```markdown
# Personal Profile

> Generated by `/onboard` on {today's date}. Edit anytime — tracked in your vault.

## Identity

- **Role**: {answer 1}
- **AI Experience**: {answer 2}
- **Onboarded**: {today's date YYYY-MM-DD}

## Working Style

- **Communication**: {answer 3}
- **Planning**: {answer 4}

## Energy & Schedule

- **Best Focus Time**: {answer 5}
- **Timezone**: America/New_York
- **Work Hours**: {derived from answer 5}

## Current Priorities

What matters most right now:
{for each selected focus area from answer 6, write as bullet with description}

## Coaching Settings

- **Challenge Level**: {answer 7}
- **Scope Creep Alerts**: {derived from answer 7}

## Working Philosophy

> {generated statement}

## Notes for Claude

[Add custom instructions here — this section is yours to edit freely]

---

*Regenerate with `/onboard --reset`*
```

Mark Task 3 as completed.

## Phase 5: First Daily Note

Mark Task 4 as in_progress.

Create today's daily note at `daily/{YYYY-MM-DD}.md` with a welcome entry under the user's project:

```markdown
---
type: daily
status: active
date: {YYYY-MM-DD}
tags: []
---

# {YYYY-MM-DD}

## {Project Display Name}

### Shipped
- Set up PM-Kit vault

### In Progress
*None*

### Blocked
*None*

### Notes

Welcome to PM-Kit! Your vault is ready. Try `/daily {project-id}: shipped X, wip Y` tomorrow.

---

## Tomorrow

- Start using `/daily` for standups
```

**Skip condition:** If `daily/{today}.md` already exists, do not overwrite it.

Mark Task 4 as completed.

## Phase 6: Load Context

Mark Task 5 as in_progress (or create it if this is a returning user without tasks).

Load vault context in this order:

### 1. Core Config (Always First)
```
_core/config.yaml      → Projects, paths, note types, keywords
_core/PROCESSING.md    → I-P-O flows for all skills
_core/MANIFESTO.md     → Philosophy and principles
```

### 2. Vault Context
```
CLAUDE.md              → Vault overview, skills, agents, conventions
_core/identity.md      → Personal profile (just generated or existing)
```

### 3. Project Indexes
```
01-index/{project}.md  → MOC for each active project
```

### 4. Current State
```
daily/{today}.md       → Today's standup (if exists)
daily/{yesterday}.md   → Yesterday's context
```

### 5. Active Blockers
```
blockers/**/status: open  → All open blockers across projects
```

Smart loading rules:
- Only load indexes for projects marked `active: true` in config.yaml
- Read today's and yesterday's dailies for current context
- Scan open blockers to understand current obstacles

Mark Task 5 as completed.

## Phase 7: Handoff

### New Users

Personalize the ready message based on their profile:

> **You're all set, {role}!**
>
> Your profile is saved to `_core/identity.md`. Here's what I set up:
> - Project: **{project display name}** (`{project-id}/`)
> - Config: {n} active projects
> - Index: `01-index/{project-id}.md`
> - Today: `daily/{today}.md` (your first entry)
>
> Based on your preferences, I'll keep communication **{communication style}** and challenge you at **{coaching level}** intensity.
>
> A few commands to try:
> - `/daily {project-id}: shipped X, wip Y` — Write your standup
> - `/ask` — Quick vault lookup
> - `/progress {project-id}` — Project status
> - `/push` — Save changes to git
>
> What would you like to work on?

### Returning Users

> **Welcome back!**
>
> Context loaded:
> - Config: {n} active projects
> - Indexes: {n} project MOCs
> - Today: {summary or "No standup yet"}
> - Blockers: {n} open across projects
> - Updates: {version status from API check, non-fatal — e.g. "Up to date (v2026.02.14)" or "Update available: vX → vY"}
>
> What would you like to work on?

