---
name: interview/entity-templates
description: Patterns for extracting structured entities from conversational interview answers and website content
loading: on-demand
---

# Entity Extraction Patterns

When the user gives a conversational answer, extract structured entities. These patterns show how to parse natural language into frontmatter fields and wikilinks.

## General Rules

1. **Use kebab-case for entity IDs** — lowercase, hyphens, no special characters: `alex-morgan`, `modern-museum`
2. **Always set wikilinks** between related entities as you create them
3. **Prefer the user's exact words** for names and descriptions — don't paraphrase or formalize
4. **Never wrap content in quotes** — the `content` parameter is raw markdown, not a JSON string. Do not add leading or trailing `"` characters.
4. **Don't over-extract** — if the user mentions something in passing, don't create an entity for it. Focus on the things they describe with enough detail to be useful.
5. **Confirm before creating** when the answer is ambiguous — "I'll create entries for X, Y, and Z — sound right?"

## People from Team Descriptions

**User says:** "My team is myself, Jordan who's my business partner in New York, Sam our Director of Creative Technology also in New York, Casey who handles operations from South Carolina, and Taylor who's a mid-level designer here in Seattle with me."

**Extract 5 person entities:**

```yaml
# alex-morgan.md
entity_type: person
name: Alex Morgan
role: Founder & CEO
status: current
location: Seattle
organization: "[[acme-studio]]"

# jordan-lee.md
entity_type: person
name: Jordan Lee
role: Business Partner
status: current
location: New York
organization: "[[acme-studio]]"

# sam-reyes.md
entity_type: person
name: Sam Reyes
role: Director of Creative Technology
status: current
location: New York
organization: "[[acme-studio]]"
```

**Key patterns:**
- Map informal descriptions to `role` field ("handles operations" → "Associate Operations Director" only if the user used that title; otherwise keep it informal)
- Set `status: current` for active team members
- Always link to the organization entity

## Projects from Workstream Lists

**User says:** "We're launching the first phase of our Modern Museum collections website, working with Apex Systems on their dashboard UI, and about to start a new engagement with the Civic Initiative on an AI knowledge hub."

**Extract 3 project entities + ensure client orgs exist:**

```yaml
# modern-museum-collections.md
entity_type: project
name: Modern Museum Collections Website
category: Client Work
client: "[[modern-museum]]"
status: active

# apex-systems-dashboard.md
entity_type: project
name: Apex Systems Dashboard UI
category: Client Work
client: "[[apex-systems]]"
status: active

# civic-knowledge-hub.md
entity_type: project
name: Civic AI Knowledge Hub
category: Client Work
client: "[[civic-initiative]]"
status: active
```

**Key patterns:**
- Derive entity IDs from the project name, not the client name
- Always check if the client `organization` entity exists; create it if not
- Map status language: "launching" → active, "about to start" → active, "on hold" → on-hold

## Organizations from Client Mentions

**User says:** "Our clients include Modern Museum, Apex Systems — which was co-founded by Pat Rivers and Robin Shaw — and Biomed Partners."

**Extract 3 organization entities + 2 person entities for named contacts:**

```yaml
# modern-museum.md
entity_type: organization
name: Modern Museum of Design
category: client
status: active
industry: Museums & Cultural Institutions

# apex-systems.md
entity_type: organization
name: Apex Systems
category: client
status: active
industry: AI / Enterprise Software

# pat-rivers.md
entity_type: person
name: Pat Rivers
role: Co-founder
organization: "[[apex-systems]]"
status: client
```

**Key patterns:**
- Set `category: client` for client organizations
- Only create person entities for contacts the user named specifically — don't infer unnamed contacts
- Use the `status: client` on person entities for external contacts (vs `current` for team members)

## Processes from Workflow Descriptions

**User says:** "We have our Monday team meeting, a pipeline meeting Monday with Jordan and Casey, mid-week pipeline check-in Wednesday, and resourcing meeting Friday."

**Extract 1 note (tagged `Process`) with structured body:**

```yaml
# weekly-cadence.md
entity_type: note
name: Weekly Team Cadence
tags: [Process]
owner: "[[alex-morgan]]"
```

Body:
```markdown
## Overview
Weekly rhythm of standing meetings.

## Steps
- **Monday — Team Meeting** (full team): Align priorities, discuss deadlines and presentations
- **Monday — Pipeline Meeting** ([[alex-morgan]], [[jordan-lee]], [[casey-brooks]]): Review new business pipeline, discuss follow-ups
- **Wednesday — Pipeline Check-in**: Mid-week pipeline status
- **Friday — Resourcing Meeting**: Plan next week's allocation, ensure billability
```

**Key patterns:**
- Use wikilinks to people in the note body
- Capture the cadence, not just the meetings — the pattern of how work flows
- One note can capture multiple related meetings if they form a weekly rhythm

## Website Content Extraction

When the user provides a website URL, fetch it and extract:

**From the About page:**
- Organization description → `organization` entity body
- Mission/vision statements → body content
- Year founded, team size → frontmatter fields

**From the Team page:**
- Names, titles, locations → `person` entities
- Bios → person entity body content
- Photos → skip (not stored as entity data)

**From the Portfolio/Work page:**
- Project names, descriptions → `project` entities
- Client names → `organization` entities (category: client)
- Project categories → `category` field

**From the Services page:**
- Service areas → `practice-area` entities
- Descriptions → practice-area entity body

**Important:** Website content may be outdated. Always present extracted entities as confirmation questions: "From your site, I see you've worked with [clients] on projects like [projects]. Are these current?"

## Handling Ambiguity

**When the user is vague:**
- "We work with some museums" → Don't create entities. Ask: "Which museums specifically?"

**When names are incomplete:**
- "My partner Jordan" → Create with what you have, follow up: "What's Jordan's last name and role?"

**When relationships are unclear:**
- "We're talking to a pharma company" → Don't create a deal yet. Ask: "Which company? Is this an active deal or early conversation?"

**When multiple interpretations exist:**
- "We're working on a dashboard" → Could be a project, could be Studiograph. Ask: "Is this a client project, or an internal tool?"
