Loading...
Loading...
Compare original and translation side by side
ReadEditWrite~/.cyrus/.env~/.cyrus/Bashgrepprintf >>~/.cyrus/.env~/.cyrus/ReadEditWritegrepprintf >>grep -E '^CYRUS_BASE_URL=' ~/.cyrus/.env 2>/dev/nullCYRUS_BASE_URLWebhook endpoint already configured:To reconfigure, remove<value>fromCYRUS_BASE_URLand re-run this skill.~/.cyrus/.env
grep -E '^CYRUS_BASE_URL=' ~/.cyrus/.env 2>/dev/nullCYRUS_BASE_URLWebhook端点已配置:如需重新配置,请从<value>中移除~/.cyrus/.env并重新运行此技能。CYRUS_BASE_URL
How will you expose Cyrus to the internet for webhooks?
- ngrok (recommended — every free account includes one static domain that persists across restarts)
- Cloudflare Tunnel (permanent, requires Cloudflare account)
- Own URL (you already have a public URL/domain)
你将通过哪种方式将Cyrus暴露到互联网以接收Webhook?
- ngrok(推荐——每个免费账户都包含一个静态域名,重启后仍保持不变)
- Cloudflare Tunnel(永久可用,需要Cloudflare账户)
- 自定义URL(你已拥有公共URL/域名)
which ngrokbrew install ngrokcurl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok-v3-stable-linux-amd64.tgz | sudo tar xvz -C /usr/local/binwhich ngrokbrew install ngrokcurl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok-v3-stable-linux-amd64.tgz | sudo tar xvz -C /usr/local/binngrok provides a free static domain so your URL doesn't change between restarts.
- Sign up or log in at https://dashboard.ngrok.com
- Go to https://dashboard.ngrok.com/domains
- Copy your free static domain (e.g.,
)your-name-here.ngrok-free.app- Go to https://dashboard.ngrok.com/get-started/your-authtoken and copy your authtoken
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 start cyrusmkdir -p ~/.config/ngrok~/.config/ngrok/ngrok.ymlversion: 3
agent:
authtoken: <token>
endpoints:
- name: cyrus
url: <domain>
upstream:
url: 3456undefinedngrok start cyrusmkdir -p ~/.config/ngrok~/.config/ngrok/ngrok.ymlversion: 3
agent:
authtoken: <token>
endpoints:
- name: cyrus
url: <domain>
upstream:
url: 3456undefined
**Universal fallback:**
```bash
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"
**通用备用方案:**
```bash
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"printf 'CYRUS_BASE_URL=https://%s\n' "<domain>" >> ~/.cyrus/.env<domain>your-name-here.ngrok-free.appTo start ngrok, run:Run this in a separate terminal before starting Cyrus.ngrok start cyrus
printf 'CYRUS_BASE_URL=https://%s\n' "<domain>" >> ~/.cyrus/.env<domain>your-name-here.ngrok-free.app要启动ngrok,请运行:请在启动Cyrus之前,在单独的终端中运行此命令。ngrok start cyrus
cyrus.yourdomain.comprintf 'CLOUDFLARE_TOKEN=%s\n' "$(pbpaste)" >> ~/.cyrus/.envread -s -p "Paste your Cloudflare token: " val && printf 'CLOUDFLARE_TOKEN=%s\n' "$val" >> ~/.cyrus/.env && echo " ✓ Saved"printf 'CYRUS_BASE_URL=https://<hostname>\n' >> ~/.cyrus/.envcyrus.yourdomain.comprintf 'CLOUDFLARE_TOKEN=%s\n' "$(pbpaste)" >> ~/.cyrus/.envread -s -p "Paste your Cloudflare token: " val && printf 'CLOUDFLARE_TOKEN=%s\n' "$val" >> ~/.cyrus/.env && echo " ✓ Saved"printf 'CYRUS_BASE_URL=https://<hostname>\n' >> ~/.cyrus/.envhttps://printf 'CYRUS_BASE_URL=%s\n' "<url>" >> ~/.cyrus/.envhttps://printf 'CYRUS_BASE_URL=%s\n' "<url>" >> ~/.cyrus/.env~/.cyrus/.envgrep -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/.envLINEAR_DIRECT_WEBHOOKS=trueCYRUS_HOST_EXTERNAL=true~/.cyrus/.envgrep -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/.envLINEAR_DIRECT_WEBHOOKS=trueCYRUS_HOST_EXTERNAL=true✓ Webhook endpoint configured:✓ Server port: 3456 ✓ Direct webhooks: enabled<CYRUS_BASE_URL>
✓ Webhook端点已配置:✓ 服务器端口:3456 ✓ 直接Webhook:已启用<CYRUS_BASE_URL>