Finishing a Development Branch
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
Project-specific knowledge mxcli cannot compute — the requirements and slices being built from (a spec, a prototype, a conversation), why a pattern was chosen here, what is still undecided, which…
$ npx skills add mendixlabs/mxcli --skill project-brain -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mendixlabs/mxcli project-brain --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/mendix/project-brain .claude/skills/project-brain && rm -rf skills-srcUse ~/.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/
Install the "project-brain" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/project-brain into .claude/skills/project-brain/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-brain", 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.
$skill-installer install https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/project-brainType 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.
$ npx skills add mendixlabs/mxcli --skill project-brain -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mendixlabs/mxcli project-brain --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/mendix/project-brain .agents/skills/project-brain && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "project-brain" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/project-brain into .agents/skills/project-brain/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-brain", 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.
$ npx skills add mendixlabs/mxcli --skill project-brain -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mendixlabs/mxcli project-brain --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/mendix/project-brain .cursor/skills/project-brain && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "project-brain" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/project-brain into .cursor/skills/project-brain/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-brain", 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.
$ gemini skills install https://github.com/mendixlabs/mxcli.git --path .claude/skills/mendix/project-brain--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mendixlabs/mxcli --skill project-brain -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mendixlabs/mxcli project-brain --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/mendix/project-brain .gemini/skills/project-brain && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "project-brain" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/project-brain into .gemini/skills/project-brain/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-brain", 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.
$ gh skill install mendixlabs/mxcli project-brainInstalls 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).
$ npx skills add mendixlabs/mxcli --skill project-brain -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/mendix/project-brain .github/skills/project-brain && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "project-brain" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/project-brain into .github/skills/project-brain/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-brain", 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.
$ npx skills add mendixlabs/mxcli --skill project-brain -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mendixlabs/mxcli project-brain --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/mendix/project-brain .opencode/skills/project-brain && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "project-brain" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/project-brain into .opencode/skills/project-brain/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "project-brain", 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.
project-brainProject-specific knowledge mxcli cannot compute — the requirements and slices being built from (a spec, a prototype, a conversation), why a pattern was chosen here, what is still undecided, which…
Project Brain is an agent skill from mendixlabs/mxcli. Project-specific knowledge mxcli cannot compute — the requirements and slices being built from (a spec, a prototype, a conversation), why a pattern was chosen here, what is still undecided, which marketplace version broke what. Use when starting from requirements that live outside git, before designing something that looks like it was decided before, when you have had to correct the same thing twice, and when an mxbuild error is resolved by something non-obvious.
Its SKILL.md is about 4.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development. It works with Git. 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.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit a924d11. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
jqFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Project Brain loads about 4.9k tokens when it runs. Until then it costs about 120 tokens; SKILL.md has 2,688 words of instructions outside code blocks.
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.
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.
The full file from mendixlabs/mxcli at commit a924d11, republished under its Apache-2.0 licence (© mendixlabs). 2,688 words, ~4,853 tokens.
.claude/skills/project-brain/SKILL.md (or your agent's skills folder).The brain holds what mxcli cannot compute about this project. Two halves:
The plan half matters because hours of work can otherwise leave no trace: a Word document and a chat transcript are not in git, so a session that resumes later has no idea what it was building towards, and neither does the next person.
It lives in docs/brain/, is committed, and is reviewed in a pull request like
any other change.
Anything mxcli can answer does not belong here. Entities, microflows, pages, bindings, references, callers, dead assets — all queryable. A note that transcribes any of them is a note that will disagree with the project the moment someone edits the model, and it will disagree silently.
Before writing anything down, ask whether a command answers it:
mxcli -p app.mpr -c "list entities"
mxcli -p app.mpr -c "list callers of MyModule.ACT_Thing"
mxcli -p app.mpr -c "describe microflow MyModule.ACT_Thing"If one does, do not record it. Record only the negative space — the reason, the constraint, the history that no query can reach.
docs/brain/
project.md cross-cutting decisions
modules/<Module>.md decisions anchored to one module
plan/<slice>.md requirements for one deliverable sliceWhen building: read project.md, plus the shard for each module you are about
to touch. That set is known before the work starts.
When planning, or when picking up work: read the plan. mxcli brain plan
first — it says which slices are outstanding — then the shard for the slice you
are working on.
Never read the whole directory. A large project has dozens of shards, and
reading them all reinstates exactly the context cost the split removed. If you
do not know which modules you are touching yet, read project.md and come back.
mxcli brain brief produces that set for you, so the rule above does not
depend on judgement:
mxcli brain brief --slice 07-planning # project + the modules that slice's
# requirements anchor into + its plan
mxcli brain brief --module Sales # project + Sales, no planThe modules are derived from the slice's requirement anchors — you do not tell it which modules the slice touches, because that is what you opened the brief to find out. The pack goes to stdout and its size to stderr, so it pipes.
This matters most when each slice runs in its own session or sub-agent: the pack is then re-read from a cold start every slice, and reading the whole store instead is roughly three times the tokens.
An agent captures; a person promotes. Capturing is free and reversible; promotion is the human's call about what is worth committing.
mxcli brain capture "Orders are committed by Finance, not Sales" \
-a @Sales.Order -a @Finance.ACT_Post -p app.mprThe first line becomes the entry's title and the rest becomes its body, so a one-argument capture can still carry an explanation:
mxcli brain capture "Marketplace Administration 4.5.0 breaks the login flow
It changes Account's password-policy handling; we pinned 4.3.2 until the
custom login microflow is reworked." -a @Administration.Account -p app.mprThen leave it. mxcli lint reminds the developer that something is staged.
When the source of truth is outside git — a specification document, a prototype, a long conversation — record it as requirements grouped into slices before building. Otherwise the work is invisible: not in an issue, not in a commit message, and gone from the session that resumes tomorrow.
mxcli brain capture "Orders must be approvable by a manager" \
--slice 02-approvals -a @Sales.ACT_Order_Approve -p app.mpr--slice is the only signal needed. It files the entry in plan/02-approvals.md
and makes it a requirement rather than a decision.
Slices are ordered by name, so a numeric prefix is how a roadmap is
sequenced: 01-accounts, 02-approvals, 03-reporting. That is your choice,
not something mxcli maintains.
This is the difference that matters, and it is why requirements are not simply more decisions:
| Anchor points | An anchor that does not resolve means | |
|---|---|---|
| decision | backward, at what exists | the decision is stale — check fails |
| requirement | forward, at what is intended | not built yet — normal, check passes |
So anchor a requirement at what you are going to build. @Sales.ACT_Order_Approve
before that microflow exists is correct, not a mistake.
Never anchor a requirement at a bare module. @Sales resolves the instant
the module exists — long before any of the work inside it — so the requirement
reports built with nothing done. mxcli brain capture --requirement refuses
it and names the alternative, because the failure is silent and flattering:
the plan shows progress that has not happened and nothing else disagrees.
Anchor at a document the slice actually creates. (Measured on a real project:
two requirements anchored at a module both read as built after slice 01.)
A module role is a fine anchor and resolves like any document — a security requirement anchored at the roles it creates is measured correctly. Anchoring at the documents whose access rules the roles govern works too, and says something slightly different; either is legitimate.
A theme has no model element to anchor at (it is files under theme/, which
is the point of mxcli theme). Anchor the branding requirement at the branded
layout the slice adds — the model-side half of the same work.
mxcli brain plan -p app.mprSLICE BUILT PLANNED UNANCHORED
01-accounts 1 0
02-approvals 0 1 1
1 of 3 requirements built, across 2 slice(s).A requirement is built when its anchors resolve against the model. Nothing in the file says "done" — building the thing is what moves the number.
Never write a status into a requirement, and never keep a checklist beside it. A hand-maintained status is wrong the moment someone builds something, and nothing will tell you.
A requirement with no anchor is counted separately as unanchored: it cannot be measured. That is a prompt to anchor it once you know what will implement it, not an error.
A slice holds source material, so its budget is much larger than a decision shard's — and it is not loaded every session. But it is still a budget: a slice too long to read is a slice that should be split.
Capture is easy to postpone forever, so it needs a trigger rather than good intentions. Two, and the first is the reliable one:
If you are unsure whether something qualifies, capture it. Staging costs nothing and is reversible; a person decides what is worth committing.
An open question is a decision that has not been made yet. Record it rather than carrying it in your head — the conversation ends, and the question is expensive to rediscover.
mxcli brain capture "Do approvers see rejected orders?
The spec is silent. Affects the overview page and the access rules." \
--open -a @Sales.Order -p app.mprA question's anchors are not checked. It may name something that does not exist — often the question is precisely whether it should — so the staleness rule that keeps decisions honest does not apply to it.
--open combines with --slice: a question about a slice's scope is filed with
that slice, and is counted apart from its requirements. An unanswered question
is not outstanding scope, so it never inflates the slice.
Answering it turns it into a decision, in place:
mxcli brain resolve <id> "Yes, for 30 days
Agreed with the product owner; drives the overview filter and the access rule."The entry keeps its id and its position, and the question survives as the answer's context. From that moment its anchors are checked, like any other decision.
mxcli brain check and mxcli lint both report unanswered questions until
someone resolves one. That is deliberate: a question nobody answers is the one
kind of entry that gets more expensive the longer it sits.
@Sales.Order.Status is what makes an entry routable (its module decides
the file) and checkable (mxcli brain check verifies it still resolves).
The same fact written as prose — "the Status attribute on the Sales order
entity" — is neither.
| Anchor | Names |
|---|---|
@Sales | a module |
@Sales.Order | a document: entity, microflow, page, workflow, … |
@Sales.Order.Status | a member: an attribute |
An entry's first anchor decides its shard. An entry with no anchor is
cross-cutting and goes to project.md.
An entry may anchor into more than one module — "Sales.Order is committed by
Finance.ACT_Post" genuinely spans two — and that is fine as long as one anchor
belongs to the shard it is filed in.
mxcli brain check -p app.mpr # every shard
mxcli brain check --changed -p app.mpr # only shards this branch touchedTwo independent things are checked, and only some outcomes are failures:
| Outcome | Meaning | Fails? |
|---|---|---|
| resolved | the anchor names something that is there | no |
| not found | the anchor names nothing — the entry is stale | yes |
| not indexable | the target exists but its document type is not in the catalog's index | no |
| misfiled | no anchor belongs to the shard the entry sits in | yes |
"Not indexable" is not a problem to fix. Treating it as missing would demand edits to entries that are perfectly current.
Misfiling is a separate axis, not a fourth anchor state: every anchor can resolve and the entry still be in the wrong file.
Each shard has a line budget, and promote refuses rather than letting a shard
grow past it. project.md is the tightest — it is the only file loaded every
session.
mxcli brain show -p app.mprSizes are computed on every run and deliberately not written down anywhere. A figure in prose is stale the next time anyone promotes.
If a promotion is refused, the answer is to condense or drop, not to raise the cap: the cap is what stops the store becoming a file nobody reads.
| Command | Does |
|---|---|
mxcli brain init -p app.mpr | Creates docs/brain/. Refuses a docs/brain/ it did not write |
mxcli brain capture "<text>" [-a @Anchor]… | Queues an entry. Never commits |
mxcli brain staged [--since <id>] [--slice <n>] [--fail-if-empty] | Lists the queue with the shard each entry would land in. --since is the slice boundary — see below |
mxcli brain promote <id> [--to <shard>] | Writes it into its shard. The human step |
mxcli brain drop <id> | Removes it from the queue or from its shard |
mxcli brain capture "<text>" --slice <name> [-a @Anchor]… | Queues a requirement of that slice |
mxcli brain capture "<text>" --open [-a @Anchor]… | Queues an open question; its anchors are not checked |
mxcli brain resolve <id> "<answer>" | Answers a question, turning it into a decision in place |
mxcli brain plan [--slice <name>] | The roadmap: each slice's requirements counted against the model |
mxcli brain brief --slice <name> | --module <M> | The reading pack: exactly the shards that work needs |
mxcli brain check [--changed] | Anchors still resolve, entries in the right shard, plus slice progress |
mxcli brain show [<shard>] | Entries, lines and headroom per shard |
mxcli rename updates the brain's anchors along with the model's own
cross-references, and says how many it touched. You do not have to fix them by
hand, and --dry-run previews the brain's share too.
This is done at the rename because it cannot be done afterwards. A decision's
anchor points backward, so a stale one is reported NOT FOUND — but a
requirement's points forward, so a stale one just counts as PLANNED, which is
exactly what a forward anchor failing is supposed to mean. Once the old name is
gone there is no way to tell "never built" from "built, then renamed".
If you rename an element some other way — in Studio Pro, or by hand — run
mxcli brain check afterwards and expect the plan's counts to have moved.
show, describe or the catalog answers — it will drift.mxcli brain plan.
A "✅" written beside one is wrong as soon as anyone builds anything.Every command above takes --json, so a dispatcher can act on the answers
rather than read them. Two shapes are worth knowing.
Give the agent its pack. mxcli brain brief --slice <name> is one bounded
read instead of a directory the agent has to navigate.
Check that it recorded something. With one agent per slice the brain stops being a record and becomes the only channel between slices — the next agent has no memory of this one, so a capture that never happened is a decision lost rather than a note lost. Note the boundary before dispatching and ask afterwards:
before=$(mxcli brain staged --json | jq -r .last_id)
# ... the slice's agent runs, and captures ...
mxcli brain staged --since "$before" --fail-if-empty --json--since rather than --slice is deliberate: capture --slice is what makes an
entry a requirement, so a decision found while building a slice carries no
slice at all — and a slice's findings are mostly decisions. The queue is
append-only, so its own order is the honest boundary. last_id comes back even
when nothing matched, so a slice that recorded nothing still hands the next one
a boundary.
mxcli brain init/capture/staged/promote/drop/check/show)an opt-in store in docs/brain/ for the project knowledge mxcli cannot compute. The governing rule is that anything derivable from the model is answered by a command and never written down — a note that transcribes the model disagrees with it silently. Records shard by anchor scope: an entry's first anchor names its file (@Sales.Order → modules/Sales.md), an anchorless entry is cross-cutting (project.md), and there is no index to maintain because the module prefix is the file name. That is what makes the cap per-shard rather than a project-wide budget, and lets a session load project.md plus the modules it is touching. check answers two independent questions: each anchor is resolved / not found / not indexable — only the middle one fails, and the third exists because the catalog's objects view covers the describable types only, so a scheduled event would otherwise read as missing (separated with FindDocumentUnit, which cannot miss a kind because it never asks what kind anything is). Misfiling is a second axis, not a fourth state: every anchor can resolve and the entry still be in the wrong file, and it is only decided when something resolved — judging it on an all-not-indexable entry reintroduced the same false staleness through the other axis (caught by a test, with the guard stubbed as the control). An agent captures to a git-ignored queue and a person promotes; the queue is deliberately not sharded, because routing it would force the file decision before a human has looked at the entry. mxcli lint prints the unpromoted-queue count, because a report only brain check prints is a report nothing demands. Sizes are computed by brain show and never written into a committed file. A second record kind, requirement, lives in plan/<slice>.md and inverts the anchor's meaning: a decision's anchor points backward (not resolving = stale, fails), a requirement's points forward (not resolving = not built yet, passes). Measured: filed as an ordinary entry, one unbuilt requirement takes brain check to exit 1 — which is why it is a separate kind rather than more entries in the same files. That inversion is also what makes brain plan a real progress report: a requirement is built when its anchors resolve, so creating the microflow it names moves the count with the plan file untouched (measured 0/1 → 1/0). A status written beside a requirement is therefore refused by the skill, not just discouraged. Slices are ordered by name (01-accounts), span modules by design (so misfiling does not apply), and carry a generous cap that enforces the slicing discipline — a slice too long to read should be split. A third kind, open question (--open), records what is not decided; its anchors are deliberately not checked, since the question is often whether the thing should exist at all — measured, the identical anchor exits 1 as a decision and 0 as a question. brain resolve converts one into a decision in place, keeping its id and position and starting to check its anchors, which is the transition the kind exists for. Unanswered questions are reported by brain check and by mxcli lint. The skill also gives capture a trigger rather than good intentions — a correction you have had to make twice — because the decisions half otherwise under-fills while the plan half fills at bootstrap. bootstrap-app asks for requirements at the interview and records them by default. Package: cmd/mxcli/brain/. See docs-site/src/tools/project-brain.md and docs/11-proposals/PROPOSAL_project_brain.md
© 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
Just SKILL.md in .claude/skills/mendix/project-brain of mendixlabs/mxcli.
Open the folder on GitHubat commit a924d11
Project Brain 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Project Brain this skillmendixlabs/mxcli | 128 | — | ~4.9k | Automated safety check: Pass | Apache-2.0 | |
| Finishing a Development Branchobra/superpowers | 296k | 5 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Code Review ChecklistshareAI-lab/learn-claude-code | 78k | 5 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Codebase Knowledge Graph Q&AEgonex-AI/Understand-Anything | 85k | 1 repos | ~1.2k | Automated safety check: Pass | MIT | |
| Code Design Rationale Investigatorcursor/plugins | 10k | 9 repos | ~2.6k | Automated safety check: Pass | None | |
| Understand Diff AnalysisEgonex-AI/Understand-Anything | 85k | 1 repos | ~1.4k | Automated safety check: Pass | MIT |
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
shareAI-lab/learn-claude-code
Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.
Egonex-AI/Understand-Anything
Answers questions about a codebase by searching a prebuilt knowledge graph of its files, functions, classes and dependencies, not by rereading every source file.
cursor/plugins
Digs into why code is shaped the way it is by checking git history, pull requests and connected tools in parallel, then reporting a cited read on the tradeoffs.
Egonex-AI/Understand-Anything
Reads your git changes or a pull request against a prebuilt knowledge graph of the project to explain what changed, which components are affected and what is risky.
Egonex-AI/Understand-Anything
Gives an in-depth explanation of one file, function or module by reading the project's knowledge graph and checking that the graph is still fresh.
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…
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.
mendixlabs/mxcli
Author Mendix AI agent documents in MDL — Model, Knowledge Base, Consumed MCP Service and Agent, with variables, tools and multi-line prompts.
mendixlabs/mxcli
Run set-based INSERT, UPDATE and DELETE against Mendix entities through OQL statements, which the runtime supports and Studio Pro cannot author.
mendixlabs/mxcli
Stand up an HTTP endpoint you control instead of a live third-party API, and point the Mendix app at it — Prism from an OpenAPI contract, a constant swap, or a forward proxy.
mendixlabs/mxcli
Call external REST APIs from Mendix — the three approaches (inline REST CALL, consumed REST client document, generated from OpenAPI) and how to choose.
Works with
Categories
Project-specific knowledge mxcli cannot compute — the requirements and slices being built from (a spec, a prototype, a conversation), why a pattern was chosen here, what is still undecided, which…. Project Brain is an agent skill from mendixlabs/mxcli. Project-specific knowledge mxcli cannot compute — the requirements and slices being built from (a spec, a prototype, a conversation), why a pattern was chosen here, what is still undecided, which marketplace version broke what.
Project Brain fits situations like: starting from requirements that live outside git; before designing something that looks like it was decided before; you have had to correct the same thing twice; when an mxbuild error is resolved by something non-obvious.
Run `npx skills add mendixlabs/mxcli --skill project-brain -a claude-code`. Or copy the skill folder (.claude/skills/mendix/project-brain in mendixlabs/mxcli) into .claude/skills/project-brain in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mendixlabs/mxcli --skill project-brain -a codex`. Or copy the skill folder (.claude/skills/mendix/project-brain in mendixlabs/mxcli) into .agents/skills/project-brain in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mendixlabs/mxcli --skill project-brain -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/project-brain, .gemini/skills/project-brain, .github/skills/project-brain and .opencode/skills/project-brain in your project.
Going by SKILL.md and its folder, Project Brain needs the command-line tools its instructions call (jq).
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.
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.
Project Brain 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.
About 4.9k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Project Brain: Finishing a Development Branch (obra/superpowers, 296k stars), Code Review Checklist (shareAI-lab/learn-claude-code, 78k stars), Codebase Knowledge Graph Q&A (Egonex-AI/Understand-Anything, 85k stars) and Code Design Rationale Investigator (cursor/plugins, 10k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mendixlabs (a GitHub organization) maintains it in mendixlabs/mxcli, which has 128 GitHub stars. The repository holds 75 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.