Saltar a contenido

Cambios del 1/7/2026 — Skills de Anthropic + Stack LibreOffice

Resumen ejecutivo

Se instalaron 9 skills nuevas del repositorio oficial de Anthropic (github.com/anthropics/skills, 157k stars, último push 2026-07-01) y se desplegó un stack Docker de LibreOffice para que las skills de Office (pptx, docx) puedan convertir formatos sin instalar ~500MB en el host.

Todo lo instalado es de código abierto, sin telemetría, sin cuentas externas. Cero impacto en servicios existentes (Caddy, AdGuard, Docker stacks previos, cron, .env).

Cambios por fase

Fase 0 — Reserva de puerto

  • Puerto 8529 registrado para libreoffice-converter via nextport.

Fase 1 — Dependencias Python (pip install --break-system-packages)

Instaladas globalmente: - pypdf 6.14.2 - pdfplumber 0.11.10 - reportlab 5.0.0 - pikepdf 10.9.1 - pymupdf 1.28.0 - openpyxl 3.1.5 - xlsxwriter 3.2.9 - markitdown 0.1.6

Total: ~80MB en site-packages. Sin cambios en PATH ni en paquetes del sistema. Verificado con import test OK.

Fase 2 — pandoc (apt install)

  • pandoc 3.1.3 instalado via sudo apt install -y pandoc.
  • Tamaño: ~150MB en /usr/bin/pandoc.
  • Necesario para: conversión .doc <-> .docx, lectura de tracked changes, export a markdown.

Fase 3 — Stack Docker LibreOffice (pendiente de levantar)

Ubicación: /opt/docker/libreoffice/

Componentes: - Dockerfile: build sobre lscr.io/linuxserver/libreoffice:latest (oficial linuxserver, ~1GB). Agrega python3-pip, python3-uno, libreoffice-script-provider-python, e instala unoserver via pip. - converter.py: TCP listener en puerto 2002 dentro del container. Habla con unoserver (puerto 2003) que mantiene un soffice persistente. Protocolo simple: CONVERT <input> <format> <outdir>, responde OK <path> o ERROR <msg>. - docker-compose.yaml: servicio único converter, expone 127.0.0.1:8529 -> 2002 (loopback, no internet). Volume /tmp/lo-conversions:/conversions. Restart unless-stopped. - lo_convert.py: cliente CLI en el host, se conecta a 127.0.0.1:8529. Instalado en ~/.local/bin/lo_convert.py (modo 755). - start.sh: script de bootstrap (build + up + verify) para correr manualmente con sudo.

Adaptación: en este homelab NO instalamos LibreOffice en el host. La conversión va toda al container. La superficie de cambio en el host es un puerto (8529) y un script de 2KB.

Para levantar: bash /opt/docker/libreoffice/start.sh

Para parar: cd /opt/docker/libreoffice && sudo docker compose down

Fase 4 — Skills instaladas en ~/.hermes/skills/

Total: 9 skills nuevas. Todas verificadas con skills_list.

Nivel A (5 skills, autocontenidas, sin deps nuevas):

Skill Categoría Tamaño Qué hace
frontend-design creative 18KB Guía de diseño visual: anti-AI-slop, tipografía, color, motion
theme-factory creative 139KB 10 themes pre-armados con paleta + tipografía + PDF showcase
brand-guidelines creative 14KB Aplica look-and-feel oficial de Anthropic a artifacts
doc-coauthoring productivity 16KB Workflow estructurado para co-escribir documentos
internal-comms productivity 13KB Recursos para escribir comunicaciones internas

Nivel B (4 skills, con deps):

Skill Categoría Tamaño Qué hace
pdf productivity 59KB Lee/edita/crea PDFs, fill forms, OCR, split/merge
xlsx productivity 19KB Crea/edita Excel con fórmulas, color coding, sin errores
docx productivity 1.1MB Crea/edita Word, comentarios, tracked changes, schemas
pptx productivity 1.1MB Crea/edita PowerPoint, thumbnails, 10 paletas pre-armadas

Nota: las skills docx y pptx traen schemas XSD de Microsoft Office Open XML (varios MB) para validación estricta. Es el grueso del tamaño.

Adaptación de skills (2 archivos modificados):

  • ~/.hermes/skills/productivity/docx/scripts/office/soffice.py Reescrito para usar ~/.local/bin/lo_convert.py (cliente TCP) en vez del binario soffice local. Mantiene la firma run_soffice(args) para no romper callers. Removido el shim de LD_PRELOAD/socket (no hace falta, vamos por TCP).

  • ~/.hermes/skills/productivity/pptx/scripts/office/soffice.py Idem. Misma firma, misma lógica.

Skills que YA existían y se solapan (dejamos ambas por ahora):

  • powerpoint (tuya) vs pptx (Anthropic): las dos generan .pptx. Anthropic es más completa (trae 10 paletas, anti-AI-slop guidance, scripts de thumbnails). La tuya probablemente es más simple y familiar.
  • nano-pdf (tuya) y ocr-and-documents (tuya) vs pdf (Anthropic): las tres manipulan PDFs. La Anthropic es la más completa (fill forms, validación, scripts). Las tuyas pueden ser más especializadas.

Decisión: no borrar nada. Cuando uses un caso concreto, el agente elige la más apropiada. Si en algún momento las nuevas no aportan valor sobre las tuyas, se quitan.

Lo que NO cambió

  • Caddy: intacto. No se agregó ningún virtualhost.
  • AdGuard: intacto. No se modificó DNS.
  • Docker: solo se AGREGÓ un stack nuevo (libreoffice-converter). Los 18 stacks existentes siguen igual.
  • .env files: intactos. Permisos 600:root:root respetados.
  • Cron: intacto. No se agregó ningún job.
  • Uptime Kuma: el nuevo conversor puede monitorearse en uptime.matias7235.com.ar cuando esté levantado (chequear si el ping al puerto 8529 responde).
  • 26GB libres en /, suficiente para los ~500MB de imagen Docker.

Verificación

Stack LibreOffice — EN EJECUCIÓN

  • Puerto: 8529 (127.0.0.1, loopback)
  • Container: libreoffice-converter, imagen libreoffice-converter-converter
  • Estado: Up (verificado 2026-07-01 23:11 ART)
  • Volume: /home/matias/.local/share/lo-conversions:/conversions
  • Conversión .md → .docx: exitosa (test-conv.md → 0a620764_test-conv.docx, 5KB)
  • Conversión .docx → .pdf: exitosa (0a620764_test-conv.docx → 31196731_0a620764_test-conv.pdf, 12KB)

Cliente CLI

  • Path: ~/.local/bin/lo_convert.py
  • Uso: python3 ~/.local/bin/lo_convert.py <input> <format> [--outdir <dir>]
  • Formatos: pdf, docx, xlsx, pptx, odt, ods, odp, html, txt, csv, etc.
  • Nota: copia el input a la carpeta compartida y traduce paths host<->container automáticamente.

Skills verificadas

  • pdf — cargada. Usa pypdf, pdfplumber, pymupdf (host-side). No necesita container.
  • xlsx — cargada. Usa openpyxl, xlsxwriter (host-side). No necesita container.
  • docx — cargada. Usa pandoc + scripts office (host-side). La conversión a PDF y la lectura de tracked changes requieren el container.
  • pptx — cargada. Usa markitdown + scripts office (host-side). Thumbnails requieren container.
  • frontend-design — cargada. Sin deps.
  • theme-factory — cargada. Sin deps.
  • brand-guidelines — cargada. Sin deps.
  • doc-coauthoring — cargada. Sin deps.
  • internal-comms — cargada. Sin deps.

Uso típico desde el agente

Las skills de Office (docx, pptx) incluyen en sus scripts de validación (scripts/office/soffice.py) una adaptación que llama a ~/.local/bin/lo_convert.py en vez de ejecutar soffice local.

Cuando un usuario pida "convertí este .docx a PDF", el agente llama:

# Internamente la skill hace:
import subprocess
subprocess.run(["python3", "~/.local/bin/lo_convert.py", "report.docx", "pdf"])

Lo que NO cambió

  • Repo: github.com/anthropics/skills
  • Stars: 157.353 (al 2026-07-02)
  • Default branch: main
  • Último push: 2026-07-01
  • Licencia skills: Apache-2.0 (frontend-design, theme-factory, brand-guidelines, doc-coauthoring) y "Proprietary" (pdf, xlsx, docx, pptx, internal-comms). Los LICENSE.txt de cada skill tienen los términos.

Decisiones pendientes

  1. ~~Levantar el stack Docker~~ → RESUELTO (verificado, container UP, conversiones exitosas).
  2. Monitorear el conversor en Uptime Kuma.
  3. Documentar la skill powerpoint original para aclarar cuándo usarla vs la nueva pptx de Anthropic.