iWork Studio
Edición segura con IA para Apple Numbers, Keynote y Pages: presentaciones diseñadas, compatibles con árabe y deshacibles.
Documentación
La forma segura de dejar que la IA edite tus archivos de Numbers, Keynote y Pages.
Presentaciones diseñadas a partir de tus datos y tu marca, verificadas tal como se renderizan. Listo para árabe.
Cada cambio se respalda, se verifica y se puede deshacer, y cualquier cosa arriesgada se rechaza, nunca se adivina.
| 🛡️ Nunca daña tu archivo | 🎨 Diseñado a partir de tus datos | ع Árabe de primera clase |
|---|---|---|
| Respaldo → cambia una copia → vuelve a leer y compara → intercambio atómico. Los archivos abiertos se dejan en paz. Una llamada deshace cualquier cambio. | Convierte una hoja de cálculo en una presentación de Keynote con diapositivas de gráficos y tablas en tu kit de marca, luego revísala tal como se renderiza. | El texto en árabe y de derecha a izquierda se conserva exactamente, en cada aplicación y cada exportación. |
Instalar · Pruébalo · Seguridad · Lo que puede hacer · Todas las herramientas · Para agentes de IA · Registro de cambios
15 segundos: datos → presentación diseñada → una reversión segura → árabe. Video HD
▶ Mira la película con sonido (46s) · Lee la historia de lanzamiento
Instalación
| Tu aplicación | Haz esto |
|---|---|
| Aplicación de escritorio de Claude, un clic (Mac) | Descarga iwork-studio-<version>.mcpb desde la última versión, haz doble clic, elige las carpetas que puede usar |
| Aplicación de escritorio de Claude (Mac, desde Terminal) | Pega en Terminal: curl -LsSf https://raw.githubusercontent.com/Arkanji/iwork-studio/main/install.sh | sh, luego cierra Claude (Cmd-Q) y vuelve a abrirlo |
| Claude Code, como plugin (herramientas + habilidad) | /plugin marketplace add Arkanji/iwork-studio, luego /plugin install iwork-studio@iwork-studio |
| Claude Code, solo herramientas | claude mcp add iwork-studio -- uvx --from iwork-studio@latest iwork-studio-mcp |
| Cursor, VS Code, Codex, cualquier cliente MCP | uvx --from iwork-studio@latest iwork-studio-mcp config, luego pega el JSON impreso en la configuración MCP del cliente. También está listado en el Registro MCP como io.github.Arkanji/iwork-studio |
Eso es todo. El instalador configura uv si es necesario, y uv trae su propio Python.
- Delimítalo (recomendado):
… | sh -s -- --roots ~/Documents ~/Desktoplo limita a esas carpetas. Otros clientes: configuraIWORK_STUDIO_ROOTS(separado por:). - Carga menos (opcional): ¿solo trabajas en Keynote? Configura
IWORK_STUDIO_TOOLSETS=keynote,design(cualquiera defiles,numbers,keynote,pages,design; por defecto todos). Menos herramientas mantienen a la IA enfocada y su contexto pequeño. La extensión de Claude Desktop tiene un campo Toolsets; en Claude Code:claude mcp add iwork-studio -e IWORK_STUDIO_TOOLSETS=keynote,design -- uvx --from iwork-studio@latest iwork-studio-mcp. Las capacidades, lectura, búsqueda, deshacer y la lista de kits siempre se cargan. - Primera ejecución: macOS pregunta una vez si Claude puede controlar Keynote / Pages / Numbers. Haz clic en OK. (¿Lo perdiste? Configuración del sistema → Privacidad y seguridad → Automatización.)
- Verifícalo: pregunta "¿qué puede hacer iwork-studio en este Mac?".
- Eliminar:
uvx --from iwork-studio@latest iwork-studio-mcp uninstall
¿Un agente de IA configurando esto para alguien? Elige la fila para su aplicación, ejecútala, luego llama a
iwork_capabilities. Las reglas para usar las herramientas están enAGENTS.md.
Solo pregunta, en inglés o árabe
¿No tienes un archivo a mano? Pregunta "copia los ejemplos de iWork Studio a mi Escritorio y convierte sample-sales.numbers en una presentación de junta". Los ejemplos son datos de ventas sintéticos con una hoja en inglés y una en árabe.
"Crea una presentación de 6 diapositivas para una startup de paneles solares con el kit midnight, con notas del presentador, y expórtala a PowerPoint."
"Convierte sales.numbers en una presentación de junta: grafica los trimestres, una tabla de las regiones principales, con nuestro kit Acme."
"Toma las fuentes y colores de brand.key y guárdalos como nuestro kit Acme."
"Revisa pitch.key y arregla cualquier cosa que se desborde o sea demasiado pequeña para leer."
"Haz que budget.numbers se vea profesional con el kit bancario — y muéstrame una vista previa primero."
"Convierte sales.csv en un archivo de Numbers, haz el encabezado en negrita con relleno verde azulado, muestra la columna B como SAR con dos decimales, y agrega una fila de totales."
"En pitch.key, cambia al tema Gradient, haz el título de la diapositiva 1 blanco a 60 pt, agrega una disolución entre cada diapositiva, y pon logo.png en la última diapositiva."
"Agrega un gráfico de barras de ingresos por trimestre para 2025 y 2026 a la diapositiva 4."
"Duplica la diapositiva 3, mueve el texto al frente y agrega notas del presentador: ملاحظات المتحدث"
"Completa los campos Nombre y Fecha en offer-letter.pages, luego expórtalo como PDF protegido con contraseña."
"En la tabla de invoice.pages, establece la cantidad en B3 a 12 y haz que D9 sea el total de D2:D8."
"Encuentra mis presentaciones de Keynote de esta semana y exporta cada una a PowerPoint."
"Deshaz el último cambio en budget.numbers."
Lo que puede hacer
| Numbers | Keynote | Pages | |
|---|---|---|---|
| Leer | Cada hoja, tabla, celda, fórmula y formato | El texto, notas, diseño, tema, estilo y gráficos de cada diapositiva | Texto del cuerpo, marcadores de posición y tablas |
| Crear | Desde datos o CSV ⚡ · desde una plantilla integrada · desde tu propio archivo | Una presentación diseñada desde un esquema, con diapositivas de gráficos y tablas (directamente desde una tabla de Numbers) · desde un tema integrado · desde tu propia presentación | Desde una plantilla integrada · desde tu propio archivo |
| Editar contenido | Celdas ⚡ · fórmulas · recalcular · insertar/eliminar filas y columnas ⚡ · agregar tablas y hojas ⚡ · ordenar | Buscar/reemplazar en toda la presentación ⚡ · títulos de diapositivas y viñetas · agregar, duplicar, eliminar, mover, ocultar diapositivas · notas del presentador · imágenes · gráficos · tablas | Reemplazar texto en todas partes · reemplazar el cuerpo · completar marcadores de posición · celdas de tabla (texto, números, fórmulas) |
| Diseñar | Kits de diseño ⚡ · tu kit de marca ⚡ · fuentes, colores, relleno, alineación, ajuste ⚡ · moneda, %, fechas, decimales ⚡ · bordes ⚡ · anchos y altos ⚡ · encabezados ⚡ · fusiones ⚡ | Kits de diseño · tu kit de marca · tema · diseño de diapositiva · fuente, tamaño y color de texto · tablas con estilo · transiciones | — |
| Revisar | Revisión de diseño de lo que Keynote dibuja: texto fuera de la diapositiva o más allá de su caja, texto que Keynote tuvo que encoger, superposiciones, texto pequeño, diapositivas abarrotadas · cualquier diapositiva como imagen | ||
| Exportar | PDF · Excel · CSV | PDF · PowerPoint · imágenes · película | PDF · Word · EPUB · texto · RTF |
| Presentar | Iniciar, detener, siguiente, anterior |
⚡ = funciona en cualquier lugar, sin necesidad de aplicación (Python puro). Todo lo demás maneja la aplicación real en un Mac con una sesión iniciada, iWork clásico o las aplicaciones Creator Studio.
Cada tipo de archivo: previsualiza cualquier cambio antes de que se haga (dry_run), consulta metadatos, extrae la miniatura de vista previa, encuentra archivos con Spotlight, verifica que una palabra se muestre visiblemente, verifica la fuente/tamaño/color renderizados, lista respaldos y deshacer.
Lo que no hará
A propósito, para que nunca rompa un archivo:
- Los archivos con gráficos son rechazados por las herramientas que funcionan sin la aplicación: su reescritura puede romper silenciosamente el vínculo de un gráfico con sus datos. Las herramientas impulsadas por la aplicación (diapositivas de Keynote, temas, transiciones, imágenes; fórmulas y ordenamiento de Numbers) funcionan en ellos y verifican que cada gráfico siga ahí.
- Los gráficos en Numbers y Pages no se crean: no son confiablemente scriptables, y preferimos rechazar antes que hacer clic en los menús de la aplicación y arriesgar tu archivo. Los gráficos de Keynote se pueden agregar. Para graficar datos ordenados sin tocar un gráfico de Numbers, ordena en una tabla nueva (
numbers_sortconto_new_table) y crea una diapositiva de gráfico de Keynote a partir de ella. - Pages se limita a texto y tablas existentes: reemplazar, establecer cuerpo, marcadores de posición y celdas de tabla. No se pueden crear tablas nuevas (Pages 15 no lo scripta), y los documentos de diseño de página, como la mayoría de las plantillas de cartas, no tienen texto de cuerpo. No hay un analizador de formato de archivo de Pages en ningún lugar, así que no finge uno.
- Fórmulas y desplazamientos de filas: en una tabla que tiene fórmulas, las filas y columnas solo se pueden agregar sin la aplicación. Insertar en el medio dejaría referencias apuntando a las celdas equivocadas.
- No scriptable por Apple, así que no se ofrece: estilos de tabla de Numbers, relleno de formas y alineación de texto en Keynote, eliminar una tabla de Keynote, editar las diapositivas maestras de un tema. Los márgenes de página y la configuración de página están planificados.
Diseñado, no solo editado
Seis kits de diseño convierten una presentación o tabla simple en algo que presentarías: un par de fuentes (latín + árabe, todas incluidas con macOS — nada que instalar), una paleta sobria verificada por contraste WCAG, y una escala tipográfica.
| Kit | Sensación |
|---|---|
executive | Calmado y corporativo: neutros gris pizarra, un acento azul |
banking | Confianza y peso: azul marino profundo, dorado sobrio |
classic | Informes formales y juntas: encabezados serif, azul marino y ámbar |
teal | Fresco y seguro: verde azulado profundo |
analytics | Orientado a datos: azul fuerte, resaltados ámbar |
midnight | Escenario oscuro: diapositivas casi negras, títulos blancos, acento menta |
Construye con uno (keynote_build_deck(..., kit="midnight")), reestiliza cualquier cosa (keynote_apply_design, numbers_apply_design), o trae tu marca como colores y fuentes — el contraste se verifica. Los agentes también obtienen una guía de diseño: una idea por diapositiva, títulos que expresan la conclusión, números alineados a la derecha, color sobrio.
Tu marca, una vez. Apunta iwork_extract_design_kit a una presentación o tabla que ya tenga tu estilo: lee las fuentes (latín y árabe) y los colores, y los guarda como un kit con nombre que puedes usar en cualquier lugar donde se use un kit. O guarda tus colores y fuentes directamente con iwork_save_design_kit.
Numbers en diapositivas. Una diapositiva en keynote_build_deck puede llevar un gráfico o una tabla, desde datos o directamente desde una tabla de Numbers: la fila de encabezado da las columnas, la primera columna las filas. Las tablas obtienen la banda de encabezado del kit, fuentes, bandas y números alineados a la derecha, y cada celda se lee de vuelta.
Verifica su propio trabajo. keynote_review_deck renderiza la presentación a través de Keynote y compara cada línea dibujada con su caja de texto: texto fuera de la diapositiva o más allá de su caja es un error; texto que Keynote tuvo que encoger para que quepa, cajas superpuestas, texto menor de 18 pt y diapositivas abarrotadas son advertencias. keynote_slide_image devuelve una diapositiva como imagen, para que un agente pueda mirar antes de decir "listo".
El modelo de seguridad
Una aplicación de iWork dirá felizmente "guardado" sobre un archivo que acaba de romper. Nada aquí confía en "guardado".
backup → change a scratch copy → re-open it and compare → atomic swap
↘ anything off: your file is untouched, the error says why
- Haz una copia de seguridad primero, versionada y privada: en
~/.iwork-studio/backups/(oIWORK_STUDIO_BACKUP_DIR), nunca junto a tu archivo, para que las copias no llenen ni sincronicen tu iCloud Escritorio y Documentos. Se conservan las últimas 10 por archivo. - Nunca a espaldas de la app: si el archivo está abierto en Numbers, Keynote o Pages, la escritura se rechaza. El siguiente guardado de la app sobrescribiría silenciosamente el cambio.
- Relectura y comparación: exactamente el cambio solicitado ocurrió, y nada más. Una edición de celda lee la celda editada y verifica todas las demás. Una inserción de fila verifica cada celda en su nueva posición. Una operación de diapositiva verifica todas las demás diapositivas. Una ordenación verifica que sea una reorganización pura, y se rechaza de antemano cuando las fórmulas de la tabla leen otras filas (la propia ordenación de Numbers las rompería). En archivos con gráficos, cada gráfico se cuenta antes y después; en presentaciones con tablas, se comparan las celdas de cada tabla. Una exportación se relee con una segunda herramienta independiente.
- Intercambio atómico: el archivo se reemplaza en un solo paso, por lo que un fallo no puede dejar medio archivo.
- El "ok" de la app nunca se confía. Las escrituras impulsadas por la app se releen del disco, y una escritura que "tuvo éxito" pero no se aplicó se revierte.
- Deshacer es una llamada:
iwork_list_backups→iwork_restore_backup. La restauración hace una copia de seguridad de la versión actual primero, para que deshacer también se pueda deshacer. - Vista previa primero: cada escritura que cambia un documento existente toma
dry_run=true(restaurar y exportar son las excepciones). Ejecuta el cambio real en una copia desechable, con todas las verificaciones, y muestra exactamente qué cambiaría. Tu archivo no se toca. - Buscar y reemplazar conserva el formato: en Pages, solo se reescriben los párrafos que contienen el texto.
- Los archivos nuevos nunca sobrescriben uno existente.
- Rechazar, no mutilar. El peor caso es un "no" claro, nunca un archivo roto.
Árabe y RTL
- El texto árabe viaja de ida y vuelta exactamente en las tres apps, incluyendo notas del presentador, marcadores de posición de Pages y celdas de tabla de Pages.
- La dirección del párrafo se verifica en Pages. Un reemplazo que cambia un párrafo de derecha a izquierda a izquierda a derecha se revierte. Pages escribe nuevos párrafos de izquierda a derecha, incluso los árabes, y los scripts no pueden cambiar eso, por lo que se marcan: establece la dirección en Pages (Formato › Texto).
- Los valores se mantienen como se escribieron: dígitos arábigo-indios (
١٢٣),"$1,234.56"y=…el texto sigue siendo texto. Pasa un número real cuando quieras un número. - Al verificar un PDF renderizado, afirma una palabra árabe. Las capas de texto de PDF reordenan texto RTL de múltiples palabras.
Las 65 herramientas
Las escrituras se marcan como destructivas y las lecturas como solo lectura, para que los clientes puedan preguntar antes de escribir. Cada escritura que cambia un archivo existente toma dry_run=true para una vista previa. Cada herramienta tiene un título, cada parámetro una descripción, y cada herramienta dice cuándo usarla en lugar de sus hermanas. ¿Necesitas menos? Carga solo algunos conjuntos de herramientas (ver Cargar menos en Instalar).
Cualquier archivo (17)
| Herramienta | Qué hace |
|---|---|
iwork_capabilities | Lo que esta máquina puede hacer: apps, sesión GUI, qué rutas funcionan |
iwork_read | Cualquier .numbers / .key / .pages → JSON |
iwork_find | Encuentra archivos de iWork por tipo y nombre (Spotlight en una Mac) |
iwork_samples | Copia archivos de muestra (datos de ventas sintéticos, inglés y árabe) para probarlo sin nada propio |
iwork_metadata · iwork_thumbnail | Plantilla, compilaciones de la app, versión del formato, número de diapositivas · la imagen de vista previa almacenada |
iwork_create · iwork_create_from_template | Nuevo archivo desde las plantillas integradas de Apple · copia de tu propio archivo |
iwork_list_templates | Plantillas integradas (Numbers, Pages) y temas (Keynote) |
iwork_list_design_kits | Kits de diseño: fuentes, paletas, escala tipográfica — ajustes preestablecidos y tus kits guardados |
iwork_extract_design_kit | Un kit de tu propia presentación o tabla: sus fuentes y colores; guárdalo por nombre |
iwork_save_design_kit · iwork_delete_design_kit | Mantén tu kit de marca por nombre · elimina uno |
iwork_export | PDF, Excel, CSV, Word, EPUB, texto, RTF, PowerPoint, imágenes de diapositivas, película; contraseña opcional |
iwork_verify_render · iwork_verify_format | El PDF renderizado muestra este texto · con esta fuente, tamaño, color, tamaño de página |
iwork_list_backups · iwork_restore_backup | Deshacer |
Numbers (17)
| Herramienta | Qué hace |
|---|---|
numbers_create · numbers_import_csv | Nuevo archivo desde filas de datos · desde un CSV/TSV |
numbers_edit_cell | Establecer una celda |
numbers_set_formula | Poner una fórmula en una celda; Numbers la calcula |
numbers_recalculate | Hacer que Numbers recalcule cada fórmula después de ediciones hechas sin él |
numbers_insert · numbers_delete | Filas o columnas, en cualquier lugar |
numbers_add_table | Nueva tabla en una hoja, o en una hoja nueva |
numbers_sort | Ordenar filas de cuerpo por una columna. Una tabla cuyas fórmulas leen otras filas se rechaza, ya que la ordenación de Numbers las rompería; to_new_table pone una copia ordenada de sus valores en una nueva tabla y deja el original, sus fórmulas y sus gráficos intactos |
numbers_inspect_format | Anchos, alturas, encabezados, fusiones, y el estilo de cada celda, formato de número y bordes |
numbers_set_cell_style | Fuente, tamaño, negrita/cursiva/subrayado/tachado, colores, relleno, alineación, ajuste |
numbers_set_number_format | Número, moneda (cualquier código ISO), %, científico, fracción, fecha, texto; decimales, separadores, negativos |
numbers_set_borders | Todo / contorno / interior / un lado; ancho, color, estilo |
numbers_set_dimensions · numbers_set_headers · numbers_merge_cells | Anchos de columna y alturas de fila · filas/columnas de encabezado · fusiones |
Keynote (23)
| Herramienta | Qué hace |
|---|---|
keynote_build_deck | Una nueva presentación desde un esquema: títulos, viñetas, notas, imágenes, diapositivas de gráficos y tablas, transición, kit de diseño |
keynote_review_deck | Revisión de diseño de la presentación renderizada: texto fuera de la diapositiva y desbordado, superposiciones, texto pequeño, diapositivas abarrotadas |
keynote_slide_image | Una diapositiva como imagen, para mirarla |
keynote_set_slide_text | Rellenar el título y el cuerpo de una diapositiva |
keynote_apply_design | Reestilizar cada diapositiva desde un kit de diseño |
keynote_replace_text | Buscar/reemplazar en cada diapositiva, formato intacto |
keynote_list_slides | Texto de cada diapositiva, notas, estado oculto y recuento de gráficos |
keynote_add_slide · keynote_duplicate_slide · keynote_delete_slide · keynote_move_slide · keynote_skip_slide | Operaciones de diapositiva |
keynote_set_presenter_notes | Notas del presentador |
keynote_list_themes · keynote_inspect_style | Temas disponibles · el tema de una presentación, diseños y estilo de texto |
keynote_set_theme · keynote_set_slide_layout · keynote_format_text | Tema · el diseño de una diapositiva · la fuente, tamaño, color de un elemento de texto |
keynote_set_transition | Efecto, duración, retraso, avance automático |
keynote_add_image | Colocar una imagen en una diapositiva |
keynote_add_chart | Añadir un gráfico de barras, líneas, áreas, circular o de dispersión desde datos |
keynote_add_table | Añadir una tabla, estilizada desde un kit de diseño; cada celda se lee de vuelta |
keynote_slideshow | Iniciar, detener, siguiente, anterior |
Pages (7)
| Herramienta | Qué hace |
|---|---|
pages_preflight | Verifica que Pages puede responder (ejecutar una vez primero) |
pages_replace_all · pages_set_body | Reemplazar texto en todas partes · reemplazar todo el cuerpo (restablece su formato) |
pages_list_placeholders · pages_fill_placeholders | Campos de plantilla como Nombre y Fecha |
pages_read_tables · pages_set_table_cells | Leer cada tabla · escribir texto, números y fórmulas en una tabla existente |
Las herramientas de diapositiva, tema, transición e imagen de Keynote rechazan una presentación abierta en Keynote (nunca cierran una ventana que pueda contener trabajo sin guardar). Para ocultarlas todas: IWORK_STUDIO_DISABLE_SLIDE_OPS=1.
Prompts. Los clientes que muestran prompts de MCP obtienen cuatro flujos de trabajo listos: Presentación de pitch desde un esquema, Presentación de informe desde una tabla de Numbers, Reestilizar con mi marca y Hacer que esta tabla se vea diseñada. Cada uno escribe a las reglas de diseño, construye en una llamada, muestra vista previa antes de reestilizar, y ejecuta la revisión de diseño antes de dar el trabajo por terminado.
Para agentes de IA
AGENTS.md: reglas de configuración y uso para cualquier agente (Codex, Cursor, Copilot, Gemini; Claude Code lo lee víaCLAUDE.md).- Instrucciones de MCP: el servidor envía sus reglas al conectarse, para que el modelo las tenga incluso sin este repositorio.
- Skill:
skill-pack/SKILL.md, auto-descubierto por Claude Code en este repositorio, obash skill-pack/install.shpara otros agentes basados en skills. Incluye scripts CLI con salida JSON para agentes sin MCP. llms.txt: un resumen corto legible por máquina.
El contrato: JSON entra, JSON sale. Los errores están tipados y dicen qué decirle al usuario: ChartRefusalError, DocumentOpenError, PagesOutOfScopeError, AquaSessionError (no hay GUI de Mac aquí) y así sucesivamente. No reintentes una escritura rechazada con un truco.
Python
pip install iwork-studio # Python 3.12
from iwork_studio import numbers_structure, numbers_format, numbers_io, keynote_io, keynote_slides, exporter, backups
from iwork_studio import keynote_deck, design, review
keynote_deck.build_deck("pitch.key", [{"title": "شمس", "body": "Clean energy for every home"},
{"title": "Why now", "body": ["Trust", "Access"]},
{"title": "Riyadh leads growth", "chart": {"type": "bar", "from": "sales.numbers"}}],
kit="midnight") # macOS + Keynote
review.review_deck("pitch.key")["findings"] # macOS + Keynote
design.extract_kit("brand.numbers", name="Acme", save=True)
numbers_structure.import_csv("sales.csv", "sales.numbers")
design.apply_to_numbers("sales.numbers", "banking")
numbers_format.set_cell_style("sales.numbers", "A1:D1", bold=True, fill_color="#1A7F79", font_color="#FFFFFF")
numbers_format.set_number_format("sales.numbers", "B2:B99", "currency", currency_code="SAR", decimal_places=2)
numbers_io.edit_cell("sales.numbers", "B2", 2500)
keynote_io.edit_text("pitch.key", "2025", "2026")
keynote_slides.set_presenter_notes("pitch.key", 1, "ملاحظات") # macOS + Keynote
exporter.export("pitch.key", "pptx") # macOS + Keynote
backups.restore_backup("sales.numbers", backups.list_backups("sales.numbers")[0]["name"])
Trampas que mapeamos para que tu agente no las golpee
1. **`save in ` es denegado por la sandbox de iWork.** `save` y `export` en el lugar funcionan. → [`sandbox-trap.md`](https://github.com/Arkanji/iwork-studio/blob/main/skill-pack/references/sandbox-trap.md) 2. **Las propiedades de diapositiva `title`/`body` de Keynote lanzan `-1700`.** Usa el `object text` del elemento de texto. → [`keynote-1700-defect.md`](https://github.com/Arkanji/iwork-studio/blob/main/skill-pack/references/keynote-1700-defect.md) 3. **Los archivos de gráficos se corrompen silenciosamente** cuando las bibliotecas a nivel de archivo los reescriben, por lo que esas rutas los rechazan. Cuando la aplicación hace la edición, mantiene sus propios gráficos vinculados, por lo que las rutas impulsadas por la aplicación los permiten y cuentan cada gráfico antes y después. 4. **No existen guardados byte-idénticos** en el formato de iWork. El estándar real es semántico: se reabre y el modelo completo coincide. 5. **Los diálogos de permisos de primera ejecución y de selector de plantillas** bloquean cada llamada de script. Una verificación previa convierte la espera en un aviso claro. → [`tcc-preflight.md`](https://github.com/Arkanji/iwork-studio/blob/main/skill-pack/references/tcc-preflight.md) 6. **Las aplicaciones de "Creator Studio" tienen nombres diferentes.** Un `Application("Numbers")` codificado impulsa la aplicación incorrecta; los nombres se resuelven por llamada. → [`apps.py`](https://github.com/Arkanji/iwork-studio/blob/main/src/iwork_studio/apps.py) 7. **stdout es el cable MCP.** Las advertencias de importación de bibliotecas lo corromperían, por lo que van a stderr. 8. **La inserción y el movimiento de JavaScript de Keynote están rotos**; `make new slide` y `move slide … to before slide …` de AppleScript funcionan. 9. **Las diapositivas maestras de Keynote no se pueden alcanzar desde JavaScript** (`-1700`); los diseños pasan por AppleScript. 10. **numbers-parser no guarda ediciones de estilo en el lugar.** Los estilos se registran primero y luego se aplican. 11. **numbers-parser almacenaba 12 como 12.000000000000002.** Los decimales ahora se codifican exactamente. 12. **numbers-parser no actualiza las referencias de fórmulas cuando las filas se mueven**, por lo que las inserciones en medio de tablas con fórmulas se rechazan. 13. **Los colores de Keynote son 0–65535 por canal**, no 0–255 ni 0–1. 14. **Los documentos de diseño de página de Pages no tienen texto de cuerpo** (`bodyText()` es nulo), y la mayoría de las plantillas de cartas y volantes son de diseño de página. Los marcadores de posición se completan y verifican en cada cuadro de texto en su lugar. 15. **Las tablas de Pages son invisibles para los scripts de JavaScript**, pero legibles y escribibles desde AppleScript; crear tablas está roto en Pages 15, por lo que solo se ofrecen tablas existentes. 16. **La sandbox de Pages rechaza `open` de AppleScript** para archivos fuera de ella; `open` de JavaScript está permitido, por lo que los documentos se abren de esa manera y luego se encuentran por su ruta exacta. 17. **numbers-parser puede romper fórmulas al re-guardar** (un informe ascendente). Cada escritura sin aplicación compara cada fórmula, por lo que una rota se detecta y nada cambia. 18. **Numbers no recalcula fórmulas cuando abre un archivo cambiado sin él**: un total mantiene su resultado anterior. Las ediciones hechas sin la aplicación lo indican, y `numbers_recalculate` hace que Numbers recalcule cada fórmula. 19. **Una biblioteca de redondeo usada por numbers-parser borra cada filtro de advertencia en el proceso** en cada guardado. Está envuelta para que permanezca silenciosa sin tocar la configuración de los demás. 20. **No mantengas el repositorio en iCloud Drive.** La sincronización crea copias "main 2" dentro de `.git`. 21. **Keynote crea tablas solo de una manera**: `tell slide n to make new table` funciona, mientras que `make new table at end of tables of slide n` y eliminar una tabla fallan con `-10000`. Una adición de tabla fallida se deshace restaurando la copia de seguridad.Más, cada uno con su estado: jxa-traps.md (incluyendo trampas tomadas de reichenbach/iwork_mcp).
Cómo está construido
pure Python file parsers (headless, deterministic) → .numbers everything, .key text
the real app via AppleScript / JXA → .key slides & theming, .pages text & tables, formulas, sort, export, render checks
MCP server · CLI scripts · skill → thin wrappers over the same library and the same safety model
src/iwork_studio/ numbers_io · numbers_format · numbers_structure · keynote_io · keynote_slides · keynote_theme
keynote_deck · keynote_table · design · review · preview · pages_io · app_ops · exporter
helpers · format_check · render_verify · pdf · backups · apps · mcp_server
mcpb/ Claude Desktop extension manifest (scripts/build_mcpb.sh builds the .mcpb)
skill-pack/ SKILL.md · CLI scripts · references (capabilities, traps, pins); also the Claude Code plugin
.claude-plugin/ plugin marketplace (one plugin: skill-pack/)
tests/ headless suite (CI) · `pytest -m aqua` = live suite for a Mac with iWork
install.sh one-line setup for the Claude desktop app
Contribuyendo
git clone https://github.com/Arkanji/iwork-studio.git && cd iwork-studio
uv run --extra test pytest -m "not aqua" # headless suite, what CI runs
uv run --extra test pytest -m aqua # live suite: a Mac with Numbers, Keynote and Pages
scripts/live.sh # the same, unattended: logs to ~/.iwork-studio/probes, quits the apps it opened
iWork cambia entre versiones. Si algo se rompe, revisa las capacidades y trampas, ejecuta la suite en vivo y fija qué cambió. Las nuevas rutas de escritura deben seguir el modelo de seguridad y venir con pruebas que demuestren la reversión. Clona fuera de carpetas sincronizadas con iCloud.
Licencia
MIT, trampas incluidas. Tómalas.