What it is
AGENT is a self-running GitHub triage bot. Give it any owner/repo, and it reads the open issues and pull requests, classifies each one with an LLM — bug, feature, question, duplicate or docs — and ranks them
from 1 (critical) to 5 (trivial). The result is a color-coded dashboard with a one-line reason per item, so a maintainer sees the real backlog in seconds.
The problem that inspired it
Maintainers drown in issues. Every popular repository carries hundreds of unlabeled open items, and triage — the boring, mechanical work of sorting them — is exactly what nobody wants to do. I checked
typeorm/typeorm and facebook/react as tests: dozens of items, no classification, unknown urgency. That felt like a perfect job for an agent, not a human.
How I built it
Three steps, ~250 lines, zero dependencies:
- Fetch — GitHub's REST API lists open issues + PRs for any repo.
- Reason — each item goes to an LLM with a strict JSON contract:
{"category","short","priority"}. I first "built it" with the Strands Agents SDK harness (@strands-agents/sdk) exactly as this hackathon asks, driving it with an OpenAI-compatible transport (OpenRouter), with Bedrock/Anthropic/Google as drop-in alternatives. - Render — a single-file page (inline CSS/JS, no build step) shows cards sorted by priority with filters and a category summary. A static GitHub Pages mirror serves the demo with real scan data baked in.
Challenges (the honest parts)
- Free-tier LLMs are flaky. Popular
:freeendpoints return HTTP 503 all the time. I solved it with model rotation: try up to 5 models with automatic fallback until one answers. This is the single most important engineering decision in the project. - Small models return sloppy JSON. The parser takes the first
{...}block and tolerates markdown noise; it never trusts the model completely. - Rate limits. Unauthenticated GitHub allows 60 requests/hour — fine for triage-sized scans; a PAT removes the ceiling.
- Structured output discipline. Forcing
{"category"...}instead of prose made everything downstream trivial — I learned to treat the LLM as a parser, not a chat.
What I learned
That the boring 80% of maintenance can be automated with a tiny, disciplined agent loop — and that "free" LLM tiers are a real constraint that forces good engineering (rotation, fallbacks, tolerant parsers). The same skeleton powers PR review, dependency-drift alerts, or release-note generation.
Run it
export LLM_KEY=... && node server.mjs → open localhost:7811, type a repo, watch it work.
Built With
- ai
- automation
- autonomous-agents
- developer-tools
- github
- github-api
- javascript
- llm
- node.js
- open-source
- openrouter
- prompt-engineering
- rest
- strands-agents-sdk
- structured-output
Log in or sign up for Devpost to join the conversation.