# Apple Flow Numbers

> General Apple Numbers automation for Apple Flow. Use when working with `.numbers` files through `apple-flow tools`, including creating new sheets, appending structured rows, choosing insertion behavior (`after-data`, `after-headers`, `at-end`), and validating/debugging row placement with read-back checks.

- Skill: `dkyazzentwatwa/apple-flow-numbers` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add dkyazzentwatwa/apple-flow-numbers`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dkyazzentwatwa/apple-flow-numbers/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dkyazzentwatwa (https://skillmd.com/u/dkyazzentwatwa)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/dkyazzentwatwa/apple-flow-numbers

---


# Apple Flow Numbers

Use this skill to reliably create and update Apple Numbers documents with:
- `apple-flow tools numbers_create`
- `apple-flow tools numbers_create_workbook`
- `apple-flow tools numbers_add_sheet`
- `apple-flow tools numbers_append_rows`
- `apple-flow tools numbers_style_apply`

Favor deterministic CLI workflows over ad hoc AppleScript. Use direct AppleScript only for read-back verification and debugging.

## Current Capability Snapshot

- Supports wide tables:
  - `numbers_create` auto-expands columns to fit all headers.
  - `numbers_create_workbook` builds multi-sheet files from one JSON spec.
  - `numbers_add_sheet` adds initialized sheets to existing workbooks.
  - `numbers_append_rows` auto-expands columns to fit the widest incoming row.
- Supports insertion modes:
  - `after-data`, `after-headers`, `at-end`
- Supports styling operations:
  - colors (`background_color`, `text_color`)
  - font (`font_name`, `font_size`)
  - alignment (`left|center|right|justified|natural`)
  - number format (`automatic|currency|percentage|scientific|fraction|text`)
  - wrapping (`text_wrap`)
  - dimensions (`row_height`, `column_width`)

## Quick Start

1. Create a Numbers file with headers:
```bash
apple-flow tools numbers_create \
  "/abs/path/tracker.numbers" \
  '["Date","Item","Category","Amount","Notes"]' \
  --sheet "Sheet 1" \
  --table "Table 1" \
  --overwrite true
```

2. Append rows (recommended default `after-data`):
```bash
apple-flow tools numbers_append_rows \
  "/abs/path/tracker.numbers" \
  '[["2026-03-04","Coffee","Food",15,"Morning"],["2026-03-04","Burger","Food",30,"Lunch"]]' \
  --sheet "Sheet 1" \
  --table "Table 1" \
  --position after-data
```

3. Verify insertion response:
- Expect JSON with `"ok": true`
- Check `start_row` and `insert_after_row`

4. Apply formatting/style:
```bash
apple-flow tools numbers_style_apply \
  "/abs/path/tracker.numbers" \
  '{"scope":"range","start_row":2,"end_row":20,"start_column":1,"end_column":5}' \
  '{"background_color":[255,245,230],"font_size":12,"alignment":"center","row_height":28,"column_width":160}'
```

5. Build a full workbook (multiple sheets):
```bash
apple-flow tools numbers_create_workbook \
  "/abs/path/workbook.numbers" \
  '{"sheets":[{"sheet_name":"Transactions","table_name":"Tx","headers":["Date","Item","Amount"],"rows":[["2026-03-04","Coffee",15]]},{"sheet_name":"Summary","table_name":"Summary","headers":["Metric","Value"],"rows":[["Total",15]]}]}' \
  --overwrite true
```

6. Add one more sheet to an existing workbook:
```bash
apple-flow tools numbers_add_sheet \
  "/abs/path/workbook.numbers" \
  '{"sheet_name":"Dashboard","table_name":"DashboardTable","headers":["Metric","Value"],"rows":[["Count",1]]}'
```

## Input Rules

- Always use an absolute path.
- File extension must be `.numbers`.
- `numbers_create` headers must be a JSON array of strings.
- `numbers_append_rows` payload must be a JSON array.
- `numbers_create_workbook` requires `{"sheets":[...]}` with unique `sheet_name` values.
- `numbers_add_sheet` requires a sheet JSON object with `sheet_name` and non-empty `headers`.
- Safest append shape: array-of-arrays (for example: `[[...],[...]]`).
- `numbers_style_apply` target/style args must be JSON objects.
- Style target indices are 1-based.

## Position Strategy

- `after-data`:
  - Best for logs and trackers.
  - Inserts right after the last non-empty data row.
  - Fills the top data region instead of jumping to visual bottom rows.
- `after-headers`:
  - Inserts at first data row.
  - Shifts existing data down.
- `at-end`:
  - Always appends to the physical end of the table.
  - Use when you explicitly want bottom append behavior.

## Wide-Column Imports

If a CSV has more than the default table width, import directly with full headers and rows. The tool will auto-add required columns before writing data.

## Standard Workflow

1. Define columns first.
2. Create or reuse target file.
3. Build rows as JSON.
4. Append with `--position after-data` unless user asks otherwise.
5. Verify first and last inserted rows.

## Read-Back Verification

Use this AppleScript probe after appending:
```bash
osascript <<'APPLESCRIPT'
set p to POSIX file "/abs/path/tracker.numbers"
tell application id "com.apple.iWork.Numbers"
  set d to open p
  set t to first table of first sheet of d
  tell t
    set firstRow to (value of cell 1 of row 2 as text) & "|" & (value of cell 2 of row 2 as text)
    set lastRow to (value of cell 1 of last row as text) & "|" & (value of cell 2 of last row as text)
  end tell
  close d saving no
  return firstRow & "\n" & lastRow
end tell
APPLESCRIPT
```

## Troubleshooting

- `absolute path required`:
  - Convert to absolute path before tool call.
- `target document does not exist`:
  - Create with `numbers_create` first or confirm path typo.
- `Can't get sheet` or `Can't get table`:
  - Provide exact `--sheet` and `--table` names.
- `Connection invalid` / AppleScript runtime failures:
  - Ensure Apple Numbers is installed (`com.apple.Numbers`; older installs may use `com.apple.iWork.Numbers`) and automation permissions are granted.
  - Avoid similarly named non-iWork apps (for example `Numbers Creator Studio.app`) for AppleScript automation.
  - Retry command outside restrictive sandbox context when needed.
- Rows appear too far down:
  - Use `--position after-data` and verify table has expected headers/data.

## Done Criteria

- Tool command returns `"ok": true`.
- Inserted row range is sensible (`start_row`, `insert_after_row`).
- Read-back confirms expected top and tail data placement.

