{"id":50806673,"url":"https://github.com/codevena/fixbuddy","last_synced_at":"2026-06-13T02:01:18.378Z","repository":{"id":357821126,"uuid":"1214658689","full_name":"Codevena/fixbuddy","owner":"Codevena","description":"Autonomous GitHub issue fixer with two-agent self-review pipeline (claude/codex/opencode/gemini)","archived":false,"fork":false,"pushed_at":"2026-06-11T07:54:17.000Z","size":156,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-11T09:18:42.089Z","etag":null,"topics":["ai","ai-agents","automation","bash","claude","code-review","codex","devops","gemini","github-actions","issue-automation","opencode","pull-requests"],"latest_commit_sha":null,"homepage":"https://github.com/Codevena/fixbuddy#quick-start","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Codevena.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-18T21:49:37.000Z","updated_at":"2026-06-11T07:54:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Codevena/fixbuddy","commit_stats":null,"previous_names":["codevena/fixbuddy"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Codevena/fixbuddy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Codevena%2Ffixbuddy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Codevena%2Ffixbuddy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Codevena%2Ffixbuddy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Codevena%2Ffixbuddy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Codevena","download_url":"https://codeload.github.com/Codevena/fixbuddy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Codevena%2Ffixbuddy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34269364,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-agents","automation","bash","claude","code-review","codex","devops","gemini","github-actions","issue-automation","opencode","pull-requests"],"created_at":"2026-06-13T02:01:17.688Z","updated_at":"2026-06-13T02:01:18.372Z","avatar_url":"https://github.com/Codevena.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fixbuddy\n\n**A Bash orchestrator that turns GitHub issues into reviewed pull requests using two AI coding agents.**\n\n[![CI](https://github.com/Codevena/fixbuddy/actions/workflows/ci.yml/badge.svg)](https://github.com/Codevena/fixbuddy/actions/workflows/ci.yml)\n[![version](https://img.shields.io/github/v/tag/Codevena/fixbuddy?label=version)](https://github.com/Codevena/fixbuddy/tags)\n[![license](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\n[![shell](https://img.shields.io/badge/shell-bash-black.svg)](fixbuddy.sh)\n[![agents](https://img.shields.io/badge/agents-claude%20%7C%20codex%20%7C%20opencode%20%7C%20agy-purple.svg)](#supported-agents)\n\nfixbuddy reads open GitHub issues, asks one agent to verify and fix each issue, asks a second agent to review the committed diff, then opens a pull request. If enabled, it requests auto-merge after review approval.\n\nThe goal is controlled automation: one issue per branch, one issue per PR, explicit labels for every outcome, and full logs for every agent call.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/demo.gif\" alt=\"fixbuddy turning a GitHub issue into a reviewed, merged pull request\" width=\"820\"\u003e\n\u003c/p\u003e\n\n\u003csub\u003eThe branch, commit, diff, and push above are real; the AI agents and GitHub calls are stubbed for a deterministic, offline recording — see \u003ca href=\"docs/demo\"\u003edocs/demo\u003c/a\u003e.\u003c/sub\u003e\n\n## Why fixbuddy\n\nMost AI issue-fixers let a single agent write a fix and, at best, review its own work. fixbuddy splits the job across **two different agents from two different vendors**: by default `claude` writes the fix and `codex` reviews the committed diff with a fresh context. The fixer never approves its own work.\n\nIt needs no cloud service, no Docker, and no separate API-key broker — it drives the AI coding CLIs you already have installed (`claude`, `codex`, `opencode`, `agy`), so it runs on the subscriptions you already pay for. The orchestrator is ~1,200 lines of readable Bash.\n\n|  | fixbuddy | Copilot coding agent | claude-code-action | OpenHands resolver |\n|---|---|---|---|---|\n| Fix **and** review | two agents, cross-vendor (fixer ≠ reviewer) | one vendor | one vendor | one agent |\n| Choice of agent | claude · codex · opencode · agy | Copilot's models | Claude only | bring your own LLM |\n| Where it runs | your machine **or** a GitHub Action | GitHub cloud | GitHub Action | local / Docker |\n| Infra required | bash · git · gh · jq | none (hosted) | GitHub Actions | Docker + API keys |\n| Cost | your existing CLI subscriptions | paid Copilot (premium requests) | API / subscription | your API + compute |\n| Sandbox isolation | no — runs on the host ([documented](#safety-model)) | yes (Actions runner) | yes (Actions runner) | yes (Docker) |\n| Footprint | ~1,200 lines of Bash you can read | hosted SaaS | action + runtime | full framework |\n\n**When _not_ to reach for fixbuddy:** if you need a managed sandbox or compliance guarantees, want a one-click GitHub-native experience, or run against issues from untrusted contributors — use one of the tools above. fixbuddy deliberately trades isolation for a small, transparent, local-first tool (see [Safety Model](#safety-model)). It fits a solo developer or small team batch-fixing well-scoped issues in their **own** repositories.\n\n## How It Works\n\n```text\nVERIFY -\u003e FIX -\u003e REVIEW -\u003e PUSH/PR -\u003e optional auto-merge\n   |       |        |\n   |       |        +-- rejected: retry, then label fix:rejected\n   |       +----------- blocked: label fix:blocked\n   +------------------- false positive: close issue\n```\n\n1. **Verify**: the fix agent checks whether the issue is still real.\n2. **Fix**: the fix agent creates a local commit on `fix/issue-N`.\n3. **Review**: the review agent reviews the committed diff and runs project checks.\n4. **PR**: fixbuddy pushes the branch and opens a PR.\n5. **Merge handling**: if auto-merge is enabled, fixbuddy requests it. `fix:applied` is added only when GitHub reports the PR as merged. Open PRs are labeled `fix:pr-open` to avoid duplicate work.\n\n## Quick Start\n\nInstall with the one-liner (macOS and Linux, including WSL2):\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/Codevena/fixbuddy/v0.7.1/install.sh | bash\n```\n\nThis downloads the pinned `v0.7.1` scripts into `~/.local/bin` (or `/usr/local/bin`), makes them executable, and prints a PATH hint if needed. Override the location with `| bash -s -- --prefix /custom/bin` or track the latest commit with `--ref main`.\n\n**Prefer to read before you run?** The installer is short — inspect it first, then run it:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/Codevena/fixbuddy/v0.7.1/install.sh -o install.sh\nless install.sh        # read it\nbash install.sh        # then run it\n```\n\nThe installer verifies each downloaded script against the pinned `SHA256SUMS` (download integrity — see [Safety Model](#safety-model)).\n\nThen run:\n\n```bash\nfixbuddy-wizard.sh\n```\n\n### Developer install\n\nTo modify the scripts, clone the repository instead:\n\n```bash\ngit clone \u003cyour-fork-or-upstream-url\u003e fixbuddy\ncd fixbuddy\nchmod +x fixbuddy.sh fixbuddy-wizard.sh\n./fixbuddy-wizard.sh\n```\n\nDirect usage:\n\n```bash\n./fixbuddy.sh \\\n  --repo owner/repo \\\n  --project ~/code/repo \\\n  --severity high \\\n  --fix-agent claude \\\n  --review-agent codex \\\n  --max 10 \\\n  --yes\n```\n\nStart with `--dry-run` or `--max 1` on a new repository.\n\n## Requirements\n\n- `bash`\n- `git`\n- [`gh`](https://cli.github.com) authenticated with access to the target repository\n- [`jq`](https://jqlang.github.io/jq/)\n- At least one supported agent CLI\n\nBoth `--fix-agent` and `--review-agent` must be installed. They may point to the same CLI, but using different agents gives a more independent review.\n\n## Supported Agents\n\n| Agent | Invocation | Notes |\n| --- | --- | --- |\n| `claude` | `claude --dangerously-skip-permissions -p -` | Full tool access. |\n| `codex` | `codex exec --dangerously-bypass-approvals-and-sandbox` | Full tool access. |\n| `opencode` | `opencode run --dangerously-skip-permissions` | Full tool access. |\n| `agy` | `agy --dangerously-skip-permissions --add-dir \u003cproject\u003e -p ...` | Antigravity CLI (Gemini's successor). Verify/review add `--sandbox` (terminal restrictions — not read-only). |\n\nThese agent invocations are intentionally powerful. Run fixbuddy only against repositories and issue content you trust.\n\n## Options\n\n| Flag | Description | Default |\n| --- | --- | --- |\n| `--repo \u003cowner/repo\u003e` | Target GitHub repository | required |\n| `--project \u003cpath\u003e` | Local checkout of the target repository | required |\n| `--label \u003cname\u003e` | Include only issues with this label. Repeatable | none |\n| `--severity \u003clevel\u003e` | Include issues labeled `severity:\u003clevel\u003e` | none |\n| `--max \u003cn\u003e` | Maximum issues to process in this run | unlimited |\n| `--fix-agent \u003cagent\u003e` | `claude`, `codex`, `opencode`, or `agy` | `claude` |\n| `--review-agent \u003cagent\u003e` | `claude`, `codex`, `opencode`, or `agy` | `codex` |\n| `--max-retries \u003cn\u003e` | Retry count after review rejection | `1` |\n| `--agent-timeout \u003csecs\u003e` | Wall-clock timeout per agent call | `1200` |\n| `--crash-abort \u003cn\u003e` | Abort after consecutive agent crashes | `3` |\n| `--base \u003cbranch\u003e` | PR base branch | auto-detect |\n| `--issue \u003cN\u003e` | Process only this issue number. Repeatable; dedup filters and `--label`/`--severity` still apply. Warns for requested numbers that are not found, closed, or already labeled non-actionable | none |\n| `--check-cmd \u003ccmd\u003e` | Shell command to run as a test gate after each fix commit and before review. Repeatable. A non-zero exit is treated as a review rejection: output is fed back to the fix agent and the attempt is retried; if the retry budget is exhausted the issue is labeled `fix:rejected`. Because review and PR are only reached after all checks pass, checks also gate auto-merge. Commands run in `$PROJECT` and are operator-trusted (same trust level as CLI flags) | none |\n| `--notify-cmd \u003ccmd\u003e` | Run-summary notification hook. Repeatable. Runs in the **launch** directory after the final summary (also after a crash-abort), receiving `FIXBUDDY_*` env vars (counts, `FIXBUDDY_ABORTED`, `FIXBUDDY_LOG_DIR`) and a human-readable summary on stdin. A failure warns but never changes the exit code. Not fired for `--dry-run`, empty queues, or Ctrl-C. Operator-trusted (same trust level as CLI flags) | none |\n| `--auto-merge` | Enable auto-merge, overriding a config `auto_merge = false` | off |\n| `--no-auto-merge` | Open PRs without requesting auto-merge | off |\n| `--skip-label \u003clabel\u003e` | Skip issues with this label | `fix:applied` |\n| `--dry-run` | List issues that would be processed, with the planned config, without making any changes (no labels created, no issues edited) | off |\n| `-y`, `--yes` | Skip confirmation | off |\n\n## Configuration file\n\nfixbuddy reads `key = value` config files (blank lines and `#` comments ignored) from two locations, applied in precedence order from lowest to highest:\n\n1. `~/.fixbuddy/config` — global defaults applied to every run\n2. `./.fixbuddy.conf` — per-project config in the current working directory (the common case is running fixbuddy from the repo root)\n3. CLI flags — always win over any config value\n\n**Format example:**\n\n```ini\n# .fixbuddy.conf\nrepo        = owner/repo\nproject     = /home/user/code/repo\nfix_agent   = claude\nreview_agent = codex\nmax         = 10\nseverity    = high\nauto_merge  = true\nlabel       = bug\ncheck_cmd   = pnpm test\ncheck_cmd   = pnpm typecheck\nnotify_cmd  = curl -s -d @- ntfy.sh/my-topic\n```\n\n**Allowlisted keys** (unknown keys warn and are ignored):\n\n| Key | Equivalent flag | Notes |\n| --- | --- | --- |\n| `repo` | `--repo` | |\n| `project` | `--project` | |\n| `fix_agent` | `--fix-agent` | |\n| `review_agent` | `--review-agent` | |\n| `max` | `--max` | |\n| `max_retries` | `--max-retries` | |\n| `agent_timeout` | `--agent-timeout` | |\n| `crash_abort` | `--crash-abort` | |\n| `base` | `--base` | |\n| `severity` | `--severity` | |\n| `skip_label` | `--skip-label` | |\n| `auto_merge` | `--auto-merge` / `--no-auto-merge` | accepts `true` or `false` |\n| `label` | `--label` | additive (see below) |\n| `check_cmd` | `--check-cmd` | additive (see below) |\n| `notify_cmd` | `--notify-cmd` | additive (see below) |\n\n**Scalar keys** (all keys except `label`, `check_cmd`, and `notify_cmd`): CLI value wins; last writer wins across config files (project overrides global).\n\n**Additive keys** (`label`, `check_cmd`, `notify_cmd`): config entries and CLI entries are combined, not replaced. A config `label = bug` plus `--label security` on the CLI results in an AND filter for both labels. There is no way to remove a config-provided label, check, or notify command from the CLI.\n\n**Security note:** config files are operator-controlled and parsed without `eval` or `source`. Values are assigned as plain strings, so a config containing shell metacharacters (e.g. `$(...)`) cannot execute code. `check_cmd` entries are run by fixbuddy itself, consistent with the same operator-trust model as CLI flags — only issue *content* is treated as untrusted input.\n\n**Wizard:** running `fixbuddy-wizard.sh` offers to save the collected settings to `./.fixbuddy.conf` at the end. The absolute path written is printed, and a warning is shown if the current directory differs from `--project`, since fixbuddy reads the project config from wherever it is launched.\n\n## Labels\n\nfixbuddy creates and manages these labels:\n\n- `fix:applied`: the PR was confirmed as merged.\n- `fix:pr-open`: fixbuddy opened a PR that has not merged yet.\n- `fix:blocked`: an agent could not proceed, crashed, or timed out.\n- `fix:false-positive`: verification found the issue is stale or invalid.\n- `fix:rejected`: the reviewer rejected all fix attempts.\n\n`fix:blocked` issues are eligible for future runs. `fix:applied`, `fix:pr-open`, `fix:false-positive`, and `fix:rejected` are skipped by default.\n\n## Safety Model\n\n- fixbuddy refuses to start if the target checkout has a dirty working tree.\n- Each issue gets a fresh `fix/issue-N` branch.\n- The verify stage is read-only by contract, but no agent CLI enforces that: files it writes are stashed and commits it creates on the base branch are discarded before the fix branch is created.\n- The fix agent is instructed to stage only relevant files and to avoid generated artifacts.\n- The review agent receives the committed diff and must reject unrelated changes.\n- If the reviewer creates commits, the branch is reset to the reviewed commit — only the reviewed commit is ever pushed.\n- Push happens only after review approval.\n- `fix:applied` is added only after GitHub reports that the PR is merged.\n- Cleanup stashes uncommitted agent output before deleting temporary branches.\n\nThis is automation with shell access, not a sandbox boundary. Treat issue text, repository code, and agent tools as trusted inputs.\n\n## Logs\n\nEach run writes logs to:\n\n```text\n~/.fixbuddy/runs/\u003cUTC-timestamp\u003e-\u003cpid\u003e/\n```\n\nUseful markers:\n\n- `[fixbuddy-watchdog]`: an agent exceeded `--agent-timeout`.\n- `[fixbuddy-crash]`: an agent exited without a `DONE-*` marker.\n- `===== RUN_AGENT`: start of an agent call.\n- `===== END`: end of an agent call and return code.\n\n## Examples\n\nPreview targets (no writes at all — no labels created, no issues edited):\n\n```bash\n./fixbuddy.sh --repo owner/repo --project ~/code/repo --severity high --dry-run\n```\n\nFix specific issues only:\n\n```bash\n./fixbuddy.sh --repo owner/repo --project ~/code/repo --issue 42 --issue 57\n```\n\nAdd a test gate so fixes are never reviewed unless all checks pass:\n\n```bash\n./fixbuddy.sh --repo owner/repo --project ~/code/repo \\\n  --check-cmd 'pnpm test' --check-cmd 'pnpm typecheck' \\\n  --fix-agent claude --review-agent codex\n```\n\nOpen PRs but do not request auto-merge:\n\n```bash\n./fixbuddy.sh --repo owner/repo --project ~/code/repo \\\n  --fix-agent claude --review-agent codex \\\n  --no-auto-merge --max 5\n```\n\nUse one agent for both roles:\n\n```bash\n./fixbuddy.sh --repo owner/repo --project ~/code/repo \\\n  --fix-agent claude --review-agent claude --max 3\n```\n\nUse agy (Antigravity CLI) as a cross-vendor reviewer:\n\n```bash\n./fixbuddy.sh --repo owner/repo --project ~/code/repo \\\n  --fix-agent claude --review-agent agy\n```\n\nGet a push notification when an unattended batch finishes (anything that reads stdin works — ntfy, a Slack webhook, `mail`):\n\n```bash\n./fixbuddy.sh --repo owner/repo --project ~/code/repo --max 10 \\\n  --notify-cmd 'curl -s -d @- ntfy.sh/my-fixbuddy-topic'\n```\n\n## Use in GitHub Actions\n\nfixbuddy ships a composite action, so you can run the pipeline from a workflow with a single `uses:` line.\n\n```yaml\nname: fixbuddy\non:\n  workflow_dispatch:\n  schedule:\n    - cron: '0 6 * * 1'   # every Monday 06:00 UTC\n\njobs:\n  fix:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: write\n      pull-requests: write\n      issues: write\n    env:\n      ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}\n      OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}\n    steps:\n      - uses: actions/checkout@v4\n\n      # Prerequisites in CI — runners do not ship the agent CLIs. See the note below.\n      - name: Install agent CLIs\n        run: |\n          npm install -g @anthropic-ai/claude-code\n          npm install -g @openai/codex\n\n      - uses: Codevena/fixbuddy@v1\n        with:\n          severity: high\n          max: \"5\"\n          fix-agent: claude\n          review-agent: codex\n\n      - name: Upload run logs\n        if: always()\n        uses: actions/upload-artifact@v4\n        with:\n          name: fixbuddy-logs\n          path: fixbuddy-logs/\n          if-no-files-found: ignore\n```\n\n### Permissions\n\nThe action drives `gh` with the workflow token, which needs more than the default read-only scopes. Set this exact block on the job (or workflow):\n\n```yaml\npermissions:\n  contents: write        # push fix/issue-N branches\n  pull-requests: write   # open PRs, request auto-merge\n  issues: write          # manage fix:* labels\n```\n\nIf `github-token` is empty the action fails fast with a clear error. Pass a different token through the `github-token` input when you need broader scope (for example a PAT for cross-repo runs).\n\n### Prerequisites in CI\n\nGitHub-hosted runners do **not** ship the agent CLIs (`claude`, `codex`, `opencode`, `agy`). Install whichever ones you pass to `fix-agent` / `review-agent` in a step *before* the `Codevena/fixbuddy` step — pinning them to a known version is recommended. Consult each agent's own documentation for the current install command. Note that `agy` has no npm package — install it with the vendor script: `curl -fsSL https://antigravity.google/cli/install.sh | bash`.\n\nThe action does not read API keys itself; each agent CLI reads its own environment variable (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, and so on). Provide them from `secrets` at the job or workflow level, as shown above.\n\nThe action does **not** run `actions/checkout` for you — your workflow controls the checkout. fixbuddy refuses to run against a dirty working tree, but a fresh CI checkout is always clean, so this is a non-issue in practice.\n\nA `dry-run: \"true\"` input lists target issues (with the planned config) without invoking any agent and without making any changes — useful for a first run, and it needs no API keys or agent CLIs at all.\n\n### Logs\n\nThe action copies each run's logs into `fixbuddy-logs/` in the workspace. Add an `actions/upload-artifact` step (see the snippet) to keep them after the runner is torn down.\n\n### Inputs\n\n| Input | Maps to | Default |\n| --- | --- | --- |\n| `repo` | `--repo` | current repository |\n| `project-path` | `--project` | `.` |\n| `fix-agent` | `--fix-agent` | `claude` |\n| `review-agent` | `--review-agent` | `codex` |\n| `severity` | `--severity` | none |\n| `label` | `--label` (comma-separated, becomes repeated flags) | none |\n| `max` | `--max` | `5` |\n| `base-branch` | `--base` | auto-detect |\n| `auto-merge` | `--no-auto-merge` when `false`; `--auto-merge` when `true` | `true` |\n| `dry-run` | `--dry-run` when `true` — lists targets, makes no changes | `false` |\n| `notify-cmd` | `--notify-cmd` (one command **per line** — newline-separated because shell commands may contain commas; use a YAML block scalar for multiple) | none |\n| `github-token` | `GH_TOKEN` for `gh` | `${{ github.token }}` |\n\nRunning fixbuddy in CI gives AI agents repository write access through whatever token you hand them. Read [SECURITY.md](SECURITY.md) before enabling this on a repository that matters.\n\n## FAQ\n\n**Does fixbuddy touch the base branch directly?**\nNo. It works on `fix/issue-N` branches and opens PRs against the base branch.\n\n**What happens when auto-merge is requested but checks are still running?**\nThe PR remains open with `fix:pr-open`. GitHub will merge it later if branch protection and checks allow it.\n\n**What happens if CI fails?**\nThe PR stays open. The issue keeps `fix:pr-open`, so a later fixbuddy run does not create a duplicate PR.\n\n**What happens if I interrupt a run (Ctrl-C)?**\nThe in-flight agent is stopped and the local branch is cleaned up; no label is set, so the issue simply stays in the queue. There is no separate resume mode because the labels already provide it: the next run picks up where the last one stopped (`fix:blocked` re-queues automatically, `fix:pr-open` prevents duplicate PRs).\n\n**Can I use fixbuddy in GitHub Actions?**\nYes — use the composite action with `uses: Codevena/fixbuddy@v1`. See [Use in GitHub Actions](#use-in-github-actions) for the workflow snippet, required `permissions:` block, and CI prerequisites.\n\n**Does it support Windows?**\nNative Windows is not tested. WSL2 is the recommended Windows environment.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Security\n\nSee [SECURITY.md](SECURITY.md).\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodevena%2Ffixbuddy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodevena%2Ffixbuddy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodevena%2Ffixbuddy/lists"}