AI-powered GitHub issue automation framework
Project description
BeneIssue
AI-Agentic issue automation for GitHub.
Drowning in GitHub issues? Install beneissue once, and it handles the rest automatically.
Who is this for?
- Open source maintainers with 100+ issues piling up
- Small teams who can't afford to manually label every issue
- Solo developers who want typo fixes handled automatically
What changes after you install it?
| Before | After |
|---|---|
| Issue opened → check it days later | Issue opened → instantly classified + labeled |
| Manually comment "need more info" | Auto-asks specific follow-up questions |
| Fix simple bugs yourself | Auto-eligible issues get auto-PR via Claude Code |
How it works
Three stages:
| Stage | What it does | Model |
|---|---|---|
| Triage | Classify issue → valid / invalid / duplicate / needs-info | Haiku (fast, ~$0.02) |
| Analyze | Find affected files, plan fix approach, check eligibility | Claude Code |
| Fix | Create branch, apply fix, open PR | Claude Code |
Install once, runs forever
1. Install the package
pip install beneissue
2. Set up GitHub repository
Secrets: Go to Settings → Secrets and variables → Actions → Secrets tab:
| Secret | Required | Description |
|---|---|---|
ANTHROPIC_API_KEY |
Yes | Your Claude API key |
LANGCHAIN_API_KEY |
No | LangSmith for tracing |
Variables: Go to Settings → Secrets and variables → Actions → Variables tab:
| Variable | Required | Description |
|---|---|---|
LANGCHAIN_PROJECT |
No | LangSmith project name (default: beneissue) |
Permissions: Go to Settings → Actions → General → Workflow permissions:
- Enable "Allow GitHub Actions to create and approve pull requests"
3. Initialize in your repo
cd your-repo
beneissue init
git push
This creates:
your-repo/
├── .github/workflows/
│ └── beneissue-workflow.yml # Triggers on issue events
└── .claude/skills/beneissue/
├── SKILL.md # Claude Code instructions
└── beneissue-config.yml # Your settings
That's it. From now on:
- New issue opened → automatically triaged and labeled
- Auto-eligible issues → Claude Code creates a PR
- Need manual control? → just comment on the issue
Control via issue comments
@beneissue triage # Re-classify this issue
@beneissue analyze # Run full analysis
@beneissue fix # Attempt auto-fix now
No CLI needed. Just talk to the bot in the issue thread.
GitHub Actions triggers
| Event | Trigger | Action |
|---|---|---|
| Issue opened/reopened | Automatic | Runs analyze (triage → analyze) |
@beneissue triage |
Comment | Re-classify the issue |
@beneissue analyze |
Comment | Run full analysis |
@beneissue fix |
Comment | Attempt auto-fix now |
@beneissue run |
Comment | Full pipeline: triage → analyze → fix |
Verify it's working
When issues get these labels automatically, you're set:
triage/valid— Valid issue, ready for workfix/auto-eligible— Will be auto-fixed
Configuration
Edit .claude/skills/beneissue/beneissue-config.yml:
version: "1.0"
limits:
daily:
triage: 50 # ~$1/day
analyze: 20 # ~$2-10/day
fix: 5 # ~$5-25/day
team:
- github_id: "your-github-id"
available: true
specialties: ["backend", "python"]
LangSmith (optional)
Set environment variables for tracing:
export LANGCHAIN_API_KEY=your-langsmith-api-key
export LANGCHAIN_PROJECT=your-project-name # default: beneissue
When LANGCHAIN_API_KEY is set, LangSmith tracing is automatically enabled.
Metrics Storage (optional)
Store workflow metrics in Supabase for dashboards and analytics:
1. Create a Supabase project at supabase.com
2. Run the SQL setup script:
-- Copy contents from scripts/sql/001_create_tables.sql
-- Run in Supabase SQL Editor
3. Set environment variables:
| Variable | Required | Description |
|---|---|---|
SUPABASE_URL |
Yes | Your Supabase project URL |
SUPABASE_SERVICE_KEY |
Yes | Service role key (for write access) |
Note:
SUPABASE_SERVICE_ROLE_KEYis also supported (Vercel integration naming).
export SUPABASE_URL=https://your-project.supabase.co
export SUPABASE_SERVICE_KEY=your-service-role-key
When both variables are set, metrics are automatically recorded after each workflow run. Without these variables, beneissue works normally but skips metrics storage.
Labels
| Label | Meaning |
|---|---|
triage/valid |
Valid issue, ready for analysis |
triage/invalid |
Out of scope or spam |
triage/duplicate |
Already reported |
triage/needs-info |
Waiting for more details |
fix/auto-eligible |
Passes checklist, will be auto-fixed |
fix/manual-required |
Needs human review |
fix/completed |
Auto-fix PR created |
CLI (optional)
For manual runs or debugging:
| Command | Description |
|---|---|
beneissue triage <repo> --issue <n> |
Classify issue only |
beneissue analyze <repo> --issue <n> |
Analyze issue only (no triage, no fix) |
beneissue fix <repo> --issue <n> |
Fix issue only (no triage, no analysis) |
beneissue run <repo> --issue <n> |
Full workflow: triage → analyze → fix |
beneissue init |
Initialize beneissue in current repo |
beneissue labels |
Sync labels to repository |
beneissue test |
Run policy tests |
Add --dry-run to triage/analyze to skip GitHub actions.
Policy Testing
Validate your triage/analyze rules before deploying:
your-repo/.claude/skills/beneissue/tests/cases/
├── triage-valid-bug.json
├── triage-invalid-spam.json
└── analyze-auto-eligible-typo.json
beneissue test # Run all test cases
beneissue test --case spam # Run specific case
beneissue test --dry-run # Validate without AI calls
See examples/calculator for sample test cases.
License
Apache 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file beneissue-2.0.3.tar.gz.
File metadata
- Download URL: beneissue-2.0.3.tar.gz
- Upload date:
- Size: 37.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efeb9a35e8b5fe75e58fcaf08cb34f5ce0891630cdac468137e6baf9b462dc04
|
|
| MD5 |
5e4651f543c2480577eb7588bcf8b83e
|
|
| BLAKE2b-256 |
03271a739dbe34f39f65f85f9d4417b90ec896537a6f5f19a1ddd35721cd9fd4
|
Provenance
The following attestation bundles were made for beneissue-2.0.3.tar.gz:
Publisher:
publish.yml on opendataloader-project/beneissue
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beneissue-2.0.3.tar.gz -
Subject digest:
efeb9a35e8b5fe75e58fcaf08cb34f5ce0891630cdac468137e6baf9b462dc04 - Sigstore transparency entry: 780603796
- Sigstore integration time:
-
Permalink:
opendataloader-project/beneissue@3d32c578ccb9353df155ae0579c3de7c75409e3f -
Branch / Tag:
refs/tags/v2.0.3 - Owner: https://github.com/opendataloader-project
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3d32c578ccb9353df155ae0579c3de7c75409e3f -
Trigger Event:
push
-
Statement type:
File details
Details for the file beneissue-2.0.3-py3-none-any.whl.
File metadata
- Download URL: beneissue-2.0.3-py3-none-any.whl
- Upload date:
- Size: 52.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73f70d6806fd6590086cac66780c2ff24b2453d31f0128ff7e8429ef77db8894
|
|
| MD5 |
3bfd385f65ca48232b4da49d58d0467f
|
|
| BLAKE2b-256 |
e8418474a00a27ccedea8c3535edc59f07c2b89f7d90e081c296c836ea02e2a7
|
Provenance
The following attestation bundles were made for beneissue-2.0.3-py3-none-any.whl:
Publisher:
publish.yml on opendataloader-project/beneissue
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
beneissue-2.0.3-py3-none-any.whl -
Subject digest:
73f70d6806fd6590086cac66780c2ff24b2453d31f0128ff7e8429ef77db8894 - Sigstore transparency entry: 780603797
- Sigstore integration time:
-
Permalink:
opendataloader-project/beneissue@3d32c578ccb9353df155ae0579c3de7c75409e3f -
Branch / Tag:
refs/tags/v2.0.3 - Owner: https://github.com/opendataloader-project
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3d32c578ccb9353df155ae0579c3de7c75409e3f -
Trigger Event:
push
-
Statement type: