resolve-ai-noteslisted
Install: claude install-skill MohanTn/mohan-dotfiles
# resolve-ai-notes: close every @AI note on a sketch-learn page, end to end
A human never asks the app itself to change a diagram — they write `@AI: ...` as a plain text element on
the canvas, in or near the part they want changed, and hand the page name to the attached agent. This
skill is the loop that turns that into a finished, note-free page.
## Prime directive: MCP tools only, never the file
`data/pages/*.excalidraw` is the MCP server's storage. Never `Read`/`Edit`/`cat`/`jq`/shell-redirect it —
the frontend has the same page open and autosaves, so a direct write gets silently clobbered or clobbers
what the human just typed. Every read and write below goes through an MCP tool.
## Tools
| Tool | Use |
|---|---|
| `find_ai_notes` | The worklist. Scans the named page's text elements for `/@ai\b/i` and returns each match's `elementId`, `text`, `x`, `y`. Cheap — no geometry. **Call this first, and again after every fix, until it returns empty.** |
| `get_page` | Full elements (with `x`/`y`, and `customData.sl` when the page is a design doc). Needed once per pass to find what a note is *about* — nothing in `find_ai_notes`'s output tells you that on its own. |
| `get_section` / `set_section` | If the note's element carries `customData.sl.key`, this page is a `create_design_doc` board — read/replace that section's text directly, keep its `status`. Prefer this over `edit_element` whenever `sl.key` is present. |
| `edit_element` | For a freeform page (no `sl` tag): update th