Agent skill
gog-followups
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.
Install this agent skill to your Project
npx add-skill https://github.com/EvolutionAPI/evo-nexus/tree/main/.claude/skills/gog-followups
Metadata
Additional technical details for this skill
- author
- gog-skills
- version
- 1.0
SKILL.md
Follow-up & Nudge Tracking
Never lose track of emails awaiting responses. Track follow-ups, detect stale threads, and generate timely reminders.
When to Use
Use this skill when:
- User wants to "track follow-up" for a sent email
- User asks "what emails am I waiting on"
- User mentions "check pending follow-ups"
- User wants to "send a reminder" or "nudge [person]"
- User says "review stale threads"
Follow-up Store
Follow-ups are tracked in a local JSON file:
~/.gog-assistant/followups.json
Structure:
[
{
"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 "[]"`
Workflow
Adding Follow-up Tracking
When user says "track follow-up for email [id]" or "remind me to follow up with [person]":
-
Fetch email if ID provided:
bashgog gmail get <email_id> --json -
Extract follow-up details:
- Person: Primary recipient (or user specifies)
- Topic: Email subject
- Last touch: Email send date
- Context: Key points from email
-
Ask for follow-up parameters:
markdownLet me set up follow-up tracking. A few questions: 1. **Who are you waiting to hear from?** [Extracted: client@acme.com] 2. **What's this about?** [Extracted: Q2 pricing proposal] 3. **When should I remind you?** - In 3 days (standard) - In 1 week - Custom date 4. **Priority**: High, Medium, or Low? 5. **Any context?** Brief note about what you're waiting for. -
Present proposed follow-up:
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? -
Request confirmation: "Ready to add this follow-up?"
-
Add to store when user confirms:
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" -
Confirm addition:
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"
Reviewing Follow-ups
Show All Pending
When user says "show pending follow-ups" or "what am I waiting on":
-
Read follow-up store:
bashjq '.[] | select(.status == "pending")' ~/.gog-assistant/followups.json -
Present formatted list:
markdown# Pending Follow-ups ([N] total) ## High Priority 1. **Q2 pricing proposal** → client@acme.com - Last contact: Jan 20 (8 days ago) - Next nudge: Jan 30 (in 2 days) - Context: Awaiting review and feedback on proposal - Email: msg_abc123 2. **Contract review** → legal@vendor.com - Last contact: Jan 18 (10 days ago) - Next nudge: **OVERDUE** (was Jan 25) - Context: Sent redlined contract, need their signoff - Email: msg_def456 ## Medium Priority 3. **Feature request feedback** → product@company.com - Last contact: Jan 22 (6 days ago) - Next nudge: Feb 1 (in 4 days) - Context: Asked about roadmap for feature X - Email: msg_ghi789 --- **Summary**: - Total pending: 3 - Overdue: 1 (legal@vendor.com) - Due this week: 1 (client@acme.com) **Suggested actions**: - Send nudge to legal@vendor.com (overdue) - Prepare nudge draft for client@acme.com (due soon)
Show Follow-ups Due This Week
When user says "review follow-ups due this week":
-
Filter by next_nudge_date:
bashTODAY=$(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 -
Present list (similar format as above)
Generating Nudge Drafts
When user says "generate nudge for [person/topic]" or "draft follow-up for [id]":
-
Identify follow-up:
- By person:
jq '.[] | select(.person == "client@acme.com")' - By topic:
jq '.[] | select(.topic | contains("pricing"))' - By ID:
jq '.[] | select(.id == "followup_001")'
- By person:
-
Fetch original email thread:
bashgog gmail get <email_id> --json # Or for full thread context: gog gmail thread get <thread_id> --json -
Analyze timing:
- Days since last contact
- Nudge count (first reminder vs follow-up)
- Priority/urgency
-
Draft nudge email with appropriate tone:
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
-
Present draft variants:
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 - **Original sent**: Jan 20 (10 days ago) - **Nudge count**: 0 (this is first reminder) - **Priority**: High - **Suggested tone**: Gentle (they have reasonable time to respond) --- **Next steps**: - Edit as needed - Say "Save as draft" to create draft - Or say "Send this nudge" (requires "YES, SEND" confirmation) -
After draft is approved:
markdownShould I: 1. Save this as a draft (you send it when ready) 2. Send it now (requires "YES, SEND" confirmation) 3. Update follow-up tracking (mark as nudged, set next reminder) -
Update follow-up store:
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
Closing Follow-ups
When user receives response or no longer needs follow-up:
User: "Close follow-up for client@acme.com" or "Mark [id] as responded"
-
Identify follow-up
-
Confirm closure:
markdownClose 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. -
Update status:
bashjq '(.[] | 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 -
Confirm:
markdown✅ **Follow-up Closed** Topic: Q2 pricing proposal Person: client@acme.com Closed: Jan 31, 2026 Remaining pending follow-ups: [N]
Output Format (Strict)
Follow-up List
# 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]
Nudge Draft
# 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]
Examples
Example 1: Add Follow-up
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".
Example 2: Review 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?
Example 3: Generate Nudge
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?
Failure Modes / Troubleshooting
Follow-up Store Doesn't Exist
Symptom: File ~/.gog-assistant/followups.json not found
Resolution:
- This is expected on first use
- Initialize store:
bash
mkdir -p ~/.gog-assistant echo "[]" > ~/.gog-assistant/followups.json chmod 600 ~/.gog-assistant/followups.json - Inform user: "Created follow-up tracking store at ~/.gog-assistant/followups.json"
Follow-up Store Corrupted
Symptom: Invalid JSON in followups.json
Resolution:
- Backup corrupted file:
bash
cp ~/.gog-assistant/followups.json ~/.gog-assistant/followups.json.backup.$(date +%s) - Attempt to repair with jq
- If irreparable, warn user: "Follow-up store is corrupted. Backed up to [path]. Starting fresh."
- Initialize new store
Cannot Determine When to Nudge
Symptom: User doesn't specify nudge date
Resolution:
- Offer defaults based on priority:
- High: 3-5 days
- Medium: 7-10 days
- Low: 14-21 days
- Explain: "For high-priority emails, 3-7 days is typical. What works for you?"
Nudge Too Soon
Symptom: User tries to set nudge for tomorrow but email was sent today
Resolution:
- Warn: "That's very soon. Give them at least 24-48 hours to respond?"
- Suggest: "How about [+2 days]?"
- Allow override if user insists
Too Many Overdue Follow-ups
Symptom: User has 10+ overdue nudges
Resolution:
- Acknowledge: "You have [N] overdue follow-ups. Let's prioritize."
- Show only highest priority or most overdue
- Suggest: "Which 2-3 are most important? We can focus on those first."
- Offer batch nudge: "Want me to draft nudges for all high-priority items?"
Safety Rules
- Confirm before creating follow-ups - Show proposed tracking before adding
- Confirm before updating store - Any modification requires user approval
- Backup store on corruption - Never delete without backup
- Privacy in context - Don't store sensitive details in follow-up context
- Nudge drafts, don't send - Generate drafts only; use gog-email-send for sending
Safe Test
To safely test this skill using only user@example.com:
Test 1: Add Follow-up (Safe)
In Claude Code:
- Send yourself an email or use existing email ID
- Load gog-followups skill
- Say: "Track follow-up for email [id]"
- Answer prompts (person: user@example.com, nudge: tomorrow)
- Confirm creation
- Verify file exists:
cat ~/.gog-assistant/followups.json - Verify JSON is valid:
jq . ~/.gog-assistant/followups.json
Test 2: Review Follow-ups (Read-Only, Safe)
- Say: "Show pending follow-ups"
- Verify output lists the follow-up created in Test 1
- Confirm no modifications made
Test 3: Generate Nudge Draft (Safe, No Send)
- Say: "Draft a follow-up for [person or topic]"
- Verify draft is generated with both variants
- Confirm NO email is sent (only draft created)
Test 4: Close Follow-up (Safe)
- Say: "Close follow-up for user@example.com"
- Confirm closure
- Verify status updated in store:
jq '.[] | select(.person == "user@example.com") | .status' ~/.gog-assistant/followups.json
See skills/gog/_shared/references/testing.md for complete test plan.
Notes
-
This skill integrates with:
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
-
Follow-up store management:
- Consider archiving closed follow-ups after 30 days
- Provide export/backup functionality
- Add search/filter by date range
-
Smart nudge timing:
- Adjust based on person (executives: longer wait, vendors: shorter)
- Consider timezone (don't nudge international contacts on weekends)
- Respect out-of-office replies
-
Nudge tone guidance:
- First nudge: Gentle, assume they're busy
- Second nudge: More direct, reference timeline
- Third+ nudge: Direct but polite, offer alternatives (call instead?)
-
Future enhancements:
- Auto-detect responses (read inbox for replies to tracked threads)
- Suggest follow-up tracking when user sends important emails
- Weekly digest: "You have [N] follow-ups due this week"
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
data-create-viz
Cria visualizações de dados de qualidade profissional com Python no tema Evolution (fundo escuro, acento
cs-customer-escalation
Empacota uma escalação para Devs, Produto ou Davidson com contexto completo. Use quando um bug precisa de atenção além do suporte normal, vários clientes reportam o mesmo problema, um cliente está ameaçando cancelar, ou um problema ficou sem resolução além do SLA. / Package an escalation for engineering, product, or leadership with full context. Use when a bug needs engineering attention beyond normal support, multiple customers report the same issue, a customer is threatening to churn, or an issue has sat unresolved past its SLA.
mkt-draft-content
Draft blog posts, social media, email newsletters, landing pages, press releases, and case studies with channel-specific formatting and SEO recommendations. Use when writing any marketing content, when you need headline or subject line options, or when adapting a message for a specific platform, audience, and brand voice.
gog-tasks
Create, manage, and prioritize tasks and todo items. Convert emails to tasks, set priorities (P0-P3) and categories (Work/Personal/Errands/Admin), review daily priorities, track blocked and overdue tasks. Use when user mentions tasks, todos, action items, or wants to convert emails to tasks. Requires confirmation before creating or deleting tasks.
discord-get-messages
Retrieve messages from Discord channels via the Discord API. Use this skill when the user wants to read, search, or analyze messages from a Discord channel.
cs-customer-research
Pesquisa multi-fonte sobre pergunta ou tópico de cliente com atribuição de fontes. Use quando um cliente pergunta algo que precisa ser verificado, investigando se um bug foi reportado antes, verificando o que foi dito anteriormente a uma conta específica, ou coletando contexto antes de redigir uma resposta. / Multi-source research on a customer question or topic with source attribution. Use when a customer asks something you need to look up, investigating whether a bug has been reported before, checking what was previously told to a specific account, or gathering background before drafting a response.
Didn't find tool you were looking for?