Skip to content
Development
Skill

/FileMaker-XMLsnippet-Layout-Claude-Skill

Use this skill whenever the user wants to work with FileMaker layout XML. This includes generating paste-ready layout object XML (fmxmlsnippet type LayoutObjectList) from descriptions, reviewing layout XML for silent paste-handler failures, or analysing Save as XML layout

From plugin
filemaker-xmlsnippet-layout-claude-skill
151 skill

Claude Code

$ npx -y skills add andykear/FileMaker-XMLsnippet-Layout-Claude-Skill --skill FileMaker-XMLsnippet-Layout-Claude-Skill --agent claude-code

SKILL.md

FileMaker-XMLsnippet-Layout-Claude-Skill.SKILL.md
name: filemaker-layout-xml
description: Use this skill whenever the user wants to work with FileMaker layout XML. This includes generating paste-ready layout object XML (fmxmlsnippet type LayoutObjectList) from descriptions, reviewing layout XML for silent paste-handler failures, or analysing Save as XML layout exports. Trigger any time the user mentions FileMaker layouts, layout objects, fields, portals, tab controls, popovers, button bars, web viewers, anchoring or autosizing, or LayoutObjectList. Always perform the theme pre-flight before generating, and set object anchoring deliberately whenever an object must resize with the window. Do not attempt FileMaker layout XML from memory alone.

FileMaker Layout XML Skill

Created by Andrew Kear of Clockwork Creative Technology and shared openly with the FileMaker/Claris community under CC BY 4.0. Attribution required on any reuse, adaptation or redistribution, including any derived or excerpted work.

Deterministic generation and analysis of `fmxmlsnippet type="LayoutObjectList"`, FileMaker's Layout mode clipboard format. Full specification in `references/filemaker_layout_xml_rules.md`.

Most rules below concern silent failures: the XML pastes without error and is wrong on screen or in behaviour, and no structural audit catches it.

Pre-flight: theme identification (mandatory)

Every object must carry the target layout's `<ThemeName>` verbatim. The wrong identifier causes text doubling and CSS class names rendering as visible text, or fails silently: FM substitutes the destination theme and rebuilds the object from `FullCSS`, discarding `LocalCSS` and leaving `CustomStyles` unbound (§25.3).

1. If the user supplied a clipboard export, extract it: `grep -m1 "ThemeName" file.xml`. A **Save as XML export has no `<ThemeName>`** — read the target layout's `<LayoutThemeReference name="...">` instead, matching the `<Layout>` element by name, since an export holds every layout in the file (§0). 2. If not, ask before generating. The user gets it by copying any object from the target layout and pasting into a text editor. 3. Never default to `com.filemaker.theme.apex_blue`. It is a placeholder in the examples only. 4. If the theme itself was pasted as part of the workflow, FileMaker assigned it a fresh custom-theme UUID at paste time. Capture `ThemeName` from a copy made after the paste, never from the theme XML that was pasted (§28.1).

Ask first. Do not generate and then ask.

ExtendedAttributes on every TextObj

Two or more Text objects pasted without an `ExtendedAttributes` block on each `TextObj` causes FileMaker to concatenate their text at paste time. Include a standard block mirroring the object's own `CharacterStyle` on every Text, Button, ButtonBar segment, GroupButton child and PopoverButton, even for a single object.

Dynamic calculated titles on non-front tab panels remain unsafe in a batch: use quoted literals (§11, §31).

Not required on `ExternalObj`; omit it there (§15).

ButtonBar segment labels go in LabelCalc, not Data

Segment text in `CharacterStyleVector > Data` round-trips byte-perfect and renders blank. Put segment labels in `<LabelCalc>` as the last child of each segment Button, `Data` empty, segment `flags="8"`, empty `ButtonObj buttonFlags="2" iconSize="16"`.

PopoverButtons are the exact inverse: label in `Data`, never generate `LabelCalc` (§9, §9.1, §14).

Anchoring must be set deliberately

`Object flags` bits 28 to 31 are object anchoring and the only part of that field a generator should author. Mixed polarity: left and top inverted, right and bottom direct.

`flags="0"` is left and top, FileMaker's default, correct for most objects. An object meant to fill a resizable window generated with `0` pastes cleanly, looks right at the design size, and never grows. Use `-1073741824` for all four sides. Sixteen-state table in §2.2.

When analysing a DDR or Save as XML export, anchoring is in `LayoutObject > Options` with all four bits direct and unsigned: `clipboard = ddr XOR 0x30000000` (§2.3).

Keep a snippet under about 150 KB

Above roughly 150 KB, FileMaker pastes every object and silently discards every `Calculation` element. Objects arrive correctly named, positioned and styled, displaying nothing. There is no per-calculation length limit; the constraint is the whole paste. Split large batches (§15.4).

Web viewers

`externalFlagSet="32865"` for a viewer hosting an HTML UI. `32781` for plain URL display.

`+64` gates whether `FileMaker.PerformScript()` reaches FileMaker. Without it the `FileMaker` object still exists in the page and calls return normally while going nowhere, so `typeof FileMaker` proves nothing.

`+4` and `+8` draw progress bar and status chrome at a fixed height, which swallows a short viewer entirely: a 46pt viewer showed no page content at all. Omit both on any small viewer and always for an app host.

`name` on the Object element is required for any bridged viewer. Suppress the default border for full-bleed with a `LocalCSS` `border-*-style: none` block (§15.2).

Named theme styles apply by name

`<CustomStyles><Name>STYLE-NAME</Name></CustomStyles>` plus `ThemeName` binds a user-created theme style, no exemplar object needed. Ask the user for the style name. A name absent from the target theme is dropped silently and the object falls back to base appearance (§25.3).

Write integer CSS lengths without a decimal point

A `LocalCSS` length written `1.0pt` is dropped at paste; `1pt` and `1.5pt` survive. Per declaration and silent: a border generated at `1.0pt` keeps style and colour, width falls to `0pt`, nothing draws. Serialise lengths `%g` style (§26.2).

Scope

Generation targets the clipboard format only. DDR and Save as XML are a separate serialisation, read for analysis but never generated; layout part styling, backgrounds and theme palettes live there and are not carried by the clipboard (§30). Charts (`typeID="CHRT"`) and graphics carry binary data and ar

Read more
@andykear
Ships withfilemaker-xmlsnippet-layout-claude-skill

A Claude skill that gives AI models a deterministic, empirically verified foundation for generating and analysing FileMaker Layout mode XML (fmxmlsnippet type="LayoutObjectList").

Stars on GitHub

Momentum

stars in total
15
Star history of andykear/FileMaker-XMLsnippet-Layout-Claude-Skill on GitHub, a chart by star-history.com

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills12d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react2d252k
@facebook@facebookInstall Skill

Questions about FileMaker-XMLsnippet-Layout-Claude-Skill.

Which coding agents can use FileMaker-XMLsnippet-Layout-Claude-Skill?
FileMaker-XMLsnippet-Layout-Claude-Skill installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.