Vision Mode — See the screen. Hear your voice. Respond naturally.
Multimodal AI agent with eyes, ears, and voice — hands-free assistance powered by your screen and speech.
Vision Mode brings multimodal capabilities to free-code: screen capture, speech-to-text (STT), and text-to-speech (TTS). The agent can see what's on your screen, listen to your voice, and speak answers back.
Built on a snapshot-at-question-time model — no continuous video upload, no streaming. The agent receives one image at the moment you ask, plus the conversation history. This keeps cost low, latency reasonable, and privacy high.
Three interaction modes, one seamless pipeline.
| Mode | Command | Use case |
|---|---|---|
| On-demand vision | /see <question> |
Capture screen once, ask about it. Typed question, instant screenshot. |
| Push-to-talk | /voice [context] |
Record audio, transcribe, send. No screen capture unless explicitly requested. |
| Live hands-free | /vision live on |
Continuous listening with wake word. Auto-captures when vision keywords detected. Speaks responses. |
| Step | What happens | Configurable backends |
|---|---|---|
| 1. Screen capture | Grabs a single frame of the current screen | Portal (Wayland), scrot, gnome-screenshot, spectacle, import, screencapture (macOS), PowerShell |
| 2. Image resize | Downscales to max 1568px (configurable) with Photon WASM | JPEG quality 85 (default), ~1.1–1.6k tokens per image |
| 3. Audio record | Records microphone input until stopped (PTT or VAD) | pw-record, arecord, sox, ffmpeg |
| 4. Speech-to-text | Transcribes audio to text | OpenAI Whisper, Groq Whisper, local whisper.cpp |
| 5. Agent turn | Sends text + optional image to the model | Any vision-capable model: GPT-4o, Claude 3.5, Gemini 2.0 Flash, etc. |
| 6. Text-to-speech | Speaks the assistant's reply (live mode only) | OpenAI TTS, espeak, macOS say |
Visualizing the three interaction modes.
/see)/voice)/vision live on)All vision-mode slash commands and shortcuts.
| Command | Description |
|---|---|
/see <question> | Capture screen and ask about it (one-shot vision) |
/voice [context] | Push-to-talk: record, transcribe, send (or review) |
/vision live on | Start continuous hands-free mode with wake word |
/vision live off | Stop live mode |
/vision status | Show current backends, language, mode settings |
/vision backends | List available capture/STT/TTS backends and whether they're installed |
/vision config | View all configuration values |
/vision config <key> | View a single config value |
/vision config <key> <value> | Set a config value |
Push-to-talk is registered as a global shortcut (default: configurable via VISION_SHORTCUT env var or vision.json).
Press once to start recording, press again to stop and transcribe.
All settings, environment variables, and config file location.
Vision Mode settings are stored in ~/.free-code/vision.json. Edit directly or use /vision config <key> <value>.
| Variable | Description |
|---|---|
VISION_CAPTURE_BACKEND | Capture method: auto, portal, grim, scrot, import, screencapture, powershell |
VISION_STT_BACKEND | STT backend: auto, openai, groq, whisper-cpp |
VISION_TTS_BACKEND | TTS backend: auto, openai, espeak, say |
VISION_LANGUAGE | Language code: es, en, auto |
VISION_VOICE_MODE | Transcript destination: send (automatic) or review (placed in editor) |
VISION_SHORTCUT | PTT hotkey (e.g., ctrl+shift+space) |
OPENAI_API_KEY | Required for OpenAI STT/TTS |
GROQ_API_KEY | Required for Groq STT |
| Flag | Description |
|---|---|
--vision-capture-backend <id> | Force a specific capture backend |
--vision-stt-backend <id> | Force a specific STT backend |
--vision-tts-backend <id> | Force a specific TTS backend |
--vision-language <code> | Override language |
--vision-voice-mode <mode> | Override voice mode |
| Key | Default | Description |
|---|---|---|
captureBackend | "auto" | Screen capture method |
captureInteractive | true | Allow monitor/window selection dialogs |
captureMaxWidth | 1568 | Max image dimension before resize (0 = no resize) |
captureJpegQuality | 85 | JPEG compression quality (0–100) |
sttBackend | "auto" | Speech-to-text backend |
sttModel | "whisper-1" | Model name for API STT (OpenAI/Groq) |
ttsBackend | "auto" | Text-to-speech backend |
ttsModel | "tts-1" | TTS model (OpenAI) |
ttsVoice | "alloy" | TTS voice (OpenAI: alloy, echo, fable, onyx, nova, shimmer) |
language | "auto" | STT language code |
voiceMode | "review" | Where transcript goes: send or review |
shortcut | null | PTT hotkey (e.g., "ctrl+shift+space") |
voiceCommandDuration | 6000 | Max recording duration for /voice command (ms) |
liveTurnMaxMs | 8000 | Max recording duration per live-mode turn (ms) |
liveAlwaysCapture | false | Capture screen on every utterance (ignore keyword detection) |
liveWakeWord | "freecode" | Wake word to activate processing (comma-separated for multiple) |
liveSpeak | true | Speak assistant responses in live mode |
liveIndicator | true | Show status indicator when live mode is active |
export GROQ_API_KEY="gsk_..."
/vision config language es
/vision config sttBackend groq
/vision config liveWakeWord "oye,free-code"
/vision live on
What gets captured, when, and how much it costs.
/vision live on.👁 live · listening…) so you know it's active.One downscaled image (1568px max, JPEG quality 85) ≈ 1.1–1.6k input tokens.
| Scenario | Images sent | Est. image tokens |
|---|---|---|
10 /see questions | 10 | ~11–16k |
| 30-question live session (vision keywords in half) | 15 | ~16–24k |
| 100-question live session (liveAlwaysCapture=true) | 100 | ~110–160k |
Compare to text-only: a 500-line file ≈ 3–5k tokens. Vision adds cost, but the snapshot model keeps it reasonable — you're not streaming 30fps video.
Target: under 5 seconds from "stop talking" to "agent starts speaking" (live mode).
Total: ~2.4–4s under ideal conditions. Groq STT can shave off another ~500ms (faster than local Whisper).
What to install for each backend.
Vision Mode is included in the default free-code installation. You need to install system dependencies for the backends you want to use.
Pick one (or install multiple; auto will choose the best available):
xdg-desktop-portal-gnome (recommended), or grim / gnome-screenshot / spectacle / scrot / ImageMagick importscrot or importscreencapture (built-in, no install needed)# Ubuntu/Debian (Wayland)
sudo apt install xdg-desktop-portal-gnome
# Fedora (Wayland)
sudo dnf install xdg-desktop-portal-gnome
# Arch (Wayland)
sudo pacman -S xdg-desktop-portal-gnome
# Fallback: scrot (X11)
sudo apt install scrot
One of:
pw-record (PipeWire, modern Linux — usually pre-installed on recent distros)arecord (ALSA)sox (cross-platform)ffmpeg# Check if pw-record exists (PipeWire)
which pw-record
# Install ALSA utils (includes arecord)
sudo apt install alsa-utils
# Or install SoX
sudo apt install sox
API-based (easiest):
# OpenAI Whisper
export OPENAI_API_KEY="sk-..."
# Groq (faster, free tier available)
export GROQ_API_KEY="gsk_..."
Local (no API cost, fully private):
Install whisper.cpp:
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp
make
# Download a model (base is fast, small is smaller, large is most accurate)
bash ./models/download-ggml-model.sh base
# Ensure 'whisper' binary is in PATH or specify path via VISION_WHISPER_CPP_PATH
API-based:
export OPENAI_API_KEY="sk-..." # for tts-1 model
Local:
# Linux: espeak
sudo apt install espeak
# macOS: say (built-in, no install needed)
After installing dependencies, check what's available:
/vision backends
Output shows ✓ for available backends, ✗ for missing ones.
Common workflows and use cases.
Open a browser with a stack trace or error page:
/see what is this error and how do I fix it?
Agent captures the screen, reads the stack trace, and explains the issue.
Open a diff or PR in GitHub/GitLab:
/see review this diff for potential issues
Start live mode while coding:
/vision config liveWakeWord "free-code"
/vision config language en
/vision live on
# Now say: "free-code, what does this function do?"
# Agent captures screen, sees the code, answers out loud.
Use push-to-talk to record summaries without typing:
/voice
# Press PTT hotkey, speak notes, release
# Transcript appears in editor for review before sending
No API calls, all processing on your machine:
/vision config sttBackend whisper-cpp
/vision config ttsBackend espeak # or 'say' on macOS
/vision config captureBackend portal # or 'scrot' on X11
# Now all /see, /voice, and live mode use local backends only
Common issues and fixes.
Install at least one screen capture tool. Check what's available:
/vision backends
On Wayland, install xdg-desktop-portal-gnome. On X11, install scrot.
Install one of: pw-record, arecord, sox, or ffmpeg.
which pw-record arecord sox ffmpeg
The Photon WASM asset is missing. Reinstall free-code or check packages/coding-agent/assets/photon_rs_bg.wasm.
Check wake word configuration:
/vision config liveWakeWord
Make sure you say the exact wake word at the start of your utterance. Try:
/vision config liveWakeWord "hey,oye,freecode"
This allows any of those three to activate.
Reduce max dimension or JPEG quality:
/vision config captureMaxWidth 1200
/vision config captureJpegQuality 75
Set the correct language explicitly:
/vision config language es # for Spanish
/vision config language en # for English
Change voice (OpenAI TTS):
/vision config ttsVoice nova # or alloy, echo, fable, onyx, shimmer
Modo Visión — Ve la pantalla. Escucha tu voz. Responde con naturalidad.
Agente de IA multimodal con ojos, oídos y voz — asistencia manos libres impulsada por tu pantalla y tu voz.
El Modo Visión aporta capacidades multimodales a free-code: captura de pantalla, voz a texto (STT) y texto a voz (TTS). El agente puede ver lo que hay en tu pantalla, escuchar tu voz y responder en voz alta.
Construido sobre un modelo de captura en el momento de la pregunta — sin subida continua de video, sin streaming. El agente recibe una imagen en el momento en que preguntas, junto con el historial de la conversación. Esto mantiene el costo bajo, la latencia razonable y la privacidad alta.
Tres modos de interacción, un solo flujo continuo.
| Modo | Comando | Caso de uso |
|---|---|---|
| Visión bajo demanda | /see <question> |
Captura la pantalla una vez y pregunta sobre ella. Pregunta escrita, captura instantánea. |
| Pulsar para hablar | /voice [context] |
Graba audio, transcribe, envía. Sin captura de pantalla salvo que se solicite explícitamente. |
| Manos libres en vivo | /vision live on |
Escucha continua con palabra de activación. Captura automáticamente cuando se detectan palabras clave de visión. Habla las respuestas. |
| Paso | Qué sucede | Backends configurables |
|---|---|---|
| 1. Captura de pantalla | Toma un único fotograma de la pantalla actual | Portal (Wayland), scrot, gnome-screenshot, spectacle, import, screencapture (macOS), PowerShell |
| 2. Redimensionado de imagen | Reduce la escala a un máximo de 1568px (configurable) con Photon WASM | Calidad JPEG 85 (por defecto), ~1.1–1.6k tokens por imagen |
| 3. Grabación de audio | Graba la entrada del micrófono hasta que se detiene (PTT o VAD) | pw-record, arecord, sox, ffmpeg |
| 4. Voz a texto | Transcribe el audio a texto | OpenAI Whisper, Groq Whisper, whisper.cpp local |
| 5. Turno del agente | Envía texto + imagen opcional al modelo | Cualquier modelo con capacidad de visión: GPT-4o, Claude 3.5, Gemini 2.0 Flash, etc. |
| 6. Texto a voz | Habla la respuesta del asistente (solo en modo en vivo) | OpenAI TTS, espeak, macOS say |
Visualizando los tres modos de interacción.
/see)/voice)/vision live on)Todos los comandos slash y atajos del modo visión.
| Comando | Descripción |
|---|---|
/see <question> | Captura la pantalla y pregunta sobre ella (visión de un solo disparo) |
/voice [context] | Pulsar para hablar: graba, transcribe, envía (o revisa) |
/vision live on | Inicia el modo manos libres continuo con palabra de activación |
/vision live off | Detiene el modo en vivo |
/vision status | Muestra los backends actuales, el idioma y la configuración del modo |
/vision backends | Lista los backends de captura/STT/TTS disponibles e indica si están instalados |
/vision config | Muestra todos los valores de configuración |
/vision config <key> | Muestra un único valor de configuración |
/vision config <key> <value> | Establece un valor de configuración |
Pulsar para hablar está registrado como un atajo global (por defecto: configurable mediante la variable de entorno VISION_SHORTCUT o vision.json).
Presiona una vez para empezar a grabar, presiona de nuevo para detener y transcribir.
Todos los ajustes, variables de entorno y ubicación del archivo de configuración.
Los ajustes del Modo Visión se guardan en ~/.free-code/vision.json. Edítalo directamente o usa /vision config <key> <value>.
| Variable | Descripción |
|---|---|
VISION_CAPTURE_BACKEND | Método de captura: auto, portal, grim, scrot, import, screencapture, powershell |
VISION_STT_BACKEND | Backend STT: auto, openai, groq, whisper-cpp |
VISION_TTS_BACKEND | Backend TTS: auto, openai, espeak, say |
VISION_LANGUAGE | Código de idioma: es, en, auto |
VISION_VOICE_MODE | Destino de la transcripción: send (automático) o review (colocado en el editor) |
VISION_SHORTCUT | Tecla rápida PTT (p. ej., ctrl+shift+space) |
OPENAI_API_KEY | Requerida para STT/TTS de OpenAI |
GROQ_API_KEY | Requerida para STT de Groq |
| Opción | Descripción |
|---|---|
--vision-capture-backend <id> | Fuerza un backend de captura específico |
--vision-stt-backend <id> | Fuerza un backend STT específico |
--vision-tts-backend <id> | Fuerza un backend TTS específico |
--vision-language <code> | Anula el idioma |
--vision-voice-mode <mode> | Anula el modo de voz |
| Clave | Por defecto | Descripción |
|---|---|---|
captureBackend | "auto" | Método de captura de pantalla |
captureInteractive | true | Permite diálogos de selección de monitor/ventana |
captureMaxWidth | 1568 | Dimensión máxima de la imagen antes de redimensionar (0 = sin redimensionar) |
captureJpegQuality | 85 | Calidad de compresión JPEG (0–100) |
sttBackend | "auto" | Backend de voz a texto |
sttModel | "whisper-1" | Nombre del modelo para STT vía API (OpenAI/Groq) |
ttsBackend | "auto" | Backend de texto a voz |
ttsModel | "tts-1" | Modelo TTS (OpenAI) |
ttsVoice | "alloy" | Voz TTS (OpenAI: alloy, echo, fable, onyx, nova, shimmer) |
language | "auto" | Código de idioma para STT |
voiceMode | "review" | Dónde va la transcripción: send o review |
shortcut | null | Tecla rápida PTT (p. ej., "ctrl+shift+space") |
voiceCommandDuration | 6000 | Duración máxima de grabación para el comando /voice (ms) |
liveTurnMaxMs | 8000 | Duración máxima de grabación por turno en modo en vivo (ms) |
liveAlwaysCapture | false | Captura la pantalla en cada frase (ignora la detección de palabras clave) |
liveWakeWord | "freecode" | Palabra de activación para procesar (separadas por comas para varias) |
liveSpeak | true | Habla las respuestas del asistente en modo en vivo |
liveIndicator | true | Muestra el indicador de estado cuando el modo en vivo está activo |
export GROQ_API_KEY="gsk_..."
/vision config language es
/vision config sttBackend groq
/vision config liveWakeWord "oye,free-code"
/vision live on
Qué se captura, cuándo y cuánto cuesta.
/vision live on.👁 live · listening…) para que sepas que está activo.Una imagen reducida (máximo 1568px, calidad JPEG 85) ≈ 1.1–1.6k tokens de entrada.
| Escenario | Imágenes enviadas | Tokens de imagen estimados |
|---|---|---|
10 preguntas con /see | 10 | ~11–16k |
| Sesión en vivo de 30 preguntas (palabras clave de visión en la mitad) | 15 | ~16–24k |
| Sesión en vivo de 100 preguntas (liveAlwaysCapture=true) | 100 | ~110–160k |
En comparación con solo texto: un archivo de 500 líneas ≈ 3–5k tokens. La visión añade costo, pero el modelo de captura lo mantiene razonable — no estás transmitiendo video a 30fps.
Objetivo: menos de 5 segundos desde que "dejas de hablar" hasta que "el agente empieza a hablar" (modo en vivo).
Total: ~2.4–4s en condiciones ideales. El STT de Groq puede recortar otros ~500ms (más rápido que Whisper local).
Qué instalar para cada backend.
El Modo Visión está incluido en la instalación por defecto de free-code. Necesitas instalar las dependencias del sistema para los backends que quieras usar.
Elige una (o instala varias; auto elegirá la mejor disponible):
xdg-desktop-portal-gnome (recomendado), o grim / gnome-screenshot / spectacle / scrot / ImageMagick importscrot o importscreencapture (incorporado, no requiere instalación)# Ubuntu/Debian (Wayland)
sudo apt install xdg-desktop-portal-gnome
# Fedora (Wayland)
sudo dnf install xdg-desktop-portal-gnome
# Arch (Wayland)
sudo pacman -S xdg-desktop-portal-gnome
# Alternativa: scrot (X11)
sudo apt install scrot
Uno de estos:
pw-record (PipeWire, Linux moderno — normalmente preinstalado en distribuciones recientes)arecord (ALSA)sox (multiplataforma)ffmpeg# Verifica si pw-record existe (PipeWire)
which pw-record
# Instala las utilidades de ALSA (incluye arecord)
sudo apt install alsa-utils
# O instala SoX
sudo apt install sox
Basado en API (lo más sencillo):
# OpenAI Whisper
export OPENAI_API_KEY="sk-..."
# Groq (más rápido, nivel gratuito disponible)
export GROQ_API_KEY="gsk_..."
Local (sin costo de API, totalmente privado):
Instala whisper.cpp:
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp
make
# Descarga un modelo (base es rápido, small es más pequeño, large es el más preciso)
bash ./models/download-ggml-model.sh base
# Asegúrate de que el binario 'whisper' esté en el PATH o especifica la ruta mediante VISION_WHISPER_CPP_PATH
Basado en API:
export OPENAI_API_KEY="sk-..." # para el modelo tts-1
Local:
# Linux: espeak
sudo apt install espeak
# macOS: say (incorporado, no requiere instalación)
Después de instalar las dependencias, revisa qué está disponible:
/vision backends
La salida muestra ✓ para los backends disponibles, ✗ para los que faltan.
Flujos de trabajo y casos de uso comunes.
Abre un navegador con un stack trace o una página de error:
/see what is this error and how do I fix it?
El agente captura la pantalla, lee el stack trace y explica el problema.
Abre un diff o PR en GitHub/GitLab:
/see review this diff for potential issues
Inicia el modo en vivo mientras programas:
/vision config liveWakeWord "free-code"
/vision config language en
/vision live on
# Ahora di: "free-code, ¿qué hace esta función?"
# El agente captura la pantalla, ve el código y responde en voz alta.
Usa pulsar para hablar para grabar resúmenes sin escribir:
/voice
# Presiona la tecla rápida PTT, di las notas, suelta
# La transcripción aparece en el editor para revisión antes de enviarla
Sin llamadas a la API, todo el procesamiento en tu máquina:
/vision config sttBackend whisper-cpp
/vision config ttsBackend espeak # o 'say' en macOS
/vision config captureBackend portal # o 'scrot' en X11
# Ahora todos los /see, /voice y el modo en vivo usan solo backends locales
Problemas comunes y sus soluciones.
Instala al menos una herramienta de captura de pantalla. Revisa qué está disponible:
/vision backends
En Wayland, instala xdg-desktop-portal-gnome. En X11, instala scrot.
Instala uno de: pw-record, arecord, sox, o ffmpeg.
which pw-record arecord sox ffmpeg
Falta el recurso Photon WASM. Reinstala free-code o verifica packages/coding-agent/assets/photon_rs_bg.wasm.
Revisa la configuración de la palabra de activación:
/vision config liveWakeWord
Asegúrate de decir la palabra de activación exacta al comienzo de tu frase. Prueba:
/vision config liveWakeWord "hey,oye,freecode"
Esto permite que cualquiera de esas tres active el modo.
Reduce la dimensión máxima o la calidad JPEG:
/vision config captureMaxWidth 1200
/vision config captureJpegQuality 75
Establece el idioma correcto de forma explícita:
/vision config language es # para español
/vision config language en # para inglés
Cambia la voz (TTS de OpenAI):
/vision config ttsVoice nova # o alloy, echo, fable, onyx, shimmer