JetBrains MPS is a development environment for creating domain-specific languages, which are programming languages designed for a particular field or task. It provides editors with features such as completion, semantic checks, and type checking, and can generate code in languages including Java and XML.
Borrowing it
Nothing to install: this file belongs to JetBrains/MPS. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/JetBrains/MPS/master/.agents/skills/mps-aspect-editor-menus-and-keymaps/SKILL.mdgit clone --depth 1 https://github.com/JetBrains/MPSWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/jetbrains/mps/mps-aspect-editor-menus-and-keymaps)<a href="https://agentmods.dev/skills/jetbrains/mps/mps-aspect-editor-menus-and-keymaps"><img src="https://agentmods.dev/badge/skills/jetbrains/mps/mps-aspect-editor-menus-and-keymaps/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/jetbrains/mps/mps-aspect-editor-menus-and-keymaps"><img src="https://agentmods.dev/badge/skills/jetbrains/mps/mps-aspect-editor-menus-and-keymaps.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00262 | $0.02799 |
| Opus 5.5 | $0.00105 | $0.01120 |
| Sonnet 5.5 | $0.00052 | $0.00560 |
| Haiku 4.5 | $0.00026 | $0.00280 |
Grade A, and why
mps-aspect-editor-menus-and-keymaps scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 82 lines — stays where its author put it; the contents beside it link to each section on GitHub.
MPS Editor Aspect — Menus, Keymaps and Actions
Loading companion skills
Companion names in this skill are lazy dependencies: load only those relevant to the current task. If this skill came from an MCP server, use the host's skill loader to resolve the companion's unique discovered entry URI on the same host-assigned originating server. If the host has no server-backed skill loader, stop and report that limitation; do not silently fall back to a filesystem copy. If this skill came from a filesystem catalog, load the named sibling from that same catalog at <skills-root>/<skill-name>/SKILL.md, even if remote skill loaders are also available. Do not invent a tool name or server endpoint.
This skill covers how the editor reacts to typing, keystrokes, completion, paste and context actions. Menus, keymaps and action maps are roots of jetbrains.mps.lang.editor in the language's editor model, next to the concept editors. Paste wrappers, copy-paste handlers and node factories are roots of jetbrains.mps.lang.actions in the actions model. Both aspect ids are case-sensitive, with no @ suffix: aspect-model-stereotypes.md. For cells, layouts and style sheets use mps-aspect-editor.
Critical Directives
- Decide whether to write the
EditorTestCases first (mps-tests), and print the decision as one line of visible text before your first edit of an editor, actions or test model (right after loading this skill if you already edited other aspects),Test-first: yes — <reason>orTest-first: no — <reason>(it applies to every behaviour in this skill). It pays off when the behaviour is non-trivial (menus, side transforms, keys, deletion, paste, several interacting items) or only loosely described: a test fixes the description as an exactbefore/resulttree and caret, and a run that fails before the change, for the reason you expect, is what makes the later green run evidence. Skip it for a trivial change (a label, a style, one obvious item) or when the project setup or the user forbids editor tests; then print the changed roots as PLAIN TEXT, runmps_mcp_check_root_node_problems, and say in your report that the behaviour was not exercised in an editor. - Pick the artefact by the behaviour. Change what
Deletedoes → action map. A new shortcut → keymap. Text typed next to a cell → side transform. What Ctrl+Space offers for a slot → substitute menu. A pasted node must change concept → paste wrapper. Table:references/landscape.md. - Nothing is found by name. A
TransformationMenu/SubstituteMenuwhosetypeisMenuTypeDefaultis the default for itsconceptDeclaration. Named menus, action maps and keymaps act only where a cell references them (transformationMenuchild,actionMap/keyMapreferences) or a menu includes them. The one exception iseveryModel=truekeymaps. - Author menus as
TransformationMenu/SubstituteMenuwith atypechild:MenuTypeDefault, orMenuTypeNamedwhosenameproperty holds the menu name (a rootnameis dropped).TransformationMenu_Default/_Named,SubstituteMenu_Default/_NamedandIMenu_Default/_Namedare deprecated: never author them. - A default transformation menu replaces the inherited items for each location it has a section for. Put
superconcepts menu(TransformationMenuPart_Super) once for every location the menu covers, unless you mean to drop the inherited items there. A Completion section without it removes concept replacement on existing nodes. A menu with only side-transform sections keeps completion. - The cell's own node decides. Side transforms and completion on a cell use the menus of the node owning that cell (its
transformationMenufirst). Attach a menu or map to the cell the caret is on, unless that cell is a child's only visible cell (references/landscape.md). The edge cell of a child belongs to the child. - Typing applies an item only on a unique strict match, i.e. the typed text equals the item's text (or a
can substituteguard accepts it withstrictly= true) and nothing else still matches. A prefix applies nothing; the IDE's auto-popup shows the menu, and a test needsComplete(references/side-transforms.md). - Cells have no
substituteMenurole. Reach a named substitute menu throughinclude substitute menuin a transformation menu. An empty default substitute menu hides its concept from completion. - Side-transform items are not in Ctrl+Space unless the section also lists
TransformationLocation_Completion, or a Completion section includes the menu withlocationset. - Keep data across a replacement with a
NodeFactorythat readssampleNode(mps-aspect-actions). Completion items call it. Hand-written bodies:new initializedruns the factory and also pre-fills required children; plainnewdoes neither (references/transformation-menus.md). - Two-step deletion:
if (node.approveDelete[in: editorContext, cell: <cellId>]) { return; }before mutating. The keyword cell needs anid(EditorCellId). Use action maps, notVK_DELETEkeymaps, for DELETE / BACKSPACE. - Implicit-parameter concepts differ per function kind (
nodein a menu ≠ in an action map ≠ in a keymap ≠ in a cell query; paste functions use lang.actions concepts;patternisQueryFunctionParameter_patternin transformation and substitute menus). Take them from the leaf file of the artefact, or from a printed corpus root; write bodies withmps-model-manipulationidioms. - Role names:
conceptDeclaration,type,sections,locations,parts,textFunction,executeFunction,canExecuteFunction. Resolve concepts withmps_mcp_get_concept_details, copy shapes from printed corpus roots (references/real-examples.md). - After edits, run
mps_mcp_check_root_node_problems, then rebuild the language (mps_mcp_alter_nodesMAKE). In a running editor,Ctrl+Alt+Bon a completion item shows the menu chain that produced it.
What ships with it
20 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- references/action-maps.md 1.9 KB
- references/action-maps/declaration-and-items.md 1.3 KB
- references/action-maps/example-delete-not-expression-and-default.md 1.7 KB
- references/action-maps/example-keyboard-deletable-annotation.md 7.3 KB
- references/action-maps/importing-action-maps.md 2.2 KB
- references/action-maps/select-all.md 410 B
- references/aspect-model-stereotypes.md 8.6 KB
- references/common-failures.md 3.7 KB
- references/completion-styling.md 1.1 KB
- references/json-blueprints.md 1.7 KB
- references/keymaps.md 5.4 KB
- references/landscape.md 7.5 KB
- references/legacy-cell-menus.md 2.9 KB
- references/paste-and-copy.md 6.1 KB
- references/real-examples.md 2.1 KB
- references/reference-presentation.md 654 B
- references/selection-and-deletion.md 3.4 KB
- references/side-transforms.md 6.4 KB
- references/substitute-menus.md 8.5 KB
- references/transformation-menus.md 8.6 KB
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago Changed · -9 lines · +38 tokens per session 688a21e858fd
- 1mo ago Changed · +6 lines ecbf4509e53e
- 2mo ago First seen · 85 lines · 224 tokens per session scan A 9175c46a487b
mps-aspect-editor-menus-and-keymaps is a skill published in the GitHub repository JetBrains/MPS (1,666 stars, last pushed yesterday), licensed Apache-2.0. It adds 262 tokens to every session and 2,799 once invoked, about $0.0010 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
mps-aspect-editor-menus-and-keymaps compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| mps-aspect-editor-menus-and-keymapsJetBrains/MPS | Skill | 1.7k | yesterday | Apache-2.0 | A | 262 | Claude Code, Codex |
| langiumeclipse-langium/langium-ai | Skill | 31 | 4d ago | MIT | A | 33 | Claude Code |
| lai-gen-evalseclipse-langium/langium-ai | Skill | 31 | 4d ago | MIT | A | 42 | Claude Code |
| laieclipse-langium/langium-ai | Skill | 31 | 4d ago | MIT | A | 52 | Claude Code |
| lai-gen-descriptoreclipse-langium/langium-ai | Skill | 31 | 4d ago | MIT | A | 49 | Claude Code |
| lai-gen-mcpeclipse-langium/langium-ai | Skill | 31 | 4d ago | MIT | A | 43 | Claude Code |
| lai-gen-language-skilleclipse-langium/langium-ai | Skill | 31 | 4d ago | MIT | A | 33 | Claude Code |