Skip to content
styrev0.11.0
GitHub

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.

Terminal window
brew install twinning-labs/styre/styre

macOS 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:

Terminal window
styre --version

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.

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:

Terminal window
export ANTHROPIC_API_KEY="sk-ant-..."
export GITHUB_TOKEN="ghp_..."
export LINEAR_API_KEY="lin_api_..."

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:

Terminal window
styre run ENG-482

If 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_KEY does nothing on its own — without an agent block, 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.

Terminal window
brew upgrade styre
Terminal window
brew uninstall styre && brew untap twinning-labs/styre

Next: Your first run — point Styre at a repo and hand it a ticket.