Clockify start timer
Interactive Timer method (entry_method: timer). Agent-mediated starts belong to clockify-automate (that path passes entry_method: automated).
Config-aware behavior
- If
config_rootis already known this session and still this repo, reuse it. Otherwise resolve once withgit rev-parse --show-toplevelfrom the working directory (open tabs are not required; multi-root: focused path only as a tie-breaker; non-git: Cursor window folder). Re-resolve when the folder or focused root changes. Pass that string on Clockify MCP calls — do not run git before every tool. clockify_get_configwithconfig_root. Iffound, honorentry.timer.description,entry.timer.task,entry.timer.rounding/include_seconds(the start tool applies them), andentry.timer.overlap.- Never invent project/task ids —
clockify_list_projects/clockify_ensure_project/clockify_ensure_taskfirst (all withconfig_root). - Description: if
entry.timer.description.fromisprompt, ask or use what they said. Iftemplate, passissue_number/issue_title/labeland omitdescriptionso the template applies. Default template{issue_number} - {issue_title}→#N - title. Do not put a literal#before{issue_number}.
Workflow
clockify_get_running_timerwithconfig_root.- Same work already running (same issue / same description): report it. Do not stop or start again.
- Anything else running (including runaway
pastCeiling): do not stop yet. Show description, project, duration (and runaway ceiling if past). Ask whether to stop it and start the new one. Only stop-then-start after they confirm. If they decline, leave the running timer. If they stop and it was past ceiling, AskQuestion cap (runaway_stop: true) vs stop at now before callingclockify_stop_timer. - Nothing running: continue.
- Resolve project: user name, config
local_foldername, or list/ensure. - Resolve task from
entry.timer.task.from— never block the start waiting on a task. A missing task is fine; a missing time entry is not. They can assign a task later in Clockify.none— no task.prompt— use a task only if they already named one in this request; otherwise start with notask_id. Do not AskQuestion for a task name.template— expand the task template (e.g.{label});ensure_taskwhenif_missingiscreateand the resolved name is known. Empty{label}or unresolved → start with no task (treatif_missing: promptas skip, not ask).local_folder— use local folder name fromclockify_get_config.ensure_taskwhenif_missingiscreate; if ensure cannot run, start without a task rather than waiting.fixed— usetask.name;ensure_taskwhenif_missingiscreate. If the name is missing, start without a task.
clockify_start_timerwithconfig_root,entry_method: timer,project_id, optionaltask_id, description or issue fields /label, and optionalstart(ISO) if they asked to backdate.- If the tool returns
overlap: true, show the clash. Retry withconfirm_overlap: trueonly if they agree (orentry.timer.overlap.on_conflictisoverride).
Examples
User: "Start issue #42 Login redirect bug"
- Config + running timer check (warn if another timer is up).
- Ensure project + optional task.
clockify_start_timerwithconfig_root,entry_method: timer,issue_number: 42,issue_title: Login redirect bugwhenfromistemplate.