Cyrus
A self-hosted background coding agent that picks up Linear, GitHub, GitLab, and Slack issues assigned to it, completes them with Claude Code or similar tools, and reports progress back.
Evidence shows least-privilege CI permissions, dependency audit + frozen lockfile in release, and read-only/write tool tiering tests, so least_privilege and dependency_security get 2. README mentions approval interactions but with no implementation detail, so user_confirmation is 1. Data flow and sensitive data handling: BYOK is clearly stated, yet session data goes to a cloud HttpSessionStore (Bearer token, team-id header) with thin documentation of where data travels — both 1. The agent creates PRs/MRs and writes code (Bash/Edit/Write in write tools); external effects are real but approval/safeguard detail is missing, external_effects 1. No rollback mechanism evidence anywhere: rollback 0. Credits thank Linear and Anthropic, but publisher is unverified and repo identity is muddled — source_attribution 1.
Package tests cover error paths, aborts, and SIGTERM(143) with explicit messages ('Claude session already running', non-2xx surfaced with status codes): failure_messages 2. Release uses frozen lockfile and corepack-pinned pnpm: dependency_availability 2. But there are self-contradictions: README claims Apache-2.0 while package. says "license": "MIT"; README badge points to ceedaragents/cyrus while package. points to cyrusagents/cyrus — self_consistency 1.
README targets three deployment tiers (community self-hosted, paid self-hosted, cloud) and multiple harnesses (Claude Code/Codex/Cursor/Gemini/Opencode) and platforms (Linear/GitHub/GitLab/Slack): audience_and_scenarios 2. Tool-tiering tests define coordinator (no Edit/Write) and read-only sets precisely: capability_boundaries 2. tmux/pm2/systemd persistence options given: environment_fit 2. Triggering is only 'monitors issues assigned to it' with no filtering/rule detail: trigger_precision 1.
Documentation index is clear (SELF_HOSTING/GIT_GITHUB/GIT_GITLAB/CONFIG_FILE etc.): information_architecture and install_notes 2. Release workflow is rigorous (dry-run, integrity checks, tag idempotency, OIDC trusted publisher): versioning_changelog 2. But naming is unstable (cyrusagents vs ceedaragents, cyrus-ai package), examples/FAQ and known limitations are only hinted via links, and maintenance responsibility (CONTRIBUTING, governance) has no evidence — all 1. License declarations contradict each other (README Apache-2.0 vs package. MIT): license 1.
The product's value is clear: watch assigned issues, isolated worktrees, streamed activity and rich interactions — output_usability 2. Clear gain over manual issue polling, and BYOK makes costs transparent: marginal_value and cost_benefit 2. Actual effectiveness depends on a cloud service and an AI-guided setup skill not verifiable in this evidence, so static review cannot credit further.
Tests cite specific ticket IDs (CYPACK-1310) with precise assertions (log-format regex, tool list lengths): claim_traceability 2. Fact/inference separation: this report draws only on the provided files and flags static inferences — 2. Cross-source corroboration is weak: README, package., and badge disagree on repo URL and license, and external claims (CI badge, Discord) cannot be verified within the given files — cross_source_corroboration 1.
- License conflict: README says Apache-2.0 while package. states MIT; confirm the actual licensing terms before use.
- Inconsistent repository identity: package. points to cyrusagents/cyrus, the README badge to ceedaragents/cyrus; verify the real publisher of the npm package (cyrus-ai) before installing or attributing provenance.
- The agent runs with write-capable tools (Bash/Edit/Write) and creates PRs/MRs on your machine; review the tool allowlist and confirm approval behavior before deployment.
- In self-hosted/paid modes, session data transits a cloud HttpSessionStore (Bearer token, team-id header); verify data residency and encryption paths.
- No documented rollback or session-recovery mechanism; recovery from erroneous merges or writes depends on Git-level measures you provide yourself.
What does this agent do, and when should you use it?
Cyrus is a self-hostable background agent runtime that monitors issues assigned to it on Linear, GitHub, GitLab, or Slack. For each issue it creates an isolated Git worktree, runs a Claude Code, Codex, Cursor, Gemini, or Opencode session inside it, and streams detailed agent activity back to Linear or GitHub, including rich interactions like dropdown selects and approvals. It is a BYOK (bring your own keys/subscriptions) platform, so token costs are covered by your own API plans. The project is Apache 2.0 licensed and builds on the Linear API and Anthropic's Claude Code. Deployment options range from a zero-cost community self-hosted setup, to paid self-hosted deployments (networking provided by the Cyrus cloud), to a fully cloud-hosted offering managed at app.atcyrus.com.
Cyrus continuously watches its integrations for issues assigned to it. When one arrives, it creates an isolated Git worktree for that issue and starts a session with the chosen harness — Claude Code, Codex, Cursor, Gemini, or Opencode — to work on it. As the agent works, Cyrus streams detailed activity updates back to Linear or GitHub and supports rich interactions such as dropdown selects and approvals. To enable pull requests or merge requests, you configure Git plus the GitHub CLI or GitLab CLI. For persistent operation it can run under tmux, pm2, or systemd.
- Engineering teams on Linear: assign bugs or feature tickets to Cyrus so it produces code and PRs in isolated worktrees automatically.
- Individual developers: use the zero-cost community self-hosted path to turn GitHub issues into background coding tasks.
- Multi-tool teams: teams already subscribed to Cursor, Codex, or Gemini can reuse those subscriptions as the execution harness.
- Teams wanting oversight: approve or steer the agent mid-run through approval and dropdown-select interactions.
- GitLab users: configure the GitLab CLI to have the agent deliver changes as merge requests.
What are this agent's strengths and limitations?
- Supports multiple harnesses (Claude Code, Codex, Cursor, Gemini, Opencode), so you can reuse existing model subscriptions instead of locking into one vendor.
- Each issue runs in its own isolated Git worktree, keeping tasks separate and feeding naturally into PR/MR workflows.
- A complete zero-cost community self-hosting path exists, with the AI-guided /cyrus-setup skill automating dependency and integration-app configuration.
- Rich feedback (dropdown selects, approvals) lets humans intervene in agent decisions mid-run.
- BYOK means you bear the model token/subscription costs yourself; the software does not include token fees.
- Self-hosting requires a machine you control running persistently via tmux/pm2/systemd — a real operational commitment.
- PR/MR creation requires extra setup of Git and the GitHub CLI or GitLab CLI; the community path also requires you to create and maintain your own Linear OAuth app, GitHub App, and Slack App.
- Paid self-hosted deployments rely on the Cyrus cloud provider for the networking layer and integrations, introducing partial provider dependency.
How do you install or deploy this agent?
Three paths:
1) Community self-hosted (free): run npx skills add ceedaragents/cyrus -g, then in any AI coding agent (Claude Code, Codex, Cursor, etc.) invoke /cyrus-setup — an AI-guided skill handles dependency installation, auth configuration, creating your Linear OAuth app, GitHub App, and Slack App, and connecting repositories. A manual guide is in docs/SELF_HOSTING.md.
2) Paid self-hosted: npm install -g cyrus-ai, then cyrus auth <your-token> (token provided during onboarding).
3) Cloud-hosted: no installation; configure everything at app.atcyrus.com.
For PR/MR creation, also follow docs/GIT_GITHUB.md or docs/GIT_GITLAB.md to set up Git and the relevant CLI.
How do you use this agent?
Once integrations and repositories are configured, keep the process running persistently: with tmux, tmux new -s cyrus then run cyrus (Ctrl+B, D to detach); with pm2, pm2 start cyrus --name cyrus; or set it up as a systemd service per the docs. Then assign issues to Cyrus in Linear, GitHub, GitLab, or Slack — it creates a worktree, runs the agent session, and streams progress back to the platform. Paid and cloud plans are managed via the app.atcyrus.com dashboard. Cyrus is BYOK: you supply your own model keys or subscriptions.