@ecando/lmcode
v0.1.3
Published
Autonomous local coding agent CLI for LM Studio
Maintainers
Readme
lmcode
CLI de agente de programacion local para LM Studio.
lmcode trabaja sobre el proyecto actual y puede leer archivos, buscar texto, ejecutar comandos seguros, modificar codigo y pedir confirmacion solo para acciones peligrosas como borrado o comandos destructivos.
Tambien incluye:
- interfaz interactiva avanzada para una UX mas rica
- modo de permisos configurable:
read-only,workspace-write,danger-full-access /statuspara inspeccionar la sesion actual/diffpara ver cambios git pendientes/doctorpara diagnosticar LM Studio y el entorno local
Requisitos
- Node.js 20 o superior
- LM Studio instalado
- El servidor local de LM Studio levantado
- Al menos un modelo cargado en LM Studio
Por defecto lmcode usa http://127.0.0.1:1234.
Instalacion
Desde npm
npm install -g @ecando/lmcodeDesde este repo
npm install
npm run check
npm test
npm linkSi no quieres usar npm link, puedes instalar el binario localmente con:
npm run install:localEjecucion
Ver modelos detectados
lmcode --modelsModo interactivo
lmcodePor defecto, en TTY usa la interfaz avanzada. Si quieres volver a la interfaz clasica:
lmcode --ui classicPrompt unico
lmcode "analiza este proyecto y dime los riesgos principales"Forzar modelo
lmcode --model qwen/qwen3.5-9b
lmcode --model qwen/qwen3.5-9b "explica este modulo"Diagnosticar el entorno local
lmcode --doctorCambiar modo de permisos
lmcode --permission-mode read-only
lmcode --permission-mode workspace-write
lmcode --dangerously-skip-permissionsElegir interfaz
lmcode --ui auto
lmcode --ui react
lmcode --ui classicCambiar URL o system prompt por comando
lmcode --base-url http://127.0.0.1:1234 --model qwen/qwen3.5-9b
lmcode --system "Eres un agente local experto en Node.js" "revisa este repo"Agregar archivos iniciales al contexto
lmcode --add src/app.js --add package.json "explica la arquitectura"Configuracion
Puedes configurar lmcode con variables de entorno.
URL del servidor LM Studio
export LMSTUDIO_BASE_URL="http://127.0.0.1:1234"Modelo por defecto
export LMSTUDIO_MODEL="qwen/qwen3.5-9b"Tambien se acepta OPENAI_MODEL.
API key opcional
Si tu servidor local requiere token:
export LMSTUDIO_API_KEY="tu-token"Tambien se aceptan OPENAI_API_KEY y API_KEY.
System prompt
export SYSTEM_PROMPT="Eres un agente local experto en TypeScript y React."Ventana de contexto
export LMCODE_CONTEXT_TOKENS=8192Tambien se aceptan LMSTUDIO_CONTEXT_TOKENS y CONTEXT_WINDOW.
Modo de permisos por defecto
export LMCODE_PERMISSION_MODE="workspace-write"Interfaz por defecto
export LMCODE_UI="auto"Desactivar color
export NO_COLOR=1Comandos interactivos
/help: muestra ayuda corta/models: lista modelos/model: selector interactivo de modelo/model <id>: cambia o carga un modelo por id/load: alias de/model/load <id>: carga un modelo por id/status: muestra estado de sesion, contexto y permisos/permissions: muestra el modo de permisos actual/permissions <modo>: cambia permisos aread-only,workspace-writeodanger-full-access/doctor: revisa el entorno local y LM Studio/files [filtro]: lista archivos del proyecto/add <ruta>: agrega archivos al contexto manual/drop <ruta>: quita archivos del contexto/context: muestra el contexto actual/read <ruta>: muestra un archivo/run <comando>: ejecuta un comando y guarda la salida en contexto/diff: muestra el diff actual del repositorio git/patch <inst>: pide un diff unificado/apply <inst>: propone cambios y los aplica/summary: muestra el resumen acumulado/compact: fuerza compactacion del historial/clear: limpia la conversacion/reset: reinicia conversacion, archivos y salida de comandos/exit: sale
Como trabaja el agente
En el flujo normal, lmcode entra a un loop de agente. El modelo puede:
- leer archivos
- listar archivos
- buscar texto
- ejecutar comandos seguros
- escribir archivos
- pedir borrado con confirmacion
- cerrar con una respuesta final
Los cambios de codigo se aplican mostrando diff. Los comandos peligrosos y el borrado requieren aprobacion.
Interfaz avanzada
La UI interactiva moderna renderiza:
- header liviano con modelo, proyecto, permisos y presupuesto de contexto
- flujo principal mas limpio, con menos cajas persistentes
- panel de actividad en tiempo real
- panel lateral reducido para sesion, acciones y contexto
- paleta de comandos con
Ctrl+P - selector visual de archivos/contexto con
Ctrl+O - autocompletado de comandos slash con
Tab - historial de prompts con
↑y↓ - prompt inferior persistente con ayudas cortas de uso
Si la interfaz avanzada falla al iniciar y estas en --ui auto, lmcode vuelve automaticamente a la interfaz clasica.
Modos de permisos
read-only: permite inspeccion, pero bloquea/run, escrituras y borradosworkspace-write: comportamiento normal con confirmacion para acciones peligrosasdanger-full-access: evita confirmaciones de comandos peligrosos y borrados
Desarrollo
npm install
npm run check
npm testPublicacion automatica en npm con GitHub Actions
El repo incluye un workflow en .github/workflows/publish-npm.yml que publica desde GitHub Actions sin guardar un NPM_TOKEN, usando Trusted Publishing de npm.
El flujo hace esto:
- corre CI de validacion en pushes y pull requests con
.github/workflows/ci.yml - corre
npm run check - corre
npm test - corre
npm run pack:check - valida que el tag Git coincida con la version de
package.json - revisa si la version actual de
package.jsonya existe en npm - publica solo si esa version todavia no fue publicada
- crea el release de GitHub para ese tag con notas autogeneradas
Para sacar una nueva version:
- actualiza el campo
versionenpackage.json - crea un tag
v<version> - sube commit y tag al repo en GitHub
Ejemplo:
npm version patch
git push origin main --follow-tagsConfiguracion inicial obligatoria en npm:
- Entra a la configuracion del paquete
@ecando/lmcodeen npm. - Agrega un
Trusted Publisherpara GitHub Actions. - Usa exactamente tu usuario u organizacion, el nombre del repo, el workflow
publish-npm.ymly el environmentnpm.
Con eso ya no hace falta guardar un NPM_TOKEN de escritura en GitHub. Si la version ya existe, el workflow termina sin publicar.
Las notas del release se generan automaticamente con GitHub Release Notes y se pueden ajustar desde .github/release.yml.
Si quieres revisar exactamente lo que saldra al registro antes de subir:
npm run pack:checkNombre publicado
El paquete se publica como @ecando/lmcode, pero el comando instalado sigue siendo:
lmcode