Tooling de desarrollo con IA. 2026. Autor. Python, PTY, VAD, STT y TTS.

J.A.R.V.I.S.

Un sistema de interacción manos libres para desarrollo: un envoltorio de PTY, un lexer en streaming, detección de actividad de voz en tiempo real y adaptadores intercambiables de STT, TTS y LLM.

Rol
Autor
Construido en
2026
Superficie
CLI
Stack
Python
Código en GitHub Índice
Fig. 01
$ jarvis attach -- zsh

[vad]  listening
[stt]  "run the integration suite"
[pty]  $ pytest tests/integration -q
[tts]  "forty one passed, one skipped"

session active
2400 × 880
Fig. 01. Una sesión de voz gobernando la CLI.

El problema

Un flujo de trabajo en terminal asume dos manos y una pantalla. Hablarle es la mitad fácil. La difícil es saber quién está hablando: la persona, el modelo, o el shell que todavía está escupiendo salida.

Por eso el sistema envuelve un PTY real en lugar de reimplementar un shell, lexa el stream según llega, y mantiene a cada proveedor de voz y de modelo detrás de un adaptador. Nada del diseño asume un proveedor concreto.

PythonPTYVADSTT / TTSLLM adapters

Un shell real, no una simulación

Envolver un PTY significa que aquí corre cualquier cosa que corra en una terminal, incluidos programas a pantalla completa y prompts interactivos.

Los proveedores son configuración

STT, TTS y el modelo van cada uno detrás de un adaptador, así que cambiar de motor es un cambio de configuración y no una reescritura.

El stream es la interfaz

La salida se lexa según llega en lugar de después de que el comando termine, que es lo que hace posible hablar sobre un proceso en marcha.

Decisiones y el precio que pagué por ellas

Proveedores desacoplados, en todas partes

Todo pasa por adaptadores intercambiables y streams en tiempo real, así que ningún modelo ni proveedor de voz queda incrustado en el sistema.

Trade-off aceptado

Una capa de adaptadores por proveedor es más superficie que mantener que llamar a una sola API, y es la única forma de cambiar de motor por configuración.

Envolver un PTY en vez de escribir un shell

Un pseudo-terminal da control de trabajos real, manejo de señales real y comportamiento TTY real gratis, cosas que una reimplementación tendría que ganarse caso límite a caso límite.

Trade-off aceptado

Parsear un stream de PTY implica lidiar con secuencias de escape y escrituras parciales en lugar de salida estructurada y limpia.

Detección de voz antes de la transcripción

Poner VAD por delante del reconocimiento es lo que permite interrumpir mientras el sistema todavía habla, en vez de esperar turno.

Trade-off aceptado

Un umbral de detección mal puesto se nota al instante en cualquiera de las dos direcciones: o te corta o te habla encima.

Por dentro

  1. Fig. 02
    900 × 700Lexer output, token stream view
    Fig. 02

    El lexer en streaming clasificando la salida mientras el comando sigue corriendo.

  2. Fig. 03
    # jarvis.toml
    
    [stt]
    adapter = "whisper-local"
    
    [tts]
    adapter = "piper"
    
    [llm]
    adapter = "anthropic"
    900 × 700
    Fig. 03

    Adaptadores de proveedor: cada motor es un bloque de configuración.