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.

Four-agent sequential triage pipeline triggered by GitHub issue labels; agents share state via report.md and issue comment history.
FIG. 02 Four-agent sequential triage pipeline triggered by GitHub issue labels; agents share state via report.md and issue comment history. — blog.cloudflare.com/astro-issue-triage

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.

AgentRoleTaskOutput
ReproductionEntry validationVerifies that the reported behavior can be reproducedConfirmed reproduction or invalid flag
DiagnosisRoot-cause analysisInstruments code and adds loggingDiagnostic findings written to report.md
VerificationBug confirmationRuns test suites to confirm a genuine bug existsVerified-bug comment posted to issue thread
FixPatch generationCreates failing unit tests and deploys a patchPatch + pkg.pr.new preview release; PR opened on confirmation
FIG. 03 Triage pipeline: agent roles, tasks, and outputs — blog.cloudflare.com/astro-issue-triage

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 CategoryDescriptionIllustrative Example
Opaque abstractionsModule or API boundaries the agent cannot mapHMR bug: agent repeatedly modified the same conditional, breaking other code
Missing documentationCritical code lacks explanatory comments or contextHMR boundary resolved only after a maintainer added a descriptive comment
Insufficient test coverageEdge cases not exercised by existing test suitesAgent cannot verify behavior when tests for the scenario are absent
FIG. 04 Agent failure taxonomy: three categories Cloudflare uses to classify failed triage runs as codebase signals — blog.cloudflare.com/astro-issue-triage

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.

Flue orchestration framework: declarative agent config, append-only resumable event logs, multi-runtime execution (Durable Objects / Node.js / GitHub Actions), and built-in integrations.
FIG. 05 Flue orchestration framework: declarative agent config, append-only resumable event logs, multi-runtime execution (Durable Objects / Node.js / GitHub Actions), and built-in integrations. — blog.cloudflare.com/astro-issue-triage

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.