AgentIDE is a native macOS app for running, prompting and reviewing sandboxed AI coding agents in parallel git worktrees, from prompt to reviewed, merged pull request.
Worktrees, conversations, code reviews, pull requests and CI live in one window.
Built with SwiftUI on top of sandvault, herdr and the gh CLI.
My agentic coding setup, described in Sandboxes and Worktrees: My secure Agentic AI Setup, spanned four apps: an agent and worktree manager, a git GUI, a code editor and a terminal.
AgentIDE replaces all four with one app designed around the same workflow.
Agents run inside a separate, non-admin sandvault sandboxed user with no access to sensitive files or credentials, so they can work unattended without endangering the rest of the machine.
Their sessions live in a herdr server owned by the same sandbox user, so nothing is lost when the app quits, crashes or updates.
- Runs Claude Code or Codex CLI in parallel worktrees, sandboxed away from your personal files and credentials.
- Starts a new task from a prompt, GitHub issue, pull request or security advisory in triage or draft.
- Schedules repository prompts daily, weekly or monthly while AgentIDE is open, catching up once after reopening or waking.
- Shows agent activity, pull requests, CI checks and uncommitted changes across repositories in one sidebar.
- Keeps agents running when the app closes and conversations browsable and resumable after their worktrees are deleted.
- Scrolls the agent conversation under the pointer.
- Switches between visited agents instantly, preserving their terminal size and content.
- Reviews uncommitted changes, individual commits or whole branches as syntax-highlighted diffs with inline pull request comments.
- Requests reviews from another agent or Copilot and turns review comments and failing CI logs into prompts for fixes.
- Copies failing CI logs, clearing the clipboard immediately so stale text cannot be pasted while logs load.
- Copies pull request URLs and branch names from context menus on pull request rows, headers and actions, including stacked pull requests.
- Edits code with syntax highlighting, search and change tracking, keeping each worktree's open file and scroll position.
- Runs multiple shell tabs in each worktree for development servers, tests and other commands.
- Commits or amends selected files with messages drafted by Apple's on-device model.
- Pushes, rebases and manages pull requests, including forks and stacked branches.
- Merges pull requests and stacks, enables automerge for waiting standalone pull requests with or without a merge queue and shows when automerge is enabled or a pull request is queued.
- Can automatically remove clean, fully merged worktrees and branches when it observes a merge, leaving the selected worktree and main checkout in place.
- Notifies you when an agent finishes or needs input.
- Starts and steers work from a phone through SSH, Shortcuts and Siri.
- Windows or Linux support; being a native macOS app is the point.
- Running agents without a sandboxed non-admin user.
- Team, multi-user or hosted features: one developer, one Mac.
- An agent marketplace or bundled models; bring your own agent CLI.
- A native iOS app: SSH into
herdrfrom any iOS client instead. - An updater or a Mac App Store build; Homebrew's cask upgrades it, and the App Store sandbox forbids running agents as another user.
- An Apple silicon Mac running macOS Tahoe (26) or later.
- Homebrew, which installs the rest.
- sandvault, which creates the sandbox user and the shared workspace.
ghauthenticated as you; it stays with your user and agents never see it.herdrandmosh, installed byscript/bootstrap;moshonly matters from a phone.- Xcode 27 or later, only to build from source.
brew install --cask agentideThe agentide cask installs the latest release, and brew upgrade updates it.
Releases are signed with a Developer ID certificate and notarised by Apple.
Without Homebrew, download AgentIDE-<version>.zip from the releases page, unzip it and move AgentIDE.app to /Applications.
To run the current source instead:
script/bootstrap
script/installSettings (Cmd-,) controls:
- General: Choose session defaults, commit signing requirements and the external browser.
- Schedules: Manage each repository's recurring prompts, agent choices and next run.
- Sessions: Inspect and stop running agent sessions and browser pages.
- Review: Choose the reviewer and each agent's review model and effort.
- Notifications: Choose which events notify, badge the Dock or play a sound.
- Fonts: Customise fonts and sizes throughout the app.
- Editor: Choose the external editor opened with Cmd-click.
- Advanced: Set repository and worktree locations, refresh intervals, idle sleep and performance logging.
Double-click either pane divider to restore that pane's default width. The right divider and Resize Panes give the review pane one-third of the space beside the sidebar and the middle pane two-thirds, subject to their minimum and maximum widths.
A shell pane sets AGENTIDE=1 and puts the bundled agentide command on PATH, so shell files can hand editing back to the app:
if [ -n "${AGENTIDE}" ]; then
export EDITOR="$(command -v agentide) --wait"
export VISUAL="${EDITOR}"
fiagentide . from any terminal switches the window to the worktree you are in.
agentide /some/file opens the file in its worktree's editor.
Both expand the repository and bring AgentIDE to the foreground; a file outside every worktree opens beside the current selection.
Agents run as the sandbox user, so anything that can SSH to that user can start and steer them.
Moshi is the iOS client this is currently built around, because it speaks both mosh, so a phone changing network keeps its session rather than dropping it, and herdr, so it attaches to the same sessions the app does.
-
Put the phone's public key in sandvault's guest template, which is what the sandbox home is built from, then rebuild it. A sandvault upgrade replaces the template, so keep this in your dotfiles:
guest_keys="$(brew --prefix sandvault)/libexec/guest/home/.ssh/authorized_keys" cat "${HOME}/Downloads/moshi.pub" >>"${guest_keys}" sv --rebuild build
-
Name the shared workspace for logins from outside the sandbox, which do not inherit it, in
/etc/ssh/sshd_config.d/000-agentide.confwith your own user name and path in place of<you>, then turn on macOS's Remote Login for that account:Match User sandvault-<you> SetEnv SHARED_WORKSPACE=/Users/Shared/sv-<you> -
In the sandbox user's shell configuration, name the session and give the new-session command a short alias:
export HERDR_SESSION=agentide alias ain='/Applications/AgentIDE.app/Contents/Resources/bin/agentide new'
Connect as sandvault-<you> and run herdr: one attach presents every agent's workspace, and ain starts a new session, asking for repository, agent, model, effort and prompt.
A session steered from the phone is the same session the Mac shows.
script/bootstrap: installBrewfiledependencies and generate the Xcode project with XcodeGenscript/build: build the app;AgentIDE.appin the repository root symlinks its outputscript/version: print the version and build number git says, which scripted and Xcode builds both usescript/install: build, then copy the app to /Applicationsscript/test [--sanitize address|thread]: unit, integration and App Intents tests, optionally checking memory accesses or data racesscript/style [--fix]: SwiftLint and SwiftFormat, every rule onscript/analyze: static analysis and dead codescript/zipandscript/package: zip, sign and notarise a releasescript/attach: attach this terminal to the sandboxedherdrsession
Project code treats compiler and linker warnings as errors, with Swift's strict concurrency and memory safety checks enabled.
Xcode also runs Apple's static analyser during builds.
script/analyze adds SwiftLint's analysis and dead-code detection on the host and CI.
CI runs the test suite with Address Sanitizer on macOS 27.
Thread Sanitizer is available locally; its CI gate awaits a compatible SwiftTerm release fixing a shell-exit race.
Releases run the Release workflow from the Actions tab on main with a bare MAJOR.MINOR.PATCH version.
Releases publish only after the packaged app passes startup checks on macOS Tahoe and macOS 27.
Stable but changing regularly. AgentIDE is being designed exclusively for @MikeMcQuaid's personal workflow; nothing here promises to suit anyone else's, interfaces and behaviour may break without notice and there is no support.
AGPL-3.0. If you reuse or adapt the source the AGPL terms apply, including the network-use clause.
Octicons are vendored in App/Assets.xcassets and licensed under the MIT License.
