
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. Everything a task passes through,
worktree, conversation, review, pull request and CI, is one window in
one app rather than several. 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, and their sessions live in a herdr server owned by the
same sandbox user, so nothing is lost when the app quits, crashes or
updates.
.editorconfig, comments
with Cmd-/, moves and duplicates lines, guides columns 80 and 118 and
bars every uncommitted line; an uncommitted file can also be put back
to what HEAD has, or deleted if it was never committed, after a
prompt.agentide new over SSH, Shortcuts
and Siri, and herdr for the sessions themselves.herdr from any iOS client instead.gh authenticated as you; it stays with your
user and agents never see it.herdr and mosh, installed
by script/bootstrap; mosh only matters from a phone.brew install --cask agentide
The 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/install
Settings (Cmd-,) controls:
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}"
fi
agentide . from any terminal switches the window to the worktree you
are in.
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.conf with
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: install Brewfile dependencies and generate the
Xcode project with XcodeGenscript/build: build the app; AgentIDE.app in 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: unit, integration and App Intents testsscript/style [--fix]: SwiftLint and SwiftFormat, every rule onscript/analyze: static analysis and dead codescript/zip and script/package: zip, sign and notarise a releasescript/attach: attach this terminal to the sandboxed herdr sessionReleases run the Release workflow from the Actions tab on main with
a bare MAJOR.MINOR.PATCH version.
Stable but changing daily. 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.
Hacker News (1)
Swift
97.8%
Shell
2.1%

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. Everything a task passes through,
worktree, conversation, review, pull request and CI, is one window in
one app rather than several. 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, and their sessions live in a herdr server owned by the
same sandbox user, so nothing is lost when the app quits, crashes or
updates.
.editorconfig, comments
with Cmd-/, moves and duplicates lines, guides columns 80 and 118 and
bars every uncommitted line; an uncommitted file can also be put back
to what HEAD has, or deleted if it was never committed, after a
prompt.agentide new over SSH, Shortcuts
and Siri, and herdr for the sessions themselves.herdr from any iOS client instead.gh authenticated as you; it stays with your
user and agents never see it.herdr and mosh, installed
by script/bootstrap; mosh only matters from a phone.brew install --cask agentide
The 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/install
Settings (Cmd-,) controls:
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}"
fi
agentide . from any terminal switches the window to the worktree you
are in.
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.conf with
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: install Brewfile dependencies and generate the
Xcode project with XcodeGenscript/build: build the app; AgentIDE.app in 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: unit, integration and App Intents testsscript/style [--fix]: SwiftLint and SwiftFormat, every rule onscript/analyze: static analysis and dead codescript/zip and script/package: zip, sign and notarise a releasescript/attach: attach this terminal to the sandboxed herdr sessionReleases run the Release workflow from the Actions tab on main with
a bare MAJOR.MINOR.PATCH version.
Stable but changing daily. 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.
Hacker News (1)
Swift
97.8%
Shell
2.1%