Harness agéntico nativo de OpenCode y determinista para procesar corpus documentales fotografiados: OCR histórico, métricas de minería de texto y reportes exploratorios por subcarpeta.
Clio corre como agente nativo de OpenCode: el orquestador, las skills de los cuatro roles y el comando /clio viven dentro de .opencode/. Los scripts en harness/tools/ son las primitivas deterministas que esos agentes invocan; sin OpenCode podés ejecutar el pipeline como scripts sueltos en modo manual, pero perdés la orquestación unificada, las validaciones entre etapas y el comando /clio.
Clio trata cada subcarpeta de Fuentes/ como un subcorpus independiente y ejecuta un flujo de cuatro roles:
- Clio (orquestadora) — valida, decide punto de reanudación y registra.
- OCR histórico — transcribe una imagen a la vez preservando layout y ortografía de época.
- Analista cuantitativo — calcula frecuencia, co-ocurrencia, correlación y TF-IDF.
- Redactor de informes — produce un HTML preliminar por imagen y un informe final Markdown.
El principio rector es determinismo: estado en el filesystem, validaciones entre etapas y cero invenciones para tapar faltantes.
Este repo incluye un subcorpus procesado de referencia y una carpeta de fuentes sin procesar:
Fuentes/Actas/— 10 fojas de una reunión del CORS (22/08/1943), con:i_procesadas/- transcripciones
.txty.json metricas/informe_preliminar.htmlinforme_final.mdlog_clio.md
Fuentes/Panfletos/— imágenes sueltas pendientes, útil para probar una corrida nueva.
Fuentes/Actas/ sirve como corpus de referencia para ver la estructura completa de entrada/salida.
- OpenCode (runtime nativo del harness).
- Python 3.10+
- Dependencias Python:
pip install -r harness/tools/requirements.txtSi no querés tocar JSON a mano, usá el asistente guiado:
python harness/tools/configurar_modelos.pyEl script ofrece tres caminos:
- Configuración por defecto
- Configuración recomendada (la que viene testeada en este repo)
- Configuración guiada paso a paso
También podés aplicar un preset directo:
python harness/tools/configurar_modelos.py --preset default
python harness/tools/configurar_modelos.py --preset recommendedClio ya trae un harness/modelos.json listo para usar. El asistente reescribe ese archivo y además sincroniza el campo model: de .opencode/agents/*.md. Después del cambio, reiniciá OpenCode.
El harness también puede registrar fallos consecutivos por subcarpeta con python harness/tools/swap_modelo.py <rol> --auto "<ruta-subcarpeta>" "<detalle>". Esto aplica a ocr-historico, analista-cuantitativo y redactor-informes. Al tercer fallo consecutivo del modelo principal, el script cambia el model: del agente al respaldo y deja constancia en checklist.json y log_clio.md. El cambio sigue requiriendo reinicio de OpenCode antes de reanudar.
Aclaración:
harness/modelos.jsonestá trackeado en el repo intencionalmente, de modo que el repositorio publicado refleje siempre una configuración funcional. Los presetsmodelos.default.jsonymodelos.recommended.jsonson plantillas que el asistente guiado puede copiar amodelos.json; no se cargan en runtime. Los agentes en runtime leen su propio frontmattermodel:.
Desde una sesión OpenCode abierta en este repo:
/clio Fuentes/MiSubcorpus
OpenCode usa opencode.json para elegir clio como agente por defecto, carga su definición desde .opencode/agents/clio.md, las cuatro skills de .opencode/skill/ y el comando /clio. El flujo valida el estado en cada etapa y registra avance en el filesystem, así que es seguro interrumpirlo y reanudar.
Útil solo para debug o cuando no podés abrir OpenCode. Perdés la orquestación, las validaciones entre etapas y el comando /clio: tenés que invocar los scripts uno a uno en el orden correcto.
python harness/tools/estado.py Fuentes/MiSubcorpus init
python harness/tools/validar.py transcripciones Fuentes/MiSubcorpus
python harness/tools/metricas.py Fuentes/MiSubcorpus
python harness/tools/validar.py metricas Fuentes/MiSubcorpus
python harness/tools/informe_preliminar.py Fuentes/MiSubcorpus
python harness/tools/validar.py informes Fuentes/MiSubcorpus
python harness/tools/estado.py Fuentes/MiSubcorpus resumenClio/
├── opencode.json
├── .opencode/
│ ├── agents/
│ ├── command/
│ └── skill/
├── harness/
│ ├── modelos.json
│ └── tools/
├── tests/
│ ├── run_all.py
│ ├── clio_validation_regression.py
│ └── clio_model_setup_regression.py
├── docs/
│ ├── instalacion.md
│ ├── uso.md
│ └── formato-del-corpus.md
└── Fuentes/
├── Actas/
└── Panfletos/
- Validación de transcripciones, métricas e informes.
- Reanudación desde filesystem (
checklist.json,i_procesadas/,metricas/, informes). correlacion.jsondeterminista entre procesos Python con distintoPYTHONHASHSEED.- Suite de regresión completa en
tests/run_all.py(19 tests entre validación y configuración de modelos).
docs/instalacion.mddocs/uso.mddocs/formato-del-corpus.mdCONTRIBUTING.md
GitHub ya puede leer la metadata de citación desde CITATION.cff.
Nieto, Agustín (INHUS-CONICET/UNMDP).
Clio: Harness agéntico y determinista para OCR histórico, métricas de minería de texto y reportes exploratorios por subcarpeta.
Version 0.1.0. GitHub.
https://github.com/agusnieto77/Clio
@software{clio_2026,
author = {Nieto, Agustín},
title = {Clio: Harness ag\'entico y determinista para OCR hist\'orico, m\'etricas de miner\'ia de texto y reportes exploratorios por subcarpeta},
year = {2026},
version = {v0.1.0},
note = {INHUS-CONICET/UNMDP},
url = {https://github.com/agusnieto77/Clio}
}MIT. Ver LICENSE.