name: commitment-extractor description: Extract and track commitments from meeting notes - who promised what to whom, with deadlines and status tracking.
Commitment Extractor
Scan meeting notes to extract, structure, and track commitments. Identifies promises, action items, and follow-ups with their owners, recipients, deadlines, and status.
Arguments
$SCOPE- Optional. Filter scope:all- All meetings (default)recent- Last 7 days onlyYYYY-MM-DD- Specific dateperson:Name- Commitments involving a specific personoverdue- Only show overdue/aging commitments
Process
Step 1: Scan Meeting Notes
Locate meeting notes:
# Find all meeting notes
find 00-Inbox/Meetings/ -name "*.md" -type f | grep -v README
Apply scope filter:
all: Process all filesrecent: Filter to files modified in last 7 daysYYYY-MM-DD: Filter to files with date in filenameperson:Name: Will filter in extraction phaseoverdue: Process all, filter in status phase
Step 2: Extract Commitment Language
For each meeting note, scan for commitment patterns:
First-person commitments ("I/We will do X"):
I'll...,I will...,I'm going to...Let me...,I can...,I should...We'll...,We will...,We need to...,We should...I'll get back to you on...,I'll follow up...
Second-person requests ("You will do X"):
Can you...,Could you...,Would you...You'll need to...,You should...Please...(when directed at someone)
Third-person assignments ("They will do X"):
@[[Person]]...,@Person:...[Name] will...,[Name] to...Action for [Name]:...
Explicit action items:
- [ ] ...(unchecked tasks)Action Items:section contentsFollow-up:,Next steps:section contents- Lines containing
^mt-or^task-block IDs
Step 3: Structure Each Commitment
For each commitment found, extract:
commitment:
text: "[Exact commitment language]"
owner: "[Who made/owns the commitment]"
recipient: "[Who it was made to, if applicable]"
deadline: "[Date if mentioned, or 'None specified']"
source_meeting: "[Meeting title and date]"
source_file: "[Full path to meeting note]"
block_id: "[^mt-xxx or ^task-xxx if present]"
extracted_date: "[Today's date]"
status: "[new|aging|overdue|completed]"
Owner detection rules:
- First-person language in meeting with known attendees = meeting owner/author
@[[Person]]or@Person:= that person- Text after "Action for [Name]:" = that person
- If ambiguous, mark as "Unknown - needs clarification"
Deadline detection:
- Look for:
by [date],before [date],end of [week/month],tomorrow,next [day],this week - Convert relative dates to absolute (based on meeting date)
- If no deadline found:
None specified
Step 4: Calculate Status
Status rules:
new- Extracted today or commitment < 7 days oldaging- Commitment > 7 days old, no completion evidenceoverdue- Past explicit deadlinecompleted- Task has[x]or referenced in completion notes
Aging calculation:
days_old = today - meeting_date
if deadline and today > deadline:
status = "overdue"
elif days_old > 7 and not completed:
status = "aging"
elif extracted_today:
status = "new"
Step 5: Cross-Reference Completion
Check if commitments have been completed:
- Task file check: Search
03-Tasks/Tasks.mdfor matching block IDs or similar task text - Meeting follow-up check: Look for "completed", "done", "finished" mentions in subsequent meeting notes
- Person page check: Check referenced person pages for task completion
Mark as completed if evidence found.
Step 6: Filter by Scope
If person:Name scope was specified:
- Include commitments where owner = Name
- Include commitments where recipient = Name
- Include commitments that mention Name in text
If overdue scope was specified:
- Only include commitments with status =
overdueoraging
Step 7: Generate Output
Default output - grouped by person:
# Commitment Tracker
*Generated: [YYYY-MM-DD HH:MM]*
*Scope: [scope applied]*
*Meetings scanned: [count]*
---
## Summary
| Status | Count |
|--------|-------|
| Overdue | X |
| Aging (>7 days) | X |
| New | X |
| Completed | X |
| **Total Open** | **X** |
---
## By Owner
### [[Person Name]]
**Overdue:**
| Commitment | To | Deadline | Source Meeting |
|------------|-----|----------|----------------|
| [commitment text] | [recipient] | [date] | [[Meeting link]] |
**Aging:**
| Commitment | To | Days Old | Source Meeting |
|------------|-----|----------|----------------|
| [commitment text] | [recipient] | [N] | [[Meeting link]] |
**Recent:**
| Commitment | To | Deadline | Source Meeting |
|------------|-----|----------|----------------|
| [commitment text] | [recipient] | [date/none] | [[Meeting link]] |
---
### [[Another Person]]
...
---
## Commitments Made TO You
| From | Commitment | Deadline | Status | Source |
|------|------------|----------|--------|--------|
| [[Person]] | [text] | [date] | [status] | [[Meeting]] |
---
## Needs Attention
### Overdue (Past Deadline)
1. **[Commitment text]**
- Owner: [[Person]]
- Deadline: [date] (X days overdue)
- Source: [[Meeting - Date]]
- Suggested action: Follow up or mark complete
### Aging (No Response >7 days)
1. **[Commitment text]**
- Owner: [[Person]]
- Days since commitment: X
- Source: [[Meeting - Date]]
- Suggested action: Check status or create task
---
## Recently Completed
| Commitment | Owner | Completed | Source |
|------------|-------|-----------|--------|
| [text] | [[Person]] | [date] | [[Meeting]] |
Alternative output - grouped by status (use flag --by-status):
Group all overdue first, then aging, then new.
Step 8: Optional Actions
After presenting results, offer:
- Create tasks: "Would you like me to create tasks in
03-Tasks/Tasks.mdfor any open commitments?" - Update person pages: "Should I add these commitments to the relevant person pages?"
- Mark complete: "Any of these already done? Tell me which to mark complete."
- Set deadlines: "Want to add deadlines to commitments that don't have them?"
Step 9: Save Report (Optional)
If user requests, save report to:
06-Resources/Intel/Commitment_Reports/YYYY-MM-DD_Commitments.md
Pattern Library
High-Confidence Commitment Patterns
These patterns strongly indicate a commitment:
# First-person future tense
/I('ll| will| am going to| can| should| need to) (get|send|create|update|follow|schedule|reach|contact|review|prepare|build|write)/i
# Action item markers
/^- \[ \] .+/m
/Action (item|for|:)/i
/^### (For Me|My Actions|Dave|I need to)/im
# Explicit promises
/(I('ll| will) get back to you|I('ll| will) follow up|Let me (check|find|get|send))/i
# Request patterns
/(@\[\[.+?\]\]|@\w+):\s*.+/
/(Can|Could|Would) you (please )?(send|create|review|check|update|schedule)/i
Context Clues
Look for these section headers that often contain commitments:
## Action Items## Follow-up## Next Steps## Tasks### For Me/### For Others## Decisions Made(may contain implied commitments)
Exclusion Patterns
Skip these (not commitments):
- Questions:
Should I...?,Can we...?,What if I...? - Past tense:
I did...,We completed...,I sent... - Hypotheticals:
I would...,I could...(without context) - Already completed:
- [x] ...
Usage Examples
# Extract all commitments from all meetings
/commitment-extractor
# Only commitments from last 7 days
/commitment-extractor recent
# Commitments involving a specific person
/commitment-extractor person:Paul
# Only show overdue/aging items
/commitment-extractor overdue
# Commitments from a specific date
/commitment-extractor 2026-01-26
Integration Points
Person Pages
After extraction, optionally update person pages with:
## Open Commitments
### Commitments TO [[Person]]
- [commitment] - from [[Meeting]] (due: [date])
### Commitments FROM [[Person]]
- [commitment] - from [[Meeting]] (due: [date])
Task System
Commitments can be promoted to tasks:
- Add to
03-Tasks/Tasks.mdwith source link - Generate proper
^task-YYYYMMDD-XXXblock ID - Link back to original meeting note
Weekly Review
The /week-review command can call this to surface:
- Commitments made this week
- Aging commitments that need attention
- Overdue items requiring action
Notes
- This command is read-only by default (extraction only)
- Modifications (create tasks, update pages) require explicit confirmation
- Commitment detection uses heuristics - may have false positives/negatives
- When in doubt about owner, ask for clarification before creating tasks
- Block IDs enable bidirectional linking between meetings and task system