diff --git a/.gitignore b/.gitignore index a2faa1a..9ca58c8 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ dist/ /somanycrows /web/ /dist/ +.env diff --git a/start.command b/start.command index 9cf8aeb..16f9221 100755 --- a/start.command +++ b/start.command @@ -1,19 +1,29 @@ #!/bin/bash -# So Many Crows: local test server. +# So Many Crows: local server. # Double-click to start. Close this window (or Ctrl-C) to stop. # -# Controlled by default: -# - offline mock crows (no API key used, no cost, no network calls) -# - listens on this Mac only (127.0.0.1:8080) -# - all state lives in this folder's .crows/ (delete it to start fresh) -# From Terminal, `./start.command --real` uses real Claude crows (needs ANTHROPIC_API_KEY). +# - 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 -if [ "$1" != "--real" ]; then - unset ANTHROPIC_API_KEY - echo "Controlled mode: offline mock 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