Initial commit
This commit is contained in:
47
.claude/commands/pkm.md
Normal file
47
.claude/commands/pkm.md
Normal file
@@ -0,0 +1,47 @@
|
||||
You are the PKM Framework assistant for Personal Knowledge Management in Obsidian.
|
||||
|
||||
## Available Commands
|
||||
|
||||
### 🗓️ Temporal Reviews
|
||||
|
||||
**Daily Workflow:**
|
||||
- `/pkm:daily-setup` - Start your day (morning routine)
|
||||
- `/pkm:daily-review` - End your day (evening reflection)
|
||||
|
||||
**Weekly & Monthly:**
|
||||
- `/pkm:weekly-review` - Weekly summary and planning
|
||||
- `/pkm:monthly-review` - Monthly overview and goals
|
||||
|
||||
### 📝 Capture (Coming Soon)
|
||||
- `/pkm:quick-capture` - Quick note capture
|
||||
- `/pkm:meeting-notes` - Create meeting note
|
||||
|
||||
### 🔗 Linking (Coming Soon)
|
||||
- `/pkm:note-linking` - Smart note linking
|
||||
- `/pkm:backlink-analysis` - Analyze connections
|
||||
|
||||
### 📂 Organization (Coming Soon)
|
||||
- `/pkm:project-notes` - Project management
|
||||
- `/pkm:zettelkasten` - Create atomic note
|
||||
- `/pkm:periodic-cleanup` - Archive old notes
|
||||
|
||||
### 📊 Analytics (Coming Soon)
|
||||
- `/pkm:stats` - PKM system statistics
|
||||
|
||||
## Quick Start
|
||||
|
||||
**Morning:** `/pkm:daily-setup`
|
||||
**Evening:** `/pkm:daily-review`
|
||||
**Friday/Sunday:** `/pkm:weekly-review`
|
||||
**End of month:** `/pkm:monthly-review`
|
||||
|
||||
## Configuration
|
||||
|
||||
- **Vault**: `~/Obsidian/Altellus`
|
||||
- **Daily notes**: `20_Notes/Journal/YYYY/Mnn/YYYY-MM-DD.md`
|
||||
- **Weekly notes**: `20_Notes/Journal/YYYY/Mnn/YYYY-Www.md`
|
||||
- **Monthly notes**: `20_Notes/Journal/YYYY/Mnn/YYYY-Mmm.md`
|
||||
|
||||
## What would you like to do?
|
||||
|
||||
Please select a command above or describe what you'd like to accomplish with your PKM system.
|
||||
60
.claude/commands/pkm:daily-review.md
Normal file
60
.claude/commands/pkm:daily-review.md
Normal file
@@ -0,0 +1,60 @@
|
||||
You are helping complete the Daily Review section in an Obsidian daily note.
|
||||
|
||||
## Context
|
||||
- Daily notes location: `~/Obsidian/Altellus/20_Notes/Journal/YYYY/Mnn/YYYY-MM-DD.md`
|
||||
- Date logic: If current time is before 04:00 AM, use previous day's date for the review
|
||||
- Example: 2025-11-19 02:30 AM → review 2025-11-18
|
||||
- Example: 2025-11-19 05:00 AM → review 2025-11-19
|
||||
- TaskNotes data may be in YAML frontmatter (pomodoros field)
|
||||
|
||||
## Task
|
||||
Fill in the **🌙 Daily Review** section of today's daily note.
|
||||
|
||||
### Steps:
|
||||
|
||||
1. **Determine target date**
|
||||
- Check current time
|
||||
- If before 04:00 AM, use previous day's date
|
||||
- Otherwise, use today's date
|
||||
|
||||
2. **Check Google Calendar (use pkm:gcal-today command)**
|
||||
- Fetch events for the target date from Google Calendar
|
||||
- TaskNotes already has ICS subscriptions configured
|
||||
- Extract scheduled meetings, appointments, and time blocks
|
||||
|
||||
3. **Read target date's daily note (TaskNotes format)**
|
||||
- Extract completed tasks: `- [x] [[Task Name]] ✅ YYYY-MM-DD`
|
||||
- Check YAML frontmatter `pomodoros` array for time tracking
|
||||
- Review content added during the day
|
||||
|
||||
4. **Fill "오늘 완료" section (TaskNotes format)**
|
||||
- List all completed tasks: `- [x] [[Task Name]] ✅ YYYY-MM-DD`
|
||||
- Search in "오늘 이어서 할 일" and Notes sections
|
||||
- If no tasks completed, note what was worked on
|
||||
|
||||
5. **Fill "시간 사용" section (TaskNotes Pomodoro format)**
|
||||
- Count total pomodoros from YAML `pomodoros` array length
|
||||
- Group by taskPath and display as: `Task Name - 🍅🍅🍅: 3`
|
||||
- Show total with tomato emojis: `총 🍅🍅🍅🍅🍅🍅: 6 pomodoros`
|
||||
- List calendar events from Google Calendar:
|
||||
- `- HH:MM-HH:MM: Event Title`
|
||||
|
||||
6. **Fill "인사이트" section**
|
||||
- Extract key learnings, discoveries, or patterns from today's notes
|
||||
- What worked well? What didn't?
|
||||
- Any blockers or important realizations?
|
||||
- Consider how calendar events aligned with planned work
|
||||
|
||||
7. **Fill "내일 제안" section (TaskNotes format)**
|
||||
- Based on incomplete tasks and insights, suggest priorities for tomorrow
|
||||
- Format as `- [ ] [[Task Name]]` (TaskNotes wikilink format)
|
||||
- Connect to blockers or unfinished work
|
||||
- Prioritize incomplete tasks from today
|
||||
|
||||
### Output Format
|
||||
Provide only the "🌙 Daily Review" section content to update in today's note.
|
||||
|
||||
**Important**:
|
||||
- DO NOT modify the "## Retro" section (user fills this manually)
|
||||
- DO NOT modify other sections
|
||||
- Preserve all frontmatter and existing content
|
||||
45
.claude/commands/pkm:daily-setup.md
Normal file
45
.claude/commands/pkm:daily-setup.md
Normal file
@@ -0,0 +1,45 @@
|
||||
You are helping manage Daily Notes in an Obsidian vault with Periodic Notes.
|
||||
|
||||
## Context
|
||||
- Daily notes location: `~/Obsidian/Altellus/20_Notes/Journal/YYYY/Mnn/YYYY-MM-DD.md`
|
||||
- Template: `~/Obsidian/Altellus/90_Templates/Temporal/Daily.md`
|
||||
- Today's date: Use current date to determine the file path
|
||||
|
||||
## Task
|
||||
Generate or update the **🌅 Daily Notes** section of today's daily note.
|
||||
|
||||
### Steps:
|
||||
|
||||
1. **Check if today's daily note exists**
|
||||
- Path format: `~/Obsidian/Altellus/20_Notes/Journal/2025/M11/2025-11-18.md` (example)
|
||||
- If it doesn't exist, create it from the template
|
||||
|
||||
2. **Fill "어제 요약" section**
|
||||
- Read yesterday's daily note (`~/Obsidian/Altellus/20_Notes/Journal/YYYY/Mnn/YYYY-MM-DD.md`)
|
||||
- Summarize: completed tasks, main activities, key insights
|
||||
- List any incomplete tasks from yesterday
|
||||
- Update the wikilink to yesterday's date: `[[YYYY-MM-DD]]`
|
||||
|
||||
3. **Handle "오늘 이어서 할 일" section (TaskNotes format)**
|
||||
- Extract incomplete tasks from yesterday: `- [ ] [[Task Name]]`
|
||||
- Exclude completed tasks: `- [x] [[Task Name]] ✅ YYYY-MM-DD`
|
||||
- **Update scheduled date for overdue tasks:**
|
||||
- For each incomplete task from yesterday, read the task file from `00_Inbox/Tasks/`
|
||||
- If the task's `scheduled` date in frontmatter is before today, update it to today's date (YYYY-MM-DD)
|
||||
- This ensures overdue tasks are rescheduled to today
|
||||
- If user provides new tasks, add as `- [ ] [[Task Name]]` wikilinks
|
||||
- Tasks are individual markdown files in `00_Inbox/Tasks/` folder
|
||||
|
||||
4. **Fill "관련 노트" section automatically**
|
||||
- Extract wikilinks from yesterday's Notes section
|
||||
- Extract task paths from yesterday's YAML `pomodoros` array (taskPath field)
|
||||
- Remove duplicates and list as `- [[Note Name]]`
|
||||
|
||||
5. **Leave empty sections as-is**
|
||||
- 감사노트 (gratitude) - user fills this
|
||||
- 오늘의 포커스 (today's focus) - user defines
|
||||
|
||||
### Output Format
|
||||
Provide the complete content to write/update in today's daily note, preserving all frontmatter and structure.
|
||||
|
||||
**Important**: Only modify the "🌅 Daily Notes" section. Leave "## Notes", "## Retro", and "🌙 Daily Review" sections untouched.
|
||||
148
.claude/commands/pkm:gcal-add.md
Normal file
148
.claude/commands/pkm:gcal-add.md
Normal file
@@ -0,0 +1,148 @@
|
||||
You are helping add events to Google Calendar using gcalcli.
|
||||
|
||||
## Context
|
||||
- Calendar: 00_Schedule (main calendar only)
|
||||
- Tool: gcalcli CLI
|
||||
- Authentication: OAuth credentials at `~/.gcalcli_oauth`
|
||||
|
||||
## Task
|
||||
Add a new calendar event to 00_Schedule using gcalcli.
|
||||
|
||||
### Input Modes
|
||||
|
||||
**Mode 1: Interactive (no arguments)**
|
||||
- Ask user for event details
|
||||
- Collect: title, date, time, duration
|
||||
|
||||
**Mode 2: Quick add (natural language)**
|
||||
- Parse natural language input
|
||||
- Example: "Meeting with team tomorrow 2pm"
|
||||
- Use gcalcli quick command
|
||||
|
||||
**Mode 3: Structured (specific parameters)**
|
||||
- Accept: title, when, duration
|
||||
- Use gcalcli add command
|
||||
|
||||
### Steps:
|
||||
|
||||
#### Mode 1: Interactive
|
||||
|
||||
1. **Prompt for event details:**
|
||||
- Event title: "What is the event?"
|
||||
- Date: "When? (YYYY-MM-DD or 'today', 'tomorrow')"
|
||||
- Time: "What time? (HH:MM)"
|
||||
- Duration: "How long? (minutes, default 60)"
|
||||
|
||||
2. **Execute gcalcli add:**
|
||||
```bash
|
||||
gcalcli --calendar "00_Schedule" add \
|
||||
--title "Event Title" \
|
||||
--when "YYYY-MM-DD HH:MM" \
|
||||
--duration MINUTES \
|
||||
--reminder 10
|
||||
```
|
||||
|
||||
3. **Confirm creation:**
|
||||
- Display: "✅ Event created: [Title] on [Date] at [Time]"
|
||||
|
||||
#### Mode 2: Quick Add
|
||||
|
||||
1. **Parse natural language input:**
|
||||
- User provides: "Meeting tomorrow 2pm"
|
||||
|
||||
2. **Execute gcalcli quick:**
|
||||
```bash
|
||||
gcalcli --calendar "00_Schedule" quick "Meeting tomorrow 2pm"
|
||||
```
|
||||
|
||||
3. **Confirm creation:**
|
||||
- Display gcalcli confirmation message
|
||||
|
||||
#### Mode 3: Structured
|
||||
|
||||
1. **Accept parameters:**
|
||||
- title: Event title
|
||||
- when: YYYY-MM-DD HH:MM
|
||||
- duration: minutes (default 60)
|
||||
|
||||
2. **Execute gcalcli add:**
|
||||
```bash
|
||||
gcalcli --calendar "00_Schedule" add \
|
||||
--title "${title}" \
|
||||
--when "${when}" \
|
||||
--duration ${duration}
|
||||
```
|
||||
|
||||
### Output Format
|
||||
|
||||
```markdown
|
||||
✅ **Event Created:**
|
||||
|
||||
- **Title:** Deep Work Session
|
||||
- **Date:** 2025-11-19
|
||||
- **Time:** 14:00-16:00 (2 hours)
|
||||
- **Calendar:** 00_Schedule
|
||||
|
||||
View: gcalcli agenda today
|
||||
```
|
||||
|
||||
### Examples
|
||||
|
||||
**Interactive:**
|
||||
```bash
|
||||
/pkm:gcal-add
|
||||
> What is the event? Deep Work
|
||||
> When? tomorrow
|
||||
> What time? 14:00
|
||||
> How long? 120
|
||||
✅ Event created: Deep Work on 2025-11-20 at 14:00
|
||||
```
|
||||
|
||||
**Quick add:**
|
||||
```bash
|
||||
/pkm:gcal-add "Team meeting Friday 3pm"
|
||||
✅ Event created via quick add
|
||||
```
|
||||
|
||||
**Structured:**
|
||||
```bash
|
||||
/pkm:gcal-add --title "Code Review" --when "2025-11-19 16:00" --duration 60
|
||||
✅ Event created: Code Review
|
||||
```
|
||||
|
||||
### Integration with TaskNotes
|
||||
|
||||
**Create calendar event from task:**
|
||||
```bash
|
||||
# When user wants to time-block a task
|
||||
/pkm:gcal-add "[[Task Name]]" tomorrow 10:00 120
|
||||
```
|
||||
|
||||
This creates a 2-hour focus block for the task.
|
||||
|
||||
### Error Handling
|
||||
|
||||
**If gcalcli fails:**
|
||||
- Show error message
|
||||
- Check: authentication, calendar name, date format
|
||||
|
||||
**If duplicate event:**
|
||||
- Warn user: "Similar event exists at this time"
|
||||
- Confirm: "Add anyway?"
|
||||
|
||||
**If time conflict:**
|
||||
- Show: "Conflict with existing event: [Event]"
|
||||
- Suggest: Alternative time slots
|
||||
|
||||
### Default Settings
|
||||
|
||||
- **Default duration:** 60 minutes
|
||||
- **Default reminder:** 10 minutes before
|
||||
- **Calendar:** 00_Schedule (always)
|
||||
|
||||
### Notes
|
||||
|
||||
- Events sync across all Google Calendar clients
|
||||
- Supports natural language (tomorrow, next Monday, etc.)
|
||||
- Can create recurring events with --recurrence flag
|
||||
- Time zones handled by Google Calendar settings
|
||||
219
.claude/commands/pkm:gcal-block.md
Normal file
219
.claude/commands/pkm:gcal-block.md
Normal file
@@ -0,0 +1,219 @@
|
||||
You are helping create time blocks in Google Calendar from TaskNotes tasks using gcalcli.
|
||||
|
||||
## Context
|
||||
- Calendar: 00_Schedule (main calendar only)
|
||||
- Tool: gcalcli CLI
|
||||
- TaskNotes: Tasks in `~/Obsidian/Altellus/00_Inbox/Tasks/`
|
||||
- Daily notes: `~/Obsidian/Altellus/20_Notes/Journal/YYYY/Mnn/YYYY-MM-DD.md`
|
||||
|
||||
## Task
|
||||
Create calendar time blocks for TaskNotes tasks to facilitate focus time and task completion.
|
||||
|
||||
### Use Cases
|
||||
|
||||
**1. Manual time block for specific task**
|
||||
```bash
|
||||
/pkm:gcal-block "[[SWSP25 Problem Definition]]" 2025-11-19 14:00 120
|
||||
```
|
||||
Creates 2-hour focus block for the task.
|
||||
|
||||
**2. Auto-schedule incomplete tasks**
|
||||
```bash
|
||||
/pkm:gcal-block --auto
|
||||
```
|
||||
Automatically schedules incomplete tasks from today's daily note.
|
||||
|
||||
**3. Weekly planning**
|
||||
```bash
|
||||
/pkm:gcal-block --week
|
||||
```
|
||||
Creates time blocks for all tasks planned this week.
|
||||
|
||||
### Steps:
|
||||
|
||||
#### Manual Time Block
|
||||
|
||||
1. **Parse input:**
|
||||
- Task name: `[[Task Name]]` (TaskNotes wikilink)
|
||||
- Date: YYYY-MM-DD
|
||||
- Time: HH:MM
|
||||
- Duration: minutes (default 90)
|
||||
|
||||
2. **Extract task details:**
|
||||
- Read task file from `00_Inbox/Tasks/Task Name.md`
|
||||
- Get task title, priority, time estimate
|
||||
|
||||
3. **Create calendar event:**
|
||||
```bash
|
||||
gcalcli --calendar "00_Schedule" add \
|
||||
--title "🎯 [Task Title]" \
|
||||
--when "YYYY-MM-DD HH:MM" \
|
||||
--duration MINUTES \
|
||||
--description "TaskNotes: [[Task Name]]"
|
||||
```
|
||||
|
||||
4. **Confirm:**
|
||||
- Display: "✅ Time block created for [[Task Name]]"
|
||||
|
||||
#### Auto-Schedule
|
||||
|
||||
1. **Read today's daily note:**
|
||||
- Extract "오늘 이어서 할 일" section
|
||||
- Find incomplete tasks: `- [ ] [[Task Name]]`
|
||||
|
||||
2. **Check calendar availability:**
|
||||
- Fetch today's events with `/pkm:gcal-today`
|
||||
- Find free time slots (gaps between events)
|
||||
|
||||
3. **Prioritize tasks:**
|
||||
- High priority first (if specified in TaskNotes)
|
||||
- Larger time estimates first
|
||||
- Morning for deep work, afternoon for lighter tasks
|
||||
|
||||
4. **Create time blocks:**
|
||||
- For each task, find suitable time slot
|
||||
- Create gcalcli event with task reference
|
||||
- Default duration: 90 minutes (pomodoro-friendly)
|
||||
|
||||
5. **Summary:**
|
||||
```markdown
|
||||
✅ **Auto-scheduled 3 tasks:**
|
||||
|
||||
- 09:00-10:30: [[SWSP25 Problem Definition]]
|
||||
- 11:00-12:00: [[Long horizon action model paper search]]
|
||||
- 14:00-15:30: [[Claude 명령 테스트 및 디버깅]]
|
||||
|
||||
Total focus time: 4 hours
|
||||
```
|
||||
|
||||
#### Weekly Planning
|
||||
|
||||
1. **Read this week's tasks:**
|
||||
- From weekly note or aggregated daily notes
|
||||
- Extract all incomplete tasks: `- [ ] [[Task Name]]`
|
||||
|
||||
2. **Distribute across week:**
|
||||
- Monday-Friday scheduling
|
||||
- Balance workload (max 4 hours deep work/day)
|
||||
- Respect existing calendar events
|
||||
|
||||
3. **Create blocks:**
|
||||
- Spread tasks across available time slots
|
||||
- Group similar tasks (context switching reduction)
|
||||
|
||||
### Output Format
|
||||
|
||||
**Single task:**
|
||||
```markdown
|
||||
✅ **Time Block Created:**
|
||||
|
||||
- **Task:** [[SWSP25 Problem Definition]]
|
||||
- **Time:** 2025-11-19 14:00-16:00 (2 hours)
|
||||
- **Calendar:** 00_Schedule
|
||||
|
||||
Focus time secured! 🎯
|
||||
```
|
||||
|
||||
**Auto-schedule:**
|
||||
```markdown
|
||||
✅ **Auto-scheduled 4 tasks:**
|
||||
|
||||
**Morning (Deep Work):**
|
||||
- 09:00-10:30: [[SWSP25 Problem Definition]] 🍅🍅🍅
|
||||
- 11:00-12:30: [[ELEGNT 논문 리뷰]] 🍅🍅🍅
|
||||
|
||||
**Afternoon:**
|
||||
- 14:00-15:00: [[Documentation 업데이트]] 🍅🍅
|
||||
- 15:30-16:30: [[Code Review]] 🍅🍅
|
||||
|
||||
**Total:** 5.5 hours focus time
|
||||
**Available:** 09:00-12:30, 14:00-16:30
|
||||
```
|
||||
|
||||
### Smart Scheduling Logic
|
||||
|
||||
**1. Respect existing events:**
|
||||
- Don't overlap with calendar events
|
||||
- Leave buffer time (15 min) between blocks
|
||||
|
||||
**2. Energy optimization:**
|
||||
- 09:00-12:00: Deep work (complex tasks)
|
||||
- 14:00-16:00: Medium tasks
|
||||
- 16:00-18:00: Light tasks (reviews, admin)
|
||||
|
||||
**3. Pomodoro-friendly durations:**
|
||||
- 25 min = 🍅
|
||||
- 50 min = 🍅🍅
|
||||
- 90 min = 🍅🍅🍅 (ideal)
|
||||
- 120 min = 🍅🍅🍅🍅
|
||||
|
||||
**4. Task batching:**
|
||||
- Group similar tasks (reading papers, coding, writing)
|
||||
- Reduce context switching
|
||||
|
||||
### Integration with TaskNotes
|
||||
|
||||
**Time estimate from task:**
|
||||
```yaml
|
||||
---
|
||||
timeEstimate: 120 # minutes
|
||||
priority: high
|
||||
---
|
||||
```
|
||||
|
||||
Use task's `timeEstimate` for block duration.
|
||||
|
||||
**Update task after scheduling:**
|
||||
```yaml
|
||||
---
|
||||
scheduled: 2025-11-19
|
||||
calendarBlock: true
|
||||
---
|
||||
```
|
||||
|
||||
### Error Handling
|
||||
|
||||
**If no free time:**
|
||||
- Message: "No available time slots today. Calendar is full."
|
||||
- Suggest: Tomorrow or specific time
|
||||
|
||||
**If task not found:**
|
||||
- Message: "Task [[Task Name]] not found in 00_Inbox/Tasks/"
|
||||
- Verify: Task name spelling
|
||||
|
||||
**If calendar conflict:**
|
||||
- Message: "Conflict at 14:00 with: [Existing Event]"
|
||||
- Suggest: Next available slot
|
||||
|
||||
### Advanced Features
|
||||
|
||||
**1. Focus mode:**
|
||||
```bash
|
||||
/pkm:gcal-block --focus 4
|
||||
```
|
||||
Create 4-hour protected deep work block (no meetings).
|
||||
|
||||
**2. Recurring blocks:**
|
||||
```bash
|
||||
/pkm:gcal-block "[[Weekly Review]]" --recur weekly-friday-16:00
|
||||
```
|
||||
|
||||
**3. Flexible timing:**
|
||||
```bash
|
||||
/pkm:gcal-block --auto --prefer-morning
|
||||
```
|
||||
Schedule tasks in morning hours only.
|
||||
|
||||
### Defaults
|
||||
|
||||
- **Duration:** 90 minutes (🍅🍅🍅)
|
||||
- **Buffer:** 15 minutes between blocks
|
||||
- **Deep work hours:** 09:00-12:00
|
||||
- **Event prefix:** 🎯 (focus block indicator)
|
||||
|
||||
### Notes
|
||||
|
||||
- Time blocks appear in Google Calendar immediately
|
||||
- Sync across all devices
|
||||
- Can reschedule by dragging in Google Calendar
|
||||
- Task completion doesn't auto-delete block (manual cleanup)
|
||||
240
.claude/commands/pkm:gcal-complete.md
Normal file
240
.claude/commands/pkm:gcal-complete.md
Normal file
@@ -0,0 +1,240 @@
|
||||
You are helping mark task completion in Google Calendar using gcalcli.
|
||||
|
||||
## Context
|
||||
- Calendar: 00_Schedule (main calendar only)
|
||||
- Tool: gcalcli CLI
|
||||
- TaskNotes: Tasks complete with `- [x] [[Task Name]] ✅ YYYY-MM-DD`
|
||||
- Integration: Sync task completion status to calendar
|
||||
|
||||
## Task
|
||||
When a TaskNotes task is marked complete, update the corresponding calendar event to reflect completion.
|
||||
|
||||
### Use Cases
|
||||
|
||||
**1. Mark single task complete:**
|
||||
```bash
|
||||
/pkm:gcal-complete "[[SWSP25 Problem Definition]]"
|
||||
```
|
||||
Updates calendar event to show task is done.
|
||||
|
||||
**2. Auto-sync completions:**
|
||||
```bash
|
||||
/pkm:gcal-complete --sync
|
||||
```
|
||||
Syncs all completed tasks from today's daily note to calendar.
|
||||
|
||||
**3. Daily review integration:**
|
||||
Called automatically by `/pkm:daily-review` to update calendar after review.
|
||||
|
||||
### Steps:
|
||||
|
||||
#### Single Task Completion
|
||||
|
||||
1. **Parse task name:**
|
||||
- Input: `[[Task Name]]`
|
||||
- Extract task name from wikilink
|
||||
|
||||
2. **Find calendar event:**
|
||||
```bash
|
||||
gcalcli --calendar "00_Schedule" \
|
||||
search "Task Name"
|
||||
```
|
||||
Look for events with task name in title or description.
|
||||
|
||||
3. **Update event:**
|
||||
```bash
|
||||
# Option 1: Prepend ✅ to title
|
||||
gcalcli --calendar "00_Schedule" \
|
||||
edit "EVENT_ID" \
|
||||
--title "✅ Task Name"
|
||||
|
||||
# Option 2: Add completion note to description
|
||||
gcalcli --calendar "00_Schedule" \
|
||||
edit "EVENT_ID" \
|
||||
--description "Completed: YYYY-MM-DD HH:MM"
|
||||
```
|
||||
|
||||
4. **Confirm:**
|
||||
```markdown
|
||||
✅ Calendar updated: [[Task Name]] marked complete
|
||||
```
|
||||
|
||||
#### Auto-Sync Today's Completions
|
||||
|
||||
1. **Read today's daily note:**
|
||||
- Path: `~/Obsidian/Altellus/20_Notes/Journal/YYYY/Mnn/YYYY-MM-DD.md`
|
||||
- Extract "오늘 완료" section
|
||||
- Find: `- [x] [[Task Name]] ✅ YYYY-MM-DD`
|
||||
|
||||
2. **For each completed task:**
|
||||
- Search calendar for matching event
|
||||
- If found, update with ✅ marker
|
||||
- If not found, skip (not time-blocked)
|
||||
|
||||
3. **Summary:**
|
||||
```markdown
|
||||
✅ **Calendar sync complete:**
|
||||
|
||||
Updated events:
|
||||
- ✅ [[Task: Daily 템플릿 확정]]
|
||||
- ✅ [[ELEGNT 논문 리뷰]]
|
||||
|
||||
Not in calendar:
|
||||
- [[Quick email reply]] (not time-blocked)
|
||||
|
||||
Total synced: 2/3 tasks
|
||||
```
|
||||
|
||||
### Output Format
|
||||
|
||||
**Single task:**
|
||||
```markdown
|
||||
✅ **Calendar Event Updated:**
|
||||
|
||||
- **Task:** [[SWSP25 Problem Definition]]
|
||||
- **Event:** "🎯 SWSP25 Problem Definition" → "✅ SWSP25 Problem Definition"
|
||||
- **Completed:** 2025-11-19 15:45
|
||||
|
||||
Calendar reflects task completion ✅
|
||||
```
|
||||
|
||||
**Sync summary:**
|
||||
```markdown
|
||||
✅ **Daily Completion Sync:**
|
||||
|
||||
**Updated (3):**
|
||||
- ✅ [[Task: Daily 템플릿 확정]] (09:00-10:30)
|
||||
- ✅ [[Task: Weekly Summary 재작성]] (11:00-12:00)
|
||||
- ✅ [[ELEGNT 논문 리뷰]] (15:00-17:00)
|
||||
|
||||
**Not time-blocked (2):**
|
||||
- ✅ [[Quick email reply]]
|
||||
- ✅ [[Update README]]
|
||||
|
||||
**Calendar sync:** 3/5 tasks
|
||||
```
|
||||
|
||||
### Update Strategies
|
||||
|
||||
**Strategy 1: Title Update (Recommended)**
|
||||
- Before: `🎯 SWSP25 Problem Definition`
|
||||
- After: `✅ SWSP25 Problem Definition`
|
||||
- Visual: Easy to spot in calendar
|
||||
- Preserves: Original event structure
|
||||
|
||||
**Strategy 2: Color Change**
|
||||
- Change event color to green (completed)
|
||||
- Requires: gcalcli color support
|
||||
- Visual: Color-coded completion
|
||||
|
||||
**Strategy 3: Description Note**
|
||||
- Add to description: `Completed: 2025-11-19 15:45`
|
||||
- Preserves: Title unchanged
|
||||
- Detail: Exact completion timestamp
|
||||
|
||||
**Default: Strategy 1 (Title Update)**
|
||||
|
||||
### Integration with Daily Review
|
||||
|
||||
`/pkm:daily-review` automatically calls this command:
|
||||
|
||||
```bash
|
||||
# Daily review workflow:
|
||||
1. Extract completed tasks
|
||||
2. Update calendar events: /pkm:gcal-complete --sync
|
||||
3. Generate review section
|
||||
```
|
||||
|
||||
User sees:
|
||||
```markdown
|
||||
### 오늘 완료
|
||||
- [x] [[Task: Daily 템플릿 확정]] ✅ 2025-11-18
|
||||
_Calendar updated_ ✅
|
||||
```
|
||||
|
||||
### Smart Matching
|
||||
|
||||
**Find events by:**
|
||||
1. Exact title match: "🎯 Task Name" = "Task Name"
|
||||
2. Description match: Contains "TaskNotes: [[Task Name]]"
|
||||
3. Fuzzy match: Similar title (85%+ match)
|
||||
4. Time range: Within today's events only
|
||||
|
||||
**Disambiguation:**
|
||||
If multiple matches:
|
||||
- Prefer: Today's events over future
|
||||
- Prefer: Exact title match over fuzzy
|
||||
- Ask: User to confirm if ambiguous
|
||||
|
||||
### Error Handling
|
||||
|
||||
**If event not found:**
|
||||
- Message: "No calendar event found for [[Task Name]]"
|
||||
- Reason: "Task was not time-blocked"
|
||||
- Action: Skip (not an error)
|
||||
|
||||
**If multiple matches:**
|
||||
- Message: "Multiple events found for [[Task Name]]:"
|
||||
- List: All matching events with times
|
||||
- Ask: "Which one to update? (1/2/3)"
|
||||
|
||||
**If already marked complete:**
|
||||
- Message: "Event already marked complete: ✅ [[Task Name]]"
|
||||
- Action: Skip (idempotent)
|
||||
|
||||
**If gcalcli fails:**
|
||||
- Message: "Unable to update calendar. Check authentication."
|
||||
- Suggest: Run `gcalcli init`
|
||||
|
||||
### Advanced Features
|
||||
|
||||
**1. Batch update:**
|
||||
```bash
|
||||
/pkm:gcal-complete --all
|
||||
```
|
||||
Updates all completed tasks from today's note.
|
||||
|
||||
**2. Retroactive sync:**
|
||||
```bash
|
||||
/pkm:gcal-complete --date 2025-11-18
|
||||
```
|
||||
Syncs completions from a past date.
|
||||
|
||||
**3. Undo completion:**
|
||||
```bash
|
||||
/pkm:gcal-complete --undo "[[Task Name]]"
|
||||
```
|
||||
Removes ✅ marker (if task was uncompleted).
|
||||
|
||||
### Completion Metadata
|
||||
|
||||
**Store in event description:**
|
||||
```
|
||||
Completed: 2025-11-19 15:45
|
||||
Pomodoros: 3 🍅🍅🍅
|
||||
Notes: Finished earlier than expected
|
||||
```
|
||||
|
||||
**Benefits:**
|
||||
- Track actual vs estimated time
|
||||
- Review completion patterns
|
||||
- Inform future time estimates
|
||||
|
||||
### Weekly Review Integration
|
||||
|
||||
Weekly review shows:
|
||||
```markdown
|
||||
### 주간 완료 태스크
|
||||
- [x] [[Task A]] ✅ (90min, est 120min) - 25% faster
|
||||
- [x] [[Task B]] ✅ (120min, est 90min) - 33% slower
|
||||
|
||||
**Insights:** Complex tasks taking longer than estimated.
|
||||
```
|
||||
|
||||
### Notes
|
||||
|
||||
- Only updates time-blocked tasks (calendar events exist)
|
||||
- Non-blocked tasks skip update (normal behavior)
|
||||
- Preserves event time and other details
|
||||
- Completion marker: ✅ (universally recognized)
|
||||
- Can manually undo in Google Calendar UI
|
||||
82
.claude/commands/pkm:gcal-today.md
Normal file
82
.claude/commands/pkm:gcal-today.md
Normal file
@@ -0,0 +1,82 @@
|
||||
You are helping fetch today's Google Calendar events using gcalcli.
|
||||
|
||||
## Context
|
||||
- Calendar: 00_Schedule (main calendar only)
|
||||
- Tool: gcalcli CLI
|
||||
- Authentication: OAuth credentials at `~/.gcalcli_oauth`
|
||||
|
||||
## Task
|
||||
Fetch and display today's calendar events from 00_Schedule calendar using gcalcli.
|
||||
|
||||
### Steps:
|
||||
|
||||
1. **Determine today's date**
|
||||
- Get current date in YYYY-MM-DD format
|
||||
- Set time range: 00:00 to 23:59
|
||||
|
||||
2. **Execute gcalcli command**
|
||||
```bash
|
||||
gcalcli --calendar "00_Schedule" agenda "YYYY-MM-DD 00:00" "YYYY-MM-DD 23:59"
|
||||
```
|
||||
|
||||
3. **Parse gcalcli output**
|
||||
- gcalcli returns format: `HH:MM Event Title`
|
||||
- Extract start time, end time (if available), and event title
|
||||
|
||||
4. **Format for PKM review**
|
||||
- Clean and format output
|
||||
- Group by time
|
||||
- Count total events
|
||||
|
||||
### Output Format
|
||||
|
||||
```markdown
|
||||
**2025-11-19 Calendar Events:**
|
||||
|
||||
- 09:00-10:00: Team Standup
|
||||
- 11:00-12:00: Deep Work Block
|
||||
- 14:00-15:00: 1-on-1 with Sarah
|
||||
- 16:00-17:00: Code Review Session
|
||||
|
||||
**Total:** 4 events
|
||||
```
|
||||
|
||||
### gcalcli Command
|
||||
|
||||
```bash
|
||||
gcalcli --calendar "00_Schedule" \
|
||||
agenda \
|
||||
"$(date '+%Y-%m-%d') 00:00" \
|
||||
"$(date '+%Y-%m-%d') 23:59"
|
||||
```
|
||||
|
||||
### Error Handling
|
||||
|
||||
**If gcalcli not installed:**
|
||||
- Message: "gcalcli not found. Install with: pip install gcalcli"
|
||||
- Provide installation instructions
|
||||
|
||||
**If not authenticated:**
|
||||
- Message: "Not authenticated. Run: gcalcli init"
|
||||
- Guide OAuth setup process
|
||||
|
||||
**If no events:**
|
||||
- Message: "No calendar events scheduled for today."
|
||||
|
||||
**If calendar not found:**
|
||||
- Message: "Calendar '00_Schedule' not found. Check calendar name in Google Calendar."
|
||||
|
||||
### Integration with Daily Review
|
||||
|
||||
This command is automatically called by `/pkm:daily-review` to populate the "시간 사용" section.
|
||||
|
||||
**Daily review will combine:**
|
||||
- Pomodoros from TaskNotes YAML
|
||||
- Calendar events from this command
|
||||
|
||||
### Notes
|
||||
|
||||
- Only fetches from 00_Schedule calendar
|
||||
- Real-time data from Google Calendar API
|
||||
- Requires internet connection
|
||||
- OAuth token refreshes automatically
|
||||
69
.claude/commands/pkm:monthly-review.md
Normal file
69
.claude/commands/pkm:monthly-review.md
Normal file
@@ -0,0 +1,69 @@
|
||||
You are helping complete the Monthly Review in an Obsidian vault with Periodic Notes.
|
||||
|
||||
## Context
|
||||
- Monthly notes location: `~/Obsidian/Altellus/20_Notes/Journal/YYYY/Mnn/YYYY-Mmm.md`
|
||||
- Weekly notes location: `~/Obsidian/Altellus/20_Notes/Journal/YYYY/Mnn/YYYY-Www.md`
|
||||
- Current month: Calculate from today's date
|
||||
- Review period: All weekly notes from the current month (typically 4-5 weeks)
|
||||
|
||||
## Task
|
||||
Generate or update the **📅 Monthly Summary** and all sections of this month's monthly note.
|
||||
|
||||
### Steps:
|
||||
|
||||
1. **Identify the monthly note**
|
||||
- Calculate current month (e.g., `2025-M11` for November)
|
||||
- Path format: `~/Obsidian/Altellus/20_Notes/Journal/2025/M11/2025-M11.md`
|
||||
- Create from template if doesn't exist
|
||||
|
||||
2. **Aggregate weekly notes (TaskNotes format)**
|
||||
- Identify all weekly notes in the current month
|
||||
- Read each weekly note and extract highlights, KPIs, insights, blockers
|
||||
- Extract completed tasks: `- [x] [[Task Name]]`
|
||||
|
||||
3. **Fill "월간 하이라이트" (Monthly Highlights) - TaskNotes format**
|
||||
- List 5-7 major achievements across the month
|
||||
- Use TaskNotes format: `- [x] [[Task Name]]` for completed highlights
|
||||
- Significant milestones and key wins
|
||||
|
||||
4. **Fill "월간 KPI" (Monthly KPIs) - TaskNotes format**
|
||||
- **평균 완료율**: Average of weekly completion rates
|
||||
- **총 Pomodoros**: Sum of all weekly pomodoros
|
||||
- **주간 평균**: Total pomodoros / number of weeks
|
||||
- Display with emoji: `총 🍅 x 140 (4주간)`
|
||||
- Example: `- 평균 완료율: 76% (across 4 weeks)`
|
||||
|
||||
5. **Fill "목표 진행도" (Goal Progress)**
|
||||
- Review monthly or quarterly goals
|
||||
- Track progress on each goal
|
||||
- Format: `- [[Goal Name]] — X% complete / status`
|
||||
|
||||
6. **Fill "🧠 Monthly Themes & Patterns"**
|
||||
- Identify recurring themes across multiple weeks
|
||||
- What patterns emerged? What was most effective?
|
||||
- Any systemic issues needing attention?
|
||||
|
||||
7. **Fill "📊 Project Portfolio"**
|
||||
- List all projects worked on during the month
|
||||
- Current status and time investment per project
|
||||
|
||||
8. **Fill "🚧 Persistent Blockers" - TaskNotes format**
|
||||
- Blockers appearing in 2+ weekly reviews: `- [ ] [[Task Name]]`
|
||||
- Format: `- [ ] [[Task Name]] — X주 연속 미완료`
|
||||
- Long-term obstacles still unresolved
|
||||
- Systemic issues requiring strategic solutions
|
||||
|
||||
9. **Fill "🎯 다음 달 목표" (Next Month Objectives) - TaskNotes format**
|
||||
- Based on monthly insights and persistent blockers
|
||||
- 3-5 key objectives for next month
|
||||
- Format as TaskNotes checklist: `- [ ] [[Objective]]`
|
||||
- Prioritize blocker resolution
|
||||
|
||||
### Output Format
|
||||
Provide the complete monthly note content with all sections filled.
|
||||
|
||||
**Important**:
|
||||
- Aggregate data from actual weekly notes, not assumptions
|
||||
- Calculate real numbers for KPIs from weekly data
|
||||
- Look for long-term trends and patterns
|
||||
- Preserve frontmatter and template structure
|
||||
67
.claude/commands/pkm:weekly-review.md
Normal file
67
.claude/commands/pkm:weekly-review.md
Normal file
@@ -0,0 +1,67 @@
|
||||
You are helping complete the Weekly Review in an Obsidian vault with Periodic Notes.
|
||||
|
||||
## Context
|
||||
- Weekly notes location: `~/Obsidian/Altellus/20_Notes/Journal/YYYY/Mnn/YYYY-Www.md`
|
||||
- Daily notes location: `~/Obsidian/Altellus/20_Notes/Journal/YYYY/Mnn/YYYY-MM-DD.md`
|
||||
- Current week: Calculate from today's date
|
||||
- Review period: Past 7 days of daily notes
|
||||
|
||||
## Task
|
||||
Generate or update the **📆 Weekly Summary** and all sections of this week's weekly note.
|
||||
|
||||
### Steps:
|
||||
|
||||
1. **Identify the weekly note**
|
||||
- Calculate current week number (e.g., `2025-W46`)
|
||||
- Path format: `~/Obsidian/Altellus/20_Notes/Journal/2025/M11/2025-W46.md`
|
||||
- Create from template if doesn't exist
|
||||
|
||||
2. **Aggregate daily notes (TaskNotes format)**
|
||||
- Read the past 7 daily notes from `~/Obsidian/Altellus/20_Notes/Journal/`
|
||||
- Extract completed tasks: `- [x] [[Task Name]] ✅ YYYY-MM-DD`
|
||||
- Extract incomplete tasks: `- [ ] [[Task Name]]`
|
||||
- Count pomodoros from YAML `pomodoros` array in each note
|
||||
|
||||
3. **Fill "주간 하이라이트" (Weekly Highlights)**
|
||||
- List 3-5 major accomplishments this week
|
||||
- Use TaskNotes format: `- [x] [[Task Name]]` for completed highlights
|
||||
- What moved forward? What was completed?
|
||||
|
||||
4. **Fill "KPI & 지표" (KPIs & Metrics) - TaskNotes format**
|
||||
- **완료율**: Count completed vs total TaskNotes tasks from 7 daily notes
|
||||
- **총 Pomodoros**: Sum `pomodoros` array length from all 7 daily notes
|
||||
- Display total with emoji: `총 🍅 x 35 (7일간)`
|
||||
- Example: `- 완료율: 23/30 tasks (77%)`
|
||||
|
||||
5. **Fill "주요 프로젝트 상태" (Project Status)**
|
||||
- Identify projects mentioned across the week
|
||||
- Format: `- [[Project Name]] — status description`
|
||||
|
||||
6. **Fill "🧠 Insights"**
|
||||
- Patterns discovered across the week
|
||||
- What worked well consistently?
|
||||
- What recurring issues appeared?
|
||||
|
||||
7. **Fill "⏱ Time & Energy"**
|
||||
- Project-wise time breakdown
|
||||
- Energy flow observations (when was most productive?)
|
||||
|
||||
8. **Fill "🧱 Blockers" - TaskNotes format**
|
||||
- Find tasks appearing 3+ days without completion: `- [ ] [[Task Name]]`
|
||||
- Recurring obstacles
|
||||
- External dependencies blocking progress
|
||||
- Format: `- [ ] [[Task Name]] — X일 연속 미완료`
|
||||
|
||||
9. **Fill "🎯 다음 주 우선순위" (Next Week Priorities) - TaskNotes format**
|
||||
- Based on blockers and incomplete work
|
||||
- Format as TaskNotes checklist: `- [ ] [[Priority Task]]`
|
||||
- Connect to blocker resolutions
|
||||
- Prioritize delayed tasks
|
||||
|
||||
### Output Format
|
||||
Provide the complete weekly note content with all sections filled.
|
||||
|
||||
**Important**:
|
||||
- Pull data from actual daily notes, not assumptions
|
||||
- Calculate real numbers for KPIs from TaskNotes YAML
|
||||
- Preserve frontmatter and template structure
|
||||
Reference in New Issue
Block a user