Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
38d032a
Let a custom provider save when /models does not list its model
cestercian Oct 15, 2026
eb98157
Describe Gemini 4 Argon as available on Team
igorcosta Oct 17, 2026
52d1318
Parse --sync-settings as a boolean
igorcosta Oct 17, 2026
0da9b68
Gate project meta-tools on workspace trust and stop them shadowing us…
igorcosta Oct 17, 2026
0a06c0a
Send OpenRouter the attribution headers it ranks apps by
igorcosta Oct 17, 2026
0a871dd
Add the npm keywords people search for a coding agent by
igorcosta Oct 17, 2026
a5925ce
Include project tool files in workspace trust
igorcosta Oct 17, 2026
b01a061
Send OpenRouter's current title and category headers
igorcosta Oct 18, 2026
3ba7c7f
List all 17 built-in providers in the README
igorcosta Oct 19, 2026
d704543
State the Node.js 22 requirement in the README
igorcosta Oct 19, 2026
04129fb
Import Claude MCP servers and keep creds local
sagnik3788 Oct 20, 2026
8bf8bf7
Imported MCP creds out of the worktree
sagnik3788 Oct 20, 2026
dc44e01
Fix Claude MCP server import issues(codex review)
sagnik3788 Oct 20, 2026
db093e4
Keep released CLI installations successful when Computer control is u…
igorcosta Oct 22, 2026
a7b6758
Verify PowerShell skips unsupported commands and keeps optional failu…
igorcosta Oct 22, 2026
23ad85c
Retain published Zit support when syncing the canonical installers
igorcosta Oct 22, 2026
fdb9135
Translate Claude permission rules with source semantics and safe prev…
igorcosta Oct 23, 2026
aaad9d2
Merge remote-tracking branch 'origin/main' into cto/f0196-claude-perm…
igorcosta Oct 23, 2026
abdef2a
Align installer and terminal proof with current contracts
igorcosta Oct 23, 2026
5e2046b
Merge branch 'cto/f0196-ci-prerequisites-20261023' into cto/f0196-cla…
igorcosta Oct 23, 2026
e6b333c
Restore composer ownership after session export dialogs
igorcosta Oct 23, 2026
c954b5a
Merge branch 'cto/f0196-ci-prerequisites-20261023' into cto/f0196-cla…
igorcosta Oct 23, 2026
2017778
Match the resume help fixture to its declared reference argument
igorcosta Oct 23, 2026
124cc56
Preserve worktree changes and clean up safe sessions for F-0199
igorcosta Oct 23, 2026
00e85c6
Include the commercial licence in npm packages
igorcosta Oct 23, 2026
591d5d5
Respect Chrome profile locks and report the Free search allowance
igorcosta Oct 26, 2026
59f665e
Use the approved Chrome fallback and Free search notices
igorcosta Oct 26, 2026
072a02f
Use 272k context windows for OpenAI GPT-5.6 and GPT-6
igorcosta Oct 28, 2026
bffe436
Allow Team and Enterprise accounts to start Cloud CLI sessions
igorcosta Oct 28, 2026
8f94c3c
Enforce accepted-plan permissions and refresh model and quota guidance
igorcosta Oct 28, 2026
4022f98
Update model catalogue and terminal regression expectations
igorcosta Oct 28, 2026
c8f30e0
Keep the Weka terminal check focused on the selection guidance
igorcosta Oct 28, 2026
9475842
Make team recovery explicit and honor native shell selection
igorcosta Oct 28, 2026
3a7d739
Integrate context windows, package licensing, and provider documentat…
igorcosta Oct 28, 2026
52c56c2
Integrate Team and Enterprise Cloud admission for PR #711
igorcosta Oct 28, 2026
e274cf2
Preserve worktree data and integrate safe session cleanup from PR #702
igorcosta Oct 28, 2026
d6ecf64
Integrate workspace tool trust and OpenRouter attribution from PR #680
igorcosta Oct 28, 2026
0eaadb6
Integrate Chrome profile safety and Free search reporting from PR #708
igorcosta Oct 28, 2026
658a89e
Complete the environment choice in paid Cloud terminal tests
igorcosta Oct 28, 2026
4aca484
Wait for the visible permission modal before keyboard navigation
igorcosta Oct 28, 2026
f45a1fb
Clarify Cloud CLI plan and version requirements
igorcosta Oct 28, 2026
8a10d30
Clarify Cloud plan requirements in the feature list
igorcosta Oct 28, 2026
9c67a3f
Integrate scoped Claude permission import from PR #699
igorcosta Oct 28, 2026
3f815dd
Integrate accepted-plan permissions and model guidance from PR #714
igorcosta Oct 28, 2026
7049582
Reconcile the already adopted custom-provider confirmation in PR #676
igorcosta Oct 28, 2026
6c4f3f4
Complete optional Computer Use installation compatibility from PR #693
igorcosta Oct 28, 2026
16f0029
Integrate local-only Claude MCP server import from PR #686
igorcosta Oct 28, 2026
0569a36
Reconcile current Cloud copy and terminal readiness checks from PR #711
igorcosta Oct 28, 2026
3e69631
Clarify Weka access through Console
igorcosta Oct 28, 2026
9cbe55b
Align Weka tier-policy test with Console availability
igorcosta Oct 28, 2026
5bce11f
Keep project tools, private imports, and terminal checks reliable
igorcosta Oct 28, 2026
22ca95c
Include the current Weka availability guidance from PR 714
igorcosta Oct 28, 2026
79a26ef
Verify team recovery with colored terminal output
igorcosta Oct 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,14 @@ jobs:
AUTOHAND_SKIP_COMPUTER_CONTROL_INSTALL: '1'
run: sh src/testing/scenarios/fresh-alpha-install.sh ./binaries/autohand-test ci-alpha-smoke

- name: Verify Git Bash shell execution
if: runner.os == 'Windows'
shell: bash
timeout-minutes: 10
run: |
cygpath --version
bun run test:ci tests/windowsShell.integration.test.ts tests/ui/ink/TeamPanel.test.tsx

- name: Verify binary (Unix)
if: runner.os != 'Windows'
run: |
Expand All @@ -209,3 +217,30 @@ jobs:
if ($LASTEXITCODE -ne 0) {
throw "Windows --help smoke test failed with exit code $LASTEXITCODE"
}

windows-tuistory:
runs-on: windows-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0

- uses: actions/setup-node@v7
with:
node-version: 24
package-manager-cache: false

- uses: oven-sh/setup-bun@v2
with:
bun-version-file: package.json

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Build CLI for terminal tests
run: bun run build

- name: Verify native team recovery from Git Bash
shell: bash
run: bun run test:tuistory tests/tuistory/team-activity.tuistory.test.ts
27 changes: 27 additions & 0 deletions .github/workflows/installer-release-compatibility.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Installer release compatibility
on:
pull_request:
paths:
- install.sh
- install.ps1
- scripts/install-computer-use.mjs
- src/testing/scenarios/released-installer-smoke.py
- .github/workflows/installer-release-compatibility.yml
schedule:
- cron: '21 6 * * *'
workflow_dispatch:
permissions:
contents: read
jobs:
released-installer:
timeout-minutes: 12
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
channel: [stable, alpha]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- name: Install the independently published binary in a clean HOME
run: python3 src/testing/scenarios/released-installer-smoke.py --channel '${{ matrix.channel }}'
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@

## Unreleased

### Added

- Translate supported Claude Code user and project permission rules during import, with a dry-run preview, and remove raw settings and environment data left by earlier imports.

### Fixed

- Keep npm installation successful when optional Computer control setup fails, matching the standalone installers.

- Restore the interactive composer after session export dialogs so typing and a clean exit remain available.

### Changed

- Persistent goals (`/goal`, `/goals` and `--goal`) are enabled by default for 0.9.9. Existing explicit settings are preserved; `/experiments disable slash_goal` turns them off.
Expand Down
14 changes: 12 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ Interactive sessions assess repository readiness in the background while you wor

The shell installer includes [Zit](https://getzit.org) v0.1.2 by default on supported macOS and Linux platforms, preserving an existing installation and verifying release checksums. Use `--no-zit` or `AUTOHAND_SKIP_ZIT_INSTALL=1` to opt out. The Windows installer supports `-NoZit` and the same environment variable; it preserves an existing Zit installation and reports that native Windows binaries are currently unavailable. `autohand --zit` requires Git 2.38 or newer. Installing Zit does not initialize repositories.

On Windows, running `install.sh` from Git Bash, MSYS, or Cygwin delegates to the native PowerShell installer and preserves installation options. Autohand launched from Git Bash uses Bash for command tools; see [shell settings](docs/config-reference.md#shell-settings) to choose an executable explicitly.

The npm package includes checksum-verified Zit binaries for macOS and Linux on ARM64 and x64. `npm install -g autohand-cli` and `bun install -g autohand-cli` download them with the package, including when lifecycle scripts are disabled. Autohand uses `ZIT_BIN`, an existing `zit` on `PATH`, or its packaged binary, in that order. Rust and a separate Zit installation are not required. Native Windows Zit binaries are currently unavailable.

- **Terminal-Native Agent**: Understands your codebase and executes approved changes from the CLI
Expand Down Expand Up @@ -107,7 +109,8 @@ bun add -g .

### Requirements

- Bun ≥1.0 (`curl -fsSL https://bun.sh/install | bash`)
- Node.js 22 or later (to run Autohand)
- Bun 1.0 or later, only to build from source (`curl -fsSL https://bun.sh/install | bash`)
- Git (for version control features)
- ripgrep (optional, for faster search)

Expand Down Expand Up @@ -600,6 +603,13 @@ Create `~/.autohand/config.json` or use `config.toml`, `config.yaml`, or `config
| llama.cpp | `llamacpp` | Local inference |
| MLX | `mlx` | Apple Silicon optimized |
| Z.ai | `zai` | High-performance inference |
| Anthropic | `anthropic` | Claude models with your own API key |
| Azure OpenAI | `azure` | Azure deployments via API key, Entra ID or managed identity |
| Vertex AI | `vertexai` | Google models on Vertex AI |
| xAI | `xai` | Grok models via API key or OAuth |
| Cerebras | `cerebras` | Hosted fast inference |
| NVIDIA | `nvidia` | NVIDIA-hosted models |
| Sakana AI | `sakana` | Sakana AI models |

## Session Management

Expand Down Expand Up @@ -803,7 +813,7 @@ We welcome contributions! Please read our [Contributing Guide](CONTRIBUTING.md)

### Common Issues

**Installation fails**: Make sure you have Bun installed and up to date.
**Installation fails**: Make sure Node.js 22 or later is installed. Building from source also needs Bun.

**Permission denied**: Check your file permissions and try running with appropriate privileges.

Expand Down
4 changes: 2 additions & 2 deletions docs/cloud-blog-draft.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Editorial draft. Keep unpublished until CLI and Desktop release readiness and na

Start a hosted agent from the terminal, close the terminal while it works, and reconnect to the saved conversation. Autohand Cloud adds `--cloud`, `/cloud`, `/handoff`, and `/open` to the CLI. The same session can be reviewed in Code Web and an updated Autohand Desktop app.

Cloud CLI sessions are available only to Pro, Pro+, and Max accounts. Your selected account still needs active billing, model capacity, and permission to operate resources. A paid plan does not grant access to a repository that you have not authorized.
Cloud CLI sessions need Pro, Pro+, Max, Team or Enterprise. Team and Enterprise need CLI 0.9.10 or later. Your selected account still needs active billing, model capacity, and permission to operate resources. A paid plan does not grant access to a repository that you have not authorized.

## Start a task where you work

Expand Down Expand Up @@ -83,7 +83,7 @@ Desktop links carry only a session ID and account ID. The remote cloud window ha

The native CLI route authenticates a single account credential and forwards only allowlisted operations through the existing hosted API. It rechecks membership, ownership, write permissions, plan eligibility, model capacity, and repository grants. Browser cookies mixed with native bearer credentials are rejected. Responses remain private and are not cached.

Only Pro, Pro+, and Max can admit new cloud work through this interface. Owned stop and queue cleanup remain available after a downgrade. If durable Jobs are unavailable, admission fails instead of falling back to execution tied to the terminal request.
Only these plans can start new cloud work. Owned stop and queue cleanup remain available after a downgrade. If durable Jobs are unavailable, admission fails instead of falling back to execution tied to the terminal request.

Local `--yes`, `--yolo`, custom MCP settings, system prompts, and tool-scope overrides cannot bypass hosted policy. Unsupported combinations fail before cloud launch. Local restrictions that Cloud cannot represent also fail closed. Read-only plan mode can preserve deny rules limited to mutating workspace operations; other custom restrictions require local execution.

Expand Down
4 changes: 2 additions & 2 deletions docs/cloud.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Autohand Cloud from your terminal

Cloud CLI sessions are available only to **Pro, Pro+, and Max** accounts. Free,
Lite, Team, and Enterprise accounts cannot start cloud work through this interface.
Cloud CLI sessions need Pro, Pro+, Max, Team or Enterprise. Team and Enterprise need CLI 0.9.10 or later.
Free and Lite accounts cannot start cloud work through this interface.
The selected account also needs write access, active billing, available model
capacity, and repository authorization. Sign in with `autohand login`.

Expand Down
27 changes: 24 additions & 3 deletions docs/config-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -1683,7 +1683,7 @@ git add -A && git commit -m "feat: add user dashboard with charts"

## Shell Settings

Control what shell commands started by Autohand can see. This covers the `run_command` tool, `!` terminal commands, and streaming or interactive shells. Hook commands and MCP server processes have their own launchers and are not affected.
Choose the shell used by `run_command`, foreground and background `!` commands, and streaming shells, and control their environment. Hook commands and MCP server processes have their own launchers and are not affected.

```json
{
Expand All @@ -1700,13 +1700,17 @@ Control what shell commands started by Autohand can see. This covers the `run_co

| Field | Type | Default | Description |
| ------------- | -------- | ------- | ---------------------------------------------------------------------------------------------------- |
| `executable` | string | auto | Shell executable or full path, such as `C:\\Program Files\\Git\\bin\\bash.exe`, `pwsh.exe`, or `/bin/zsh` |
| `dialect` | string | inferred | `posix`, `cmd`, or `powershell`; requires `executable`. Controls command invocation and the syntax described to the agent |
| `env.inherit` | string | `all` | `all` passes the whole parent environment; `essential` keeps PATH, HOME, USER, SHELL, TMPDIR, locale and terminal variables (plus their Windows equivalents); `none` starts empty |
| `env.include` | string[] | `[]` | Variable names or globs to add back on top of the inherited set |
| `env.exclude` | string[] | `[]` | Variable names or globs removed after inheritance and includes |
| `env.set` | object | `{}` | Values pinned for every command; applied last |

Variables Autohand needs to run its own tooling (`AUTOHAND_*`, `AUTOHAND_CLI`, `AUTOHAND_HOME`, `CODEX_HOME`) are always present. Explicit per-command overrides supplied by a tool call still win over the policy.

By default, macOS/Linux use `SHELL` or `/bin/sh`. Native Windows uses `ComSpec` or `cmd.exe`. When launched from Git Bash (`MSYSTEM` is set), Autohand resolves its Bash executable with `cygpath.exe` and uses POSIX command syntax. If that conversion fails, configure the full Windows path to `bash.exe`. Bug reports identify the selected command shell and dialect separately from the parent shell.

## Network Settings

```json
Expand Down Expand Up @@ -2411,6 +2415,7 @@ Configure MCP (Model Context Protocol) servers to extend Autohand with external
| `headers` | `Record<string, string>` | No | `{}` | Custom HTTP headers for http/sse transport (e.g. auth tokens) |
| `env` | `Record<string, string>` | No | `{}` | Environment variables passed to the server |
| `autoConnect` | `boolean` | No | `true` | Whether to auto-connect on startup |
| `localOnly` | `boolean` | No | `false` | Keep the server on this device; do not publish it to the account control plane |

> Servers connect asynchronously in the background during startup without blocking the prompt. Use `/mcp` to manage servers interactively, or `/mcp add` to browse the community registry or add custom servers.

Expand Down Expand Up @@ -2564,6 +2569,18 @@ Only compatible command hooks are translated. Unsupported source HTTP, prompt/ag

See [hook import compatibility](./hooks.md#import-hooks-from-another-coding-agent) for source file locations, event mappings, timeout defaults, supported responses, and manual-porting limits.

### Import MCP Servers from Claude Code

```sh
autohand import claude --categories mcp
```

The importer reads user servers from `~/.claude.json`, current-project servers from `projects[<workspace path>].mcpServers` in that file, and project servers from `<workspace>/.mcp.json`. Use `--path <workspace>` when importing for a workspace other than the current directory.

Stdio servers keep their `command`, `args`, and `env`; HTTP and SSE servers keep their `url` and `headers`. User servers are added to the selected user config. Project servers are added to `<workspace>/.autohand/settings.local.json`. Imported servers are saved with `autoConnect: false`, so review them before enabling them. Existing servers with the same name are preserved and reported as skipped (`already exists`).

Environment values and headers are copied as configured. The importer does not print server values, and imported servers stay on this device instead of being published to the account control plane.

---

## Chrome Extension Settings
Expand Down Expand Up @@ -2956,6 +2973,10 @@ These flags override config file settings:
| `--patch` | Generate git patch without applying changes |
| `--output <file>` | Output file for patch (used with --patch) |

When a `--worktree` session ends, Autohand removes its worktree only when there are no uncommitted or untracked files and no commits missing from the original branch. A branch created for that session is also removed; pre-existing branches are retained. Otherwise it prints `Kept worktree <path> (branch <b>) with changes` so you can recover your work. This cleanup applies to interactive, command, patch, RPC and ACP sessions; tmux and Zit behavior is unchanged.

The agent's `exit_worktree` tool follows the same preservation rule and returns to the original workspace. `keep: true` always keeps the worktree. `discard_changes: true` explicitly requests removal with changes and follows the deletion approval policy; the restricted client profile denies it. `keep` takes precedence when both options are set. Cleanup stops safely if Git cannot verify the worktree or original branch.

### Zit Sessions

`--zit` is the counterpart of `--worktree` for repositories shared by several agents through [Zit](https://github.com/autohandai/getzit). Instead of a git worktree and branch, the session runs in a disposable copy of the repository's current Zit state, and its edits are recorded as one Zit change when the session ends.
Expand Down Expand Up @@ -3471,6 +3492,6 @@ Fantail ignores this setting; local sessions do not advertise it.

`search.provider` accepts `autohand`, `browser-profile`, `exa`, `brave`, `parallel`, `google`, and `duckduckgo`. An explicit `--search-engine` wins over the saved setting in interactive, patch, automatic, RPC, and ACP modes.

When no provider is selected, a signed-in account with server-verified paid access uses Autohand Web Search. Lite, Pro, Pro Plus, Max, Team, and Enterprise include this service through `https://dev.autohand.ai/api/native/web-search`; Free users configure an existing provider during standard or quick setup, or with `/search`. Queries are limited to 1,024 characters, 10 results, and 30 requests per account per minute. Access uses the selected Autohand account and existing account credentials; customers do not need Cloudflare credentials. A failed hosted search reports its status and does not change providers.
When no provider is selected, a signed-in account with server-verified access uses Autohand Web Search. Verified Free accounts include 10 web searches a day, shared with Code Web for the same account and reset at 00:00 UTC. `/search` shows the remaining allowance. At the cap, the tool returns the upgrade link and reset time, and the CLI prints that notice once per session. Lite, Pro, Pro Plus, Max, Team, and Enterprise retain their included search access. Queries are limited to 1,024 characters, 10 results, and 30 native requests per account per minute. Access uses the selected Autohand account and existing account credentials; customers do not need Cloudflare credentials. A failed hosted search reports its status and does not change providers.

Browser Profile is the local default. Connect Chromium through `/browser` or provide an available Chrome/Brave profile. A missing, locked, or blocked profile produces a setup error instead of silently switching to Google. Exa, Brave, and Parallel require `search.exaApiKey`, `search.braveApiKey`, or `search.parallelApiKey`, respectively, or `EXA_API_KEY`, `BRAVE_SEARCH_API_KEY`, or `PARALLEL_API_KEY`. Onboarding never saves a keyed provider with a blank key. Google and DuckDuckGo can be selected explicitly; automated requests may receive CAPTCHA challenges.
Browser Profile is the local default. Connect Chromium through `/browser` or provide an available Chrome/Brave profile. Before launching the profile, Autohand checks its `SingletonLock`, including Chromium's symlink lock. With Chrome open, search uses the connected Chrome bridge first, then eligible Autohand Web Search, then one line directing you to `/search`. A locked profile with no fallback is not offered to the model. A closed profile keeps the existing browser search path. Exa, Brave, and Parallel require `search.exaApiKey`, `search.braveApiKey`, or `search.parallelApiKey`, respectively, or `EXA_API_KEY`, `BRAVE_SEARCH_API_KEY`, or `PARALLEL_API_KEY`. Onboarding never saves a keyed provider with a blank key. Google and DuckDuckGo can be selected explicitly; automated requests may receive CAPTCHA challenges.
2 changes: 1 addition & 1 deletion docs/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Autohand is an autonomous LLM-powered coding agent designed to work directly in
- [ ] Search history and command palette

## Session Management
- [x] [Cloud sessions](cloud.md): hosted execution, reconnect, queue steering, approvals, and local/cloud handoff for Pro, Pro+, and Max
- [x] [Cloud sessions](cloud.md): hosted execution, reconnect, queue steering, approvals, and local/cloud handoff. Needs Pro, Pro+, Max, Team or Enterprise (Team and Enterprise from CLI 0.9.10).
- [x] Auto-save to `~/.autohand/sessions`
- [x] Resume with `/resume` or `autohand resume <id>`
- [x] History tracking (interactions, tool outputs, agent thoughts)
Expand Down
Loading
Loading