--- name: interview-collect description: Conducts focused interview sessions to collect and update knowledge in the personal knowledge base. activation: manual --- # interview-collect Conducts focused interview sessions to collect and update knowledge in the personal knowledge base. Each session targets one topic area and asks up to 10 questions, writing collected data as YAML entity files. ## Activation Activated by user request. Example triggers: - "interview me" - "collect knowledge" - "let's do an interview session" - "fill gaps in my profile" ## Inputs - **Person ID** (optional): Which profile to interview for. Defaults to the primary profile if only one exists. - **Topic area** (optional): A specific topic to focus on (e.g., a role, project, skill cluster). If not provided, the skill uses gap detection to choose the most valuable topic. ## Workflow ### 1. Load current state - Read the target person profile from `kb/profiles/.yaml` - Read `kb/graph-index.yaml` to understand existing entities and relationships - Read related entity files as needed for context ### 2. Detect gaps - Use gap detection logic (`src/interview/gap-detection.ts`) to identify missing or incomplete attributes in the profile - Prioritize gaps by importance: required fields first, then optional fields that improve completeness - If the user specified a topic, scope gap detection to that topic area ### 3. Select session topic - Choose ONE topic area for this session (e.g., a single role, a single project, a single skill cluster) - Inform the user which topic area the session will cover and why ### 4. Conduct interview - Ask focused questions one at a time, covering the selected topic area - Maximum 10 questions per session — stop after 10 regardless of remaining gaps - Adapt follow-up questions based on previous answers - Accept "skip" or "I don't know" as valid responses — move to the next question ### 5. Detect conflicts - Before persisting, use conflict detection logic (`src/interview/conflict-detection.ts`) to compare collected answers against existing data - If conflicts are found: present both the existing value and the new value, ask the user which to keep - Do not overwrite existing data without explicit user confirmation ### 6. Persist collected data - Write new or updated entity files to the appropriate `kb/` subdirectory - Use kebab-case file naming: `.yaml` - Validate entities against schema before writing - Update `kb/graph-index.yaml` with any new entities or relationships ### 7. Session summary - Present a summary of what was collected and persisted - List any remaining gaps that could be addressed in a future session - Suggest the next topic area for a follow-up session ## Output - New or updated YAML entity files in `kb/` - Updated `kb/graph-index.yaml` - Session summary with next-steps suggestion ## Shared Modules This skill depends on the following shared validation and utility modules: - `src/schemas/validate.ts` — Entity validation (validate before writing) - `src/schemas/types.ts` — TypeScript type definitions for all entity types - `src/io/yaml-utils.ts` — YAML serialization/deserialization - `src/io/entity-files.ts` — Entity file read/write management - `src/graph/index-manager.ts` — Graph index read/write and rebuild ## Rules and Constraints 1. **One topic per session** — do not mix unrelated topic areas in a single session 2. **Maximum 10 questions** — end the session after 10 questions even if gaps remain 3. **No fabrication** — only persist information explicitly provided by the user 4. **Conflict resolution required** — never silently overwrite existing data 5. **Schema validation** — validate all entities before writing to disk 6. **Kebab-case naming** — all entity file names use kebab-case 7. **Graph index sync** — update graph-index.yaml after every entity change 8. **Graceful interruption** — if the user stops early, persist whatever was collected so far