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

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.

AGPL-3.0 Python 3.12+ Windows | macOS MCP Native


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 (o ANTHROPIC_API_KEY) y voice_always_use_llm activado. 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

CapacidadContextPulse¿Normalmente disponible?
Captura de pantalla + OCRSí, resolución nativaComún
Dictado por vozSí, Whisper localRaro como función integrada
Seguimiento de teclado + ratónSíRaro
Memoria semánticaSí, de tres niveles con búsqueda híbridaRaro
Toda la captura en un daemonSí, un solo proceso en segundo planoNo, normalmente herramientas separadas
Nativo MCPSí, 37 herramientasEmergente
Captura y almacenamiento localSí, con tres funciones de red opcionales, todas desactivadas por defectoPoco común
Código abiertoAGPL-3.0Varía

Soporte de plataformas

PlataformaEstado
Windows 10+Soporte completo
macOS 13+ (Apple Silicon e Intel)Soporte completo
LinuxContribuciones 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)

HerramientaQué hace
get_screenshotCapturar pantalla (monitor activo, todos los monitores o una región)
get_recentFotogramas recientes del búfer circular (con filtrado de diferencias)
get_screen_textOCR de la pantalla actual a resolución nativa
get_monitor_summaryResumen de texto ligero de todos los monitores (bajo costo de tokens)
get_buffer_statusVerificación de salud del daemon + estadísticas del búfer
get_activity_summaryDesglose de uso de aplicaciones en las últimas N horas
search_historyBúsqueda de texto completo en títulos de ventanas + texto OCR
get_context_atFotograma + metadatos de hace N minutos
get_clipboard_historyEntradas recientes del portapapeles
search_clipboardBuscar en el portapapeles por contenido de texto
get_agent_statsQué clientes MCP están consumiendo contexto y con qué frecuencia

Voz (7 herramientas gratuitas)

HerramientaQué hace
get_recent_transcriptionsHistorial reciente de dictado por voz (crudo y limpio)
get_voice_statsConteo de dictados, duración, estadísticas de precisión
get_vocabularyEntradas actuales de corrección de palabras
learn_from_sessionAnalizar historial de dictados para aprender correcciones de vocabulario automáticamente (patrones vistos 2+ veces)
rebuild_context_vocabularyReconstruir vocabulario desde archivos PROJECT_CONTEXT.md (nombres de proyectos + términos de dominio)
consolidate_learningEjecutar el pipeline completo de consolidación de vocabulario multimodal (el bucle de aprendizaje central)
check_correctionsDetectar correcciones de voz repetidas que deberían convertirse en vocabulario permanente

Táctil (3 herramientas gratuitas)

HerramientaQué hace
get_recent_touch_eventsRáfagas de escritura, clics, desplazamientos, arrastres
get_touch_statsConteo de pulsaciones, PPM, totales de clic/desplazamiento
get_correction_historyDetecciones de corrección de voz a escritura

Proyecto (5 herramientas gratuitas)

HerramientaQué hace
identify_projectPuntuar texto contra todos los proyectos, devolver la mejor coincidencia
get_active_projectDetectar proyecto actual desde el directorio de trabajo o el título de la ventana
list_projectsTodos los proyectos indexados con resúmenes
get_project_contextPROJECT_CONTEXT.md completo para un proyecto
route_to_journalEnrutar una idea al diario del proyecto

Recuerdo (2 herramientas gratuitas)

HerramientaQué hace
facts_aboutHechos consolidados sobre un proyecto, persona, archivo, herramienta o tema
context_atQué 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.

HerramientaNivelQué hace
memory_storeGratisAlmacenar una memoria clave-valor con etiquetas y TTL opcionales
memory_recallGratisRecuperar una memoria por clave exacta
memory_listGratisListar memorias, opcionalmente filtradas por etiqueta
memory_forgetGratisEliminar una memoria por clave
memory_statsGratisEstadísticas de almacenamiento (conteos de entradas, tamaños de BD, niveles)
memory_searchProBúsqueda híbrida/por palabras clave/semántica en todas las memorias almacenadas
memory_semantic_searchProBú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)

HerramientaQué hace
memory_searchBúsqueda híbrida/por palabras clave/semántica en memorias almacenadas
memory_semantic_searchBúsqueda vectorial pura usando incrustaciones de oraciones
search_all_eventsBúsqueda de texto completo multimodal en pantalla, voz, portapapeles, teclas
get_event_timelineVista 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:

PaquetePropósito
contextpulse-coreDaemon, EventBus (columna vertebral), configuración, licencias, ajustes
contextpulse-sightCaptura de pantalla, OCR, monitoreo de portapapeles
contextpulse-voiceMantener para dictar, transcripción Whisper, vocabulario
contextpulse-touchCaptura de actividad de teclado/ratón, detección de correcciones
contextpulse-projectDetección de proyectos y enrutamiento de diarios
contextpulse-memoryMemoria 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 0 si todas las herramientas pasan, 1 si alguna falla

Programación (Programador de tareas de Windows):

  1. Abre el Programador de tareas → Crear tarea básica
  2. Desencadenador: Diariamente, repetir cada 4 horas
  3. Acción: Iniciar un programa
    • Programa: <path-to-contextpulse>\.venv\Scripts\python.exe
    • Argumentos: scripts/canary_health_check.py
    • Iniciar en: <path-to-contextpulse>

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