Changelog

All notable changes to Cyrus are documented here.

[Unreleased]

[0.1.34] - 2025-01-17

Added

  • 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

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

[0.1.32] - 2025-01-09

CLI

Fixed

  • Missing prompt template file in published package (the one thing you need to actually run the thing)

Packages

cyrus-edge-worker

[0.1.31] - 2025-01-09

CLI

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

[0.1.30] - 2025-01-07

CLI

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

[0.1.28] - 2025-01-06

CLI

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-01-06

CLI

Changed

  • Updated to use edge-worker 0.0.12 with fixed claude-runner dependency

[0.1.26] - 2025-01-06

CLI

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-01-06

CLI

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.24] - 2025-01-06

CLI

Fixed

  • Fixed version command showing incorrect version number

[0.1.23] - 2025-01-06

CLI

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-01-06

CLI

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-edge-worker

[0.1.21] - 2025-01-05

CLI

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

[0.1.19] - 2025-01-04

CLI

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

Initial changelog entry

[0.1.9] - 2025-06-17

CLI

Initial changelog entry