/cyrus-setup
Set up Cyrus end-to-end — install prerequisites, configure authentication, create integrations (Linear, GitHub, Slack), add repositories, and launch. Run this once to get Cyrus running as a background agent.
$ npx -y skills add cyrusagents/cyrus --skill cyrus-setup --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/cyrus-setup
Context preview
The summary Claude sees to decide when to auto-load this skill.
Set up Cyrus end-to-end — install prerequisites, configure authentication, create integrations (Linear, GitHub, Slack), add repositories, and launch. Run this once to get Cyrus running as a background agent.
SKILL.md
cyrus-setup.SKILL.mdname: cyrus-setup
description: Set up Cyrus end-to-end — install prerequisites, configure authentication, create integrations (Linear, GitHub, Slack), add repositories, and launch. Run this once to get Cyrus running as a background agent.
Cyrus Setup
One-command setup for self-hosted Cyrus. This orchestrator walks you through everything needed to run Claude Code as a background agent from Linear, Slack, and GitHub.
CRITICAL Rules
Never Read or Write ~/.cyrus/.env Directly
**FORBIDDEN:** Do NOT use `Read`, `Edit`, or `Write` tools on `~/.cyrus/.env` or any file inside `~/.cyrus/`. This file contains secrets (API keys, tokens, signing secrets). All interaction with this file MUST go through `Bash` commands (`grep`, `printf >> ...`, etc.) which the user can see and approve. Never read its contents into the conversation context.
Browser Automation
The goal of browser automation in this skill is to **reduce sign-in and setup fatigue** — the agent navigates web UIs, fills forms, and scrapes credentials so the user doesn't have to do it all manually.
**Three modes, in order of preference:**
1. **`claude-in-chrome`** (preferred when available) — if the user is running Claude Code and has the `claude-in-chrome` MCP extension connected, use it. This has the huge advantage of using the user's existing Chrome with all their signed-in sessions (Linear, Slack, GitHub). Check availability by seeing if `mcp__claude-in-chrome__*` tools exist. 2. **`agent-browser` CLI** — a standalone Playwright-based binary invoked via `Bash`. Requires launching a **fresh Chrome profile** with remote debugging enabled (the user will need to sign in to services in that profile). Check with `which agent-browser`. 3. **Manual guided flow** — the user follows the agent's step-by-step instructions and does the clicks themselves. Always available as Path B in each sub-skill.
**Determining which mode to use:**
1. First, check if `claude-in-chrome` MCP tools are available in the current session. If yes, use those — no setup needed. 2. If not, check `which agent-browser`. If installed, launch a fresh Chrome profile (see below). 3. If neither is available, ask the user: install `agent-browser`, or follow manual instructions?
**`agent-browser` setup — fresh Chrome profile:**
`agent-browser` needs a Chrome instance with remote debugging enabled. Launch one with an isolated profile:
# Find an open port
for port in $(seq 9222 9322); do
if ! lsof -i :"$port" > /dev/null 2>&1; then
echo "Open port found: $port"
break
fi
done# Create a fresh profile directory
mkdir -p ~/.cyrus/chrome-profile
# Launch Chrome with remote debugging (runs in background)
# macOS:
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--remote-debugging-port=<port> \
--user-data-dir="$HOME/.cyrus/chrome-profile" &
# Linux:
google-chrome --remote-debugging-port=<port> \
--user-data-dir="$HOME/.cyrus/chrome-profile" &
# Connect agent-browser to it
agent-browser connect <port>
After connecting, commands work normally:
agent-browser navigate "https://example.com"
agent-browser click "button:text('Submit')"
agent-browser fill "#input-id" "value"
agent-browser screenshot
agent-browser eval "document.title"**Important:** The user will need to **sign in to Linear, Slack, and GitHub** in this fresh Chrome profile before the agent can automate app creation. The agent should navigate to each service and pause for the user to sign in before proceeding with automation.
**Cleanup:** After setup is complete, close the Chrome instance:
lsof -ti :<port> | xargs kill 2>/dev/null
How This Works
This skill runs sub-skills in order, skipping any that are already complete. You can re-run `/cyrus-setup` at any time to add integrations or fix configuration.
Loading Sub-Skills
Each step references a sub-skill file. To execute a sub-skill, **read the SKILL.md file** using the `Read` tool and follow its instructions. The sub-skill files are sibling directories to this skill:
| Step | Sub-skill | File to read | |------|-----------|-------------| | 1 | setup-prerequisites | `cyrus-setup-prerequisites/SKILL.md` (relative to skills directory) | | 2 | setup-claude-auth | `cyrus-setup-claude-auth/SKILL.md` | | 3 | setup-endpoint | `cyrus-setup-endpoint/SKILL.md` | | 4 | setup-linear | `cyrus-setup-linear/SKILL.md` | | 5 | setup-github | `cyrus-setup-github/SKILL.md` | | 5b | setup-gitlab | `cyrus-setup-gitlab/SKILL.md` | | 6 | setup-slack | `cyrus-setup-slack/SKILL.md` | | 7 | setup-repository | `cyrus-setup-repository/SKILL.md` | | 8 | setup-launch | `cyrus-setup-launch/SKILL.md` |
To find the files, look for them relative to this file's directory (go up one level, then into the sub-skill directory). For example, if this file is at `~/.claude/skills/cyrus-setup/SKILL.md`, the sub-skills are at `~/.claude/skills/cyrus-setup-prerequisites/SKILL.md`, etc.
If a sub-skill file is not found, use `Glob` to search for it: `**/cyrus-setup-prerequisites/SKILL.md`
---
Step 0: Identity & Surface Selection
Before anything else, collect preferences from the user. **Use the `AskUserQuestion` tool if available** — ask questions interactively rather than printing them as a text block. You may bundle related questions into a single ask, or ask them one at a time.
Question 1: Name & Description
Ask the user (defaults in parentheses):
- **What would you like to name your agent?** — This name appears in Linear, Slack, and GitHub integrations. (default: `Cyrus`)
- **Give your agent a short description** — one sentence, shown in integration app listings. (default: `AI coding agent for automated development`)
Store as `AGENT_NAME` and `AGENT_DESCRIPTION` — used when creating Linear, Slack, and GitHub apps.
Question 2: Which surfaces?
Ask the user to select one or more:
- **Linear** — issue tracking, recommended for most users
- **GitHub*
Read more
name: cyrus-setup description: Set up Cyrus end-to-end — install prerequisites, configure authentication, create integrations (Linear, GitHub, Slack), add repositories, and launch. Run this once to get Cyrus running as a background agent.
Cyrus Setup
One-command setup for self-hosted Cyrus. This orchestrator walks you through everything needed to run Claude Code as a background agent from Linear, Slack, and GitHub.
CRITICAL Rules
Never Read or Write ~/.cyrus/.env Directly
**FORBIDDEN:** Do NOT use `Read`, `Edit`, or `Write` tools on `~/.cyrus/.env` or any file inside `~/.cyrus/`. This file contains secrets (API keys, tokens, signing secrets). All interaction with this file MUST go through `Bash` commands (`grep`, `printf >> ...`, etc.) which the user can see and approve. Never read its contents into the conversation context.
Browser Automation
The goal of browser automation in this skill is to **reduce sign-in and setup fatigue** — the agent navigates web UIs, fills forms, and scrapes credentials so the user doesn't have to do it all manually.
**Three modes, in order of preference:**
1. **`claude-in-chrome`** (preferred when available) — if the user is running Claude Code and has the `claude-in-chrome` MCP extension connected, use it. This has the huge advantage of using the user's existing Chrome with all their signed-in sessions (Linear, Slack, GitHub). Check availability by seeing if `mcp__claude-in-chrome__*` tools exist. 2. **`agent-browser` CLI** — a standalone Playwright-based binary invoked via `Bash`. Requires launching a **fresh Chrome profile** with remote debugging enabled (the user will need to sign in to services in that profile). Check with `which agent-browser`. 3. **Manual guided flow** — the user follows the agent's step-by-step instructions and does the clicks themselves. Always available as Path B in each sub-skill.
**Determining which mode to use:**
1. First, check if `claude-in-chrome` MCP tools are available in the current session. If yes, use those — no setup needed. 2. If not, check `which agent-browser`. If installed, launch a fresh Chrome profile (see below). 3. If neither is available, ask the user: install `agent-browser`, or follow manual instructions?
**`agent-browser` setup — fresh Chrome profile:**
`agent-browser` needs a Chrome instance with remote debugging enabled. Launch one with an isolated profile:
# Find an open port
for port in $(seq 9222 9322); do
if ! lsof -i :"$port" > /dev/null 2>&1; then
echo "Open port found: $port"
break
fi
done# Create a fresh profile directory mkdir -p ~/.cyrus/chrome-profile
# Launch Chrome with remote debugging (runs in background) # macOS: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \ --remote-debugging-port=<port> \ --user-data-dir="$HOME/.cyrus/chrome-profile" & # Linux: google-chrome --remote-debugging-port=<port> \ --user-data-dir="$HOME/.cyrus/chrome-profile" &
# Connect agent-browser to it agent-browser connect <port>
After connecting, commands work normally:
agent-browser navigate "https://example.com"
agent-browser click "button:text('Submit')"
agent-browser fill "#input-id" "value"
agent-browser screenshot
agent-browser eval "document.title"**Important:** The user will need to **sign in to Linear, Slack, and GitHub** in this fresh Chrome profile before the agent can automate app creation. The agent should navigate to each service and pause for the user to sign in before proceeding with automation.
**Cleanup:** After setup is complete, close the Chrome instance:
lsof -ti :<port> | xargs kill 2>/dev/null
How This Works
This skill runs sub-skills in order, skipping any that are already complete. You can re-run `/cyrus-setup` at any time to add integrations or fix configuration.
Loading Sub-Skills
Each step references a sub-skill file. To execute a sub-skill, **read the SKILL.md file** using the `Read` tool and follow its instructions. The sub-skill files are sibling directories to this skill:
| Step | Sub-skill | File to read | |------|-----------|-------------| | 1 | setup-prerequisites | `cyrus-setup-prerequisites/SKILL.md` (relative to skills directory) | | 2 | setup-claude-auth | `cyrus-setup-claude-auth/SKILL.md` | | 3 | setup-endpoint | `cyrus-setup-endpoint/SKILL.md` | | 4 | setup-linear | `cyrus-setup-linear/SKILL.md` | | 5 | setup-github | `cyrus-setup-github/SKILL.md` | | 5b | setup-gitlab | `cyrus-setup-gitlab/SKILL.md` | | 6 | setup-slack | `cyrus-setup-slack/SKILL.md` | | 7 | setup-repository | `cyrus-setup-repository/SKILL.md` | | 8 | setup-launch | `cyrus-setup-launch/SKILL.md` |
To find the files, look for them relative to this file's directory (go up one level, then into the sub-skill directory). For example, if this file is at `~/.claude/skills/cyrus-setup/SKILL.md`, the sub-skills are at `~/.claude/skills/cyrus-setup-prerequisites/SKILL.md`, etc.
If a sub-skill file is not found, use `Glob` to search for it: `**/cyrus-setup-prerequisites/SKILL.md`
---
Step 0: Identity & Surface Selection
Before anything else, collect preferences from the user. **Use the `AskUserQuestion` tool if available** — ask questions interactively rather than printing them as a text block. You may bundle related questions into a single ask, or ask them one at a time.
Question 1: Name & Description
Ask the user (defaults in parentheses):
- **What would you like to name your agent?** — This name appears in Linear, Slack, and GitHub integrations. (default: `Cyrus`)
- **Give your agent a short description** — one sentence, shown in integration app listings. (default: `AI coding agent for automated development`)
Store as `AGENT_NAME` and `AGENT_DESCRIPTION` — used when creating Linear, Slack, and GitHub apps.
Question 2: Which surfaces?
Ask the user to select one or more:
- **Linear** — issue tracking, recommended for most users
- **GitHub*
Your (Claude Code|Codex|Cursor|Gemini) powered (Linear|GitHub|GitLab|Slack) agent.
Repo: cyrusagents/cyrus
Other skills on cyrus.
- /google
Search the web for information. Use when you need to look something up, find current information, or research a topic.
Open skill - /release-core-test
Invoke when dev-testing a Cyrus change that spans CYPACK (edgeworker + CLI) and CYHOST (Vercel-hosted GUI) and the hosted GUI needs to point at an unreleased `cyrus-core` from this repo. Publishes `cyrus-core` (and `claude-runner` if needed) as a `-test.N` prerelease under the
Open skill - /cyrus-setup-claude-auth
Configure Claude Code authentication for Cyrus — API key, OAuth token, or third-party provider.
Open skill - /cyrus-setup-endpoint
Configure the public webhook endpoint for Cyrus — ngrok, Cloudflare Tunnel, or custom URL.
Open skill - /cyrus-setup-github
Configure GitHub for Cyrus — gh CLI login and git config for PRs, with optional webhook setup to enable @mention responses in PR comments, automated rebases and merges, and auto-fixing based on CI failures (coming soon).
Open skill - /cyrus-setup-gitlab
Configure GitLab authentication for Cyrus — glab CLI login and git config for creating merge requests.
Open skill

