iWork Studio

Edição segura por IA para Apple Numbers, Keynote e Pages: apresentações projetadas, prontas para árabe, com desfazer.

Documentação

iWork Studio — read and edit Apple Numbers, Keynote and Pages with Python

CI Version License: MIT iWork MCP server Arabic safe Undo

A maneira segura de deixar a IA editar seus arquivos Numbers, Keynote e Pages.

Apresentações desenhadas a partir dos seus dados e da sua marca, verificadas como renderizadas. Pronto para árabe.
Toda alteração é copiada, verificada e desfeita, e qualquer coisa arriscada é recusada, nunca adivinhada.

🛡️ Nunca danifica seu arquivo🎨 Desenhado a partir dos seus dadosع Árabe em primeiro lugar
Backup → altera uma cópia → relê e compara → troca atômica. Arquivos abertos são deixados em paz. Uma chamada desfaz qualquer alteração.Transforme uma planilha em uma apresentação Keynote com slides de gráficos e tabelas no seu kit de marca e revise-a como renderizada.Texto em árabe e da direita para a esquerda é preservado exatamente, em todos os apps e em todas as exportações.

Instalar · Experimente · Segurança · O que ele faz · Todas as ferramentas · Para agentes de IA · Registro de alterações


iWork Studio in 15 seconds: a prompt turns sales.numbers into a designed Keynote slide, a write that didn't match is rolled back with the file untouched, and the same slide comes back in Arabic, right to left

15 segundos: dados → apresentação desenhada → rollback seguro → árabe. Vídeo em HD



iWork Studio in action: an AI agent edits a Numbers cell and keeps its formula, updates every Keynote slide without touching the formatting, and writes an Arabic letter in Pages

▶ Assista ao filme com som (46s) · Leia a história do lançamento


Instalação

Seu appO que fazer
App de desktop Claude, um clique (Mac)Baixe iwork-studio-<version>.mcpb do último lançamento, clique duas vezes nele e escolha as pastas que ele pode usar
App de desktop Claude (Mac, pelo Terminal)Cole no Terminal: curl -LsSf https://raw.githubusercontent.com/Arkanji/iwork-studio/main/install.sh | sh, depois saia do Claude (Cmd-Q) e reabra
Claude Code, como plugin (ferramentas + habilidade)/plugin marketplace add Arkanji/iwork-studio, depois /plugin install iwork-studio@iwork-studio
Claude Code, apenas ferramentasclaude mcp add iwork-studio -- uvx --from iwork-studio@latest iwork-studio-mcp
Cursor, VS Code, Codex, qualquer cliente MCPuvx --from iwork-studio@latest iwork-studio-mcp config, depois cole o JSON impresso nas configurações MCP do cliente. Também listado no Registro MCP como io.github.Arkanji/iwork-studio

É isso. O instalador configura uv se necessário, e o uv traz seu próprio Python.

  • Cerque-o (recomendado): … | sh -s -- --roots ~/Documents ~/Desktop limita-o a essas pastas. Outros clientes: defina IWORK_STUDIO_ROOTS (separado por :).
  • Carregue menos (opcional): só trabalha no Keynote? Defina IWORK_STUDIO_TOOLSETS=keynote,design (qualquer um de files, numbers, keynote, pages, design; padrão todos). Menos ferramentas mantêm a IA focada e o contexto pequeno. A extensão do Claude Desktop tem um campo Toolsets; no Claude Code: claude mcp add iwork-studio -e IWORK_STUDIO_TOOLSETS=keynote,design -- uvx --from iwork-studio@latest iwork-studio-mcp. Capacidades, leitura, busca, desfazer e a lista de kits sempre carregam.
  • Primeira execução: o macOS pergunta uma vez se o Claude pode controlar Keynote / Pages / Numbers. Clique em OK. (Perdeu? Ajustes do Sistema → Privacidade e Segurança → Automação.)
  • Verifique: pergunte "o que o iwork-studio pode fazer neste Mac?".
  • Remover: uvx --from iwork-studio@latest iwork-studio-mcp uninstall

Agente de IA configurando isso para alguém? Escolha a linha do app deles, execute-a e depois chame iwork_capabilities. As regras para usar as ferramentas estão em AGENTS.md.

Basta pedir, em inglês ou árabe

Sem arquivo à mão? Peça "copie os exemplos do iWork Studio para minha Área de Trabalho e transforme sample-sales.numbers em uma apresentação de diretoria". Os exemplos são dados de vendas sintéticos com uma planilha em inglês e uma em árabe.

"Crie uma apresentação de pitch de 6 slides para uma startup de painéis solares no kit midnight, com notas do apresentador, e exporte para PowerPoint."

"Transforme sales.numbers em uma apresentação de diretoria: faça um gráfico dos trimestres, uma tabela das principais regiões, no nosso kit Acme."

"Pegue as fontes e cores de brand.key e salve-as como nosso kit Acme."

"Revise pitch.key e corrija qualquer coisa que transborde ou seja pequena demais para ler."

"Deixe budget.numbers profissional com o kit banking — e me mostre uma prévia primeiro."

"Transforme sales.csv em um arquivo Numbers, deixe o cabeçalho em negrito com preenchimento verde-azulado, mostre a coluna B como SAR com duas casas decimais e adicione uma linha de total."

"Em pitch.key, mude para o tema Gradient, deixe o título do slide 1 branco a 60 pt, adicione uma dissolução entre cada slide e coloque logo.png no último slide."

"Adicione um gráfico de barras da receita por trimestre para 2025 e 2026 no slide 4."

"Duplique o slide 3, mova o texto para a frente e adicione notas do apresentador: ملاحظات المتحدث"

"Preencha os campos Nome e Data em offer-letter.pages e exporte como PDF protegido por senha."

"Na tabela de invoice.pages, defina a quantidade em B3 como 12 e faça D9 ser o total de D2:D8."

"Encontre minhas apresentações Keynote desta semana e exporte cada uma para PowerPoint."

"Desfaça a última alteração em budget.numbers."

O que ele pode fazer

NumbersKeynotePages
LerCada planilha, tabela, célula, fórmula e formatoO texto, as notas, o layout, o tema, o estilo e os gráficos de cada slideTexto do corpo, espaços reservados e tabelas
CriarA partir de dados ou CSV ⚡ · a partir de um modelo integrado · a partir do seu próprio arquivoUma apresentação desenhada a partir de um esboço, com slides de gráficos e tabelas (direto de uma tabela Numbers) · a partir de um tema integrado · a partir da sua própria apresentaçãoA partir de um modelo integrado · a partir do seu próprio arquivo
Editar conteúdoCélulas ⚡ · fórmulas · recalcular · inserir/excluir linhas e colunas ⚡ · adicionar tabelas e planilhas ⚡ · classificarLocalizar/substituir em toda a apresentação ⚡ · títulos e marcadores de slides · adicionar, duplicar, excluir, mover, ocultar slides · notas do apresentador · imagens · gráficos · tabelasSubstituir texto em qualquer lugar · substituir o corpo · preencher espaços reservados · células de tabela (texto, números, fórmulas)
ProjetarKits de design ⚡ · seu kit de marca ⚡ · fontes, cores, preenchimento, alinhamento, quebra ⚡ · moeda, %, datas, decimais ⚡ · bordas ⚡ · larguras e alturas ⚡ · cabeçalhos ⚡ · mesclagens ⚡Kits de design · seu kit de marca · tema · layout de slide · fonte, tamanho e cor do texto · tabelas estilizadas · transições—
RevisarRevisão de design do que o Keynote desenha: texto fora do slide ou além da caixa, texto que o Keynote teve que encolher, sobreposições, texto pequeno, slides lotados · qualquer slide como imagem
ExportarPDF · Excel · CSVPDF · PowerPoint · imagens · filmePDF · Word · EPUB · texto · RTF
ApresentarIniciar, parar, próximo, anterior

⚡ = funciona em qualquer lugar, sem precisar do app (Python puro). Todo o resto aciona o app real em um Mac com uma sessão iniciada, iWork clássico ou os apps Creator Studio.

Cada tipo de arquivo: pré-visualize qualquer alteração antes de fazê-la (dry_run), consulte metadados, pegue a miniatura da prévia, encontre arquivos com o Spotlight, verifique se uma palavra está visivelmente renderizada, verifique a fonte/tamanho/cor renderizada, liste backups e desfaça.

O que ele não fará

De propósito, para nunca quebrar um arquivo:

  • Arquivos com gráficos são recusados pelas ferramentas que funcionam sem o app: a reescrita delas pode quebrar silenciosamente o vínculo de um gráfico com seus dados. As ferramentas que acionam o app (slides do Keynote, temas, transições, imagens; fórmulas e classificação do Numbers) funcionam neles e verificam se cada gráfico ainda está lá.
  • Gráficos no Numbers e no Pages não são criados: eles não são confiavelmente scriptáveis, e recusamos em vez de clicar pelos menus do app e arriscar seu arquivo. Gráficos do Keynote podem ser adicionados. Para criar gráficos de dados classificados sem tocar em um gráfico do Numbers, classifique em uma nova tabela (numbers_sort com to_new_table) e crie um slide de gráfico do Keynote a partir dela.
  • Pages é limitado a texto e tabelas existentes: substituir, definir corpo, espaços reservados e células de tabela. Novas tabelas não podem ser criadas (o Pages 15 não permite script), e documentos de layout de página, como a maioria dos modelos de carta, não têm texto de corpo. Não há analisador de formato de arquivo Pages em lugar nenhum, então ele não finge ter um.
  • Fórmulas e deslocamentos de linha: em uma tabela com fórmulas, linhas e colunas só podem ser anexadas sem o app. Inserir no meio deixaria referências apontando para as células erradas.
  • Não é scriptável pela Apple, então não é oferecido: estilos de tabela do Numbers, preenchimento de formas e alinhamento de texto do Keynote, excluir uma tabela do Keynote, editar os slides mestres de um tema. Margens de página e configuração de página estão planejadas.

Desenhado, não apenas editado

Seis kits de design transformam uma apresentação ou tabela simples em algo que você apresentaria: um par de fontes (latim + árabe, todos incluídos no macOS — nada para instalar), uma paleta contida verificada para contraste WCAG e uma escala tipográfica.

KitSensação
executiveCalmo e corporativo: neutros ardósia, um acento azul
bankingConfiança e peso: azul-marinho profundo, dourado contido
classicRelatórios formais e diretorias: títulos serifados, azul-marinho e âmbar
tealFresco e confiante: verde-azulado profundo
analyticsFocado em dados: azul forte, destaques âmbar
midnightPalco escuro: slides quase pretos, títulos brancos, acento menta

Construa com um (keynote_build_deck(..., kit="midnight")), reestilize qualquer coisa (keynote_apply_design, numbers_apply_design) ou traga sua marca como cores e fontes — o contraste é verificado. Os agentes também recebem um guia de design: uma ideia por slide, títulos que declaram a conclusão, números alinhados à direita, cor contida.

Sua marca, uma vez. Aponte iwork_extract_design_kit para uma apresentação ou tabela que já tenha seu visual: ele lê as fontes (latim e árabe) e as cores e as salva como um kit nomeado que você pode usar em qualquer lugar onde um kit seja usado. Ou salve suas cores e fontes diretamente com iwork_save_design_kit.

Números em slides. Um slide em keynote_build_deck pode carregar um gráfico ou uma tabela, a partir de dados ou direto de uma tabela Numbers: a linha de cabeçalho dá as colunas, a primeira coluna as linhas. As tabelas recebem a faixa de cabeçalho do kit, fontes, faixas e números alinhados à direita, e cada célula é lida de volta.

Ele verifica o próprio trabalho. keynote_review_deck renderiza a apresentação pelo Keynote e compara cada linha desenhada com sua caixa de texto: texto fora do slide ou além da caixa é um erro; texto que o Keynote teve que encolher para caber, caixas sobrepostas, texto abaixo de 18 pt e slides lotados são avisos. keynote_slide_image entrega um slide de volta como imagem, para que um agente possa olhar antes de dizer "pronto".

O modelo de segurança

Um app iWork dirá feliz "salvo" sobre um arquivo que acabou de quebrar. Nada aqui confia em "salvo".

backup → change a scratch copy → re-open it and compare → atomic swap
                       ↘ anything off: your file is untouched, the error says why
  • Faça backup primeiro, versionado e privado: em ~/.iwork-studio/backups/ (ou IWORK_STUDIO_BACKUP_DIR), nunca ao lado do seu arquivo, para que os backups não preencham ou sincronizem sua Área de Trabalho e Documentos do iCloud. Os últimos 10 por arquivo são mantidos.
  • Nunca por trás do app: se o arquivo estiver aberto no Numbers, Keynote ou Pages, a gravação é recusada. O próximo salvamento do app sobrescreveria silenciosamente a alteração.
  • Relido e comparado: exatamente a alteração solicitada aconteceu, e nada mais. Uma edição de célula lê a célula editada de volta e verifica todas as outras células. Uma inserção de linha verifica cada célula em sua nova posição. Uma operação de slide verifica todos os outros slides. Uma classificação verifica se é uma reordenação pura e recusa antecipadamente quando as fórmulas da tabela leem outras linhas (a própria classificação do Numbers as quebraria). Em arquivos com gráficos, cada gráfico é contado antes e depois; em apresentações com tabelas, as células de cada tabela são comparadas. Uma exportação é relida com uma segunda ferramenta independente.
  • Troca atômica: o arquivo é substituído em uma única etapa, então uma falha não pode deixar meio arquivo.
  • O "ok" do app nunca é confiável. Gravações conduzidas pelo app são relidas do disco, e uma gravação que "teve sucesso" mas não foi aplicada é revertida.
  • Desfazer é uma chamada: iwork_list_backups → iwork_restore_backup. A restauração faz backup da versão atual primeiro, então o desfazer também pode ser desfeito.
  • Pré-visualize primeiro: toda gravação que altera um documento existente usa dry_run=true (restauração e exportação são as exceções). Ela executa a alteração real em uma cópia descartável, com todas as verificações, e mostra exatamente o que mudaria. Seu arquivo não é tocado.
  • Localizar e substituir mantém a formatação: no Pages, apenas os parágrafos que contêm o texto são reescritos.
  • Arquivos novos nunca sobrescrevem um existente.
  • Recuse, não estrague. O pior caso é um "não" claro, nunca um arquivo quebrado.

Árabe e RTL

  • Texto em árabe faz ida e volta exatamente nos três apps, incluindo notas do apresentador, espaços reservados do Pages e células de tabela do Pages.
  • A direção do parágrafo é verificada no Pages. Uma substituição que inverte um parágrafo da direita para a esquerda para esquerda para a direita é revertida. O Pages escreve novos parágrafos da esquerda para a direita, mesmo os árabes, e scripts não podem mudar isso, então eles são sinalizados: defina a direção no Pages (Formato › Texto).
  • Os valores são mantidos como digitados: dígitos arábico-índicos (١٢٣), texto "$1,234.56" e =… permanecem texto. Passe um número real quando quiser um número.
  • Ao verificar um PDF renderizado, afirme uma palavra em árabe. Camadas de texto de PDF reordenam texto RTL com várias palavras.

Todas as 65 ferramentas

Gravações são marcadas como destrutivas e leituras como somente leitura, para que clientes possam perguntar antes de gravar. Toda gravação que altera um arquivo existente usa dry_run=true para uma pré-visualização. Toda ferramenta tem um título, todo parâmetro tem uma descrição, e toda ferramenta diz quando usá-la em vez de suas irmãs. Precisa de menos? Carregue apenas alguns conjuntos de ferramentas (veja Carregar menos em Instalar).

Qualquer arquivo (17)
FerramentaO que faz
iwork_capabilitiesO que esta máquina pode fazer: apps, sessão GUI, quais rotas funcionam
iwork_readQualquer .numbers / .key / .pages → JSON
iwork_findEncontre arquivos iWork por tipo e nome (Spotlight em um Mac)
iwork_samplesCopie arquivos de exemplo (dados de vendas sintéticos, inglês e árabe) para testar sem nada seu
iwork_metadata · iwork_thumbnailModelo, builds do app, versão do formato, contagem de slides · a imagem de pré-visualização armazenada
iwork_create · iwork_create_from_templateNovo arquivo dos modelos integrados da Apple · cópia do seu próprio arquivo
iwork_list_templatesModelos integrados (Numbers, Pages) e temas (Keynote)
iwork_list_design_kitsKits de design: fontes, paletas, escala tipográfica — predefinições e seus kits salvos
iwork_extract_design_kitUm kit do seu próprio deck ou tabela: suas fontes e cores; salve-o por nome
iwork_save_design_kit · iwork_delete_design_kitMantenha seu kit de marca por nome · remova um
iwork_exportPDF, Excel, CSV, Word, EPUB, texto, RTF, PowerPoint, imagens de slides, filme; senha opcional
iwork_verify_render · iwork_verify_formatPDF renderizado mostra este texto · com esta fonte, tamanho, cor, tamanho de página
iwork_list_backups · iwork_restore_backupDesfazer
Numbers (17)
FerramentaO que faz
numbers_create · numbers_import_csvNovo arquivo de linhas de dados · de um CSV/TSV
numbers_edit_cellDefina uma célula
numbers_set_formulaColoque uma fórmula em uma célula; o Numbers a calcula
numbers_recalculateFaça o Numbers recalcular cada fórmula após edições feitas sem ele
numbers_insert · numbers_deleteLinhas ou colunas, em qualquer lugar
numbers_add_tableNova tabela em uma folha, ou em uma nova folha
numbers_sortClassifique linhas do corpo por uma coluna. Uma tabela cujas fórmulas leem outras linhas é recusada, pois a classificação do Numbers as quebraria; to_new_table coloca uma cópia classificada de seus valores em uma nova tabela e deixa o original, suas fórmulas e seus gráficos intactos
numbers_inspect_formatLarguras, alturas, cabeçalhos, mesclagens e o estilo de cada célula, formato de número e bordas
numbers_set_cell_styleFonte, tamanho, negrito/itálico/sublinhado/tachado, cores, preenchimento, alinhamento, quebra
numbers_set_number_formatNúmero, moeda (qualquer código ISO), %, científico, fração, data, texto; decimais, separadores, negativos
numbers_set_bordersTodas / contorno / interno / um lado; largura, cor, estilo
numbers_set_dimensions · numbers_set_headers · numbers_merge_cellsLarguras de coluna e alturas de linha · linhas/colunas de cabeçalho · mesclagens
Keynote (23)
FerramentaO que faz
keynote_build_deckUm novo deck a partir de um esboço: títulos, marcadores, notas, imagens, slides de gráfico e tabela, transição, kit de design
keynote_review_deckRevisão de design do deck renderizado: texto fora do slide e transbordando, sobreposições, texto pequeno, slides lotados
keynote_slide_imageUm slide como imagem, para olhar
keynote_set_slide_textPreencha o título e o corpo de um slide
keynote_apply_designReestilize cada slide a partir de um kit de design
keynote_replace_textLocalizar/substituir em cada slide, formatação intacta
keynote_list_slidesTexto de cada slide, notas, estado oculto e contagem de gráficos
keynote_add_slide · keynote_duplicate_slide · keynote_delete_slide · keynote_move_slide · keynote_skip_slideOperações de slide
keynote_set_presenter_notesNotas do apresentador
keynote_list_themes · keynote_inspect_styleTemas disponíveis · tema de um deck, layouts e estilo de texto
keynote_set_theme · keynote_set_slide_layout · keynote_format_textTema · layout de um slide · fonte, tamanho, cor de um item de texto
keynote_set_transitionEfeito, duração, atraso, avanço automático
keynote_add_imageColoque uma imagem em um slide
keynote_add_chartAdicione um gráfico de barras, linhas, área, pizza ou dispersão a partir de dados
keynote_add_tableAdicione uma tabela, estilizada a partir de um kit de design; cada célula é lida de volta
keynote_slideshowIniciar, parar, próximo, anterior
Pages (7)
FerramentaO que faz
pages_preflightVerifica se o Pages pode responder (execute uma vez primeiro)
pages_replace_all · pages_set_bodySubstituir texto em todos os lugares · substituir o corpo inteiro (redefine sua formatação)
pages_list_placeholders · pages_fill_placeholdersCampos de modelo como Nome e Data
pages_read_tables · pages_set_table_cellsLer cada tabela · escrever texto, números e fórmulas em uma tabela existente

Ferramentas de slide, tema, transição e imagem do Keynote recusam um deck aberto no Keynote (elas nunca fecham uma janela que possa conter trabalho não salvo). Para ocultá-las todas: IWORK_STUDIO_DISABLE_SLIDE_OPS=1.

Prompts. Clientes que mostram prompts MCP obtêm quatro fluxos de trabalho prontos: Pitch deck a partir de um esboço, Deck de relatório a partir de uma tabela do Numbers, Reestilizar com minha marca e Faça esta tabela parecer projetada. Cada um escreve nas regras de design, constrói em uma chamada, pré-visualiza antes de reestilizar e executa a revisão de design antes de considerar o trabalho concluído.

Para agentes de IA

  • AGENTS.md: regras de configuração e uso para qualquer agente (Codex, Cursor, Copilot, Gemini; Claude Code lê via CLAUDE.md).
  • Instruções MCP: o servidor envia suas regras na conexão, então o modelo as tem mesmo sem este repositório.
  • Skill: skill-pack/SKILL.md, descoberta automaticamente pelo Claude Code neste repositório, ou bash skill-pack/install.sh para outros agentes baseados em skill. Inclui scripts CLI com saída JSON para agentes sem MCP.
  • llms.txt: um resumo curto legível por máquina.

O contrato: JSON entra, JSON sai. Erros são tipados e dizem o que informar ao usuário: ChartRefusalError, DocumentOpenError, PagesOutOfScopeError, AquaSessionError (sem GUI Mac aqui) e assim por diante. Não tente novamente uma gravação recusada com um truque.

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"])
Armadilhas que mapeamos para seu agente não cair nelas 1. **`save in ` é negado pelo sandbox do iWork.** `save` e `export` no lugar funcionam. → [`sandbox-trap.md`](https://github.com/Arkanji/iwork-studio/blob/main/skill-pack/references/sandbox-trap.md) 2. **As propriedades de slide `title`/`body` do Keynote lançam `-1700`.** Use o `object text` do item de texto. → [`keynote-1700-defect.md`](https://github.com/Arkanji/iwork-studio/blob/main/skill-pack/references/keynote-1700-defect.md) 3. **Arquivos de gráfico corrompem silenciosamente** quando as bibliotecas de nível de arquivo os reescrevem, então essas rotas os recusam. Quando o app faz a edição, ele mantém seus próprios gráficos vinculados, então rotas dirigidas pelo app os permitem e contam cada gráfico antes e depois. 4. **Salvamentos byte-idênticos não existem** no formato do iWork. O critério real é semântico: ele reabre e o modelo completo corresponde. 5. **Diálogos de permissão na primeira execução e de escolha de modelo** bloqueiam toda chamada de script. Uma pré-verificação transforma o travamento em um único aviso claro. → [`tcc-preflight.md`](https://github.com/Arkanji/iwork-studio/blob/main/skill-pack/references/tcc-preflight.md) 6. **Os apps "Creator Studio" têm nomes diferentes.** Um `Application("Numbers")` codificado aciona o app errado; os nomes são resolvidos por chamada. → [`apps.py`](https://github.com/Arkanji/iwork-studio/blob/main/src/iwork_studio/apps.py) 7. **stdout é o fio do MCP.** Avisos de importação de bibliotecas o corromperiam, então eles vão para stderr. 8. **A inserção e movimentação via JavaScript do Keynote estão quebradas**; `make new slide` e `move slide … to before slide …` do AppleScript funcionam. 9. **Os slides mestres do Keynote não podem ser acessados via JavaScript** (`-1700`); os layouts passam pelo AppleScript. 10. **numbers-parser não salva edições de estilo no lugar.** Os estilos são registrados primeiro e depois aplicados. 11. **numbers-parser armazenava 12 como 12.000000000000002.** Os decimais agora são codificados exatamente. 12. **numbers-parser não atualiza referências de fórmula quando linhas se movem**, então inserções no meio de tabelas com fórmulas são recusadas. 13. **As cores do Keynote são 0–65535 por canal**, não 0–255 ou 0–1. 14. **Documentos de layout de página do Pages não têm texto do corpo** (`bodyText()` é nulo), e a maioria dos modelos de carta e panfleto é de layout de página. Os espaços reservados são preenchidos e verificados em cada caixa de texto. 15. **As tabelas do Pages são invisíveis para script via JavaScript**, mas legíveis e graváveis via AppleScript; criar tabelas está quebrado no Pages 15, então apenas tabelas existentes são oferecidas. 16. **O sandbox do Pages recusa `open` do AppleScript** para arquivos fora dele; `open` do JavaScript é permitido, então os documentos são abertos dessa forma e depois encontrados pelo caminho exato. 17. **numbers-parser pode quebrar fórmulas ao re-salvar** (um relatório upstream). Cada gravação sem app compara cada fórmula, então uma quebrada é detectada e nada muda. 18. **O Numbers não recalcula fórmulas ao abrir um arquivo alterado sem ele**: um total mantém seu resultado antigo. Edições feitas sem o app dizem isso, e `numbers_recalculate` faz o Numbers recalcular cada fórmula. 19. **Uma biblioteca de arredondamento usada pelo numbers-parser apaga todos os filtros de aviso no processo** a cada salvamento. Ela é envolvida para ficar silenciosa sem mexer nas configurações de outros. 20. **Não mantenha o repositório no iCloud Drive.** A sincronização cria cópias "main 2" dentro de `.git`. 21. **O Keynote cria tabelas de apenas uma forma**: `tell slide n to make new table` funciona, enquanto `make new table at end of tables of slide n` e excluir uma tabela falham com `-10000`. Uma adição de tabela com falha é desfeita restaurando o backup.

Mais, cada um com seu status: jxa-traps.md (incluindo armadilhas emprestadas de reichenbach/iwork_mcp).

Como é construído
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

Contribuindo

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

O iWork muda entre versões. Se algo quebrar, verifique as capacidades e armadilhas, execute a suíte ao vivo e registre o que mudou. Novas rotas de gravação devem seguir o modelo de segurança e vir com testes que provem o rollback. Clone fora de pastas sincronizadas com iCloud.

Licença

MIT, armadilhas incluídas. Leve-as.