Guide · goose

Connect goose to Synap

4 steps · about 2 minutes

  1. Get a free key

    Sign in with Google at synap.linkrra.com — no card. Your key starts with sk-pool-.

  2. Install goose

    The CLI from Block. Homebrew on macOS.

    brew install block-goose-cli
  3. Point it at Synap

    No config file needed. Note that goose splits the address: OPENAI_HOST is the origin without /v1, and the rest of the path goes in OPENAI_BASE_PATH.

    export GOOSE_PROVIDER=openai
    export GOOSE_MODEL=qwen3-coder-30b
    export OPENAI_HOST=https://synap.linkrra.com
    export OPENAI_BASE_PATH=v1/chat/completions
    export OPENAI_API_KEY=sk-pool-...
  4. Give it a job

    Headless with run -t, or type goose for the session UI.

    goose run -t "implement fizzbuzz in fizz.py"
Notes, prices and limits

Four environment variables, no config file. Recommended model: qwen3-coder-30b — $0.0675 in and $0.27 out per 1M tokens, 98,304-token context.

Run live against this API on goose 1.54.0: it drove its Developer extension, called its text-editor tool and rewrote the file; the result was executed and asserted correct.

Getting the split wrong is the one way this fails: OPENAI_HOST with https://synap.linkrra.com/v1 in it, plus the default base path, requests /v1/v1/chat/completions.

The same four values work in ~/.config/goose/config.yaml if you want a file. The key still comes from OPENAI_API_KEY or the keyring.

goose run --no-session -t "…" is the headless form; -i <file> reads the prompt from a file, -i - from stdin.

On the free tier: every request counts input and output against 100,000 free tokens a day, and answers stop at 4,096 output tokens. Coding agents send long prompts, so the free tier covers a short session; credits cover the rest.

Field names from goose docs: OpenAI provider, and goose 1.54.0 run against this API, checked 2026-11-03 20:20 UTC. Prices refresh from /v1/models when this page loads.