# Using 4AICode with Droid and Pi

Both Droid and Pi connect to 4AICode through an OpenAI-compatible interface.

- Base URL: `https://relay.4aicode.com/v1`
- API key: An `sk-4ai-...` token created under [Dashboard → Manage Tokens](https://4aicode.com/tokens)
- Recommended model: `gpt-5.6-terra`; use `gpt-6-astra` for flagship tasks and `gpt-5.4-mini` or `gemini-3.8-flash` for lightweight tasks

## Droid

Droid is Factory's command-line coding agent. See [Factory BYOK](https://docs.factory.ai/cli/byok/overview) for the official documentation.

First, store your 4AICode token in an environment variable:

```bash
export RELAY4AI_API_KEY=sk-4ai-xxxxxxxxxxxxxxxx
```

Edit `~/.factory/settings.json`:

```json
{
  "customModels": [
    {
      "model": "4aicode-gpt-5.6-terra",
      "displayName": "4AICode GPT 5.6 Terra",
      "baseUrl": "https://relay.4aicode.com/v1",
      "apiKey": "${RELAY4AI_API_KEY}",
      "provider": "generic-chat-completion-api",
      "maxOutputTokens": 16384,
      "index": 0,
      "id": "custom:4AICode-GPT-5.6-Terra-0"
    },
    {
      "model": "4aicode-gpt-5.6-sol",
      "displayName": "4AICode GPT 5.6 Sol",
      "baseUrl": "https://relay.4aicode.com/v1",
      "apiKey": "${RELAY4AI_API_KEY}",
      "provider": "generic-chat-completion-api",
      "maxOutputTokens": 16384,
      "index": 1,
      "id": "custom:4AICode-GPT-5.6-Sol-1"
    },
    {
      "model": "4aicode-gpt-6-astra",
      "displayName": "4AICode GPT 6 Astra",
      "baseUrl": "https://relay.4aicode.com/v1",
      "apiKey": "${RELAY4AI_API_KEY}",
      "provider": "generic-chat-completion-api",
      "maxOutputTokens": 16384,
      "index": 2,
      "id": "custom:4AICode-GPT-6-Astra-2"
    },
    {
      "model": "4aicode-gpt-5.4-mini",
      "displayName": "4AICode GPT 5.4 Mini",
      "baseUrl": "https://relay.4aicode.com/v1",
      "apiKey": "${RELAY4AI_API_KEY}",
      "provider": "generic-chat-completion-api",
      "maxOutputTokens": 16384,
      "index": 3,
      "id": "custom:4AICode-GPT-5.4-Mini-3"
    },
    {
      "model": "gemini-3.8-flash",
      "displayName": "4AICode Gemini 3.8 Flash",
      "baseUrl": "https://relay.4aicode.com/v1",
      "apiKey": "${RELAY4AI_API_KEY}",
      "provider": "generic-chat-completion-api",
      "maxOutputTokens": 16384,
      "index": 4,
      "id": "custom:4AICode-Gemini-3.8-Flash-4"
    }
  ],
  "model": "custom:4AICode-GPT-5.6-Terra-0",
  "sessionDefaultSettings": {
    "model": "custom:4AICode-GPT-5.6-Terra-0"
  }
}
```

After saving the file, restart Droid. Run `droid` to enter interactive mode, then use `/model` to select `4AICode GPT 5.6 Terra`.

The `4aicode-gpt-*` aliases are used intentionally instead of specifying `gpt-5.6-terra` directly. This makes Droid treat the model as a generic Chat Completions model. The 4AICode gateway then maps the alias to the actual Codex model, preventing GPT-5 / Responses API provider validation warnings at startup.

Example in headless mode:

```bash
droid exec --model "custom:4AICode-GPT-5.6-Terra-0" "summarize this repository"
```

Explicitly select Sol when you need the flagship model:

```bash
droid exec --model "custom:4AICode-GPT-5.6-Sol-1" "refactor this repository"
```

To use the lightweight model:

```bash
droid exec --model "custom:4AICode-GPT-5.4-Mini-3" "fix typos in docs"
```

To use Gemini 3.8 Flash:

```bash
droid exec --model "custom:4AICode-Gemini-3.8-Flash-4" "analyze this repository"
```

## Pi

Pi is the command-line coding agent from [pi.dev](https://pi.dev/). Its custom model configuration file is `~/.pi/agent/models.json`. See [Pi Custom Models](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/models.md) for the official documentation.

First, store your 4AICode token in an environment variable:

```bash
export RELAY4AI_API_KEY=sk-4ai-xxxxxxxxxxxxxxxx
```

Edit `~/.pi/agent/models.json`. When referencing an environment variable in Pi's `apiKey`, include the `$` prefix: `$RELAY4AI_API_KEY`.

```json
{
  "providers": {
    "4aicode": {
      "baseUrl": "https://relay.4aicode.com/v1",
      "api": "openai-responses",
      "apiKey": "$RELAY4AI_API_KEY",
      "authHeader": true,
      "models": [
        {
          "id": "gpt-5.6-terra",
          "name": "4AICode GPT 5.6 Terra",
          "reasoning": true,
          "maxTokens": 16384
        },
        {
          "id": "gpt-5.6-sol",
          "name": "4AICode GPT 5.6 Sol",
          "reasoning": true,
          "maxTokens": 16384
        },
        {
          "id": "gpt-6-astra",
          "name": "4AICode GPT 6 Astra",
          "reasoning": true,
          "maxTokens": 16384
        },
        {
          "id": "gpt-5.4-mini",
          "name": "4AICode GPT 5.4 Mini",
          "reasoning": true,
          "maxTokens": 16384
        },
        {
          "id": "gemini-3.8-flash",
          "name": "4AICode Gemini 3.8 Flash",
          "reasoning": false,
          "maxTokens": 16384
        }
      ]
    }
  }
}
```

Run:

```bash
pi --provider 4aicode --model gpt-5.6-terra
```

You can also use `/model` in Pi's interactive interface to switch to `4AICode GPT 5.6 Terra`.

Explicitly select Sol when you need the flagship model:

```bash
pi --provider 4aicode --model gpt-5.6-sol
```

Use Astra:

```bash
pi --provider 4aicode --model gpt-6-astra
```

To use Gemini 3.8 Flash:

```bash
pi --provider 4aicode --model gemini-3.8-flash
```

## Verification

After completing the configuration, send a `ping` message. Then open [Dashboard → Usage History](https://4aicode.com/dashboard). If the corresponding model appears in the request history, the configuration was successful.

Verify using Gemini 3.8 Flash:

```bash
pi --provider 4aicode --model gemini-3.8-flash "ping"
```
