# Goose

Configure Goose's OpenAI provider with `OPENAI_HOST` and `OPENAI_BASE_PATH`. Point the host at Codex Pooler and keep the Pool API key in the `OPENAI_API_KEY` environment variable or Goose's secret storage.

## Config file path

Put persistent Goose provider and extension settings in `config.yaml`:

| OS | Config file |
| --- | --- |
| macOS | `~/.config/goose/config.yaml` |
| Linux | `~/.config/goose/config.yaml` |
| Windows | `%APPDATA%\Block\goose\config\config.yaml` |

Goose also keeps related files in the same config area: `permission.yaml` for tool permission levels, `secrets.yaml` when file-based secret storage is used, `permissions/tool_permissions.json` for runtime permission decisions, and `prompts/` for prompt templates. Direct edits usually require restarting existing Goose sessions; `goose info -v` shows the active settings.

You can also manage settings from Goose Desktop **Settings** or by running `goose configure` in Goose CLI. Environment variables have higher precedence than the config file, so `OPENAI_API_KEY` can stay outside YAML.

```yaml
GOOSE_PROVIDER: openai
GOOSE_MODEL: gpt-5.5
OPENAI_HOST: https://codex-pooler.example.com
OPENAI_BASE_PATH: v1/chat/completions
GOOSE_CONTEXT_LIMIT: 272000
GOOSE_MAX_TOKENS: 128000
GOOSE_AUTO_COMPACT_THRESHOLD: 0.52
```

For local setup, change `OPENAI_HOST` to `http://localhost:4000`.

Goose reads `GOOSE_CONTEXT_LIMIT` and `GOOSE_MAX_TOKENS` into its model config. Its auto-compaction threshold is a ratio of the context limit, not an output reserve, so `0.52` compacts before prompt history can crowd out a 128k completion in Codex Pooler's 272k `gpt-5.5` window.

Check the headless CLI path with tool access enabled:

```bash
export OPENAI_API_KEY="$CODEX_POOLER_API_KEY"
goose run \
  --no-session \
  --provider openai \
  --model gpt-5.5 \
  --with-builtin developer \
  --text 'Use your developer tool to create goose-ok.txt containing exactly: goose ok. Then reply with exactly: goose ok'
```

For optional operator MCP metadata access, add a remote Streamable HTTP extension. Codex Pooler model use does not require this. Goose stores remote extension headers in its config, so use a dedicated MCP token.

```yaml
# Optional operator-only MCP metadata add-on. Omit for model/runtime use.
extensions:
  codex_pooler:
    enabled: true
    type: streamable_http
    name: codex_pooler
    uri: https://codex-pooler.example.com/mcp
    headers:
      Authorization: "Bearer <operator-mcp-token>"
    timeout: 300
    bundled: null
    available_tools: []
```

For local MCP setup, change the extension `uri` to `http://localhost:4000/mcp`.

Use a Pool API key for OpenAI-compatible model requests and an operator MCP token for `/mcp`. Do not reuse the Pool API key for MCP.