Agent skill

Overview Pages

by mendixlabs in mendixlabs/mxcli

The CRUD overview page pattern in MDL — a navigation snippet, a list page and a new/edit page wired together.

Apache-2.0Auto-check passed

Install Overview Pages

skills CLI
$ npx skills add mendixlabs/mxcli --skill overview-pages -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install mendixlabs/mxcli overview-pages --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/mendix/overview-pages .claude/skills/overview-pages && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

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.

  1. Create the Navigation Snippet
  2. Create the Entity
  3. Create the Overview Page

What it can do on your machine

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.

SKILL.md

The full file from mendixlabs/mxcli at commit 20a6c89, republished under its Apache-2.0 licence (© mendixlabs). 1,595 words, ~5,793 tokens.

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:

  1. Navigation Snippet - Reusable menu for consistent navigation
  2. Overview Page - Lists all objects with a DataGrid and navigation snippet
  3. NewEdit Page - Form for creating/editing a single object

Pattern Summary

ComponentTypePurposeKey Widgets
Entity_MenuSnippetVertical sidebar navigationNAVIGATIONLIST with ITEM actions
Entity_OverviewPageList all recordsSNIPPETCALL (sidebar), DATAGRID, Heading
Entity_NewEditPageCreate/Edit formDataView, Input widgets, Save/Cancel

Navigation Menu Snippet

Create a reusable navigation snippet using NAVIGATIONLIST for vertical sidebar menus:

sql
mdl 1;
create snippet Module.Entity_Menu
{
  navigationlist navMenu {
    item itemCustomers (caption: 'Customers', action: show page Module.Customer_Overview)
    item itemOrders (caption: 'Orders', action: show page Module.Order_Overview)
    item itemProducts (caption: 'Products', action: show page Module.Product_Overview)
  }
};
Snippet Syntax
sql
create [or replace] snippet Module.SnippetName
[(
  params: ( $ParamName: Module.EntityType )
)]
[folder 'path']
{
  -- Widget definitions (same as pages)
}
NAVIGATIONLIST Syntax

The NAVIGATIONLIST widget creates a vertical menu with navigation items:

sql
navigationlist widgetName {
  item itemName (caption: 'Caption', action: show page Module.PageName)
  item itemName (caption: 'Caption', action: call microflow Module.MicroflowName)
  item itemName (caption: 'Caption', action: close page)
}

Overview Page Template

Lists all objects of an entity type with a data grid and navigation menu in a sidebar layout.

Layout Structure:

┌─────────────────────────────────────────────┐
│ layoutgrid                                  │
│ ┌────────┬──────────────────────────────────┤
│ │ COL 2  │ COL 10                           │
│ │ menu   │ Heading + datagrid               │
│ │snippet │                                  │
│ └────────┴──────────────────────────────────┤
└─────────────────────────────────────────────┘
sql
mdl 1;
create page Module.Entity_Overview folder 'OverviewPages'
(
  title: 'Entity Overview',
  layout: Atlas_Core.Atlas_Default
)
{
  layoutgrid mainGrid {
    row {
      column (desktopwidth: 2) {
        snippetcall navMenu (snippet: Module.Entity_Menu)
      }
      column (desktopwidth: 10) {
        dynamictext heading (content: 'Entities', rendermode: H2)
        datagrid EntityGrid (
          datasource: database Module.Entity,
          selection: Multi,
          PagingPosition: both,
          designproperties: ('Compact': on, 'Hover': on, 'Striped': on)
        ) {
          column (attribute: Name, caption: 'Name') {
            textfilter textFilter1
          }
          column (attribute: Description, caption: 'Description') {
            textfilter textFilter2
          }
          column (caption: 'Actions') {
            actionbutton btnEdit (caption: 'Edit', action: show page Module.Entity_NewEdit("entity" = $currentObject))
            actionbutton btnDelete (caption: 'Delete', action: delete, buttonstyle: danger)
          }
        }
      }
    }
  }
};
SNIPPETCALL Syntax

Include a snippet in a page using SNIPPETCALL:

sql
-- Simple snippet call
snippetcall widgetName (snippet: Module.SnippetName)

-- With parameters (for parameterized snippets):
snippetcall widgetName (snippet: Module.SnippetName, params: (Customer = $Customer))
Overview Page Components
  1. Navigation Snippet: snippetcall referencing Module.NavigationMenu
  2. Layout: Atlas_Core.Atlas_Default - Full page with header/footer
  3. Heading: dynamictext with rendermode: H2
  4. 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 Types:

  • column (attribute: attribute, caption: 'label') - Attribute column (own-entity attribute)
  • 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)
  • column (caption: 'label') { ... } - Custom content column (nested widgets)

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:

sql
column (attribute: "Status", caption: 'Status')
column (attribute: "Type", caption: 'Type')

Column Properties (non-default only in DESCRIBE output):

PropertyValuesDefault
Sortabletrue/falsetrue (with attribute)
Resizabletrue/falsetrue
Draggabletrue/falsetrue
Hidableyes/hidden/noyes
ColumnWidthautofill/autoFit/manualautofill
Sizeinteger (px)1 (when manual)
visibleexpressiontrue
DynamicCellClassexpression(empty)
tooltiptext(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 typeFilter widget
Stringtextfilter
Integer / Long / Decimal / Autonumbernumberfilter
Date and timedatefilter
Enumerationdropdownfilter
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.

sql
mdl 1;
create page Module.Entity_NewEdit folder 'OverviewPages'
(
  params: ( $entity: Module.Entity ),
  title: 'Edit Entity',
  layout: Atlas_Core.PopupLayout
)
{
  layoutgrid mainGrid {
    row {
      column (desktopwidth: autofill) {
        dataview dataView1 (datasource: $entity) {
          -- Input fields for each attribute
          textbox txtName (label: 'Name', attribute: Name)
          textbox txtDescription (label: 'Description', attribute: description)
          datepicker dpDueDate (label: 'Due Date', attribute: DueDate)
          combobox cbStatus (label: 'Status', attribute: status)

          footer {
            actionbutton btnSave (caption: 'Save', action: save changes, buttonstyle: success)
            actionbutton btnCancel (caption: 'Cancel', action: cancel changes)
          }
        }
      }
    }
  }
};
Page Parameter Syntax
sql
create page Module.PageName
(
  params: ( $ParamName: Module.EntityName ),
  title: '...',
  layout: ...
)
  • 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
  1. Page Parameter: params: ( $entity: Module.Entity ) - Receives the object to edit
  2. Layout: Atlas_Core.PopupLayout - Popup/modal style
  3. DataView: Container bound to page parameter (datasource: $entity)
  4. Input Widgets: Match entity attributes with attribute: property
  5. Footer: Save and Cancel buttons

Complete Example: Store Entity

Step 1: Create the Navigation Snippet

First, create a navigation menu snippet that will be shared across all overview pages:

sql
mdl 1;
create snippet MdlTemplates.NavigationMenu
{
  layoutgrid navGrid {
    row {
      column (desktopwidth: 12) {
        actionbutton btnStores (caption: 'Stores', action: show page MdlTemplates.Store_Overview)
        actionbutton btnCars (caption: 'Cars', action: show page MdlTemplates.Car_Overview)
      }
    }
  }
};
Step 2: Create the Entity
sql
mdl 1;
create persistent entity MdlTemplates.Store (
  Name: string(200) not null,
  Location: string(200)
);
Step 3: Create the Overview Page
sql
mdl 1;
create page MdlTemplates.Store_Overview folder 'OverviewPages'
(
  title: 'Store Overview',
  layout: Atlas_Core.Atlas_Default
)
{
  layoutgrid mainGrid {
    row {
      column (desktopwidth: 12) {
        snippetcall navMenu (snippet: MdlTemplates.NavigationMenu)
      }
    }
    row {
      column (desktopwidth: 12) {
        dynamictext heading (content: 'Stores', rendermode: H2)
      }
    }
    row {
      column (desktopwidth: 12) {
        datagrid StoreGrid (datasource: database MdlTemplates.Store) {
          column (attribute: Name, caption: 'Name')
          column (attribute: Location, caption: 'Location')
        }
      }
    }
  }
};
Store NewEdit Page
sql
mdl 1;
create page MdlTemplates.Store_NewEdit folder 'OverviewPages'
(
  params: ( $store: MdlTemplates.Store ),
  title: 'Edit Store',
  layout: Atlas_Core.PopupLayout
)
{
  layoutgrid mainGrid {
    row {
      column (desktopwidth: autofill) {
        dataview dataView1 (datasource: $store) {
          textbox txtName (label: 'Name', attribute: Name)
          textbox txtLocation (label: 'Location', attribute: Location)

          footer {
            actionbutton btnSave (caption: 'Save', action: save changes, buttonstyle: success)
            actionbutton btnCancel (caption: 'Cancel', action: cancel changes)
          }
        }
      }
    }
  }
};

Complete Example: Car Entity

Entity Definition
sql
mdl 1;
create enumeration MdlTemplates.CarType (
  Sedan 'Sedan',
  SUV 'SUV',
  Truck 'Truck',
  Sports 'Sports Car'
);

create persistent entity MdlTemplates.Car (
  Brand: string(200) not null,
  model: string(200),
  Price: decimal,
  PurchaseYear: integer,
  PurchaseDate: datetime,
  CarType: enumeration(MdlTemplates.CarType)
);
Car NewEdit Page

Shows various input widget types:

sql
mdl 1;
create page MdlTemplates.Car_NewEdit folder 'OverviewPages'
(
  params: ( $Car: MdlTemplates.Car ),
  title: 'Edit Car',
  layout: Atlas_Core.PopupLayout
)
{
  layoutgrid mainGrid {
    row {
      column (desktopwidth: autofill) {
        dataview dataView1 (datasource: $Car) {
          textbox txtBrand (label: 'Brand', attribute: Brand)
          textbox txtModel (label: 'Model', attribute: model)
          textbox txtPrice (label: 'Price', attribute: Price)
          textbox txtYear (label: 'Purchase year', attribute: PurchaseYear)
          datepicker dpDate (label: 'Purchase date', attribute: PurchaseDate)
          radiobuttons rbType (label: 'Car type', attribute: CarType)

          footer {
            actionbutton btnSave (caption: 'Save', action: save changes, buttonstyle: success)
            actionbutton btnCancel (caption: 'Cancel', action: cancel changes)
          }
        }
      }
    }
  }
};

Widget Selection Guide

Choose input widgets based on attribute type:

Attribute TypeWidgetExample
StringtextboxName, Description
String (long)textareaComments, Notes
Integer, Long, DecimaltextboxPrice, Quantity
Booleancheckbox or radiobuttonsIsActive, IsPublished
DateTimedatepickerDueDate, OrderDate
Enumerationcombobox or radiobuttonsStatus, Type
Association (reference)combobox with DataSourceCategory, Owner

Note: dropdown is deprecated. Use combobox for enumeration attributes.

ComboBox modes:

  • Enum mode: combobox cb (label: 'status', attribute: status)
  • Association mode: combobox cb (label: 'Customer', attribute: Order_Customer, datasource: database MyModule.Customer, CaptionAttribute: Name)

Reserved Attribute Names: Do not use CreatedDate, ChangedDate, owner, ChangedBy as attribute names - these are system attributes automatically added to all entities.

Show full SKILL.md (642 more words)Show less

Naming Conventions

ItemConventionExample
Navigation SnippetNavigationMenuMdlTemplates.NavigationMenu
Overview PageEntity_OverviewCustomer_Overview
NewEdit PageEntity_NewEditCustomer_NewEdit
FolderOverviewPages—
DataViewdataView1 or dv{entity}dvCustomer
DataGriddataGrid1 or dg{entity}dgCustomer
SnippetCallnavMenu or descriptive namenavMenu, headerSnippet

Button Styles

StyleUse CaseColor
successSave, ConfirmGreen
defaultCancel, BackGray
primaryPrimary actionBlue
dangerDeleteRed
warningCaution actionsYellow

Folder Organization

module/
├── snippets/
│   └── NavigationMenu
├── OverviewPages/
│   ├── Customer_Overview
│   ├── Customer_NewEdit
│   ├── Order_Overview
│   ├── Order_NewEdit
│   └── ...
├── microflows/
└── entities/

Parameterized Snippets

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.

sql
mdl 1;
-- Create a snippet with a parameter
create snippet Module.CustomerDetails
(
  params: ( $Customer: Module.Customer )
)
{
  layoutgrid detailsGrid {
    row {
      column (desktopwidth: 12) {
        dynamictext heading (content: 'Customer Details', rendermode: H3)
      }
    }
  }
};

Use the snippet with parameter passing, inside a page body:

sql
snippetcall customerDetails (snippet: Module.CustomerDetails, params: (Customer = $Customer))

Entity Menu Snippets with NavigationList

For entity-specific action menus (Edit, Delete, etc.), use the navigationlist widget:

sql
mdl 1;
create snippet Module.Entity_Menu
(
  params: ( $EntityParameter: Module.Entity )
)
{
  navigationlist EntityMenuNav {
    item itemEdit (caption: 'Edit', action: show page Module.Entity_NewEdit("entity" = $EntityParameter))
    item itemDelete (caption: 'Delete', action: delete)
    item itemBack (caption: 'Back', action: close page)
  }
};
NavigationList Syntax
sql
navigationlist widgetName {
  item itemName (caption: 'Caption', action: ACTION_TYPE)
}

Supported Actions:

  • action: save changes - Save changes
  • action: cancel changes - Cancel changes
  • action: close page - Close current page
  • action: delete - Delete object
  • action: call microflow Module.MicroflowName - Call microflow
  • action: call microflow Module.MicroflowName(Param = $value) - Call microflow with parameters
  • 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
  1. Create placeholder snippet first (before pages)
  2. Create all pages (which reference the snippet via SNIPPETCALL)
  3. 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.

Snippet Commands Reference

CommandDescription
list snippets [in module]List all snippets
show snippet Module.NameShow snippet summary
describe snippet Module.NameShow snippet MDL source
create snippet Module.Name { ... }Create a new snippet
create or modify snippet Module.Name { ... }Create or update snippet
alter snippet Module.Name { ... }Modify snippet widgets in-place
drop snippet Module.NameDelete a snippet

© mendixlabs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .claude/skills/mendix/overview-pages of mendixlabs/mxcli.

  • SKILL.md
  • reference/column-filters.md

Open the folder on GitHubat commit 20a6c89

Compare with similar skills

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.

Overview Pages compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Overview Pages this skillmendixlabs/mxcli128—~5.8kAutomated safety check: PassApache-2.0
Navigation PatternsOwl-Listener/designer-skills2.9k1 repos~1kAutomated safety check: PassMIT
Golang Patternsaffaan-m/ECC275k—~1.1kAutomated safety check: PassMIT
Kotlin Exposed Patternsaffaan-m/ECC275k4 repos~5.5kAutomated safety check: PassMIT
Vue Patternsaffaan-m/ECC275k1 repos~3.3kAutomated safety check: PassMIT
Dotnet Patternsaffaan-m/ECC275k1 repos~2.3kAutomated safety check: PassMIT

Similar skills

  • Navigation Patterns

    Owl-Listener/designer-skills

    Select and design a navigation pattern — tabs, drawer, hierarchy, or hub — matched to product structure and user tasks.

    2.9k GitHub starsUsed in 1 repo~1k tokens
    Frontend & DesignAuto-check passed
  • Golang Patterns

    affaan-m/ECC

    Go-specific design patterns and best practices including functional options, small interfaces, dependency injection, concurrency patterns, error handling, and package organization.

    275k GitHub stars~1.1k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • JetBrains Exposed ORM patterns including DSL queries, DAO pattern, transactions, HikariCP connection pooling, Flyway migrations, and repository pattern.

    275k GitHub starsUsed in 4 repos~5.5k tokens
    DatabasesAuto-check passed
  • Vue Patterns

    affaan-m/ECC

    Vue.js 3 Composition API patterns, component architecture, reactivity best practices, Pinia state management, Vue Router navigation, and Nuxt SSR patterns.

    275k GitHub starsUsed in 1 repo~3.3k tokens
    Frontend & DesignAuto-check passed
  • Dotnet Patterns

    affaan-m/ECC

    Idiomatic C and .NET patterns, conventions, dependency injection, async/await, and best practices for building robust, maintainable .NET applications.

    275k GitHub starsUsed in 1 repo~2.3k tokens
    DevelopmentAuto-check passed
  • Fastapi Patterns

    affaan-m/ECC

    FastAPI patterns for async APIs, dependency injection, Pydantic request and response models, OpenAPI docs, tests, security, and production readiness.

    275k GitHub stars~2.3k tokensUpdated 3 days ago
    Backend & APIsAuto-check passed

More from mendixlabs/mxcli

All 72 skills in this repo
  • Mendix Odata Pushdown

    mendixlabs/mxcli

    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…

    128 GitHub stars~2.5k tokensUpdated yesterday
    Auto-check passed
  • Mendix Vega Charts

    mendixlabs/mxcli

    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.

    128 GitHub stars~3k tokensUpdated yesterday
    Auto-check passed
  • Agents

    mendixlabs/mxcli

    Author Mendix AI agent documents in MDL — Model, Knowledge Base, Consumed MCP Service and Agent, with variables, tools and multi-line prompts.

    128 GitHub starsUsed in 1 repo~2.2k tokens
    Auto-check passed
  • Mendix Bulk Oql Dml

    mendixlabs/mxcli

    Run set-based INSERT, UPDATE and DELETE against Mendix entities through OQL statements, which the runtime supports and Studio Pro cannot author.

    128 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Business Events

    mendixlabs/mxcli

    Define event-driven APIs over Kafka with Mendix business event services — publish and subscribe contracts, CREATE/DROP/DESCRIBE.

    128 GitHub starsUsed in 1 repo~1.3k tokens
    Auto-check passed
  • Catalog Search

    mendixlabs/mxcli

    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.