Build Your Own Dev Agent — Lesson 7: Meeting Ingest + Failure Handling
What happens when a skill fails? A missing API key, a rate limit, a malformed response. This lesson builds the meeting ingest skill and adds failure handling so failures are logged, retried, and never silent.
Where You Are
your-project/
CLAUDE.md
.claude/
preferences.md
tasks-active.md
tasks-completed.md
progress.txt
error-log.md
learnings.md
priority-map.md
cron-jobs.json # 4 jobs
settings.json
hooks/
stop-telegram.sh
permission-gate.sh
skills/
daily-planner/
pr-reviewer/
git-reviewer/
standup-generator/
What You're Adding
Two things in this lesson:
- Meeting ingest skill — extracts action items, decisions, and follow-ups from meeting transcripts
- Failure handling — retry, dead-letter log, graceful degradation (applied to all skills)
Failure Handling: The Four Mechanisms
Before building the skill, understand the failure infrastructure it uses:
- Retry — try again after a short delay. Max 2 retries per run.
- Idempotency — check if this input was already processed. Skip if yes.
- Dead-letter log — write failures to
failed-jobs.logwith full context for later analysis. - Graceful degradation — if one step fails, still complete the others. Partial results beat no results.
Build It: Failed Jobs Log
Prompt for Claude Code:
Create .claude/failed-jobs.log — an append-only log where failed skill
runs get recorded with timestamp, job ID, error type, details, and
retry count. Start with a header comment explaining the format.
Build It: Meeting Ingest Skill
This skill runs at 6:37 PM daily. It reads meeting transcripts (from Granola or manual files), extracts structured data, and routes it to the right state files.
Prompt for Claude Code:
Create a meeting ingest skill at .claude/skills/meeting-ingest/SKILL.md.
The skill should:
INPUT:
- Read preferences.md for meeting tools and calendar info
- Read tasks-active.md to check for duplicate action items
- Read progress.txt to check if today's meetings are already processed
- Sources: Granola MCP (preferred), manual transcript files, calendar notes
(MCPs are configured in `.mcp.json` at the project root — see [Claude Code MCP docs](https://code.claude.com/docs/en/mcp) for setup)
PROCESS:
1. Discover today's meetings from available sources
2. Idempotency check: skip meetings already in progress.txt
3. For each meeting, extract:
- Action items (WHO will do WHAT by WHEN)
- Decisions made (DECIDED: what, because why)
- Key topics (3-5, one sentence each)
- Follow-ups needed
4. Route extracted items:
- My action items → tasks-active.md with priority
- Others' action items → meeting notes file only
- Decisions → meeting notes file
5. Track: append to progress.txt for each processed meeting
FAILURE HANDLING:
- If a transcript is garbled, extract what you can and flag as partial
- If extraction fails entirely, log to failed-jobs.log and continue
to next meeting — one failure should not block the rest
- If retryable error (API timeout), wait 30s and retry once
- At the end, if any meetings failed, send Telegram notification
OUTPUT:
- Meeting notes file at .claude/reports/meetings/[date]-[slug].md
- Updated tasks-active.md with my action items
- Updated progress.txt with processing summary
Expected output: A complete meeting ingest skill with built-in failure handling.
Build It: Add Failure Handling to CLAUDE.md
Now add system-wide failure rules that apply to ALL skills, not just meeting ingest.
Prompt for Claude Code:
Append a Failure Handling section to CLAUDE.md with these rules:
1. Retry transient errors (timeout, rate limit, 5xx) once after 30s.
Max 2 retries total.
2. Log every failure to .claude/failed-jobs.log with timestamp,
job ID, error type, details, and retry count.
3. Degrade gracefully — if one step fails, complete what you can.
4. Notify on P0/P1 failures via Telegram.
5. Never silently fail. Every failure gets a log entry.
Expected output: CLAUDE.md updated with failure handling rules.
Build It: Schedule the Skill
Prompt for Claude Code:
Add meeting-ingest to cron-jobs.json. Schedule: 6:37 PM weekdays.
The file should now have 5 jobs total.
Expected output: cron-jobs.json with five entries.
Checkpoint
Your .claude/ directory should now contain: skills/meeting-ingest/SKILL.md, failed-jobs.log, and cron-jobs.json with 5 jobs. CLAUDE.md should include failure handling rules.
This is part of the Build Your Own Dev Agent course. ← Previous Lesson | Next Lesson →