Cyrus exposes a different set of tools to itself depending on which platform kicked off a session. The Allowed Tools page in the Cyrus webapp (Documentation Index
Fetch the complete documentation index at: https://atcyrus.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
/settings/tools) is split into three tabs — Slack, Linear, and
GitHub — so you can grant Cyrus the right toolbelt for each surface.
Why per-platform tools?
A Linear issue assignment generally means Cyrus is going to do real engineering work — open PRs, run shell, edit files. A Slack@cyrus mention,
on the other hand, is usually a question or a quick lookup; you probably
don’t want every mention to be able to run arbitrary Bash. Splitting the
allowed list by platform lets you tighten the high-frequency, transient
surfaces (Slack) while leaving the engineering surfaces (Linear / GitHub)
wide open.
The three tabs
Slack
These tools apply when Cyrus is@mentioned in Slack. Slack chat sessions
are transient — they don’t check out a repository or open PRs — so the
default list is the read-only set plus a handful of helpers needed to reply
in-thread and queue follow-ups:
Read, Glob, Grep, Bash(git -C * pull), WebFetch, WebSearch,
SendMessage, ScheduleWakeup, Task, the full Task* lifecycle
(TaskCreate / TaskUpdate / TaskGet / TaskList / TaskOutput /
TaskStop), EnterPlanMode / ExitPlanMode, Monitor, Skill,
ToolSearch, and the workspace MCP prefixes mcp__linear,
mcp__cyrus-tools, mcp__cyrus-docs, mcp__slack.
You can add or remove anything on this tab — it does not have to be a
subset of the Linear list.
Linear
These tools apply to agent sessions triggered from Linear — issue assignment, mid-session prompts, agent session @ mentions, etc. Linear sessions are full engineering sessions, so the default is the full Claude Agent SDK toolset plus the workspace MCP prefixes (includingmcp__slack,
so Cyrus can post status updates to a Slack thread while working on an
issue).
GitHub
These tools apply to GitHub- and GitLab-triggered sessions (PR / MR comments, automated fix-on-failure flows, and other webhooks that spawn an agent session). The default mirrors the Linear list exceptmcp__slack is omitted — GitHub sessions don’t post into Slack, that’s
Slack’s surface.
Each of the three lists is maintained independently in cyrus-core —
adding a tool to one list does not silently add it to the others.
Per-repository overrides
Per-repository overrides live underneath the Linear and GitHub tabs (Slack is repo-agnostic, so it doesn’t have them). The single per-repo allow-list applies to both Linear and GitHub sessions on that repository — when you set an override under the Linear tab, the same override shows up under the GitHub tab with a “shared with GitHub” badge, and vice versa. Per-repo overrides are independent of the team-level Linear / GitHub defaults — they’re not bounded by them. A repo can both add tools the team default omits and remove tools the team default grants. When a repo has its own override, the runtime also pairs it with the repo’s MCP server set (repository.mcpConfigPath): the agent’s permission
rules and the loaded MCP servers always travel as a unit. Repositories
without an override inherit the team-level linearAllowedTools /
githubAllowedTools and the team-level MCP config lists.
MCP servers
Custom integration MCP servers (added under/integrations)
are gated through these same per-platform allow-lists. When you connect a
custom MCP and select which of its tools should be available, the Cyrus webapp
writes the chosen entries (mcp__<slug>__<tool>) into whichever
platform tabs you’ve authorized the integration for. Toggling a tool on or
off from /settings/tools is what enables or disables it for that surface
— it is the single source of truth.
The “Manage allowed tools” item in each MCP’s dropdown on /integrations
links straight to /settings/tools so you can adjust the gating from one
place.
Per-tool narrowing
Every entry on these tabs follows Claude Code’s permission-rule syntax, which lets you narrow a tool to specific arguments instead of granting it blanket access:Bash(npm run build)— only allownpm run build, not arbitrary shellRead(/src/**)— restrict reads to a globWebFetch(domain:docs.linear.app)— restrict web fetches to a domain
Defaults
- Slack default — the curated read-only set described above, plus the workspace MCP prefixes Cyrus needs to reply in-thread.
- Linear default — full Claude Agent SDK toolset (Read, Edit, Write,
Bash, Task, web tools, plan / worktree management, AskUserQuestion,
push notifications, the full Task and Cron lifecycle, monitoring tools,
team-create / team-delete, plus
mcp__linear,mcp__cyrus-tools,mcp__cyrus-docs, andmcp__slack). - GitHub default — same shape as Linear, minus
mcp__slack.

