mcpField
C
cyrus-setup-endpoint

cyrus-setup-endpoint

github.com/cyrusagents云与 DevOps8791.0k 次安装今天更新
代码仓库

关于 cyrus-setup-endpoint

用于为 Cyrus 实例配置公开 Webhook 地址的设置技能,指导用户选择 ngrok、Cloudflare Tunnel 或自有网址,并写入所需配置。

主要功能

  1. 01配置 Webhook 端点
  2. 02选择 ngrok、Cloudflare Tunnel 或自有网址
  3. 03设置服务端口和直接 Webhook 选项
  4. 04安全更新环境文件中的密钥

适用场景

  1. 01将 Linear Webhook 连接到 Cyrus 实例
  2. 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?

  1. ngrok(推荐——每个免费账户都包含一个重启后仍然有效的静态域名)
  2. Cloudflare Tunnel(永久有效,需要 Cloudflare 账户)
  3. 自有 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 在重启后不会变化。

  1. 在 https://dashboard.ngrok.com 注册或登录
  2. 前往 https://dashboard.ngrok.com/domains
  3. 复制你的免费静态域名(例如 your-name-here.ngrok-free.app)
  4. 前往 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:已启用

评论

支持 Markdown