---
name: setup-knowledge-base
description: |
  Interactive onboarding to create a structured knowledge base. Defines categories,
  scaffolds the directory structure, creates the index, and optionally imports initial content.
  Run this first before using /kb-answer or /kb-import.
---

# Knowledge Base Setup

Interactive setup that creates a structured, evidence-backed knowledge base in your project.

## When to Use

- Starting a new knowledge base from scratch
- Adding a KB to an existing project

## Step 1: Discover Purpose

Ask the user (one question at a time, use AskUserQuestion):

1. **What is this KB for?** (e.g., product documentation, security/compliance, company knowledge, sales enablement, internal policies)
2. **Who will query it?** (e.g., you personally, your team, AI agents answering questions)
3. **What categories make sense?** Suggest 3-5 based on the domain, let the user adjust.

Example category suggestions by domain:
- **Product docs**: technical, integrations, deployment, security, faq
- **Company knowledge**: general, policies, processes, teams, faq
- **Sales enablement**: product, competitive, customer-success, pricing, faq
- **Security/compliance**: security, compliance, technical, general, faq

## Step 2: Confirm Plan

Before creating anything, present the plan to the user:

```
I'll create this structure in your project:

kb/
  .kb-config.yaml
  index.md
  scopes/
    _default.yaml
    README.md
  {category1}/
  {category2}/
  {category3}/
scripts/
  kb-index.py
  kb-verify.py
  kb-validate.py
  kb-search.py
CLAUDE.md (or append to existing)

Ready to proceed?
```

Wait for user confirmation.

## Step 3: Scaffold the KB

Read the template files from this plugin and adapt them for the user's project:

1. **Read** `templates/kb/.kb-config.yaml` from this plugin. Create `kb/.kb-config.yaml` in the user's project, replacing the placeholder categories with the ones chosen in Step 1. Replace `{{today}}` with today's date.

2. **Read** `templates/kb/index.md` from this plugin. Create `kb/index.md`, adding seed keywords for each chosen category. For example, if the user chose "security" and "technical", add initial keyword entries:

   ```
   | encryption, certificates, access | security/ |
   | API, architecture, deployment | technical/ |
   ```

3. **Read** `templates/kb/scopes/_default.yaml` from this plugin. Copy to `kb/scopes/_default.yaml`.

4. **Read** `templates/kb/scopes/README.md` from this plugin. Copy to `kb/scopes/README.md`.

5. Create empty directories for each chosen category: `kb/{category1}/`, `kb/{category2}/`, etc.

6. **Read** `scripts/kb-index.py` from this plugin. Copy to `scripts/kb-index.py` in the user's project.

7. **Read** `scripts/kb-verify.py` from this plugin. Copy to `scripts/kb-verify.py` in the user's project.

8. **Read** `scripts/kb-validate.py` from this plugin. Copy to `scripts/kb-validate.py` in the user's project.

9. **Read** `scripts/kb-search.py` from this plugin. Copy to `scripts/kb-search.py` in the user's project.

## Step 4: Create Project CLAUDE.md

**Read** `templates/CLAUDE.md` from this plugin. Create (or append to existing) `CLAUDE.md` in the user's project root. Replace `{{category}}` placeholders with the actual categories chosen in Step 1.

## Step 5: Populate from Sources

The KB structure is ready, but empty. Ask the user:

**"Do you have existing knowledge sources you'd like to import? (Notion pages, Slack channels, Confluence, local files)"**

- If **yes**: run `/kb-refresh` to populate the KB from those sources. It handles source discovery, scraping, and entry creation.
- If **no** or **skip**: create one example entry in the first category to demonstrate the format. **Read** `templates/kb/example/sample-entry.md` from this plugin for the format, but write an entry relevant to the user's domain rather than copying the sample.

## Step 6: Verify

Run the index script to confirm everything is wired up:

```bash
python3 scripts/kb-index.py
```

Regenerate the "All Files by Category" section of `kb/index.md` from the current entries:

```bash
python3 scripts/kb-index.py --write
```

Validate KB health (frontmatter, categories, related links):

```bash
python3 scripts/kb-validate.py
```

If `kb-index.py` lists the entries and `kb-validate.py` reports "All entries valid", setup is complete.

## Step 7: Summary

Tell the user:
- What was created and where
- How to add new entries (create .md files with YAML frontmatter in the right `kb/{category}/` folder; nested sub-folders like `kb/security/access/` are supported)
- How to query the KB (`/kb-answer`)
- How to import documents or bulk-import a directory (`/kb-import`)
- How to add more sources or refresh existing ones (`/kb-refresh`)
- How to list all entries (`python3 scripts/kb-index.py`)
- How to search (`python3 scripts/kb-search.py "keyword"`)
