Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Track follow-ups from sent emails, detect stale threads, and generate reminder drafts. Maintains local store of pending follow-ups with nudge dates. Identifies emails awaiting responses and suggests gentle reminder messages. Use when user wants to track responses, follow up on sent emails, or review what's waiting for replies. Requires confirmation before updating follow-up store.
.claude/skills/evolution-foundation-gog-followups/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 543% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 445% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 516% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 225% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 350% | 0% |
Never lose track of emails awaiting responses. Track follow-ups, detect stale threads, and generate timely reminders.
Use this skill when:
Follow-ups are tracked in a local JSON file:
~/.gog-assistant/followups.jsonStructure:
json[ { "id": "followup_001", "email_id": "msg_abc123", "thread_id": "thread_xyz", "person": "client@acme.com", "topic": "Q2 pricing proposal", "context": "Sent proposal on Jan 20, they said they'd review by end of week", "last_touch": "2026-01-20T16:00:00Z", "next_nudge_date": "2026-01-30", "nudge_count": 0, "status": "pending", "priority": "high", "created_at": "2026-01-20T16:05:00Z" } ]
Dynamic Context (if file exists):
!`cat ~/.gog-assistant/followups.json 2>/dev/null || echo "[]"`When user says "track follow-up for email id]" or "remind me to follow up with person]":
bash gog gmail get <email_id> --json
markdown Let me set up follow-up tracking. A few questions:
markdown ## Proposed Follow-up
Person: client@acme.com (John Doe) Topic: Q2 pricing proposal Context: Sent detailed proposal on Jan 20, awaiting their review and feedback Last contact: January 20, 2026 Next nudge: January 30, 2026 (10 days from now) Priority: High Email: msg_abc123
Does this look correct?
bash # Read existing store STORE=~/.gog-assistant/followups.json if ! -f "$STORE" ]; then echo "]" > "$STORE" chmod 600 "$STORE" fi
# Generate new follow-up entry NEW_ENTRY=$(jq -n \ --arg id "followup_$(date +%s)" \ --arg email_id "msg_abc123" \ --arg person "client@acme.com" \ --arg topic "Q2 pricing proposal" \ --arg context "Sent proposal..." \ --arg last_touch "2026-01-20T16:00:00Z" \ --arg nudge_date "2026-01-30" \ --arg status "pending" \ --arg priority "high" \ --arg created "2026-01-20T16:05:00Z" \ '{id:$id, email_id:$email_id, person:$person, topic:$topic, context:$context, last_touch:$last_touch, next_nudge_date:$nudge_date, nudge_count:0, status:$status, priority:$priority, created_at:$created}')
# Append to store jq ". + $NEW_ENTRY]" "$STORE" > "$STORE.tmp" && mv "$STORE.tmp" "$STORE"
markdown ✅ Follow-up Added
Tracking ID: followup_001 Person: client@acme.com Next reminder: January 30, 2026
I'll remind you to follow up in 10 days.
View all follow-ups: "Show pending follow-ups"
When user says "show pending follow-ups" or "what am I waiting on":
bash jq '.[] | select(.status == "pending")' ~/.gog-assistant/followups.json
markdown # Pending Follow-ups (N] total)
## High Priority
## Medium Priority
---
Summary:
Suggested actions:
When user says "review follow-ups due this week":
bash TODAY=$(date +%Y-%m-%d) WEEK_FROM_NOW=$(date -v+7d +%Y-%m-%d) jq --arg today "$TODAY" --arg week "$WEEK_FROM_NOW" \ '.[] | select(.status == "pending" and .next_nudge_date >= $today and .next_nudge_date <= $week)' \ ~/.gog-assistant/followups.json
When user says "generate nudge for person/topic]" or "draft follow-up for id]":
jq '.[] | select(.person == "client@acme.com")'jq '.[] | select(.topic | contains("pricing"))'jq '.[] | select(.id == "followup_001")'bash gog gmail get <email_id> --json # Or for full thread context: gog gmail thread get <thread_id> --json
First nudge (nudge_count == 0): Gentle, assumes they're busy Second nudge (nudge_count == 1): Slightly more direct, mentions timing Third+ nudge (nudge_count >= 2): Direct but polite, offers to clarify
markdown # Nudge Draft: Q2 Pricing Proposal
To: client@acme.com Subject: Re: Q2 Pricing Proposal
---
## Variant A: Gentle (Recommended for first nudge)
Hi John,
I wanted to follow up on the Q2 pricing proposal I sent over on January 20th. I know you're busy, so no rush—just wanted to make sure it didn't get lost in the shuffle.
If you have any questions or need clarification on any part of the proposal, I'm happy to jump on a quick call.
Thanks!
---
## Variant B: Direct
Hi John,
Following up on the Q2 pricing proposal from January 20th. We're starting to finalize our Q2 budget, so it would be helpful to hear your thoughts when you have a chance.
Do you have an ETA on when you might be able to review it?
Thanks!
---
## Context
---
Next steps:
markdown Should I:
bash # Increment nudge_count, update last_touch, set new next_nudge_date jq '(.[] | select(.id == "followup_001") | .nudge_count) += 1 | (.[] | select(.id == "followup_001") | .last_touch) = "2026-01-30T10:00:00Z" | (.[] | select(.id == "followup_001") | .next_nudge_date) = "2026-02-07" | (.[] | select(.id == "followup_001") | .status) = "contacted"' \ ~/.gog-assistant/followups.json > ~/.gog-assistant/followups.json.tmp mv ~/.gog-assistant/followups.json.tmp ~/.gog-assistant/followups.json
When user receives response or no longer needs follow-up:
User: "Close follow-up for client@acme.com" or "Mark id] as responded"
markdown Close this follow-up?
Topic: Q2 pricing proposal Person: client@acme.com Reason: Ask: "Did they respond, or no longer needed?"]
Reply "yes, close" to confirm.
bash jq '(.[] | select(.id == "followup_001") | .status) = "closed" | (.[] | select(.id == "followup_001") | .closed_at) = "2026-01-31T14:00:00Z"' \ ~/.gog-assistant/followups.json > ~/.gog-assistant/followups.json.tmp mv ~/.gog-assistant/followups.json.tmp ~/.gog-assistant/followups.json
markdown ✅ Follow-up Closed
Topic: Q2 pricing proposal Person: client@acme.com Closed: Jan 31, 2026
Remaining pending follow-ups: N]
markdown# Pending Follow-ups ([N] total) ## [Priority] [Number]. **[Topic]** → [Person] - Last contact: [Date] ([X days ago]) - Next nudge: [Date] ([in X days | OVERDUE]) - Context: [Brief context] - Email: [msg_id] --- **Summary**: - Total pending: [N] - Overdue: [N] - Due this week: [N] **Suggested actions**: [What to do next]
markdown# Nudge Draft: [Topic] **To**: [person] **Subject**: Re: [topic] --- ## Variant A: [Tone] [Draft text] ## Variant B: [Tone] [Draft text] --- ## Context - **Original sent**: [Date] ([X days ago]) - **Nudge count**: [N] - **Priority**: [High/Medium/Low] - **Suggested tone**: [Rationale] --- **Next steps**: [Options for saving/sending]
User: "Track follow-up for email msg_abc123"
Assistant:
[Fetches email...]
Let me set up follow-up tracking for this email.
**Email**: Q2 Pricing Proposal
**Sent to**: client@acme.com (John Doe)
**Sent on**: January 20, 2026
A few questions:
1. When should I remind you to follow up?
- In 3 days (Jan 23)
- In 1 week (Jan 27)
- In 2 weeks (Feb 3)
- Custom date
2. Priority? (High/Medium/Low)
3. Any context to note?User: "1 week, high priority, waiting for their review and decision"
Assistant:
## Proposed Follow-up
**Person**: client@acme.com (John Doe)
**Topic**: Q2 Pricing Proposal
**Context**: Sent pricing proposal on Jan 20, awaiting their review and decision
**Last contact**: January 20, 2026
**Next nudge**: January 27, 2026 (7 days)
**Priority**: High
**Email**: msg_abc123
Ready to add this follow-up?User: "Yes"
Assistant:
✅ **Follow-up Added**
Tracking ID: followup_001
Person: client@acme.com
Next reminder: January 27, 2026
I'll remind you to follow up in 7 days. You can check status anytime with "show pending follow-ups".User: "What am I waiting on?"
Assistant:
# Pending Follow-ups (3 total)
## High Priority
1. **Q2 pricing proposal** → client@acme.com
- Last contact: Jan 20 (10 days ago)
- Next nudge: Jan 30 (TODAY)
- Context: Awaiting review and decision on proposal
- Email: msg_abc123
2. **Contract signoff** → legal@vendor.com
- Last contact: Jan 15 (15 days ago)
- Next nudge: **OVERDUE** (was Jan 25)
- Context: Sent redlined contract, awaiting signature
- Email: msg_def456
## Medium Priority
3. **Feature roadmap inquiry** → product@company.com
- Last contact: Jan 22 (8 days ago)
- Next nudge: Feb 5 (in 6 days)
- Context: Asked about timeline for feature X
- Email: msg_ghi789
---
**Summary**:
- Total pending: 3
- Overdue: 1 (legal@vendor.com)
- Due today: 1 (client@acme.com)
**Suggested actions**:
- Send nudge to legal@vendor.com (overdue by 5 days)
- Send nudge to client@acme.com (due today)
Want me to draft reminder emails for these?User: "Draft a follow-up for the pricing proposal"
Assistant:
[Finds follow-up...]
[Fetches original email...]
# Nudge Draft: Q2 Pricing Proposal
**To**: client@acme.com
**Subject**: Re: Q2 Pricing Proposal
---
## Variant A: Gentle (Recommended)
Hi John,
I wanted to follow up on the Q2 pricing proposal I sent over on January 20th. I know you're busy, so no rush—just wanted to make sure it didn't get lost in your inbox.
If you have any questions or need clarification on any part of the proposal, I'm happy to jump on a quick call to discuss.
Thanks!
---
## Variant B: Direct
Hi John,
Following up on the Q2 pricing proposal from January 20th. We're starting to finalize our Q2 budget planning, so it would be helpful to hear your thoughts when you have a chance.
Do you have an ETA on when you might be able to review it? Happy to clarify anything that's unclear.
Thanks!
---
## Context
- **Original sent**: Jan 20 (10 days ago)
- **Nudge count**: 0 (this is first reminder)
- **Priority**: High
- **Suggested tone**: Gentle (10 days is reasonable response time)
---
**Next steps**:
- Edit as needed
- Say "Save as draft" to create in GOG
- Or "Send this nudge" (requires "YES, SEND")
Which variant do you prefer?Symptom: File ~/.gog-assistant/followups.json not found
Resolution:
bash mkdir -p ~/.gog-assistant echo "[]" > ~/.gog-assistant/followups.json chmod 600 ~/.gog-assistant/followups.json
Symptom: Invalid JSON in followups.json
Resolution:
bash cp ~/.gog-assistant/followups.json ~/.gog-assistant/followups.json.backup.$(date +%s)
Symptom: User doesn't specify nudge date
Resolution:
Symptom: User tries to set nudge for tomorrow but email was sent today
Resolution:
Symptom: User has 10+ overdue nudges
Resolution:
To safely test this skill using only user@example.com:
Test 1: Add Follow-up (Safe)
In Claude Code:
cat ~/.gog-assistant/followups.jsonjq . ~/.gog-assistant/followups.jsonTest 2: Review Follow-ups (Read-Only, Safe)
Test 3: Generate Nudge Draft (Safe, No Send)
Test 4: Close Follow-up (Safe)
jq '.[] | select(.person == "user@example.com") | .status' ~/.gog-assistant/followups.jsonSee skills/gog/_shared/references/testing.md for complete test plan.
gog-email-triage: After triage, suggest tracking follow-ups for sent repliesgog-email-draft: Nudge drafts flow into drafting skillgog-email-send: Nudge drafts can be sent via send skillgog-tasks: Overdue follow-ups can become tasks| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,906 | 5,759 | -27% | 1 | 1 | 0% | 1,294 | 5,857 | +353% | 0 | 0 | — |
case-02 | fail→fail | 9,165 | 11,770 | +28% | 1 | 1 | 0% | 1,453 | 7,202 | +396% | 0 | 0 | — |
case-03 | fail→fail | 10,045 | 5,816 | -42% | 1 | 1 | 0% | 1,075 | 5,962 | +455% | 0 | 0 | — |
case-04 | pass→pass | 5,486 | 5,958 | +9% | 1 | 1 | 0% | 873 | 6,565 | +652% | 0 | 0 | — |
case-05 | pass→pass | 5,594 | 8,932 | +60% | 1 | 1 | 0% | 887 | 6,463 | +629% | 0 | 0 | — |
case-06 | fail→fail | 3,717 | 5,635 | +52% | 1 | 1 | 0% | 505 | 5,888 | +1066% | 0 | 0 | — |
case-07 | fail→pass | 5,657 | 5,419 | -4% | 1 | 1 | 0% | 1,054 | 6,773 | +543% | 0 | 0 | — |
case-08 | pass→pass | 11,641 | 3,470 | -70% | 1 | 1 | 0% | 2,106 | 6,249 | +197% | 0 | 0 | — |
case-09 | fail→pass | 7,212 | 3,018 | -58% | 1 | 1 | 0% | 1,121 | 6,108 | +445% | 0 | 0 | — |
case-10 | fail→pass | 6,787 | 4,659 | -31% | 1 | 1 | 0% | 1,025 | 6,318 | +516% | 0 | 0 | — |
case-11 | pass→pass | 6,938 | 2,980 | -57% | 1 | 1 | 0% | 1,144 | 6,177 | +440% | 0 | 0 | — |
case-12 | fail→pass | 10,365 | 3,825 | -63% | 1 | 1 | 0% | 1,947 | 6,336 | +225% | 0 | 0 | — |
case-13 | pass→pass | 5,577 | 5,026 | -10% | 1 | 1 | 0% | 935 | 6,520 | +597% | 0 | 0 | — |
case-14 | pass→pass | 10,712 | 6,400 | -40% | 1 | 1 | 0% | 1,683 | 6,651 | +295% | 0 | 0 | — |
case-15 | fail→pass | 7,831 | 4,776 | -39% | 1 | 1 | 0% | 1,457 | 6,562 | +350% | 0 | 0 | — |
case-16 | fail→pass | 13,729 | 3,172 | -77% | 1 | 1 | 0% | 1,536 | 6,175 | +302% | 0 | 0 | — |
case-17 | fail→fail | 6,876 | 4,354 | -37% | 1 | 1 | 0% | 1,277 | 6,475 | +407% | 0 | 0 | — |
case-18 | fail→pass | 14,534 | 5,799 | -60% | 1 | 1 | 0% | 2,430 | 6,617 | +172% | 0 | 0 | — |
case-19 | fail→fail | 11,619 | 15,560 | +34% | 1 | 1 | 0% | 1,853 | 6,678 | +260% | 0 | 0 | — |
case-20 | fail→fail | 4,801 | 9,687 | +102% | 1 | 1 | 0% | 709 | 6,154 | +768% | 0 | 0 | — |
case-21 | fail→pass | 7,483 | 2,794 | -63% | 1 | 1 | 0% | 1,252 | 6,145 | +391% | 0 | 0 | — |
case-22 | fail→pass | 11,374 | 2,369 | -79% | 1 | 1 | 0% | 1,468 | 6,018 | +310% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +41 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.