GitPedia
cyrusagents

cyrusagents/cyrus

The Claude Code background agent for Linear, Slack, Github, GitLab etc. you deploy anywhere. Supports Codex, Cursor and Gemini too.

30 Releases
Latest: today
v0.2.66Latest
cyrusagentcyrusagentΒ·todayΒ·June 20, 2026
GitHub

πŸ”’ Security

  • Patched the Cyrus CLI dependency graph so `pnpm audit` reports no known vulnerabilities, including updated Sentry, Cursor SDK, Axios, Vite/esbuild, Hono, form-data, ws, protobufjs, and OpenTelemetry resolutions. ([CYPACK-1334](https://linear.app/ceedar/issue/CYPACK-1334), [#1330](https://github.com/cyrusagents/cyrus/pull/1330))
  • Patched newly reported Cyrus CLI dependency advisories so `pnpm audit` continues to report no known vulnerabilities. ([CYPACK-1340](https://linear.app/ceedar/issue/CYPACK-1340), [#1335](https://github.com/cyrusagents/cyrus/pull/1335))

πŸ“‹ Changed

  • Tightened the self-reported failure-mode instructions so agents keep reporting true user-visible failures and repeated stuck loops, but avoid filing failure-mode tickets for normal review iteration, brainstorming, first-pass clarification, or probe/no-op messages. ([PRO-116](https://linear.app/ceedar/issue/PRO-116), [#1329](https://github.com/cyrusagents/cyrus/pull/1329))

πŸ› Fixed

  • Repository setup and teardown hooks are now discovered from the issue worktree instead of the persistent checkout Cyrus uses to create worktrees. If a branch adds or updates `cyrus-setup.sh`, Cyrus now runs that exact version for the task, so dependency installs, environment bootstrap, generated config, and other repo-specific preparation no longer get skipped or run from an older checkout. Teardown cleanup likewise uses the `cyrus-teardown.sh` committed with the worktree being removed. ([CYPACK-1337](https://linear.app/ceedar/issue/CYPACK-1337), [#1332](https://github.com/cyrusagents/cyrus/pull/1332))
  • Linear agent sessions now show when a repository `cyrus-setup.sh` starts, succeeds, or fails before Cyrus begins working. Failures include duration, exit status, and a short redacted stdout/stderr tail so users can diagnose setup issues without exposing local paths, environment values, or secrets. ([CYPACK-1338](https://linear.app/ceedar/issue/CYPACK-1338), [#1333](https://github.com/cyrusagents/cyrus/pull/1333))

πŸ“¦ Packages

  • cyrus-cloudflare-tunnel-client@0.2.66
  • cyrus-mcp-tools@0.2.66
  • cyrus-claude-runner@0.2.66
  • cyrus-core@0.2.66
  • cyrus-simple-agent-runner@0.2.66
  • cyrus-codex-runner@0.2.66
  • cyrus-cursor-runner@0.2.66
  • cyrus-config-updater@0.2.66
  • + 7 more
v0.2.65
cyrusagentcyrusagentΒ·1w agoΒ·June 12, 2026
GitHub

πŸ› Fixed

  • Sessions that schedule a wakeup or background task no longer falsely report "Finished" with raw tool JSON, and the scheduled work actually runs. Previously, ending a turn on a `ScheduleWakeup` (or background `Bash`) call shut the Claude subprocess down β€” silently dropping the timer so the session never resumed β€” and posted a "Finished" Linear activity whose body was the raw tool-input JSON. Now Cyrus keeps the session alive while a wakeup, session cron, or background task is in flight (so it fires), posts a readable "⏰ Wakeup scheduled" response instead of JSON, and adds a "⏳ Standing by" thought listing what the session is waiting on β€” returning the Linear agent panel to its working state. Sessions with nothing pending still shut down at turn end to free memory. ([CYPACK-1310](https://linear.app/ceedar/issue/CYPACK-1310), [CYPACK-1177](https://linear.app/ceedar/issue/CYPACK-1177), [CYHOST-905](https://linear.app/ceedar/issue/CYHOST-905), [#1313](https://github.com/cyrusagents/cyrus/pull/1313))
  • The final "response" activity is never raw tool-input JSON. When a turn ends on a tool call with no trailing assistant text, Cyrus now uses the model's result text or skips the response entirely rather than dumping the last tool's input JSON into the Linear timeline. ([CYPACK-1177](https://linear.app/ceedar/issue/CYPACK-1177), [#1313](https://github.com/cyrusagents/cyrus/pull/1313))

πŸ“¦ Packages

  • cyrus-cloudflare-tunnel-client@0.2.65
  • cyrus-mcp-tools@0.2.65
  • cyrus-claude-runner@0.2.65
  • cyrus-core@0.2.65
  • cyrus-simple-agent-runner@0.2.65
  • cyrus-codex-runner@0.2.65
  • cyrus-cursor-runner@0.2.65
  • cyrus-config-updater@0.2.65
  • + 7 more
v0.2.64
cyrusagentcyrusagentΒ·1w agoΒ·June 11, 2026
GitHub

πŸ› Fixed

  • Slack/chat follow-up messages sent while the agent is mid-task are no longer dropped. Previously a quick second message got "I'm still working on the previous request… I'll pick up your new message once I'm done" and was then silently ignored; it's now queued and delivered as a new turn once the current one finishes (and, with the Codex app-server backend, woven into the active turn). Codex chat threads also now correctly continue the same session on follow-ups instead of starting fresh each time. ([CYPACK-1288](https://linear.app/ceedar/issue/CYPACK-1288), [#1293](https://github.com/cyrusagents/cyrus/pull/1293))
  • Codex sessions now translate Cyrus MCP allow-list entries into Codex MCP tool filters and approvals, so `mcp__server__tool` permissions restrict Codex sessions to the configured tools without requiring interactive approval. ([CYPACK-1288](https://linear.app/ceedar/issue/CYPACK-1288), [#1293](https://github.com/cyrusagents/cyrus/pull/1293))
  • Codex sessions now load Cyrus-hosted custom MCP configs with Codex-specific MCP options preserved, so configured MCP servers are available when using the Codex runner. ([CYPACK-1286](https://linear.app/ceedar/issue/CYPACK-1286), [#1293](https://github.com/cyrusagents/cyrus/pull/1293))
  • Codex issue and chat sessions can now use Cyrus-managed custom skills synced from the hosted app. Scoped managed skills are symlinked into Codex's native repository skill discovery path for each session and cleaned up afterward. ([CYPACK-1287](https://linear.app/ceedar/issue/CYPACK-1287/make-our-managed-skills-available-to-the-codex-runner), [#1293](https://github.com/cyrusagents/cyrus/pull/1293))

✨ Added

  • Codex sessions now honor the configured filesystem sandbox when the egress sandbox is enabled: each session runs under a per-thread Codex permission profile that confines writes to the worktree and restricts reads to the worktree plus allowed directories (home and the rest of the filesystem are denied), matching the Claude runner's posture. Without sandbox enabled, behavior is unchanged. ([CYPACK-1288](https://linear.app/ceedar/issue/CYPACK-1288), [#1293](https://github.com/cyrusagents/cyrus/pull/1293))
  • Codex now runs on the `codex app-server` backend, so it can respond to comments added while it's mid-task without throwing away its in-progress work: a follow-up comment is woven into Codex's current turn (rather than aborting and restarting it), matching how the Claude runner handles mid-task comments. This applies to Linear issues and Slack/chat threads alike. ([CYPACK-1288](https://linear.app/ceedar/issue/CYPACK-1288), [#1293](https://github.com/cyrusagents/cyrus/pull/1293))

πŸ“‹ Changed

  • Updated `@anthropic-ai/claude-agent-sdk` to `0.3.173` (parity with Claude Code v2.1.173; includes `skipMcpDiscovery` plugin option and fix for slash-followed-by-whitespace prompts). ([CYPACK-1306](https://linear.app/ceedar/issue/CYPACK-1306), [#1312](https://github.com/cyrusagents/cyrus/pull/1312))
  • Updated `@anthropic-ai/sdk` to `0.104.1` (latest), keeping Claude sessions on current Anthropic API capabilities. ([CYPACK-1303](https://linear.app/ceedar/issue/CYPACK-1303), [#1308](https://github.com/cyrusagents/cyrus/pull/1308))

πŸ“¦ Packages

  • cyrus-cloudflare-tunnel-client@0.2.64
  • cyrus-mcp-tools@0.2.64
  • cyrus-claude-runner@0.2.64
  • cyrus-core@0.2.64
  • cyrus-simple-agent-runner@0.2.64
  • cyrus-codex-runner@0.2.64
  • cyrus-cursor-runner@0.2.64
  • cyrus-config-updater@0.2.64
  • + 7 more
v0.2.63
cyrusagentcyrusagentΒ·1w agoΒ·June 9, 2026
GitHub

✨ Added

  • Cyrus now recognizes Anthropic's new Fable model class: apply the `fable` model label or selector to run Claude sessions on `claude-fable-5`, with automatic fallback to Opus and then Sonnet when needed. ([CYPACK-1298](https://linear.app/ceedar/issue/CYPACK-1298), [#1302](https://github.com/cyrusagents/cyrus/pull/1302))

πŸ”’ Security

  • Patched Hono dependency advisories reported by Dependabot so `pnpm audit` is clean for the Cyrus CLI workspace. ([CYPACK-1290](https://linear.app/ceedar/issue/CYPACK-1290), [#1295](https://github.com/cyrusagents/cyrus/pull/1295))

πŸ“‹ Changed

  • Codex sessions now default to `gpt-5.5`, and Linear model labels such as `gpt-5.5` are recognized as Codex model overrides alongside the existing `*-codex` labels. ([CYPACK-1282](https://linear.app/ceedar/issue/CYPACK-1282), [#1288](https://github.com/cyrusagents/cyrus/pull/1288))

πŸ› Fixed

  • Git commands (`add`, `commit`, `merge`, etc.) no longer fail with "Operation not permitted" in multi-repo workspaces when running under a sandboxed agent (e.g. the Codex runner). Each repository's git metadata directory is now granted write access, not just the workspace container. ([#1287](https://github.com/cyrusagents/cyrus/pull/1287))

πŸ“¦ Packages

  • cyrus-cloudflare-tunnel-client@0.2.63
  • cyrus-mcp-tools@0.2.63
  • cyrus-claude-runner@0.2.63
  • cyrus-core@0.2.63
  • cyrus-simple-agent-runner@0.2.63
  • cyrus-codex-runner@0.2.63
  • cyrus-cursor-runner@0.2.63
  • cyrus-config-updater@0.2.63
  • + 7 more
v0.2.62
cyrusagentcyrusagentΒ·2w agoΒ·June 2, 2026
GitHub

✨ Added

  • On Cyrus-managed cloud runtimes, the agent now knows that missing system packages should be added via the dashboard: when the `CYRUS_CLOUD_RUNTIME` environment variable is set to `true`, a system-prompt addendum tells the agent to direct users to https://app.atcyrus.com/settings/packages to install missing `apt`/`npm` packages rather than installing them ad-hoc (off by default for self-host). ([CYPACK-1266](https://linear.app/ceedar/issue/CYPACK-1266), [#1272](https://github.com/cyrusagents/cyrus/pull/1272))
v0.2.61
cyrusagentcyrusagentΒ·2w agoΒ·June 1, 2026
GitHub

πŸ”’ Security

  • Bumped `qs` to >=6.15.2 to address a remotely triggerable DoS (`qs.stringify` crash on null/undefined entries in comma-format arrays when `encodeValuesOnly` is set), pulled in transitively via `express`. ([CYPACK-1269](https://linear.app/ceedar/issue/CYPACK-1269), [#1274](https://github.com/ceedaragents/cyrus/pull/1274))

πŸ“‹ Changed

  • Updated `@anthropic-ai/claude-agent-sdk` from 0.3.158 to 0.3.159. Tool list is unchanged (33 tools). See the [SDK changelog](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) for details. ([CYPACK-1271](https://linear.app/ceedar/issue/CYPACK-1271), [#1277](https://github.com/cyrusagents/cyrus/pull/1277))
  • Updated `@anthropic-ai/claude-agent-sdk` from 0.3.156 to 0.3.158. Tool list is unchanged (33 tools). See the [SDK changelog](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) for details. ([CYPACK-1268](https://linear.app/ceedar/issue/CYPACK-1268), [#1275](https://github.com/cyrusagents/cyrus/pull/1275))
  • Updated `@anthropic-ai/claude-agent-sdk` from 0.3.154 to 0.3.156 and `@anthropic-ai/sdk` from 0.100.0 to 0.100.1. See the [SDK changelog](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) for details. ([CYPACK-1265](https://linear.app/ceedar/issue/CYPACK-1265), [#1270](https://github.com/cyrusagents/cyrus/pull/1270))

✨ Added

  • New "PR review trigger" control: when disabled, a pull request review that requests changes on a Cyrus-opened PR no longer auto-starts a Cyrus session or posts an acknowledgement comment. Enabled by default, so existing behaviour is unchanged unless you turn it off. ([CYPACK-1273](https://linear.app/ceedar/issue/CYPACK-1273), [#1278](https://github.com/cyrusagents/cyrus/pull/1278))
  • A repository can now ship its own skills: any skill directories under `<repo>/.claude/skills/` are automatically discovered and made available to the agent whenever Cyrus works in that repo β€” for single-repo issues, multi-repo issues (skills from every participating repo are combined), and GitHub/GitLab mentions alike. ([CYPACK-1261](https://linear.app/ceedar/issue/CYPACK-1261), [#1268](https://github.com/cyrusagents/cyrus/pull/1268))
v0.2.60
cyrusagentcyrusagentΒ·3w agoΒ·May 28, 2026
GitHub

✨ Added

  • Optional browser-use system prompt addendum that tells the agent it has access to the `agent-browser` CLI and a local Chromium for screenshots and browser automation. Enabled by setting the `CYRUS_BROWSER_USE_ENABLED` environment variable to `true` (off by default for self-host). ([CYHOST-991](https://linear.app/ceedar/issue/CYHOST-991), [#1257](https://github.com/cyrusagents/cyrus/pull/1257))
v0.2.59
cyrusagentcyrusagentΒ·3w agoΒ·May 28, 2026
GitHub

✨ Added

  • When a GitHub webhook arrives from a repo Cyrus has no configuration for, and the event is an @-mention or a `pull_request_review` requesting changes, Cyrus now posts a one-time reply on the pull request explaining the failure and citing likely causes (org rename/transfer, typo in the configured GitHub URL, or App installed on an unconfigured repo). Previously the webhook was silently dropped with only a server-side warning log. ([#1265](https://github.com/cyrusagents/cyrus/pull/1265))
  • GitHub App manifest in the `cyrus-setup-github` skill now subscribes to `repository` and `organization` webhook events so future renames, transfers, and org renames can be reconciled automatically. ([#1265](https://github.com/cyrusagents/cyrus/pull/1265))

πŸ“‹ Changed

  • OPUS 4.8 SUPPORT. Updated `@anthropic-ai/claude-agent-sdk` from `0.2.123` to `0.3.154` and `@anthropic-ai/sdk` from `^0.91.x` to `^0.100.0`. ([CYPACK-1257](https://linear.app/ceedar/issue/CYPACK-1257), [#1264](https://github.com/cyrusagents/cyrus/pull/1264))
  • Refreshed mandatory tool allowance list per SDK v0.3.154: removed deprecated `RemoteTrigger` tool, added new `Workflow` tool. ([CYPACK-1257](https://linear.app/ceedar/issue/CYPACK-1257), [#1264](https://github.com/cyrusagents/cyrus/pull/1264))
v0.2.58
cyrusagentcyrusagentΒ·3w agoΒ·May 27, 2026
GitHub

✨ Added

  • Per-repo `cyrus-teardown.sh` auto-detection β€” Place a `cyrus-teardown.sh` (or `.ps1` / `.cmd` / `.bat`) script in your repository root and Cyrus runs it inside the issue's worktree directory immediately before the worktree is removed when the Linear issue is completed, canceled, or deleted. Symmetric to the existing `cyrus-setup.sh` mechanism β€” no configuration needed, just commit the script. In multi-repo issues each repo's teardown runs independently with `cwd` set to that repo's worktree subdirectory; failures in one repo do not block other repos' teardowns or worktree removal. The script gets `LINEAR_ISSUE_IDENTIFIER` in env, a 2-minute timeout, and is non-blocking on failure. Closes upstream [cyrusagents/cyrus#1065](https://github.com/cyrusagents/cyrus/issues/1065); credit to @matthewbjones for the original direction in [#1111](https://github.com/cyrusagents/cyrus/pull/1111). ([CYPACK-1219](https://linear.app/ceedar/issue/CYPACK-1219), [#1233](https://github.com/cyrusagents/cyrus/pull/1233))
v0.2.57
cyrusagentcyrusagentΒ·4w agoΒ·May 23, 2026
GitHub

πŸ› Fixed

  • Pinned the Slack MCP server to v1.2.3. v1.3.0 of `slack-mcp-server` requires additional Slack OAuth scopes; pinning avoids breaking existing Slack installations that haven't re-authorized. ([CYPACK-1239](https://linear.app/ceedar/issue/CYPACK-1239), [#1247](https://github.com/cyrusagents/cyrus/pull/1247))
v0.2.56
cyrusagentcyrusagentΒ·4w agoΒ·May 22, 2026
GitHub

πŸ› Fixed

  • `slackAllowedTools`, `githubAllowedTools`, `linearAllowedTools`, and the `*McpConfigs` arrays from `~/.cyrus/config.json` are now applied at cold start. Previously these fields were only picked up after a post-start config-file change, so the very first session after restart silently fell back to the built-in defaults. ([CYPACK-1236](https://linear.app/ceedar/issue/CYPACK-1236), [#1245](https://github.com/cyrusagents/cyrus/pull/1245))

πŸ“‹ Changed

  • The `ALLOWED_TOOLS` environment variable has been renamed to `LINEAR_ALLOWED_TOOLS` to match the per-channel naming used elsewhere (`slackAllowedTools`, `githubAllowedTools`). If you were setting `ALLOWED_TOOLS` to override Linear's tool allowlist, rename it to `LINEAR_ALLOWED_TOOLS`. ([CYPACK-1236](https://linear.app/ceedar/issue/CYPACK-1236), [#1245](https://github.com/cyrusagents/cyrus/pull/1245))

πŸ—‘οΈ Removed

  • Claude-in-Chrome browser integration is no longer enabled for agent sessions. Cyrus previously passed `--chrome` to every Claude runner session, which registered the `mcp__claude-in-chrome__*` MCP tools. In cloud-runtime sessions there is no path from the worker to the user's local Chrome extension, so those tools always failed with "Browser extension is not connected" β€” leading agents to loop on a misdiagnosis instead of falling back. The flag and the associated screenshot/GIF upload-guidance hooks have been removed. ([PRO-9](https://linear.app/ceedar/issue/PRO-9/failed-chrome-extension-not-connecting-oswaldo-okeefe), [#1244](https://github.com/cyrusagents/cyrus/pull/1244))
v0.2.55
cyrusagentcyrusagentΒ·4w agoΒ·May 22, 2026
GitHub

πŸ› Fixed

  • `~/`-prefixed paths in `slackMcpConfigs`, `linearMcpConfigs`, and `githubMcpConfigs` are now expanded. When cyrus-hosted writes platform MCP config paths for a self-host runtime, it emits `~/.cyrus/mcp-configs/...` strings that were passed verbatim to `fs.readFileSync`, which does not expand tildes β€” Claude sessions would crash with `ENOENT: ~/.cyrus/mcp-configs/mcp-supabase.json`. EdgeWorker now runs the three platform MCP config arrays through `resolvePath` at construction and on config hot-reload, mirroring how repository-scoped paths have always been normalized. ([#1242](https://github.com/cyrusagents/cyrus/pull/1242))
v0.2.54
cyrusagentcyrusagentΒ·4w agoΒ·May 22, 2026
GitHub

πŸ› Fixed

  • `log_failure_mode` MCP tool now registers when only `CYRUS_API_KEY` is set. EdgeWorker previously required both `CYRUS_API_KEY` and `CYRUS_APP_URL` env vars to wire up the self-reported-failure-mode tool, so workspaces that hadn't overridden `CYRUS_APP_URL` silently shipped the failure-mode prompt addendum without a corresponding tool. The URL now falls back to the canonical default (`https://app.atcyrus.com`) via the shared `getCyrusAppUrl()` helper, matching the remote session store. ([CYPACK-1232](https://linear.app/ceedar/issue/CYPACK-1232), [#1240](https://github.com/cyrusagents/cyrus/pull/1240))
v0.2.53
cyrusagentcyrusagentΒ·4w agoΒ·May 22, 2026
GitHub

✨ Added

  • Per-platform allowed tools β€” explicit defaults exported from `cyrus-core` β€” `cyrus-core` now exports three canonical lists (`LINEAR_DEFAULT_ALLOWED_TOOLS`, `SLACK_DEFAULT_ALLOWED_TOOLS`, `GITHUB_DEFAULT_ALLOWED_TOOLS`) plus a `getDefaultAllowedTools(platform)` resolver. Each list is completely explicit β€” workspace MCP prefixes (`mcp__linear`, `mcp__cyrus-tools`, `mcp__cyrus-docs`, and for Slack `mcp__slack`) are members of the list, not implicitly appended at runtime. cyrus-hosted imports the same constants so the source of truth lives in one place. ([CYHOST-967](https://linear.app/ceedar/issue/CYHOST-967))
  • `EdgeConfig` accepts `slackAllowedTools` and `githubAllowedTools` β€” two optional top-level keys for team-level platform overrides. When unset, the resolver falls back to the matching cyrus-core default. ([CYHOST-967](https://linear.app/ceedar/issue/CYHOST-967))
  • `EdgeConfig` accepts `slackMcpConfigs`, `linearMcpConfigs`, `githubMcpConfigs` β€” three optional arrays of filesystem paths to custom-integration `.mcp.json` files, one per surface. Slack chat sessions load the files in `slackMcpConfigs` directly (chat is repo-agnostic, no `repository.mcpConfigPath` lookup). Linear- and GitHub/GitLab-triggered issue sessions use the per-platform list only when the routed repo does NOT have its own `allowedTools` override; if the repo has its own allow-list, the agent uses `repository.mcpConfigPath` instead so the repo's permission rules and its server set always come from the same scope. Native MCP servers (Linear, Cyrus tools, Cyrus docs, and Slack when `SLACK_BOT_TOKEN` is set) are still spun up inline by the runtime β€” these lists govern custom integrations only. ([CYHOST-967](https://linear.app/ceedar/issue/CYHOST-967))

πŸ“‹ Changed

  • Claude sessions now run with `strictMcpConfig: true`. Per Claude Code's `--strict-mcp-config` semantics, the SDK now only uses MCP servers explicitly passed via `mcpConfig` / `mcpServers` β€” it will not silently pick up servers from the user's `~/.claude.json`, project `.mcp.json`, or any other ambient configuration. Closes a gap where unrelated MCP servers on the host could bleed into a session and grant tools the agent shouldn't have. ([CYHOST-967](https://linear.app/ceedar/issue/CYHOST-967))
  • `ToolPermissionResolver` is now additive-only β€” no implicit MCP appending, no `SLACK_BOT_TOKEN`-conditional injection. Previously `buildAllowedTools` and `buildChatAllowedTools` appended `mcp__linear`, `mcp__cyrus-tools`, `mcp__cyrus-docs` (and conditionally `mcp__slack` when `SLACK_BOT_TOKEN` was set in the process env) to every returned list. Now the explicit per-platform defaults include those prefixes verbatim, the resolver returns lists as-is, and `getWorkspaceMcpTools()` is removed. The `"readOnly"` preset now resolves to `SLACK_DEFAULT_ALLOWED_TOOLS` (the curated read-only set) instead of the bare `getReadOnlyTools()` list. ([CYHOST-967](https://linear.app/ceedar/issue/CYHOST-967))
  • GitHub- and GitLab-triggered sessions now go through `buildGithubAllowedTools`. EdgeWorker previously called `buildAllowedTools(repository).filter(t => t !== "mcp__slack")` β€” a subtractive hack to strip the auto-appended Slack MCP prefix. With explicit defaults the filter is unnecessary, and routing through `buildGithubAllowedTools` means the team's `githubAllowedTools` override actually takes effect. ([CYHOST-967](https://linear.app/ceedar/issue/CYHOST-967))
  • Slack chat sessions no longer pull the "first repo's" `mcpConfigPath`. Chat sessions are repo-agnostic at the session level, so the prior fallback that loaded whichever repo happened to be configured first into the chat session's MCP set is gone. Slack now loads exactly the files in `slackMcpConfigs` (which cyrus-hosted derives from the team's Slack allowed-tools array); native MCP servers continue to run inline. ([CYHOST-967](https://linear.app/ceedar/issue/CYHOST-967))
  • `EdgeConfig.defaultAllowedTools` renamed to `linearAllowedTools`. Reflects what it actually controls (Linear-triggered sessions specifically, not a global default). The legacy field is still accepted on parse and migrated forward so older self-host configs keep working. ([CYHOST-967](https://linear.app/ceedar/issue/CYHOST-967))
  • Self-reported failure modes. Every customer-facing agent session now has access to a new `mcp__cyrus-tools__log_failure_mode` MCP tool and is instructed (via a shared system-prompt addendum appended to all Linear prompt flavors, the Slack entrypoint, and the GitHub entrypoint) to call it when the user expresses dissatisfaction or when it recognizes it has made 3+ unsuccessful attempts at the same problem. The tool POSTs to cyrus-hosted, which opens (or comments on) a Linear ticket in the internal failure-modes project so the Cyrus team can intervene before churn. Self-reporting is internal β€” users are not told about it. ([CYPACK-1226](https://linear.app/ceedar/issue/CYPACK-1226))

πŸ› Fixed

  • `slackAllowedTools`, `githubAllowedTools`, and the per-platform MCP config keys (`slackMcpConfigs`, `linearMcpConfigs`, `githubMcpConfigs`) are now honored after config hot-reload. `ConfigManager.loadConfigSafely()` previously merged a hardcoded whitelist of fields from the parsed `config.json` and silently dropped every per-platform allow-list / MCP config key, so Slack and GitHub sessions kept resolving to the cyrus-core defaults even when the workspace had a tighter override on disk. The merge and the change-detection list now include all six platform keys. ([CYHOST-967](https://linear.app/ceedar/issue/CYHOST-967))
  • Self-Managed GitLab MR replies β€” `EdgeWorker` was instantiating `GitLabCommentService` with no `apiBaseUrl`, so every MR-reply request on a Self-Managed instance hit `gitlab.com` and 404'd. The base URL is now derived from the URL origin of the first configured repo with a `gitlabUrl`, so MR replies post against the correct host. Thanks [@tenforty](https://github.com/tenfourty) ([#1191](https://github.com/cyrusagents/cyrus/pull/1191))
  • Stop hook no longer blocks sessions for pre-existing untracked files β€” Replaces the previous unconditional first-stop block (CYPACK-1204) with a more targeted git-aware guardrail. Cyrus now scopes the end-of-session check to tracked changes and unpushed commits, ignoring stray untracked files (local scratch files, env files, IDE artifacts) outside `.gitignore`. New files Cyrus creates via Write/Edit are still flagged via `git add --intent-to-add` if left uncommitted, so the "forgot to ship new work" check is preserved. ([CYPACK-1196](https://linear.app/ceedar/issue/CYPACK-1196), [#1204](https://github.com/cyrusagents/cyrus/pull/1204))

πŸ”’ Security

  • Patched 4 transitive dependency advisories β€” Bumped `pnpm.overrides` for `brace-expansion` (β‰₯5.0.6, DoS via large numeric ranges defeating `max` protection), `ws` (β‰₯8.20.1, uninitialized memory disclosure on `close()` with `TypedArray` reason), `protobufjs` (β‰₯7.5.8, DoS via unbounded recursive JSON descriptor expansion), and `uuid` (β‰₯11.1.1, missing buffer bounds check in `v3`/`v5`/`v6`). `pnpm audit` now reports zero advisories. ([CYPACK-1230](https://linear.app/ceedar/issue/CYPACK-1230), [#1238](https://github.com/cyrusagents/cyrus/pull/1238))
  • Patched 9 transitive dependency advisories β€” Bumped `pnpm.overrides` for `hono` (β‰₯4.12.18, fixes CSS injection / JWT validation / Cache Middleware cross-user leakage), `fast-uri` (β‰₯3.1.2, path traversal + host confusion), `ip-address` (β‰₯10.1.1, `Address6` XSS), `@anthropic-ai/sdk` (β‰₯0.91.1, insecure default file permissions in local filesystem memory tool), and `@opentelemetry/sdk-node` / `@opentelemetry/exporter-prometheus` (β‰₯0.217.0, Prometheus exporter process crash via malformed HTTP request). `pnpm audit` now reports zero advisories. ([CYPACK-1206](https://linear.app/ceedar/issue/CYPACK-1206))

πŸ“¦ Packages

  • cyrus-cloudflare-tunnel-client@0.2.53
  • cyrus-mcp-tools@0.2.53
  • cyrus-claude-runner@0.2.53
  • cyrus-core@0.2.53
  • cyrus-simple-agent-runner@0.2.53
  • cyrus-codex-runner@0.2.53
  • cyrus-cursor-runner@0.2.53
  • cyrus-config-updater@0.2.53
  • + 7 more
v0.2.52
cyrusagentcyrusagentΒ·1mo agoΒ·May 13, 2026
GitHub

✨ Added

  • User skills can now be scoped to specific repositories, Linear teams, or Linear labels β€” Skills synced from cyrus-hosted with `repositoryIds`, `linearTeamIds`, or `linearLabelIds` are only loaded into sessions whose context matches every populated dimension (AND across dimensions, OR within each list). Unscoped skills continue to load for every session, and old payloads without scope fields keep working as global. Scope is persisted as a `scope.json` sidecar alongside `SKILL.md` and enforced at runtime via the Claude Agent SDK's `skills` option so the model can't see or invoke out-of-scope skills. ([CYPACK-1156](https://linear.app/ceedar/issue/CYPACK-1156), [#1205](https://github.com/cyrusagents/cyrus/pull/1205))
  • Shared auto-memory across Slack chat sessions β€” Slack-triggered chat sessions now share a persistent Claude auto-memory directory at `<cyrusHome>/slack-memory/`, so memory built up in one Slack thread carries over to every other Slack thread. ([CYPACK-1190](https://linear.app/ceedar/issue/CYPACK-1190), [#1199](https://github.com/cyrusagents/cyrus/pull/1199))

πŸ› Fixed

  • Slack chat sessions can now read and edit their shared auto-memory β€” The shared auto-memory directory (`<cyrusHome>/slack-memory/`) is now included in `allowedDirectories` for chat sessions. ([CYPACK-1197](https://linear.app/ceedar/issue/CYPACK-1197), [#1206](https://github.com/cyrusagents/cyrus/pull/1206))

πŸ“‹ Changed

  • Slack mention prompt nudges agents toward `linear_agent_give_feedback` for live child sessions β€” When responding in Slack, Cyrus is now told to send mid-flight corrections to a running child agent session via `mcp__cyrus-tools__linear_agent_give_feedback` instead of falling back to `mcp__linear__save_comment`. ([CYPACK-1189](https://linear.app/ceedar/issue/CYPACK-1189), [#1198](https://github.com/cyrusagents/cyrus/pull/1198))
v0.2.51
cyrusagentcyrusagentΒ·1mo agoΒ·April 30, 2026
GitHub

πŸ“‹ Changed

  • Updated `@anthropic-ai/claude-agent-sdk` to v0.2.123 and `@anthropic-ai/sdk` to `^0.91.0` β€” Bumps the bundled Claude Code binary to v2.1.123 and the Anthropic TypeScript SDK to `^0.91.0`. This resolves a session-breaking bug where, after a parallel `Bash` tool call was cancelled following a non-zero exit on a sibling call, every subsequent `Bash` invocation in the same session would fail with `/bin/bash: line 4: /proc/self/fd/3: Permission denied` (exit 126) until the session was restarted. Other tools (`Read`, `Edit`, `Glob`, `Grep`, MCP) were unaffected. Also removes `LSP` from the `availableTools` list in `config.ts` β€” `LSP` is no longer shipped in Claude Code SDK v0.2.123. See [SDK changelog](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) for details. ([CYPACK-1152](https://linear.app/ceedar/issue/CYPACK-1152), [#1172](https://github.com/cyrusagents/cyrus/pull/1172))

πŸ“¦ Packages

  • cyrus-cloudflare-tunnel-client@0.2.51
  • cyrus-mcp-tools@0.2.51
  • cyrus-claude-runner@0.2.51
  • cyrus-core@0.2.51
  • cyrus-simple-agent-runner@0.2.51
  • cyrus-codex-runner@0.2.51
  • cyrus-cursor-runner@0.2.51
  • cyrus-config-updater@0.2.51
  • + 7 more
v0.2.50
cyrusagentcyrusagentΒ·1mo agoΒ·April 30, 2026
GitHub

✨ Added

  • Cyrus-authored PRs and MRs are now reliably tagged β€” After every `gh pr create`/`gh pr edit`, `glab mr create`/`glab mr update`/`glab mr edit`, or `gt submit` command, Cyrus automatically appends a hidden `<!-- generated-by-cyrus -->` marker to the live PR/MR description if it isn't already there. This ensures the GitHub/GitLab webhook handlers can recognize Cyrus-authored PRs (so "Changes requested" events get forwarded back) even when the agent forgets to include the marker in the body it submits. ([CYPACK-1141](https://linear.app/ceedar/issue/CYPACK-1141), [#1162](https://github.com/cyrusagents/cyrus/pull/1162))
  • PR guardrail when sessions try to stop with unshipped work β€” When the agent attempts to end a session, Cyrus now inspects the worktree and blocks the first stop attempt if there are uncommitted changes or commits ahead of the upstream branch, prompting the agent to commit, push, and open a pull request. Sessions with no code changes (e.g. questions, research) stop normally. ([CYPACK-1140](https://linear.app/ceedar/issue/CYPACK-1140), [#1161](https://github.com/cyrusagents/cyrus/pull/1161))
  • Remote Claude session transcripts β€” When `CYRUS_APP_URL`, `CYRUS_API_KEY`, and `CYRUS_TEAM_ID` are all set, Cyrus now mirrors every Claude session transcript to the hosted Cyrus control plane (in addition to the local JSONL on disk). This lets sessions be inspected or resumed from any host, even after the ephemeral worktree is torn down. The transport speaks the Claude Agent SDK's `SessionStore` contract and passes the full 13-check behavioral conformance suite from the upstream SDK. Set `CYRUS_DISABLE_REMOTE_SESSION_STORE=1` to opt out and keep transcripts local-only. ([CYPACK-1121](https://linear.app/ceedar/issue/CYPACK-1121))
  • Optional Sentry error tracking β€” When both `CYRUS_SENTRY_DSN` and `CYRUS_TEAM_ID` are set (and `CYRUS_SENTRY_DISABLED` is not), all `logger.error(...)` calls across the codebase (Claude Code/runner errors, edge-worker failures, webhook transport errors, persistence errors, uncaught exceptions, unhandled rejections) are reported to Sentry as Issues, and `WARN`/`ERROR` logs plus major lifecycle events (session started/resumed/completed/stopped, Claude session ID assigned, message emitted, webhook received, Claude query options) are forwarded to [Sentry Logs](https://docs.sentry.io/product/explore/logs/) tagged with `team_id`, `component`, and active session/issue/Claude-session identifiers β€” debug/info logs stay local to keep volume bounded. `CYRUS_TEAM_ID` is the single gate for both Issues and Logs: installs without a tenant tag stay silent. Set `CYRUS_SENTRY_DISABLED=1` to opt out entirely (also disables the bundled default DSN once it ships). Override the environment tag with `CYRUS_SENTRY_ENVIRONMENT`, sample errors with `CYRUS_SENTRY_SAMPLE_RATE` (0.0–1.0). Every event is enriched with a structured `cyrus` context block alongside `linear_workspace`/`deployment_id` if those env vars are set. The Sentry SDK's own internal debug output is gated separately on `CYRUS_SENTRY_DEBUG` to avoid flooding the terminal. Outgoing events and logs are scrubbed for token-shaped strings and sensitive keys before transmission (including breadcrumbs from console output), and grouped by a stable fingerprint so log messages with embedded IDs/paths don't fragment into one issue per occurrence. No telemetry is sent unless both env vars are present. ([CYPACK-1142](https://linear.app/ceedar/issue/CYPACK-1142))
  • New `/linear-webhook` endpoint for Linear webhooks β€” The Linear webhook URL in your OAuth application can now be set to `<CYRUS_BASE_URL>/linear-webhook`. The legacy `/webhook` path continues to work for backward compatibility but is deprecated and will log a warning on first use. ([CYPACK-1119](https://linear.app/ceedar/issue/CYPACK-1119), [#1142](https://github.com/ceedaragents/cyrus/pull/1142))
  • Base branch update notifications - When your base branch receives new commits while Cyrus is working, the active session is automatically notified to rebase, helping avoid merge conflicts. ([CYPACK-978](https://linear.app/ceedar/issue/CYPACK-978), [#1004](https://github.com/ceedaragents/cyrus/pull/1004))
  • Blocked-by dependency deferral - Issues with unresolved `blocked_by` relationships are now automatically deferred instead of starting immediately. Cyrus posts an acknowledgment and starts work automatically when all blocking issues are resolved. User re-prompts also re-check blocking status. ([CYPACK-978](https://linear.app/ceedar/issue/CYPACK-978), [#1004](https://github.com/ceedaragents/cyrus/pull/1004))

πŸ“‹ Changed

  • Bump OpenAI Codex SDK (`@openai/codex-sdk`) to v0.125.x β€” Updates the pinned Codex integration to match the current `@openai/codex` release line bundled by that SDK (`codex` CLI 0.125.0, including richer `codex exec`/`turn.completed` usage fields such as reasoning output tokens observed in streamed JSON sessions). Hosts relying on Cyrus’s pinned CLI via this dependency should behave the same aside from additive telemetry from Codex itself. ([CYPACK-1151](https://linear.app/ceedar/issue/CYPACK-1151), [#1171](https://github.com/cyrusagents/cyrus/pull/1171))
  • Cursor sessions now run via the `@cursor/sdk` TypeScript SDK instead of spawning the `cursor-agent` CLI; permission allow/deny is now enforced via `.cursor/hooks.json` rather than `.cursor/cli.json` ([CYPACK-1149](https://linear.app/ceedar/issue/CYPACK-1149)).
  • Warm Claude sessions are now opt-in β€” On startup, Cyrus no longer pre-spawns Claude Code subprocesses for the 30 most recent sessions by default. To restore the previous near-zero cold-start latency on the first message after a restart, set `CYRUS_ENABLE_WARM_SESSIONS=1` in the environment. ([CYPACK-1116](https://linear.app/ceedar/issue/CYPACK-1116))
  • Claude SDK subprocesses now exit at turn end unless warm mode is enabled β€” When `CYRUS_ENABLE_WARM_SESSIONS` is unset, the streaming prompt is completed when the SDK emits a `result` message, which lets the underlying Claude Code subprocess actually exit and free its memory at the end of a turn (restores the pre-warm-sessions behavior). When `CYRUS_ENABLE_WARM_SESSIONS=1`, the streaming prompt stays open and the subprocess is kept alive so follow-up messages reuse the warm session.

πŸ› Fixed

  • Patched 6 high-severity `tar` advisories pulled in by the new `@cursor/sdk` integration β€” The `@cursor/sdk` β†’ `sqlite3` β†’ `tar@6.2.1` chain introduced in CYPACK-1149 was flagged by Dependabot for six path-traversal/hardlink/symlink advisories (CVE-2026-24842, CVE-2026-23745, CVE-2026-26960, CVE-2026-29786, CVE-2026-31802, and a related race condition). A root `pnpm.overrides` entry now pins `tar` to `>=7.5.11` for all transitive consumers; `sqlite3`'s install script and the rest of the dep graph still resolve cleanly. ([CYPACK-1159](https://linear.app/ceedar/issue/CYPACK-1159))
  • Cursor sessions no longer crash with "Could not locate the bindings file" for `sqlite3` β€” The `@cursor/sdk` switch in CYPACK-1149 introduced a transitive dependency on `sqlite3@5.1.7`, whose native `node_sqlite3.node` binding is fetched/built by an `install` lifecycle script. pnpm 10 blocks dependency lifecycle scripts by default, so fresh installs ended up with sqlite3 present but no native binding, and the first Cursor session on a clean `pnpm install` crashed at runtime. `sqlite3` is now in `pnpm.onlyBuiltDependencies` so its install script runs and the prebuilt binary lands on disk. ([CYPACK-1158](https://linear.app/ceedar/issue/CYPACK-1158), [#1174](https://github.com/cyrusagents/cyrus/pull/1174))
  • Stop signals no longer trigger "Request was aborted" errors on non-warm sessions β€” Previously, every stop signal called the SDK's `query.interrupt()` regardless of whether the session was warm, which surfaced an `Error: Request was aborted` from non-warm sessions. Stop signals now branch on session state: non-warm sessions are stopped immediately on the first signal, while warm sessions retain the existing two-step interrupt-then-stop UX (interrupt on first stop, full terminate on a second stop within 10s). ([CYPACK-1145](https://linear.app/ceedar/issue/CYPACK-1145), [#1165](https://github.com/ceedaragents/cyrus/pull/1165))
  • Chat-platform replies (Slack/GitHub) are now posted when warm sessions are enabled β€” Previously, `ChatSessionHandler` waited for `runner.startStreaming()` to resolve before calling the adapter's `postReply`. With `CYRUS_ENABLE_WARM_SESSIONS=1` the streaming prompt stays open across turns, so `startStreaming` never resolved and no reply was ever posted. Reply posting is now driven by `result` messages on the runner's message stream, decoupled from session termination. A FIFO queue of pending events per session ensures each turn (initial prompt, resume, or injected follow-up) is paired with its corresponding reply.
  • Improved `ToolSearch` presentation in Linear activities β€” `ToolSearch` calls now post as a regular action entry (with an expandable result) instead of a bare thought. The parameter reads like "Loading tool schemas: `TaskCreate`, `TaskUpdate`" or "Searching tools for: `+linear get_issue`", and the expanded result shows the tools that were loaded (e.g. "Loaded tools: `TaskCreate`, `TaskUpdate`"). ([CYPACK-1112](https://linear.app/ceedar/issue/CYPACK-1112), [#1134](https://github.com/ceedaragents/cyrus/pull/1134))

πŸ› Fixed

  • Fixed garbled activity labels for parallel deferred-tool calls β€” When Claude issued multiple `ToolSearch` (or other local deferred-tool) calls in quick succession, Linear sometimes displayed the result under a generic "Tool" label with a raw list of tool names (e.g. `Tool / mcp__digitalocean-droplets__droplet-create / ...`) instead of the proper `ToolSearch` action with a formatted result. Internal message processing is now serialized per session so the tool-use handler always registers before its matching tool-result is formatted. ([CYPACK-1112](https://linear.app/ceedar/issue/CYPACK-1112), [#1134](https://github.com/ceedaragents/cyrus/pull/1134))
  • Eliminated spurious blank lines in the Linear activity log β€” Empty/whitespace-only assistant turns no longer produce blank "thought" activities, which previously appeared as an extra empty line between the "Using model: ..." notification and the first real tool call. ([CYPACK-1112](https://linear.app/ceedar/issue/CYPACK-1112), [#1134](https://github.com/ceedaragents/cyrus/pull/1134))

πŸ”’ Security

  • Tightened sandbox and tool permission defaults β€” Claude sessions now run with stricter out-of-the-box restrictions: the OS-level sandbox enforces `denyRead: ["~/"]` + `allowRead: ["."]` (home directory blocked, worktree allowed) and `allowWrite` scoped to the session worktree only. On the tool permission side, `Read`, `Edit`, and `Write` are now narrowed to `Read()`, `Edit()`, and `Write()` to prevent unintended matches. Home directory files (SSH keys, credentials, etc.) are explicitly enumerated and added to `disallowedTools` at session start, working around the fact that `Read(~/)` does not match in Claude Code's permission layer. ([#1123](https://github.com/ceedaragents/cyrus/pull/1123))
  • Addressed open security advisories β€” Refreshed `pnpm-lock.yaml` so vulnerable transitive dependencies resolve to their patched versions (`protobufjs`, `path-to-regexp`, `picomatch`, `flatted`, `brace-expansion`, `yaml`, `follow-redirects`, `vite`, `hono`, `@hono/node-server`) through their existing direct-dep paths, without introducing new `pnpm.overrides` entries. ([CYPACK-1101](https://linear.app/ceedar/issue/CYPACK-1101), [#1128](https://github.com/ceedaragents/cyrus/pull/1128))

πŸ“‹ Changed

  • Updated `@anthropic-ai/claude-agent-sdk` to v0.2.117 β€” Bumps the bundled Claude Code binary from v2.1.116 to v2.1.117 (parity release with no tool-list changes). Also fixes `scripts/extract-claude-tools.sh` to work with the new native binary structure introduced in SDK v0.2.113 (now resolves the platform-specific optional dependency instead of the removed `cli.js`). See [SDK changelog](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) for details. ([CYPACK-1120](https://linear.app/ceedar/issue/CYPACK-1120), [#1143](https://github.com/ceedaragents/cyrus/pull/1143))
  • Update `@anthropic-ai/claude-agent-sdk` to v0.2.116 β€” Bumps the bundled Claude Code binary from v2.1.114 to v2.1.116 (parity releases with no tool-list changes). See [SDK changelog](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) for details. ([CYPACK-1111](https://linear.app/ceedar/issue/CYPACK-1111), [#1133](https://github.com/ceedaragents/cyrus/pull/1133))

πŸ“¦ Packages

  • cyrus-cloudflare-tunnel-client@0.2.50
  • cyrus-mcp-tools@0.2.50
  • cyrus-claude-runner@0.2.50
  • cyrus-core@0.2.50
  • cyrus-simple-agent-runner@0.2.50
  • cyrus-codex-runner@0.2.50
  • cyrus-cursor-runner@0.2.50
  • cyrus-config-updater@0.2.50
  • + 7 more
v0.2.49
cyrusagentcyrusagentΒ·1mo agoΒ·April 22, 2026
GitHub

πŸ› Fixed

  • Claude sessions inherit the parent process environment again β€” `@anthropic-ai/claude-agent-sdk` v0.2.113 reverted to no longer overlaying `process.env` onto the env passed to spawned sessions, which left Cyrus-launched Claude processes without `HOME` (and other inherited vars). That broke GPG-signed commits, `gh` CLI authentication, and any other tool that relies on a real home directory or the user's shell environment. Cyrus now spreads `process.env` explicitly when invoking the SDK so these tools work as expected. ([#1150](https://github.com/ceedaragents/cyrus/pull/1150))

πŸ“¦ Packages Published

  • cyrus-ai@0.2.49 (CLI)
  • cyrus-core@0.2.49
  • cyrus-edge-worker@0.2.49
  • cyrus-claude-runner@0.2.49
  • cyrus-simple-agent-runner@0.2.49
  • cyrus-gemini-runner@0.2.49
  • cyrus-codex-runner@0.2.49
  • cyrus-cursor-runner@0.2.49
  • + 7 more
v0.2.48
cyrusagentcyrusagentΒ·2mo agoΒ·April 20, 2026
GitHub

πŸ“‹ Changed

  • Claude Code subprocess env scrubbing is disabled β€” `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` is no longer set on Claude sessions while undesirable side effects from the Linux bubblewrap sandbox are investigated. The Linux sandbox requirements precheck (added in 0.2.46) still runs and logs guidance so it can be re-enabled quickly once the side effects are resolved. ([CYPACK-1108](https://linear.app/ceedar/issue/CYPACK-1108), [#1131](https://github.com/ceedaragents/cyrus/pull/1131))

πŸ“¦ Packages

  • cyrus-cloudflare-tunnel-client@0.2.48
  • cyrus-mcp-tools@0.2.48
  • cyrus-claude-runner@0.2.48
  • cyrus-core@0.2.48
  • cyrus-simple-agent-runner@0.2.48
  • cyrus-codex-runner@0.2.48
  • cyrus-cursor-runner@0.2.48
  • cyrus-config-updater@0.2.48
  • + 7 more
v0.2.47
cyrusagentcyrusagentΒ·2mo agoΒ·April 20, 2026
GitHub

πŸ› Fixed

  • Runtime switches no longer require restarting Cyrus β€” When `cyrus auth` rotates credentials (for example, after switching between cloud and self-host runtimes), incoming config updates from the Cyrus web app now succeed immediately instead of failing with `401 Unauthorized` until the next process restart. ([CYHOST-798](https://linear.app/ceedar/issue/CYHOST-798), [#1127](https://github.com/ceedaragents/cyrus/pull/1127))

πŸ“‹ Changed

  • Updated `@anthropic-ai/claude-agent-sdk` to v0.2.114 β€” Bumps the Claude Agent SDK to the latest version. See the [claude-agent-sdk changelog](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) for full details. ([CYPACK-1096](https://linear.app/ceedar/issue/CYPACK-1096), [#1124](https://github.com/ceedaragents/cyrus/pull/1124))
  • Updated `@anthropic-ai/claude-agent-sdk` to v0.2.112 β€” Bumps the Claude Agent SDK to the latest version. See the [claude-agent-sdk changelog](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) for full details. ([CYPACK-1093](https://linear.app/ceedar/issue/CYPACK-1093), [#1121](https://github.com/ceedaragents/cyrus/pull/1121))
v0.2.46
cyrusagentcyrusagentΒ·2mo agoΒ·April 16, 2026
GitHub

✨ Added

  • Linux sandbox requirements precheck β€” On Linux hosts, Cyrus now verifies that `socat`, `bubblewrap`, and the kernel/AppArmor configuration needed to create an unprivileged user namespace are all in place before enabling Claude Code's subprocess credential scrubbing. When a requirement is missing, the session continues but sandbox mode is left unset and resolution guidance is printed to stdout. (CYPACK-1091, #1115)

πŸ“‹ Changed

  • Claude Opus 4.7 is now available β€” SDK v0.2.111 is required to use Opus 4.7, and this update brings that support. Use `"claude-opus-4-7"` as the model ID in your Cyrus configuration to opt in. (CYPACK-1090, #1113)
  • Updated `@anthropic-ai/claude-agent-sdk` to v0.2.111 and `@anthropic-ai/sdk` to v0.90.0 β€” Refreshed both Anthropic SDK dependencies to their latest versions. Also updated tool allowance lists to match the new SDK: adds `LSP`, `ToolSearch`, and `PushNotification`. (CYPACK-1090, #1113)

πŸ› Fixed

  • Cloud runtime provisioning no longer fails on first repository β€” Fixed a race condition where the edge worker tried to initialize a new repository before Linear workspace tokens were available. (CYPACK-1089, #1112)
  • Working directory context now shows actual path β€” The `<working_directory>` in agent session prompts now correctly displays the real workspace directory. (CYPACK-1088, #1110)
  • Full Changelog: https://github.com/ceedaragents/cyrus/compare/v0.2.45...v0.2.46
v0.2.45
cyrusagentcyrusagentΒ·2mo agoΒ·April 15, 2026
GitHub

✨ Added

  • Customizable repos directory β€” Set `CYRUS_REPOS_DIR` to control where Cyrus clones repositories (CYPACK-1081)
  • Network egress sandboxing β€” Agent sessions can now route all network traffic through a local egress proxy (CYPACK-1066)
  • `"trusted"` network policy preset β€” Pre-populate the sandbox allow list with ~200 domains (CYPACK-1066)

πŸ“‹ Changed

  • Refreshed Claude Code tool allowance lists β€” Updated to match latest SDK tool set (CYPACK-1067)
  • Agent subprocess credential scrubbing β€” SDK strips auth credentials from Bash subprocesses (CYPACK-1066)
  • Webhook IP provenance validation β€” Validates webhooks against provider IP ranges (CYPACK-1056)

πŸ› Fixed

  • Changelog updates no longer create duplicate entries (CYPACK-1063)
  • Agent sessions no longer fail with "executable not found" in pnpm monorepos (CYPACK-1066)
v0.2.44
cyrusagentcyrusagentΒ·2mo agoΒ·April 10, 2026
GitHub

πŸ› Fixed

  • Repository `.env` variables are now scoped per-session β€” Previously, `.env` files were loaded into the EdgeWorker's `process.env`, causing environment poisoning across sessions and repositories. Variables are now parsed into an isolated object and merged only into the child subprocess env, so updated or removed values take effect immediately and one repo's `.env` cannot leak into another. ([CYPACK-1059](https://linear.app/ceedar/issue/CYPACK-1059), [#1086](https://github.com/ceedaragents/cyrus/pull/1086))
  • PR/MR interaction tips now correctly reference `@cyrusagent` β€” Previously, when `GITHUB_BOT_USERNAME` or `GITLAB_BOT_USERNAME` environment variables were not set, PR/MR descriptions could show an incorrect bot username. The system now defaults to `cyrusagent`. ([CYPACK-1054](https://linear.app/ceedar/issue/CYPACK-1054), [#1082](https://github.com/ceedaragents/cyrus/pull/1082))
v0.2.43
cyrusagentcyrusagentΒ·2mo agoΒ·April 8, 2026
GitHub

πŸ› Fixed

  • Slack chat sessions now see repositories added or removed at runtime β€” Previously, Slack sessions used a stale snapshot of configured repositories from boot time, causing Cyrus to report missing access to repos that were actually configured. New sessions now always reflect the current repository configuration. ([CYPACK-1051](https://linear.app/ceedar/issue/CYPACK-1051), [#1078](https://github.com/ceedaragents/cyrus/pull/1078))

πŸ“¦ Packages

  • cyrus-cloudflare-tunnel-client@0.2.43
  • cyrus-mcp-tools@0.2.43
  • cyrus-claude-runner@0.2.43
  • cyrus-core@0.2.43
  • cyrus-simple-agent-runner@0.2.43
  • cyrus-codex-runner@0.2.43
  • cyrus-cursor-runner@0.2.43
  • cyrus-config-updater@0.2.43
  • + 7 more
v0.2.42
cyrusagentcyrusagentΒ·2mo agoΒ·April 6, 2026
GitHub

πŸ› Fixed

  • Bundled skills now resolve correctly for npm installs - Skills shipped with the CLI were not found when installed via npm because symlinks were stripped during publishing. Skills are now resolved from the correct compiled path. ([CYPACK-1046](https://linear.app/ceedar/issue/CYPACK-1046), [#1073](https://github.com/ceedaragents/cyrus/pull/1073))
v0.2.41
cyrusagentcyrusagentΒ·2mo agoΒ·April 6, 2026
GitHub

πŸ“‹ Changed

  • Skills replace rigid procedure workflows - Agent sessions now use flexible, customizable skills instead of fixed procedure sequences. Skills are discoverable at runtime, giving the agent more natural control over its workflow. A Stop hook ensures PRs and summaries are always created before sessions end. Users can add custom skills to `~/.cyrus/skills/`. ([CYPACK-996](https://linear.app/ceedar/issue/CYPACK-996), [#1018](https://github.com/ceedaragents/cyrus/pull/1018))

πŸ“¦ Packages

  • cyrus-cloudflare-tunnel-client@0.2.41
  • cyrus-mcp-tools@0.2.41
  • cyrus-claude-runner@0.2.41
  • cyrus-core@0.2.41
  • cyrus-simple-agent-runner@0.2.41
  • cyrus-codex-runner@0.2.41
  • cyrus-cursor-runner@0.2.41
  • cyrus-config-updater@0.2.41
  • + 7 more
v0.2.40
cyrusagentcyrusagentΒ·2mo agoΒ·April 2, 2026
GitHub

πŸ› Fixed

  • Slack chat sessions now use fresh Linear tokens - The Linear MCP connection in Slack chat sessions was using a token captured once at startup, so after a daily OAuth refresh new sessions would fail to reach Linear. Chat sessions now build fresh MCP config per session, matching how issue sessions already work. ([CYPACK-1029](https://linear.app/ceedar/issue/CYPACK-1029), [#1063](https://github.com/ceedaragents/cyrus/pull/1063))
  • Logger tests updated for ISO timestamp output - Fixed test failures caused by the ISO timestamp addition to log output in v0.2.39. Tests in `core` and `claude-runner` now correctly match the timestamped log format. ([CYPACK-1027](https://linear.app/ceedar/issue/CYPACK-1027), [#1060](https://github.com/ceedaragents/cyrus/pull/1060))

πŸ“‹ Changed

  • Updated `@anthropic-ai/claude-agent-sdk` to v0.2.90 and `@anthropic-ai/sdk` to v0.82.0 - Upgrades from v0.2.89 / v0.81.0. v0.2.90 syncs with Claude Code v2.1.90. v0.82.0 adds structured `stop_details` to message responses and AWS Bedrock SDK API key support. ([CYPACK-1028](https://linear.app/ceedar/issue/CYPACK-1028), [#1062](https://github.com/ceedaragents/cyrus/pull/1062))
  • Updated `@anthropic-ai/claude-agent-sdk` to v0.2.89 and `@anthropic-ai/sdk` to v0.81.0 - Upgrades from v0.2.87 / v0.80.0. v0.2.89 adds `startup()` for ~20x faster first queries, `listSubagents()` / `getSubagentMessages()` for subagent conversation history. ([CYPACK-1026](https://linear.app/ceedar/issue/CYPACK-1026), [#1058](https://github.com/ceedaragents/cyrus/pull/1058))

✨ Added

  • GitHub App webhook setup for self-hosted users - Self-hosted users can now configure GitHub App webhooks during setup. ([#1054](https://github.com/ceedaragents/cyrus/pull/1054))
  • ISO timestamps in log output - Log lines now include ISO timestamps for easier debugging and correlation. ([#1055](https://github.com/ceedaragents/cyrus/pull/1055))
v0.2.39
cyrusagentcyrusagentΒ·2mo agoΒ·April 1, 2026
GitHub

πŸ› Fixed

  • Linear OAuth tokens now stay fresh across long sessions - When Linear access tokens are refreshed (at least once daily with OAuth 2.0), running sessions and services now automatically pick up the new token instead of continuing with a stale one. ([CYPACK-1024](https://linear.app/ceedar/issue/CYPACK-1024), [#1056](https://github.com/ceedaragents/cyrus/pull/1056))
  • Self-auth now works with reverse proxies on other machines - The self-auth OAuth callback server now respects `CYRUS_HOST_EXTERNAL=true` and listens on `0.0.0.0` instead of `localhost`, matching the main server's behavior. ([#1046](https://github.com/ceedaragents/cyrus/issues/1046), [CYPACK-1017](https://linear.app/ceedar/issue/CYPACK-1017), [#1047](https://github.com/ceedaragents/cyrus/pull/1047))

✨ Added

  • Auto-detect base branch when adding repositories - `cyrus self-add-repo` now automatically detects the remote's default branch instead of always using `main`. Also adds a `--base-branch` flag for manual override. ([CYPACK-1015](https://linear.app/ceedar/issue/CYPACK-1015), [#1051](https://github.com/ceedaragents/cyrus/pull/1051))

πŸ“‹ Changed

  • Renamed cyrus self-auth to cyrus self-auth-linear - Clarifies that this command authenticates specifically with Linear OAuth. ([CYPACK-1017](https://linear.app/ceedar/issue/CYPACK-1017), [#1047](https://github.com/ceedaragents/cyrus/pull/1047))
  • Updated @anthropic-ai/claude-agent-sdk to v0.2.88 - Syncs with Claude Code v2.1.88. Fixes error result messages, MCP connection races, StructuredOutput cache bug, and stream errors. ([CYPACK-1023](https://linear.app/ceedar/issue/CYPACK-1023), [#1053](https://github.com/ceedaragents/cyrus/pull/1053))
  • Updated @anthropic-ai/claude-agent-sdk to v0.2.87 - Syncs with Claude Code v2.1.87 (maintenance release). ([CYPACK-1020](https://linear.app/ceedar/issue/CYPACK-1020), [#1050](https://github.com/ceedaragents/cyrus/pull/1050))
  • Updated @anthropic-ai/claude-agent-sdk to v0.2.86 - Token distribution visibility, optional session_id, TypeScript fixes. ([CYPACK-1016](https://linear.app/ceedar/issue/CYPACK-1016), [#1045](https://github.com/ceedaragents/cyrus/pull/1045))
v0.2.38
cyrusagentcyrusagentΒ·2mo agoΒ·March 25, 2026
GitHub

✨ Added

  • GitLab integration with `glab` CLI support - Cyrus now supports GitLab repositories alongside GitHub. Create merge requests, respond to MR comments, and handle review feedback using the `glab` CLI. Includes webhook support for receiving GitLab events, a dedicated setup skill (`/cyrus-setup-gitlab`), and platform-aware subroutines that automatically use `glab` commands for GitLab-hosted repos.
  • Cyrus docs MCP available in all sessions - Cyrus now has access to its own documentation via the Mintlify docs MCP server, enabling better self-reference and user guidance.

✨ New Package

  • `cyrus-gitlab-event-transport@0.2.38` - GitLab event transport for receiving and verifying forwarded GitLab webhooks.

πŸ“¦ Published Packages

  • cyrus-ai@0.2.38
  • cyrus-cloudflare-tunnel-client@0.2.38
  • cyrus-mcp-tools@0.2.38
  • cyrus-claude-runner@0.2.38
  • cyrus-core@0.2.38
  • cyrus-simple-agent-runner@0.2.38
  • cyrus-codex-runner@0.2.38
  • cyrus-cursor-runner@0.2.38
  • + 7 more
v0.2.37
cyrusagentcyrusagentΒ·3mo agoΒ·March 18, 2026
GitHub

✨ Added

  • Slack sessions now support user-configured MCP tools - Slack chat sessions can now access MCP tools from user-configured `.mcp.json` files (e.g., Supabase, Stripe, Trigger.dev), not just the built-in Linear/cyrus-tools/Slack MCPs. ([CYPACK-982](https://linear.app/ceedar/issue/CYPACK-982), [#1006](https://github.com/ceedaragents/cyrus/pull/1006))