ReproGate checks issues and PRs for reproduction steps, environment details, and logs.
It helps maintainers stop repeating the same question:
Can you provide reproduction steps, environment details, and logs?
It ships as a GitHub Action for issue and PR intake, plus a small CLI for reporters who need to generate a paste-ready reproduction report.
- uses: JinRudy/reprogate@v0.1.9Use it on new or edited issues and pull requests:
name: reprogate
on:
issues:
types: [opened, edited]
pull_request:
types: [opened, edited, synchronize]
jobs:
ready-check:
runs-on: ubuntu-latest
steps:
- id: reprogate
uses: JinRudy/reprogate@v0.1.9
- run: echo "${{ steps.reprogate.outputs.summary }}"To have ReproGate update one issue or pull request comment when evidence is missing:
- uses: JinRudy/reprogate@v0.1.9
with:
comment-on-missing: "true"This requires issues: write permission in the caller workflow.
ReproGate looks for the evidence maintainers usually need before a bug is actionable:
- reproduction steps
- environment details
- logs or command output
When evidence is missing, the Action exposes outputs such as ready, labels, missing, missing_count, and summary so your workflow can label, route, fail, or just report the result.
Need automated comments or labels? See the GitHub Actions recipes.
Generate the workflow and a matching bug report form:
reprogate init github-action
reprogate init issue-templateThese commands write:
.github/workflows/reprogate.yml.github/ISSUE_TEMPLATE/bug_report.yml
Reporters can generate a sanitized Markdown report from the failing command:
reprogate capture -- npm testThat writes .reprogate/repro.md, ready to paste into a GitHub issue, Stack Overflow question, or maintainer discussion.
reprogate ready-check: check issue or PR text from a local file or stdin.reprogate redact: remove likely secrets before sharing logs.reprogate mcp: let AI coding tools redact text and check issue quality over stdio.
macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/JinRudy/reprogate/main/scripts/install.sh | shInstall a pinned version or custom directory:
curl -fsSL https://raw.githubusercontent.com/JinRudy/reprogate/main/scripts/install.sh | REPROGATE_VERSION=v0.1.9 BIN_DIR="$HOME/bin" shGo users can also install from source:
go install github.com/JinRudy/reprogate/cmd/reprogate@latestFor local development:
go run ./cmd/reprogate helpcurl -fsSL https://raw.githubusercontent.com/JinRudy/reprogate/main/scripts/install.sh | sh
reprogate capture -- go test ./...
cat .reprogate/repro.mdExample report: docs/examples/repro.md
Demo issue: #1 shows how a low-signal report is flagged.
Generate a ready-to-use workflow in the current repository:
reprogate init github-actionGenerate a matching bug report issue form:
reprogate init issue-templateBy default these write:
.github/workflows/reprogate.yml
.github/ISSUE_TEMPLATE/bug_report.yml
If the target file already exists, ReproGate leaves it untouched unless you pass --force.
reprogate capture -- npm testBy default this writes:
.reprogate/repro.md
The report includes:
- command and exit code
- OS and architecture
- detected Go and Docker versions when available
- dependency lockfile summary
- sanitized logs
- an explicit expected-behavior section for the reporter to fill in
printf 'Authorization: Bearer abc123\npassword=hunter2\n' | reprogate redactExample output:
Authorization: Bearer [REDACTED:bearer-token]
password=[REDACTED:secret-value]
reprogate ready-check --issue-body issue.mdor:
cat issue.md | reprogate ready-checkThe output is JSON with labels and missing evidence.
Start the stdio MCP server:
reprogate mcpExample MCP client config:
{
"mcpServers": {
"reprogate": {
"command": "reprogate",
"args": ["mcp"]
}
}
}MCP tools:
redact_text: redact likely secrets, credentials, and private paths from text.check_issue: check whether issue or PR text has reproduction steps, environment details, and logs.
AI client setup recipes: docs/recipes/ai-clients.md.
The MVP deliberately does not expose a command-execution MCP tool. Letting an AI run arbitrary local commands needs an explicit allowlist and confirmation model.
Minimal workflow:
name: reprogate
on:
issues:
types: [opened, edited]
pull_request:
types: [opened, edited, synchronize]
jobs:
ready-check:
runs-on: ubuntu-latest
steps:
- id: reprogate
uses: JinRudy/reprogate@v0.1.9
- run: echo "${{ steps.reprogate.outputs.summary }}"Strict mode fails the workflow when required evidence is missing:
- uses: JinRudy/reprogate@v0.1.9
with:
fail-on-missing: "true"Action outputs:
| Output | Description |
|---|---|
labels |
Comma-separated labels such as needs-repro,missing-env,missing-log. |
missing |
Comma-separated missing evidence fields. |
missing_count |
Number of missing evidence fields. |
ready |
true when the issue or pull request is review-ready. |
summary |
Human-readable readiness summary. |
result_json |
Full readiness result as JSON. |
Action inputs:
| Input | Default | Description |
|---|---|---|
event-path |
$GITHUB_EVENT_PATH |
Path to the GitHub event JSON file. Relative paths are resolved from the caller workspace. |
fail-on-missing |
false |
Exit non-zero when reproduction steps, environment details, or logs are missing. |
comment-on-missing |
false |
Post or update one issue or pull request comment when reproduction evidence is missing. Requires issues: write. |
go-version |
1.25 |
Go version used by the composite action to run ReproGate. |
More copy-paste workflows: docs/recipes/github-actions.md.
go test ./...
go run ./cmd/reprogate capture -- go env GOVERSION
go run ./cmd/reprogate ready-check < .reprogate/repro.mdMIT