ContextPulse
Contexto ambiental local-primero para agentes de IA: captura de pantalla, OCR, transcripción de voz (Whisper), seguimiento de teclado/ratón, historial del portapapeles y memoria semántica.
Documentación
ContextPulse
Contexto local-primario para agentes de IA.
Captura de pantalla, dictado por voz, portapapeles, actividad de teclado/ratón. Capturado localmente, con el texto capturado redactado antes de almacenarse.
Vista previa para desarrolladores (v0.1-alpha). ContextPulse está en desarrollo activo. Las API y la configuración pueden cambiar entre versiones. Reportar problemas.
ContextPulse es un daemon de escritorio que captura tu pantalla, voz y actividad de teclado/ratón en tiempo real, y luego lo entrega a agentes de IA a través del Protocolo de Contexto de Modelos (MCP). Un daemon con icono en la bandeja realiza la captura, y un proceso MCP complementario lo sirve a tu agente. 37 herramientas MCP, cero dependencia en la nube.
La captura, el almacenamiento y la búsqueda se ejecutan en tu máquina, y no hay telemetría. ContextPulse no envía nada fuera de la máquina hasta que activas una de las tres funciones de red, cada una desactivada por defecto:
- La búsqueda de memoria semántica descarga su modelo de incrustación de huggingface.co la primera vez que la usas. Un archivo, una vez, y luego funciona sin conexión.
- La limpieza por LLM de voz envía el texto de un dictado a la API de Anthropic para corregir la gramática y eliminar palabras de relleno. Requiere una clave de API en
voice_anthropic_api_key(oANTHROPIC_API_KEY) yvoice_always_use_llmactivado. La misma clave permite que el aprendiz de vocabulario envíe pares de transcripciones recientes a Anthropic para encontrar palabras que el reconocimiento de voz sigue malinterpretando. - El consolidador de hechos,
scripts/probe_consolidator.py, canaliza eventos capturados recientes al CLI de Claude para destilarlos en hechos. Ese prompt incluye nombres de aplicaciones, títulos de ventanas y el propio texto capturado. Se ejecuta solo cuando ejecutas el script o lo programas.
El texto capturado se redacta antes de almacenarse y nuevamente antes de que cualquier herramienta MCP lo devuelva. Las filas escritas antes de la versión 0.1.1 se redactan en su lugar mediante un barrido único en el primer inicio del daemon o del servidor MCP después de la actualización; scripts/purge_clipboard_secrets.py está ahí si quieres ejecutarlo manualmente. Consulta SECURITY.md para saber qué cubre el filtro y qué no.
Una nota sobre clientes MCP. Una vez que tu agente lee un resultado de herramienta, lo que suceda después es decisión de ese cliente, no nuestra. Un modelo local lo mantiene en la máquina. Un cliente respaldado por la nube lo envía a su proveedor como cualquier otro prompt. Eso aplica a cada herramienta de contexto que le des a un agente, y ContextPulse no puede ver ni controlar ese salto.
┌─────────────────────────────────────────────────┐
│ ContextPulse Daemon │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Sight │ │ Voice │ │ Touch │ │
│ │ Screen │ │ Dictate │ │ Keys + │ │
│ │ OCR │ │ Whisper │ │ Mouse │ │
│ │ Clipboard│ │ Vocab │ │ Bursts │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ └──────────────┼──────────────┘ │
│ ▼ │
│ ┌──────────────┐ │
│ │ EventBus │ │
│ │ (Spine) │ │
│ └──────┬───────┘ │
│ ▼ │
│ ┌──────────────┐ │
│ │ activity.db │ │
│ │ SQLite+FTS5 │ │
│ └──────────────┘ │
└────────────────────┬────────────────────────────┘
│ MCP (streamable-http :8420)
┌────────────┼────────────┐
▼ ▼ ▼
Claude Code Cursor Any MCP
Client
Demostración rápida
> You: "What am I looking at right now?"
Claude calls get_screenshot → get_screen_text:
Active window: VS Code, src/auth/middleware.ts
OCR text: "export async function validateToken(req: Request)..."
Clipboard: "[REDACTED:BEARER]"
> Claude: "You're editing the auth middleware in VS Code.
> I can see the validateToken function. You copied a
> bearer token, but ContextPulse masked it on the way
> to disk, so all I get is the marker. Want me to help
> debug the token validation?"
> You hold Ctrl+Space and say: "refactor this to use the new auth provider"
ContextPulse Voice transcribes → pastes into editor
Claude calls get_recent_transcriptions → get_screen_text:
> Claude: "I can see your dictation and the current file.
> Here's the refactored middleware using AuthProvider..."
> You: "What was I working on before lunch?"
Claude calls get_activity_summary(hours=4) → search_history("auth"):
10:15 AM VS Code, auth/middleware.ts (45 min)
11:00 AM Chrome, JWT.io (12 min)
11:15 AM VS Code, auth/tests/test_middleware.py (30 min)
11:45 AM Slack, #backend channel (15 min)
> Claude: "You spent the morning on auth middleware: writing
> the implementation, checking JWT specs, then adding
> tests. You were in Slack #backend right before lunch."
¿Por qué ContextPulse?
Los asistentes de codificación con IA son potentes pero ciegos. No pueden ver tu pantalla, escuchar tus notas de voz ni saber qué estabas haciendo. ContextPulse cierra esta brecha:
- Local-primario. La captura, el almacenamiento y la búsqueda se ejecutan en tu máquina. Las funciones principales no requieren cuenta. Pro es un nivel de pago opcional desbloqueado por una clave de licencia que se verifica sin conexión. ContextPulse no contacta a ningún servidor de terceros hasta que activas una de las funciones de red opcionales enumeradas arriba, dos de las cuales envían texto capturado a Anthropic y están desactivadas por defecto.
- Nativo MCP desde el primer día. ContextPulse expone todo el contexto como herramientas MCP a través de HTTP transmisible, por lo que cualquier cliente MCP compatible con estándares puede leerlo sin una integración personalizada. Fragmentos de configuración listos para Claude Code, Cursor y Continue están en docs/mcp-configs.
- Verdaderamente multimodal en un solo daemon. La captura de pantalla, el dictado por voz y la entrada de teclado/ratón se ejecutan en un solo proceso en segundo plano. Sin necesidad de unir múltiples herramientas.
- Código abierto (AGPL-3.0). Totalmente auditable, autoalojable y extensible. Sin bloqueo de proveedor, sin dependencia de SaaS, sin riesgo de cierres por adquisiciones.
Qué hace diferente a ContextPulse
| Capacidad | ContextPulse | ¿Normalmente disponible? |
|---|---|---|
| Captura de pantalla + OCR | Sí, resolución nativa | Común |
| Dictado por voz | Sí, Whisper local | Raro como función integrada |
| Seguimiento de teclado + ratón | Sí | Raro |
| Memoria semántica | Sí, de tres niveles con búsqueda híbrida | Raro |
| Toda la captura en un daemon | Sí, un solo proceso en segundo plano | No, normalmente herramientas separadas |
| Nativo MCP | Sí, 37 herramientas | Emergente |
| Captura y almacenamiento local | Sí, con tres funciones de red opcionales, todas desactivadas por defecto | Poco común |
| Código abierto | AGPL-3.0 | Varía |
Soporte de plataformas
| Plataforma | Estado |
|---|---|
| Windows 10+ | Soporte completo |
| macOS 13+ (Apple Silicon e Intel) | Soporte completo |
| Linux | Contribuciones de la comunidad bienvenidas: las abstracciones principales están en su lugar, los módulos de plataforma necesitan implementación |
Instalación
git clone https://github.com/ContextPulse/contextpulse
cd contextpulse
# Windows
pip install -e packages/core -e packages/screen -e packages/voice -e packages/touch -e packages/project
# macOS — the [macos] extras are REQUIRED, not optional niceties. They pull in
# pyobjc (clipboard, window, caret, session monitor), rumps (menu bar) and
# mlx-whisper (Apple Silicon transcription). Without them the install succeeds
# and then fails at runtime.
pip install -e "packages/core[macos]" -e "packages/screen[macos]" -e "packages/voice[macos]" \
-e packages/touch -e packages/project
# Optional: persistent memory + semantic search
pip install -e packages/memory
Configura tu agente de IA e instala habilidades complementarias:
contextpulse --setup claude-code # configures MCP + installs skills
# or: contextpulse --setup gemini # for Gemini CLI
# or: contextpulse --setup all # both
contextpulse --setup escribe la entrada autenticada contextpulse en Claude Code, Cursor y Gemini CLI, creando el token de acceso si es la primera ejecución. Vuelve a ejecutarlo después de regenerar el token.
Inicia ContextPulse:
contextpulse # starts the background daemon
contextpulse-mcp # starts the MCP server on port 8420
Eso es todo. Tu agente de IA ahora tiene herramientas para leer tu pantalla, voz, actividad y memoria.
Configuración manual de MCP (si no usas --setup)
Añade a ~/.claude.json:
{
"mcpServers": {
"contextpulse": {
"type": "http",
"url": "http://127.0.0.1:8420/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN_HERE" }
}
}
}
El endpoint requiere un token de acceso. ContextPulse genera uno por instalación en el primer uso y lo almacena con permisos solo para el usuario en %APPDATA%\ContextPulse\mcp_token (macOS: ~/Library/Application Support/ContextPulse/mcp_token; Linux: $XDG_CONFIG_HOME/ContextPulse/mcp_token). Imprime el tuyo con contextpulse-mcp --print-config claude-code, o encuéntralo en la bandeja bajo Configuración -> Acceso MCP. Consulta docs/mcp-configs para Cursor, Gemini CLI, Claude Desktop y solución de problemas.
El token defiende contra otros llamadores locales: otras cuentas en la máquina, aplicaciones en sandbox con acceso de bucle invertido, y otros clientes y agentes MCP. No defiende contra un proceso que ya se ejecuta como tú, que puede leer el archivo de token y las bases de datos directamente.
Herramientas MCP
Vista (11 herramientas gratuitas)
| Herramienta | Qué hace |
|---|---|
get_screenshot | Capturar pantalla (monitor activo, todos los monitores o una región) |
get_recent | Fotogramas recientes del búfer circular (con filtrado de diferencias) |
get_screen_text | OCR de la pantalla actual a resolución nativa |
get_monitor_summary | Resumen de texto ligero de todos los monitores (bajo costo de tokens) |
get_buffer_status | Verificación de salud del daemon + estadísticas del búfer |
get_activity_summary | Desglose de uso de aplicaciones en las últimas N horas |
search_history | Búsqueda de texto completo en títulos de ventanas + texto OCR |
get_context_at | Fotograma + metadatos de hace N minutos |
get_clipboard_history | Entradas recientes del portapapeles |
search_clipboard | Buscar en el portapapeles por contenido de texto |
get_agent_stats | Qué clientes MCP están consumiendo contexto y con qué frecuencia |
Voz (7 herramientas gratuitas)
| Herramienta | Qué hace |
|---|---|
get_recent_transcriptions | Historial reciente de dictado por voz (crudo y limpio) |
get_voice_stats | Conteo de dictados, duración, estadísticas de precisión |
get_vocabulary | Entradas actuales de corrección de palabras |
learn_from_session | Analizar historial de dictados para aprender correcciones de vocabulario automáticamente (patrones vistos 2+ veces) |
rebuild_context_vocabulary | Reconstruir vocabulario desde archivos PROJECT_CONTEXT.md (nombres de proyectos + términos de dominio) |
consolidate_learning | Ejecutar el pipeline completo de consolidación de vocabulario multimodal (el bucle de aprendizaje central) |
check_corrections | Detectar correcciones de voz repetidas que deberían convertirse en vocabulario permanente |
Táctil (3 herramientas gratuitas)
| Herramienta | Qué hace |
|---|---|
get_recent_touch_events | Ráfagas de escritura, clics, desplazamientos, arrastres |
get_touch_stats | Conteo de pulsaciones, PPM, totales de clic/desplazamiento |
get_correction_history | Detecciones de corrección de voz a escritura |
Proyecto (5 herramientas gratuitas)
| Herramienta | Qué hace |
|---|---|
identify_project | Puntuar texto contra todos los proyectos, devolver la mejor coincidencia |
get_active_project | Detectar proyecto actual desde el directorio de trabajo o el título de la ventana |
list_projects | Todos los proyectos indexados con resúmenes |
get_project_context | PROJECT_CONTEXT.md completo para un proyecto |
route_to_journal | Enrutar una idea al diario del proyecto |
Recuerdo (2 herramientas gratuitas)
| Herramienta | Qué hace |
|---|---|
facts_about | Hechos consolidados sobre un proyecto, persona, archivo, herramienta o tema |
context_at | Qué estaba sucediendo alrededor de un momento dado en el tiempo |
Estas dos leen el almacén de hechos destilado nocturnamente, por lo que no devuelven nada hasta que el consolidador se haya ejecutado al menos una vez.
Memoria (5 gratuitas + 2 Pro)
La memoria básica es gratuita para siempre. No se requiere licencia.
| Herramienta | Nivel | Qué hace |
|---|---|---|
memory_store | Gratis | Almacenar una memoria clave-valor con etiquetas y TTL opcionales |
memory_recall | Gratis | Recuperar una memoria por clave exacta |
memory_list | Gratis | Listar memorias, opcionalmente filtradas por etiqueta |
memory_forget | Gratis | Eliminar una memoria por clave |
memory_stats | Gratis | Estadísticas de almacenamiento (conteos de entradas, tamaños de BD, niveles) |
memory_search | Pro | Búsqueda híbrida/por palabras clave/semántica en todas las memorias almacenadas |
memory_semantic_search | Pro | Búsqueda vectorial pura usando incrustaciones all-MiniLM-L6-v2 |
La memoria usa una arquitectura de 3 niveles caliente/tibio/frío: caché LRU en memoria → SQLite WAL + FTS5 → archivo comprimido. El paquete opcional pip install contextpulse-memory incluye estas herramientas.
Pro (4 herramientas, requiere licencia o prueba de 30 días)
| Herramienta | Qué hace |
|---|---|
memory_search | Búsqueda híbrida/por palabras clave/semántica en memorias almacenadas |
memory_semantic_search | Búsqueda vectorial pura usando incrustaciones de oraciones |
search_all_events | Búsqueda de texto completo multimodal en pantalla, voz, portapapeles, teclas |
get_event_timeline | Vista temporal de todos los eventos en todas las modalidades |
Gratis para siempre: 33 herramientas (Vista × 11, Voz × 7, Táctil × 3, Proyecto × 5, Memoria × 5, Recuerdo × 2) Pro: añade 4 herramientas de búsqueda: búsqueda de memoria semántica más consultas de eventos multimodales Prueba: prueba Pro de 30 días en el primer uso, sin tarjeta de crédito
Además, ContextPulse incluye varias herramientas de aprendizaje en segundo plano (consolidación de vocabulario, detección de correcciones) que se ejecutan automáticamente para mejorar la calidad de la transcripción con el tiempo.
Arquitectura
ContextPulse es un monorepo con paquetes modulares:
| Paquete | Propósito |
|---|---|
contextpulse-core | Daemon, EventBus (columna vertebral), configuración, licencias, ajustes |
contextpulse-sight | Captura de pantalla, OCR, monitoreo de portapapeles |
contextpulse-voice | Mantener para dictar, transcripción Whisper, vocabulario |
contextpulse-touch | Captura de actividad de teclado/ratón, detección de correcciones |
contextpulse-project | Detección de proyectos y enrutamiento de diarios |
contextpulse-memory | Memoria clave-valor persistente con búsqueda semántica (opcional) |
Todos los módulos emiten eventos a un EventBus compartido (la "columna vertebral"), que escribe en una base de datos SQLite local con búsqueda de texto completo FTS5. Los servidores MCP nunca escriben en activity.db; ese pipeline es solo de captura. El servidor de memoria es la excepción y escribe por diseño en su propio memory.db a través de memory_store y memory_forget.
Desarrollo
git clone https://github.com/ContextPulse/contextpulse
cd contextpulse
uv venv
.venv\Scripts\activate
uv pip install -e "packages/core[dev]" -e packages/screen -e packages/voice -e packages/touch -e packages/project
# Mirrors what GitHub Actions runs. `pytest packages/` alone misses the guards
# in the root tests/ directory, which is how a pull request goes red after a
# clean-looking local run. --fast does lint plus those guards in ~2s.
bash scripts/ci-tests.sh
Consulta CONTRIBUTING.md para las pautas.
Verificación de salud Canary
Un script canary ejercita cada herramienta MCP expuesta e informa aprobado/fallido. Se ejecuta automáticamente en un horario de cron/Programador de tareas para detectar regresiones antes que los usuarios.
# Run manually
python scripts/canary_health_check.py
# Verbose (shows each tool as it runs)
python scripts/canary_health_check.py --verbose
# JSON output (for CI or external monitoring)
python scripts/canary_health_check.py --json
Qué hace:
- Inicia automáticamente el daemon de ContextPulse si no está ya en ejecución
- Llama a todas las herramientas MCP principales con argumentos válidos mínimos
- Imprime un resumen legible con desglose por servidor
- Añade resultados a
logs/canary_results.json(se conservan las últimas 100 ejecuciones) - Sale con
0si todas las herramientas pasan,1si alguna falla
Programación (Programador de tareas de Windows):
- Abre el Programador de tareas → Crear tarea básica
- Desencadenador: Diariamente, repetir cada 4 horas
- Acción: Iniciar un programa
- Programa:
<path-to-contextpulse>\.venv\Scripts\python.exe - Argumentos:
scripts/canary_health_check.py - Iniciar en:
<path-to-contextpulse>
- Programa:
Licencia
ContextPulse está licenciado bajo la GNU Affero General Public License v3.0 (AGPL-3.0).
- Puedes usar, modificar y distribuir ContextPulse libremente
- Si lo modificas y lo implementas como un servicio, debes publicar tus cambios como código abierto
- Licencia comercial disponible para integrarlo en productos propietarios
Para consultas sobre licencias comerciales, visita contextpulse.ai.
Aviso de patente
El sistema unificado de entrega de contexto multimodal de ContextPulse está pendiente de patente.
Construido por Jerard Ventures LLC