Cloudflare's automated triage pipeline for the Astro JavaScript framework cut open GitHub issues from 200+ to roughly 30—an 85% reduction—without auto-closing cold tickets or ignoring reports. The team expects zero open issues within the month, a first in Astro's five-year history. The infrastructure runs entirely inside GitHub Actions.
The pipeline chains four sequential agents via GitHub issue labels. Every submission gets a "triage needed" label, then: a reproduction agent verifies reported behavior; a diagnosis agent instruments code and adds logging; a verification agent confirms genuine bugs via test suites and comments; a fix agent creates failing unit tests and deploys patches. Agents communicate through a shared report.md file and issue comment history. This isolation prevents the LLM bias toward forcing solutions when bugs may not exist.
When the fix agent lands a patch, the pipeline spins a preview release via pkg.pr.new, posts findings and logs to the issue thread, and tells the reporter how to test. On confirmation, automation opens a pull request. Maintainers can audit every reasoning step in the issue audit trail.
| Agent | Role | Task | Output |
|---|---|---|---|
| Reproduction | Entry validation | Verifies that the reported behavior can be reproduced | Confirmed reproduction or invalid flag |
| Diagnosis | Root-cause analysis | Instruments code and adds logging | Diagnostic findings written to report.md |
| Verification | Bug confirmation | Runs test suites to confirm a genuine bug exists | Verified-bug comment posted to issue thread |
| Fix | Patch generation | Creates failing unit tests and deploys a patch | Patch + pkg.pr.new preview release; PR opened on confirmation |
Failed agent runs signal codebase gaps. Cloudflare categorizes failures as: opaque abstractions (unmappable boundaries), missing documentation (unexplained critical code), and insufficient test coverage. A Hot Module Replacement bug showed the pattern: the triage bot repeatedly modified the same conditional and broke other code. Only after a maintainer added a descriptive comment did the boundary change, fixing both bot and readers.
| Failure Category | Description | Illustrative Example |
|---|---|---|
| Opaque abstractions | Module or API boundaries the agent cannot map | HMR bug: agent repeatedly modified the same conditional, breaking other code |
| Missing documentation | Critical code lacks explanatory comments or context | HMR boundary resolved only after a maintainer added a descriptive comment |
| Insufficient test coverage | Edge cases not exercised by existing test suites | Agent cannot verify behavior when tests for the scenario are absent |
Cloudflare open-sourced the workflow as triagebot-action, a standalone GitHub Action. Setup requires two GitHub tokens, credentials for Anthropic or Cloudflare Workers AI, and project-specific skill files (SKILL.md, reproduce.md, diagnose.md, fix.md) that teach the agent the codebase.
The underlying orchestration framework, Flue, is the reusable foundation. Flue uses declarative configuration: developers specify agent context (model, skills, sandbox, instructions) instead of writing orchestration loops. Execution state persists as append-only event logs, so interrupted workflows resume from the last completed stage.
On Cloudflare infrastructure, each Flue agent runs as a Durable Object—isolated storage and compute, no sticky sessions, no noisy-neighbor risk, auto-scaling to workload demand. The same agent definition runs on Node.js or GitHub Actions elsewhere. Flue integrates with GitHub, Slack, Linear, and Discord. Astro 7.0 added `astro dev --background`, a mode that detects AI agent runtimes and manages the dev server as a background process, enabling non-human operators in the pipeline.
The fix stage is hardest: generated patches must meet merge standards, while earlier stages only need phase completion. That constraint caps the automated resolution ceiling. For teams attempting this, triagebot-action and Flue provide the starting point. The deeper output is the failure taxonomy—using agent loops to surface architecture gaps is a discipline that applies regardless of which model runs triage.