StillKnotKnown 14fbc2ebb8 fix(gh-cli): use get_gh_executable() and pass GITHUB_CLI_PATH from GUI (ACS-321) (#1232)
* fix(gh-cli): use get_gh_executable() and pass GITHUB_CLI_PATH from GUI

Frontend changes:
- Add GITHUB_CLI_PATH environment variable detection in agent-process.ts
- Follow the existing CLAUDE_CLI_PATH pattern for gh CLI path passing
- Resolves issue where GUI (from Finder/Dock) doesn't have gh in PATH

Backend changes:
- gh_client.py: Use get_gh_executable() instead of hardcoded "gh"
- bot_detection.py: Use get_gh_executable() in _get_bot_username()
- runner.py: Use get_gh_executable() instead of shutil.which() duplication

This fix ensures gh CLI is found when the Electron app is launched from
Finder/Dock on macOS, or from non-terminal environments on Windows/Linux,
where the subprocess PATH doesn't include Homebrew or other custom install
locations.

The get_gh_executable() function already handles:
- GITHUB_CLI_PATH env var (now set by frontend)
- shutil.which("gh") fallback
- Platform-specific paths (Homebrew, Program Files)
- Windows 'where' command

Resolves: ACS-321

* tests: add comprehensive tests for gh CLI path detection (ACS-321)

Backend tests:
- Add tests/test_gh_executable.py with 28 tests covering:
  - gh executable verification with --version check
  - cache invalidation functionality
  - Windows 'where' command fallback
  - cross-platform path detection (Homebrew, Program Files)
  - run_gh() command execution wrapper

- Add tests for gh_cli_path detection in:
  - apps/backend/runners/github/test_gh_client.py (3 new tests)
  - apps/backend/runners/github/test_bot_detection.py (6 new tests)

Frontend tests:
- Add tests for GITHUB_CLI_PATH env var in:
  - apps/frontend/src/main/agent/agent-process.test.ts (6 new tests)

- Fix flaky subprocess-spawn.test.ts timeout issue by increasing timeout
  to 10 seconds for the spec creation test

- Fix TypeScript type errors in test mocks to match ToolDetectionResult type

All 43 new tests pass:
- 28/28 tests in test_gh_executable.py
- 3/3 new tests in test_gh_client.py
- 6/6 new tests in test_bot_detection.py
- 6/6 new tests in agent-process.test.ts

Resolves: ACS-321 test coverage

* fix(tests): improve test assertions and remove invalid noqa comment

- Remove invalid noqa: PY291 (not a valid ruff rule for CodeQL)
- Remove unused result variables
- Properly patch get_gh_executable in test_run_with_github_cli_path_env_var
- Add assertion to verify env var path was actually used

* fix(tests): fix CodeQL and test assertion issues

- Fix HIGH: Test assertion bug in test_bot_detection.py line 455 - was comparing list to string
- Fix MEDIUM: Add GITHUB_CLI_PATH verification in test_get_bot_username_uses_github_cli_path_env_var
- Fix MEDIUM: Remove tautological test_run_with_github_cli_path_env_var from test_gh_client.py
- test_gh_executable.py already has proper env var precedence tests

* fix(tests): emit exit synchronously to fix Windows CI timeouts

- Change from setImmediate to synchronous mockProcess.emit('exit', 0)
- This ensures the exit event fires before the await, preventing timeouts
- setImmediate was too slow on Windows CI, causing test failures

* style(tests): remove unused AsyncMock import

* refactor(agent): extract detectAndSetCliPath helper to reduce duplication

- Extracts common CLI path detection pattern into detectAndSetCliPath()
- Reduces code duplication between CLAUDE_CLI_PATH and GITHUB_CLI_PATH detection
- Both now use the same helper function with tool name and env var parameters
- Improves maintainability - future CLI tools can reuse this pattern

Suggested by code review (LOW priority).

* test(tests): improve test clarity and add subprocess call verification

- Rename test_get_bot_username_uses_github_cli_path_env_var to
  test_get_bot_username_uses_get_gh_executable_return_value for clarity
- Remove redundant GH_TOKEN monkeypatch (BotDetector sets it from bot_token)
- Add assertion for full command args including ['api', 'user']
- Add subprocess.run assertion to test_get_bot_username_without_token
  to verify no gh CLI invocation occurs when no token is provided

Suggested by code review.

* fix(tests): fix "should track running tasks" test timing

The test was failing because it emitted exit events before the spawn
async operations had completed and registered exit listeners. Using
vi.waitFor() ensures tasks are tracked before emitting exit.

* fix(tests): address code review feedback and Windows CI timeout

- [NEW-001] Add MOCK_GH_PATH constant in TestGhExecutableDetection class
  to avoid hardcoded Unix-style paths in test_bot_detection.py

- [NEW-002] Improve error message serialization in agent-process.ts
  detectAndSetCliPath() to properly extract error.message from Error objects

- Fix Windows CI timeout: Increase test timeouts from 10000ms to 15000ms
  for spec creation, task execution, and QA process tests

* docs: add note about pre-existing test failures

Add comment to clarify that some pre-existing test failures in the
full test suite (e.g., @testing-library/react v16 exports) are not
related to changes in this test file.

* fix(tests): ensure exit listeners are attached before emitting exit

Use setImmediate to wait for spawn to complete before emitting exit events.
This prevents flaky timeouts where exit fires before listeners are registered.

Addresses feedback about emitting exit before spawn listeners are attached.

* fix(tests): rename test to reflect actual behavior

The test 'should kill existing process when starting new one for same task'
was incorrectly named - the agent doesn't implement kill behavior for
duplicate tasks. Renamed to 'should allow sequential execution of same task'
to accurately reflect what the code actually does.

Kill behavior is out of scope for this bug fix (ACS-321).

* refactor(agent-process): make detectAndSetCliPath type-safe

- Add CliTool type and CLI_TOOL_ENV_MAP mapping at module level
- Remove envVarName parameter - now looked up via mapping
- Prevents mismatched toolName and envVarName pairs
- Fixes esbuild compatibility issue with private type syntax

* refactor(tests): use temp directory paths instead of hardcoded Unix paths

Replace MOCK_GH_PATH constant with platform-agnostic temp_state_dir / 'gh'
paths in TestGhExecutableDetection class. This follows cross-platform
guidelines by avoiding hardcoded Unix-style paths in tests.

* refactor(tests): address coderabbitai feedback

- test_bot_detection.py: Remove redundant monkeypatch.setenv() call in
  test_get_bot_username_uses_get_gh_executable_return_value since get_gh_executable
  is explicitly mocked to return mock_gh_path

- subprocess-spawn.test.ts: Keep original should kill all running tasks test
  that matches actual behavior (killAll removes tasks from tracking but doesn't
  call kill on already-exited mock processes)

---------

Co-authored-by: StillKnotKnown <stillknotknown@users.noreply.github.com>
Co-authored-by: Andy <119136210+AndyMik90@users.noreply.github.com>
2026-01-17 19:03:35 +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-02 11:56:36 +01:00
2026-01-13 22:46:29 +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:46:29 +01:00
2026-01-02 11:56:36 +01:00
2026-01-16 10:09:56 +01:00
2025-12-22 14:17:08 +01:00
2026-01-12 15:27:47 +01:00
2026-01-02 11:56:36 +01:00
2026-01-17 11:12:53 +01:00
2026-01-02 11:56:36 +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%