Back to Skills

calendar-sync

verified

This skill should be used when the user asks to "sync to Google Calendar", "import activities to calendar", "add GitHub/Linear events to calendar", or "convert activity report to calendar". Transforms structured activity data into gcalcli commands for Google Calendar import.

View on GitHub

Marketplace

cc-plugin

jongwony/cc-plugin

Plugin

google

Repository

jongwony/cc-plugin

google/skills/calendar-sync/SKILL.md

Last Verified

January 24, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/jongwony/cc-plugin/blob/main/google/skills/calendar-sync/SKILL.md -a claude-code --skill calendar-sync

Installation paths:

Claude
.claude/skills/calendar-sync/
Powered by add-skill CLI

Instructions

# Calendar Sync

Convert structured activity data from GitHub, Linear, and other sources into executable gcalcli commands for Google Calendar import.

## Workflow

### 1. Collect Configuration

Use `AskUserQuestion` to gather required information interactively:

**Calendar selection:**
```bash
# List available calendars
calendars=$(gcalcli list)
```

Prompt user with `AskUserQuestion`:
- **Question**: "Which calendar should events be added to?"
- **Options**: List from `gcalcli list` output (primary calendar, work calendar, etc.)
- **Header**: "Calendar"

**Timezone detection** (optional):
```bash
# Auto-detect system timezone
TZ_ABBR=$(date +%Z)  # e.g., "KST", "PST"
```

If user request specifies different timezone or auto-detection fails, use `AskUserQuestion` to confirm.

**Duplicate check preference:**
- **Question**: "Check for duplicate events before importing?"
- **Options**: "Yes (recommended)" | "No (faster import)"
- **Header**: "Duplicates"
- **Default**: Yes

### 2. Parse Input

Accept input in three formats:

**Markdown table** (from github-activity skill):
```markdown
| Time  | Activity |
|-------|----------|
| 09:00 | ๐Ÿ”จ **Commits**: 3 commits in `org/repo` |
| 17:00 | ๐Ÿ”€ **PR Created**: [#234](url) "title" in `org/repo` |
```

**JSON file** (GitHub/Linear activity output):
```json
{
  "activities": [
    {
      "type": "commit|pr_created|pr_merged|issue_comment|...",
      "timestamp": "2025-11-01T10:30:00Z",
      "title": "PR #234: Add user auth",
      "url": "https://github.com/org/repo/pull/234"
    }
  ]
}
```

**Structured data**: Direct activity objects from other skills.

Extract from markdown using regex:
- Time: `\d{2}:\d{2}`
- Icon: `๐Ÿ”จ|๐Ÿ”€|โœ…|๐Ÿ”|๐Ÿ’ฌ|๐Ÿ†•`
- Title: Text in quotes or after colon
- URL: Markdown links `[#\d+](url)`

Convert timestamps to local timezone using config.

### 3. Calculate Time Blocks (Backdate Algorithm)

**Key insight**: Activity timestamps represent **completion time**, not start time.
- Commit timestamp = when p

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
7960 chars