sync-daily
npx skills add https://github.com/laurigates/claude-plugins --skill sync-daily
Agent 安装分布
Skill 文档
Daily Catch-Up Command
Aggregates action items from GitHub and Podio into a categorized daily summary optimized for ADHD-friendly workflow.
Configuration
Obsidian Vault Location
vault_path: ~/Documents/FVH Vault
daily_notes_path: ~/Documents/FVH Vault/Daily Notes
note_format: YYYY-MM-DD.md
Default Podio Workspace
org_label: fvh
space_label: iot-workspace
app_label: datadev-kanban
State File
state_file: ~/.config/claude-code/sync:daily-state.json
Command Modes
Default Mode
Fetches new items since last run and creates daily note with categorized summary.
Dry Run Mode (--dry-run)
Displays what would be fetched without creating the note or updating state.
Verbose Mode (--verbose)
Shows detailed progress and API responses during execution.
Full Refresh Mode (--full-refresh)
Ignores last run timestamp and fetches all active items (useful for first run or after issues).
Implementation Workflow
Step 1: Initialize and Load State
- Check for state file at
~/.config/claude-code/sync:daily-state.json - Load last run timestamp if exists, otherwise treat as first run
- Determine time filter for API queries:
- If
--full-refresh: No time filter (fetch all active items) - If state exists: Filter by items updated since last run
- If first run: Fetch items from last 7 days
- If
State File Schema:
{
"lastRun": "2025-11-12T08:30:00Z",
"lastSuccessfulRun": "2025-11-12T08:30:00Z",
"github": {
"lastIssueUpdate": "2025-11-12T08:30:00Z",
"lastPRUpdate": "2025-11-12T08:30:00Z"
},
"podio": {
"lastItemUpdate": "2025-11-12T08:30:00Z"
}
}
Step 2: Fetch GitHub Items
Use the GitHub MCP server to fetch items needing attention:
- Get authenticated user via
mcp__github__get_meto determine username - Fetch assigned issues using
mcp__github__search_issues:- Query:
is:issue is:open assignee:@me sort:updated-desc - Filter by updated since last run if applicable
- Query:
- Fetch PRs needing review using
mcp__github__search_issues:- Query:
is:pr is:open review-requested:@me sort:updated-desc
- Query:
- Fetch PRs authored by user using
mcp__github__search_issues:- Query:
is:pr is:open author:@me sort:updated-desc
- Query:
- Fetch mentioned items using
mcp__github__search_issues:- Query:
is:open mentions:@me sort:updated-desc
- Query:
Data to Extract:
- Issue/PR number and title
- Repository name
- Status (open, draft, review requested, changes requested)
- Labels (priority, bug, feature, etc.)
- Updated timestamp
- URL for quick access
- Comments count (indicates activity)
Step 3: Fetch Podio Items
Use the Podio MCP server to fetch active tasks:
- Fetch active items via
mcp__podio-mcp__list_items:- Workspace:
org_label="fvh", space_label="iot-workspace", app_label="datadev-kanban" - Filter by status: In Progress, To Do, On Hold
- Sort by last_modified descending
- Workspace:
- Get item details for each item via
mcp__podio-mcp__get_item_detailsif needed
Data to Extract:
- Item ID and title
- Status (To Do, In Progress, On Hold, Blocked)
- Priority level
- Due date if set
- Last modified timestamp
- GitHub references in description
- URL for quick access
Step 4: Categorize Items
Apply categorization logic to all fetched items:
Category Definitions
URGENT – Requires immediate attention:
- GitHub PRs with “changes requested” status
- GitHub issues labeled with “critical” or “urgent”
- Podio items with high priority AND status “In Progress”
- Any item blocking others (check for “blocked by” or “blocking” keywords)
- Items with past-due dates
ACTION NEEDED – Requires action soon:
- GitHub PRs awaiting your review
- GitHub issues assigned to you without recent activity (>3 days)
- Podio items with status “To Do” and high/medium priority
- GitHub mentions in open issues/PRs
- Items with due dates within next 3 days
IN PROGRESS – Currently being worked on:
- GitHub PRs you authored that are open
- GitHub issues you’re actively working on (recent activity <3 days)
- Podio items with status “In Progress”
BLOCKED – Waiting on someone else:
- GitHub PRs awaiting other reviewers (not you)
- GitHub issues with “blocked” label
- Podio items with status “On Hold” or “Blocked”
- Items with “waiting for” keywords in description
FYI – Informational, low priority:
- GitHub issues where you’re mentioned but not assigned
- Podio items with low priority
- GitHub PRs where you’re CC’d but not primary reviewer
- Items with no labels indicating urgency
Categorization Algorithm
For each item:
1. Check for blocking/blocked status â BLOCKED
2. Check for urgent labels/keywords â URGENT
3. Check for past-due or due within 3 days â URGENT or ACTION NEEDED
4. Check if you're actively working on it â IN PROGRESS
5. Check if action is required from you â ACTION NEEDED
6. Default â FYI
Step 5: Generate Obsidian Note
Create a markdown note with ADHD-friendly formatting:
File Location: ~/Documents/FVH Vault/Daily Notes/YYYY-MM-DD.md
Note Structure:
# Daily Catch-Up - [Day of Week], [Month DD, YYYY]
> Generated at [HH:MM AM/PM] | [X] items | [Y] require action
## ð¥ URGENT ([count])
[If empty: "â
No urgent items - great!"]
- [ ] **[Repo/Project]** [Title] ([Type])
- ð Status: [status]
- ð [Link]
- ð¬ [Why urgent: blocking, changes requested, etc.]
## â¡ ACTION NEEDED ([count])
[If empty: "â
No immediate actions required"]
- [ ] **[Repo/Project]** [Title] ([Type])
- ð Status: [status]
- ð [Link]
- ð¡ [What's needed: review, response, work, etc.]
## ð§ IN PROGRESS ([count])
[If empty: "No items currently in progress"]
- [ ] **[Repo/Project]** [Title] ([Type])
- ð Status: [status]
- ð [Link]
- â±ï¸ Last updated: [relative time]
## ð« BLOCKED ([count])
[If empty: "â
No blocked items"]
- [ ] **[Repo/Project]** [Title] ([Type])
- ð Status: [status]
- ð [Link]
- â Waiting on: [blocker description]
## ð FYI ([count])
[Collapsed by default in Obsidian]
<details>
<summary>Show [count] informational items</summary>
- **[Repo/Project]** [Title] ([Type])
- ð [status] | ð [Link]
</details>
---
## ð Summary Statistics
- **Total Items:** [count]
- **Urgent:** [count] ð¥
- **Action Needed:** [count] â¡
- **In Progress:** [count] ð§
- **Blocked:** [count] ð«
- **FYI:** [count] ð
## ð¯ Recommended Focus Order
1. ð¥ Start with URGENT items (highest impact)
2. â¡ Move to ACTION NEEDED (prevent future urgency)
3. ð§ Continue IN PROGRESS items (maintain momentum)
4. ð« Follow up on BLOCKED items (unblock if possible)
5. ð Review FYI items when time permits
name: sync-daily
---
*Last fetch: [timestamp] | State saved to `~/.config/claude-code/sync:daily-state.json`*
ADHD-Friendly Formatting Guidelines:
- â Use checkboxes for actionable items (creates dopamine loop)
- â Use emojis for quick visual scanning
- â Bold project names for easy identification
- â Collapse FYI section to reduce overwhelm
- â Provide clear recommended focus order
- â Keep descriptions concise (one line per item)
- â Use relative time (“2 hours ago”) for recent items
- â Show counts in section headers for progress tracking
- â Include encouraging messages for empty urgent sections
Step 6: Update State File
After successful execution:
- Update state file with current timestamp:
{ "lastRun": "[current_timestamp]", "lastSuccessfulRun": "[current_timestamp]", "github": { "lastIssueUpdate": "[current_timestamp]", "lastPRUpdate": "[current_timestamp]" }, "podio": { "lastItemUpdate": "[current_timestamp]" } } - Create state directory if it doesn’t exist:
~/.config/claude-code/ - Set file permissions to 600 (user read/write only)
Step 7: Display Summary
Show concise summary in terminal:
â
Daily Catch-Up Complete!
ð Note created: ~/Documents/FVH Vault/Daily Notes/2025-11-12.md
ð Summary:
ð¥ URGENT: 2 items
â¡ ACTION NEEDED: 5 items
ð§ IN PROGRESS: 3 items
ð« BLOCKED: 1 item
ð FYI: 4 items
ð¯ Recommended: Start with URGENT items
â±ï¸ Next run: Use /sync:daily to refresh
Error Handling
API Failures
- GitHub API fails: Continue with Podio only, note GitHub unavailability
- Podio API fails: Continue with GitHub only, note Podio unavailability
- Both APIs fail: Display error, preserve current state, suggest retry
State File Issues
- State file corrupted: Treat as first run, backup corrupted file
- State file unreadable: Treat as first run
- Can’t write state: Warn user, command succeeds but next run will re-fetch
Obsidian Vault Issues
- Vault path doesn’t exist: Create directory or fail with clear error
- Can’t write note: Fail with clear error and path suggestion
- Daily Notes folder missing: Create it automatically
Performance Optimization
- Parallel API calls: Fetch GitHub and Podio simultaneously
- Minimal data: Only fetch fields needed for categorization
- Pagination: Limit to first 50 items per source (configurable)
- Caching: Use state file to avoid re-fetching unchanged items
Usage Examples
# Standard daily run (incremental fetch since last run)
/sync:daily
# See what would be fetched without creating note
/sync:daily --dry-run
# Full refresh of all active items (ignore last run time)
/sync:daily --full-refresh
# Verbose mode for debugging
/sync:daily --verbose
# Combination: dry run with verbose output
/sync:daily --dry-run --verbose
Success Criteria
- â Command executes in <30 seconds
- â Fetches new items since last run correctly
- â Categorizes items accurately (>90% accuracy)
- â Creates well-formatted Obsidian note
- â Updates state file successfully
- â Handles API failures gracefully
- â Provides clear, actionable summary
- â Reduces decision paralysis and context-switching
Future Enhancements (v1.1+)
- Gmail integration via MCP server (when available)
- Google Chat integration via MCP server (when available)
- AI-powered categorization using Zen MCP
- Interactive mode for reviewing items before note creation
- Custom category definitions via config file
- Integration with Obsidian tasks plugin
- Time-blocking suggestions based on item estimates
- Progress tracking over time (trend analysis)