The agent time plugin runs on your own computer, beside your coding agent. An agent that runs in a vendor's cloud has no plugin beside it, so instead it checks in: it tells Time Trakkr when it starts work and when it finishes, and Time Trakkr's own clock counts the time between. The agent never sends a duration or a time, and Time Trakkr refuses a check-in that tries to.
Claude Code cloud sessions can do better and measure their time like the plugin does, from hooks committed to the repository: see Measured time in Claude Code cloud sessions below.
Checked-in time is agent time for the person whose connection the agent used. It waits in that person's pending list, labeled Checked in by the agent · Cloud, and is never accepted automatically, even from a repository an admin mapped. Once accepted it is billed at the same agent rates as any agent time, on the same (agent time) invoice lines.
The agent calls three things, over Time Trakkr's MCP server (the agent_session tool) or the REST API (POST /api/v1/agent/check_ins):
Time Trakkr counts from the start to the finish by its own clock, with these limits, all of which count less rather than more:
The agent sends which agent it is, the git remote, the branch, and optionally its own session id and, for an agent with no host of its own, its name. Nothing else: never prompts, file contents, diffs or anything the agent read.
A repository that no rule maps to a project is not tracked. The agent's start does reach Time Trakkr, which is how it learns the repository is not mapped, but it is answered "not tracked" and is neither stored nor logged. This differs from the plugin, which never sends an unmapped repository at all. A .timetrakkr.json file in the repository is not read for check-ins, because Time Trakkr cannot see the repository: only an admin's repository rule maps one.
You need a repository mapped to a project under Settings → Agent time → Repositories, and the default agent rate set, as for any agent time. For work with no repository, see Work with no repository below.
Claude Code cloud sessions (on the web, on mobile, Desktop's cloud mode). Add Time Trakkr as a connector on claude.ai under Settings → Connectors, with the server URL https://timetrakkr.com/api/mcp, and sign in, choosing read/write. Cloud sessions use your claude.ai connectors, so no network allowlist is needed. Then add a line to the repository's CLAUDE.md (or measure the time instead, as below):
When you start work on a request, call the Time Trakkr agent_session tool with action start, this repository's git remote and branch. Call it with action progress every few minutes during long work, and with action finish when you hand back.
Cursor cloud agents. Add Time Trakkr's MCP server, https://timetrakkr.com/api/mcp, to your cloud agents' MCP servers and sign in with OAuth, so the connection acts as you. Add the same instruction as a rule in .cursor/rules.
Codex cloud. Codex cloud tasks have no internet access unless you allow it, so allow timetrakkr.com (or your workspace's own address) for the environment. Create a personal access token with Agent time only and For a cloud environment ticked under Integrations → Personal access tokens. A token for a cloud environment expires, in 90 days unless you choose otherwise, because it sits in a vendor's secret store; create a new one before then, and an expired token is refused with a message saying so. Where your plan has network secrets, store it as one for that host, so the agent never sees it; otherwise as an environment variable, TIMETRAKKR_TOKEN. Then add to AGENTS.md:
When you start work, run:
curl -s -X POST https://timetrakkr.com/api/v1/agent/check_ins \
-H "Authorization: Bearer $TIMETRAKKR_TOKEN" -H "Content-Type: application/json" \
-d '{"action":"start","host":"codex","repository":"<git remote>","branch":"<branch>"}'
Keep the check_in_id it returns. Send {"action":"progress","check_in_id":"<id>"} every few minutes during long work, and {"action":"finish","check_in_id":"<id>"} when you are done.
Codex cloud has not yet been tried end to end.
An organization API key cannot check in: it belongs to the workspace, not to a person, so there is nobody for the time to belong to. A connector set up with an organization key does not see the agent_session tool. Reconnect it with OAuth.
A Claude Code cloud session does not load the plugin, but it runs the hooks committed in the repository's .claude/settings.json. Those hooks run the same measuring code as the plugin, so the time is counted by the turn, not checked in.
timetrakkr.com, or your own domain): header Authorization, prefix Bearer, and the token as the value. Claude Code's proxy adds it to requests for that address after they leave the session, so the token is never inside the session and the agent never sees it. The default network access level is enough.npx @timetrakkr/cli init --cloud (add --url https://your-domain for a custom domain). It shows the hooks and asks before writing them. Commit .claude/settings.json. Start a new session, on the environment that has the network secret.Each hook does nothing unless it is running in a Claude Code cloud session, so nobody who opens the repository on their own computer, with or without the plugin, is counted twice. The hooks run a pinned version of the Time Trakkr CLI in the background, and never hold up or fail the agent. To move to a newer version, run init --cloud again and commit.
Measured cloud time is labeled Cloud on your pending list and Measured · Cloud in the Detailed report, and is handled like time from your own computer: it is accepted automatically where a repository rule says so, and otherwise waits in your pending list.
Use one way, not both. If the repository's CLAUDE.md also tells the agent to check in, the same work is recorded twice: once measured, once checked in. The checked-in rows are flagged Possible duplicate, are never accepted automatically, and are left for you to check when you accept the whole day, but remove the check-in instruction once the hooks are set up.
To check the setup by hand from inside a cloud session, run:
NODE_USE_ENV_PROXY=1 TIMETRAKKR_URL=https://timetrakkr.com npx -y @timetrakkr/cli status
Both variables are needed there: the hooks set them, the session's shell does not.
This does not work in a cloud session with more than one repository, where Claude Code runs no repository hooks; check in there instead.
Some agents do work outside any git repository, such as Claude Duet preparing a client briefing or answering email. They can check in against a project and task instead of a repository. The agent looks the project up with search_catalog and names it in its start. Time Trakkr checks that you can log time to that project, by the same rule as your own project picker, and never guesses. If you cannot log to it, the agent is told which projects you can, and should ask you which one.
This needs a connection that acts as you, such as the Time Trakkr connector. A token with Agent time only ticked cannot name a project, because it cannot look projects up: it checks in only from a repository a rule maps.
The time is checked in like any other: clocked by Time Trakkr between the agent's calls, never sent as a duration. In your pending list it reads No repository: project chosen by the agent. It is never accepted automatically, and Accept all leaves it for you, so you can confirm the agent picked the right client before it is billed.
Claude Duet. Duet uses the connectors on your Claude account, so if you have added Time Trakkr under Settings → Connectors, Duet already has it. Keep one Time Trakkr connector: with two, the same tools appear twice, and Duet can record time in the wrong workspace. Duet has no settings field for standing instructions; it keeps them in its memory. Send it this message once:
Remember this for every run, including scheduled ones: when you start work for a client, use the Time Trakkr connector to call search_catalog and find the client's project and task, then call agent_session with action start, host other, agent_label "Claude Duet", project_id and task_id. Call agent_session with action progress every few minutes during long work, and with action finish when you are done. If start refuses the project, ask me which one to use. Never guess a project, and never check in for conversation that is not work. Use no other Time Trakkr tool for this.
Duet saves it to its memory, which every run reads, scheduled ones included. To change it, send Duet a new instruction; to stop, tell it to forget this one.
Checked-in time belongs to the person whose own connection or token made the call. Keep that credential somewhere only you use:
An agent member, an agent on your team in its own right, does not check in: it logs its own time with log_time.
Checked-in rows may carry a flag asking you to look before accepting. A flag never changes the time.
Updated 2026-11-08. Still stuck? Contact support or return to the Help Center.