lm-studio
LM Studio CLI & API
Workflow completo para usar modelos locales con LM Studio: setup → uso → cleanup.
Fase 0 — Verificar LM Studio
which lms
Si no existe: LM Studio incluye lms desde v0.2.22+. Descargar desde https://lmstudio.ai e iniciar la app al menos una vez para que se registre el CLI en PATH.
lms status
Verifica si la app o el daemon están corriendo. Si no corre nada, iniciar LM Studio o usar lms daemon up para modo headless.
Fase 1 — Setup: Servidor + Modelo
1a — Levantar servidor
lms server start --port 1234
lms server status
Agregar --cors solo si se necesita acceso desde browser o extensiones (VS Code, etc) — implica un riesgo de seguridad.
1b — Descargar modelo (si no tiene uno)
lms get # muestra modelos recomendados
lms get llama-3.1-8b # descarga quant recomendada
lms get llama-3.1-8b@q4_k_m # quantización específica
lms get --mlx # solo modelos MLX (Apple Silicon)
lms get --gguf # solo modelos GGUF
Verificar modelos descargados:
lms ls # lista legible
lms ls --json # para parsear programáticamente
lms ls --llm # solo LLMs (excluye embeddings)
1c — Cargar modelo en memoria
Antes de cargar, estimar uso de memoria:
lms load --estimate-only <model>
Cargar con configuración de GPU:
lms load <model> --gpu <valor> --context-length 4096
Configuración de GPU:
| VRAM disponible | --gpu |
Notas |
|---|---|---|
| ≥16 GB | max |
Full GPU offload, máxima velocidad |
| 8–16 GB | auto |
LM Studio decide el split óptimo |
| 4–8 GB | 0.5–0.8 |
Offload parcial, ajustar por modelo |
| <4 GB / sin GPU | off |
Solo CPU, más lento pero funciona |
Flags adicionales útiles:
--identifier "mi-modelo"— nombre custom para referenciarlo en la API--ttl 3600— auto-descarga del modelo tras 1h de inactividad--host 192.168.1.5— cargar en instancia remota
Verificar modelo cargado:
lms ps
Fase 2 — Uso: Texto y Archivos
Chat rápido por CLI
lms chat <model> -p "tu prompt acá"
lms chat <model> -p "Resumí esto: $(cat archivo.txt)"
lms chat <model> -s "Sos un experto en seguridad" -p "analizá este log"
lms chat <model> --stats # muestra tokens/segundo al final
Ctrl+C detiene la generación en cualquier momento.
Via API — Los 3 endpoints
Una vez que el servidor está corriendo, hay 3 formas de acceder:
API Nativa (/api/v1/chat) — stateful chats, MCP, reasoning, streaming events:
curl http://localhost:1234/api/v1/chat \
-H "Content-Type: application/json" \
-d '{
"model": "model-id",
"input": "Analizá este texto: ...",
"stream": false
}'
OpenAI-compatible (/v1/chat/completions) — tools, structured output, drop-in replacement:
curl http://localhost:1234/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "model-id",
"messages": [{"role": "user", "content": "Hello"}]
}'
Anthropic-compatible (/v1/messages) — requiere LM Studio 0.4.1+:
curl http://localhost:1234/v1/messages \
-H "x-api-key: lm-studio" \
-H "Content-Type: application/json" \
-d '{
"model": "model-id",
"messages": [{"role": "user", "content": "Hello"}],
"max_tokens": 1024
}'
Enviar archivo grande via API
CONTENT=$(cat archivo.txt)
curl http://localhost:1234/v1/chat/completions \
-H "Content-Type: application/json" \
-d "$(jq -n --arg c "$CONTENT" \
'{"model":"model-id","messages":[{"role":"user","content":("Analizá esto:\n"+$c)}]}')"
Desde SDKs (Python/TypeScript)
Apuntar cualquier SDK de OpenAI o Anthropic a localhost. El valor de api_key no importa si auth está deshabilitado (default):
# OpenAI SDK
from openai import OpenAI
client = OpenAI(base_url="http://localhost:1234/v1", api_key="lm-studio")
# Anthropic SDK (requiere 0.4.1+)
from anthropic import Anthropic
client = Anthropic(base_url="http://localhost:1234", api_key="lm-studio")
// OpenAI SDK (TypeScript)
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "http://localhost:1234/v1", apiKey: "lm-studio" });
Comparación de endpoints
| Feature | Nativo /api/v1/chat |
OpenAI /v1/chat/completions |
Anthropic /v1/messages |
|---|---|---|---|
| Streaming | ✅ | ✅ | ✅ |
| Stateful chats | ✅ | ❌ | ❌ |
| MCP integration | ✅ | ❌ | ❌ |
| Custom tools | ❌ | ✅ | ✅ |
| Reasoning modes | ✅ | ✅ | ❌ |
| Context length override | ✅ | ❌ | ❌ |
Para más detalles sobre la API nativa (stateful chats, MCP, schemas completos): ver references/lms-commands.md.
Fase 3 — Cleanup
Cuando terminás de usar LM Studio:
lms unload --all # liberar memoria de todos los modelos
lms server stop # parar servidor HTTP
lms daemon down # cerrar daemon (si se usó modo headless)
Verificar que todo está limpio:
lms ps # debería estar vacío
lms server status # debería decir "not running"
Si preferís, simplemente cerrar la app de LM Studio hace todo esto automáticamente.
Gotchas
- LM Studio debe abrirse al menos una vez antes de que
lmsfuncione — la primera ejecución registra el CLI en PATH --corses necesario para acceso desde browser/VS Code pero es un riesgo de seguridad — solo habilitarlo cuando se necesite--ttlenlms loadno tiene default → el modelo queda cargado indefinidamente. Enlms chatel default es 3600s (1h)- Endpoint Anthropic-compat requiere v0.4.1+ (no 0.4.0)
lms importpor default mueve el archivo original, no copia. Usar--copyo--symbolic-linkpara preservar- Auth es opt-in: si se activa en Server Settings, los tokens se generan una sola vez — guardarlos inmediatamente
flash_attentionyeval_batch_sizesolo aplican al engine llama.cpp, no a MLX- Si un modelo falla al cargar sin error claro → verificar engine compatible con
lms runtime ls
Troubleshooting
| Problema | Solución |
|---|---|
lms no encontrado |
Abrir LM Studio al menos una vez |
| Modelo no carga / OOM | lms load --estimate-only <model>, reducir --gpu |
| Puerto ocupado | lms server start --port <otro> |
| Server no responde | lms server status + lms log stream |
| Runtime incompatible | lms runtime ls, probar otro engine |
| Auth rechazado | Verificar token en Server Settings → Manage Tokens |
More from testacode/llm-toolkit
claude-md-writer
Escribe y mejora archivos CLAUDE.md siguiendo best practices de Anthropic. Este skill se activa cuando el usuario dice "crear CLAUDE.md", "mejorar CLAUDE.md", "actualizar CLAUDE.md", "revisar CLAUDE.md", "escribir instrucciones del proyecto", "create CLAUDE.md", "improve CLAUDE.md", "review CLAUDE.md", "write project instructions", "optimize docs for Claude", "auditar CLAUDE.md", "audit CLAUDE.md", "limpiar CLAUDE.md", "dead weight", o configura un nuevo repositorio.
53doc-writer
Este skill se usa para crear documentos tecnicos organizados en /docs (specs, planes de implementacion, ADRs, documentacion de referencia). Se activa cuando el usuario dice "crear documento", "escribir spec", "documentar esto", "creame una spec", "escribime documentacion", "hacer documentacion", "write a spec", "create documentation", "write an ADR", o quiere agregar documentacion tecnica al proyecto.
44llms-txt-generator
This skill generates llms.txt documentation optimized for AI/LLM consumption. It should be used when the user says "crear llms.txt", "generate llms.txt", "documentar para AI", "document for AI", "crear documentacion para LLMs", "generate docs for LLMs", "make repo readable for Claude", or wants to create structured machine-readable documentation following the llms.txt standard.
40doc-organizer
Este skill se usa cuando el usuario pide "organizar docs", "ordenar documentacion", "mover documentos a carpetas", "categorizar archivos md", "reorganizar documentacion", o cuando hay archivos .md sueltos en docs/ que necesitan ser movidos a subcarpetas tematicas. Organiza y categoriza documentos tecnicos en la estructura correcta del proyecto.
28feature-planner
Planifica features con entrevista estructurada y crea tareas. Este skill se activa cuando el usuario dice "quiero agregar", "planificar feature", "nueva funcionalidad", "implementar esto", "crear plan", "planificar antes de codear", "disenar feature", "como deberia implementar esto", "pensar la arquitectura", o quiere alinear antes de escribir codigo.
27nextjs-project-starter
Creates Next.js projects with a configurable stack (Mantine, Supabase, Zustand, Zod). This skill should be used when the user says "create a Next.js project", "new web project", "bootstrap fullstack app", "start new app", "crear proyecto Next.js", "nuevo proyecto web", "empezar app fullstack", or wants to scaffold a new personal project from scratch.
25