{"id":35072538,"url":"https://github.com/bxxf/auto-issue-resolver","last_synced_at":"2026-04-20T21:32:33.491Z","repository":{"id":328092782,"uuid":"1112711134","full_name":"bxxf/auto-issue-resolver","owner":"bxxf","description":"WIP: Autonomous AI agent that fixes GitHub issues in isolated cloud sandboxes","archived":false,"fork":false,"pushed_at":"2025-12-11T03:31:46.000Z","size":9315,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-11T20:36:19.198Z","etag":null,"topics":["agents","claude","cli","e2b","llms"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bxxf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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":"2025-12-09T02:04:17.000Z","updated_at":"2025-12-11T03:31:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bxxf/auto-issue-resolver","commit_stats":null,"previous_names":["bxxf/auto-issue-resolver"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/bxxf/auto-issue-resolver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bxxf%2Fauto-issue-resolver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bxxf%2Fauto-issue-resolver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bxxf%2Fauto-issue-resolver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bxxf%2Fauto-issue-resolver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bxxf","download_url":"https://codeload.github.com/bxxf/auto-issue-resolver/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bxxf%2Fauto-issue-resolver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32067370,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T21:26:33.338Z","status":"ssl_error","status_checked_at":"2026-04-20T21:26:22.081Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["agents","claude","cli","e2b","llms"],"created_at":"2025-12-27T11:57:43.579Z","updated_at":"2026-04-20T21:32:33.485Z","avatar_url":"https://github.com/bxxf.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WIP: Auto Issue Resolver (AIR)\n\n\u003e **This project is a work in progress.** Features may be incomplete, APIs may change, and there will be bugs. Contributions and feedback welcome!\n\n![Banner](./docs-static-assets/banner.png)\n\n---\n\n## The Origin Story\n\nI was working on a side project ([vibecode-arena](https://github.com/bxxf/vibecode-arena)) that uses [E2B](https://e2b.dev) for sandboxed code execution. While trying to deploy a custom template, I stumbled upon a bug related to file paths in ESM modules. So I did what any developer would do - went to create an issue explaining exactly what was wrong, including the root cause, the expected behavior, and how to reproduce it.\n\nThen I had to create the PR to fix it.\n\nAnd that's when it hit me: **the issue itself contained everything needed to generate the fix.** The bug description, the expected behavior, the reproduction steps - all the information an experienced developer would need was already there.\n\nSo I wondered: could an AI agent take a well-written GitHub issue and autonomously produce a working fix?\n\nI'm not sure if this already exists. But I'm building it anyway.\n\n---\n\n## What is Auto Issue Resolver?\n\n**AIR** is an autonomous agent that attempts to fix GitHub issues without human intervention. Unlike quick-fix tools, AIR takes its time - it can spend minutes or even hours methodically exploring a codebase, understanding the context, and reasoning through complex problems until it truly grasps what's going wrong.\n\nYou give it a GitHub issue URL, and it:\n\n1. **Clones** the repository into an isolated cloud sandbox\n2. **Analyzes** the issue to understand the problem\n3. **Explores** the codebase to find relevant code\n4. **Reproduces** the bug (if applicable)\n5. **Investigates** the root cause\n6. **Implements** a fix\n7. **Verifies** the fix with tests\n8. **Reports** its findings with a structured summary\n\nAll of this happens in a secure, isolated [E2B](https://e2b.dev) sandbox - so the agent can't accidentally (or intentionally) mess with your local machine.\n\n---\n## Why This is Exciting\n\n- **Well-written issues are half the solution.** If an issue clearly describes the problem, the fix often writes itself. AIR automates that last step.\n\n- **Secure by design.** All code execution happens in E2B cloud sandboxes. The agent has zero access to your local filesystem.\n\n- **Extended thinking.** Powered by Claude's reasoning capabilities, the agent can work through complex debugging scenarios step by step.\n\n- **Full visibility.** Watch the agent think in real-time - see its reasoning, tool calls, and decision-making process.\n\n![Demo](./docs-static-assets/demo.png)\n\n---\n\n## Getting Started\n\n### Prerequisites\n\n- [Bun](https://bun.sh) (v1.2+) or [Node.js](https://nodejs.org) (v20+)\n\n### API Keys Required\n\nYou'll need API keys from:\n- [Anthropic](https://console.anthropic.com/) - for Claude\n- [GitHub](https://github.com/settings/tokens) - for repository access\n- [E2B](https://e2b.dev/) - for cloud sandboxes\n\n### Installation\n\n```bash\n# Clone the repo\ngit clone https://github.com/bxxf/auto-issue-resolver.git\ncd auto-issue-resolver\n\n# Install dependencies\nbun install\n\n# Copy environment template\ncp .env.example .env\n\n# Edit .env with your API keys\n```\n\n### Configuration\n\nEdit `.env` with your API keys:\n\n```bash\n# Required\nGITHUB_TOKEN=ghp_...\nANTHROPIC_API_KEY=sk-ant-...\nE2B_API_KEY=e2b_...\n\n# Optional (defaults shown)\nE2B_TIMEOUT_MS=600000\nAGENT_DEFAULT_MODEL=claude-sonnet-4.5-20250929\n```\n\n### CLI Usage\n\n```bash\n# Build the project\nbun run build\n\n# Run interactively\nbun run air\n\n# Or with issue URL directly\nbun run air https://github.com/owner/repo/issues/123\n```\n\nThen paste a GitHub issue URL when prompted (e.g., `https://github.com/owner/repo/issues/123`).\n\n### Programmatic Usage\n\n```typescript\nimport { runAgent } from \"@bxxf/air-agent\";\nimport { parseIssueUrl, createGitHubClient } from \"@bxxf/air-core\";\n\n// Fetch issue details\nconst github = createGitHubClient({ token: process.env.GITHUB_TOKEN! });\nconst parsed = parseIssueUrl(\"https://github.com/owner/repo/issues/123\");\nif (!parsed.ok) throw new Error(parsed.error.message);\n\nconst [issue, repo] = await Promise.all([\n  github.fetchIssue(parsed.value),\n  github.fetchRepo(parsed.value),\n]);\n\nif (!issue.ok || !repo.ok) throw new Error(\"Failed to fetch issue/repo\");\n\n// Run the agent\nconst result = await runAgent({\n  issue: issue.value,\n  repo: repo.value,\n  config: {\n    model: \"claude-sonnet-4.5-20250929\",\n    maxThinkingTokens: 10000,\n    interactive: false,\n  },\n  sandboxConfig: {\n    apiKey: process.env.E2B_API_KEY!,\n    timeoutMs: 600000,\n    githubToken: process.env.GITHUB_TOKEN,\n  },\n  onEvent: (event) =\u003e {\n    switch (event.type) {\n      case \"tool_call\":\n        console.log(`Tool: ${event.tool}`);\n        break;\n      case \"message\":\n        console.log(`Agent: ${event.content}`);\n        break;\n      case \"ask_user\":\n        // Agent needs user input\n        console.log(`Question: ${event.question}`);\n        event.resolve(\"your answer here\");\n        break;\n      case \"complete\":\n        console.log(\"Done!\", event.report.status);\n        break;\n    }\n  },\n});\n\nif (result.ok) {\n  console.log(\"Report:\", result.value);\n} else {\n  console.error(\"Error:\", result.error);\n}\n```\n\n---\n\n### How It Works\n\n1. **CLI** (`apps/cli`) provides the interactive terminal interface\n2. **Agent** (`packages/agent`) orchestrates the issue resolution using Claude Agent SDK\n3. **MCP Server** (`packages/mcp-e2b`) exposes E2B sandbox operations as tools Claude can use\n4. **Core** (`packages/core`) provides shared config, types, and GitHub client\n\n---\n\n## Sandbox Tools\n\n| Tool | Description |\n|------|-------------|\n| `sandbox_clone` | Clone a GitHub repository |\n| `sandbox_exec` | Execute shell commands (npm, tests, etc.) |\n| `sandbox_read` | Read file contents |\n| `sandbox_write` | Write/overwrite entire file |\n| `sandbox_edit` | Replace string in file (surgical edits) |\n| `sandbox_ls` | List directory contents |\n| `sandbox_grep` | Search files with regex |\n| `sandbox_git_log` | Check recent commits |\n| `sandbox_git_checkout` | Switch to specific commit/branch |\n| `sandbox_bisect` | Git bisect to find bad commit |\n| `sandbox_browser` | Navigate URL + screenshot (for UI bugs) |\n| `sandbox_url` | Get public URL for testing web servers |\n| `ask_user` | Ask user for input when stuck |\n\n---\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|------------|\n| **AI** | [Claude Agent SDK](https://github.com/anthropics/claude-code) with extended thinking |\n| **Sandbox** | [E2B](https://e2b.dev) cloud sandboxes for secure code execution |\n| **CLI** | [Ink](https://github.com/vadimdemedes/ink) (React for the terminal) |\n| **Build** | [Turborepo](https://turbo.build/repo) monorepo with [Bun](https://bun.sh) |\n| **Language** | TypeScript (ESM) |\n| **Validation** | [Zod](https://zod.dev) for runtime type safety |\n\n---\n\n## Current Limitations\n\nThis is a work in progress. Known limitations:\n\n- **No PR creation yet** - The agent can fix code but doesn't create pull requests (coming soon)\n- **Single-issue focus** - Can't batch process multiple issues\n- **No persistent memory** - Each run starts fresh\n- **Model-dependent quality** - Results vary based on issue clarity and codebase complexity\n\n---\n\n## Roadmap\n\n- [ ] Automatic PR creation with fix and comments in the issue\n- [ ] Multi-agent architecture - spawn multiple agents to explore different parts of the codebase in parallel\n- [ ] Efficiency \u0026 speed - optimize how the agent navigates codebases, reducing token usage and time-to-fix\n- [ ] GitHub webhook integration - automatically process new issues\n- [ ] Web UI alternative to CLI to monitor progress / view reports\n- [ ] Batch processing of multiple issues\n- [ ] Persistent agent memory across sessions\n\n---\n\n## Contributing\n\nThis is an experimental project. If you find it interesting:\n\n1. Try it out and report bugs\n2. Suggest features via issues\n3. Submit PRs for improvements\n\n---\n\n## License\n\nMIT\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbxxf%2Fauto-issue-resolver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbxxf%2Fauto-issue-resolver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbxxf%2Fauto-issue-resolver/lists"}