WriterAgent
Una extensión de LibreOffice que añade funciones de IA agéntica y NumPy.
Documentación
WriterAgent, LibrePy y LibreHarper

Python, NumPy e IA agéntica para LibreOffice (Writer, Calc y Draw)
Ejecuta Python y cómputo científico sin conexión en fórmulas de hojas de cálculo, edita documentos con IA privada local-first — sin dependencia de la nube.
El proyecto se distribuye como tres paquetes de extensión independientes (instala solo uno a la vez):
| Paquete | Qué incluye |
|---|---|
🤖 WriterAgent (WriterAgent.oxt) (Pila completa, recomendado para la mayoría de usuarios) | Todo en LibrePy y LibreHarper + panel lateral de IA, =PROMPT(), investigación web, conversor Calc → Python, servidor MCP |
🐍 LibrePy (LibrePy.oxt) | Entorno de ejecución de Python, =PY(), NumPy, pandas, SymPy, Monaco, Jupyter Archivo → Abrir .ipynb, ayudas de dominio, OCR (sin IA/MCP — compilación de núcleo para inclusión en LO) |
✍️ LibreHarper (LibreHarper.oxt) | Motor de gramática Harper offline independiente para Writer |
Descargar versiones .oxt · Índice de funciones · Guía de NumPy en LibreOffice · Discusiones
Capacidades clave
🤖 IA agéntica local-first y escritura (Writer)
- Chat en panel lateral con llamada a herramientas de múltiples turnos — Edita, reestructura o amplía documentos usando lenguaje natural. 9 herramientas principales más docenas de subagentes especializados para diseño de página, notas al pie, marcadores, revisiones y formularios.
- Interacción de voz bidireccional (STT y TTS) — Dicta indicaciones directamente a tu agente de documentos y escucha las respuestas en voz alta (local mediante Kokoro o Piper, o mediante tu endpoint de LLM).
- Ediciones que preservan el formato — Correcciones quirúrgicas y reescrituras de secciones que mantienen tu formato existente (negritas, cursivas, resaltados, tamaños de fuente, tablas y listas anidadas) sin alterar los estilos.
- Investigación web — Bucle integrado y privado de smolagents con DuckDuckGo. Sintetiza múltiples fuentes web y actualiza documentos abiertos con hechos y citas en tiempo real. Búsqueda de agente
- Gramática y corrección en tiempo real — Revisión gramatical local y respetuosa con la privacidad mediante Harper (rápida, autoinstalable), LanguageTool o endpoints de LLM con detección de oraciones multilingües. Detalles
- Importación de matemáticas y LaTeX — Convierte LaTeX y MathML en objetos matemáticos nativos y editables de LibreOffice. Guía de matemáticas
🐍 Python y cómputo científico (Calc y Writer)
- Fórmulas de hoja de cálculo
=PY()nativas — Ejecuta expresiones de Python, NumPy y pandas directamente en celdas de Calc con expansión automática de matrices, kernels de libro compartidos y scripts persistentes.=PY("np.mean(data)"; A1:A10)— Calcula estadísticas de matrices directamente en rangos de Calc.=PY("data.to_pandas(date_cols=True)"; A1:C10)— Carga datos de hoja en pandas con análisis automático de tipos y fechas.- Guía de NumPy en LibreOffice · Formas de datos y mapeo de tipos
- Editor de código Monaco integrado — Escribe, prueba y depura scripts de Python multilínea directamente en celdas o mediante el entorno Herramientas → Ejecutar script de Python con resaltado de sintaxis, autocompletado y diagnósticos.
- Dominios científicos y analíticos integrados — Ayudas listas para usar para EDA, detección de valores atípicos, regresión OLS, agrupamiento KMeans, simulaciones de Monte Carlo, álgebra simbólica (SymPy), trazado de gráficos y conversiones de unidades físicas (
convert_quantity(60, "mph", "m/s")→26.8224 m/s). Referencia de dominios · Ayudas de análisis - Conversor de hoja de cálculo → Python (WriterAgent) — Traduce más de 235 fórmulas clásicas de Calc/Excel a expresiones limpias de Python usando la biblioteca de paridad
calc.*integrada, preservando constantes, fechas y formatos de celda. Detalles - Visión local y OCR — Extrae texto de imágenes incrustadas o documentos escaneados directamente en Writer y Calc mediante OCR Docling sin conexión. Guía de visión
Soporte de cuadernos Jupyter — Archivo → Abrir… un .ipynb(o doble clic /soffice notebook.ipynb) crea un documento de Writer con markdown, campos de código editables y botones ▶ de ejecución contra un kernel de Python compartido. Jupyter en Writer- Seguro ante fallos por diseño — NumPy se ejecuta fuera de proceso en tu propio venv, por lo que un error de script no puede bloquear LibreOffice.
📊 Diagramas, diapositivas y multimodal (Draw e Impress)
- Generación de diagramas y presentaciones — Genera, ajusta y estiliza diagramas de flujo, formas, conectores, notas del orador y transiciones de diapositivas mediante comandos de chat o scripts de Python. Detalles
- Creación y edición de imágenes — Genera una nueva imagen a partir de una indicación, o edita un gráfico seleccionado en su lugar, en el mismo endpoint que el chat. Inserta en Writer, Calc, Draw e Impress. Generación de imágenes
- Árbol semántico LO-DOM — Comprensión estructural de encabezados, secciones, tablas y relaciones en documentos completos. Árbol semántico
- Búsqueda y memoria entre documentos — Consulta otros documentos en la misma carpeta mediante embeddings locales / búsqueda híbrida, con memoria de agente persistente entre sesiones. Embeddings · Memoria
🔌 Integraciones y extensibilidad
- Servidor de Protocolo de Contexto de Modelo (MCP) — Conecta IDEs y agentes externos (Cursor, Claude Desktop, LM Studio) para leer y editar documentos abiertos de LibreOffice mediante
http://localhost:18765/mcp. Protocolo MCP - Backends de agente conectables — Cambia el motor de chat a agentes externos como Hermes, Claude Code, Mistral Vibe, Grok Build o OpenCode mediante ACP. Plugin de Cursor · Habilidad de LO
Catálogo completo de capacidades: docs/features.md.
Instalación y configuración
- Descarga el paquete
.oxtque elijas desde Últimas versiones y haz doble clic para instalar (o abre LibreOffice y ve a Herramientas → Administrador de extensiones → Agregar). Recuerda instalar solo un paquete de extensión. - Reinicia LibreOffice.
- Configuración rápida:
- Usuarios de Python / LibrePy: Abre Calc, revisa Herramientas → LibrePy (o WriterAgent) → Configuración → Python y haz clic en Probar para verificar tu entorno y la disponibilidad de NumPy/pandas.
- Usuarios de IA / WriterAgent: Abre WriterAgent → Configuración e ingresa tu endpoint (p. ej.
http://localhost:11434para Ollama local (sin necesidad de clave), o una clave API de OpenRouter / Together.AI). Abre el panel lateral mediante Ver → Panel lateral → WriterAgent o presiona Ctrl+Q / Ctrl+E.
Modos de interfaz: En el modo clásico de barra de herramientas, accede a las herramientas mediante la barra de menú superior. En interfaces con pestañas/cinta, usa el panel lateral de chat WriterAgent y/o el panel lateral Python (Writer + Calc): Configuración
⚙, Python🐍, matemáticas LaTeX o Editar celda, búsqueda🔍(solo chat de WriterAgent) y menús completos mediante☰.
Para instrucciones detalladas de configuración, consulta la Guía de instalación y solución de problemas.
Demostraciones
Python en LibreOffice Writer

Analítica de hojas de cálculo y panel de control

Hermes + Opus 4.6 (Investigación web)

Expresiones matemáticas y LaTeX

Currículum en Arch Linux

Diagramas en Draw

Evaluaciones comparativas y evaluación
El conjunto de evaluación de LLM Eval-1 de WriterAgent ejecuta modelos en trabajos reales de Writer, Calc y Draw mediante las mismas herramientas que usa el panel lateral, y luego puntúa el documento exportado. Tareas típicas: reformatear documentos, recalcular impuestos, dibujar diagramas como la bandera estadounidense usando formas. Cada ejecución se clasifica por Valor (corrección² ÷ dólares). La tabla siguiente es el tablero completo de doble carril 29×19 del 2026-09-28 (flag-18 + org_chart_gen, con anulaciones de galería de organigramas puntuadas manualmente — 5 PASS visuales difíciles). Metodología completa: docs/eval/benchmarks.md.
Vista de distancia a la frontera: docs/eval/pareto-distance.svg.
| Modelo | Corrección puntuación promedio de tarea (0–1) | Valor Corrección² ÷ $/tarea |
|---|---|---|
| openai/gpt-oss-120b | 0.921 | 803 |
| openai/gpt-oss-20b | 0.759 | 524 |
| poolside/laguna-xs-2.1 | 0.838 | 358 |
| upstage/solar-pro4 | 0.716 | 352 |
| google/gemma-4-31b-it | 0.861 | 330 |
| google/gemma-4-26b-a4b-it | 0.701 | 216 |
| bytedance-seed/seed-2.0-mini | 0.861 | 179 |
| poolside/laguna-s-2.1 | 0.732 | 160 |
| meta/muse-spark-1.3-contributor | 0.981 | 147 |
| openai/gpt-6-luna | 0.873 | 139 |
| z-ai/glm-5.3-flash | 0.856 | 87 |
| nvidia/nemotron-3.5-super-vl | 0.932 | 82 |
| liquid/lfm-2.5-24b-a2b | 0.589 | 82 |
| prism-ml/ternary-bonsai-2-27b | 0.543 | 78 |
| deepseek/deepseek-v4.1-flash | 0.883 | 77 |
| qwen/qwen3.8-flash | 0.792 | 65 |
| mistralai/mistral-small-2603 | 0.583 | 64 |
| meta/muse-glimmer-30b | 0.923 | 60 |
| inception/mercury-2.5-preview | 0.817 | 56 |
| ibm-granite/granite-4.2-8b | 0.810 | 55 |
| google/gemini-3.5-flash-lite | 0.708 | 49 |
| nvidia/nemotron-3.5-lightning | 0.395 | 46 |
| nvidia/nemotron-3-super-120b-a12b | 0.854 | 38 |
| reflection/beam-1.0-501b-a23b | 0.879 | 18 |
| cohere/command-a-plus | 0.641 | 13 |
| minimax/minimax-m3 | 0.780 | 11 |
| x-ai/grok-4.6 | 0.918 | 9 |
| qwen/qwen3.8-27b | 0.917 | 9 |
| nvidia/nemotron-3-ultra-550b-a55b | 0.787 | 4 |
Documentación y arquitectura
| Tema | Enlace de documentación |
|---|---|
| Índice de funciones | docs/features.md |
| NumPy y Python en Calc | docs/enabling_numpy_in_libreoffice.md · docs/calc/py-data-shapes.md |
| Arquitectura principal de LibrePy | docs/scripting/librepy-split.md |
| Funciones auxiliares de dominio | docs/scripting/numpy-domains.md · docs/calc/analysis-tools.md |
| Arquitectura completa | docs/writeragent-architecture.md · docs/framework/formal-verification.md |
| Protocolo de Contexto de Modelo (MCP) | docs/mcp-protocol.md |
| Embeddings y búsqueda | docs/embeddings.md |
| Evaluaciones comparativas | docs/eval/benchmarks.md |
| Localización (35 idiomas) | docs/framework/localization.md |
| Explorador de código | DeepWiki |
| Cursor / Habilidades de agente | cursor-libreoffice · libreoffice-skill |
Internamente, todas las operaciones se rigen por una máquina de estados finitos verificada formalmente, con verificación estricta de tipos y análisis estático. Las llamadas UNO no seguras para subprocesos se detectan en desarrollo mediante un proxy viral de protección de subprocesos, en lugar de congelarse aleatoriamente. El conjunto de pruebas del panel lateral con LLM simulado — el peor LLM del mundo — demuestra la recuperación de detención, bloqueo y errores de extremo a extremo.

Evolución del proyecto
Una crónica de la construcción de un entorno de ejecución de Python y un conjunto de IA dentro de LibreOffice:
- Semana 1: Fork inicial, chat en panel lateral, herramientas de múltiples turnos y transmisión asíncrona
- Semanas 2 y 3: MCP, subagente de investigación, soporte de voz y panel de evaluación
- Semanas 4–6: Máquinas de estado, verificación formal y conjuntos de herramientas especializados
- Semanas 6 y 7: Verificación gramatical asíncrona y soporte de importación TeX
- Semana 8+: Puente de cómputo NumPy,
=PY()
Contribución y desarrollo
Discusiones
Requisitos previos: Python 3.11–3.13 para desarrollo (fijado en 3.13 mediante
.python-version), uv. Ejecuta make check-setup para verificar. En macOS: instala make, gettext.
git clone https://github.com/KeithCu/writeragent.git
cd writeragent
uv python install 3.13
uv sync
make deploy # Builds & installs WriterAgent.oxt (or: make deploy writer)
make test
make help
Para compilar y probar las variantes de extensión independientes:
# Standalone Python / NumPy compute suite (LibrePy)
make build-core # Produces build/LibrePy.oxt
make deploy-core # Installs LibrePy.oxt (removes WriterAgent)
# Standalone Harper grammar checker (LibreHarper)
make build-harper # Produces build/LibreHarper.oxt
make deploy-harper # Installs LibreHarper.oxt
Consulta AGENTS.md (invariantes), docs/repo-map.md (puntos de entrada) y docs/scripting/librepy-split.md para detalles de arquitectura.
Créditos
| Proyecto | Contribución |
|---|---|
| localwriter | Extensión original de Writer LLM (John Balis) |
| LibreCalc AI Assistant | Base e inspiración de IA para Calc |
| LibreOffice MCP Extension | Patrones de servidor MCP, Makefile, registro de herramientas |
| Hermes Agent | Analizadores de llamadas a herramientas, reparación JSON, patrones de memoria |
| latex2mathml | LaTeX → MathML |
| mathml-to-latex | MathML → LaTeX (exportación de fórmulas de Writer) |
| isodate | Análisis/formato de duración ISO 8601 (cable de Calc) |
Licencia
GNU GPL v3 (o posterior) — consulta LICENSE. Originalmente MPL 2.0; relicenciado en 2026 para una reciprocidad más fuerte y compatibilidad de bibliotecas.
| Año | Contribución | Colaborador |
|---|---|---|
| 2024 | Lanzamiento original | John Balis |
| 2025–2026 | Configuración, registros, sistema de compilación | quazardous |
| 2026 | Integración de Calc (originalmente MIT) | LibreCalc AI Assistant |
| 2026 | Modificaciones y relicenciamiento | KeithCu |