.cursor/skills/fmlint/SKILL.md
Lint FileMaker scripts in fmxmlsnippet XML or human-readable format. Validates structure, naming conventions, references, best practices, and calculations. Tier 3 validates calculations against a live FM engine via AGFMEvaluation. Triggers on phrases like 'lint this', 'validate script', 'check conventions', 'run fmlint', or automatically after script generation.
npx skillsauth add petrowsky/agentic-fm fmlintInstall 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.
Validate FileMaker scripts for structural correctness, naming conventions, reference integrity, best practices, and calculation validity.
Identify the target:
agent/sandbox/ that was most recently writtenagent/sandbox/Run the linter from the project root:
# Lint a specific file
python3 -m agent.fmlint agent/sandbox/MyScript.xml
# Lint all sandbox XML files
python3 -m agent.fmlint agent/sandbox/
# JSON output (for programmatic use)
python3 -m agent.fmlint --format json agent/sandbox/MyScript.xml
# Force tier or disable rules
python3 -m agent.fmlint --tier 2 --disable N003,D002 agent/sandbox/
The linter auto-detects:
| Level | Meaning | Action | |-------|---------|--------| | ERROR | Will break in FileMaker | Must fix before deployment | | WARNING | Likely bug or convention violation | Should fix | | INFO | Style suggestion | Optional improvement | | HINT | Minor recommendation | Informational only |
| Prefix | Category | Tier | Examples | |--------|----------|------|----------| | S | Structure | 1 | Block pairing, XML well-formedness, step attributes | | N | Naming | 1 | Unicode operators, variable naming, hard tabs | | D | Documentation | 1 | PURPOSE comment, $README block | | B | Best Practices | 1 | Error capture pairing, commit before nav | | C | Calculations | 1/3 | Unclosed strings, unbalanced parens, live eval | | R | References | 2 | Field/layout/script existence, ID matching |
For each ERROR or WARNING:
fix_hint field suggests how)Common fixes:
<> with ≠, <= with ≤, >= with ≥$camelCase, $$ALL_CAPS, ~camelCase# PURPOSE: description as the first stepWhen OData is configured in agent/config/automation.json and the developer approves:
Important: Always confirm with the developer before triggering OData calls:
FMLint found N calculations to validate against the live FM engine. Proceed?
This catches issues that offline analysis cannot — invalid field references, nonexistent custom functions, context-dependent calculation failures.
When used as part of the standard script creation workflow (CLAUDE.md steps 6-7):
agent/sandbox/, run:
python3 -m agent.fmlint agent/sandbox/<script_name>
deploy.py only after errors are resolvedThe linter replaces validate_snippet.py as the primary validation tool while maintaining backward compatibility — validate_snippet.py continues to work for its original XML-only checks.
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.