Skip to content

Add a new tool

You wrote your rules once. This is how you make them run inside a new tool — a different chat app, coding CLI, or agent — so the same who.md / how.md behave correctly there instead of breaking.

In MemMini a tool you plug in is called a surface (or consumer). Each surface can do different things: some run code, some can’t; some can schedule a task for later, some only respond when you type. Adding a surface means writing down what yours can do, so your portable intentions land on its real buttons. The framework calls this the agent-bootloader.

Easy button — just say it once. You don’t have to do the five steps by hand. Tell your agent “onboard Cursor as a surface” (or any tool — Aider, a new chat app, another agent) and it runs the agent-bootloader: it explores the six intents on the tool, wires the four files that connect it to your mind, registers it, and tests it in a live session. The steps below are exactly what it does — read them to follow along, review each file before it lands, or do it by hand. Easy button and glass box: the same procedure at two fidelities.

  • You’ve forked MemMini or mounted it as a submodule — see Quickstart.
  • You can edit files in your repo. That’s the only requirement.

Your rules speak in six intentsacquire, retain, compute, effect, coordinate, defer (what an agent is trying to do). A surface offers capabilities (a web tool, a shell, a scheduler). Onboarding writes the mapping between them for your tool — plus a degrade rule for anything your tool can’t do, so nothing silently breaks. The full why: the six intents.

Copy wiki/platforms/example-cli/ to wiki/platforms/<your-tool>/ (use a lowercase-hyphenated name). You now have four filled files to rewrite for your tool — the worked example doubles as the template.

2. Probe your tool — walk the six intents

Section titled “2. Probe your tool — walk the six intents”

Open your tool and ask, for each intent, what actually does this here? This is the only thinking step; the files just record your answers.

Intent (what you want)Ask: on my tool, what does this?
Acquire infoweb search? file read? or just ask me?
Retain a learninga memory? a file it writes?
Compute (run / test)a shell or sandbox?
Effect (publish / deploy)can it push, send, deploy?
Coordinatespawn a helper? hand off through the shared repo?
Defer to latera scheduler? a hook? neither?

Anything it can’t do gets a degrade rule in the next step — that’s the whole point of the exercise.

In your copied contracts/ folder:

  • injection.md — the file your tool auto-reads (so your context reaches it).
  • captures.md — how it writes a learning back to .learnings/raw.md.
  • hooks.md — what it can enforce automatically, or “nothing — relies on the every-turn rules.”
  • capabilities.md — the two tables from your probe: what it can do, and how each intent is served (or degraded).

Don’t invent the shape — your copy from step 1 already carries it: wiki/platforms/example-cli/ is filled in completely, degrade rules and all. Keep its structure; replace every example-cli answer with your own probe results.

If your setup keeps a consumer table, add one row to it (e.g. wiki/contracts/<your>-injection-targets.md, or whichever parent your setup uses) linking the four files. Mark them status: undertesting.

Open a fresh session of the tool and ask it something only your rules would know — e.g. “where does the wiki-layout rule live?” It should answer from your injected context. Then check one capability end-to-end: confirm a publish or deploy actually pauses for your approval. If it doesn’t, the contract is wrong — fix it and re-probe.

wiki/platforms/<your-tool>/contracts/ holds four filled files; capabilities.md lists all eleven capabilities and all six intents — each with a serving capability or a degrade rule — and carries a freshness sentinel; and your tool answers from your rules in a fresh session.