The drawn grid was solving the wrong problem: the script output was
already right, and fencing it in chat is what turned a rendered table
into raw dashes.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A markdown table carries no borders of its own; whether any get drawn is
up to the renderer, and terminal renderers mostly draw none. Emitting the
grid directly makes the output look the same everywhere it lands.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Padded pipes, so it reads as a grid in the terminal and renders as a
real table when pasted anywhere else. Each cell carries hours, share and
active minutes; a flags column carries what needs judgement.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The matrix table dropped the evidence — share, active minutes, hour
range, and the outside-working-hours flags — which are what make a
proposed number checkable rather than asserted.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
One row per day, one column per project, hours in the cell. The per-day
blocks repeated the project name on every line and buried the totals.
Share, active minutes, hour ranges, and the outside-working-hours flags
move to --json, which is where the skill reads them anyway.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Half-days forced every result into a 4h bucket. Days with hours split by
share give the same answer at finer granularity and drop a concept.
Session minutes are now stated as a floor on real work, not a measure:
the day's length comes from the calendar and only the split between
projects comes from the sessions. Meetings and review leave no
transcript, so a thin day is still a full day.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Turns Claude Code and Codex session activity into a half-day-per-project
proposal, reconciles it against the timesheet API, and submits only what
the user approves in-session.
Activity is measured in 5-minute active slots, deduplicated per project,
not message counts — otherwise one overnight autonomous run outweighs a
real morning's work.
The path-to-project mapping and the API credentials stay in
~/.config/hourlog/ and ~/.env.claude. This repo is public.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>