Home β€Ί Operations Runbook

πŸ”§ Operations Runbook v6.1

ASSUME NOTHING IS RUNNING. VERIFY BEFORE ACTING.

Essential Commands

CommandPurpose
~/bin/dryad-statusFull stack health check
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"Running containers with ports
docker stats --no-streamRAM per container
free -hSystem RAM (16 GB ceiling)
systemctl --user status opencodeOpenCode service
tailscale statusTailnet connectivity

LiteLLM β€” Auth Required (v6.1+)

curl http://localhost:4000/v1/models \
  -H "Authorization: Bearer sk-dryad-master" | jq .

curl http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-dryad-master" \
  -d '{"model":"qwen-coder-fast","messages":[{"role":"user","content":"Say hello"}],"max_tokens":50}'

OpenCode Config (v1.2.24)

Schema changed in v1.2.24Use npm not type. Use options.baseURL not baseURL. Wrong format causes crash loops.
{
  "$schema": "https://opencode.ai/config.json",
  "permission": "auto-allow",
  "provider": {
    "dryad-gateway": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Dryad LiteLLM Gateway",
      "options": {
        "baseURL": "http://localhost:4000/v1",
        "apiKey": "sk-dryad-master"
      }
    }
  },
  "model": "dryad-gateway/qwen-coder-fast"
}

Kill All Ralph Loops

pkill -f ralph-start && sleep 2 && pkill -f "opencode run"

Safe Docker Cleanup

Never run docker system prune on madhatterIt removes Ollama model data and dryad volumes. Use targeted commands only.
docker container prune -f    # stopped containers only
docker image prune -f        # dangling images only