#!/bin/bash # So Many Crows: local server. # Double-click to start. Close this window (or Ctrl-C) to stop. # # - Real crows (Claude) when .env in this folder holds ANTHROPIC_API_KEY=...; mock crows otherwise. # - `./start.command --mock` forces mock crows. # - Listens on this Mac only (127.0.0.1:8080). State lives in .crows/ (delete it to start fresh). # - Guardrails: 20,000 tokens per item, 100,000 per list; you approve everything until crows earn trust. cd "$(dirname "$0")" || exit 1 xattr -d com.apple.quarantine ./crows 2>/dev/null chmod +x ./crows unset ANTHROPIC_API_KEY if [ "$1" != "--mock" ] && [ -f .env ]; then # Read only the key line; the file is never executed. ANTHROPIC_API_KEY="$(sed -n 's/^ANTHROPIC_API_KEY=//p' .env | head -n 1 | tr -d '[:space:]')" CROWS_MODEL_FROM_ENV="$(sed -n 's/^CROWS_MODEL=//p' .env | head -n 1 | tr -d '[:space:]')" [ -n "$CROWS_MODEL_FROM_ENV" ] && export CROWS_MODEL="$CROWS_MODEL_FROM_ENV" [ -n "$ANTHROPIC_API_KEY" ] && export ANTHROPIC_API_KEY fi if [ -n "$ANTHROPIC_API_KEY" ]; then echo "Real crows: Claude (${CROWS_MODEL:-claude-sonnet-5-5}). Each list is capped at 100,000 tokens." else echo "Mock crows (no key in .env, or --mock)." fi if lsof -iTCP:8080 -sTCP:LISTEN >/dev/null 2>&1; then echo "Something is already using port 8080. Stop it first." exit 1 fi (sleep 1; open "http://127.0.0.1:8080") & exec ./crows serve -addr 127.0.0.1:8080