Help us improve
Share bugs, ideas, or general feedback.
Interactive timesheet entry — collects work description, date, start/end times via prompts, calculates hours, appends to .campaign/timesheet.md
npx claudepluginhub cgbarlow/skills --plugin woolies-shopperHow this skill is triggered — by the user, by Claude, or both
Slash command
/doview-image-retriever:timesheetThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Update the project timesheet at `.campaign/timesheet.md`.
Tracks time on tasks with timers or manual entries and generates timesheet reports. Use when logging hours, starting/stopping timers, or asking 'how much time was spent?'
Automates Clockify time tracking via natural language: create/delete time entries, query history, manage workspaces, and audit team activity.
Time tracking, worklogs, and time reports. TRIGGERS: 'log time', 'time spent on', 'log hours', 'log work', 'worklog', 'time tracking', 'timesheet', 'how much time', 'time logged', 'time report', 'export timesheet', 'set estimate', 'remaining estimate', 'original estimate'. Use for time-related queries and operations on issues. NOT FOR: SLA tracking (use jira-jsm), date-based issue searches (use jira-search), issue field updates unrelated to time (use jira-issue).
Share bugs, ideas, or general feedback.
Update the project timesheet at .campaign/timesheet.md.
Before creating a new timesheet, search for an existing one using Glob (**/.campaign/timesheet.md). If found, use that path. Only create a new one if none exists — create it in the nearest directory that already has a .campaign/ folder, or in the project root.
The timesheet file may contain a Timezone: line (e.g. Timezone: Pacific/Auckland). When getting the current time via Bash, always use this timezone: TZ=<timezone> date '+%Y-%m-%d %I:%M %p'. If no timezone line is found in the timesheet, ask the user for their timezone using AskUserQuestion and add it to the timesheet file (below the Instructions heading).
If the user's arguments contain "clock in":
date via Bash with the configured timezone, round down to the nearest 15 minutes (e.g. 8:37 PM → 8:30 PM)(Clocked in... description pending), the rounded start time, and leave End Time and Hours blank (—)If the user's arguments contain "clock out":
(Clocked in... description pending) as its descriptiondate via Bash with the configured timezone, round down to the nearest 15 minutesAskUserQuestion to collect the description of work doneIf the user is NOT clocking in/out, follow this flow:
AskUserQuestion to collect the following for each entry:
.campaign/timesheet.mdEvery time an entry is added, edited, or removed, recalculate the Weekly Summary table above the Entries table. Weeks are identified by their Monday start date (ISO week, Mon–Sun). The total hours line below the weekly summary must always equal the sum of all entry hours.
Calculating the week-starting Monday for a date:
For example, Sunday 2026-03-01 belongs to the week starting Monday 2026-02-23 (subtract 6 days). Monday 2026-03-02 starts a new week. Always use this calculation — do NOT treat the entry date itself as the week start.
If .campaign/timesheet.md does not exist, create it with this content:
# Timesheet
## How to update
Run `/timesheet` in Claude Code to add entries, or use clock in/out:
- `/timesheet clock in` — starts a new entry at the current time
- `/timesheet clock out` — ends the open entry and prompts for a description
- `/timesheet` — manually add an entry (date, description, start/end times)
Timezone: (ask user)
---
## Weekly Summary
| Week Starting | Hours |
|---------------|-------|
**Total: 0.00 hours**
---
## Entries
| Date | Description | Start Time | End Time | Hours |
|------------|-------------|------------|----------|-------|