wesleymatosdev/ce-pickup

Extrae transferencias de sesiones localmente sin usar tokens de frontier.

¿Qué es ce-pickup?

Esta habilidad permite extraer documentos `ce-handoff/v1` de sesiones pasadas de Hermes utilizando un modelo local, con costo cero en tokens de frontier. Es útil para retomar sesiones abandonadas sin gastar cuota de suscripción, o para obtener una transferencia desde una o más sesiones previas sin llenar la ventana de contexto. Funciona únicamente con modelos locales de Ollama, por defecto usando Ornith-1.5-35B-A3B-GGUF, y evita el uso de modelos frontier para mantener la eficiencia. El proceso lee directamente la base de datos state.db con sqlite3, llama a la API de Ollama mediante curl y escribe archivos markdown válidos para ce-handoff, listos para retomar con el comando `/ce-handoff resume`. Además, incluye un watchdog de techo de contexto que monitorea sesiones activas y puede ejecutar ce-pickup automáticamente cuando el contexto se acerca a su límite.

Compatible con~Claude Code~Codex CLI~Cursor✓Antigravity
npx skills add https://github.com/wesleymatosdev/skills/tree/main/workflow/ce-pickup

Installed? Explore more Productividad y colaboración skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace ce-pickup?

Extrae documentos ce-handoff/v1 de sesiones pasadas de Hermes usando un modelo local. Costo cero en tokens de frontier. La salida es Markdown estándar de ce-handoff/v1, por lo que /ce-handoff resume <ruta> funciona de inmediato.

Úsalo en lugar de ejecutar /ce-handoff en una sesión fría que consumiría cuota de suscripción solo para ponerse al día.

Cuándo usarlo

  • El usuario quiere retomar una sesión que dejó inconclusa sin gastar tokens de frontier releyéndola.
  • Necesitas una transferencia desde una o más sesiones pasadas, pero la ventana de contexto ya está cargada.
  • El usuario pide un "pickup" o "catch-up" de una sesión antigua.
  • Ejecutar /ce-handoff en una sesión fría grande resultaría costoso.

Inicio rápido

bash ~/.hermes/scripts/ce-pickup.sh ID_SESION[,ID_SESION,...]

Por defecto, la salida se escribe en /tmp/compound-engineering-$(id -u)/ce-pickup/.

Luego reanuda desde cualquier archivo de salida:

/ce-handoff resume /tmp/compound-engineering-<uid>/ce-pickup/<slug>.md

Argumentos

  • Arg 1 (obligatorio): IDs de sesión separados por comas (de session_search o navegación de Hermes).
  • Arg 2 (opcional): nombre del modelo Ollama — por defecto hf.co/ornith-ai/Ornith-1.5-35B-A3B-GGUF:Q5_K_M.
  • Arg 3 (opcional): directorio de salida alternativo.

Variables de entorno (para pruebas y hosts alternativos): CE_PICKUP_DB (por defecto ~/.hermes/state.db), CE_PICKUP_OLLAMA_URL (por defecto http://localhost:11434/api/chat), CE_PICKUP_MAX_CHARS (por defecto 24000).

Enrutamiento del modelo

Por defecto: Ornith-1.5-35B-A3B-GGUF:Q5_K_M — calidad de extracción verificada, se ejecuta localmente.

Si Ornith no está cargado, cualquier modelo local capaz de Ollama funciona. NO uses un modelo frontier (eso anula el propósito).

Verifica lo disponible: ollama list

Cómo funciona

  1. Lee ~/.hermes/state.db mediante sqlite3 — sin Python, sin solicitudes TCC.
  2. Extrae los mensajes user + assistant ordenados por marca de tiempo.
  3. Trunca la transcripción a 24,000 caracteres (~6k tokens) — suficiente para una extracción significativa.
  4. Llama a Ollama /api/chat vía curl con un prompt de extracción estructurado.
  5. Escribe la portada ce-handoff/v1 + el cuerpo del modelo en el directorio de salida.
  6. El nombre del archivo es un slug del título de la sesión; sufijo numérico en caso de colisión.

Formato de salida

Cada archivo de salida es válido como ce-handoff/v1 con:

  • Portada artifact_contract: "ce-handoff/v1".
  • session_id, cwd, branch, repository cuando estén disponibles.
  • Extracción que cubre: objetivo, trabajo completado, estado actual, decisiones/restricciones, bloqueadores, enfoques fallidos, referencias, próximos pasos.

Watchdog de techo de contexto (compañero)

scripts/context-ceiling-watchdog.sh es un monitor determinista, sin agente, para el contexto de sesiones en vivo. Estima el contexto actual de cada sesión activa (contenido de mensajes con active=1 ÷ 4 chars/token — nunca uses sessions.input_tokens, que es el volumen de facturación acumulada incluyendo re-lecturas de contexto) y aplica:

  • >= 50k RECORDAR — aviso de una línea, se repite cada hora.
  • >= 70k ALERTA — advertencia de punto de control, se repite cada 30m.
  • >= 80k EXTRAER — ejecuta ce-pickup localmente e informa la ruta del archivo ce-handoff/v1; después de la extracción, solo vuelve a alertar si la sesión sube ~10k más (CRÍTICO).

Es silencioso (stdout vacío) a menos que se active un umbral, por lo que encaja directamente en un trabajo cron sin agente con detección de cambios. El estado reside en ~/.cache/context-ceiling-watchdog/ (TSV plano, sin memoria LLM ni continuidad recursiva). Nunca escribe en la configuración o estado en ejecución de Hermes; state.db se abre con sqlite3 en modo -readonly.

Pruébalo sin un modelo real: bash scripts/mock-ollama.sh 21143 & luego bash scripts/test-watchdog.sh (base de datos de prueba + umbrales escalados, 20 comprobaciones).

Problemas conocidos

Diálogos TCC desde Python (macOS Sequoia+): Ejecutar Python como subproceso de una aplicación con permisos amplios puede activar solicitudes TCC para iCloud Drive o Documentos, incluso cuando solo se lee ~/.hermes/state.db. El script de shell usa solo sqlite3 + curl + jq + awk y NO activa TCC. Nunca uses una implementación en Python de este flujo a menos que el usuario acepte explícitamente las solicitudes TCC.

Truncamiento de transcripción: 24k caracteres cubre la mayoría de las sesiones. Sesiones muy largas (200+ mensajes con salidas de herramientas grandes) se truncan por el final. Si la transferencia se siente superficial, divide en consultas más específicas.

Modelos pensantes + num_predict: El num_predict de Ollama limita los tokens generados totales INCLUYENDO message.thinking. Un modelo pensante (Ornith lo es) puede gastar todo el presupuesto en el canal de pensamiento y devolver message.content vacío o truncado al final — que el script lee exclusivamente. Síntoma: "respuesta vacía de Ollama" o una transferencia que se detiene a media frase, pareciendo un problema de calidad del modelo cuando es un error de configuración. El script envía think:false (con un reintento sin la bandera para modelos que la rechazan). Nota de contexto de Wesley: esa bandera es correcta SOLO para este trabajo de extracción mecánica — el pensamiento de Ornith es un activo en ingeniería agéntica, y una ejecución de extracción no dice nada sobre la capacidad agéntica. No generalices una extracción deficiente como un veredicto sobre el modelo.

Ollama debe estar funcionando: Verifica con ollama list antes de invocar.

La salida está en /tmp: El sistema operativo puede recuperar el espacio al reiniciar. Copia a una ruta estable si se reanuda entre reinicios.

Script

La implementación canónica es scripts/ce-pickup.sh en esta habilidad — llámala por su ruta de habilidad. Históricamente existía una copia en el host en ~/.hermes/scripts/ce-pickup.sh (documentada como un enlace simbólico); en máquinas donde esa copia existe pero NO es un enlace simbólico, está desactualizada — confía en el directorio de la habilidad.

Ver también: habilidad ce-handoff para el flujo de reanudación una vez que existe el documento de transferencia.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills relacionados