skills/ceedaragents/cyrus/cyrus-setup-launch

cyrus-setup-launch

SKILL.md

CRITICAL: Never use Read, Edit, or Write tools on ~/.cyrus/.env or any file inside ~/.cyrus/. Use only Bash commands (grep, printf >>, etc.) to interact with env files — secrets must never be read into the conversation context.

Setup Launch

Prints a summary of the completed setup and offers to start Cyrus.

Step 1: Gather Configuration

Read current state:

# Base URL
grep '^CYRUS_BASE_URL=' ~/.cyrus/.env 2>/dev/null | cut -d= -f2-

# Linear
grep -c '^LINEAR_CLIENT_ID=' ~/.cyrus/.env 2>/dev/null

# GitHub
gh auth status 2>&1 | head -1

# Slack
grep -c '^SLACK_BOT_TOKEN=' ~/.cyrus/.env 2>/dev/null

# Repositories
cat ~/.cyrus/config.json 2>/dev/null

# Claude auth
grep -c -E '^(ANTHROPIC_API_KEY|CLAUDE_CODE_OAUTH_TOKEN)=' ~/.cyrus/.env 2>/dev/null

Step 2: Print Summary

Print a formatted summary:

┌─────────────────────────────────────┐
│         Cyrus Setup Complete        │
├─────────────────────────────────────┤
│                                     │
│  Endpoint: https://your-url.com     │
│  Claude:   ✓ API key configured     │
│                                     │
│  Surfaces:                          │
│    Linear:  ✓ Workspace connected   │
│    GitHub:  ✓ CLI authenticated     │
│    Slack:   ✓ Bot configured        │
│                                     │
│  Repositories:                      │
│    • yourorg/yourrepo               │
│    • yourorg/another-repo           │
│                                     │
└─────────────────────────────────────┘

Use ✓ for configured items and ✗ for skipped/unconfigured items.

Step 3: Make Cyrus Persistent

Cyrus needs to run as a background process so it stays alive and restarts after reboots. Use the AskUserQuestion tool if available to ask:

How would you like to keep Cyrus running in the background?

  1. pm2 (recommended) — Node.js process manager. Simple to set up, auto-restarts on crash, log management built in. Best for most users.
  2. systemd (Linux only) — OS-level service manager. Starts on boot automatically, managed with systemctl. Best for dedicated Linux servers.
  3. Neither — just run cyrus in the foreground for now (you can set up persistence later).

Option 1: pm2

The agent should run all of these commands directly:

  1. Check if pm2 is installed (which pm2). If not, install it (npm install -g pm2).
  2. Start Cyrus: pm2 start cyrus --name cyrus
  3. Save the process list: pm2 save
  4. Run pm2 startup — this prints a system-specific command. The agent should run that output command too (it typically requires sudo).

After setup, inform the user of useful commands:

  • pm2 logs cyrus — view logs
  • pm2 restart cyrus — restart
  • pm2 stop cyrus — stop

Option 2: systemd (Linux only)

The agent should run all of these commands directly:

  1. Resolve the actual values for the service file:

    CYRUS_BIN=$(which cyrus)
    CYRUS_USER=$(whoami)
    
  2. Write the service file:

    sudo tee /etc/systemd/system/cyrus.service > /dev/null << EOF
    [Unit]
    Description=Cyrus AI Agent
    After=network.target
    
    [Service]
    Type=simple
    User=$CYRUS_USER
    EnvironmentFile=/home/$CYRUS_USER/.cyrus/.env
    ExecStart=$CYRUS_BIN
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
  3. Enable and start:

    sudo systemctl daemon-reload
    sudo systemctl enable cyrus
    sudo systemctl start cyrus
    

After setup, inform the user of useful commands:

  • sudo systemctl status cyrus — check status
  • sudo journalctl -u cyrus -f — view logs
  • sudo systemctl restart cyrus — restart

Option 3: Foreground

Run directly:

cyrus

Step 4: Start ngrok (if applicable)

If the user configured ngrok in the endpoint step, the agent should start it:

ngrok start cyrus

If using pm2, also make ngrok persistent:

pm2 start "ngrok start cyrus" --name ngrok
pm2 save

Step 5: Verify Running

Once Cyrus starts, verify it's listening:

curl -s http://localhost:3456/status

Should return {"status":"idle"} or similar.

Then try assigning a Linear issue to Cyrus, or @mentioning it in Slack, to verify the full pipeline works!

Completion

✓ Cyrus is running and ready. Assign a Linear issue or @mention in Slack to test it out!

Weekly Installs
27
GitHub Stars
468
First Seen
7 days ago
Installed on
opencode27
gemini-cli27
github-copilot27
amp27
cline27
codex27