Pi.
Pi es un agente de terminal deliberadamente pequeño: un armazón mínimo que se adapta a tu forma de trabajar en vez de imponerte la suya. Habla el formato de OpenAI, así que NaN entra como un proveedor más.
Se instala con curl -fsSL https://pi.dev/install.sh | sh, o en Windows con powershell -c "irm https://pi.dev/install.ps1 | iex".
Puedes saltarte todo esto
El CLI de NaN escribe esta configuración por ti: pestaña Setup, e para pegar tu clave, espacio para marcar Pi, c para aplicar.
Configuración
Declara el proveedor
En ~/.pi/agent/models.json:
{
"providers": {
"nan": {
"baseUrl": "https://api.nan.builders/v1",
"api": "openai-completions",
"apiKey": "sk-your-key",
"compat": { "supportsDeveloperRole": true },
"models": [
{
"id": "deepseek-v4-flash",
"name": "DeepSeek V4 Flash",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1048576,
"maxTokens": 32768
},
{
"id": "glm5.3-flash",
"name": "GLM 5.3 Flash",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1048576,
"maxTokens": 32768
},
{
"id": "qwen3.8-flash",
"name": "Qwen 3.8 Flash",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1048576,
"maxTokens": 32768
},
{
"id": "mimo-v2.6-flash",
"name": "Xiaomi MiMo V2.6 Flash",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1048576,
"maxTokens": 32768
},
{
"id": "gemma4",
"name": "Gemma 4",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 262144,
"maxTokens": 65536
},
{
"id": "qwen3.6",
"name": "Qwen 3.6",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 262144,
"maxTokens": 65536
},
{
"id": "glm5.3",
"name": "GLM 5.3 (premium)",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1048576,
"maxTokens": 32768
}
]
}
}
}Esta es la configuración de los 7 modelos LLM que sirve NaN: deepseek-v4-flash, glm5.3-flash, qwen3.8-flash, mimo-v2.6-flash, gemma4, qwen3.6 y glm5.3. Es el mismo conjunto que escribe el CLI de NaN, y el mismo que publica la página de OpenCode.
api: "openai-completions" es lo que le dice a Pi con qué formato hablar. maxTokens es el techo de una respuesta, no el contexto. Es la misma cifra que el bloque de OpenCode publica como limit.output, porque responde a la misma pregunta.
Ponlo por defecto
En ~/.pi/agent/settings.json:
{
"defaultProvider": "nan",
"defaultModel": "glm5.3-flash"
}Este paso no es opcional
Sin defaultProvider y defaultModel, Pi sigue usando su proveedor de fábrica y lo que recibes es un 401. Es el fallo más habitual al conectarlo, y el mensaje de error no dice que el problema sea este fichero.
Pruébalo
piPídele algo corto. Si contesta, está saliendo por el clúster. Puedes cambiar de modelo a mitad de sesión sin salir del agente.
Modelo recomendado
glm5.3-flash para trabajo de código. deepseek-v4-flash para lo demás, que además tiene la cuota más amplia del clúster.
Problemas conocidos
- La clave va escrita en el fichero.
models.jsonvive en tu carpeta personal, así que no suele acabar en un repositorio, pero tenlo en cuenta si sincronizas tu configuración entre máquinas. maxTokensno es el contexto. Es el techo de cada respuesta. El razonamiento sale de ese mismo presupuesto, así que si pides respuestas largas y razonadas, súbelo.- Los modelos que declares son los que verás. Pi no le pregunta al clúster qué hay disponible: muestra lo que haya en la lista.
mimo-v2.6-flashentra sin su audio, yglm5.3sin su audio ni su vídeo. El esquema de Pi acepta"text"e"image"eninputy nada más, y un tercer valor no tumba solo a ese modelo: Pi rechaza el fichero entero, con todos los demás proveedores que haya dentro. Los dos los siguen aceptando por la API, pero no desde Pi.glm5.3necesita una clave del tier premium. Está en la lista para que quien lo tenga lo vea. Sin ese tier la respuesta es un401, explicado en Elige tu modelo.