An Agent Skills skill that gives any skill-aware agent — Claude, Devin, Cursor, or similar — deep, accurate knowledge of the BaseElements Plugin for FileMaker, covering all 100+ BE_ functions across HTTP, file I/O, encryption, XML/XSLT, PDF, SMTP, zip/gzip, regex, JavaScript evaluation, and more.
This repository contains both the source documentation (Functions/) and the distributable skill package (baseelements-plugin/). Install the package, contribute to the sources.
- What This Project Provides
- Repository Layout
- Quick Start — Install the Skill
- How the Skill Works
- Function Categories at a Glance
- The Source Documentation
- Updating the Skill
- Contributing
- Project Conventions
- Spec Conformance
- License & Attribution
When the skill is active, a skill-aware agent automatically understands:
- Which function to use — a categorized index of every active
BE_function with one-line descriptions. - How to call it correctly — exact signatures with required and optional parameters.
- Critical cross-cutting patterns — error-capture timing, HTTP/curl workflow, OS path conventions, array handle semantics, SMTP setup, and version-compatibility pitfalls. These are the things an agent cannot derive from any single function's documentation.
- What to avoid — deprecated functions and their native FileMaker replacements.
- Full details on demand — version history, platform compatibility tables, and real example code, loaded per function family only when the agent needs them.
The result: the agent writes correct, idiomatic BaseElements Plugin code the first time, without hallucinating signatures or forgetting BE_GetLastError.
baseelements-skill/
├── README.md ← you are here
├── CLAUDE.md ← project rules for AI agents working in this repo
├── LICENSE ← MIT
├── Functions.md ← original function index (source of truth)
├── Functions/ ← 126 individual function documentation files
│ ├── BE_*.md ← one file per active function
│ ├── Constants.md ← plugin constants reference
│ └── Deprecated/ ← removed/superseded functions
│ └── BE_*.md
└── baseelements-plugin/ ← distributable skill package (install this)
├── SKILL.md ← skill entry point (lean, ~110 lines)
├── README.md ← user-facing install and usage guide
└── references/ ← 24 reference files, one per function family
├── arrays.md
├── clipboard.md
├── constants.md
├── containers.md
├── data-manipulation.md
├── deprecated.md
├── dialogs.md
├── encoding-encryption.md
├── error-checking.md
├── filemaker-sql.md
├── files-folders.md
├── http-urls.md
├── miscellaneous.md
├── pdf.md
├── preferences.md
├── regular-expression.md
├── scripts.md
├── smtp-email.md
├── time.md
├── value-lists.md
├── vectors.md
├── version-compatibility.md
├── xml-xslt-json.md
└── zip-gzip.md
Two layers, one source of truth:
| Layer | Path | Purpose |
|---|---|---|
| Source | Functions/ + Functions.md |
Authoritative per-function documentation, edited by humans. |
| Package | baseelements-plugin/ |
The installable skill, generated/curated from the source. |
You only need the baseelements-plugin/ directory. The recommended approach is to install once into a shared .agents/skills/ folder, then symlink from there into each agent's own skills directory. This way a single source copy feeds every agent you use.
User-level (available across all your projects):
mkdir -p ~/.agents/skills
ln -s "$(pwd)/baseelements-plugin" ~/.agents/skills/baseelements-plugin
# or copy, if you don't need live edits:
# cp -r baseelements-plugin ~/.agents/skills/baseelements-pluginProject-level (available only in one project):
mkdir -p /your/project/.agents/skills
ln -s "$(pwd)/baseelements-plugin" /your/project/.agents/skills/baseelements-pluginDifferent agents look in different locations. Symlink the shared copy into whichever ones you use:
# Claude Code (user-level)
mkdir -p ~/.claude/skills
ln -s ~/.agents/skills/baseelements-plugin ~/.claude/skills/baseelements-plugin
# Claude Code (project-level)
mkdir -p /your/project/.claude/skills
ln -s /your/project/.agents/skills/baseelements-plugin /your/project/.claude/skills/baseelements-plugin
# Cursor
mkdir -p ~/.cursor/skills
ln -s ~/.agents/skills/baseelements-plugin ~/.cursor/skills/baseelements-plugin
# Devin
mkdir -p ~/.config/devin/skills
ln -s ~/.agents/skills/baseelements-plugin ~/.config/devin/skills/baseelements-pluginRepeat for any other skill-aware agent. The symlink means a single update to the .agents/skills/ copy (or the original repo, if you symlinked that) propagates to every agent immediately.
Ask your agent "What skills do you have?" or run the agent's skill-listing command (e.g. /skills in Claude Code) — baseelements-plugin should appear.
Prerequisites: the BaseElements Plugin itself must be installed on every FileMaker client or server where your solution runs. The skill teaches the agent how to write the calculations; the plugin executes them.
The skill uses progressive disclosure to keep context lean:
-
SKILL.mdis always loaded when the skill triggers. It contains the plugin overview and the five critical patterns agents must know before touching anyBE_function:- Error handling — capture
BE_GetLastErrorimmediately after each call. - HTTP — configure options/headers before, inspect response/trace after.
- Paths — plugin paths are native OS paths, not FileMaker
file:paths. - Arrays —
BE_ArraySetFromValueListreturns an integer handle, not the data. - SMTP — configure server, then send.
- Version compatibility — check the installed version before relying on v5.0+ features.
- Error handling — capture
-
references/*.mdfiles are loaded by the agent only when it needs the full documentation for a specific function family. Each file contains signatures, parameter descriptions, version history, compatibility tables, and example code — faithfully copied from the correspondingFunctions/BE_*.mdsource files.
This keeps the always-on footprint small (~110 lines) while still giving the agent access to the complete 100+ function library on demand.
The skill organizes the 100+ BE_ functions into 24 reference families:
| Category | Highlights |
|---|---|
| Arrays | BE_ArraySetFromValueList · BE_ArrayGetValue · BE_ArrayFind |
| Clipboard | BE_ClipboardGetText · BE_ClipboardSetFile |
| Containers | BE_ContainerCompress · BE_ConvertContainer · BE_JPEGRecompress |
| Data Manipulation | BE_StackPush/Pop · BE_VariableSet/Get · BE_TextExtractWords |
| Dialogs | BE_DialogDisplay · BE_FileSelectDialog · BE_FolderSelectDialog |
| Encoding & Encryption | BE_EncryptAES · BE_CipherEncrypt · BE_MessageDigest · BE_SignatureGenerateRSA |
| Error Checking | BE_GetLastError · BE_GetLastDDLError · BE_CurlTrace |
| Files & Folders | BE_FileExists · BE_FileReadText · BE_FileListFolder · BE_FTP_Upload |
| FileMaker SQL | BE_FileMakerSQL |
| HTTP & URLs | BE_HTTP_GET/POST/PATCH/PUT/DELETE · BE_CurlSetOption · BE_OpenURL |
| Miscellaneous | BE_ExecuteSystemCommand · BE_EvaluateJavaScript · BE_Version |
BE_PDFPageCount · BE_PDFAppend · BE_PDFGetPages |
|
| Preferences | BE_PreferenceSet · BE_PreferenceGet · BE_PreferenceDelete |
| Regular Expression | BE_RegularExpression |
| Scripts | BE_ScriptExecute · BE_ScriptStepInstall/Perform/Remove |
| SMTP Email | BE_SMTPServer · BE_SMTPSend · BE_SMTPAddAttachment |
| Time | BE_TimeCurrentMilliseconds · BE_TimeUTCMilliseconds · BE_TimeZoneOffset |
| Value Lists | BE_ValuesSort · BE_ValuesUnique · BE_ValuesFilterOut |
| Vectors | BE_VectorDotProduct · BE_VectorEuclideanDistance |
| XML, XSLT & JSON | BE_XPath · BE_XSLT_Apply · BE_XMLParse · BE_JSON_jq |
| Zip & Gzip | BE_Zip · BE_Unzip · BE_Gzip · BE_UnGzip |
| Constants | BE_ButtonOK/Cancel/Alternate · BE_FileType* · BE_ScriptControl* (v5.0+) |
| Version Compatibility | v4.0.2 and v5.0.0 breaking-change rename tables and migration guide |
| Deprecated | BE_Base64_Encode/Decode · BE_HMAC · BE_JSONPath · BE_ExecuteShellCommand · and others |
See baseelements-plugin/SKILL.md for the complete function-to-reference mapping.
Each Functions/BE_FunctionName.md file is the authoritative documentation for one plugin function, in this format:
## BE_FunctionName
BE_FunctionName ( param1 ; param2 ; { optional } )
**Description** — what the function does
**Parameters** — each parameter explained
**Keywords** — search terms
**Version History** — when introduced/changed
**Notes** — caveats, links, cross-references
**Compatibility** — platform table (Mac/Win/FMS/iOS/Linux)
**Example Code** — usage examples
Functions/Constants.mdlists all named plugin constants and their values.Functions/Deprecated/holds functions that have been removed or superseded by native FileMaker functions. Do not use these in new solutions.Functions.mdis the original function index and the source of truth for what exists.
When a new plugin version adds or changes functions:
- Update the source. Edit or add the relevant file(s) in
Functions/. - Update the package. Edit the corresponding
baseelements-plugin/references/*.mdfile so it reflects the change. The reference files are the agent-facing surface; they must stay in sync with the source. - New category? Create a new
baseelements-plugin/references/category-name.mdand add a row to the category table inbaseelements-plugin/SKILL.md. - Deprecated a function? Move its source file to
Functions/Deprecated/and updatebaseelements-plugin/references/deprecated.md. - Verify. Re-read the affected
references/*.mdfile against itsFunctions/BE_*.mdsource to confirm signatures, version history, and compatibility tables match exactly.
See CLAUDE.md for the full set of project rules that AI agents should follow when working in this repository.
Contributions are welcome — particularly:
- Keeping the documentation in sync with new BaseElements Plugin releases.
- Fixing inaccuracies in signatures, parameters, or compatibility tables.
- Improving example code in the source files.
To contribute:
- Fork the repository and create a branch from
develop. - Make your changes following the conventions in
CLAUDE.mdand the Project Conventions below. - Ensure the
Functions/source and thebaseelements-plugin/references/package stay in sync — a change to one without the other is incomplete. - Open a pull request describing what changed and which plugin version it relates to.
- Source of truth lives in
Functions/. Thebaseelements-plugin/references/files are a curated projection of that source for agent consumption. When in doubt, fix the source first, then propagate. - Do not invent functions. If a function is not in
Functions.md, it does not exist in this skill. Add new functions only when they appear in an official BaseElements Plugin release. - Preserve the source format. The
## BE_FunctionName/**Field**structure ofFunctions/BE_*.mdfiles is intentional and parsed by humans and tooling alike. - Keep
SKILL.mdlean. It is always loaded into context. Add new always-on guidance sparingly; prefer a newreferences/file for anything that only matters within one function family. - Mark version-gated features. Functions or constants introduced in v5.0.0 or later should be tagged
*(v5.0+)*inSKILL.mdand the relevant reference file, so agents can guard usage withBE_VersionAutoUpdate. - No emojis in documentation files unless explicitly requested.
The baseelements-plugin/ package conforms to the Agent Skills format specification (originally developed by Anthropic, now maintained as an open standard at agentskills.io).
Conformance is verified with the official skills-ref validator:
npx skills-ref@0.1.5 validate ./baseelements-plugin
# → Valid skill: ./baseelements-pluginThis checks that SKILL.md frontmatter satisfies the spec's required-field and naming constraints (name ≤ 64 chars, lowercase/digits/hyphens only, matches the parent directory; description 1–1024 chars). Re-run this command after any structural change to the skill package.
Note: the Agent Skills spec does not issue an official conformance badge. The spec-conformance badge above is a self-asserted claim backed by a passing
skills-ref validaterun. There is no central registry that certifies spec conformance.
The skill was scanned by AgentVerus and received a certified trust badge with a score of 96/100.
- Report: https://agentverus.ai/skill/25e4bfd7-988a-4258-8a8a-9ca587a17fc6
- Badge: https://agentverus.ai/api/v1/skill/25e4bfd7-988a-4258-8a8a-9ca587a17fc6/badge
- Scanned: 2026-07-03 · Scanner v0.8.1
| Category | Score | Weight | Findings |
|---|---|---|---|
| Injection | 100 | 0.25 | No injection patterns detected |
| Dependencies | 100 | 0.15 | No dependency concerns |
| Behavioral | 100 | 0.15 | No behavioral risk concerns |
| Code safety | 100 | 0.15 | 5 code blocks scanned, no dangerous patterns |
| Permissions | 80 | 0.20 | 3 medium: inferred file-read, network, and doc-ingestion capabilities not declared in frontmatter (false positives for a reference-only skill — the skill documents BE_ functions but does not execute them) |
| Content | 95 | 0.10 | 2 info (positive): safety boundaries defined, error-handling instructions present |
The permission findings are expected for a documentation-only skill: the scanner sees the words curl, references/, etc. in the instructional text and infers runtime capabilities, but this skill only describes plugin functions — it does not call them. The SKILL.md includes an explicit Safety Boundaries section declaring what the skill must not do (no code execution, no filesystem access, no network requests, no credential access). Re-scan after any SKILL.md change:
# Option A — scan from GitHub (after pushing to main):
curl -X POST https://agentverus.ai/api/v1/skill/scan \
-H "Content-Type: application/json" \
-d '{"url":"https://raw.githubusercontent.com/fsans/baseelements-skill/main/baseelements-plugin/SKILL.md"}'
# Option B — scan pasted content directly (no push required):
python3 -c "
import json, urllib.request
content = open('baseelements-plugin/SKILL.md').read()
data = json.dumps({'content': content}).encode()
req = urllib.request.Request('https://agentverus.ai/api/v1/skill/scan', data=data, headers={'Content-Type': 'application/json'})
print(json.dumps(json.loads(urllib.request.urlopen(req).read()), indent=2))
"This project is licensed under the MIT License.
The BaseElements Plugin itself is developed and maintained by Goya. It is free to use and open source. Plugin downloads, release notes, and source code are available at the project site.
This skill is an unofficial community resource derived from the plugin's own documentation. It is not affiliated with or endorsed by Goya. All BE_ function names, signatures, and behavior descriptions are properties of the BaseElements Plugin project.