La CLI de DevSpeak envuelve la API pública para flujos de trabajo desde la terminal. Actualmente apunta a POST /api/v1/translate para la generación completa de documentos y a POST /api/v1/refine para revisiones iterativas. El antiguo comando devspeak optimize sigue disponible, pero solo como alias en desuso de devspeak translate.
`` npm install -g @devspeak/clibash
`
`bash
npx @devspeak/cli translate "We need a login page that works with Google and saves user data"
`
> Nota de versión. Esta guía documenta 1.5.1. Las funciones marcadas (1.5.0+) —
> logout, whoami, update, doctor, el aviso pasivo de actualización y el flag global
> --no-color — no están disponibles en 1.4.0 ni en versiones anteriores. Las funciones
> marcadas (1.4.0+) — el comando completion, la ruta de configuración XDG, la validación
> local de flags y el endpoint predeterminado www — no están disponibles en 1.3.0 ni en
> versiones anteriores. En 1.3.0, la configuración vive en ~/.devspeakrc y el endpoint
> predeterminado es el dominio raíz https://devspeak.dev. Actualiza con
> npm install -g @devspeak/cli@latest o devspeak update.Mapeo comando-endpoint
| Comando CLI | Ruta API | Notas |
| ----------------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------- |
| devspeak login | GET /api/v1/health | Solo comprueba conectividad; guarda la configuración de forma local |
| devspeak logout | Ninguna | Elimina la API key almacenada del archivo de configuración local |
| devspeak whoami | Ninguna | Imprime la clave enmascarada, su origen, el endpoint y la ruta de configuración |
| devspeak translate [input] | POST /api/v1/translate | Comando principal. El flag --file adjunta archivos locales como contexto vía attachments[] |
| devspeak optimize [input] | POST /api/v1/translate | Alias en desuso; no llama a POST /api/v1/optimize |
| devspeak refine | POST /api/v1/refine | Envía la salida previa, el feedback y opcionalmente el input original |
| devspeak config show | Ninguna | Solo lee el archivo de configuración local |
| devspeak config set | Ninguna | Solo actualiza el archivo de configuración local |
| devspeak update | Registro de npm | Comprueba registry.npmjs.org en busca de una versión más reciente; --yes la instala |
| devspeak doctor | GET /api/v1/health | Auditoría del entorno: Node, configuración, clave, permisos, salud, versión |
| devspeak completion | Ninguna | Imprime un script de autocompletado para bash, zsh o fish en stdout |
devspeak translate y el alias heredado devspeak optimize serializan el mismo cuerpo de Stage 2 para /api/v1/translate. La CLI no llama a POST /api/v1/optimize.
Si necesitas la optimización léxica de la etapa 1, usa la aplicación web o llama directamente a POST /api/v1/optimize. La CLI no expone un comando para ese endpoint.Autenticación
(1.4.0+) La CLI guarda la configuración en $XDG_CONFIG_HOME/devspeak/config.json, con valor por defecto ~/.config/devspeak/config.json y permisos chmod 600. En 1.3.0 la ruta es ~/.devspeakrc.
Un archivo ~/.devspeakrc preexistente de una versión anterior se sigue leyendo, y se migra a la nueva ubicación la primera vez que se escribe la configuración. El archivo anterior se conserva como ~/.devspeakrc.migrated.
`json
{
"apiKey": "dsk_live_a1b2c3d4...",
"endpoint": "https://www.devspeak.dev",
"defaults": {
"audience": "Senior Dev",
"context": "Backend",
"format": "Technical Spec",
"tone": 75
}
}
`
Prefijos compatibles:
| Prefijo | Significado |
| ----------- | ------------------------------- |
| dsk_live_ | API key de producción |
| dsk_test_ | API key de desarrollo / staging |
| dsk_sess_ | Session key efímera |devspeak login
`bash
devspeak login
`
`bash
devspeak login --key dsk_live_a1b2c3d4... --endpoint https://www.devspeak.dev
`
Comportamiento:
, la variable de entorno DEVSPEAK_API_KEY o pregunta interactivamente... absoluta y elimina una barra final.Un login correcto imprime (en stderr, para mantener stdout apto para pipes):
` Authenticated successfully. Config saved to /Users/you/.config/devspeak/config.jsontext
`devspeak whoami (1.5.0+)
Imprime la identidad activa en stdout: API key enmascarada, origen de la clave, endpoint y ruta de configuración.
`bash
devspeak whoami
`
`text
API key: dsk_live_a1b2...c3d4
Source: config file
Endpoint: https://www.devspeak.dev
Config: /Users/you/.config/devspeak/config.json
`--json emite un objeto legible por máquina (authenticated, apiKey enmascarada, keySource, endpoint, configPath).
tiene prioridad sobre la clave almacenada y se reporta como environment. imprime Not authenticated. con la indicación de ejecutar devspeak login y sale con código 1.. (1.5.0+)Elimina la API key almacenada conservando el endpoint y los valores predeterminados de generación.
` devspeak logoutbash
`No API key stored — nothing to remove. y sale con código 0.
solo la elimina de la configuración local e indica revocarla en Settings → API Keys. está definida, la CLI advierte que la variable de entorno sigue otorgando acceso y debe eliminarse manualmente — no finge eliminar lo que no puede.Imprime la configuración actual y enmascara la API key.
` devspeak config showbash
`
Ejemplo de salida:
`text
{
"apiKey": "dsk_live_a1b2...c3d4",
"endpoint": "https://www.devspeak.dev",
"defaults": {
"audience": "Senior Dev",
"context": "Backend",
"format": "Technical Spec",
"tone": 75
}
}
Config path: /Users/you/.config/devspeak/config.json
`
El JSON se envía a stdout y la ruta de configuración a stderr, por lo que devspeak config show | jq funciona.devspeak config set
Claves compatibles:
` devspeak config set audience "Tech Lead" devspeak config set format "RFC" devspeak config set tone 90 devspeak config set endpoint "https://www.devspeak.dev"bash
`
Los valores se validan contra los mismos conjuntos permitidos que aplica la API, por lo que una audiencia, contexto, formato, tono o endpoint inválido falla localmente y nunca se persiste.
Cada actualización correcta imprime Set .devspeak completion (1.4.0+)
Imprime un script de autocompletado para bash, zsh o fish en stdout.
`bash
devspeak completion bash >> ~/.bashrc
devspeak completion zsh > "${fpath[1]}/_devspeak"
devspeak completion fish > ~/.config/fish/completions/devspeak.fish
`devspeak updateComandos de mantenimiento
(1.5.0+)
Comprueba el registro de npm (https://registry.npmjs.org/@devspeak/cli/latest) en busca de una versión más reciente.
`bash
devspeak update # reporta el estado e imprime el comando exacto de actualización
devspeak update --yes # instala vía npm install -g @devspeak/cli@
`0.
; con --yes ejecuta la instalación con una versión fijada y revalidada (sin interpolación de shell, nada descargado de la red se ejecuta en un shell)., nunca un crash.Como máximo una vez cada 24 horas, un proceso en segundo plano separado refresca la última versión conocida del registro en $XDG_CONFIG_HOME/devspeak/update-check.json. Cuando esa versión en caché es más reciente que la CLI en ejecución, la siguiente invocación imprime una línea en stderr:
` Update available: 1.5.0 → 1.6.0. Run text
devspeak update.
`
La comprobación solo se ejecuta en un TTY, se omite cuando la variable de entorno CI está definida, nunca bloquea ni hace fallar un comando, y puede desactivarse por completo:
`bash
`devspeak doctor (1.5.0+)
Auditoría del entorno en un solo paso. Cada comprobación imprime ✓/✗ con una línea de solución accionable en caso de fallo.
`bash
devspeak doctor
devspeak doctor --json
`
Comprobaciones, en orden:
1. Versión de Node.js ≥ 18
2. El archivo de configuración es JSON válido
3. API key presente y con prefijo dsk_
4. Permisos del archivo de configuración en 0600
5. El endpoint responde a GET /api/v1/health
6. Versión instalada vs la última del registro de npm
Sale con código 0 solo cuando todas las comprobaciones pasan. --json emite { ok, checks: [{ name, ok, detail, fix? }] }.--no-colorFlag global
(1.5.0+)
Fuerza la desactivación del color independientemente de la detección de TTY y de FORCE_COLOR. NO_COLOR y la detección automática sin TTY siguen funcionando como antes.
`bash
devspeak --no-color doctor
`devspeak translate [input]Comandos de traducción
Comando principal para la generación completa de la etapa 2 a través de POST /api/v1/translate.
La CLI no envía ningún modelo fijado, así que el router LLM del servidor elige el modelo gestionado según las señales de la solicitud, salvo que primero se resuelva una credencial BYOK almacenada, en cuyo caso tu proveedor atiende la petición.
Opciones
| Flag | Significado | Predeterminado |
| --------------------------- | ------------------------------------------------------------------------ | ---------------- |
| -a, --audience | Audiencia objetivo | Senior Dev |
| -c, --context | Contexto técnico | Backend |
| -f, --format | Formato de salida | Technical Spec |
| -t, --tone | Nivel de detalle 0..100 | 75 |
| -i, --instructions | Instrucciones personalizadas | ninguna |
| --file | Adjunta un archivo local como contexto (PDF, Markdown, TXT — máx. 10 MB) | ninguna |
| -o, --output | Escribir la salida en un archivo | ninguna |
| --json | Imprimir el payload data crudo como JSON | false |
Valores enum
| Opción | Valores |
| ---------- | ----------------------------------------------------------------------------------------- |
| audience | Junior Dev, Senior Dev, Tech Lead, SRE, Data Engineer |
| context | Backend, Frontend, Mobile, Data/ML, DevOps |
| format | Technical Spec, Jira Tickets, API Design, RFC, Data Model, Prompt, Optimize |
Ejemplos:
`bash
devspeak translate "We need user auth with Google SSO"
`
`bash
cat requirements.txt | devspeak translate --format "Jira Tickets" --output tickets.md
`
`bash
devspeak translate "Add Redis caching for API responses" \
--audience "SRE" \
--context "DevOps" \
--format "RFC" \
--tone 90 \
--instructions "Include monitoring and alerting requirements"
`
Si no se proporciona input posicional, la CLI lee desde stdin. Si se ejecuta de forma interactiva sin argumento posicional ni datos por tubería, termina con una pista de uso.
Comportamiento de salida:
, el Markdown generado se escribe en stdout., latencyMs, model) se escribe en stderr., la CLI imprime el payload data devuelto por la API, no el envelope completo { success, data }., la CLI escribe el archivo y muestra Written to en stderr antes del resumen de metadatos.)El flag --file lee un archivo local, lo codifica en base64 y lo envía en el campo attachments del cuerpo de la solicitud POST /api/v1/translate. En el servidor, el contenido de los archivos de texto se decodifica e inyecta como bloque de contexto junto al contexto de workspace enviado al LLM.
Tipos compatibles: .pdf Límite: 10 MB — validado localmente antes de cualquier llamada de red., .md, .mdx, .txt
`bash
devspeak translate "Implementar el flujo de autenticación" \
--file ./docs/requerimientos.pdf \
--audience "Tech Lead" \
--format "Technical Spec" \
--tone 85
`
`bash
devspeak translate "Agregar caché Redis para respuestas de API" \
--audience "SRE" \
--context "DevOps" \
--format "RFC" \
--tone 90 \
--instructions "Incluir requisitos de monitoreo y alertas" \
--file ./runbooks/estandares-cache.md
`
`bash
cat feature-notes.txt | devspeak translate \
--file ./architecture/current-state.md \
--format "RFC"
`
Comportamiento de errores:
(no contaminan stdout).> Nota sobre PDFs: los archivos .pdf se codifican en base64 y se envían al modelo como adjunto de documento, por lo que su contenido se lee por completo. La calidad de la extracción depende del PDF: un documento escaneado sin capa de texto incrustada aporta poco contexto util.devspeak optimize [input]
Alias heredado por compatibilidad. Usa las mismas flags y envía exactamente el mismo cuerpo de petición a POST /api/v1/translate.
` devspeak optimize "We need user auth with Google SSO"bash
`
Cuando se usa, la CLI imprime una advertencia de deprecación en stderr:
`text
[DEPRECATED] devspeak optimize is deprecated. Use devspeak translate instead.
`devspeak refineComando de refinamiento
Envuelve POST /api/v1/refine.
Opciones obligatorias
| Flag | Significado |
| ----------------------- | ------------------------------------------------------------------------------------- |
| -p, --previous | Salida previa que se va a refinar. Usa @ruta/al/archivo.md para cargar desde disco. |
| -F, --feedback | Solicitud concreta de cambio |
Flags opcionales
| Flag | Significado | Predeterminado |
| ------------------------ | ------------------------------------------ | ---------------- |
| -r, --original | Texto de entrada original para contexto | "" |
| -a, --audience | Audiencia objetivo | Senior Dev |
| -c, --context | Contexto técnico | Backend |
| -f, --format | Formato de salida | Technical Spec |
| -t, --tone | Nivel de detalle 0..100 | 75 |
| -o, --output | Escribir la salida en un archivo | ninguna |
| --json | Imprimir el payload data crudo como JSON | false |
Ejemplos:
`bash
devspeak refine \
--previous @spec.md \
--feedback "Add a section on rate limiting and explicit error codes" \
--original "We need a login page that works with Google and saves user data"
`
`bash
devspeak refine \
--previous "## Technical Specification..." \
--feedback "Make it more concise" \
--tone 40 \
--json
`
La salida de refine sigue las mismas convenciones de stdout y stderr que translate.
Cuando --previous empieza por @, la CLI carga el archivo desde disco y termina con error si el archivo no existe.Planes y cuota gratuita de API
Todos los planes pueden crear una clave API en Settings → API Keys. En GRATIS y VIBECODER tienes una clave y 50 solicitudes a la API por mes calendario (UTC) con el modelo predeterminado de DevSpeak, y el límite por hora del plan GRATIS sigue aplicando. Cada llamada a translate u optimize cuenta como una solicitud; una solicitud que falla no cuenta. DEVELOPER y superiores no tienen límite mensual de solicitudes, admiten hasta 3 claves (ilimitadas en ENTERPRISE) y pueden elegir cualquier modelo gestionado con el campo managedModel de la API (el servidor MCP lo expone como argumento).Errores y notas operativas
| Mensaje | Significado |
| ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| No API key configured. Run \devspeak login\ first. | Faltan credenciales locales |
| Invalid API key format. Keys start with dsk_live_ or dsk_test_ | Falló la validación del prefijo |
| Cannot reach API at ... | Falló la comprobación de conectividad con el endpoint |
| Provide input text as argument or pipe via stdin | translate se ejecutó de forma interactiva sin argumento posicional ni datos por tubería |
| Input must be at least 10 characters | El input de translate está por debajo del mínimo del servidor |
| File not found: ... | translate --file apunta a un archivo inexistente |
| Previous output must not be empty | refine --previous se resolvió a un valor vacío |
| Feedback must not be empty | refine --feedback falta o está vacío |
| Free API allowance used: ... | Se agotaron las 50 solicitudes mensuales de GRATIS o VIBECODER; el mensaje indica la fecha de reinicio y el enlace para mejorar el plan |
| The free API allowance runs on DevSpeak's default model ... | Se fijó un managedModel` en GRATIS o VIBECODER (API o MCP); quítalo o mejora a DEVELOPER |
Para ver los contratos REST subyacentes, consulta [/docs/api-reference](/docs/api-reference).