How it works
Claude Code · acme-web
Add password reset to the login flow
- Elapsed time
- 00:00
- Estimate
- About 7–9 minA few minutes
- Prediction confidence
- Medium
The agent accepts the prompt. runmarq classifies it locally and makes a first estimate.
Starting · 0 tool calls
0:00 Prompt submitted
From a hook to a notification
The agent reports what it is doing
Claude Code, Codex and Cursor each run runmarq's hook when something happens: a prompt is accepted, a tool starts or finishes, approval is needed, the turn ends. The hook prints only what the agent's hook protocol requires and always exits successfully.
The hook keeps only timing and categories
In the hook process, the prompt is classified (bug fix, feature, migration…) and dropped. Commands are inspected only to tell tests from builds and to recognise a repeated command by a salted hash. What leaves the hook is a small event: times, types, tool names, categories and salted hashes, never prompt text.
The collector follows the run
A background process on this computer turns events into runs with an explicit state: running, waiting for you, finished, failed, cancelled or unknown. It separates active time from time spent waiting for you, and never marks an unclear ending as finished.
The estimator predicts what is left
Each meaningful event, and every fifteen seconds of quiet work, produces a new estimate: an answer to whether to wait, and a likely range for the time left. Several models trained on this machine's runs contribute, weighted, once enough runs have finished, by how well each has predicted your recent ones. When the work checks out, the agent stops starting tools and your earlier runs show what that means, it says “Finishing up”. Nothing is sent anywhere to compute it.
You find out without looking
The tray shows every active run's estimate. A notification arrives when a run finishes, fails, needs your approval or looks stuck, and each run's timeline stays in history. In a terminal, runmarq wait returns when the run ends and runmarq statusline keeps it in your prompt.
This computer
Claude Code, Codex, Cursor
official hooks
thenrunmarq emit
normalize, minimize, spool if offline
thenTranscripts, git
counts only, no text
thenCollector
run state, estimator, SQLite history, local API
thenDesktop app, tray, notifications
Setup
Connecting an agent means adding a few hook entries to its configuration. You see the file and the exact entries before anything is written, a backup is kept, and removal takes out only what was added. The desktop app does the same on first launch.
Integration guidesrunmarq integrations setup claude --dry-run
runmarq integrations setup claude
runmarq integrations remove claudeWhat “finished” means
runmarq can tell when an agent's turn has ended. It cannot tell whether your broader goal was met. So the app says “Run finished” when the agent reports the end of its turn, “Failed” when it reports an error, “Cancelled” when you interrupted it or closed it, and “Status unknown” when it cannot tell.
How estimates work