Modulo GitHub App — From Alert to Pull Request, Automatically
Bugs don’t wake up from your IDE. They wake up from an alert. Install once; let Modulo triage, fix, and validate every alert after that.
A Datadog monitor fires. PagerDuty escalates. A Sentry regression lands in the #oncall channel. A customer opens a Jira ticket that gets routed into Linear and forgotten. By the time a human sits down to look, the real work is forty minutes of context assembly before any fix is possible — which recent deploy, which tenant, which span, which service.
The Modulo GitHub App listens for those signals and starts working before the oncall engineer has even opened their laptop. It ingests the webhook, files a GitHub issue with a triage summary and ranked hypotheses, investigates the top candidate, generates a reproduction test, writes a fix, validates that the test fails on the old code and passes on the new, and opens a pull request with the full reasoning attached. The engineer wakes up, reviews the PR, merges.
A real one: Datadog alert → validated PR
The clock times are illustrative. The shape of the workflow is not.
Datadog alert fires
An SLO-burn alert triggers on checkout-service — p99 latency 4.2× the rolling 7-day baseline. PagerDuty pages the oncall engineer, who's asleep. The monitor is wired to a webhook.
Modulo ingests the webhook
The agent pulls correlating Jaeger traces from the last fifteen minutes, the last six deploys to the service and its two upstream dependencies, active Sentry error groups tagged with the service, and recent schema migrations from connected repos. Sixty seconds later it files a GitHub issue titled [auto-triage] checkout-service p99 regression — 3 hypotheses.
Investigates the top hypothesis
Modulo reads the migration diff, correlates with tenant IDs appearing in the slow traces, and confirms the failure mode is tenant-specific — exactly why the change slipped past canary. Generates a reproduction test that fails on main.
Generates and validates a fix
A corrected index hint plus a narrow backfill. Modulo runs the reproduction test against the fix: passes. Runs the rest of the service's test suite: green. Opens a PR with the diff, the reasoning, the reproduction test, and a link back to the triage issue.
Oncall wakes up to a merge-ready PR
The engineer opens GitHub, reads the PR description, scans the diff, runs the reproduction test locally out of habit, and merges. The alert was resolved before they paged a human to investigate.
Not every alert resolves this cleanly. Some hypotheses are wrong. Some fixes need a second pass. The app is candid about its confidence level and leaves the final call with the engineer. But the 2am shape of the work — the context assembly, the hypothesis ranking, the reproduction, the draft PR — is what you get back.
How it works in practice
Five steps, then it’s running.
Connect
Step 1Install from the GitHub Marketplace. OAuth grants least-privilege read access to code and write access to issues and PRs. You pick the repos.
Analyze
Step 2Modulo triggers on either a comment (@solve-bug analyze, @solve-bug fix) or a webhook — Datadog, Sentry, PagerDuty, or any APM that can POST to an HTTPS endpoint.
Review
Step 3Modulo posts its triage analysis directly in the issue thread: root-cause hypotheses, supporting evidence, the files it thinks are implicated, and a confidence score.
Fix
Step 4When evidence is strong enough — or when you explicitly ask — Modulo generates a PR with the diff and a reproduction test. The test fails on main and passes on the branch. If either assertion breaks, no PR is opened.
Merge
Step 5You review in GitHub the way you review any other PR. Comment to refine, request changes, or merge.
Trigger commands
Drop a comment in any issue to run Modulo against it.
@solve-bug analyzeTriage only. Posts hypotheses and evidence; no code changes.
@solve-bug fixGenerate a validated PR.
@solve-bug againRegenerate with additional context or feedback from your previous comment.
Aliases @fixbugs and @modulo work identically. Use whichever you prefer.
What it sees
To triage well, the agent has to see what a senior engineer sees.
The app reads:
- The issue description and full comment thread, including linked issues and duplicates.
- Error messages, stack traces, and any structured payloads pasted into comments.
- The full repository contents, read-only, at the commit the issue was filed against.
- Recent commits and the last several PRs, to understand what changed before the bug surfaced.
- When configured: webhook payloads from Datadog, Sentry, PagerDuty, or other APM and observability sources.
Your complete repository contents are not stored by Modulo. Relevant files are fetched transiently into a sandboxed analysis run and discarded when it completes.
Why developers trust Modulo
The marketplace numbers reflect usage across thousands of repositories. Your mileage on any individual bug will depend on the shape of the codebase, the quality of the error signal, and whether the alert carries enough context to reproduce. We're honest about when the agent shouldn't commit — no PR opens unless the reproduction test actually fails on the current code and passes on the fix.
OAuth-scoped, least-privilege permissions by default. TLS 1.2+ in transit. GDPR, CCPA, and SOC 2-aligned controls. Self-hosted deployment available for teams with stricter residency or compliance requirements.
Frequently asked questions
Install once. Let the next alert triage itself.
Free Trial: 3 bug fixes, no credit card. About two minutes to install from the GitHub Marketplace.