Skip to content

Pi

Pi is Earendil Works' minimal coding harness which you adapt to your workflows. It ships with solid basics and you make it do what you need from there through extensions. Route it through Hyper using our OpenAI Completions endpoints.

Prerequisites

  • A Hyper account with an API key
  • Pi installed

Configuration

Set this environment variable, or skip if you use a password manager:

bash
export HYPER_API_KEY="sk-hyper-xxxxxxxxxxxxxxxxxxxxxxxx"

Then add this to your ~/.pi/agent/models.json, or if you've set $PI_CODING_AGENT_DIR, add it to $PI_CODING_AGENT_DIR/models.json:

json
{
  "providers": {
    "hyper": {
      "baseUrl": "https://hyper.charm.land/v1",
      "api": "openai-completions",
      "apiKey": "$HYPER_API_KEY",
      "models": [
        {
          "id": "deepseek-v4-flash",
          "name": "DeepSeek V4 Flash",
          "reasoning": true,
          "input": [
            "text"
          ],
          "contextWindow": 1000000,
          "maxTokens": 384000,
          "cost": {
            "input": 0.2,
            "output": 0.4,
            "cacheRead": 0.04,
            "cacheWrite": 0
          }
        },
        {
          "id": "deepseek-v4-pro",
          "name": "DeepSeek V4 Pro",
          "reasoning": true,
          "input": [
            "text"
          ],
          "contextWindow": 1000000,
          "maxTokens": 384000,
          "cost": {
            "input": 2.4,
            "output": 4.8,
            "cacheRead": 0.2,
            "cacheWrite": 0
          }
        },
        {
          "id": "gemma-4-26b-a4b-it",
          "name": "Gemma 4 26B A4B",
          "reasoning": false,
          "input": [
            "text"
          ],
          "contextWindow": 256000,
          "maxTokens": 25600,
          "cost": {
            "input": 0.13,
            "output": 0.424,
            "cacheRead": 0,
            "cacheWrite": 0.065
          }
        },
        {
          "id": "glm-5",
          "name": "GLM-5",
          "reasoning": false,
          "input": [
            "text"
          ],
          "contextWindow": 202752,
          "maxTokens": 20275,
          "cost": {
            "input": 0.81,
            "output": 2.624,
            "cacheRead": 0,
            "cacheWrite": 0.405
          }
        },
        {
          "id": "glm-5.1",
          "name": "GLM-5.1",
          "reasoning": true,
          "input": [
            "text"
          ],
          "contextWindow": 202800,
          "maxTokens": 131072,
          "cost": {
            "input": 1.52432,
            "output": 4.79072,
            "cacheRead": 0.283088,
            "cacheWrite": 0
          }
        },
        {
          "id": "glm-5.2",
          "name": "GLM-5.2",
          "reasoning": true,
          "input": [
            "text"
          ],
          "contextWindow": 1000000,
          "maxTokens": 128000,
          "cost": {
            "input": 1.4,
            "output": 4.4,
            "cacheRead": 0.28,
            "cacheWrite": 0
          }
        },
        {
          "id": "gpt-oss-120b",
          "name": "gpt-oss-120b",
          "reasoning": true,
          "input": [
            "text"
          ],
          "contextWindow": 131072,
          "maxTokens": 13107,
          "cost": {
            "input": 0.176,
            "output": 0.652,
            "cacheRead": 0,
            "cacheWrite": 0.088
          }
        },
        {
          "id": "kimi-k2.5",
          "name": "Kimi K2.5",
          "reasoning": false,
          "input": [
            "text"
          ],
          "contextWindow": 262144,
          "maxTokens": 26214,
          "cost": {
            "input": 0.528,
            "output": 2.79,
            "cacheRead": 0,
            "cacheWrite": 0.264
          }
        },
        {
          "id": "kimi-k2.6",
          "name": "Kimi K2.6",
          "reasoning": true,
          "input": [
            "text",
            "image"
          ],
          "contextWindow": 262000,
          "maxTokens": 262000,
          "cost": {
            "input": 0.95,
            "output": 4,
            "cacheRead": 0,
            "cacheWrite": 0.16
          }
        },
        {
          "id": "kimi-k2.7-code",
          "name": "Kimi K2.7 Code",
          "reasoning": false,
          "input": [
            "text",
            "image"
          ],
          "contextWindow": 256000,
          "maxTokens": 16000,
          "cost": {
            "input": 0.95,
            "output": 4,
            "cacheRead": 0.19,
            "cacheWrite": 0
          }
        },
        {
          "id": "kimi-k3",
          "name": "Kimi K3",
          "reasoning": false,
          "input": [
            "text",
            "image"
          ],
          "contextWindow": 1048576,
          "maxTokens": 131072,
          "cost": {
            "input": 3.2664,
            "output": 16.332,
            "cacheRead": 0.32664,
            "cacheWrite": 0
          }
        },
        {
          "id": "llama-3.3-70b-instruct",
          "name": "Llama 3.3 70B Instruct",
          "reasoning": false,
          "input": [
            "text"
          ],
          "contextWindow": 128000,
          "maxTokens": 12800,
          "cost": {
            "input": 0.6066,
            "output": 1.0386,
            "cacheRead": 0,
            "cacheWrite": 0.3033
          }
        },
        {
          "id": "llama-4-maverick-17b-128e-instruct-fp8",
          "name": "Llama 4 Maverick 17B 128E Instruct FP8",
          "reasoning": false,
          "input": [
            "text"
          ],
          "contextWindow": 430000,
          "maxTokens": 43000,
          "cost": {
            "input": 0.284,
            "output": 0.934,
            "cacheRead": 0,
            "cacheWrite": 0.142
          }
        },
        {
          "id": "minimax-m2.7",
          "name": "MiniMax M2.7",
          "reasoning": false,
          "input": [
            "text"
          ],
          "contextWindow": 204800,
          "maxTokens": 20480,
          "cost": {
            "input": 0.348,
            "output": 1.332,
            "cacheRead": 0,
            "cacheWrite": 0.174
          }
        },
        {
          "id": "qwen3.6-flash",
          "name": "Qwen3.6-Flash",
          "reasoning": false,
          "input": [
            "text",
            "image"
          ],
          "contextWindow": 1000000,
          "maxTokens": 64000,
          "cost": {
            "input": 1,
            "output": 4,
            "cacheRead": 0.1,
            "cacheWrite": 1.25
          }
        },
        {
          "id": "qwen3.6-max",
          "name": "Qwen3.6-Max",
          "reasoning": false,
          "input": [
            "text"
          ],
          "contextWindow": 256000,
          "maxTokens": 64000,
          "cost": {
            "input": 2,
            "output": 12,
            "cacheRead": 0.2,
            "cacheWrite": 2.5
          }
        },
        {
          "id": "qwen3.6-plus",
          "name": "Qwen3.6-Plus",
          "reasoning": false,
          "input": [
            "text",
            "image"
          ],
          "contextWindow": 1000000,
          "maxTokens": 64000,
          "cost": {
            "input": 2,
            "output": 6,
            "cacheRead": 0.2,
            "cacheWrite": 2.5
          }
        },
        {
          "id": "qwen3.7-flash",
          "name": "Qwen3.7-Flash",
          "reasoning": false,
          "input": [
            "text",
            "image"
          ],
          "contextWindow": 1000000,
          "maxTokens": 64000,
          "cost": {
            "input": 0.2,
            "output": 0.8,
            "cacheRead": 0.04,
            "cacheWrite": 0
          }
        },
        {
          "id": "qwen3.7-max",
          "name": "Qwen3.7-Max",
          "reasoning": false,
          "input": [
            "text"
          ],
          "contextWindow": 1000000,
          "maxTokens": 64000,
          "cost": {
            "input": 2.5,
            "output": 7.5,
            "cacheRead": 0.5,
            "cacheWrite": 0
          }
        },
        {
          "id": "qwen3.7-plus",
          "name": "Qwen3.7-Plus",
          "reasoning": false,
          "input": [
            "text",
            "image"
          ],
          "contextWindow": 1000000,
          "maxTokens": 64000,
          "cost": {
            "input": 1.2,
            "output": 4.8,
            "cacheRead": 0.24,
            "cacheWrite": 0
          }
        },
        {
          "id": "qwen3-coder-480b-a35b-instruct-int4-mixed-ar",
          "name": "Qwen3 Coder 480B A35B Instruct INT4 Mixed AR",
          "reasoning": false,
          "input": [
            "text"
          ],
          "contextWindow": 106000,
          "maxTokens": 10600,
          "cost": {
            "input": 0.569,
            "output": 2.135,
            "cacheRead": 0,
            "cacheWrite": 0.2845
          }
        },
        {
          "id": "qwen3-next-80b-a3b-instruct",
          "name": "Qwen3 Next 80B A3B Instruct",
          "reasoning": false,
          "input": [
            "text"
          ],
          "contextWindow": 262144,
          "maxTokens": 26214,
          "cost": {
            "input": 0.1175,
            "output": 1.136,
            "cacheRead": 0,
            "cacheWrite": 0.05875
          }
        }
      ]
    }
  }
}
## Running Pi

With auth set up via environment variable or command, start Pi normally:

bash
pi

And press Ctrl+L or send /model to list available models, type hyper to filter for Hyper models, or model-name to filter for a specific model, arrow keys to highlight the entry from Hyper, and Enter to select it.