.cursor/skills/icon-extract/SKILL.md
Extract SVG icons from FileMaker layout objects (Button, ButtonBar) and save as individual SVG files. Use when the developer says "extract icons", "show me the icons", "get the icons from", "export the SVGs", "what icons are in this", or wants to inspect or reuse icons embedded in FM layout XML.
npx skillsauth add petrowsky/agentic-fm icon-extractInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Extract embedded SVG icons from FileMaker layout object XML. Parses <Stream><Type>SVG </Type><HexData>...</HexData></Stream> elements inside Button and ButtonBar objects, decodes the hex-encoded SVGs, and saves them as individual files.
This skill uses no external dependencies — it is stdlib-only Python.
The developer may provide input in one of three ways:
A) File in sandbox — the developer has placed or named an XML file:
python3 agent/scripts/fm_icon_extract.py agent/sandbox/<filename>.xml --json
B) Clipboard — the developer says the layout object is on the clipboard. Read it via the companion server:
curl -s http://local.hub:8765/clipboard | python3 -c "
import json, sys
data = json.load(sys.stdin)
if data.get('success'):
with open('agent/sandbox/_clipboard_input.xml', 'w') as f:
f.write(data['xml'])
print('Saved clipboard content to agent/sandbox/_clipboard_input.xml')
else:
print('ERROR:', data.get('error', 'Unknown error'), file=sys.stderr)
sys.exit(1)
"
If the companion server is not reachable, try the Docker-internal hostname:
curl -s http://host.docker.internal:8765/clipboard | python3 -c "..."
If neither works, instruct the developer:
Please run this command to save the clipboard content:
python3 agent/scripts/clipboard.py read agent/sandbox/_clipboard_input.xml
Then proceed with the saved file.
C) XML text pasted directly — save to agent/sandbox/_clipboard_input.xml and proceed.
Run the extraction script:
python3 agent/scripts/fm_icon_extract.py agent/sandbox/<input>.xml --json
This outputs a JSON array with one entry per icon:
{
"index": 0,
"button_name": "NAV:Dashboard",
"label": "Dashboard",
"is_stroke": false,
"has_fm_fill": true,
"viewbox": "0 0 24 24",
"stream_size": 941,
"byte_size": 941
}
Present a summary table to the developer:
| # | Button Name | Label | Format | ViewBox | |---|-------------|-------|--------|---------| | 0 | NAV:Dashboard | Dashboard | filled | 0 0 24 24 | | 1 | NAV:Company | Companies | filled | 0 0 40 42.67 | | ... | | | | |
Note whether icons are stroke-based (would need conversion for FM) or already filled.
If the developer wants individual files:
python3 agent/scripts/fm_icon_extract.py agent/sandbox/<input>.xml --output-dir agent/sandbox/icons/
Files are named from the button label (e.g., dashboard.svg, companies.svg). Duplicates get a numeric suffix.
Report the saved file paths to the developer.
If the developer asks what an icon looks like, read the SVG content from the extracted file and describe its visual appearance based on the SVG shapes (paths, rects, circles, etc.). Common patterns:
icon-swap skill depends on this extraction capability for its workflow.01) is metadata that pairs with each SVG stream. The extraction report includes it for reference.development
Generate a complete web application inside a FileMaker Web Viewer — self-contained HTML/CSS/JS styled with the FM theme, plus companion FM bridge scripts for bidirectional data flow. Use when the developer says "web viewer", "webviewer app", "HTML in FileMaker", "build web viewer", or when the layout-design skill delegates to the web-first output path. Recommended for modern, responsive UI, complex interactions (drag-and-drop, charts, rich text), or solutions considering future migration off FileMaker.
development
Trace references to a FileMaker object across the entire solution. Supports usage reports ("where is this field used?"), impact analysis ("what breaks if I rename this?"), and dead object scans ("show unused fields/scripts"). Use when the developer says "trace", "find references", "where is X used", "impact of renaming", "unused fields/scripts", "dead code", "what references X", or "is X used anywhere".
development
Analyze a FileMaker solution and produce a structured profile covering data model, business logic, UI layer, integrations, and health metrics. Uses on-disk pre-processing to handle solutions of any size without sending raw XML through the agent. Use when the developer says "analyze solution", "solution overview", "solution analysis", "solution profile", "solution spec", "what does this solution do", "solution summary", or wants a high-level understanding of an entire FileMaker solution.
development
Interactive setup wizard for agentic-fm. Detects what's already configured, walks the user through each remaining step, and verifies completion before proceeding. Use when the developer says "help me set up", "setup", "get started", "onboard", "first time setup", "install agentic-fm", "configure agentic-fm", or is clearly new to the project and needs guidance.