hourslip

Send your client a timesheet they can confirm

Last updated

The short answer. Send the month's hours per day and per ticket, with the time you added by hand marked as such, in something your client can open without your tools: a CSV file, a PDF, a spreadsheet you share with them, or a link to a report page. Ask them to answer on it: a reply, a comment on the sheet or, on a hourslip report, a name typed on the page. That name is typed by whoever holds the link: “hourslip does not verify who confirms: anyone with the link can.”

Whichever you send, the client's yes is whatever they write back: a reply to your email or a comment on the sheet. Keep it with the month's timesheet.

hourslip makes the CSV and the PDF on its free plan. /hourslip export acme writes the month's hourslip-acme-2026-10-days.csv and hourslip-acme-2026-10-tickets.csv (the current month, or the YYYY-MM you give), and with a client also hourslip-acme-2026-10-preview.html: the report page as a local file. Its footer says “Print this page to save it as PDF.”, and its preview banner is hidden when printed.

hourslip is a Claude Code mod (a plugin of function hooks) that keeps the timesheet while you work; how it counts and which hours it bills are in the first two guides. Its report link is the same report page, published, with a Confirm form at the bottom.

  1. /hourslip publish acme shows a summary of the month's report (the hours, the invoice if the client has a rate, the days and tickets) and writes a local preview. It ends with “Nothing has been sent yet.”
  2. /hourslip publish acme 2026-10 --confirm publishes it. The reply is the link; in an interactive session it adds “The link is copied.” hourslip does not send it: you send it to your client, by email or however you like.
  3. On the page, whoever holds the link can type a name and press Confirm these hours.
  4. /hourslip asks the server about your reports not yet confirmed (up to 20), then lists them under Published: ✓ confirmed by Dana Client (link holder, unverified), or not confirmed.
A Claude Code session for the sample client ACME Corp. /hourslip publish acme shows the October summary, 0h10 billable and invoice ACME-2026-10 for 6.67 USD, and says nothing has been sent. The --confirm command prints the report link and says the link is copied. After a name is typed on the report page, /hourslip lists the report as confirmed by Dana Client, link holder, unverified. /hourslip unpublish acme 2026-10 says the link now answers 410, and /hourslip then lists no published report.
Recorded in Claude Code 2.1.293 on Windows, 2026-10-08, with a sample client and a local test server; the welcome banner is cropped, and the tip and spinner words are Claude Code's. In this recording, Claude Code draws a plugin's status line with ⚠ and the plugin's name. The name Dana Client is sent to the test server's report page by the recording script, between the second and third commands. One prompt counts 10 minutes, so 0h10 at 40 USD an hour is 6.67 USD.

What the client sees

Your client needs no account: “No. They open the link.” The page has the billable hours with the measured part, the part added by hand and the time Claude was working; the line “Measured from Claude Code activity. Time outside Claude Code, such as meetings or manual testing, appears only where it was added by hand, and is labelled so.”; the hours by day and by ticket; the time added by hand with your notes; the invoice, if the client has a rate; and the Confirm form.

The report page for ACME Corp, 2026-10-01 to 2026-10-31: Billable 1h10, measured 0h10 and added by hand 1h00, the hours by day and by ticket ACME-182, a review call added by hand, invoice ACME-2026-10 for 46.67 USD due 2026-11-15, and at the bottom Confirm these hours with a Your name field, a button, and the line hourslip does not verify who confirms: anyone with this link can.
The report page as the local test server serves it (the same page renderer as hourslip's server), 2026-10-08, with a sample client: one prompt (10 minutes) and one hour added by hand at 40 USD an hour. The page is shown whole, in the light colour scheme; the empty space below it is cropped.

A new version, unpublishing, and free reports

Publishing the same client and month again makes a new version (v2, then v3), at a new link. The old link then shows “A newer version of this report exists.” with a link to the newest, and has no Confirm form. While the earlier version is still published, a new version does not count as another free report.

/hourslip unpublish acme 2026-10 deletes the report: every version of that client and month, and the name typed on each. The reply: Unpublished acme 2026-10: the link now answers 410. On the free plan, unpublishing does not give back a free report. Whoever opens the link then reads “This report is no longer available. It was removed by its author or reached the end of its two years.” The pane lists the report until you run /hourslip again.

The first two reports are free, no card (unpublishing one does not give it back). Without Pro, a third report (a new client or month, not a new version) is refused with “This key has used its 2 free reports. Run /hourslip subscribe to publish more. Links you already sent keep working.” Pro is $72 a year, or $8 billed monthly, and /hourslip subscribe opens its checkout page. A published report stays online for 2 years from publishing, and cancelling Pro only stops new publishes.

What hourslip does not do