WASTED CYCLES

Local-first wall-clock profiler

Find what blocks the loop.

See how much agent time goes to builds, tests, CI, containers, packages, sub-agents, and repeated work—then fix the largest machine stall first.

$ curl -fsSL https://zozo123.github.io/cycles | sh

Checksum-verified binary · temporary directory · no account · no upload · version pinning supported

WASTED CYCLES 7d · demo
1 OVERVIEW   2 BREAKDOWN   3 SESSIONS
AGENT LOOP4h 59m
BLOCKED2h 05m
FLOW58%
HUMAN48m
Model work1h 28m
Build1h 06m
Tests47m

Where did the machine block progress?

Wasted Cycles measures elapsed time, keeps human wait outside the metric, and gives you a small ranked list instead of a speculative ROI number.

01 / LOCAL TRACES

Profile the agent loop

Read existing Codex, Claude Code, Cursor, and Grok Build traces in place. Compare working, blocked, and excluded time across sessions.

wasted-cycles --days 30
02 / GITHUB ACTIONS

Profile repository latency

Inspect completed workflow runs, queue delay, unsuccessful time, median and p95 latency, and the workflows consuming the most elapsed time.

wasted-cycles github owner/repo --days 30

Real shape. Anonymous labels.

This snapshot uses a seven-day public sample captured 31 July 2026, multiplied by 21—the randomly selected factor from 10–22 requested for the demo. Repository, commit, and run titles are omitted.

7 days · 21× scaled sample Repository workflow latency
84 / 84 successful
WORKFLOW LATENCY22h 29m
QUEUE DELAY0s
MEDIAN / P9538s / 33m
SUCCESS RATE100%
Build workflow 22h 06m · 42 runs
Policy workflow 23m · 42 runs

Scaled demo only; proportions are preserved. Live reports calculate directly from the repository and window you provide.

Measured time, with its edges visible.

Blocked means machine wait

Builds, tests, CI, containers, packages, sub-agents, and repeated machine work. Human wait is reported separately and excluded.

Latency is not billing

GitHub workflow latency is created_at → updated_at. Overlapping runs count separately; it is not billed runner-minutes.

Idle gaps are bounded

Gaps over two hours start a new session. Shorter gaps cap at 30 minutes and remain visible as inferred time in JSON.

Structured events only

Classification uses event fields and executed commands, not prompt text. Pasted logs and quoted commands are not counted as work.

Resolution is labelled

Codex and Claude expose events. Cursor exposes turns; Grok is coarser. JSON includes confidence and segment details.

Local by default

Trace files are read in place. Prompt text and source code are never stored, rendered, or uploaded.

Codex~/.codex/sessions · event
Claude Code~/.claude/projects · event
Cursor~/.cursor/projects · turn
Grok Build~/.grok/sessions · session