关于 cyrus-setup-endpoint
用于为 Cyrus 实例配置公开 Webhook 地址的设置技能,指导用户选择 ngrok、Cloudflare Tunnel 或自有网址,并写入所需配置。
主要功能
- 01配置 Webhook 端点
- 02选择 ngrok、Cloudflare Tunnel 或自有网址
- 03设置服务端口和直接 Webhook 选项
- 04安全更新环境文件中的密钥
适用场景
- 01将 Linear Webhook 连接到 Cyrus 实例
- 02配置 Slack 和 GitHub 的直接 Webhook 验证
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cyrusagents/ cyrus --skill cyrus-setup-endpoint安装后在 Claude Code 中输入/cyrus-setup-endpoint确认已加载。
详细介绍
重要:切勿对 ~/.cyrus/.env 或 ~/.cyrus/ 内的任何文件使用 Read、Edit 或 Write 工具。只能使用 Bash 命令(grep、printf >> 等)与环境变量文件交互——绝不能将机密读入对话上下文。
设置端点
配置一个公开 URL,以便 Linear(及其他集成)向你的 Cyrus 实例发送 Webhook。
步骤 1:检查现有配置
grep -E '^CYRUS_BASE_URL=' ~/.cyrus/.env 2>/dev/null
如果已设置 CYRUS_BASE_URL,请告知用户:
Webhook 端点已配置:
<value>要重新配置,请从~/.cyrus/.env中移除CYRUS_BASE_URL,然后重新运行此技能。
跳至步骤 4(如果端口或 Webhook 配置缺失,则写入)。
步骤 2:选择端点方式
询问用户:
你会如何将 Cyrus 暴露到互联网,以接收 Webhook?
- ngrok(推荐——每个免费账户都包含一个重启后仍然有效的静态域名)
- Cloudflare Tunnel(永久有效,需要 Cloudflare 账户)
- 自有 URL(你已经有一个公开 URL/域名)
**重要:**ngrok 免费套餐包含一个永久静态域名——不要告诉用户这是付费功能,也不要说 URL 会在重启时变化。每个 ngrok 免费账户都可在 https://dashboard.ngrok.com/domains 获得一个静态域名。
步骤 3:配置端点
选项 1:ngrok
3a. 检查是否已安装 ngrok
which ngrok
如果尚未安装,请提供安装说明:
macOS:
brew install ngrok
Linux:
curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok-v3-stable-linux-amd64.tgz | sudo tar xvz -C /usr/local/bin
3b. 引导用户设置 ngrok 域名
告知用户:
ngrok 提供免费的静态域名,因此 URL 在重启后不会变化。
- 在 https://dashboard.ngrok.com 注册或登录
- 前往 https://dashboard.ngrok.com/domains
- 复制你的免费静态域名(例如
your-name-here.ngrok-free.app)- 前往 https://dashboard.ngrok.com/get-started/your-authtoken 并复制你的 authtoken
请用户提供:
- 他们的 ngrok 域名
- 他们的 ngrok authtoken
重要:authtoken 是机密。请使用剪贴板写入文件的命令。
3c. 写入 ngrok 配置
写入 ngrok 配置,以便使用 ngrok start cyrus 启动:
mkdir -p ~/.config/ngrok
然后写入 ~/.config/ngrok/ngrok.yml(如果文件已存在,则合并配置):
version: 3
agent:
authtoken: <token>
endpoints:
- name: cyrus
url: <domain>
upstream:
url: 3456
对于 authtoken,请使用从剪贴板写入文件的方式:
macOS:
# User copies authtoken, then runs:
NGROK_TOKEN=$(pbpaste) && cat > ~/.config/ngrok/ngrok.yml << EOF
version: 3
agent:
authtoken: $NGROK_TOKEN
endpoints:
- name: cyrus
url: <domain>
upstream:
url: 3456
EOF
通用备用方式:
read -s -p "Paste your ngrok authtoken: " NGROK_TOKEN && cat > ~/.config/ngrok/ngrok.yml << EOF
version: 3
agent:
authtoken: $NGROK_TOKEN
endpoints:
- name: cyrus
url: <domain>
upstream:
url: 3456
EOF
echo " ✓ Saved"
3d. 写入 CYRUS_BASE_URL
printf 'CYRUS_BASE_URL=https://%s\n' "<domain>" >> ~/.cyrus/.env
其中 <domain> 是用户提供的 ngrok 域名(例如 your-name-here.ngrok-free.app)。
告知用户:
要启动 ngrok,请运行:
ngrok start cyrus请在启动 Cyrus 之前,在另一个终端中运行此命令。
选项 2:Cloudflare Tunnel
请用户提供:
- 他们的 Cloudflare Tunnel 令牌
- 他们的 Tunnel 主机名(例如
cyrus.yourdomain.com)
令牌是机密——请通过剪贴板写入环境变量:
macOS:
printf 'CLOUDFLARE_TOKEN=%s\n' "$(pbpaste)" >> ~/.cyrus/.env
通用备用方式:
read -s -p "Paste your Cloudflare token: " val && printf 'CLOUDFLARE_TOKEN=%s\n' "$val" >> ~/.cyrus/.env && echo " ✓ Saved"
然后写入基础 URL(非机密——Agent 可以直接写入):
printf 'CYRUS_BASE_URL=https://<hostname>\n' >> ~/.cyrus/.env
选项 3:自有 URL
请用户提供 URL。验证它是否以 https:// 开头。
printf 'CYRUS_BASE_URL=%s\n' "<url>" >> ~/.cyrus/.env
步骤 4:写入通用配置
确保 ~/.cyrus/.env 中包含以下配置(仅添加缺失项):
grep -q '^CYRUS_SERVER_PORT=' ~/.cyrus/.env 2>/dev/null || printf 'CYRUS_SERVER_PORT=3456\n' >> ~/.cyrus/.env
grep -q '^LINEAR_DIRECT_WEBHOOKS=' ~/.cyrus/.env 2>/dev/null || printf 'LINEAR_DIRECT_WEBHOOKS=true\n' >> ~/.cyrus/.env
grep -q '^CYRUS_HOST_EXTERNAL=' ~/.cyrus/.env 2>/dev/null || printf 'CYRUS_HOST_EXTERNAL=true\n' >> ~/.cyrus/.env
LINEAR_DIRECT_WEBHOOKS=true 可启用 Linear Webhook 签名的直接验证。CYRUS_HOST_EXTERNAL=true 可启用 Slack 和 GitHub Webhook 签名的直接验证。对于 Webhook 直接来自服务(而非通过 CYHOST 转发)的可自托管设置,两者都必须配置。
完成
✓ Webhook 端点已配置:
<CYRUS_BASE_URL>✓ 服务端口:3456 ✓ 直接 Webhook:已启用