Baton is a Go implementation of Symphony.
- Polls your tracker (Linear by default) for claimable issues and reserves an isolated workspace per issue.
- Starts
codex app-serverfrom the workspace, streams a workflow prompt, and keeps the session alive until the issue resolves toDone,Closed,Cancelled, orDuplicate. - Provides injected
tracker_*tools so runtime backends can interact with the configured tracker without repeated authentication. - Cleans up workspaces once issues leave the active state and shuts down agents cleanly.
- Agent runtimes:
codex,opencode,claudecode. - Trackers:
linear,jira.
- Align your repository with harness engineering practices so Baton can run reliably.
- Write a
WORKFLOW.mdthat follows the tracker/workspace/hooks/agent/agent_runtime schema described in the SPEC and use YAML front matter for configuration. - Export tracker credentials such as
LINEAR_API_KEYso hooks and tools can authenticate. - Copy the helper skills you need (
commit,push,pull,land,linear) and ensure the runtime can inject Baton’stracker_*tools into the agent backend you use. - Mirror any custom tracker states (e.g.,
Rework,Human Review,Merging) in your workflow configuration and tracker settings so Baton’s lifecycle matches expectations.
- Put workspace bootstrapping commands like
git clone ... .intohooks.after_create. codex.commandshould launchcodex app-serverwith your chosen sandbox policies; Baton uses workspace-scoped sandboxes by default and accepts strings or objects for approval policies.agent_runtime.kindsupportscodex,opencode, andclaudecode.tracker.kindsupportslinearandjira.- Path values support
~and$VAR; Baton resolves them before spawning child processes. - Environment-backed fields such as
tracker.linear.api_keycan be set to$LINEAR_API_KEYso Baton reads the correct runtime value. - If
WORKFLOW.mdis missing or invalid, Baton refuses to start so you notice configuration issues immediately.
cd /Users/goranka/Engineer/ai/backagent/baton
go build -o bin/baton ./cmd/baton
./bin/baton --i-understand-that-this-will-be-running-without-the-usual-guardrails WORKFLOW.md- Provide the workflow path as the lone positional argument; it defaults to
WORKFLOW.md. - Flags:
--logs-rootoverrides the default logs directory (current working directory).--i-understand-that-this-will-be-running-without-the-usual-guardrailsacknowledges the experimental nature of the agent runner and is required to start Baton.
- Baton installs signal handlers so
Ctrl+Cgracefully stops agents and closes Codex sessions.
- Logs land under the configured logs root (default:
logs/) and include workspace paths and workflow metadata for each agent invocation. - The optional HTTP API exposes state at
/api/v1/state,/api/v1/<issue_identifier>, and/api/v1/refreshfor troubleshooting. - Run
go test ./...to cover the CLI, workflow parsing, and orchestration code; there is no singlemaketarget yet, but the Go test suite exercises the main packages involved in running Baton.