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)
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)
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)
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)
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)
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)
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)
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)
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)
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
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)
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
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
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)
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.
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.
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
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
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
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)
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
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
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
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
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)
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