sortie

module
v1.13.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 15, 2026 License: Apache-2.0

README

Sortie - Turn tracker tickets into agent sessions

Your next sprint isn't capped by headcount.

The open-source coding agent orchestrator.
Turn tracker tickets into autonomous agent sessions. Agent-agnostic, tracker-agnostic. Run in parallel.

CI codecov

Documentation · Contributing

English | 简体中文

Sortie assumes your coding agent already produces useful results when you run it manually. Around that agent it handles parallel scheduling, isolated workspaces, persistent state with retry, CI feedback, review comments, and cost tracking. Sortie does not improve the agent's output.

Install

curl -sSL https://get.sortie-ai.com/install.sh | sh

Or via Homebrew: brew install sortie-ai/tap/sortie

The Problem

Coding agents can handle routine engineering tasks - bug fixes, dependency updates, test coverage, feature work - when they have good system prompts, appropriate tool permissions, and have been tested on representative issues. But running validated agents at scale requires infrastructure that doesn't exist yet: isolated workspaces, retry logic, state reconciliation, tracker integration, cost tracking. Teams build this ad-hoc, poorly, and differently each time.

Sortie is that infrastructure.

How It Works

Define your WORKFLOW.md in a single file alongside the target repository:

---
tracker:
  kind: github
  api_key: $GITHUB_TOKEN
  project: acme/billing-api
  query_filter: "label:agent-ready"
  active_states: [todo, in-progress]
  handoff_state: review
  terminal_states: [done]

agent:
  kind: claude-code
  max_concurrent_agents: 4
---

You are a senior engineer.

## {{ .issue.identifier }}: {{ .issue.title }}

{{ .issue.description }}

Sortie watches this file, polls for matching issues, creates an isolated workspace for each, and launches the agent with the rendered prompt. It handles the rest: stall detection, timeout enforcement, retries with backoff, state reconciliation with the tracker, and workspace cleanup when issues reach terminal states. Changes to the workflow are applied without restart.

The agent.kind field selects which coding agent runs each session. Sortie ships adapters for several coding agents, and switching is a one-line change. See the adapter reference for the full list and configuration details, and examples/ for complete workflow files.

Architecture

Sortie is a single Go binary. It uses SQLite for persistent state (retry queues, session metadata, run history) and communicates with coding agents over stdio. The orchestrator is the single authority for all scheduling decisions; there is no external job queue or distributed coordination. For full architectural details, see docs/architecture.md.

Issue trackers and coding agents are integrated through adapter interfaces. Adding support for a new tracker or agent is an additive change: implement the interface in a new package.

Supported trackers: GitHub Issues, Linear and Jira. Supported agents: Claude Code, Copilot, OpenCode, Codex and Kiro. See docs/decisions/ for detailed rationale on technology choices.

Documentation

Full configuration reference, CLI usage, and getting started guide: docs.sortie-ai.com

Prior Art

Sortie's architecture is informed by OpenAI Symphony, a spec-first orchestration framework with an Elixir reference implementation. Sortie diverges in language (Go for deployment simplicity), persistence (SQLite instead of in-memory state), extensibility (pluggable adapters for any tracker or agent, not hardcoded to Linear and Codex), and completion signaling (orchestrator-managed handoff transitions instead of relying solely on agent-initiated tracker writes).

Why "Sortie"

A sortie is a military and aviation term for a single mission executed autonomously. The metaphor is precise: the orchestrator dispatches agents on missions (issues), each with an isolated workspace, a defined objective, and an expected return. The name is short, two syllables, pronounceable across languages, and does not conflict with existing projects in this domain.

Roadmap

See our project board for current status and priorities.

License

Apache License 2.0

Directories

Path Synopsis
cmd
sortie command
Package main is the entry point for the Sortie orchestration service.
Package main is the entry point for the Sortie orchestration service.
internal
agent/agentcore
Package agentcore provides shared utilities used by agent adapter packages.
Package agentcore provides shared utilities used by agent adapter packages.
agent/agenttest
Package agenttest provides shared test helpers for agent adapter tests.
Package agenttest provides shared test helpers for agent adapter tests.
agent/claude
Package claude implements domain.AgentAdapter for the Claude Code CLI.
Package claude implements domain.AgentAdapter for the Claude Code CLI.
agent/codex
Package codex implements domain.AgentAdapter for the OpenAI Codex CLI.
Package codex implements domain.AgentAdapter for the OpenAI Codex CLI.
agent/copilot
Package copilot implements domain.AgentAdapter for the GitHub Copilot CLI.
Package copilot implements domain.AgentAdapter for the GitHub Copilot CLI.
agent/kiro
Package kiro implements domain.AgentAdapter for the Kiro CLI (the rebranded Amazon Q Developer CLI).
Package kiro implements domain.AgentAdapter for the Kiro CLI (the rebranded Amazon Q Developer CLI).
agent/mock
Package mock implements domain.AgentAdapter as a configurable test double for orchestrator and integration tests.
Package mock implements domain.AgentAdapter as a configurable test double for orchestrator and integration tests.
agent/opencode
Package opencode implements domain.AgentAdapter for the OpenCode CLI.
Package opencode implements domain.AgentAdapter for the OpenCode CLI.
agent/procutil
Package procutil provides subprocess lifecycle utilities shared by agent adapters that manage coding agents as local subprocesses.
Package procutil provides subprocess lifecycle utilities shared by agent adapters that manage coding agents as local subprocesses.
agent/sshutil
Package sshutil provides SSH invocation utilities shared by agent adapters that launch coding agents on remote hosts via SSH.
Package sshutil provides SSH invocation utilities shared by agent adapters that launch coding agents on remote hosts via SSH.
config
Package config converts raw workflow front matter into typed runtime configuration.
Package config converts raw workflow front matter into typed runtime configuration.
domain
Package domain defines the normalized types and adapter interfaces shared across all orchestration layers.
Package domain defines the normalized types and adapter interfaces shared across all orchestration layers.
httpkit
Package httpkit provides shared REST transport helpers for integration adapters.
Package httpkit provides shared REST transport helpers for integration adapters.
issuekit
Package issuekit provides shared issue normalization helpers for integration adapters.
Package issuekit provides shared issue normalization helpers for integration adapters.
logging
Package logging provides structured logging primitives for the Sortie orchestrator.
Package logging provides structured logging primitives for the Sortie orchestrator.
maputil
Package maputil provides generic map utility functions shared across internal packages that cannot import each other.
Package maputil provides generic map utility functions shared across internal packages that cannot import each other.
notify/slack
Package slack implements domain.Notifier for a Slack incoming webhook.
Package slack implements domain.Notifier for a Slack incoming webhook.
notify/webhook
Package webhook implements domain.Notifier for a generic outbound HTTP webhook.
Package webhook implements domain.Notifier for a generic outbound HTTP webhook.
orchestrator
Package orchestrator implements the coordination layer: polling, dispatch, concurrency control, retry scheduling, and reconciliation.
Package orchestrator implements the coordination layer: polling, dispatch, concurrency control, retry scheduling, and reconciliation.
persistence
Package persistence provides SQLite-backed durable storage for retry queues, run history, session metadata, and aggregate metrics.
Package persistence provides SQLite-backed durable storage for retry queues, run history, session metadata, and aggregate metrics.
prompt
Package prompt renders per-issue prompt templates using Go text/template in strict mode.
Package prompt renders per-issue prompt templates using Go text/template in strict mode.
registry
Package registry provides typed adapter registries that map kind strings to constructor functions.
Package registry provides typed adapter registries that map kind strings to constructor functions.
scm/github
Package github provides GitHub SCM adapter implementations for Sortie.
Package github provides GitHub SCM adapter implementations for Sortie.
server
Package server implements Sortie's embedded HTTP server for observability and operational control.
Package server implements Sortie's embedded HTTP server for observability and operational control.
tool/budget
Package budget implements domain.AgentTool for the cost_budget tool.
Package budget implements domain.AgentTool for the cost_budget tool.
tool/history
Package history implements domain.AgentTool for the workspace_history tool.
Package history implements domain.AgentTool for the workspace_history tool.
tool/mcpserver
Package mcpserver implements an MCP stdio server that exposes registered domain.AgentTool implementations over JSON-RPC 2.0.
Package mcpserver implements an MCP stdio server that exposes registered domain.AgentTool implementations over JSON-RPC 2.0.
tool/notify
Package notify implements domain.AgentTool for the notify_operator tool.
Package notify implements domain.AgentTool for the notify_operator tool.
tool/status
Package status implements domain.AgentTool for the sortie_status tool, which returns live session runtime metadata to agents: current turn number, remaining turns, session duration, and cumulative token usage.
Package status implements domain.AgentTool for the sortie_status tool, which returns live session runtime metadata to agents: current turn number, remaining turns, session duration, and cumulative token usage.
tool/toolresult
Package toolresult marshals the uniform result envelope every built-in tool returns.
Package toolresult marshals the uniform result envelope every built-in tool returns.
tool/trackerapi
Package trackerapi implements domain.AgentTool for issue tracker operations.
Package trackerapi implements domain.AgentTool for issue tracker operations.
tracker/file
Package file implements domain.TrackerAdapter for a local JSON fixture file.
Package file implements domain.TrackerAdapter for a local JSON fixture file.
tracker/jira
Package jira implements domain.TrackerAdapter for Atlassian Jira.
Package jira implements domain.TrackerAdapter for Atlassian Jira.
tracker/linear
Package linear implements domain.TrackerAdapter for Linear over its single GraphQL endpoint.
Package linear implements domain.TrackerAdapter for Linear over its single GraphQL endpoint.
trackermetrics
Package trackermetrics provides shared tracker-operation metric helpers.
Package trackermetrics provides shared tracker-operation metric helpers.
typeutil
Package typeutil provides type coercion utilities for loosely-typed values produced by JSON and YAML decoders.
Package typeutil provides type coercion utilities for loosely-typed values produced by JSON and YAML decoders.
workflow
Package workflow loads and parses Sortie workflow files.
Package workflow loads and parses Sortie workflow files.
workspace
Package workspace manages per-issue workspace directories, path safety, and lifecycle hooks.
Package workspace manages per-issue workspace directories, path safety, and lifecycle hooks.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL