Appearance
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
## Running Pi {
"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
}
}
]
}
}
}With auth set up via environment variable or command, start Pi normally:
bash
piAnd 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.
