Skip to content

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.

KUNDAN1334/traceme-lab · run 15938201234live

In — 4,112 lines

Out — root cause

waiting for the failing step…
fetch_failureinvestigatetoolsdiagnose
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,000

what 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.

log windowdiff vs. last greenread_file app/auth.py

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.

  1. 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.

  2. 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.

  3. 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.

  4. 04typed output

    diagnose

    A separate node emitting a validated result. Asking one call to both investigate and format degrades both, so they are split.

traceci · graph01 / 04

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.

FailureWhat is sufficient
A dependency pin that cannot resolvethe log, verbatim
An invalid python-versionthe log
A lint errorthe log — rule code and file:line
A test asserting on a constant that changedthe log and one file
A function that quietly changed its return typethe log, the diff, and choosing which file

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.

evidenceconfidence 9 / 10
  • 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.