This guide will walk you through setting up and using sandboxed.sh for the first time, from configuring your backend connection to creating your first AI-powered mission.
sandboxed.sh is a powerful AI agent orchestration platform that manages multiple AI coding assistants (OpenCode, Claude Code, Amp) through a unified dashboard. It provides:
- Git-backed configuration library - Store and version control your skills, agents, commands, and tools
- Multiple workspace support - Isolated containers for different projects
- Config profiles - Manage different configurations for each AI harness
- Mission control - Queue and manage AI tasks with real-time monitoring
Before starting, you need:
-
sandboxed.sh backend running (locally or remote)
- Local:
http://localhost:3000(default) - Remote: Your server URL (e.g.,
https://agent-backend.example.com)
- Local:
-
Dashboard Access
- Web:
http://localhost:3001(local development) - iOS app: Available from the App Store
- Web:
Before or after backend changes, run the smoke scripts against your dev deployment to quickly validate model routing and harness streaming behavior.
Required environment variables:
export SANDBOXED_SH_DEV_URL="https://your-dev-backend.example.com"
export SANDBOXED_SH_TOKEN="<control-api-token>"
export SANDBOXED_SH_WORKSPACE_ID="<workspace-uuid>"
export SANDBOXED_PROXY_SECRET="<proxy-bearer-token>"Run the unified smoke gate:
scripts/smoke_harnesses_dev.sh \
--backend claudecode \
--backend opencode \
--backend codex \
--model-override opencode=builtin/smart \
--expect-model opencode=glm-5 \
--non-streamingNotes:
- Use
--skip-proxyto run harness streaming smoke only. - Use
--skip-missionto run proxy smoke only. - Use
--helpto see all options.
If you use /v1/chat/completions with model-routing chains, you can opt into deferred mode when every provider in the chain is temporarily rate-limited.
Set this request header:
x-sandboxed-defer-on-rate-limit: true
Behavior:
- Normal success path: response is still synchronous (
200). - All providers exhausted by temporary limits/unavailability: returns
202 Acceptedwithrequest_id,status=queued, andnext_attempt_at. - Background worker retries automatically; no client resubmission needed.
Check status/result:
curl -H "Authorization: Bearer $SANDBOXED_PROXY_SECRET" \
"http://localhost:3000/v1/deferred/<request_id>"Cancel queued work:
curl -X DELETE \
-H "Authorization: Bearer $SANDBOXED_PROXY_SECRET" \
"http://localhost:3000/v1/deferred/<request_id>"Note: deferred mode currently supports non-streaming requests (stream: false).
When you first access the sandboxed.sh dashboard, you'll see the global monitor overview:
The dashboard shows:
- Navigation sidebar - Access different sections (Overview, Mission, Workspaces, Library, Settings)
- Global Monitor - Real-time view of running missions
- Recent Missions - History of completed tasks
- Agent Status - Current state (Ready, Busy, etc.)
Click the Settings button in the left sidebar to expand the settings menu:
You'll see several settings categories:
- System - Server connection and components
- Backends - AI harness configurations
- Providers - API keys for AI models
- Data - Library and backup management
- Monitoring - Logging and diagnostics
- Secrets - Encrypted credential storage
Click on System to configure your backend connection:
The System page shows:
- API URL - Backend endpoint (currently connected status)
- System Components - Installed harnesses and versions
- Sandboxed.sh (current version shown)
- OpenCode (with update notifications)
- Claude Code (with update notifications)
- Amp
- oh-my-opencode plugin
If you need to connect to a different backend (e.g., a remote server):
- Click on the API URL field
- Enter your backend URL (e.g.,
https://agent-backend-dev.thomas.md)
- Click Save Changes
The dashboard will reconnect to the new backend and display a success message.
The sandboxed.sh Library is a Git-backed repository that stores all your reusable configurations:
- Skills - Specialized knowledge and procedures
- Agents - AI assistant configurations
- Commands - Quick task templates
- Tools - Custom functions and utilities
- Rules - Behavioral guidelines
- MCPs - Model Context Protocol servers
- Workspace Templates - Preconfigured environments
- Click Settings > Data to access library configuration:
The Data page shows:
- Library Remote - Git repository URL (SSH or HTTPS)
- Backup & Restore - Export/import your complete configuration
The default library uses the sandboxed.sh template repository. To use your own:
- Create a new Git repository (GitHub, GitLab, etc.)
- Click on the Library Remote field:
-
Enter your repository URL:
- SSH:
git@github.com:your-username/your-library.git - HTTPS:
https://github.com/your-username/your-library.git
- SSH:
-
Click Save
Note: The backend will clone your repository on first use. If it's empty, consider forking the sandboxed.sh-library-template as a starting point.
After changing the library remote, click Sync in the Library > Configs section to pull the latest changes.
Click Library > Skills to see all available skills:
The default library includes several useful skills:
- agent-browser - Web automation and testing
- bitwarden-secrets - Secure credential management
- github-cli - GitHub operations (PRs, issues)
- library-management - Library API tools
- sandboxed.sh-dev - sandboxed.sh development guide
Click on any skill to view and edit its content:
The skill editor shows:
- Frontmatter - Metadata (description, license, compatibility)
- Body Content - Markdown documentation with instructions
- Files - Additional reference files within the skill folder
You can modify the content directly and click Save to update the library.
sandboxed.sh supports multiple AI coding harnesses (OpenCode, Claude Code, Amp). Each harness can have different configurations stored in profiles.
Click Library > Configs to access the file-based config editor:
The config editor shows:
- Harness tabs - Switch between OpenCode, Claude Code, Amp, sandboxed.sh
- Profile selector - Choose or create config profiles (default, custom)
- Git status - Branch and sync state
- File browser - Navigate config files (
.opencode/,.claudecode/, etc.) - JSON editor - Edit configuration directly
For OpenCode, you'll typically edit:
- settings.json - Main configuration:
{
"agents": {
"Sisyphus": {
"model": "anthropic/claude-sonnet-4-20250514"
}
}
}- oh-my-opencode.json - Plugin configuration:
{
"providers": {
"anthropic": {
"apiKey": "<your-api-key>"
}
}
}After editing, click Save to commit changes to the library.
Click Mission in the sidebar to access the control interface:
The Mission Control page shows:
- Mission selector - Switch between active missions
- New Mission - Create a new task
- Status indicators - Thinking, Idle, Queue
- Message area - Chat interface with the agent
Click + New Mission to open the creation dialog:
Configure your mission:
-
Workspace - Select where the mission runs:
- Host (default) - Direct access to your system
- Isolated containers - Sandboxed environments for projects
-
Agent - Choose the AI model:
- Smart Mode - Balanced performance (recommended)
- Rush Mode - Faster responses
- Custom agents - Your configured agents (Sisyphus, Prometheus, etc.)
-
Model Override (optional) - Force a specific model for this mission:
- Claude Code: use a raw model ID (e.g.,
claude-opus-4-6) - Codex: use a raw model ID (e.g.,
gpt-5.4orgpt-5.3-codex) - OpenCode: use
provider/model(e.g.,openai/gpt-5.4) - Model effort: set effort separately (
low,medium,high,xhigh) instead of encoding it in the model ID
- Claude Code: use a raw model ID (e.g.,
-
Config Profile - Override settings (optional):
- Default - Use workspace configuration
- Custom profiles - Specific model/mode overrides
-
Click Create here to start the mission in the current tab, or New Tab to open in a new window
Once created, you can:
- Send messages - Type tasks in the message box
- Upload files - Drag and drop or paste files directly
- Monitor progress - Watch real-time output and thinking process
- Queue messages - Send multiple tasks while the agent is busy
Example first message:
Please help me understand the structure of this codebase and create a README documenting the main components.
Now that you're set up, explore these features:
- Create isolated workspaces for different projects
- Configure workspace templates with pre-installed tools
- Use containers for safe experimentation
- Create custom skills for your workflows
- Add project-specific commands
- Define reusable tools and functions
- Set up behavioral rules for agents
- Configure multiple config profiles for different scenarios
- Set up MCP servers for extended functionality
- Create custom agents with specific capabilities
- Configure AI provider API keys securely
- View mission logs and outputs
- Monitor resource usage
- Track agent thinking process
- Review mission history
Problem: "Failed to connect to backend"
Solutions:
- Verify the backend is running:
curl http://localhost:3000/api/health - Check the API URL in Settings > System
- Ensure no firewall is blocking the connection
- For remote backends, verify HTTPS/SSL certificates
Problem: "Failed to sync library"
Solutions:
- Check Git credentials (SSH keys or HTTPS tokens)
- Verify repository permissions
- Use
Syncbutton to force refresh - Check Settings > Data > Library Remote URL
Problem: "Failed to create mission"
Solutions:
- Verify AI provider API keys (Settings > Providers)
- Check workspace exists and is accessible
- Ensure backend has sufficient resources
- Review backend logs for error details
Problem: Changes to config files don't take effect
Solutions:
- Ensure you clicked Save in the config editor
- Check Git status shows "Clean" (changes committed)
- Restart the mission or create a new one
- Verify the correct config profile is selected
- Documentation: https://github.com/Th0rgal/sandboxed-sh/tree/master/docs
- Issues: https://github.com/Th0rgal/sandboxed-sh/issues
- Discussions: https://github.com/Th0rgal/sandboxed-sh/discussions
You've learned how to:
- ✅ Configure backend connection
- ✅ Set up your library repository
- ✅ Browse and edit skills
- ✅ Configure AI harness settings
- ✅ Create and manage missions
Start experimenting with your first mission and explore the powerful features sandboxed.sh offers for AI-powered development workflows!











