AGRO gives AI coding agents a workspace you control. It packages a Docker sandbox and shared agent procedures around the coding harness you chooseβClaude Code, Codex, Pi, or another.
Develop on your laptop or a remote VM. Install tools and harnesses on demand, organize parallel changes in separate git worktrees, and use shared skills and evidence checks to guide the work.
Start with the quickstart below. See the documentation for more guidance.
π¦ Quickstart
AGRO runs one project in one Docker sandbox, and agro is the only
front door. Host prerequisites: Docker (with the Compose plugin), Git, and
Node.js β₯ 20.
1. Get agro
npm β you already have Node β₯ 20:
# Install globally
npm install -g @mifune/agro
# Or run without a global install
npx @mifune/agro --help
Use npx @mifune/agro in place of agro in later commands.
curl
# Install AGRO to ~/.local/bin; offers Node.js setup if needed
curl -fsSL https://agro.mifune.dev/get-agro.sh | bash
For a download-and-review alternative, see Installation.
Check the installed version, update AGRO, or see available commands:
# Check the installed version
agro --version
# Update AGRO
agro update
# Show available commands
agro --help
2. Create the sandbox
agro sandbox install docker runs from any directory β it needs no project
checkout:
Choose either setup option, then enter the sandbox:
# Create a sandbox with the setup wizard
agro sandbox install docker
# Or mount an existing project at /home/sandbox/harness
agro sandbox install docker --repo ~/my-project --name my-project
# Enter the sandbox; replace <name> with your sandbox name
agro shell <name>
3. Install tools
Inside the sandbox, start with Herdr, the terminal workspace for your agents and development tools:
# Install and open Herdr
agro tool install herdr
herdr
Run the remaining commands in a Herdr pane. Install only the tools you need:
| Tool | Purpose | Availability |
|---|---|---|
herdr |
Interactive terminal workspace | Install on demand |
agent-browser |
Browser automation | Install on demand |
cloudflared |
Public tunnels for local apps | Install on demand |
microsandbox |
MicroVM runtime CLI | Install on demand |
tailscale |
Private network connectivity | Install on demand |
gh |
GitHub CLI | Included |
docker-cli |
Docker client and Compose | Included |
# List tools and check availability
agro tool list
# Install an optional tool
agro tool install <id>
GitHub (optional): authenticate before repository work that uses GitHub. Confirm that the status output shows your intended account.
# Sign in and configure Git credentials
gh auth login
gh auth setup-git
# Verify your account
gh auth status
See GitHub authentication for help.
4. Install a coding harness
Choose one harness to start. In a Herdr pane, install and authenticate it:
# List available harnesses
agro harness list
# Install Claude Code
agro harness install claude-code
# Sign in and verify authentication
claude auth login
claude auth status
# Start Claude Code
claude
| Harness | ID | Availability |
|---|---|---|
| Claude Code | claude-code |
Install on demand |
| Codex | codex |
Install on demand |
| Pi | pi |
Install on demand |
| OpenCode | opencode |
Install on demand |
| Grok Build | grok-build |
Install on demand |
| Hermes | hermes |
Install on demand |
| Muse Code | muse-code |
Install on demand |
| T3 Code | t3code |
Run on demand via npx |
Use agro harness install <id> for other installable harnesses. Follow the linked
guides for authentication and launch commands. T3 Code requires an authenticated
Claude Code, Codex, or OpenCode provider.
5. Track your harness changes (optional)
With your coding harness and GitHub CLI configured, ask the agent to create a
repository for your harness changes. We recommend private visibility by
default, with origin pointing to your repository:
Create a private GitHub repo for my harness changes and set it as origin.
Verify my account, exclude secrets and runtime files, and preserve existing work.
Confirm the repo name, files, and any remote replacement before creating or pushing.
Configure https://github.com/mifunedev/agro.git as upstream, preserving my origin.
Check shared history; if unrelated, use a separate checkout inside the sandbox.
Include only my selected changes, exclude private data, and confirm before pushing or opening a PR.
See the contributing guide for the full workflow.
6. Configure messaging (optional)
Run setup inside the sandbox from a Herdr pane. Use a separate Slack app and
configuration for each gateway. We recommend opening another Herdr pane to
attach to its tmux session; detach with Ctrl-b d to leave the gateway running.
Hermes
# Install Hermes and configure its provider
agro harness install hermes
hermes setup
# Generate the Slack app manifest and print its location
hermes slack manifest --agent-view --write
Open Slack Apps, choose Create New App β From an
app manifest, and paste the generated JSON. Review its permissions, then
install the app to your workspace. Collect the bot token (xoxb-) and an
app-level token (xapp-) with connections:write scope.
# Enter the Slack tokens and configure access rules
hermes gateway setup
# Start the Hermes gateway and check its status
gateway hermes
gateway status
# Attach read-only from a Herdr pane; detach with Ctrl-b d
tmux attach -r -t client-slack-hermes
Send the bot a message and confirm a reply. See the Hermes Slack setup guide and gateway documentation.
Pi
In Slack Apps, create an app From an app
manifest using Pi's manifest. It configures
Socket Mode, events, and admin commands. Review permissions, install the app,
and collect its own xapp- (connections:write) and xoxb- tokens.
# Install Pi, then use /login in Pi and exit back to the shell
agro harness install pi
pi
# Save Pi's Slack tokens using hidden input prompts
cd /home/sandbox/harness
agro secret set PI_SLACK_APP_TOKEN
agro secret set PI_SLACK_BOT_TOKEN
# Start the Pi bridge and check its status
gateway pi
gateway status
# Attach read-only from a Herdr pane; detach with Ctrl-b d
tmux attach -r -t client-slack-pi
Message the bot and complete the trust challenge shown in the bridge. See the Pi Slack setup guide for token locations and access configuration.
7. Open the sandbox in VS Code (optional)
For a sandbox running on your local machine:
- Install VS Code's Dev Containers extension.
- Check that your sandbox is running with
agro sandbox liston the host. - Open the Command Palette (
Ctrl+Shift+P/Cmd+Shift+P), choose Dev Containers: Attach to Running Container, and select your sandbox. - Choose File β Open Folder and open
/home/sandbox/harnessβ the sandbox user's~/harnessfolder.
Use Attach to Running Container, not Reopen in Container.
Complete the sandbox setup on your remote host first. Then, from VS Code on your local machine:
- Install the Remote - SSH extension alongside Dev Containers.
- Run Remote-SSH: Connect to Host and connect to your Docker host using
user@host. - In the SSH-connected window, run Dev Containers: Attach to Running Container and select the sandbox on that host.
- Choose File β Open Folder and open
/home/sandbox/harness(~/harnessfor the sandbox user).
Connect over SSH to the host, not directly to the container. See the connection guide for more options.
8. Ask your agent to clone a project
From your agent session in ~/harness, ask:
Clone <owner>/<repo> into projects.
Example agent response after a successful clone:
Cloned
<owner>/<repo>to~/harness/projects/<owner>/<repo>. This is a separate repository with its own history and remote.
Then ask for an isolated workspace:
Create a worktree in <owner>/<repo> for issue #123.
Example agent response:
Created branch
task/123-my-changeand a worktree at~/harness/projects/<owner>/<repo>/.worktrees/task/123-my-change.
Worktrees share the project's Git history but keep separate checked-out files. Each parallel agent gets its own branch and worktree, so agents do not overwrite each other's work. The agent manages these folders; you do not need to configure them manually.
When the work is merged, ask:
Clean up the merged worktree for issue #123 in <owner>/<repo>.
Keep any uncommitted work.
π Table of Contents
Browse the documentation or jump to a topic below.
| Topic | Documentation |
|---|---|
| Getting started | Quickstart Β· Installation |
| Sandbox setup | Create a sandbox Β· VS Code and SSH |
| Daily operation | Lifecycle commands, stopping, and cleanup |
| Terminal workspace | Herdr |
| Coding harnesses | Harness overview and setup guides |
| Configuration | Settings and secrets |
| Agent procedures | Shared skills and hooks Β· Directory layout |
| Integrations | GitHub Β· Slack Β· Langfuse |
| Debugging and testing | DebugMCP Β· Property testing |
| Security | Permissions and trust boundaries |
| Contributing | Contribution workflow Β· Docs site source |
π€ Contributing & community
Contributions, bug reports, and feedback are welcome.
Contributing guide Β· GitHub issues
π License
Apache License 2.0 β copyright Ryan Eggleston, d/b/a Mifune Dev (mifune.dev). Prior MIT releases remain available under MIT; this change governs new code and future releases and does not revoke past grants.
Apache-2.0 covers the runtime, the oh CLI, container definitions, and the harness spec. The Mifune Console, the provisioning and fleet-management control plane, and billing / enterprise policy / RBAC / hosted operations are proprietary β see the open-core boundary.
Trademarks
Apache-2.0 Β§6 grants no permission to use the Mifune or Open Harness names, logos, or trade dress (reasonable, customary use in describing the origin of the work is fine). Fork it, modify it, sell it β just don't present your fork as Mifune.
No comments yet
Be the first to share your take.