Proyecto independiente No afiliado, patrocinado ni avalado por la Watch Tower Bible and Tract Society o Jehovah's Witnesses.
jw-agent-toolkit
EN

2026-05-30 · Release 22-32

11 fases. Un ecosistema completo de discipulado y confianza.

Las Fases 22–32 cierran el ciclo de discipulado activo (conductor de estudio, partes del estudiante, informe de precursor) y la infraestructura de confianza (eval doctrinal + citation validator) que mide cada cambio. Sin LLM en el camino crítico, sin red en tests, citas siempre verificables.

Fases entregadas

11

22 → 32

Commits TDD

146

red → green → commit

Tests nuevos

+890

551 → 1641 passing

Regresiones

0

audit 1:1 por fase

▌ Reglas duras respetadas por las 11 fases

  • Sin LLM en el camino crítico — parsers/agentes/stores determinísticos.
  • Citas siempre verificables con URL canónica a wol.jw.org.
  • Local-first; toda persistencia personal en ~/.jw-agent-toolkit/.
  • Sin red en tests — fixtures + cassettes + injectable fetchers.
  • Multilenguaje desde el día 1 (en/es/pt mínimo, hasta 17 locales).
  • No sustituye la palabra de los ancianos — los agentes orientan, no aconsejan.
  • Sin tracker de hermanos sin opt-in explícito + cifrado E2E.
  • Sin distribuir letras de cánticos ni texto bíblico (copyright).

Tier 1 · Infraestructura de confianza

Mide y protege todo lo demás.

Fase 22

Eval doctrinal con regresión

Red de seguridad que mide cada cambio

+35 tests 20 commits ✓ Shipped
Guía →

Suite de tres capas (estructural · citas · semántico) con 47 golden cases. Convierte el riesgo de alucinación doctrinal en métrica auditable que bloquea PRs. Es la pieza que protege a las otras 10.

Qué se entregó

  • Paquete nuevo packages/jw-eval con Suite + GoldenCase + LayerResult.
  • L1 estructural: contract regression sobre 6 agentes — sin red, sin LLM, bloqueante en CI.
  • L2 citas: modo snapshot offline (siempre activo) + modo live weekly (abre issues de drift).
  • L3 semántico: embeddings (sentence-transformers) + escalada LLM (Ollama/Claude/OpenAI vía JW_EVAL_LLM).
  • 47 golden cases (25 L1 + 13 L2 + 9 L3) cubriendo apologetics, verse_explainer, study_conductor, life_topics y más.
  • CLI `jw eval`, herramienta MCP `run_eval_suite`, 3 jobs CI nuevos (fast / weekly / nightly).

Pendiente / siguiente PR

  • Construir los 12 snapshots HTML de wol.jw.org con `build_eval_snapshots.py` (requiere red).
  • Bot-comment de reporte markdown en PRs (existe el artifact; falta el comment hook).

Fase 23

Citation integrity validator

Contraparte de la telemetría — lado salida

+33 tests 12 commits ✓ Shipped
Guía →

Subpaquete jw_core.citations que valida que cada URL emitida por un agente resuelva y mantenga su mapeo docId↔pub_code. Tres modos: estructural (offline), live (HTTP real), drift (compara fingerprint HTML).

Qué se entregó

  • Subpaquete jw_core.citations: models.py (CitationCheck/CitationReport), validator.py.
  • Modo estructural: usa MepsCatalog para validar docId sin red.
  • Modo live: httpx_fetcher con redirect handling (hasta 3) + asyncio.Semaphore(4).
  • Modo drift: hash de HTML-skeleton para detectar cambios estructurales sin falsos positivos por contenido.
  • CLI `jw citations check --urls/--agent-output [--live] [--drift]`.
  • Herramienta MCP validate_citations con tres modos.

Pendiente / siguiente PR

  • Reuso automático de snapshots con Fase 22 para refresh de fixtures cuando se detecta drift.

Tier 2 · Alto valor recurrente

Uso semanal por publicador.

Fase 24

Conductor "Disfruta de la vida para siempre"

Lifecycle completo del libro de estudio actual

+49 tests 20 commits ✓ Shipped
Guía →

El hueco más grande del discipulado actual. Prepara cada lección con preguntas anticipadas, sugiere versículos de apoyo y mantiene el progreso de cada estudiante (lecciones completadas, metas, asistencia). Local-only, cifrado por passphrase, en línea con la postura de privacidad del proyecto.

Qué se entregó

  • Agente study_conductor.prepare_lesson (templated, sin LLM).
  • Store StudentProgressStore: SQLite local + columnas sensibles cifradas con FieldEncryptor.
  • Modelos LessonRow/StudentGoal/GoalKind/LessonStatus.
  • Vocabulario controlado de metas (attend_meetings, baptism, drop_addiction_*, family_worship, pray_daily).
  • CLI: `jw study lesson/log/progress/lessons/goals/directory`.
  • Tools MCP: prepare_lesson, log_student_progress, list_student_lessons, set_student_goal.
  • Crisis-keyword scan emite warning sin bloquear (la nota se guarda igual).
  • Disclosure de privacidad + consent en first-run de CLI.

Pendiente / siguiente PR

  • Auto-extracción de Q&A reales desde el libro 'lff' cuando esté disponible en JWPUB local (hoy templates).
  • Sync inverso opcional con JW Library para marcar lecciones completadas en la app.

Fase 25

Monitor de novedades jw.org

Digest semanal/mensual de lo nuevo

+29 tests 13 commits ✓ Shipped
Guía →

Detecta nuevas publicaciones, nuevos videos de JW Broadcasting y nuevos workbooks/Atalayas. Distinto de la telemetría (que detecta drift de la API): este vigila contenido publicado. Diff incremental con seen-store local.

Qué se entregó

  • Subpaquete jw_core.news: SeenStore SQLite, 3 sources (publications/broadcasting/programs).
  • Seed pub_code list para periódicos + non-periodicals.
  • ProgramsSource probe ventana +2 meses para no perder workbooks que se publican antes de fin de mes.
  • Digest markdown agrupado por canal/idioma + JSON.
  • Agente news_monitor wrapper para MCP/CLI surfaces.
  • CLI `jw news digest --since=... --languages=... --channels=...`.
  • Tool MCP news_digest.

Pendiente / siguiente PR

  • Daemon/scheduler shipped (hoy solo doc del cron recomendado).
  • Retired items: hoy se loguean; podrían disparar notifs opt-in.

Tier 3 · Especializado pero único

Llena huecos pedagógicos o de informe.

Fase 26

Partes del estudiante (Vida y Ministerio)

Guion pedagógico por tipo de asignación

+34 tests 12 commits ✓ Shipped
Guía →

Cuatro tipos de asignación del aula auxiliar: lectura de la Biblia, empezar conversaciones, revisita, demostración de estudio bíblico. Cada uno con su guion y enganche al punto de oratoria del mes. Distinto del generador de discursos públicos.

Qué se entregó

  • Registro oratory_points: 50 puntos × 3 idiomas (paráfrasis ≤120 char con CI guard de copyright).
  • Templates 48 slots: 4 kinds × 4 audiences × 3 lenguajes.
  • Agente student_part_helper con secciones opening/body/transition/close + time_target_seconds + oratory_point_applied.
  • 'this week' mode: opt-in lazy import de workbook_helper con soft-fail.
  • CLI `jw student`, MCP tool student_part_help.
  • 4 golden cases L1 (bible_reading es / starting_conversation en / return_visit pt / bible_study es).

Pendiente / siguiente PR

  • Mapeo mes → punto de oratoria configurable (hoy fijo 1→1, 2→5, …).
  • Templates específicos adicionales para más combinaciones audience×family.

Fase 27

Informe mensual de precursor

Solo precursores · cifrado por defecto

+22 tests 13 commits ✓ Shipped
Guía →

Agregador local-only de horas + cursos bíblicos activos + revisitas. Para precursores regulares y auxiliares — los publicadores reportan solo participación, fuera de scope. Cifrado por passphrase por defecto; salida markdown/CSV/PDF opt-in.

Qué se entregó

  • Subpaquete jw_core.ministry: field_report (store + aggregator) + exporters (md/csv/pdf).
  • Cifrado de columnas sensibles (note, student_id) por FieldEncryptor; opt-out documentado.
  • Vocabulario de tags + override local en field_service_tags_local.json.
  • Cursos activos: regla MAX-durante-el-mes (práctica JW moderna), documentada en el footer del reporte.
  • Revisits adapter: read-only sobre RevisitTracker (Fase 12), nunca escribe.
  • CLI `jw report --month YYYY-MM --format md/csv/pdf`.
  • Tools MCP: field_log_hours, field_log_study, field_monthly_report.
  • PDF via weasyprint + jinja2 como extra [pdf] (skip cleanly cuando no instalado).

Pendiente / siguiente PR

  • Exportar a S-13/S-301 oficial (estructura, no formato).
  • Reporte anual agregado (12 meses).

Fase 28

Concordancia exacta NWT + publicaciones

Búsqueda literal estilo Watchtower Library

+39 tests 11 commits ✓ Shipped
Guía →

Determinístico, complementa el RAG semántico. SQLite FTS5 sobre el corpus ya descifrado (NWT + JWPUB + EPUB). Búsqueda literal con tokenizer unicode61 remove_diacritics 2 (UX hispano).

Qué se entregó

  • Subpaquete jw_core.concordance: store, indexer, search, models.
  • FTS5 con unicode61 remove_diacritics 2 (Espíritu ≈ espiritu).
  • Tres source kinds: nwt / jwpub / epub con URL resolution por canal.
  • Indexación incremental por sha256 (re-runs skip unchanged).
  • Snippet markers Unicode ‹…› (markdown-safe, html-safe, CLI-readable).
  • CLI `jw grep <query> [--lang] [--kind] [--build-index] [--build-nwt]`.
  • Tools MCP: concordance_build_index, concordance_search.
  • Tests property-based con corpora aleatorios de 50 versículos.

Pendiente / siguiente PR

  • `--build-nwt` por libro entero (hoy capítulo-a-capítulo).
  • Wiring del adapter concordance_search en jw-eval para golden cases.

Tier 4 · Capas de UX y nicho

Cierran el círculo de preparación y conversión.

Fase 29

Compositor de carta / teléfono / carrito

3 modalidades ministeriales no cubiertas

+543 tests 11 commits ✓ Shipped
Guía →

Carta personalizada (120-180 palabras, pensamiento bíblico + versículo + link jw.org), guion telefónico (~60-90s), micro-script de carrito (1 opener + 2 réplicas + invitación). Templates por audiencia × topic_family. Copyright-safe: scripture.excerpt = '' siempre.

Qué se entregó

  • Agente letter_composer con tres kinds (letter/phone/cart).
  • 7 audiences × 8 topic_families × 3 idiomas — 504 combinaciones cubiertas vía fallback de 3 niveles.
  • Copyright safety: scripture Finding nunca lleva texto bíblico, solo Citation.url a wol.jw.org. Test enforced.
  • Territory hint cosmético: insertado en opener prefix, nunca filtra contenido. Test enforced.
  • CLI `jw letter --kind --topic --language --audience [--territory-hint]`.
  • Tool MCP compose_witnessing.
  • 3 golden cases L1 (letter/phone/cart).

Pendiente / siguiente PR

  • Templates específicos adicionales (hoy 30 hand-written + fallback).
  • Modo offline para sugerencias de jw_link via pub_media cache.

Fase 30

Compañero de cánticos del Reino

Solo metadata · cero letra

+20 tests 11 commits ✓ Shipped
Guía →

Registro hand-curated de cánticos: número, título, tema (paráfrasis ≤200 char), scriptures citadas, URL canónica. NUNCA letra (copyright). Integración no-destructiva con workbook_helper.

Qué se entregó

  • Seed JSON E/S/T con 12 cánticos cada uno (151 totales pendientes vía PRs).
  • Modelo KingdomSong + SongLookupError.
  • SongRegistry loader con cache por idioma.
  • Anti-lyrics CI guard: cap 200 char + tokens prohibidos (verse, chorus, estrofa, refrão, ©).
  • Adapter enrich_with_songs no-destructivo sobre workbook_helper (opt-in vía --with-songs).
  • URL derivation offline: fallback a https://www.jw.org/finder?wtlocale=X&pub=sjj cuando no hay docid.
  • CLI `jw song <number> [--lang]`.
  • Tools MCP: lookup_song, songs_for_week.

Pendiente / siguiente PR

  • Expandir seed de 12 → 151 cánticos completos (PRs incrementales).
  • doc_id por entrada para deep URLs (hoy mayoría usa finder fallback).

Fase 31

Exportador PDF / DOCX / Anki

Cualquier AgentResult → entregable

+54 tests 11 commits ✓ Shipped
Guía →

Convierte el output de cualquier agente en hoja imprimible (PDF/DOCX) o mazo de repaso espaciado (Anki). IR única (StudySheet) — todos los exporters consumen lo mismo. Extras opt-in: [pdf], [docx], [anki].

Qué se entregó

  • Subpaquete jw_core.exporters: ir.py (StudySheet Pydantic + from_agent_result).
  • Exporters: markdown (siempre) · pdf (weasyprint) · docx (python-docx) · apkg (genanki).
  • Templates Jinja2 con override en ~/.jw-agent-toolkit/templates/ (auto-detected).
  • 2 themes built-in: plain · study-sheet.
  • Anki GUIDs estables: sha256(title + heading + body[:200]). Re-export actualiza, no duplica.
  • MissingDependencyError con pip hint copy-pasteable cuando falta extra.
  • CLI `jw export --format md/pdf/docx/apkg --out PATH`.
  • Tool MCP export_study_sheet.
  • 3 citation styles: inline-paren / footnote (default) / bibliography.

Pendiente / siguiente PR

  • CI matrix con [pdf] instalado para cazar regresiones de weasyprint.
  • Themes adicionales (high-contrast, dyslexia-friendly).

Fase 32

Asistente informativo de temas de vida

Orientación con citas, no consejería

+32 tests 12 commits ✓ Shipped
Guía →

Para preguntas como '¿Qué dice la Biblia sobre la ansiedad/el duelo/los problemas matrimoniales?'. Framing distinto del de objeciones: el usuario pregunta para sí. Cada respuesta incluye disclaimer + redirect a ancianos cuando el tema es sensible.

Qué se entregó

  • Subpaquete jw_core.data.life_topics (registry + aliases + family sensitive/general).
  • 9 topic_ids iniciales: anxiety, grief, marriage_conflict, parenting, depression_signs, loneliness, addictions, conflict_with_brother, doubts_in_faith.
  • Agente life_topics con pipeline: topic_index → CDN search → preview Finding + URL + disclaimer + elders_redirect (sensitive only).
  • Disclaimer text NO menciona terapeutas/psicólogos/médicos — invariante de datos, tested.
  • Agente NUNCA fabrica citas bíblicas; sin matches devuelve empty + disclaimer + redirect.
  • CLI `jw life <topic> --language`.
  • Tool MCP life_topic_info.
  • 4 golden cases (2 L1 + 2 L3) para anxiety_es y grief_en.

Pendiente / siguiente PR

  • Expandir registry de 9 → 30+ topics.
  • Permitir override del disclaimer a nivel personalizado (manteniendo elders_redirect obligatorio para sensibles).

▌ Proceso · cómo se ejecutaron las 11 fases

1. Brainstorming

Antes de tocar código, cada fase pasó por una sesión estructurada de preguntas (oráculo, juez, scope) y propuesta de 2-3 enfoques con tradeoffs.

2. Spec + Plan

Cada fase tiene su spec-design.md aprobado y su plan.md bite-sized (tasks de 2-5 min con código exacto). Todo committed en docs/superpowers/.

3. TDD estricto

Cada task: redgreencommit. 154 tasks ejecutadas. Test fallando observada antes de cada impl. Cero excepciones.

▌ Próximos pasos del ecosistema

Operacional

  • – Build de snapshots HTML para Fase 22 (offline en CI).
  • – Publicar jw-eval a PyPI cuando estabilice.
  • – CI matrix con extras [pdf]/[docx]/[anki] instalados.
  • – Bot-comment del reporte de eval en cada PR.

Contenido

  • – Expandir cánticos del Reino de 12 → 151 entradas.
  • – Más topics en life_topics (de 9 → 30+).
  • – Auto-extract de Q&A reales para study_conductor.
  • – Más golden cases (política: cada PR añade ≥3).