Daily Use
Patterns for everyday work with bosun.
Session lifecycle
Starting
just start # Sandboxed session (recommended)
just start-unsandboxed # Without bwrap
just attach # Reattach to existing session
During a session
Delegate work:
spawn_agent({ agent: "lite", task: "Summarize the auth module" })
spawn_agent({ agent: "verify", task: "Run all tests and report" })
Check who's working:
mesh_peers({})
Navigate tmux windows:
Alt+1,Alt+2, ... — switch to window by numberAlt+n— next windowAlt+p— previous window
Ending
Save context before stopping:
You: /handoff
Then:
just stop # Closes everything
Resuming
just start
You: /pickup
Select a handoff from the list. Context restored.
Planning
For non-trivial work (3+ files, multi-step), bosun creates a plan:
You: Add WebSocket support to the API
Bosun: This is complex. Let me plan first.
[Creates plan at workspace/users/.../plans/...]
[Opens in split pane for review]
Plans have phases with gate checks (verify → review → commit) between them.
Commands:
/handoff— save session context for later/pickup— resume from a handoff/fork— branch an exploration from current context
Common patterns
Explore, then implement
You: Clone github.com/org/repo and understand how auth works,
then add OAuth2 support
Bosun will:
- Clone → spawn scout → get structure report
- Plan the OAuth2 implementation
- Delegate to lite for implementation
- Verify with tests
Review existing code
You: Review the changes in the last 3 commits for security issues
Bosun spawns review agent (read-only, won't modify code).
Deep debugging
You: This test is flaking — sometimes passes, sometimes fails.
I need to understand why.
Bosun may spawn oracle for hard reasoning problems.
Parallel work
You: Write tests for the API while also updating the docs
Bosun spawns two agents, reserves files for each, coordinates results.
Configuration
config.toml
The single config file. Key sections:
[keys]
anthropic = "sk-ant-..." # API keys
[models]
lite = "claude-haiku-4-5-20251001"
medium = "claude-sonnet-4-5-20250929"
high = "claude-sonnet-4-5-20250929"
oracle = "o3"
[sandbox]
enabled = true # bwrap process sandboxing
allow_paths = ["/tmp"] # additional allowed paths
[daemon]
heartbeat = 30 # seconds between checks
Updating
just update # Updates pi and all packages
just doctor # Check environment health
Troubleshooting
Agent won't spawn: Check mesh_peers() — is the mesh full? Check model config in config.toml.
Daemon not running: daemon({ action: "status" }). If stopped, restart with just start.
Sandbox blocking something: Check .pi/sandbox.json for read/write restrictions. Or use just start-unsandboxed temporarily.
Stale mesh state: If agents show as active but aren't, the mesh self-heals on next heartbeat. Or restart the session.