Kairos
AgentsPricingSign in

Let your assistant run the timer — and your invoicing

Last updated 2026-10-27

Kairos has a small API for the things you do all day: starting and stopping the timer, and — when the month ends — turning that time into invoices. Hand a token to an assistant you trust and you can say “I’m starting on the Northwind redesign”, “log 45 minutes on the report”, or “invoice Northwind for September and add a $500 deposit credit”, and it happens.

1. Make a token

In Kairos, go to Settings → Assistants and tools and create a token. Name it after what will use it and tick what it may do: Timer (start, stop and log time) and, if you want, Invoicing (see what’s unbilled, draft invoices, edit their lines, mark them sent or paid). Copy it when it appears — it is shown once. A token acts as you, in that workspace, and does only what you ticked: a timer-only token can’t see invoices, and no token can invite people or make more tokens. Revoke it from the same place any time.

2. Browser extension

The Kairos extension for Chrome puts the timer in your toolbar: start, stop and log time from any tab, or press Alt+Shift+K to open it. It is a popup only — it never reads the page you are on, and nothing about your browsing reaches Kairos.

Get it on the Chrome Web Store

  • Click the extension and sign in with Google. No token to paste.
  • It shows up under Settings → Assistants and tools as a connected app; revoking it there signs the extension out.

3. Connect it to Claude — no token needed

Kairos is also a remote MCP server, which is how Claude.ai, Claude Desktop and Claude Code connect to tools. Add it and you sign in with your Kairos account instead of pasting anything; the first time, Kairos asks what the assistant may do (timer, invoicing, or both) and remembers your answer as a connected app under Settings → Assistants and tools, where you can revoke it.

  • Claude.ai and Claude Desktop: Settings → Connectors → Add custom connector, and paste https://time-api-f6m3.onrender.com/mcp. Approve it when Kairos opens.
  • Claude Code: claude mcp add --transport http kairos https://time-api-f6m3.onrender.com/mcp, then /mcp to sign in.
  • Any other MCP client: the same URL. It speaks Streamable HTTP with OAuth 2.1 (PKCE, dynamic client registration); a client that only takes a header can send Authorization: Bearer kairos_pat_… with a token from step 1.

The tools are the same calls described below, and more: what the timer is on, start, stop and log time, edit or delete an entry, list your clients and projects, read back the entries on a project or client (with an assistant’s hours apart from yours), a time report by client, project or person, where a budget or retainer stands — and, when you allow invoicing — what is unbilled, expenses, draft an invoice, read and edit its lines, mark it sent, paid or void. The Workspace scope adds creating and editing clients and projects. Each tool is marked read-only or not, and Claude confirms with you before anything changes. The connector page has one example prompt per tool and setup steps for Cursor, ChatGPT, Codex and VS Code.

4. Or give it a token

Claude skills

Download a skill file, open it, and paste your token on the KAIROS_TOKEN= line in its Setup section. Then add the file to Claude (in the Claude app: Settings → Skills → add; in Claude Code: drop it in your skills folder). There are two skills — take both if your token has both scopes:

  • Download the timer skill — “start a timer on the Northwind redesign”, “log 45 minutes on the report”.
  • Download the invoicing skill — “what can I bill”, “invoice Northwind”, “add a $500 deposit line”, “mark it paid”.

From then on those requests just work — you don’t have to name Kairos. Before anything changes, the skills confirm with you: the client, project and task before a timer starts; the lines and total before a draft is raised.

Anything else

It’s plain HTTP. Send Authorization: Bearer kairos_pat_… to https://time-api-f6m3.onrender.com:

  • GET /timer — what’s running.
  • GET /timer/projects — what you can track against.
  • GET /timer/entries?project=redesign&range=month&by=agent — the entries, newest first, with the hours split between an assistant’s and people’s.
  • POST /timer/start — { "project": "Northwind / Redesign", "task": "Nav rework" }. Stops whatever was running.
  • POST /timer/stop — { "task": "Done for today", "append": true }.
  • POST /timer/log — { "project": "Northwind / Redesign", "task": "Review", "minutes": 45 }.
  • PATCH /timer/entries/last — { "project": "Northwind / Redesign", "minutes": 45 }; any entry id from the entries list works too. DELETE the same path to remove one.
  • GET /timer/report?range=last-month&groupBy=client — hours by client, project or person, with the assistant’s share of each.
  • GET /timer/budget?project=apex — where a budget or retainer stands this period.

Projects can be named loosely — “redesign” finds “Northwind / Redesign”, and so does the client’s name when they have one project — and when a name matches more than one, the response lists them instead of guessing. Add "dryRun": true to a start or log call to see exactly what would happen without doing it; the skill uses this to confirm the customer, project and task with you before a timer starts. Every response carries a one-line summary meant to be read back to you.

With the Invoicing scope, the same token can also call:

  • GET /invoices/unbilled — what could be invoiced, per client.
  • POST /invoices/draft — { "client": "Northwind", "dryRun": true } to preview; drop dryRun to raise the draft. Clients are named as loosely as projects.
  • GET /invoices/:id/line-items — the lines, numbered in the summary.
  • POST /invoices/:id/line-items — { "description": "Deposit", "amountCents": 50000 }, or { "timeEntryId": "…" } / { "incidentalId": "…" } to bill an unbilled entry or expense.
  • PATCH /invoices/:id/line-items/:lineId — { "description": "Discovery workshop" }; a custom line can also take a new amountCents.
  • DELETE /invoices/:id/line-items/:lineId — off the draft; a time entry goes back to unbilled.
  • PATCH /invoices/:id — { "status": "paid" } (or sent, void).

Only drafts can be edited, and every edit keeps the previous version in the invoice’s history. A draft mirrored to your Stripe account is replaced there too; nothing is sent to the client until you mark it sent.

5. Try it

“Start a timer on the Northwind redesign, I’m reworking the nav.” Claude answers “Start Northwind / Redesign — Nav rework?”, you say yes, and it’s running. An hour later: “Stop the timer.” The entry shows up in Kairos with a small robot mark, ready to invoice like any other. And if the work is Claude’s own — “start a timer on Apex and fix the login bug” — it stops the timer itself the moment the job is done, with a note of what it did.

At month end: “What can I bill?” Claude reads back what’s unbilled, per client. “Invoice Northwind.” — “Draft an invoice for Northwind: 8 entries (12.5h) and 2 expenses, $2,115.00, Sep 2 to Sep 30?” Yes. “Add a $500 deposit credit and call the first line ‘Discovery workshop’.” Each change is confirmed, made, and read back with the new total. Open the draft in Kairos and it’s exactly what you heard.

Questions? tyler@paralleltpa.com. Or go back to the start.

CompareKairos vs HarvestKairos vs Toggl TrackKairos vs ClockifyKairos vs TimeCampKairos vs HubstaffKairos vs FreshBooks

© 2026 ParallelTPA LLC. Kairos is made in St. Petersburg. Named for καιρός, the moment worth catching.

AgentsPrivacyTermsSupport