Imported from entermedia-community/eme-plugin-catalog (
.agents/AGENTS.md). Install upstream withnpx skills add entermedia-community/eme-plugin-catalog --skill .agents. Copyright stays with the author.
AGENTS.md
Catalog Plugin Guide
Purpose
plugins/catalog holds the shared data model for the whole EME stack: the field/table
definitions, list-of-values, search views, AI configuration, and server-side event scripts that
every other plugin (finder, community, profile, mediadb, ...) reads or extends. It has no Java
code/ folder — almost everything here is XML/XConf data and Groovy/Velocity event scripts.
Folder Map
html/data/fields/Table (entity) and property definitions — the schema itselfhtml/data/lists/List-type field values (dropdown options, enabled flags, endpoint docs, etc.)html/data/views/Saved search/report views over the tables abovehtml/data/_site.xconfDefault page settings applied to everything underhtml/datahtml/configuration/Base templates and system config:baseentitytemplate.xml(base forentity*tables),baseaiprompt.xml,beans.xml,embedding.xml,elementaljob.xmlhtml/events/<module>/Server-side event scripts grouped by domain (asset, billing, blog, categories, entities, goaltask, llm, notifications, publishing, users, ...) — these run on create/update/delete and other lifecycle hooks for the tables inhtml/data/fieldshtml/images/Static assets used by catalog-owned pages (e.g. watermark)
What This Plugin Owns
- The full data dictionary: every table name, its fields, and their types
- List-of-values used by dropdowns and enabled/ordering config across the app (including
aiskill/automationstepwhich drive the AI automation pipeline defined inplugins/finder) - REST endpoint documentation in
html/data/lists/endpoint/*.xml(sample requests/responses for the JSON services implemented inplugins/mediadb/html/services) - Cross-cutting event scripts that fire on data changes, independent of which plugin's UI triggered the change
Editing Rules
- Never hand-write XML under
html/data/{fields,lists,views}orhtml/configuration— use thecatalog-table-creatorskill (.agents/skills/catalog-table-creator/SKILL.md) so folder layout and cross-file linking conventions are followed correctly. - Table names starting with
entityfollow the entity template pattern inhtml/configuration/baseentitytemplate.xml; anything else is a plain table. - New list-type fields require a matching file under
html/data/lists/<fieldname>/. - Event scripts belong under
html/events/<module>/grouped by the table/domain they react to; keep new scripts in the folder matching their table, not a catch-all location. - If you add or change a REST-facing table, update the matching endpoint doc in
html/data/lists/endpoint/*.xmlso API consumers and AI agents can discover it.
Validation Checklist
- Confirm the new/changed field or list XML validates (well-formed XML, correct
ids). - Clear the page cache (or restart) — changes to
html/dataandhtml/configurationare read through the xconf cache, not picked up on simple reload like a plain HTML file. - Reindex if a field's searchability/type changed, since Elasticsearch mapping is derived from
these field definitions (see
plugins/systemfor the index bootstrap). - Exercise the table from the admin UI (finder) to confirm the field/list renders and saves.
Notes For Agents
- This plugin is data, not code — most "customization" requests that mention a new table, field, dropdown, or automation step land here, even if the feature is surfaced by another plugin's UI.
plugins/catalog/html/data/lists/automationstep/*.xmlcontrols which JavaSkillclasses (seeplugins/finder/.agents/skills/create-java-ai-skill/SKILL.md) run and in what order.