alpacalabsllc/timetracker
Reconstruct daily or weekly project work from dated plans, decisions, meetings, site reports, tasks, and other artifacts, then append user-confirmed manual entries to TIMELOG.md. Use for "log my time," "what did I work on," daily timesheets, or weekly time reconstruction. Never infer hours, start/stop times, billing status, or completeness from activity signals.
npx skills add https://github.com/AlpacaLabsLLC/skills-for-architects --skill timetracker
Reconstruct defensible work descriptions from project evidence, ask the user for every duration, preview the proposed rows, and append confirmed entries to one project-level TIMELOG.md.
/as:timetracker today
/as:timetracker yesterday
/as:timetracker this week
/as:timetracker 2026-07-13 through 2026-07-17
/as:timetracker correct E0012: this was 1.5 hours, not 2.0
E0001, E0002, and so on. Allocate the next ID as the highest parseable existing E-number plus one, including corrective entries.TIMELOG.md cannot be parsed reliably, report the problem and stop before mutation. Do not silently replace or repair it.Before discovery or logging, resolve one project root:
PROJECT.md or established project marker, in this shared order: meetings/, site-reports/, decisions/, plans/, docs/plans/, TASKS.md, TIMELOG.md, CLAUDE.md, AGENTS.md, .claude/, .codex/.git rev-parse --show-toplevel as the outer search boundary, not the automatic winner. A nearer marker inside a monorepo takes precedence.PROJECT.md over other markers at the same level. If genuinely conflicting candidates remain, show both project-relative candidates and ask one target question.Resolve the root once. TIMELOG.md, discovery, and all persisted source links use this root. Git is optional; the workflow must still operate when the project is not a repository or git history is unavailable.
Interpret a day, week, or explicit inclusive date range in the user's local time. Show the resolved dates before discovery. If the request omits a period, ask for one rather than assuming.
Read <project-root>/TIMELOG.md when it exists. Otherwise prepare to create it from the bundled template after the user confirms the first append.
Validate existing rows before continuing:
E0001-style ID, work date, positive decimal hours, description, and at least one source link.Corrects E#### and does not change that original row.Build an index of normalized project-relative source paths and any headings or stable item IDs already cited. Use it to detect evidence that may already have been logged.
Search only within the requested period and relevant project root. Inspect:
plans/*.md and docs/plans/*.mddecisions/*.mdmeetings/*.mdsite-reports/*.mdTASKS.mdPROJECT.mdUse this evidence hierarchy for the candidate work date:
low confidence — filesystem mtime and ask the user whether it belongs in the period.An artifact publication or edit date may differ from when the described work occurred. Prefer the most semantically relevant explicit date and make ambiguity visible.
Report every search path inspected and every path that could not be parsed. Do not collapse parse failure into “no evidence.”
Create concise descriptions of observable work, not claims about effort or completion. Group evidence into one candidate when sources describe the same work event, topic, task ID, plan unit, meeting action, or decision. Preserve all supporting source links in the grouped candidate.
Do not merge merely because artifacts share a date. Keep distinct work as distinct candidates. Do not split one linked activity into multiple rows to inflate detail.
Compare candidates with the existing source index:
TIMELOG.md.Present the draft with blank durations:
| Select | Work date | Draft description | Hours | Confidence | Sources | Existing entry |
|---|---|---|---:|---|---|---|
| [ ] | YYYY-MM-DD | ... | _(required)_ | explicit artifact date | source path + item | — |
Ask the user which candidates to log, how many hours belong to each selected row, and any description changes. Meeting duration may appear in the source, but must never prefill Hours.
For every selected candidate:
YYYY-MM-DD within the requested period, unless the user explicitly corrects the period.Ask for missing values; do not append a partial row.
Allocate sequential permanent IDs and show the exact Markdown rows to be appended. Ask for explicit confirmation. On confirmation:
TIMELOG.md from templates/timelog.md if it does not exist.If confirmation changes any field, render a new preview before writing.
For /as:timetracker correct E####:
Corrects E#### — {reason}.The original and correction remain in the audit trail. Do not calculate net billing or totals unless the user separately specifies the accounting rule.
Resolve templates/timelog.md relative to the loaded skills/timetracker/SKILL.md when the harness exposes that location. On Claude Code, ${CLAUDE_PLUGIN_ROOT}/skills/timetracker/templates/timelog.md is the fallback. If the bundled resource cannot be resolved, create the exact table contract documented below rather than searching unrelated filesystem locations.
Required entry columns, in order:
ID | Work date | Hours | Description | Sources | Correction
Use — when an appended entry is not a correction. This skill is harness-neutral: structured questions, git, subagents, and other named tools are optional enhancements, not runtime requirements.
/as:workplan, /as:project, /as:meeting-minutes, /as:site-visit-report, and /as:tasklist own their respective source records. /as:timetracker reads and links them; it never rewrites them./as:tasklist, but time logging does not create a task automatically./as:project remember or /as:project record-decision explicitly when promotion is warranted.Take alpacalabsllc/timetracker from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.