Track billable time without leaving your AI chat. Timers, entries, reports, CSV export and invoice line items, all stored locally.
Time Tracker has well-structured tool definitions with complete schemas and descriptions for all 10 tools. Naming follows verb_noun convention (start, stop, list, report, export, invoice, delete, edit, log). Descriptions are clear and action-oriented (avg ~100 chars). All parameters have types and descriptions. However, several tools lack output schema documentation, error handling guidance is minimal, and some parameter constraints are under-specified (e.g., date formats, rate validation). No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Missing recovery guidance for error cases.
Delete a time entry by ID.
Edit an existing time entry (project, task, tags, rate, note, billable status).
Export time entries as CSV for a date range, optionally filtered.
Generate invoice line items from billable entries for a date range.
List time entries, optionally filtered by date range, project, or tags.
Log a completed time entry directly (without using a timer).
Generate a time report with totals by project, task, or tag for a date range.
Start a timer for a project and optional task. Returns the running entry ID.
No output schemas documented for any tool. LLMs cannot infer response structure (fields, types, pagination). Affects all 10 tools.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications (WRITE, DESTRUCTIVE, READ_ONLY). LLMs cannot determine safety/retry semantics.
Date parameters (from/to) lack format specification. Descriptions say 'YYYY-MM-DD or ISO timestamp' but no regex pattern or enum. Code shows custom parsing logic (parseTime) but LLMs cannot see it.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Show the current timer status: running entry details or 'no timer running'.
Stop the running timer and save the entry. Returns the completed entry with duration.
Rate parameter accepts union type (number|string) with vague description 'numeric or text like 90 euros an hour'. No validation rules, no enum, no pattern. Invites hallucinated formats.
No error handling guidance. Tools lack recovery hints (e.g., 'If entry not found, call list() to find valid IDs'). Errors will not guide LLM retry logic.