Agent skill
person-dossier
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/.
Install this agent skill to your Project
npx add-skill https://github.com/joelhooks/joelclaw/tree/main/skills/person-dossier
SKILL.md
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
- All Email Threads
- Key Topics Discussed
- Projects Mentioned
- Properties or Deals Referenced
- Timeline of Interactions
- Current Status of Open Items
Workflow
1. Validate runtime and auth
secrets status
secrets lease front_api_token --ttl 15m
If secrets service is down:
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)
joelclaw email inbox -q "<person name>" -n 200
joelclaw email inbox -q "from:<email-or-handle>" -n 200
Read each matching conversation:
joelclaw email read --id <cnv_id>
4. Pull Granola meetings
List meetings in a practical window:
granola meetings --range this_week
granola meetings --range this_month
For each candidate meeting ID:
granola meeting <meeting_id>
granola meeting <meeting_id> --transcript
5. Pull memory context
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
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
VerifiedandInferredlabels on each material claim - refresh
Last Updatedtimestamp
9. Record evidence and confidence
Each section must indicate provenance:
Verified from Front threadVerified from Granola meetingInferred from memory/event context
Never present inferred content as verified.
10. Blocker handling
If blocked:
- record exact technical error text
- attempt one fallback source (
joelclaw eventsorjoelclaw recall) - produce a blocked dossier with explicit gaps
- include exact next-run commands
No silent partials.
Dossier Template
# <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
# 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
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
skill-review
Audit and maintain the joelclaw skill inventory. Use when checking skill health, fixing broken symlinks, finding stale skills, or running the skill garden. Triggers: 'skill audit', 'check skills', 'stale skills', 'skill health', 'skill garden', 'broken skill', 'skill review', 'fix skills', 'garden skills', or any task involving skill inventory maintenance.
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.
daily-summary
Generate a daily system activity summary across all joelclaw subsystems. Triggers on 'daily summary', 'what happened today', 'system report', 'today's tally', 'activity summary', 'what did we do', 'daily report'.
inngest-durable-functions
Create and configure Inngest durable functions. Covers triggers (events, cron, invoke), step execution and memoization, idempotency, cancellation, error handling, retries, logging, and observability.
recall
Fan-out search across all memory sources when context is unclear or vaguely referenced. Triggers on: 'from earlier', 'remember when', 'what we discussed', 'that thing with', 'the conversation about', 'did we ever', 'what happened with', 'you mentioned', 'we talked about', 'earlier today', 'last session', 'the other day', or any vague reference to past context that needs resolution before the agent can act.
inngest-local
Set up self-hosted Inngest on macOS as a durable background task manager for AI agents. Interactive Q&A to match intent — from Docker one-liner to full k8s deployment with persistent state. Use when: 'set up inngest', 'background tasks', 'durable workflows', 'self-host inngest', 'event-driven functions', 'cron jobs', or any request for a local workflow engine.
Didn't find tool you were looking for?