Time capture patterns and multi-source aggregation for timesheet generation
From obsidian-productivitynpx claudepluginhub bloknayrb/claudestuffThis skill uses the workspace's default tool permissions.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Executes pre-written implementation plans: critically reviews, follows bite-sized steps exactly, runs verifications, tracks progress with checkpoints, uses git worktrees, stops on blockers.
Guides idea refinement into designs: explores context, asks questions one-by-one, proposes approaches, presents sections for approval, writes/review specs before coding.
Patterns for capturing and aggregating time from multiple sources to generate accurate timesheets with minimal manual entry.
Primary source for scheduled time.
Extraction:
Event: "Project Alpha - Weekly Sync"
Start: 2025-01-22 10:00
End: 2025-01-22 11:00
Duration: 1.0 hours
Project: Project Alpha (from title or category)
Filtering rules:
Validated time with context.
Meeting notes often capture actual duration vs. scheduled:
---
date: 2025-01-22
start: 10:00
end: 11:15 # Actual end (went over)
attendees: [Client A, Manager]
project: Project Alpha
---
Priority: Meeting notes override calendar when both exist (actual > scheduled).
Task-specific time tracking.
TaskNotes may include time logged:
---
time_logged:
- date: 2025-01-22
hours: 2.5
description: "Analysis work"
---
Aggregation: Sum time_logged entries per project.
Manual capture via /capture-time.
Daily notes contain time entries:
## Time Log
- 09:00-10:00 | Project Alpha | Email review and responses
- 10:00-11:15 | Project Alpha | Weekly sync (ran over)
- 11:15-12:00 | Project Beta | Document review
- 13:00-15:30 | Project Alpha | Analysis work
- 15:30-16:00 | Admin | Timesheet review
Parsing: Time range + Project + Description
End-of-day capture when other sources insufficient.
Prompt user for:
Write to daily note in standard format.
FOR each day in week:
1. LOAD calendar events
- Filter to work events
- Map to projects
- Calculate durations
2. LOAD meeting notes for day
- Override calendar duration if exists
- Use actual start/end times
3. LOAD TaskNote time_logged
- Sum entries by project
4. LOAD daily note time entries
- Parse time log section
- Add to project totals
5. DEDUPLICATE
- Meeting notes win over calendar
- Explicit entries win over inferred
- Flag conflicts for review
6. CALCULATE daily totals by project
AGGREGATE to weekly totals by project
| Calendar Category | Project |
|---|---|
| "Client A" | Project Alpha |
| "Client B" | Project Beta |
| "Internal" | Admin |
| "Training" | Professional Development |
"Project Alpha - *" → Project Alpha
"[Client B] *" → Project Beta
"1:1 with *" → Admin (unless project specified)
"Training: *" → Professional Development
If using Obsidian properties:
project: Project Alpha
client: Client A
**Monday, January 20** - Total: 8.5 hours
Project Alpha (5.0 hours)
• 09:00-10:00 Email review
• 10:00-11:15 Weekly sync
• 13:00-15:30 Analysis work
• 15:45-16:00 Status update
Project Beta (2.5 hours)
• 11:15-12:00 Document review
• 14:00-15:30 Client call
Admin (1.0 hours)
• 16:00-17:00 Timesheet and planning
HOURS BY PROJECT:
┌─────────────────────────┬──────────┐
│ Project │ Hours │
├─────────────────────────┼──────────┤
│ Project Alpha │ 24.5 │
│ Project Beta │ 12.0 │
│ Admin │ 3.5 │
├─────────────────────────┼──────────┤
│ TOTAL │ 40.0 │
└─────────────────────────┴──────────┘
HOURS BY DAY:
Mon: 8.5 | Tue: 8.0 | Wed: 7.5 | Thu: 8.0 | Fri: 8.0
Rate data quality:
| Confidence | Criteria |
|---|---|
| High (90%+) | Meeting notes with times, manual entries |
| Medium (70%) | Calendar events, TaskNote logging |
| Low (50%) | Inferred from context, estimated |
Overall confidence = weighted average of sources used.
Report confidence in output:
Data confidence: 85%
Sources: Calendar (60%), Meeting notes (30%), Manual (10%)
Identify unaccounted time:
Expected work hours: 8.0
Logged hours: 6.5
Gap: 1.5 hours
Possible explanations:
- No events 11:00-12:00 (lunch?)
- No events 16:00-17:00 (admin work?)
Recommend: Run /capture-time for missing periods
Show today's logged time
Today (Jan 22) - Currently logged: 5.5 hours
• 09:00-10:00 | Project Alpha | Email
• 10:00-11:15 | Project Alpha | Meeting
• 13:00-15:30 | Project Beta | Analysis
Identify gaps
Gaps detected:
• 11:15-12:00 (45 min)
• 15:30-17:00 (1.5 hours)
Prompt for each gap
What did you do 11:15-12:00?
> [User: Lunch]
What did you do 15:30-17:00?
> [User: Worked on Project Alpha documentation]
Update daily note
Added to time log:
- 15:30-17:00 | Project Alpha | Documentation work
New total: 7.0 hours (excluding lunch)
/timesheet command should:
| Issue | Handling |
|---|---|
| Calendar unavailable | Proceed with other sources, flag low confidence |
| No data for day | Flag as gap, recommend /capture-time |
| Conflicting entries | Prefer explicit (meeting notes) over inferred (calendar) |
| Overlapping times | Flag for review, don't double-count |
| Project not recognized | Default to "General" or prompt user |