Install
Styre is a single self-contained binary. It runs on your machine, under your own API key, and talks to your repo and your issue tracker directly — there is no hosted service in between.
1. Install the binary
Section titled “1. Install the binary”brew install twinning-labs/styre/styremacOS and Linux are both first-class targets, on Apple Silicon and x86-64. If you would rather not use Homebrew, prebuilt binaries for all four platforms are attached to every GitHub release.
Check it landed:
styre --version2. Install an agent CLI
Section titled “2. Install an agent CLI”Styre does not talk to a model API directly. It drives an agent CLI, which you install separately
and which must already be on your PATH:
| Provider | CLI | Minimum version |
|---|---|---|
claude (default) |
Claude Code | 2.1.200 |
codex |
Codex CLI | 0.140.0 |
You only need the one you plan to use. Styre checks it before a run starts and stops immediately if it is missing or too old, rather than failing halfway through and burning tokens on the way.
3. Set your keys
Section titled “3. Set your keys”Styre reads every credential from the environment. Nothing is stored in a config file, and nothing is written to disk.
Always needed:
| Variable | What it is for |
|---|---|
ANTHROPIC_API_KEY or OPENAI_API_KEY |
Your model provider — whichever agent CLI you installed above. Codex also needs a config file. |
GITHUB_TOKEN |
Pushing the branch, opening the pull request, and reading check status. |
Plus your issue tracker — Linear:
| Variable | What it is for |
|---|---|
LINEAR_API_KEY |
Reading the ticket and projecting its state back. |
…or Jira — which also needs a config file, since Linear is the default:
| Variable | What it is for |
|---|---|
JIRA_BASE_URL |
Your Jira site, e.g. https://acme.atlassian.net. |
JIRA_EMAIL |
The account the token belongs to. |
JIRA_API_TOKEN |
Reading the ticket and projecting its state back. |
Put them wherever you keep the rest of your shell environment — ~/.zshrc, a direnv file, or
your secret manager of choice:
export ANTHROPIC_API_KEY="sk-ant-..."export GITHUB_TOKEN="ghp_..."export LINEAR_API_KEY="lin_api_..."4. Configuration
Section titled “4. Configuration”Every setting has a default, and the defaults are Linear, GitHub, and Claude. If that is your stack, there is no config file to create — you are done:
styre run ENG-482If it is not, you need a config file, and keys alone will not switch anything. Styre picks its tracker and its agent from config, not from which credentials happen to be present:
- Setting the
JIRA_*variables does nothing on its own — without"issueTracker": "jira", Styre still reads from Linear. - Setting
OPENAI_API_KEYdoes nothing on its own — without anagentblock, Styre still runs Claude.
To use either, create ~/.config/styre/config.json:
{ // Jira instead of the default Linear "issueTracker": "jira",
// Codex instead of the default Claude. All three tiers are required — // a partial `agent` block is rejected, not filled in from a preset. "agent": { "provider": "codex", "models": { "deep": "gpt-5.6-sol", "standard": "gpt-5.6-terra", "cheap": "gpt-5.6-luna" } }}Both blocks are independent — take one, the other, or neither. Every other key keeps its default. See Configuration for the full list.
Upgrading and removing
Section titled “Upgrading and removing”brew upgrade styrebrew uninstall styre && brew untap twinning-labs/styreNext: Your first run — point Styre at a repo and hand it a ticket.