Install the "overview-pages" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/overview-pages into .claude/skills/overview-pages/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "overview-pages", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add mendixlabs/mxcli --skill overview-pages -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "overview-pages" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/overview-pages into .agents/skills/overview-pages/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "overview-pages", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add mendixlabs/mxcli --skill overview-pages -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "overview-pages" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/overview-pages into .cursor/skills/overview-pages/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "overview-pages", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add mendixlabs/mxcli --skill overview-pages -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "overview-pages" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/overview-pages into .gemini/skills/overview-pages/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "overview-pages", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add mendixlabs/mxcli --skill overview-pages -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "overview-pages" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/overview-pages into .github/skills/overview-pages/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "overview-pages", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add mendixlabs/mxcli --skill overview-pages -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "overview-pages" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/overview-pages into .opencode/skills/overview-pages/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "overview-pages", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
overview-pages
GitHub stars
128
Token cost
~5.8k tokens
SKILL.md length
1,595 words
Files
2
Skills in repo
72
Repo updated
First seen
Licence
Apache-2.0
At a glance
The CRUD overview page pattern in MDL — a navigation snippet, a list page and a new/edit page wired together.
Works in 3 steps: Create the Navigation Snippet → Create the Entity → Create the Overview Page
Building the standard list-plus-edit screens for an entity
SKILL.md covers Overview, Pattern Summary, Navigation Menu Snippet and Overview Page Template, plus 10 more sections
Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
What it does
Overview Pages is an agent skill from mendixlabs/mxcli. The CRUD overview page pattern in MDL — a navigation snippet, a list page and a new/edit page wired together. Use when building the standard list-plus-edit screens for an entity.
Its SKILL.md is about 5.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `reference/column-filters.md`).
The repository describes itself as: Mendix cli tool, a headless way to work with Mendix projects. Enables Mendix projects for use with 3rd party agentic coding tools like Claude Code and Copilot. Includes a… The licence is Apache-2.0.
When your agent uses it
Building the standard list-plus-edit screens for an entity
Example prompts
“/overview-pages”
Workflow steps
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 20a6c89. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
No scripts in the folder and no shell commands in SKILL.md (its code samples are sql).
From the folder's file list and the shell code blocks in SKILL.md.
Network
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Overview Pages loads about 5.8k tokens when it runs. Until then it costs about 48 tokens; SKILL.md has 1,595 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~48
When it runs· the whole SKILL.md, loaded when a task matches
~5.8k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
Download SKILL.mdSave it as .claude/skills/overview-pages/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
overview-pages
description
The CRUD overview page pattern in MDL — a navigation snippet, a list page and a new/edit page wired together. Use when building the standard list-plus-edit screens for an entity.
Overview Pages - CRUD Page Pattern
Overview
Standard pattern for creating CRUD (Create, Read, Update, Delete) pages in Mendix using MDL syntax. This pattern consists of:
Navigation Snippet - Reusable menu for consistent navigation
Overview Page - Lists all objects with a DataGrid and navigation snippet
NewEdit Page - Form for creating/editing a single object
Pattern Summary
Component
Type
Purpose
Key Widgets
Entity_Menu
Snippet
Vertical sidebar navigation
NAVIGATIONLIST with ITEM actions
Entity_Overview
Page
List all records
SNIPPETCALL (sidebar), DATAGRID, Heading
Entity_NewEdit
Page
Create/Edit form
DataView, Input widgets, Save/Cancel
Navigation Menu Snippet
Create a reusable navigation snippet using NAVIGATIONLIST for vertical sidebar menus:
Layout: Atlas_Core.Atlas_Default - Full page with header/footer
Heading: dynamictext with rendermode: H2
Data Grid: datagrid with datasource: database binding
DATAGRID Syntax
sql
datagrid GridName (
datasource: database from Module.Entity where [IsActive = true] sort by Name asc,
selection: Multi,
PagingPosition: both,
designproperties: ('Compact': on, 'Hover': on, 'Striped': on)
) {
column (attribute: Name, caption: 'Name') {
textfilter textFilter1
}
column (caption: 'Actions') {
actionbutton btnEdit (caption: 'Edit', action: show page Module.Entity_NewEdit("entity" = $currentObject))
}
}
Properties:
datasource: database from Module.Entity - Entity data source (required)
where [condition] - Optional XPath filter (inline after entity in DataSource)
sort by attr asc|desc - Optional sorting (inline after WHERE: sort by Name asc, Price desc).
A sort may navigate associations, one / per hop, with the last segment the attribute:
sort by Order_BillTo/City asc. Name the hop when more than one association reaches the
same entity — a bare Module.Address.City is resolved by inference, which cannot tell
Order_ShipTo from Order_BillTo, and the wrong one builds cleanly and sorts by the wrong
thing (mendixlabs/mxcli#1152)
selection: Multi - Multi-selection (Multi, Single, or omit for none)
PagingPosition: both - Pagination bar position (top, bottom, both)
designproperties: ('Compact': on, 'Hover': on, 'Striped': on) - Atlas design tokens
column (attribute: Assoc/Attr, caption: 'label') - Associated-attribute column (attribute over a reference; bare association name, e.g. attribute: Order_Customer/Name; multi-hop A/B/Attr supported)
Custom-content columns build correctly on the default engine (a nested
actionbutton/dynamictext in column (caption: …) { … } — mxbuild-verified,
0 errors). An earlier CE0463 (column property ordering) was fixed. A row-level
onclick (open the NewEdit page on row click) is still a fine alternative for a
row-open affordance.
Reserved keyword attribute names: If the attribute name is a reserved MDL keyword (e.g. Status, Type), quote it. A column takes no name (Mendix stores none), so there is no widget name to choose:
Column Properties (non-default only in DESCRIBE output):
Property
Values
Default
Sortable
true/false
true (with attribute)
Resizable
true/false
true
Draggable
true/false
true
Hidable
yes/hidden/no
yes
ColumnWidth
autofill/autoFit/manual
autofill
Size
integer (px)
1 (when manual)
visible
expression
true
DynamicCellClass
expression
(empty)
tooltip
text
(empty)
Column Filters (match the attribute's data type)
A filter widget must match the column attribute's type, or MxBuild fails with
"The text filter is not compatible with the … data type". Do not apply
textfilter to every column — it only works on String attributes. Pick by type:
Attribute type
Filter widget
String
textfilter
Integer / Long / Decimal / Autonumber
numberfilter
Date and time
datefilter
Enumeration
dropdownfilter
Boolean
(no filter — every filter widget errors on Boolean)
sql
column (attribute: Name) { textfilter f1 } -- String
column (attribute: Quantity) { numberfilter f2 } -- Integer/Decimal
column (attribute: OrderDate) { datefilter f3 } -- Date and time
column (attribute: "Status") { dropdownfilter f4 } -- Enumeration
-- Boolean columns: omit the filter entirely
The filter goes inside the column's own braces — column c (attribute: Name) { textfilter f1 }.
A filter { … } block after the column is the gallery's spelling and is refused as
MDL-WIDGET30 on a data grid. That case, and a column over an association (a
dropdownfilter taking Association, datasource and CaptionAttribute), are in
reference/column-filters.md.
The grid filters itself — do not build a filter bar beside it. The shape to avoid is a
non-persistent filter entity, inputs bound to it, an apply microflow on every change, and
an XPath on the grid reading that object back: measured on one generated app, three
microflows and 1,100 characters of XPath against five lines, one filter per column.
NewEdit Page Template
Form for creating or editing a single entity. Requires a page parameter to receive the object.
Parameter name conventionally matches the entity name (e.g., $store, $Customer)
The DataView's binding references this parameter (datasource: $ParamName)
When calling the page via show page, pass the object by parameter name: show page Module.PageName(ParamName = $value)
Reserved-word parameter names must be quoted in the show page args. The generic examples above name the parameter entity, which is a reserved keyword, so the call quotes it: show page Module.Entity_NewEdit("entity" = $currentObject). A non-reserved name ($store, $Customer) needs no quotes: show page Module.Store_NewEdit(store = $currentObject).
NewEdit Page Components
Page Parameter: params: ( $entity: Module.Entity ) - Receives the object to edit
Reserved Attribute Names: Do not use CreatedDate, ChangedDate, owner, ChangedBy as attribute names - these are system attributes automatically added to all entities.
Snippets can accept parameters to display context-specific data. A snippet
parameter must be an entity. A primitive one (params: ( $Label: String )) is
refused as MDL087, because Mendix rejects it with CE0046"Invalid data
type 'String'." — a page parameter may be a primitive, a snippet parameter may
not. To parameterise a snippet on a value, keep the primitive on the calling
page's parameters, or pass an object and read the member inside the snippet.
action: show page Module.PageName - Navigate to page
action: show page Module.PageName(Param = $value) - Navigate with parameters
A show page argument must be the context object, and there has to BE one.
Mendix takes the page argument from the enclosing data widget, so the only
spellings that mean anything are $currentObject or the name of the variable
that widget is bound to (datasource: $Customer → (Customer = $Customer) is
fine). Naming any other variable is refused as MDL-PAGEARG01 — it used to be
accepted and silently opened the page with the context object anyway.
Outside a data widget the same rule leaves nothing at all, so a button sitting
on the page itself (or in a plain container/layoutgrid) may pass no
argument — not a page parameter, not $currentObject, not a literal. There is no
context object there for Mendix to infer, and the page opens with nothing:
mxbuild reports CE1571 per parameter of the target page, and a page whose
parameters are optional would simply show the wrong data. MDL-PAGEARG01 refuses
that too (mendixlabs/mxcli#1029). To open a parameterised page from such a
button, call a microflow that does show page Module.Page(Param = $value) —
that path wires the arguments properly.
Handling Circular Dependencies
When a navigation snippet references pages (via show page) and those pages reference the snippet (via snippetcall), you have a circular dependency. Use the placeholder pattern:
Creation Order
Create placeholder snippet first (before pages)
Create all pages (which reference the snippet via SNIPPETCALL)
Replace snippet with full content (which can now reference existing pages)
Example Pattern
sql
mdl 1;
-- Step 1: Create placeholder snippet (pages can reference this)
create snippet Module.NavigationMenu
{
layoutgrid navGrid {
row {
column (desktopwidth: 12) {
dynamictext loading (content: 'Loading...')
}
}
}
};
-- Step 2: Create all pages (they reference the snippet via SNIPPETCALL)
create page Module.Customer_NewEdit
(
params: ( $Customer: Module.Customer ),
title: 'Edit Customer',
layout: Atlas_Core.PopupLayout
)
{
-- ... page content with SNIPPETCALL navMenu (Snippet: Module.NavigationMenu)
};
create page Module.Customer_Overview
(
title: 'Customer Overview',
layout: Atlas_Core.Atlas_Default
)
{
-- ... page content with SNIPPETCALL navMenu (Snippet: Module.NavigationMenu)
};
-- Step 3: Fill in the snippet with real content (pages now exist)
-- Use CREATE OR MODIFY (preserves the snippet's ID → page bindings stay valid)
-- Do NOT use CREATE OR REPLACE — that would assign a new ID and break existing page references
create or modify snippet Module.NavigationMenu
{
layoutgrid navGrid {
row {
column (desktopwidth: 12) {
actionbutton btnCustomers (caption: 'Customers', action: show page Module.Customer_Overview)
}
}
}
};
Key Points
The placeholder snippet must exist before pages are created (for snippetcall to resolve)
Use create or modify snippet for the fill-in step — it preserves the snippet's UUID so pages that already reference it remain valid
Do not use create or replace snippet — that deletes the placeholder and creates a fresh UUID, silently breaking every page that references the old one
Page references in the final snippet resolve correctly because pages already exist
See Resolve Forward References for the full pattern including page→page and microflow→page cases, declaration ordering rules, and the choice between CREATE OR MODIFY and ALTER SNIPPET.
Overview Pages next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
Go-specific design patterns and best practices including functional options, small interfaces, dependency injection, concurrency patterns, error handling, and package organization.
Vue.js 3 Composition API patterns, component architecture, reactivity best practices, Pinia state management, Vue Router navigation, and Nuxt SSR patterns.
Push OData query options into the SQL of a Mendix resource served by a read microflow, so $filter, $orderby, $top, $skip, $count and the key lookup reach the database instead of being silently…
Chart a Mendix app with Vega-Lite through a pluggable widget that takes the specification and the data as separate properties, so the model emits rows and never assembles a chart payload.
Search the Mendix Catalog platform service registry (catalog.mendix.com) from the CLI to find services published across an organisation.
128 GitHub starsUsed in 1 repo~1.4k tokens
Auto-check passed
Questions about Overview Pages
What does Overview Pages do?
The CRUD overview page pattern in MDL — a navigation snippet, a list page and a new/edit page wired together. Overview Pages is an agent skill from mendixlabs/mxcli. The CRUD overview page pattern in MDL — a navigation snippet, a list page and a new/edit page wired together.
When should I use Overview Pages?
Overview Pages fits situations like: building the standard list-plus-edit screens for an entity.
How do I install Overview Pages in Claude Code?
Run `npx skills add mendixlabs/mxcli --skill overview-pages -a claude-code`. Or copy the skill folder (.claude/skills/mendix/overview-pages in mendixlabs/mxcli) into .claude/skills/overview-pages in your project. Claude Code loads it when a task matches its description.
How do I install Overview Pages in Codex?
Run `npx skills add mendixlabs/mxcli --skill overview-pages -a codex`. Or copy the skill folder (.claude/skills/mendix/overview-pages in mendixlabs/mxcli) into .agents/skills/overview-pages in your project. Codex loads it when a task matches its description.
Can I use Overview Pages in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mendixlabs/mxcli --skill overview-pages -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/overview-pages, .gemini/skills/overview-pages, .github/skills/overview-pages and .opencode/skills/overview-pages in your project.
What does Overview Pages need to run?
SKILL.md names no scripts, command-line tools or credentials: Overview Pages is instructions for the agent only.
Does Overview Pages access the network?
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Is Overview Pages safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
What licence does Overview Pages use?
Overview Pages is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Overview Pages use?
About 5.8k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
What are the alternatives to Overview Pages?
Skills that share tags, products or a category with Overview Pages: Navigation Patterns (Owl-Listener/designer-skills, 2.9k stars), Golang Patterns (affaan-m/ECC, 275k stars), Kotlin Exposed Patterns (affaan-m/ECC, 275k stars) and Vue Patterns (affaan-m/ECC, 275k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Overview Pages?
mendixlabs (a GitHub organization) maintains it in mendixlabs/mxcli, which has 128 GitHub stars. The repository holds 72 skills in this directory. The repository was last updated on October 7, 2026.
Source: mendixlabs/mxcli on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.