Project Info
TRIAGE
Autonomous bug-reproduction agent. A developer pastes a GitHub issue; TRIAGE opens a real cloud browser, clicks through a live app to trigger the bug, captures the crash, diagnoses the root cause, and writes a structured report.
Built for the UC Berkeley AI Hackathon 2026.
Architecture (three agents, one Band room)
- ParserAgent (
triage/parser_agent/) — GitHub issue → structured repro steps. - ReproAgent (
triage/repro_agent/) — drives a real Browserbase browser. All browser work lives here. - HypothesisAgent (
triage/hypothesis_agent/) — diagnoses root cause, can redirect ReproAgent to retry.
Integrations: Browserbase (cloud browser), Band (multi-agent coordination), Arize Phoenix (retry-loop tracing), Claude (reasoning).
See docs/TRIAGE_OVERVIEW.md (source of truth) and docs/TRIAGE_INTEGRATIONS.md.
Status
Phase 1 — repo scaffold. No agent logic or integration code yet.
Setup
pip install -e ".[dev]" # installs python-dotenv + pytest only in Phase 1
cp .env.example .env # then fill in your keys
pytest # runs the config-loader tests
Analysis
View
Metric
- 123
- 93
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- AnthropicIn code
- CSSIn code
- FastAPIIn code
- HTMLIn code
- PythonIn code
- ReactIn code
- TypeScriptIn code
7 of 7 appear in the indexed code.
AI coding agents
- Claude CodeConfig · Commits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
840 KB
Source files
132
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
HansChundekad/Triage
144 files · 959 KB · @ 93021f9
Structure
Interface
7 files · 5%Screens, components and styles rendered to the user.
Application logic
46 files · 32%Domain rules, services and shared utilities.
+5 more
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Markdown63%
- Python33%
- TypeScript3%
- CSS1%
- Shell0%
- HTML0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
pyproject.toml
pypi · 16- anthropic
- arize
- arize-ax-cli
- arize-otel
- arize-phoenix
- arize-phoenix-client
- arize-phoenix-evals
- band-sdk
- httpx
- openinference-instrumentation-anthropic
- opentelemetry-sdk
- pandas
- playwright
- python-dotenv
- stagehand
- +1 more
frontend/package.json
npm · 11- react
- react-dom
- +9 more
backend/requirements.txt
pypi · 3- fastapi
- sse-starlette
- uvicorn[standard]
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
Feature verification
Arize (AX/Phoenix) tracing of the retry loopVerified
Arize Phoenix tracing of the retry loop
Claimed on readmehigh confidencetriage/tracing/setup.py:17— setup_tracing registers either Arize AX (arize.otel.register) or Phoenix (phoenix.otel.register) as the OpenTelemetry backend, selected by cfg.trace_backendtriage/repro_agent/browser.py:122— run_repro accepts a run_trace and wraps browser execution in trace spans
Bounded retry loop (loop-safety cap)Verified
Autonomous retry loop until bug is reproduced or diagnosis is confirmed
Claimed on readmehigh confidencetriage/repro_agent/loop.py:30— MAX_REPRO_ATTEMPTS = 3 hard-caps total browser attempts per repro cycle
Bug detection via dual signal (blank page + console crash match)Verified
TRIAGE captures the crash to confirm the bug actually reproduced
Claimed on readmehigh confidencetriage/repro_agent/browser.py:52— detect_bug requires both blank_body and a matching console error substring before flagging bug_detected
Claude used for reasoning across all three agentsVerified
Built with claude
Claimed on Devposthigh confidencetriage/parser_agent/agent.py:59— extract_steps is called with an injected anthropic_client to parse the GitHub issue into stepstriage/hypothesis_agent/reasoning.py:16— diagnose() calls the Anthropic client (model claude-sonnet-4-6) for root-cause reasoning
Demo replay mode with a recorded fixture runVerified
(not explicit in README, but present as a demo feature; included since BUILT WITH lists these integrations for a working demo)
Claimed on readmemedium confidencefrontend/src/replay.ts:6— startReplay drip-feeds a StreamEvent[] to the UI on a timer, replaying a recorded runfrontend/src/fixtures/recorded-run.json— Bundled fixture data used as the replay source
FastAPI backend serving run status and SSE event streamVerified
Built with fastapi
Claimed on Devposthigh confidencebackend/server.py:16— FastAPI app exposes POST /api/runs, GET /api/runs/{id}, and an SSE GET /api/runs/{id}/stream backed by RunRegistry
Frontend web UI: paste a GitHub issue URL, live run view, report cardVerified
A developer pastes a GitHub issue; TRIAGE... writes a structured report (implies a UI)
Claimed on readmehigh confidencefrontend/src/App.tsx:12— React app wires UrlInput, LiveLog, BrowserView, and ReportCard components to a live/replay run streamfrontend/src/api.ts:1— startLiveRun/startReplayRun connect the UI to the backend run stream
GitHub issue parsing into structured repro stepsVerified
A developer pastes a GitHub issue; ParserAgent converts it into structured repro steps
Claimed on readmehigh confidencetriage/parser_agent/github.py:41— fetch_issue performs a real GET against the GitHub REST API for a given issue URLtriage/parser_agent/agent.py:47— post_initial_steps fetches the issue, calls extract_steps (Claude), formats and sends steps @ReproAgent
Honest fail-to-succeed bug.detected tracing flipVerified
Arize Phoenix tracing of the retry loop must be honest about the fail-to-succeed flip (project rule)
Claimed on readmemedium confidencetriage/memory/backends/ax.py:17— Docstring and code identify attributes['bug.detected'] on each repro_attempt span as 'the honest reproduction signal (rule 8's fail->succeed flip)', read back for prior-run context
Multi-agent coordination via Microsoft Band platformVerified
Built with microsoft-band
Claimed on Devposthigh confidencetriage/shared/band.py:105— BandAgent.connect uses band.platform.link.BandLink and band.client.rest to connect, create/join a chat room, and subscribe over websocket
New Browserbase session per retry attempt (no session reuse)Verified
Rule: new Browserbase session per retry, never reused
Claimed on readmehigh confidencetriage/repro_agent/browser.py:128— run_repro always calls client.sessions.start() fresh with no sessionId parameter, and the module docstring states a new session is created every call
Real cloud browser bug reproduction via Browserbase/StagehandVerified
TRIAGE opens a real cloud browser and clicks through a live app to trigger the bug
Claimed on readmehigh confidencetriage/repro_agent/browser.py:128— run_repro starts a real Browserbase/Stagehand session (client.sessions.start) and connects Playwright over CDPtriage/repro_agent/browser.py:187— Each repro step is executed via session.observe(...) then session.act(...), matching the claimed observe->act->screenshot loop
Root cause diagnosis via Claude reasoningVerified
TRIAGE diagnoses the root cause and writes a structured report
Claimed on readmehigh confidencetriage/hypothesis_agent/reasoning.py:24— diagnose() builds a Diagnosis dataclass (decision, root_cause, redirect_instruction) via a Claude call with a detailed system prompttriage/hypothesis_agent/agent.py:92— on_message callback invokes diagnose() with the real anthropic client and posts the diagnosis back over Band
Three-agent Band-coordinated architecture (ParserAgent, ReproAgent, HypothesisAgent) with retry redirectVerified
Three agents coordinate in one Band room; HypothesisAgent can redirect ReproAgent to retry
Claimed on readmehigh confidencetriage/shared/band.py:20— Defines three distinct AgentName identities and payload contracts (ReproStepsPayload, ReproResultPayload, HypothesisPayload) shared across agentstriage/repro_agent/loop.py:66— classify_message routes by sender identity into steps/confirm/redirect, and extract_tweak parses HypothesisAgent's retry instructiontriage/hypothesis_agent/agent.py:40— route_diagnosis maps a Diagnosis to @ReproAgent or @ParserAgent redirect targets
LLM-as-judge evaluation of repro fidelity and root-cause correctnessCode-supported
(implied by eval module, not explicit in README/Devpost, included for completeness)
Claimed on readmemedium confidencetriage/eval/judges.py:47— make_fidelity_judge/make_root_cause_judge build phoenix.evals classifiers, but this is an internal dev-eval harness rather than a user-facing feature explicitly claimed in the README
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.