person-dossier

$npx mdskill add joelhooks/joelclaw/person-dossier

Builds and updates structured person dossiers from communication history for strategy and relationship management.

  • Helps manage individuals by compiling evidence from emails, meetings, and logs for strategic decisions.
  • Integrates with Front email, Granola meetings, memory recall, and event logs to gather data.
  • Triggers when a person is mentioned in planning, follow-ups, or opportunity discussions.
  • Writes or updates a structured Markdown file in Vault/Resources with key sections like email threads and timelines.

SKILL.md

.github/skills/person-dossierView on GitHub ↗
---
name: person-dossier
displayName: Person Dossier
description: "Build and update person dossiers from communication history. Use when a person is discussed for strategy, follow-up, opportunities, relationship context, or decisions. Automatically pull evidence from Front email, Granola meetings, memory recall, and event logs; then write/update a structured dossier in Vault/Resources/."
version: 1.0.0
author: Joel Hooks
tags: [joelclaw, people, dossiers, memory, relationships]
---

# Person Dossier

Build or refresh a dossier whenever an individual is discussed.

## Trigger

Run this workflow when a person is mentioned in:

- strategy or planning conversations
- follow-up decisions
- relationship context questions
- opportunity/deal/property discussions

## Output Path

- `Vault/Resources/<Person Name> - Dossier.md`

## Required Sections

1. All Email Threads
2. Key Topics Discussed
3. Projects Mentioned
4. Properties or Deals Referenced
5. Timeline of Interactions
6. Current Status of Open Items

## Workflow

### 1. Validate runtime and auth

```bash
secrets status
secrets lease front_api_token --ttl 15m
```

If secrets service is down:

```bash
secrets serve &
```

### 2. Resolve identifiers

Collect:

- primary name
- known email(s)
- aliases/handles

Use these as query inputs for all sources.

### 3. Pull Front threads (primary)

```bash
joelclaw email inbox -q "<person name>" -n 200
joelclaw email inbox -q "from:<email-or-handle>" -n 200
```

Read each matching conversation:

```bash
joelclaw email read --id <cnv_id>
```

### 4. Pull Granola meetings

List meetings in a practical window:

```bash
granola meetings --range this_week
granola meetings --range this_month
```

For each candidate meeting ID:

```bash
granola meeting <meeting_id>
granola meeting <meeting_id> --transcript
```

### 5. Pull memory context

```bash
joelclaw recall "<person name> <company> <project>" --limit 20 --min-score 0.25
joelclaw recall "<person email or alias>" --limit 20
```

### 6. Pull event timeline context

```bash
joelclaw events --hours 720 --count 200
joelclaw events --prefix meeting --hours 720 --count 200
```

### 7. Normalize extracted data

Populate these buckets from evidence:

- email threads: subject, conversation id, participants, last activity date
- topics: recurring discussion themes
- projects: named initiatives
- properties/deals: assets, opportunities, transactions
- timeline: dated interaction entries by channel
- open items: owner, status, due date, next step

### 8. Create or update dossier markdown

If file does not exist: create from template.

If file exists: update in-place.

Update rules:

- append new timeline entries without removing older ones
- dedupe by stable key (`channel + source_id + date + summary`)
- merge open item status updates instead of creating duplicates
- keep `Verified` and `Inferred` labels on each material claim
- refresh `Last Updated` timestamp

### 9. Record evidence and confidence

Each section must indicate provenance:

- `Verified from Front thread`
- `Verified from Granola meeting`
- `Inferred from memory/event context`

Never present inferred content as verified.

### 10. Blocker handling

If blocked:

1. record exact technical error text
2. attempt one fallback source (`joelclaw events` or `joelclaw recall`)
3. produce a blocked dossier with explicit gaps
4. include exact next-run commands

No silent partials.

## Dossier Template

```markdown
# <Person Name> - Dossier

## Identity
- Name: <name>
- Emails: <email1>, <email2>
- Aliases: <alias1>, <alias2>
- Last Updated: YYYY-MM-DD

## 1. All Email Threads with <Person Name>
- Thread: <subject>
  - Conversation ID: <cnv_id>
  - Last activity: YYYY-MM-DD
  - Evidence: Verified from Front thread

## 2. Key Topics Discussed
- <topic> (Verified/Inferred)

## 3. Projects Mentioned
- <project> (Verified/Inferred)

## 4. Properties or Deals Referenced
- <item> (Verified/Inferred)

## 5. Timeline of Interactions
- YYYY-MM-DD | <channel> | <summary> | <source_id>

## 6. Current Status of Open Items
- Item: <description>
  - Owner: system owner | other person | unknown
  - Status: open | blocked | closed
  - Next step: <text>
  - Due: YYYY-MM-DD | unknown
  - Evidence: <source>

## Evidence Index
- Front conversation IDs: <list>
- Granola meeting IDs: <list>
- Memory queries: <list>
- Event windows: <list>

## Blockers
- <none or error text>
```

## Quick Build Command Set

```bash
# 1) Front discovery
joelclaw email inbox -q "<person name>" -n 200

# 2) Front thread read
joelclaw email read --id <cnv_id>

# 3) Granola context
granola meetings --range this_month
granola meeting <meeting_id> --transcript

# 4) Memory context
joelclaw recall "<person name>" --limit 20

# 5) Event timeline
joelclaw events --prefix meeting --hours 720 --count 200
```

## Quality Bar

- No fabricated facts
- Open items always include owner
- Timeline uses concrete dates whenever available
- Verified and inferred content clearly separated

More from joelhooks/joelclaw

SkillDescription
add-skillCreate new joelclaw skills with the idiomatic process — repo-canonical, symlinked, git-tracked, slogged. Triggers on 'add a skill', 'create skill', 'new skill', 'canonical skill', 'make a skill for', or any request to formalize a process or domain into a reusable skill.
adr-skillCreate and maintain Architecture Decision Records (ADRs) optimized for agentic coding workflows. Use when you need to propose, write, update, accept/reject, deprecate, or supersede an ADR; bootstrap an adr folder and index; consult existing ADRs before implementing changes; or enforce ADR conventions. This skill uses Socratic questioning to capture intent before drafting, and validates output against an agent-readiness checklist.
agent-discovery"Optimize websites, docs, and product surfaces for agent discoverability and operator UX. Use when working on agent SEO/AEO/GEO, crawl policy, markdown or JSON projections, llms.txt, sitemap.md, AGENTS.md guidance, content negotiation, accessibility for browser agents, or any request to make a site easier for pi, OpenCode, Claude Code, ChatGPT, Perplexity, or other agent harnesses to find and use."
agent-loopStart, monitor, and cancel durable multi-agent coding loops via Inngest. Use when the user wants to run autonomous coding workloads, execute a PRD with multiple stories, kick off an AFK coding session, have agents implement features from a plan, or manage running loops. Triggers on "start a coding loop", "run this PRD", "implement these stories", "go AFK and code this", "check loop status", "cancel the loop", "joelclaw loop", or any request for autonomous multi-story code execution.
agent-mail>-
agent-workloads"Compatibility alias for the canonical `workflow-rig` front door. Use when older prompts mention `agent-workloads` or when you need the legacy workload-planning guidance; for new work, load `workflow-rig` first."
clawmail>-
cli-design"Design and build agent-first CLIs with HATEOAS JSON responses, context-protecting output, and self-documenting command trees. Use when creating new CLI tools, adding commands to existing CLIs (joelclaw, slog), or reviewing CLI design for agent-friendliness. Triggers on 'build a CLI', 'add a command', 'CLI design', 'agent-friendly output', or any task involving command-line tool creation."
codex-prompting"Use this skill for any request to trigger, coordinate, or craft prompts for Codex. Use when user says 'send to codex', 'use codex', 'prompt codex', 'ask codex', 'delegate to codex', 'run in codex', or asks for a Codex-first execution handoff."
content-publish"Publish content to joelclaw.com via the Convex-first pipeline. Covers the full lifecycle: draft → review → publish → revalidate → verify. Handles secret leasing, tag conventions, content types (article, tutorial, note, essay), and verification gates. Use when: 'write article about X', 'publish article <slug>', 'draft a tutorial', 'publish this', 'push to convex', or any content publishing task."