Linear tracker
Linear issues. Direct API key or Composio-mediated — AO picks the right transport automatically.
tracker · Name: linearThe Linear tracker supports two transports and auto-picks between them:
- Composio-mediated — when
COMPOSIO_API_KEYis set. Takes priority. - Direct API — when
LINEAR_API_KEYis set.
Setup
Direct Linear API
- Create a personal API key in Linear.
- Export it:
export LINEAR_API_KEY=lin_api_... - Configure AO:
tracker: linear projects: api: tracker: linear trackerConfig: teamId: TEAM-123 # required for issue creation workspaceSlug: myteam # optional, used to build issue URLs
Composio-mediated
If you already use the Composio toolkit:
export COMPOSIO_API_KEY=...
export COMPOSIO_ENTITY_ID=... # optional; defaults to "default"AO detects this and routes Linear calls through Composio — no separate Linear token needed. COMPOSIO_ENTITY_ID is optional; if omitted it defaults to "default".
Per-project config
| Key | Required | What it does |
|---|---|---|
teamId | ✓ (for createIssue) | Linear team the issue lives in |
workspaceSlug | optional | Used to render https://linear.app/{slug}/issue/{id} URLs |
Branch names
Linear issues expose a branchName field — the string shown in the Copy git branch name button in the Linear UI (formatted according to your workspace settings in Settings → Integrations → GitHub → Branch format).
When AO spawns an agent for a Linear issue it:
- Reads the issue's
branchNamefield from the Linear API (if present and git-safe). - Falls back to
feat/<issue-id>ifbranchNameis absent or contains characters that aren't valid in a branch name.
You can customise the format globally via Linear's branch format settings — AO will pick up whatever Linear generates automatically.
Issue identifiers
Linear uses TEAM-42-style identifiers, not numbers. ao spawn TEAM-42 works as you'd expect.