iWork Studio
Edição segura por IA para Apple Numbers, Keynote e Pages: apresentações projetadas, prontas para árabe, com desfazer.
Documentação
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
15 segundos: dados → apresentação desenhada → rollback seguro → árabe. Vídeo em HD
▶ Assista ao filme com som (46s) · Leia a história do lançamento
Instalação
| Seu app | O 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 ferramentas | claude mcp add iwork-studio -- uvx --from iwork-studio@latest iwork-studio-mcp |
| Cursor, VS Code, Codex, qualquer cliente MCP | uvx --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 ~/Desktoplimita-o a essas pastas. Outros clientes: definaIWORK_STUDIO_ROOTS(separado por:). - Carregue menos (opcional): só trabalha no Keynote? Defina
IWORK_STUDIO_TOOLSETS=keynote,design(qualquer um defiles,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 emAGENTS.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
| Numbers | Keynote | Pages | |
|---|---|---|---|
| Ler | Cada planilha, tabela, célula, fórmula e formato | O texto, as notas, o layout, o tema, o estilo e os gráficos de cada slide | Texto do corpo, espaços reservados e tabelas |
| Criar | A partir de dados ou CSV ⚡ · a partir de um modelo integrado · a partir do seu próprio arquivo | Uma 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ção | A partir de um modelo integrado · a partir do seu próprio arquivo |
| Editar conteúdo | Células ⚡ · fórmulas · recalcular · inserir/excluir linhas e colunas ⚡ · adicionar tabelas e planilhas ⚡ · classificar | Localizar/substituir em toda a apresentação ⚡ · títulos e marcadores de slides · adicionar, duplicar, excluir, mover, ocultar slides · notas do apresentador · imagens · gráficos · tabelas | Substituir texto em qualquer lugar · substituir o corpo · preencher espaços reservados · células de tabela (texto, números, fórmulas) |
| Projetar | Kits 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 | — |
| Revisar | Revisã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 | ||
| Exportar | PDF · Excel · CSV | PDF · PowerPoint · imagens · filme | PDF · Word · EPUB · texto · RTF |
| Apresentar | Iniciar, 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_sortcomto_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.
| Kit | Sensação |
|---|---|
executive | Calmo e corporativo: neutros ardósia, um acento azul |
banking | Confiança e peso: azul-marinho profundo, dourado contido |
classic | Relatórios formais e diretorias: títulos serifados, azul-marinho e âmbar |
teal | Fresco e confiante: verde-azulado profundo |
analytics | Focado em dados: azul forte, destaques âmbar |
midnight | Palco 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/(ouIWORK_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)
| Ferramenta | O que faz |
|---|---|
iwork_capabilities | O que esta máquina pode fazer: apps, sessão GUI, quais rotas funcionam |
iwork_read | Qualquer .numbers / .key / .pages → JSON |
iwork_find | Encontre arquivos iWork por tipo e nome (Spotlight em um Mac) |
iwork_samples | Copie arquivos de exemplo (dados de vendas sintéticos, inglês e árabe) para testar sem nada seu |
iwork_metadata · iwork_thumbnail | Modelo, builds do app, versão do formato, contagem de slides · a imagem de pré-visualização armazenada |
iwork_create · iwork_create_from_template | Novo arquivo dos modelos integrados da Apple · cópia do seu próprio arquivo |
iwork_list_templates | Modelos integrados (Numbers, Pages) e temas (Keynote) |
iwork_list_design_kits | Kits de design: fontes, paletas, escala tipográfica — predefinições e seus kits salvos |
iwork_extract_design_kit | Um kit do seu próprio deck ou tabela: suas fontes e cores; salve-o por nome |
iwork_save_design_kit · iwork_delete_design_kit | Mantenha seu kit de marca por nome · remova um |
iwork_export | PDF, Excel, CSV, Word, EPUB, texto, RTF, PowerPoint, imagens de slides, filme; senha opcional |
iwork_verify_render · iwork_verify_format | PDF renderizado mostra este texto · com esta fonte, tamanho, cor, tamanho de página |
iwork_list_backups · iwork_restore_backup | Desfazer |
Numbers (17)
| Ferramenta | O que faz |
|---|---|
numbers_create · numbers_import_csv | Novo arquivo de linhas de dados · de um CSV/TSV |
numbers_edit_cell | Defina uma célula |
numbers_set_formula | Coloque uma fórmula em uma célula; o Numbers a calcula |
numbers_recalculate | Faça o Numbers recalcular cada fórmula após edições feitas sem ele |
numbers_insert · numbers_delete | Linhas ou colunas, em qualquer lugar |
numbers_add_table | Nova tabela em uma folha, ou em uma nova folha |
numbers_sort | Classifique 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_format | Larguras, alturas, cabeçalhos, mesclagens e o estilo de cada célula, formato de número e bordas |
numbers_set_cell_style | Fonte, tamanho, negrito/itálico/sublinhado/tachado, cores, preenchimento, alinhamento, quebra |
numbers_set_number_format | Número, moeda (qualquer código ISO), %, científico, fração, data, texto; decimais, separadores, negativos |
numbers_set_borders | Todas / contorno / interno / um lado; largura, cor, estilo |
numbers_set_dimensions · numbers_set_headers · numbers_merge_cells | Larguras de coluna e alturas de linha · linhas/colunas de cabeçalho · mesclagens |
Keynote (23)
| Ferramenta | O que faz |
|---|---|
keynote_build_deck | Um 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_deck | Revisão de design do deck renderizado: texto fora do slide e transbordando, sobreposições, texto pequeno, slides lotados |
keynote_slide_image | Um slide como imagem, para olhar |
keynote_set_slide_text | Preencha o título e o corpo de um slide |
keynote_apply_design | Reestilize cada slide a partir de um kit de design |
keynote_replace_text | Localizar/substituir em cada slide, formatação intacta |
keynote_list_slides | Texto 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_slide | Operações de slide |
keynote_set_presenter_notes | Notas do apresentador |
keynote_list_themes · keynote_inspect_style | Temas disponíveis · tema de um deck, layouts e estilo de texto |
keynote_set_theme · keynote_set_slide_layout · keynote_format_text | Tema · layout de um slide · fonte, tamanho, cor de um item de texto |
keynote_set_transition | Efeito, duração, atraso, avanço automático |
keynote_add_image | Coloque uma imagem em um slide |
keynote_add_chart | Adicione um gráfico de barras, linhas, área, pizza ou dispersão a partir de dados |
keynote_add_table | Adicione uma tabela, estilizada a partir de um kit de design; cada célula é lida de volta |
keynote_slideshow | Iniciar, parar, próximo, anterior |
Pages (7)
| Ferramenta | O que faz |
|---|---|
pages_preflight | Verifica se o Pages pode responder (execute uma vez primeiro) |
pages_replace_all · pages_set_body | Substituir texto em todos os lugares · substituir o corpo inteiro (redefine sua formatação) |
pages_list_placeholders · pages_fill_placeholders | Campos de modelo como Nome e Data |
pages_read_tables · pages_set_table_cells | Ler 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ê viaCLAUDE.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, oubash skill-pack/install.shpara 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.