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:

  1. Fetch — GitHub's REST API lists open issues + PRs for any repo.
  2. 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.
  3. 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 :free endpoints 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
Share this project:

Updates

Submission history