Your build went red. Skip the scroll.
An agent that reads the failing step's log and the diff since the last green commit, then tells you which change broke the build — with the lines that prove it.
In — 4,112 lines
Out — root cause
- 4,112
- log lines in
- 4
- quoted evidence lines out
- 6
- tool calls, hard cap
- 0
- writes to your repository
The first fifteen minutes are always the same fifteen minutes.
A build goes red. The log is four thousand lines. GitHub shows you the end of it, which is the same line for every failed step regardless of cause: process completed with exit code 1.
So you scroll. You find the traceback. You read the test. You open the diff and work out which of the last eleven commits could have done it. Fifteen minutes later you know it was a three-line hunk in a commit about something else.
TraceCI automates that first fifteen minutes.
what GitHub shows you
... 3,997 lines omitted ...
##[error]Process completed with exit code 1.
line 4,000 of 4,000what TraceCI shows you
Root cause: refresh() in app/auth.py returns a dict instead of a Token. The commit message is about a rate limiter that nothing in the test suite imports.
Certainty is hard-coded. Judgement is the agent's.
Fetching the run, the failing step, the log and the diff is unconditional — a model choosing whether to do that would only add latency, cost and a new way to fail. The agentic part starts exactly where the certainty ends: deciding whether the log is enough, or whether it has to go and open the source.
- 01no model
fetch_failure
Finds the red run, the first failing job and step, pulls the log archive, resolves the last green commit and diffs against it.
- 02windowing
log_window
Strips ANSI codes and timestamps, anchors on the first real error rather than on noise, and always keeps the tail so the summary line survives.
- 03≤ 6 calls
investigate ⇄ tools
The model decides what evidence it still needs and goes and reads it — five read-only tools, every one pinned to the commit that failed.
- 04typed output
diagnose
A separate node emitting a validated result. Asking one call to both investigate and format degrades both, so they are split.
deterministic pre-fetch
- run
- 15938201234 · red
- job
- tests (3.11)
- failing step
- 6 · Run tests
- raw log
- 4,112 lines
- last green
- 9e11c4a → 4f8b2d1
- diff
- 2 files · 98 lines
Why an agent, and not a script.
Because the evidence needed differs per failure. A script has to pick one strategy and be wrong for most of them. Deciding how much to read is the actual problem.
This is also why a low tool-call count is not a worse answer. On a dependency conflict the resolver already printed the cause, and a correct run reads nothing at all.
five read-only tools
read_fileOpen one source file at the failing commit.get_full_diffRead the patch for a specific changed file.search_codeFind where a symbol is defined or used.list_directoryCheck what actually exists in the tree.get_more_logPull another slice of the failing step's log.
One repository URL in. A cause you can check.
Every diagnosis carries two to five lines quoted verbatim from the log and the source at the failing commit. Read them in order and the argument is complete without the prose — which is the only standard at which an automated answer is worth reading.
Confidence is a claim about sourcing, not a mood. Eight and above means nothing was inferred; below five the agent tells you it is reasoning past its evidence instead of sounding certain.
- log:2907E AttributeError: 'dict' object has no attribute 'expires_at'
- log:2908tests/unit/test_auth.py:47: AttributeError
- auth.py:18return {'value': fresh.value, 'expires_at': fresh.expires_at}
- log:39961 failed, 402 passed in 12.41s
Not applied, not run, not tested — TraceCI is read-only. Why that is deliberate →
Three commands, no card.
TraceCI runs on your key, and the default model is Groq's free llama-3.3-70b-versatile. Public repositories need nothing else.
Your key is sent with one request, is never written to graph state or the checkpoint database, and is not returned by a shared investigation link.
local setup
# backend pip install -r requirements-dev.txt uvicorn traceci.api:app --reload # frontend npm run dev
Read the log once. Let the next one be the agent's turn.
Read-only tools, a six-call budget, and a diagnosis you can verify line by line.