Webhook verification mode now updates at runtime - When SLACK_SIGNING_SECRET or GITHUB_WEBHOOK_SECRET environment variables are added after the process starts (along with CYRUS_HOST_EXTERNAL=true), Cyrus now automatically switches from proxied to direct webhook verification without requiring a restart. (CYPACK-884, #934)
PR change request handling - When a reviewer requests changes on a PR created by Cyrus, the agent now automatically acknowledges the review and starts working on the requested changes. Supports both summary-level and line-level review comments. (CYPACK-842, #896)
Direct Slack webhook verification for self-hosted deployments - Cyrus can now verify Slack webhooks directly using HMAC-SHA256 signature verification when SLACK_SIGNING_SECRET is set, removing the need for the CYHOST proxy in self-hosted environments. Thanks to @aniravi24 (#829)
GitHub bot mention filtering - GitHub webhook handler now respects GITHUB_BOT_USERNAME to only trigger on @bot mentions and ignore its own comments, preventing infinite loops in self-hosted setups. Thanks to @aniravi24 (#829)
Smarter Slack thread context - Other bots' messages (Sentry, CI, GitHub notifications) are now preserved in Slack thread context instead of being filtered out. Only the bot's own messages are excluded. Thanks to @aniravi24 (#829)
Fixed
Slack bot token availability after runtime switch - Fixed Slack bot token not being available when switching from cloud to self-host runtime. The token is now resolved at usage time with a fallback to process.env, handling cases where the env update arrives after the first webhook. (CYPACK-842, #896)
Updated Claude SDK dependencies - project configs & auto memory are now shared across git worktrees of the same repository, so Claude's persistent memory works consistently across all Cyrus worktrees. Updated @anthropic-ai/claude-agent-sdk to v0.2.63 and @anthropic-ai/sdk to v0.78.0. See claude-agent-sdk changelog for details. (CYPACK-859, #917)
Fixed
Cursor runs no longer fail on version mismatches - Cyrus no longer blocks Cursor sessions when the installed cursor-agent version differs from a previously tested version, and the CYRUS_CURSOR_AGENT_VERSION override is no longer needed. (CYPACK-857, #915)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.26
cyrus-mcp-tools
cyrus-mcp-tools@0.2.26
cyrus-claude-runner
cyrus-claude-runner@0.2.26
cyrus-core
cyrus-core@0.2.26
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.26
cyrus-codex-runner
cyrus-codex-runner@0.2.26
cyrus-cursor-runner
cyrus-cursor-runner@0.2.26
cyrus-config-updater
cyrus-config-updater@0.2.26
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.26
cyrus-github-event-transport
cyrus-github-event-transport@0.2.26
cyrus-slack-event-transport
cyrus-slack-event-transport@0.2.26
cyrus-gemini-runner
cyrus-gemini-runner@0.2.26
cyrus-edge-worker
cyrus-edge-worker@0.2.26
cyrus-ai (CLI)
cyrus-ai@0.2.26
0.2.25
2026-02-27
Fixed
Default runner config now applies on hot-reload - Changing defaultRunner, model defaults, or other global settings in ~/.cyrus/config.json while Cyrus is running now takes effect immediately, instead of being ignored until restart. (CYPACK-856, #907)
Codex runner no longer fails during issue classification - When defaultRunner is set to codex, the ProcedureAnalyzer classification step no longer crashes with a reasoning effort error. Also uses structured outputs for more reliable classification responses. (CYPACK-856, #907)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.25
cyrus-mcp-tools
cyrus-mcp-tools@0.2.25
cyrus-claude-runner
cyrus-claude-runner@0.2.25
cyrus-core
cyrus-core@0.2.25
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.25
cyrus-codex-runner
cyrus-codex-runner@0.2.25
cyrus-cursor-runner
cyrus-cursor-runner@0.2.25
cyrus-config-updater
cyrus-config-updater@0.2.25
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.25
cyrus-github-event-transport
cyrus-github-event-transport@0.2.25
cyrus-slack-event-transport
cyrus-slack-event-transport@0.2.25
cyrus-gemini-runner
cyrus-gemini-runner@0.2.25
cyrus-edge-worker
cyrus-edge-worker@0.2.25
cyrus-ai (CLI)
cyrus-ai@0.2.25
0.2.24
2026-02-26
Fixed
Sessions no longer appear stuck after restart - When the system restarts or migrates, user prompts, stop signals, and other interactions that target older sessions are now recovered instead of silently dropped. Users will see clear feedback instead of a hanging state. (CYPACK-852, #905)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.24
cyrus-mcp-tools
cyrus-mcp-tools@0.2.24
cyrus-claude-runner
cyrus-claude-runner@0.2.24
cyrus-core
cyrus-core@0.2.24
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.24
cyrus-codex-runner
cyrus-codex-runner@0.2.24
cyrus-cursor-runner
cyrus-cursor-runner@0.2.24
cyrus-config-updater
cyrus-config-updater@0.2.24
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.24
cyrus-github-event-transport
cyrus-github-event-transport@0.2.24
cyrus-slack-event-transport
cyrus-slack-event-transport@0.2.24
cyrus-gemini-runner
cyrus-gemini-runner@0.2.24
cyrus-edge-worker
cyrus-edge-worker@0.2.24
cyrus-ai (CLI)
cyrus-ai@0.2.24
0.2.23
2026-02-25
Fixed
defaultRunner config setting now works correctly - Setting "defaultRunner": "codex" (or "gemini" / "cursor") in ~/.cyrus/config.json now properly routes issues without runner-specific labels to the configured default runner, instead of always falling back to Claude. (CYPACK-838, #892)
Added
Assignee attribution on PRs - PR descriptions now include assignee attribution at the top. When the assignee has a linked GitHub account, they are @mentioned for a GitHub notification. When no GitHub account is linked, the assignee's Linear profile is linked instead, ensuring an audit trail for all PRs. (CYPACK-843, #895)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.23
cyrus-mcp-tools
cyrus-mcp-tools@0.2.23
cyrus-claude-runner
cyrus-claude-runner@0.2.23
cyrus-core
cyrus-core@0.2.23
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.23
cyrus-codex-runner
cyrus-codex-runner@0.2.23
cyrus-cursor-runner
cyrus-cursor-runner@0.2.23
cyrus-config-updater
cyrus-config-updater@0.2.23
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.23
cyrus-github-event-transport
cyrus-github-event-transport@0.2.23
cyrus-slack-event-transport
cyrus-slack-event-transport@0.2.23
cyrus-gemini-runner
cyrus-gemini-runner@0.2.23
cyrus-edge-worker
cyrus-edge-worker@0.2.23
cyrus-ai (CLI)
cyrus-ai@0.2.23
0.2.22
2026-02-20
Added
Slack MCP tools available in agent sessions - When the SLACK_BOT_TOKEN environment variable is set, Slack MCP tools (mcp__slack) are now automatically available in Linear and Slack sessions, enabling agents to read channels, search messages, and interact with Slack workspaces. (CYPACK-832, #884)
Subroutine transition status messages - Cyrus now posts a status update to the Linear timeline when transitioning between sub-procedures (e.g., "Running tests, linting, and type checking...", "Creating summary..."), so users can see what Cyrus is doing instead of the session appearing to hang. (CYPACK-835, #887)
Configurable default runner - The default agent harness is now configurable via defaultRunner in config.json (values: "claude", "gemini", "codex", "cursor") instead of always defaulting to Claude. When only one API key is set (Claude, Gemini, Codex, or Cursor), that runner is auto-detected as the default. When multiple keys are present, set defaultRunner to choose which one is used for new sessions. The setting is also updateable via the config update endpoint. (CYPACK-826, #878)
GitHub PR comment support: Cyrus can now be triggered by @cyrusagent mentions on GitHub pull request comments, creating sessions and posting replies directly on PRs. (CYPACK-772, #820)
Slack integration: Cyrus can now receive @mention webhooks from Slack channels and threads, enabling Slack as a new platform for triggering agent sessions. (CYPACK-807, #861)
Changed
Slack responses now use proper mrkdwn formatting - Slack sessions now instruct the agent to use Slack's native mrkdwn syntax instead of standard Markdown, ensuring bold, italic, links, and code blocks render correctly in Slack messages. (CYPACK-834, #886)
OpenAI tools now auto-detected from environment - GPT Image and Sora video generation tools are now automatically available when the OPENAI_API_KEY environment variable is set, instead of requiring openaiApiKey in repository config. The openaiApiKey and openaiOutputDirectory config fields have been removed. (CYPACK-831, #883)
Updated Claude SDK dependencies - Updated @anthropic-ai/claude-agent-sdk to v0.2.47 and @anthropic-ai/sdk to v0.77.0, adding Claude Sonnet 4.6 support, new promptSuggestion() method, and improved memory usage for large shell outputs. See claude-agent-sdk changelog for details. (CYPACK-827, #880)
Slack bot token is now read exclusively from the SLACK_BOT_TOKEN environment variable. The X-Slack-Bot-Token HTTP header is no longer supported. (CYPACK-824, #876)
Slack agent sessions now run in transient empty directories instead of git worktrees, and subsequent @mentions in the same thread share the same session context. (CYPACK-815, #868)
Agent and model selectors now work across Claude, Gemini, and Codex - You can now set runner and model directly in issue descriptions using [agent=claude|gemini|codex] and [model=<model-name>]. This is not Codex-only: selectors apply to all supported runners. [agent=...] explicitly selects the runner, [model=...] selects the model and can infer runner family, and description tags take precedence over labels. (#850)
Codex tool activity is now visible in Linear sessions - Codex runs now emit tool lifecycle activity (including command execution, file edits, web fetch/search, MCP tool calls, and todo updates) so activity streams show execution details instead of only final output. (#850)
Codex todo output now renders as proper checklists - Todo items are now formatted as markdown task lists (- [ ] and - [x]) for correct checklist rendering in Linear. (#850)
Major new feature: Cursor agent harness support - Cyrus now supports Cursor as a first-class agent option. To use it, set [agent=cursor] in the issue description or apply a cursor issue label; either selector runs end-to-end with the Cursor runner and posts the final response back to the issue thread. Cursor runs now map Cyrus tool permissions into project-level Cursor CLI permissions, pre-enable configured MCP servers before run, and refresh permissions between subroutines so permission changes take effect without restarting the issue flow. Cursor sandbox is enabled by default for tool execution isolation; set CYRUS_SANDBOX=disabled to disable. Before each run, Cyrus validates that the installed cursor-agent version matches the tested version; a mismatch posts an error to Linear. Set CYRUS_CURSOR_AGENT_VERSION to your installed version to override. Assembled cursor-agent CLI args are now logged to console and session log files for debugging. Codex default runner model is now gpt-5.3-codex (configurable via codexDefaultModel). (CYPACK-804, #858)
Cyrus MCP tools now run on the built-in server endpoint with authenticated Codex access - Cyrus tools are now served via Fastify MCP on the same configured server port, cyrus-tools MCP requests require Authorization: Bearer <CYRUS_API_KEY>, and Codex now forwards configured MCP HTTP auth headers correctly so authenticated MCP servers initialize successfully. (CYPACK-817, #870)
Fixed
Summary subroutines now properly disable all tools including MCP tools like Linear's create_comment (#808)
Procedures no longer fail when a subroutine exits with an error (e.g., hitting the max turns limit). Cyrus now recovers by using the last successful subroutine's result, allowing the workflow to continue to completion instead of stopping mid-procedure (#818)
Codex usage limit errors now display full message in Linear - When Codex hits usage limits or other turn.failed errors, the actual error message is now posted to Linear agent activity instead of a generic message. (CYPACK-804, #858)
Cursor project .cursor/cli.json is now backed up and restored - CursorRunner no longer overwrites the project's .cursor/cli.json. It temporarily renames the existing file before writing Cyrus permissions, then restores the original when the session ends. (CYPACK-804, #858)
Cursor API key no longer in CLI args or logs - The Cursor API key is now passed only via the CURSOR_API_KEY environment variable, so it never appears in spawn logs or terminal output. The --force option has also been removed from cursor-agent invocations. (CYPACK-804, #858)
Cursor completed todos now display as checked in Linear - Cursor API uses TODO_STATUS_COMPLETED for completed todo items; the formatter now recognizes this so completed items render as - [x] instead of - [ ] in Linear activity. (CYPACK-804, #858)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.22
cyrus-mcp-tools
cyrus-mcp-tools@0.2.22
cyrus-claude-runner
cyrus-claude-runner@0.2.22
cyrus-core
cyrus-core@0.2.22
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.22
cyrus-codex-runner
cyrus-codex-runner@0.2.22
cyrus-cursor-runner
cyrus-cursor-runner@0.2.22
cyrus-config-updater
cyrus-config-updater@0.2.22
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.22
cyrus-github-event-transport
cyrus-github-event-transport@0.2.22
cyrus-slack-event-transport
cyrus-slack-event-transport@0.2.22
cyrus-gemini-runner
cyrus-gemini-runner@0.2.22
cyrus-edge-worker
cyrus-edge-worker@0.2.22
cyrus-ai (CLI)
cyrus-ai@0.2.22
0.2.21
2026-02-09
Changed
Updated Claude SDK dependencies - Updated @anthropic-ai/claude-agent-sdk to v0.2.34 and @anthropic-ai/sdk to v0.73.0. See claude-agent-sdk changelog for details. (CYPACK-788, #837)
Improved task and tool activity display - Task creation now shows as concise checklist items instead of verbose multi-line entries, task status updates display the task name with status emoji, and tool search/background task output activities are now cleanly formatted. (CYPACK-795, #846)
Task status updates now show task descriptions - Task update and task detail activities now display the task subject alongside the task number (e.g., "Task #3 — Fix login bug") instead of just the number. (CYPACK-797, #847)
Fixed
Procedures no longer fail when a subroutine exits with an error - When a single-turn subroutine hits the max turns limit, Cyrus now recovers by using the last successful subroutine's result, allowing the workflow to continue to completion instead of stopping mid-procedure. (CYPACK-792, #843)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.21
cyrus-config-updater
cyrus-config-updater@0.2.21
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.21
cyrus-claude-runner
cyrus-claude-runner@0.2.21
cyrus-core
cyrus-core@0.2.21
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.21
cyrus-gemini-runner
cyrus-gemini-runner@0.2.21
cyrus-edge-worker
cyrus-edge-worker@0.2.21
cyrus-ai (CLI)
cyrus-ai@0.2.21
0.2.20
2026-02-05
Fixed
Agent guidance for draft PRs now respected - When your Linear workspace guidance specifies --draft or requests PRs remain as drafts, Cyrus will no longer automatically convert them to ready for review. PRs also now correctly target the configured base branch instead of defaulting to main. (CYPACK-784, #834)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.20
cyrus-config-updater
cyrus-config-updater@0.2.20
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.20
cyrus-claude-runner
cyrus-claude-runner@0.2.20
cyrus-core
cyrus-core@0.2.20
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.20
cyrus-gemini-runner
cyrus-gemini-runner@0.2.20
cyrus-edge-worker
cyrus-edge-worker@0.2.20
cyrus-ai (CLI)
cyrus-ai@0.2.20
0.2.19
2026-01-24
Fixed
Fixed configuration schema compatibility issue between cyrus-hosted and local installations. (#802)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.19
cyrus-config-updater
cyrus-config-updater@0.2.19
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.19
cyrus-claude-runner
cyrus-claude-runner@0.2.19
cyrus-core
cyrus-core@0.2.19
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.19
cyrus-gemini-runner
cyrus-gemini-runner@0.2.19
cyrus-edge-worker
cyrus-edge-worker@0.2.19
cyrus-ai (CLI)
cyrus-ai@0.2.19
0.2.18
2026-01-23
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.18
cyrus-config-updater
cyrus-config-updater@0.2.18
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.18
cyrus-claude-runner
cyrus-claude-runner@0.2.18
cyrus-core
cyrus-core@0.2.18
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.18
cyrus-gemini-runner
cyrus-gemini-runner@0.2.18
cyrus-edge-worker
cyrus-edge-worker@0.2.18
cyrus-ai (CLI)
cyrus-ai@0.2.18
0.2.17
2026-01-23
Added
Issue update awareness - Cyrus now detects when you edit an issue's title, description, or attachments while it's actively working on that issue. The agent receives context showing what changed (old vs new values) along with guidance to evaluate whether the update affects its implementation or action plan. TIP: instead of re-prompting Cyrus in a comment or chat window, just update the issue description with additional acceptance criteria! It will auto-start or adjust course and apply changes. (CYPACK-736, #782)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.17
cyrus-config-updater
cyrus-config-updater@0.2.17
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.17
cyrus-claude-runner
cyrus-claude-runner@0.2.17
cyrus-core
cyrus-core@0.2.17
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.17
cyrus-gemini-runner
cyrus-gemini-runner@0.2.17
cyrus-edge-worker
cyrus-edge-worker@0.2.17
cyrus-ai (CLI)
cyrus-ai@0.2.17
0.2.16
2026-01-23
Added
User access control - Added the ability to whitelist or blacklist Linear users from delegating issues to Cyrus. Supports blocking specific users by Linear ID or email address, allowing only specific users (allowlist mode blocks everyone not explicitly listed), configurable block behavior (silent ignore or post comment), and template variables in block messages. Blocklist is additive (global + repo), while allowlist overrides (repo replaces global). Thanks to @tjorri for the contribution! (#779)
Improved
Better Cloudflare tunnel error messages - When the Cloudflare tunnel fails to connect, Cyrus now provides detailed troubleshooting guidance including common causes (firewall, VPN, proxy issues) and links to connectivity prechecks documentation. This helps users quickly identify and resolve network configuration issues preventing tunnel establishment. (CYPACK-743, #788)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.16
cyrus-config-updater
cyrus-config-updater@0.2.16
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.16
cyrus-claude-runner
cyrus-claude-runner@0.2.16
cyrus-core
cyrus-core@0.2.16
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.16
cyrus-gemini-runner
cyrus-gemini-runner@0.2.16
cyrus-edge-worker
cyrus-edge-worker@0.2.16
cyrus-ai (CLI)
cyrus-ai@0.2.16
0.2.15
2026-01-16
Added
Version endpoint - Added a /version endpoint that returns the Cyrus CLI version, enabling the dashboard to display version information. The endpoint returns { "cyrus_cli_version": "x.y.z" } or null if unavailable. (CYPACK-731, #775)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.15
cyrus-config-updater
cyrus-config-updater@0.2.15
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.15
cyrus-claude-runner
cyrus-claude-runner@0.2.15
cyrus-core
cyrus-core@0.2.15
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.15
cyrus-gemini-runner
cyrus-gemini-runner@0.2.15
cyrus-edge-worker
cyrus-edge-worker@0.2.15
cyrus-ai (CLI)
cyrus-ai@0.2.15
0.2.14
2026-01-16
Fixed
Cross-repository orchestration - Fixed an issue where parent sessions could not be resumed when orchestrating sub-issues across different repositories. Child sessions now correctly locate and resume their parent sessions regardless of which repository they belong to. (CYPACK-722, #768)
Summary subroutines no longer show extended "Working" status - During summarization phases (concise-summary, verbose-summary, question-answer, plan-summary, user-testing-summary, release-summary), the agent no longer makes tool calls that caused users to see an extended "Working" status in Linear. The agent now produces only text output during these phases. (CYPACK-723, #764)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.14
cyrus-config-updater
cyrus-config-updater@0.2.14
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.14
cyrus-claude-runner
cyrus-claude-runner@0.2.14
cyrus-core
cyrus-core@0.2.14
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.14
cyrus-gemini-runner
cyrus-gemini-runner@0.2.14
cyrus-edge-worker
cyrus-edge-worker@0.2.14
cyrus-ai (CLI)
cyrus-ai@0.2.14
0.2.13
2026-01-15
Added
Multi-repository orchestration routing context - Orchestrator prompts now receive routing context when multiple repositories are configured in the same workspace. This enables orchestrators to intelligently route sub-issues to different repositories using description tags ([repo=org/repo-name]), routing labels, team keys, or project keys. (CYPACK-711, #756)
Fixed
Usage limit errors now display as errors - When hitting usage limits (rate_limit) or other SDK errors, the agent now creates an "error" type activity instead of a "thought" type, making error messages more visible to users in the Linear UI. (CYPACK-719, #760)
Changed
Orchestrator label routing is now hardcoded - Issues with 'orchestrator' or 'Orchestrator' labels now always route to the orchestrator procedure, regardless of EdgeConfig settings. This ensures consistent orchestrator behavior without requiring explicit configuration. (CYPACK-715, #757)
Updated dependencies - Updated @anthropic-ai/claude-agent-sdk from 0.2.2 to 0.2.7 (changelog). This brings compatibility with Claude Code v2.1.7, which enables MCP tool search auto mode by default. When MCP tool descriptions exceed 10% of the context window, they are automatically deferred and discovered via the MCPSearch tool instead of being loaded upfront, reducing context usage for sessions with many MCP tools configured. (CYPACK-716, #758)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.13
cyrus-config-updater
cyrus-config-updater@0.2.13
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.13
cyrus-claude-runner
cyrus-claude-runner@0.2.13
cyrus-core
cyrus-core@0.2.13
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.13
cyrus-gemini-runner
cyrus-gemini-runner@0.2.13
cyrus-edge-worker
cyrus-edge-worker@0.2.13
cyrus-ai (CLI)
cyrus-ai@0.2.13
0.2.12
2026-01-09
Fixed
Case-insensitive label matching for orchestrator/debugger modes - Label matching for orchestrator, debugger, builder, and scoper modes is now case-insensitive, matching the existing behavior of model selection. Labels like "Orchestrator" in Linear now correctly match config entries like ["orchestrator"]. (CYPACK-701, #746)
Haiku model label support - Fixed "haiku" as a supported model label for label-based model selection. Uses sonnet as fallback model for retry scenarios. (CYPACK-701, #746)
Changed
Improved changelog handling - Changelog updates now run as a separate subroutine before git operations, ensuring PR links can be included via amend. The git-gh subroutine has been split into changelog-update, git-commit, and gh-pr for better modularity. Non-changelog subroutines now explicitly avoid touching the changelog to prevent conflicts. (CYPACK-670, #708)
Updated dependencies - Updated @anthropic-ai/claude-agent-sdk from 0.1.72 to 0.2.2 (changelog). Updated zod from 3.x to 4.3.5 to satisfy peer dependencies. Migrated from zod-to-json-schema to Zod v4's native toJSONSchema() method. (CYPACK-700, #745)
Added
Worktree include support - Add .worktreeinclude file support to automatically copy gitignored files (like .env, local configs) from the main repository to new worktrees. Files must be listed in both .worktreeinclude AND .gitignore to be copied. Supports glob patterns like .env.* and **/.claude/settings.local.json. (CYPACK-690, #734)
Screenshot upload guidance hooks - Agents are now guided to use linear_upload_file when taking screenshots, ensuring screenshots are viewable in Linear comments instead of remaining as local files. Hooks added for playwright_screenshot, mcp__claude-in-chrome__computer, mcp__claude-in-chrome__gif_creator, and mcp__chrome-devtools__take_screenshot. (CYPACK-699, #744)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.12
cyrus-config-updater
cyrus-config-updater@0.2.12
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.12
cyrus-claude-runner
cyrus-claude-runner@0.2.12
cyrus-core
cyrus-core@0.2.12
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.12
cyrus-gemini-runner
cyrus-gemini-runner@0.2.12
cyrus-edge-worker
cyrus-edge-worker@0.2.12
cyrus-ai (CLI)
cyrus-ai@0.2.12
0.2.11
2026-01-07
Fixed
Repository tag routing now works with Linear's escaped brackets - Fixed a bug where [repo=...] tags weren't recognized because Linear escapes square brackets in descriptions (e.g., \[repo=cyrus\]). The parser now handles both escaped and unescaped formats. (CYPACK-688, #738)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.11
cyrus-config-updater
cyrus-config-updater@0.2.11
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.11
cyrus-claude-runner
cyrus-claude-runner@0.2.11
cyrus-core
cyrus-core@0.2.11
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.11
cyrus-gemini-runner
cyrus-gemini-runner@0.2.11
cyrus-edge-worker
cyrus-edge-worker@0.2.11
cyrus-ai (CLI)
cyrus-ai@0.2.11
0.2.10
2026-01-06
Added
Repository tag routing - You can now specify which repository an issue should be routed to by adding a [repo=...] tag in the issue description. Supports [repo=org/repo-name] to match GitHub URLs, [repo=repo-name] to match by name, or [repo=repo-id] to match by ID. This takes precedence over label, project, and team-based routing. (CYPACK-688, #732)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.10
cyrus-config-updater
cyrus-config-updater@0.2.10
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.10
cyrus-claude-runner
cyrus-claude-runner@0.2.10
cyrus-core
cyrus-core@0.2.10
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.10
cyrus-gemini-runner
cyrus-gemini-runner@0.2.10
cyrus-edge-worker
cyrus-edge-worker@0.2.10
cyrus-ai (CLI)
cyrus-ai@0.2.10
0.2.9
2025-12-30
Added
Repository tag routing - You can now specify which repository an issue should be routed to by adding a [repo=...] tag in the issue description. Supports [repo=org/repo-name] to match GitHub URLs, [repo=repo-name] to match by name, or [repo=repo-id] to match by ID. This takes precedence over label, project, and team-based routing. (CYPACK-688, #732)
GPT Image 1.5 support - The image-tools MCP server now supports gpt-image-1.5, OpenAI's latest and highest quality image generation model. You can choose between gpt-image-1.5 (default, best quality), gpt-image-1, or gpt-image-1-mini (faster, lower cost). (CYPACK-675, #717)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.9
cyrus-config-updater
cyrus-config-updater@0.2.9
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.9
cyrus-claude-runner
cyrus-claude-runner@0.2.9
cyrus-core
cyrus-core@0.2.9
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.9
cyrus-gemini-runner
cyrus-gemini-runner@0.2.9
cyrus-edge-worker
cyrus-edge-worker@0.2.9
cyrus-ai (CLI)
cyrus-ai@0.2.9
0.2.8
2025-12-28
Added
Release procedure - Added a new release procedure with two subroutines for executing software releases. When an issue is classified as a release request, Cyrus will: (1) check for a release skill in the project, (2) check CLAUDE.md or README.md for release instructions, or (3) ask the user via AskUserQuestion how to perform the release. This enables Cyrus to handle release workflows for any project type. (CYPACK-668, #706)
Self-hosting OAuth commands - New CLI commands for self-hosted deployments: cyrus self-auth performs direct Linear OAuth authorization without a proxy, and cyrus self-add-repo clones repositories and adds them to config with inherited workspace credentials. Both commands support the --cyrus-home flag for custom configuration directories. See the Self-Hosting Guide for setup instructions. Based on the original OAuth implementation contributed by Stuart and the Grandmore team. (CYPACK-669, #707)
Changed
Documentation restructured - Moved self-hosting documentation from selfhosting/ folder to docs/ with separate files: SELF_HOSTING.md (main guide), CONFIG_FILE.md (configuration reference), and CLOUDFLARE_TUNNEL.md (optional tunnel setup). Main README now links to these docs. (CYPACK-669, #707)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.8
cyrus-config-updater
cyrus-config-updater@0.2.8
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.8
cyrus-claude-runner
cyrus-claude-runner@0.2.8
cyrus-core
cyrus-core@0.2.8
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.8
cyrus-gemini-runner
cyrus-gemini-runner@0.2.8
cyrus-edge-worker
cyrus-edge-worker@0.2.8
cyrus-ai (CLI)
cyrus-ai@0.2.8
0.2.7
2025-12-28
Fixed
AskUserQuestion UI cleanup - The AskUserQuestion tool no longer appears as raw JSON in Linear's activity stream. Since the tool is custom-handled via Linear's select signal elicitation, the tool call and result are now suppressed from the activity UI for a cleaner experience. (CYPACK-654, #698)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.7
cyrus-config-updater
cyrus-config-updater@0.2.7
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.7
cyrus-claude-runner
cyrus-claude-runner@0.2.7
cyrus-core
cyrus-core@0.2.7
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.7
cyrus-gemini-runner
cyrus-gemini-runner@0.2.7
cyrus-edge-worker
cyrus-edge-worker@0.2.7
cyrus-ai (CLI)
cyrus-ai@0.2.7
0.2.6
2025-12-22
Changed
Default model upgraded to Opus - Cyrus now uses Claude Opus as the default model with Sonnet as fallback (previously Sonnet with Haiku fallback). This provides higher quality responses for all tasks. (CYPACK-613)
Updated @anthropic-ai/claude-agent-sdk from v0.1.69 to v0.1.72 to maintain parity with Claude Code v2.0.72. This update includes fixed /context command behavior to respect custom system prompts, improved non-streaming performance for single-turn queries, and renamed V2 session API method from receive() to stream(). See the Claude Agent SDK changelog for full details. (CYPACK-618)
Added
Interactive clarification via AskUserQuestion - Cyrus can now ask you clarifying questions during task execution using Linear's select signal. When Claude needs to make a decision with multiple valid options (e.g., which sorting algorithm, which library to use), it will present the options in Linear and wait for your selection before proceeding. This enables more interactive and accurate task completion. (CYPACK-654, #691)
Custom Skills support - Cyrus now supports Claude Skills, allowing you to extend Cyrus with your own packaged capabilities. Create SKILL.md files in your project's .claude/skills/ directory or personal ~/.claude/skills/ directory, and Cyrus will automatically discover and use them when relevant. See the Skills documentation for details on creating Skills. (CYPACK-655, #690)
Acceptance criteria validation - The verifications subroutine now fetches the Linear issue and validates the implementation against all acceptance criteria. Failing to meet acceptance criteria counts as a failed verification, ensuring requirements are fully satisfied before proceeding to commit and PR creation. (CYPACK-649, #687)
Validation loop with retry logic - When verifications fail during the full-development procedure, Cyrus now automatically runs a fixer subroutine to address issues, then re-runs verification up to 4 times. Uses structured outputs with Zod schema validation for reliable pass/fail detection, with fallback parsing for Gemini compatibility. (CYPACK-620, #666)
Claude in Chrome integration - EdgeWorker now enables Chrome browser automation via the Claude Agent SDK's --chrome flag, providing access to browser automation tools (screenshot recording, console reading, JavaScript execution, tab management) for main Cyrus sessions. Simple agent runners explicitly disable this integration to keep lightweight queries fast. (CYPACK-618)
Process status endpoint - Added GET /status endpoint that returns {"status": "idle"} or {"status": "busy"} to safely determine when Cyrus can be restarted without interrupting active work. (CYPACK-576, #632)
Version logging on startup - Cyrus now displays the running version when the edge worker starts, making it easier to verify which version is deployed. (CYPACK-585)
Added CLI platform mode support to enable in-memory issue tracking for testing and development (CYPACK-509)
User testing procedure - New "user-testing" procedure for interactive, user-driven testing sessions. When you explicitly request manual testing (e.g., "test this for me", "run user testing"), Cyrus will execute tests based on your instructions and provide a comprehensive summary of results and findings. (CYPACK-542)
Graphite workflow support - Cyrus now integrates with Graphite CLI for stacked PR workflows. Apply a "graphite" label to any issue to enable Graphite-aware behavior: sub-issues automatically branch from their blocking issue's branch (based on Linear's "blocked by" relationships) instead of main, and PRs are created using gt submit. For orchestrating complex multi-part features, apply both "graphite" and "orchestrator" labels - the orchestrator will create dependent sub-issues with proper blocking relationships that automatically stack in Graphite's dashboard. (CYPACK-466, #577)
Linear agent sessions MCP tools - Added linear_get_agent_sessions and linear_get_agent_session tools to cyrus-tools MCP server for retrieving agent session information from Linear. The tools support pagination, filtering, and provide comprehensive session details including timestamps, associated issues, and related entities. (CYPACK-549, #625)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.6
cyrus-config-updater
cyrus-config-updater@0.2.6
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.6
cyrus-claude-runner
cyrus-claude-runner@0.2.6
cyrus-core
cyrus-core@0.2.6
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.6
cyrus-gemini-runner
cyrus-gemini-runner@0.2.6
cyrus-edge-worker
cyrus-edge-worker@0.2.6
cyrus-ai (CLI)
cyrus-ai@0.2.6
0.2.5
2025-12-03
Fixed
Fixed Zod peer dependency mismatch in claude-runner that caused mcp__cyrus-tools__linear_agent_session_create MCP tools to fail with keyValidator._parse is not a function error. Downgraded claude-runner's Zod dependency from v4.1.12 to v3.24.1 to match the Claude Agent SDK's peer dependency requirement (CYPACK-478, #581)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.5
cyrus-config-updater
cyrus-config-updater@0.2.5
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.5
cyrus-claude-runner
cyrus-claude-runner@0.2.5
cyrus-core
cyrus-core@0.2.5
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.5
cyrus-edge-worker
cyrus-edge-worker@0.2.5
cyrus-ai (CLI)
cyrus-ai@0.2.5
0.2.4
2025-11-25
Added
Google Gemini AI support - Cyrus now supports Google's Gemini models alongside Claude. Choose which AI processes your issues by adding labels to Linear issues: use gemini, gemini-2.5-pro, gemini-2.5-flash, or gemini-3-pro for Gemini models, or claude, sonnet, or opus for Claude models. If no AI label is present, Cyrus defaults to Claude. This gives you flexibility to select the best AI for each task.
Fixed
Fixed race condition in subroutine transitions where new subroutines could start before the previous runner fully cleaned up, which could cause issues with session state management
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.4
cyrus-config-updater
cyrus-config-updater@0.2.4
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.4
cyrus-claude-runner
cyrus-claude-runner@0.2.4
cyrus-core
cyrus-core@0.2.4
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.4
cyrus-edge-worker
cyrus-edge-worker@0.2.4
cyrus-ai (CLI)
cyrus-ai@0.2.4
0.2.3
2025-11-24
Added
Claude Opus 4.5 support - Cyrus now has access to Claude Opus 4.5, Anthropic's most intelligent model with breakthrough capabilities in complex reasoning, advanced coding, and nuanced content creation. Experience significantly improved code generation, deeper analysis, and more sophisticated problem-solving across all Cyrus workflows.
Improved Linear agent-session tool formatting with custom formatters for better readability: Bash tool descriptions now appear in the action field with round brackets, Edit tool results display as unified diffs, and specialized parameter/result formatters for common tools (Read, Write, Grep, Glob, etc.) extract meaningful information instead of showing raw JSON (CYPACK-395, https://github.com/ceedaragents/cyrus/pull/512)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.2
cyrus-config-updater
cyrus-config-updater@0.2.2
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.2
cyrus-claude-runner
cyrus-claude-runner@0.2.2
cyrus-core
cyrus-core@0.2.2
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.2
cyrus-edge-worker
cyrus-edge-worker@0.2.2
cyrus-ai (CLI)
cyrus-ai@0.2.2
0.2.1
2025-11-15
Added
When no routing option matches, it will prompt the user to select which repo they'd like to run Cyrus on for the Linear Issue. Repository selection now displays GitHub repository icons and formatted names when configured with a GitHub URL in the config file. The selected repository will be shown to the user, including what method was used to select it (label-based, team key based, project based, user-selected, etc)
Restored --env-file option to specify custom environment variables file location (uses Commander library for CLI parsing)
Receives Linear webhook payloads forwarded through cyrus-hosted
Repository management (automatically clones/verifies repositories to ~/.cyrus/repos/<repo-name>)
All file operations restricted to ~/.cyrus directory for security
Will replace ndjson-client for customers using cyrus-hosted service
Setup Waiting Mode: After running cyrus auth, the client now enters a waiting state to receive configuration from the server
Automatically starts server infrastructure (SharedApplicationServer, ConfigUpdater) without repositories
Displays clear waiting status and instructions to complete setup
Auto-transitions to normal operation when server pushes repository configuration
Watches config.json for changes and starts EdgeWorker when repositories are added
Fixed
Cyrus client now stays running when all repositories are removed after onboarding, allowing it to receive new configuration from app.atcyrus.com
Orchestrator label now enforces orchestrator procedure consistently - issues with the Orchestrator label always use the orchestrator-full procedure, even when receiving results from child sub-agents or processing new messages
Suppressed unnecessary error logs when stopping Claude sessions
Repository deletion now works correctly when triggered from the web UI
Added missing routingLabels and projectKeys fields to CyrusConfigPayload type in config-updater package
Config handler now properly processes and saves label routing and project routing parameters when received from cyrus-hosted
Fixed missing dist/ directory in published packages by adding "files": ["dist"] to cloudflare-tunnel-client and config-updater package.json files
All packages now include their compiled TypeScript output when installed from npm
Changed
Linear Event Transport: Refactored cyrus-linear-webhook-client to cyrus-linear-event-transport for simplified webhook handling
Package now directly registers /webhook endpoint with Fastify server
Supports dual verification modes: direct Linear webhooks (LINEAR_DIRECT_WEBHOOKS) and proxy authentication
Removed complex transport abstractions (WebhookTransport, BaseTransport) in favor of direct route registration
Routes registered after server startup for improved initialization flow
Simplified CLI startup: Removed legacy onboarding flows and subscription validation
Cloudflare tunnel now starts automatically when CLOUDFLARE_TOKEN is present
Removed Pro plan prompts and customer validation code
Removed billing and set-customer-id commands
Streamlined auth command to focus on authentication only
All tunnel management now handled by SharedApplicationServer
Subscription service: Removed customer validation and subscription checking code
Billing commands: Removed billing and set-customer-id CLI commands
Deprecated config parameter: Removed isLegacy from EdgeConfig (replaced by setup waiting mode)
Packages
cyrus-cloudflare-tunnel-client
cyrus-cloudflare-tunnel-client@0.2.0
cyrus-config-updater
cyrus-config-updater@0.2.0
cyrus-linear-event-transport
cyrus-linear-event-transport@0.2.0
cyrus-claude-runner
cyrus-claude-runner@0.2.0
cyrus-core
cyrus-core@0.2.0
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.2.0
cyrus-edge-worker
cyrus-edge-worker@0.2.0
cyrus-ai (CLI)
cyrus-ai@0.2.0
0.1.60
2025-11-03
Fixed
Orchestrator label now enforces orchestrator procedure consistently - issues with the Orchestrator label always use the orchestrator-full procedure, even when receiving results from child sub-agents or processing new messages
Suppressed unnecessary error logs when stopping Claude sessions
Changed
Updated @anthropic-ai/claude-agent-sdk from v0.1.28 to v0.1.31
Skip loading 'primary' subroutine prompt to eliminate ENOENT error in logs - the "primary" promptPath is a placeholder with no corresponding file
Packages
cyrus-core
cyrus-core@0.0.20
cyrus-edge-worker
cyrus-edge-worker@0.0.40
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.0.3
cyrus-ai (CLI)
cyrus-ai@0.1.59
0.1.58
2025-10-29
Added
Orchestrator and sub-issue communication is now visible in Linear activity: feedback from orchestrator to sub-issues and results from sub-issues to orchestrator are posted as thoughts with clear context
Fixed
Procedure routing is now reset when resuming parent sessions from child completion, preventing excessive thought and action suppression logs
Fixed bug where initial subroutine prompts were not applied to comment-triggered new sessions (only worked for assignment-based sessions)
Improved routing classification to correctly identify test-related requests (e.g., "add unit tests", "fix failing tests") as code work instead of planning tasks
Changed
Debugger workflow now proceeds directly from bug reproduction to fix implementation without requiring manual approval
All workflows (full-development, debugger-full, orchestrator-full) now end with concise summary instead of verbose summary
Non-summary subroutines (debugger-fix, debugger-reproduction, verifications, git-gh) now explicitly avoid posting Linear comments and end with brief 1-sentence completion messages
Orchestrator agents are now strongly discouraged from posting Linear comments to current issues; comments only used when triggering sub-agent sessions on child issues
Orchestrator agents are explicitly instructed not to assign themselves (Cyrus) as a delegate when creating sub-issues
Tool call result outputs are no longer wrapped in collapsible sections in Linear comments
Concise summary format now uses collapsible sections for "Changes Made" and "Files Modified" to keep summaries brief
Simple-question workflow now has two phases: investigation (gather information without answering) and answer formatting (provide markdown-formatted response)
Initial subroutine prompts are now consistently loaded for all new sessions (assignment-based and comment-based), ensuring agents receive proper workflow guidance from the start
Full-development workflow now starts with dedicated coding-activity subroutine (implementation and testing only, no git/gh operations)
Packages
cyrus-core
cyrus-core@0.0.20
cyrus-edge-worker
cyrus-edge-worker@0.0.40
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.0.3
cyrus-ai (CLI)
cyrus-ai@0.1.58
0.1.57
2025-10-12
Fixed
Fixed missing cyrus-simple-agent-runner package publication that broke installation of cyrus-ai@0.1.56
Packages
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.0.2
cyrus-edge-worker
cyrus-edge-worker@0.0.39
cyrus-ai (CLI)
cyrus-ai@0.1.57
0.1.56
2025-10-12
Added
Intelligent procedure routing: Cyrus now automatically selects the best workflow for each task by analyzing the request content. Simple questions get quick answers, documentation edits proceed directly to implementation, and code changes get the full workflow with verifications and git operations. Uses fast "haiku" model for 10-second classification.
Modular subroutine system: Workflows are composed of reusable subroutines (verifications, git-gh, concise-summary, verbose-summary) that can be mixed and matched based on the procedure selected.
Environment variable support in MCP configs: MCP configuration files can now reference environment variables from repository .env files using ${VAR} and ${VAR:-default} syntax, making it easier to manage API tokens and other sensitive configuration values
Sora 2 video generation support: Added custom MCP tools for OpenAI Sora 2 video generation with three tools: mcp__sora-tools__sora_generate_video to start video generation (supports text-to-video and image-to-video via input_reference parameter; reference images must match target video resolution and be in JPEG, PNG, or WebP format only), mcp__sora-tools__sora_check_status to poll job status, and mcp__sora-tools__sora_get_video to download completed videos
Simple agent runner package: Added new cyrus-simple-agent-runner package for constrained agent queries that return one of a predefined set of responses (e.g., "yes", "no"). Features type-safe enumerated responses, comprehensive error handling, and progress tracking.
Image generation support: Added GPT Image tools using OpenAI's Responses API with background mode. Two tools provide async image generation: mcp__image-tools__gpt_image_generate starts async image generation and returns a job ID, and mcp__image-tools__gpt_image_get checks status and downloads the image if ready (returns "not ready" if incomplete - agents can call again). Supports customizable size (1024x1024, 1536x1024, 1024x1536, auto), quality (low/medium/high/auto), background transparency, and output formats (PNG/JPEG/WebP). Uses gpt-5 model for tool invocation.
Breaking: OpenAI configuration naming: Renamed repository config fields from soraApiKey/soraOutputDirectory to openaiApiKey/openaiOutputDirectory to reflect support for multiple OpenAI services (Sora and GPT Image). Update your repository config to use the new field names.
Packages
cyrus-claude-runner
cyrus-claude-runner@0.0.31
cyrus-core
cyrus-core@0.0.19
cyrus-edge-worker
cyrus-edge-worker@0.0.38
cyrus-ndjson-client
cyrus-ndjson-client@0.0.24
cyrus-simple-agent-runner
cyrus-simple-agent-runner@0.0.2
cyrus-ai (CLI)
cyrus-ai@0.1.56
0.1.55
2025-10-09
Added
Dynamic configuration updates: Cyrus now automatically detects and applies changes to ~/.cyrus/config.json without requiring a restart
Add or remove repositories on the fly while Cyrus continues running
Removed repositories stop all active sessions and post notification messages to Linear
Webhook connections automatically reconnect when tokens are updated
File watcher uses debouncing to handle rapid configuration changes smoothly
Changed
Upgraded to official Linear MCP server: Replaced the unofficial @tacticlaunch/mcp-linear stdio-based server with Linear's official HTTP-based MCP server (https://mcp.linear.app/mcp). This provides better stability and access to the latest Linear API features.
Automatic MCP config detection: Cyrus now automatically detects and loads .mcp.json files in the repository root. The .mcp.json serves as a base configuration that can be extended by explicit mcpConfigPath settings, allowing for composable MCP server configurations.
Fixed
Custom instructions now work correctly: Fixed critical bug where appendSystemPrompt was being silently ignored, causing Cyrus to not follow custom instructions or agent guidance. The feature has been fixed to use the correct SDK API (systemPrompt.append), making custom prompts and Linear agent guidance work as intended.
Packages
cyrus-claude-runner
cyrus-claude-runner@0.0.29
cyrus-core
cyrus-core@0.0.17
cyrus-edge-worker
cyrus-edge-worker@0.0.36
cyrus-ndjson-client
cyrus-ndjson-client@0.0.22
cyrus-ai (CLI)
cyrus-ai@0.1.54
0.1.53
2025-10-04
Added
Agent guidance injection: Cyrus now automatically receives and includes both workspace-level and team-specific agent guidance from Linear in all prompts. When both types of guidance are configured, both are included in the prompt, with team-specific guidance taking precedence as specified by Linear's guidance system.
Changed
Updated @linear/sdk from v58.1.0 to v60.0.0 to support agent guidance feature
Packages
cyrus-claude-runner
cyrus-claude-runner@0.0.28
cyrus-core
cyrus-core@0.0.16
cyrus-edge-worker
cyrus-edge-worker@0.0.35
cyrus-ndjson-client
cyrus-ndjson-client@0.0.21
cyrus-ai (CLI)
cyrus-ai@0.1.53
0.1.52
2025-10-04
Changed
Version bump for all packages to ensure proper dependency resolution
Packages
cyrus-claude-runner
cyrus-claude-runner@0.0.27
cyrus-core
cyrus-core@0.0.15
cyrus-edge-worker
cyrus-edge-worker@0.0.34
cyrus-ndjson-client
cyrus-ndjson-client@0.0.20
cyrus-ai (CLI)
cyrus-ai@0.1.52
0.1.51
2025-10-04
Fixed
Restored file-based settings loading: Fixed regression from claude-agent-sdk update where CLAUDE.md files, settings files, and custom slash commands were not being loaded
Added explicit settingSources: ["user", "project", "local"] configuration to ClaudeRunner
This restores backwards compatibility with existing user configurations
Global setup script support: Added global_setup_script optional field in config.json
Runs before repository-specific cyrus-setup.sh when creating git worktrees
Supports ~ expansion for home directory paths
Same environment variables passed to both global and repository scripts (LINEAR_ISSUE_ID, LINEAR_ISSUE_IDENTIFIER, LINEAR_ISSUE_TITLE)
5-minute timeout to prevent hanging scripts
Comprehensive error handling and logging for both global and repository scripts
Script failures don't prevent worktree creation
Cross-platform support (bash, PowerShell, cmd, bat)
Ephemeral agent activities for tool calls: Standard tool calls now post ephemeral activities to Linear
Tool calls (except Task and TodoWrite) create ephemeral activities that disappear when replaced
Tool responses create non-ephemeral activities showing original tool name and input
Tool outputs are wrapped in +++Tool Output collapsible blocks (collapsed by default)
Tool errors display as "{ToolName} (Error)" for better clarity
Subtasks maintain arrow emoji (↪) prefix for visual hierarchy
TodoWrite tool results are skipped to prevent duplicate activities
Reduces visual clutter in Linear while preserving important information
Changed
Linear SDK upgraded to v58.1.0: Updated across all packages to support ephemeral agent activity field
Added ephemeral: boolean support for agent activities
Maintained backward compatibility with existing non-ephemeral activities
Packages
cyrus-claude-runner
cyrus-claude-runner@0.0.26
cyrus-core
cyrus-core@0.0.14
cyrus-edge-worker
cyrus-edge-worker@0.0.33
cyrus-linear-webhook-client
cyrus-linear-webhook-client@0.0.3
cyrus-ndjson-client
cyrus-ndjson-client@0.0.19
0.1.49
2025-09-29
Changed
Migrated from Claude Code SDK to Claude Agent SDK: Replaced @anthropic-ai/claude-code v1.0.128 with @anthropic-ai/claude-agent-sdk v0.1.0
Updated all imports and type references to use the new package name
Handled breaking change: SDK no longer uses Claude Code's system prompt by default - now explicitly requests Claude Code preset to maintain backward compatibility
No changes needed for settings sources as the codebase doesn't rely on automatic settings file loading
Updated @anthropic-ai/sdk from v0.62.0 to v0.64.0 for latest Anthropic SDK improvements
Packages
cyrus-claude-runner
cyrus-claude-runner@0.0.25
cyrus-core
cyrus-core@0.0.13
cyrus-edge-worker
cyrus-edge-worker@0.0.32
cyrus-ai (CLI)
cyrus-ai@0.1.49
0.1.48
2025-01-11
Added
Direct OAuth authorization support: The CLI can now handle OAuth authorization directly when LINEAR_DIRECT_WEBHOOKS=true
New /oauth/authorize endpoint in SharedApplicationServer for self-hosted OAuth flow
Automatic OAuth code exchange when using direct webhooks mode
Support for custom Linear OAuth applications via LINEAR_CLIENT_ID and LINEAR_CLIENT_SECRET environment variables
Maintains backward compatibility with proxy-based OAuth for standard deployments
Packages
cyrus-edge-worker
cyrus-edge-worker@0.0.31
cyrus-ai (CLI)
cyrus-ai@0.1.48
0.1.47
2025-01-09
Fixed
Fixed webhook signature verification for LinearWebhookClient
Corrected signature verification to properly handle webhook payloads
Ensures webhook authenticity when using direct webhook forwarding mode
Resolves security validation issues in direct webhook configurations
Packages
cyrus-linear-webhook-client
cyrus-linear-webhook-client@0.0.2
cyrus-edge-worker
cyrus-edge-worker@0.0.30
cyrus-ai (CLI)
cyrus-ai@0.1.47
0.1.46
2025-01-09
Added
Dynamic webhook client selection: Support for choosing between proxy-based and direct webhook forwarding
New environment variable LINEAR_DIRECT_WEBHOOKS to control webhook client selection
When LINEAR_DIRECT_WEBHOOKS=true, uses new linear-webhook-client package for direct webhook forwarding
When unset or false, uses existing ndjson-client for proxy-based webhook handling
Maintains full backward compatibility with existing deployments
Sub-issue assignee inheritance with workspace context: Sub-issues created by orchestrator agents now automatically inherit the same assignee as their parent issue, with complete workspace awareness
Enhanced label-prompt-template to include assignee information ({{assignee_id}} and {{assignee_name}})
Added workspace teams context ({{workspace_teams}}) with team names, keys, IDs, and descriptions
Added workspace labels context ({{workspace_labels}}) with label names, IDs, and descriptions
Updated orchestrator prompt instructions to require assigneeId parameter in sub-issue creation
Modified EdgeWorker to fetch and inject Linear workspace data (teams, labels, assignee) into orchestrator context
Mandatory verification framework for orchestrator agents: Enhanced parent-child delegation with executable verification requirements
Parent orchestrators can now access child agent worktrees for independent verification
Orchestrator prompt v2.2.0 with mandatory verification requirements in sub-issue descriptions
Child agents must provide detailed verification instructions (commands, expected outcomes, visual evidence)
Parents gain filesystem permissions to child worktrees during verification process
No more "verification theater" - actual executable validation required before merging child work
@cyrus /label-based-prompt command: New special command for mention-triggered sessions
Use @cyrus /label-based-prompt in comments to trigger label-based prompts instead of mention prompts
Automatically determines and includes appropriate system prompts based on issue labels
Maintains full backwards compatibility with regular @cyrus mentions
Logged as "label-based-prompt-command" workflow type for easy identification
Tool restriction configuration: New disallowedTools configuration option to explicitly block specific tools
Can be configured at global, repository, prompt type, and label-specific levels
Follows same hierarchy as allowedTools (label > prompt defaults > repository > global)
No default disallowed tools - only explicitly configured tools are blocked
Environment variable support: DISALLOWED_TOOLS for global defaults
Passed through to Claude Code via disallowedTools option
New Linear MCP tool: linear_agent_session_create_on_comment for creating agent sessions on root comments
Enables orchestrator agents to trigger sub-agents on existing issue comment threads
Must be used with root comments only (not replies) due to Linear API constraints
Maintains parent-child session mapping for proper feedback routing
Changed
Updated @anthropic-ai/claude-code from v1.0.90 to v1.0.95 for latest Claude Code improvements. See Claude Code v1.0.95 changelog
Replaced external cyrus-mcp-tools MCP server with inline tools using SDK callbacks for better performance
Cyrus tools (file upload, agent session creation, feedback) now run in-process instead of via separate MCP server
Enhanced orchestrator prompt to explicitly require reading/viewing all screenshots taken for visual verification
Removed
Removed cyrus-mcp-tools package in favor of inline tool implementation
0.1.45
2025-08-28
Added
New cyrus-mcp-tools package providing MCP tools for Linear integration
File upload capability: Upload files to Linear and get asset URLs for use in issues and comments
Agent session creation: Create AI/bot tracking sessions on Linear issues
Give feedback tool: Allows parent sessions to send feedback to child sessions
Automatically available in all Cyrus sessions without additional configuration
PostToolUse hook integration for tracking parent-child agent session relationships
Automatically captures child agent session IDs when linear_agent_session_create tool is used
Triggers child session resumption when linear_agent_give_feedback tool is used
Maintains mapping of child sessions to parent sessions for hierarchical tracking
Persistent storage of child-to-parent mappings across restarts
Child session results are automatically forwarded to parent sessions upon completion
New "orchestrator" label system prompt type
Joins existing "builder", "debugger", and "scoper" labels as a default option
Configured with read-only tools (cannot directly edit files)
Specializes in coordination and oversight of complex development tasks
Automatically triggered by "Orchestrator" label on Linear issues
Label-based Claude model selection: You can now override the Claude model used for specific issues by adding labels
Add "opus", "sonnet", or "haiku" label to any Linear issue to force that model
Model labels take highest priority (overrides both repository and global settings)
Streamlined first-time user experience with sensible defaults
Added
Configuration documentation in README explaining all customizable settings
Link to configuration docs in CLI output after setup completion
Fixed
Fixed duplicate OAuth authorization messages during Linear login flow while ensuring browser still opens automatically
Packages
cyrus-core
cyrus-core@0.0.8
cyrus-claude-runner
cyrus-claude-runner@0.0.17
cyrus-edge-worker
cyrus-edge-worker@0.0.22
cyrus-ndjson-client
cyrus-ndjson-client@0.0.15
cyrus-ai (CLI)
cyrus-ai@0.1.39
0.1.38
2025-08-06
Added
Native Linear attachments (like Sentry error links) are now included in the issue context sent to Claude
Cyrus now fetches attachments using Linear's native attachment API
Attachments appear in a dedicated "Linear Issue Links" section in the prompt
Particularly useful for Sentry error tracking links and other external integrations
New command cyrus add-repository - Add a new repository configuration, thanks new contributor @Maxim-Filimonov !
Attachment support for comments - Cyrus now downloads and provides access to attachments added in Linear comments
Attachments are automatically downloaded when users post comments with URLs or files
Downloaded to ~/.cyrus/<workspace>/attachments directory
Attachment manifest is generated and included in Claude's prompt
Attachments directory is always available to Claude during sessions
Differentiation between issue delegation and @ mentions for more focused responses
@ mentions now trigger focused responses without system prompts
Delegations continue to use full system prompts for comprehensive task handling
Aligns with Linear's expected agent activity behavior
Subscription management built right into the CLI (because who wants another dashboard?)
cyrus billing - Opens your Stripe portal to manage subscription, payment methods, and download invoices
cyrus set-customer-id - Saves your customer ID after signup (copy-paste friendly)
Interactive prompt on startup if you're using our proxy without a subscription
Self-hosting option for the DIY crowd who prefer their own Linear app and infrastructure
existed in v0.1.34 but was missing since then
Fixed
Fixed attachments not being accessible to Claude during active streaming sessions
Pre-create attachments directory for every session to ensure future attachments are accessible
Always include attachments directory in allowedDirectories configuration
Fixed issue where messages from @ Cyrus mention comments weren't being added to context
Fixed issue where sub-issue base branches weren't being added to the user-prompt template, causing Cyrus to create PRs against the default branch instead
Packages
cyrus-core
cyrus-core@0.0.8
cyrus-claude-runner
cyrus-claude-runner@0.0.16
cyrus-edge-worker
cyrus-edge-worker@0.0.21
cyrus-ndjson-client
cyrus-ndjson-client@0.0.15
cyrus-ai (CLI)
cyrus-ai@0.1.38
0.1.37
2025-08-03
Fixed
Fixed "RateLimit exceeded" and Cannot query field "agentContext" on type "AgentActivity". errors when interacting with Linear API by updating SDK from v52 to v54
Linear API had breaking changes that caused compatibility issues with SDK v52
The outdated SDK was triggering excessive API calls leading to rate limit errors
Upgrading to v54 resolves these compatibility issues and restores normal operation
Packages
cyrus-core
cyrus-core@0.0.8
cyrus-claude-runner
cyrus-claude-runner@0.0.15
cyrus-edge-worker
cyrus-edge-worker@0.0.20
cyrus-ndjson-client
cyrus-ndjson-client@0.0.15
cyrus-ai (CLI)
cyrus-ai@0.1.37
0.1.36
2025-08-01
Added
Instant response is now sent when receiving follow-up messages in an existing conversation, providing immediate feedback that Cyrus is working on the request
Shows "I've queued up your message as guidance" when Cyrus is still processing a previous request
Shows "Getting started on that..." when Cyrus is ready to process the new request immediately
Parent branch inheritance for sub-issues - sub-issue branches now automatically use their parent issue's branch as the base instead of the default repository branch
Gracefully falls back to default base branch if parent branch doesn't exist
Clear logging shows branch inheritance decisions
Model notification at thread initialization - Cyrus now announces which Claude model is being used (e.g., "Using model: claude-3-opus-20240229") when starting work on an issue
Task tool execution markers in Linear comments - Cyrus now clearly indicates when automated Task tools are running
Tools invoked within a Task display "↪ ToolName" to indicate they're part of the Task
Shows "✅ Task Completed" when the Task finishes and displays the output from the Task
Packages
cyrus-core
cyrus-core@0.0.7
cyrus-claude-runner
cyrus-claude-runner@0.0.14
cyrus-edge-worker
cyrus-edge-worker@0.0.19
cyrus-ndjson-client
cyrus-ndjson-client@0.0.14
cyrus-ai (CLI)
cyrus-ai@0.1.36
0.1.35-alpha.0
2025-07-27
Added
Instant acknowledgment responses when Cyrus receives a request, providing immediate feedback to users
Role mode notifications when issue labels trigger specific workflows (e.g., "Entering 'debugger' mode because of the 'Bug' label")
You can now append custom instructions to Claude's system prompt via appendInstruction in repository config (~/.cyrus/config.json) - because sometimes Claude needs a gentle reminder that your variable names are art, not accidents
Changed
TodoWrite tool messages are now displayed as "thoughts" instead of "actions" in Linear for better visual organization
Packages
cyrus-core
cyrus-core@0.0.6-alpha.0
cyrus-claude-runner
cyrus-claude-runner@0.0.13-alpha.0
cyrus-edge-worker
cyrus-edge-worker@0.0.18-alpha.0
cyrus-ndjson-client
cyrus-ndjson-client@0.0.13-alpha.0
cyrus-ai (CLI)
cyrus-ai@0.1.35-alpha.0
0.1.33
2025-07-11
CLI
cyrus-ai@0.1.33
Fixed
Made conversation history of threads be resumable after Cyrus restarts
Fixed the issue with continuity of conversation in a thread, after the first comment
Packages
cyrus-core
cyrus-core@0.0.6
cyrus-claude-runner
cyrus-claude-runner@0.0.13
cyrus-edge-worker
cyrus-edge-worker@0.0.18
cyrus-ndjson-client
cyrus-ndjson-client@0.0.13
0.1.32
2025-07-09
CLI
cyrus-ai@0.1.32
Fixed
Missing prompt template file in published package (the one thing you need to actually run the thing)
Packages
cyrus-edge-worker
cyrus-edge-worker@0.0.17
Fixed missing prompt-template-v2.md in package files
0.1.31
2025-07-09
CLI
cyrus-ai@0.1.31
Added
Work on multiple tasks within a single Linear issue - each comment thread maintains its own Claude session, letting you tackle different parts of a problem in parallel without context mixing. New root comments start focused sessions that see the full conversation history in a threaded view (just like Linear's UI) while concentrating on your specific request
Automatic ngrok tunnel setup for external access
No more manual port forwarding or reverse proxy setup required
Cyrus will ask for your ngrok auth token on first run and handle the rest
Free ngrok account required (sorry, we can't make the internet work by magic alone)
Skip ngrok setup if you prefer to handle networking yourself
Webhook debugging via CYRUS_WEBHOOK_DEBUG=true environment variable - see exactly what Linear is (or isn't) sending you
Fixed
Fresh startup no longer crashes with "EdgeWorker not initialized" error when trying to connect to Linear
OAuth flow now works properly on first run (turns out asking for credentials before having a way to receive them was... problematic)
Git worktrees now work with local-only repositories (no more "fatal: 'origin' does not appear to be a git repository" when you're just trying to test things locally)
Webhooks now register with the correct URL (ngrok/public URL instead of localhost)
Packages
cyrus-edge-worker
cyrus-edge-worker@0.0.16
Added ngrok tunnel support for automatic public URL generation
Fixed webhook URL registration to use public URLs
Added getPublicUrl() method to SharedApplicationServer
cyrus-ndjson-client
cyrus-ndjson-client@0.0.12
Fixed webhook URL registration to use external server's public URL when available
0.1.30
2025-07-07
CLI
cyrus-ai@0.1.30
Fixed
Fixed critical crash issue where subprocess failures would bring down the entire application
Added global error handlers to prevent uncaught exceptions from terminating the process
Improved error isolation for individual Claude sessions - failures no longer affect other running sessions
Enhanced error logging with detailed stack traces for better debugging
Packages
cyrus-edge-worker
cyrus-edge-worker@0.0.15
0.1.28
2025-07-06
CLI
cyrus-ai@0.1.28
Fixed
Fixed critical streaming hang where sessions would never complete
Auto-completes streaming prompt when Claude sends result message
Prevents infinite wait in for-await loop
0.1.27
2025-07-06
CLI
cyrus-ai@0.1.27
Changed
Updated to use edge-worker 0.0.12 with fixed claude-runner dependency
0.1.26
2025-07-06
CLI
cyrus-ai@0.1.26
Fixed
Fixed critical streaming hang issue where Claude Code would block waiting for messages
Corrected abortController placement in query options (was at wrong nesting level)
Fixed system prompt parameter name (now uses customSystemPrompt as expected by Claude Code)
Added
Added appendSystemPrompt option to ClaudeRunner config for extending default system prompt
0.1.25
2025-07-06
CLI
cyrus-ai@0.1.25
Fixed
Fixed streaming session detection to prevent "I've queued up your message..." when sessions have completed
Improved isStreaming() method to check both streaming state and session running status
0.1.23
2025-07-06
CLI
cyrus-ai@0.1.23
Fixed
Fixed streaming input sessions not properly cleaning up after completion
Resolves issue where "I've queued up your message..." appeared even after sessions had resolved
Properly closes input streams when Claude sessions complete naturally
Added
Added cyrus check-tokens command to validate all Linear OAuth tokens across repositories
Added cyrus refresh-token command with OAuth flow integration to renew expired tokens
Improved error handling for expired Linear tokens with graceful degradation
Shows clear error messages with suggested resolution steps
Continues running with valid repositories when some tokens are expired
Changed
Configuration file location moved from .edge-config.json in current directory to ~/.cyrus/config.json
Automatically migrates existing .edge-config.json files to the new location
Uses standard user configuration directory for better cross-platform compatibility
Reports migration status when detected
Default workspace directory changed from {repository}/workspaces to ~/.cyrus/workspaces/{repo-name}
Centralizes all cyrus-related files in the user's home directory
Uses sanitized repository names as namespace folders
Existing configurations remain unchanged
0.1.22
2025-07-05
CLI
cyrus-ai@0.1.22
Added
Automatic Linear MCP (Model Context Protocol) server integration
Claude can now use Linear API tools directly within sessions
Automatically configures @tacticlaunch/mcp-linear server with repository's Linear token
Adds 30+ Linear MCP tools for issue management, comments, projects, and more
No additional configuration needed - works out of the box with existing Linear tokens
Changed
ClaudeRunner now supports array of MCP config paths for composable configurations
ClaudeRunner supports inline MCP server configurations alongside file-based configs
MCP configurations from files and inline sources are merged together
Fixed
Fixed webhook signature verification failures after restarting cyrus by extending edge worker registration TTL from 1 hour to 90 days
Resolves "Webhook signature verification failed for all registered handlers" error that occurred when cyrus was stopped and restarted
Edge worker registrations in the proxy now persist for 90 days instead of expiring after 1 hour
Improved
New comments on Linear issues queue up when Cyrus is already busy working, so that you can send multiple in a row (#77) (now feed into existing Claude sessions instead of killing and restarting the session
Packages
cyrus-claude-runner
cyrus-claude-runner@0.0.8
cyrus-edge-worker
cyrus-edge-worker@0.0.10
0.1.21
2025-07-05
CLI
cyrus-ai@0.1.21
Added
Added CYRUS_HOST_EXTERNAL environment variable to enable external server access (#78)
Set to true to listen on 0.0.0.0 (all interfaces) instead of localhost
Enables Docker container deployment and external webhook access scenarios
Maintains backward compatibility with localhost as default
Changed
BREAKING: Renamed CYRUS_WEBHOOK_BASE_URL to CYRUS_BASE_URL for clearer naming
Action Required: Update environment configuration to use CYRUS_BASE_URL instead of CYRUS_WEBHOOK_BASE_URL
Legacy Support: CYRUS_WEBHOOK_BASE_URL is still supported for backward compatibility but deprecated
The variable serves both webhook and OAuth callback purposes since they run on the same server
Packages
cyrus-edge-worker
cyrus-edge-worker@0.0.9
0.1.19
2025-07-04
CLI
cyrus-ai@0.1.19
Added
Added CYRUS_OAUTH_CALLBACK_BASE_URL environment variable to configure OAuth callback URL (defaults to http://localhost:3457) (#69)
Added CYRUS_OAUTH_CALLBACK_PORT environment variable to configure OAuth callback port (defaults to 3457)
OAuth callback URL is now fully configurable for different deployment environments (Docker, remote development, custom domains)
Supports --env-file=path option to load environment variables from custom file
Added CYRUS_BASE_URL environment variable to configure base URL for edge workers (#74)
Added CYRUS_WEBHOOK_PORT environment variable to configure webhook port (defaults to random port 3000-3999)
Implemented shared webhook server architecture to eliminate port conflicts between multiple Linear tokens
Changed
BREAKING: Migrated from Server-Sent Events (SSE) to webhook-only architecture (#74)
Action Required: Edge workers now receive webhooks instead of SSE streams
Action Required: Set CYRUS_BASE_URL environment variable if using custom deployment URLs (e.g., ngrok tunnel, server domain)
Action Required: Set CYRUS_WEBHOOK_PORT=3456 environment variable to ensure consistent webhook port
Action Required: Ensure edge workers can receive inbound HTTP requests on webhook ports
Renamed repository setup script from secretagentsetup.sh to cyrus-setup.sh
Fixed
Resolved SSE connection reliability issues by migrating to webhook architecture
Improved disconnection message formatting
Removed duplicate disconnection logging
Packages
cyrus-claude-runner
Upgraded @anthropic-ai/claude-code dependency to version 1.0.31
0.0.3
2025-06-17
Packages
cyrus-claude-runner@0.0.3
cyrus-core@0.0.3
cyrus-edge-worker@0.0.3
cyrus-ndjson-client@0.0.3
Initial changelog entry
0.1.9
2025-06-17
CLI
cyrus-ai@0.1.9
Initial changelog entry
Ready to automate your development workflow?
Join product teams shipping 20x faster with Cyrus.