Reports and insights
Where the ledger is read back — the dashboard for the shape of a period, the reports for a specific question.
Everything else in Clocktopus is about getting numbers in. This page is about reading them back.
There are two places to look, and the difference is worth learning once. The dashboard shows the shape of a period: how the days ran, where the hours went, what is drifting. Reports answer one question at a time, sliced the way you asked.
Both obey the same date range and the same project filter, and both put that selection in the URL — so any view you are looking at is a link you can paste to somebody else. The selection also follows you between them: narrow the dashboard to two projects, open a report, and it opens already narrowed, because you are almost always still chasing the same thing. Clearing it anywhere clears it everywhere, and a link that names its own selection always wins over the one you were carrying.
The dashboard
Two controls sit above everything and drive every card on the page.
My work / Team decides whose figures you are reading. My work is your own rows across every project you can reach, in every organisation you belong to. Team is everybody's rows across the projects of the organisation in the address and the sidebar switcher, and is offered only when you own or administer it. To see another organisation's team, switch to it.
The project filter narrows the page to a selection. It offers what the current tab can reach: every project you can see on My work, and only this organisation's projects on Team. Leave it empty for the whole tab.
Your selection survives a tab switch, the same way the date range does — so looking at Team and coming back does not lose the projects you picked. Each tab shows the part of it that tab can reach: a project of an organisation you only belong to is ticked on My work and simply absent on Team, and switching back brings it straight back. The same selection carries over to the reports, which reach a slightly wider set of projects and so may show more of it ticked than the dashboard could. Both controls travel in the URL along with the date range.
Hours
The card at the top carries the period's figures, then the shape of the days behind them.
The first row is time: total hours, active days, total entries, and average hours per active day. Active days matter more than they look — eight hours over two days and eight over five are different weeks. On the team tab a fifth figure joins them, how many people are behind the total, because forty hours means something very different from four people than from one.
The second row is money, and the two rows never combine. Billed this period is what those hours are worth at sell rates, a slice of the whole-life consumption the budget card shows further down. Agent spend is what AI agents cost over the same range, with per human hour beside it. Agent spend is never deducted from a budget and takes no part in margin: it sits next to the revenue so the two can be compared, not subtracted. A range whose agent sessions all reported activity without dollars reads unpriced, not $0.00. The billed figure is owner and admin only, decided per project, and simply absent for everyone else.
Every figure carries how it moved against the equivalent range immediately before it. A percentage is withheld where that period was empty, since a change from nothing is undefined. Agent spend's pill stays grey rather than green or red: spend rising is not a failure, and colouring it would take a position the data cannot support.
Below the figures, daily time tracking draws hours per day with agent runtime as a second line. The lines are never stacked, so where runtime rises above your hours, agents ran in parallel — or ran on a day you logged nothing.
Under it, for owners and admins, a second strip draws what each day billed for and the running total across the period, on the same columns. The total ends on the Billed figure above it. On the team tab with exactly one budgeted project selected, the strip becomes a burn-down: the running total starts from what the project had already consumed before the period, and the project's budget is drawn across it, so the day the line crosses the budget is a real date rather than an artefact of where the range began. The gap between the two is shaded: grey while there is room left, red once the total is past the budget. The strip is absent wherever the billed figure is — a plain member, mixed currencies, nothing rated.
On the team tab, By developer swaps that chart for the people behind the total: hours each, how they compare with the period before, active days, and what agents cost them. Sorted by hours, with the team median pinned underneath so a row reads as typical or worth asking about rather than as a rank. It loads only when you ask for it.
The hours card and the breakdown card link straight to the Summary tab that breaks them down, carrying the range and the project filter with them. The hours card points at Projects, or at Team on the team tab; the agent figures have their own link to AI agents, which is where agent spend per day is drawn; the breakdown card follows whichever of its two tabs you are on. The delivery card points at Pull requests, where the rows behind its medians are listed one per line, under the same merges-per-day strip the card draws.
When a whole range is quiet — no hours, no agent runtime, no commits and no pull requests — the three period cards give way to a single calm card saying so, rather than three empty ones saying it separately. Budgets stay, since they cover a project's whole life rather than the range.
The rest of the page
- Where the hours went — by organisation and project, or by task on the Tasks tab, pulled from your commit messages. Select exactly one Monday-to-Sunday week and Tasks becomes a day-by-day grid instead of a single total per task.
- Delivery — pull request states, review flow, work complexity and a per-developer table. Your own on My work, the whole team's on Team. Hours say what a period cost; these say how the work moved. The pull requests behind the figures are one link away, on the Pull requests tab of the Summary report. See Delivery metrics.
- Budgets — how far through its budget each project has billed. It follows the project filter but not the date range or the tab: a budget covers a project's whole life and belongs to the project rather than to whoever is looking, so it reads the same on both. Nothing renders until someone sets one, so it never leaves a hole.
Reports → Summary
One date range, one set of filters, and several ways of cutting the same period — hours, and the pull requests they went into. Every report is about one organisation: the one in the address and the sidebar switcher. Its project filter lists that organisation's projects; to report on another, switch.
| Tab | Answers |
|---|---|
| Projects | Hours per project, and each one's share of the period |
| Team | Hours per person |
| Tasks | Hours per task, from conventional-commit scopes — no issue-tracker integration involved |
| AI agents | Agent spend and runtime by project, with tasks underneath, and spend per day. See AI agents |
| Pull requests | Every pull request the period covers — who opened it, how long it took, what it cost in tracked hours, how hard it was — and when the merges landed |
| Billing | Hours, revenue, cost and margin, by project and by person |
| Details | The individual entries behind all of the above — date, organisation, project, person, hours, description — paginated |
Filter by project and by member above the tabs, and the filter follows you from tab to tab. Details is the one to reach for when a total looks wrong: it is the same data without any grouping, so you can find the entry that explains it.
Billing is owner and admin only. The tab does not appear for members at all.
Reports → Budgets
Budgets get their own page, deliberately without a date-range selector. A budget covers its project's whole life, so a range picker here would be a control that visibly does nothing.
It shows how far through its budget each project has billed, at job-role rates, across everyone who worked on it. Margin over a period lives on the Summary report's Billing tab instead, where a range does apply.
Everyone can open this page. Members see the percentage and the health; the amounts are stripped server-side before the data leaves, so who sees what is enforced by the server rather than by hiding a column.
When a number looks wrong
Reports are a view over the ledger, so a surprising total is almost always something upstream rather than the report itself.
| Symptom | Usually |
|---|---|
| A day is short, or an entry reads 0h | A flagged entry whose start was never established |
| A day is inflated | An out-of-order push covering a window already counted |
| Hours are missing entirely | The repository is not attached to a project, or the commit email is not tracked |
Amounts show as — |
The work could not be priced: no job role rate covering the day it was worked |
| Agent spend sits in "unattributed" | The session's repository does not resolve to a single project — see AI agents |
The Activity page is the level below all of this: every webhook delivery and what it did, including the ones that were skipped and why. Start there when entries never arrived at all.
Asking in words instead
If you would rather not click through tabs, connect an assistant over MCP and ask. It reads the same data, scoped to you, and can answer "how many hours went to Public Website in May, per task?" without you building the view by hand.
Start measuring what your team ships
Output, cost and what your agents burn. Read from the commits, pull requests and agent runs you already have.
Start freeFree for single developers.