StillKnotKnown 2eef82bf2a fix(backend): improve gh CLI detection for PR creation (ACS-247) (#1071)
* fix(backend): improve gh CLI detection for PR creation

Fixes ACS-247 - Unable to Create PR - gh cli not found error

The Python backend was using bare "gh" command which relies on the
gh CLI being in the system PATH. On some systems, gh is installed
in locations not in PATH (e.g., Homebrew on macOS, Program Files
on Windows).

Changes:
- Add new gh_executable.py module for platform-specific gh CLI detection
  * Follows same pattern as git_executable.py
  * Checks GITHUB_CLI_PATH env var (from frontend)
  * Uses shutil.which() with fallback paths
  * Supports Homebrew (macOS), Program Files (Windows)
- Update worktree.py to use detected gh path
- Update frontend to pass GITHUB_CLI_PATH to Python backend

This ensures PR creation works reliably even when gh CLI is not in
the system PATH but is installed in common locations.

Refs: ACS-247

* refactor: address PR review feedback on gh_executable.py

- Fix unused global variable: return cached value instead of uncached
- Extract repeated subprocess.run pattern into helper functions:
  * _verify_gh_executable() - validates gh by checking version
  * _run_where_command() - runs Windows 'where' command
- Add explicit encoding='utf-8' to all subprocess.run calls
- Add invalidate_gh_cache() function for cache invalidation

Addresses review comments on PR #1071:
- Unused global variable warning (Code Scanning)
- Repeated subprocess.run pattern (Gemini Code Assist)
- Missing explicit encoding (Gemini Code Assist)
- Cache invalidation for edge cases (CodeRabbit)

Refs: ACS-247, PR #1071

* refactor: address remaining PR review feedback

- Add explanatory comment to except clause in _run_where_command()
- Make _run_where_command() more specific by hardcoding "where gh"
  * Removes generic command parameter to reduce shell=True risk surface
  * Uses list argument ["where", "gh"] instead of string command
- This addresses Code Scanning alert for empty except clause
- This addresses CodeRabbit feedback about shell=True security

Addresses additional review comments on PR #1071:
- Empty except clause (Code Scanning)
- Shell=True risk surface reduction (CodeRabbit)

Refs: ACS-247, PR #1071

* fix: correct subprocess.run usage for Windows where command

Fix bug where list argument ["where", "gh"] was used with shell=True,
which is incorrect on Windows. When using shell=True, the command
must be passed as a string, not a list.

Changed from:
  subprocess.run(["where", "gh"], ..., shell=True)

Changed to:
  subprocess.run("where gh", ..., shell=True)

This follows the same pattern as git_executable.py and fixes
the Sentry/CodeRabbit alerts about incorrect subprocess usage.

Addresses additional review comments on PR #1071:
- shell=True with list argument (CodeRabbit)
- subprocess.run bug (Sentry)

Refs: ACS-247, PR #1071

* refactor: remove redundant Windows path checks

Remove hardcoded Windows paths that are redundant with the
os.path.expandvars() calls. The expandvars calls will resolve
to the same values as the hardcoded paths, so keeping both
is unnecessary.

Removed:
- r"C:\Program Files\GitHub CLI\gh.exe"
- r"C:\Program Files (x86)\GitHub CLI\gh.exe"

Kept:
- os.path.expandvars(r"%PROGRAMFILES%\GitHub CLI\gh.exe")
- os.path.expandvars(r"%PROGRAMFILES(X86)%\GitHub CLI\gh.exe")
- os.path.expandvars(r"%LOCALAPPDATA%\Programs\GitHub CLI\gh.exe")

Addresses CodeRabbit review comment on PR #1071:
- Minor redundancy in Windows path checks

Refs: ACS-247, PR #1071

* fix: address PR review feedback on gh_executable.py

Address 6 findings from PR review:
- Add cache validation: check cached path still exists before returning
- Add run_gh() helper function to match run_git() pattern
- Validate _run_where_command() result with _verify_gh_executable()
- Add comment explaining shell=True requirement for Windows 'where' builtin
- Invalidate cache when FileNotFoundError occurs in worktree.py

These changes improve robustness of gh CLI detection and error handling,
ensuring stale cache entries are properly handled and the module follows
the same patterns as git_executable.py.

Signed-off-by: StillKnotKnown <stillknotknown@users.noreply.github.com>

* docs: fix misleading comment about Windows 'where' command

The comment incorrectly stated that 'where' is a Windows shell builtin.
It is actually a standalone executable (where.exe). Updated comment to
accurately reflect that shell=True is required for proper command execution.

Addresses review comment #9 from PR #1071.

Signed-off-by: StillKnotKnown <stillknotknown@users.noreply.github.com>

* docs: clarify cache invalidation comment in FileNotFoundError handler

The previous comment suggested the cache was invalidated "in case it was
reinstalled", but this handler is reached when the cached path became
invalid between get_gh_executable() check and subprocess.run() execution
(e.g., file was deleted/moved). Updated comment to accurately reflect
the purpose: clear stale cache so next call re-discovers the gh path.

Signed-off-by: StillKnotKnown <stillknotknown@users.noreply.github.com>

* fix: add cache invalidation in _get_existing_pr_url FileNotFoundError handler

For consistency with create_pull_request(), invalidate gh cache when
FileNotFoundError is caught. This ensures stale cached paths are cleared
if the gh executable becomes invalid between get_gh_executable() check
and subprocess.run() execution.

Signed-off-by: StillKnotKnown <stillknotknown@users.noreply.github.com>

---------

Signed-off-by: StillKnotKnown <stillknotknown@users.noreply.github.com>
Co-authored-by: StillKnotKnown <stillknotknown@users.noreply.github.com>
2026-01-15 21:40:58 +01:00
2025-12-22 14:17:08 +01:00
2026-01-12 15:27:47 +01:00
2026-01-12 15:27:47 +01:00
2026-01-12 15:27:47 +01:00
2026-01-12 15:27:47 +01:00
2026-01-02 11:56:36 +01:00
2026-01-12 15:27:47 +01:00
2025-12-10 09:10:55 +01:00
2026-01-02 11:56:36 +01:00
2026-01-13 22:45:44 +01:00
2026-01-02 11:56:36 +01:00
2026-01-12 15:27:47 +01:00
2025-12-22 14:17:08 +01:00
2026-01-02 11:56:36 +01:00
2026-01-12 15:27:47 +01:00
2026-01-02 11:56:36 +01:00
2026-01-13 22:33:08 +01:00
2026-01-02 11:56:36 +01:00
2026-01-14 12:20:58 +01:00
2026-01-02 14:13:17 +01:00
2025-12-15 21:10:27 +01:00

Auto Claude

Autonomous multi-agent coding framework that plans, builds, and validates software for you.

Auto Claude Kanban Board

License Discord YouTube CI


Download

Stable Release

Stable

Platform Download
Windows Auto-Claude-2.7.4-win32-x64.exe
macOS (Apple Silicon) Auto-Claude-2.7.4-darwin-arm64.dmg
macOS (Intel) Auto-Claude-2.7.4-darwin-x64.dmg
Linux Auto-Claude-2.7.4-linux-x86_64.AppImage
Linux (Debian) Auto-Claude-2.7.4-linux-amd64.deb
Linux (Flatpak) Auto-Claude-2.7.4-linux-x86_64.flatpak

Beta Release

⚠️ Beta releases may contain bugs and breaking changes. View all releases

Beta

Platform Download
Windows Auto-Claude-2.7.2-beta.10-win32-x64.exe
macOS (Apple Silicon) Auto-Claude-2.7.2-beta.10-darwin-arm64.dmg
macOS (Intel) Auto-Claude-2.7.2-beta.10-darwin-x64.dmg
Linux Auto-Claude-2.7.2-beta.10-linux-x86_64.AppImage
Linux (Debian) Auto-Claude-2.7.2-beta.10-linux-amd64.deb
Linux (Flatpak) Auto-Claude-2.7.2-beta.10-linux-x86_64.flatpak

All releases include SHA256 checksums and VirusTotal scan results for security verification.


Requirements

  • Claude Pro/Max subscription - Get one here
  • Claude Code CLI - npm install -g @anthropic-ai/claude-code
  • Git repository - Your project must be initialized as a git repo

Quick Start

  1. Download and install the app for your platform
  2. Open your project - Select a git repository folder
  3. Connect Claude - The app will guide you through OAuth setup
  4. Create a task - Describe what you want to build
  5. Watch it work - Agents plan, code, and validate autonomously

Features

Feature Description
Autonomous Tasks Describe your goal; agents handle planning, implementation, and validation
Parallel Execution Run multiple builds simultaneously with up to 12 agent terminals
Isolated Workspaces All changes happen in git worktrees - your main branch stays safe
Self-Validating QA Built-in quality assurance loop catches issues before you review
AI-Powered Merge Automatic conflict resolution when integrating back to main
Memory Layer Agents retain insights across sessions for smarter builds
GitHub/GitLab Integration Import issues, investigate with AI, create merge requests
Linear Integration Sync tasks with Linear for team progress tracking
Cross-Platform Native desktop apps for Windows, macOS, and Linux
Auto-Updates App updates automatically when new versions are released

Interface

Kanban Board

Visual task management from planning through completion. Create tasks and monitor agent progress in real-time.

Agent Terminals

AI-powered terminals with one-click task context injection. Spawn multiple agents for parallel work.

Agent Terminals

Roadmap

AI-assisted feature planning with competitor analysis and audience targeting.

Roadmap

Additional Features

  • Insights - Chat interface for exploring your codebase
  • Ideation - Discover improvements, performance issues, and vulnerabilities
  • Changelog - Generate release notes from completed tasks

Project Structure

Auto-Claude/
├── apps/
│   ├── backend/     # Python agents, specs, QA pipeline
│   └── frontend/    # Electron desktop application
├── guides/          # Additional documentation
├── tests/           # Test suite
└── scripts/         # Build utilities

CLI Usage

For headless operation, CI/CD integration, or terminal-only workflows:

cd apps/backend

# Create a spec interactively
python spec_runner.py --interactive

# Run autonomous build
python run.py --spec 001

# Review and merge
python run.py --spec 001 --review
python run.py --spec 001 --merge

See guides/CLI-USAGE.md for complete CLI documentation.


Development

Want to build from source or contribute? See CONTRIBUTING.md for complete development setup instructions.

For Linux-specific builds (Flatpak, AppImage), see guides/linux.md.


Security

Auto Claude uses a three-layer security model:

  1. OS Sandbox - Bash commands run in isolation
  2. Filesystem Restrictions - Operations limited to project directory
  3. Dynamic Command Allowlist - Only approved commands based on detected project stack

All releases are:

  • Scanned with VirusTotal before publishing
  • Include SHA256 checksums for verification
  • Code-signed where applicable (macOS)

Available Scripts

Command Description
npm run install:all Install backend and frontend dependencies
npm start Build and run the desktop app
npm run dev Run in development mode with hot reload
npm run package Package for current platform
npm run package:mac Package for macOS
npm run package:win Package for Windows
npm run package:linux Package for Linux
npm run package:flatpak Package as Flatpak (see guides/linux.md)
npm run lint Run linter
npm test Run frontend tests
npm run test:backend Run backend tests

Contributing

We welcome contributions! Please read CONTRIBUTING.md for:

  • Development setup instructions
  • Code style guidelines
  • Testing requirements
  • Pull request process

Community


License

AGPL-3.0 - GNU Affero General Public License v3.0

Auto Claude is free to use. If you modify and distribute it, or run it as a service, your code must also be open source under AGPL-3.0.

Commercial licensing available for closed-source use cases.


Star History

GitHub Repo stars

Star History Chart

S
Description
Autonomous multi-session AI coding
Readme AGPL-3.0 59 MiB
Languages
TypeScript 98.7%
JavaScript 0.6%
CSS 0.5%
Shell 0.2%