MojoPad

AI Agents

MojoPad can hand an AI assistant a set of tools for working with your wikis — so instead of you clicking around, you can just ask. Say “make a MojoPad wiki from the documents in this folder” and the assistant builds it; ask “what do my notes say about onboarding?” and it answers from your pages. As with everything in MojoPad, it all happens on your Mac. What an assistant READS, though, goes wherever that assistant sends it — it is not MojoPad, and that edge is described exactly further down this chapter.

If words like MCP and agent are new to you, this chapter starts from zero. You don't need to be technical to use any of it.

What is MCP, in plain terms?

MCP (the Model Context Protocol) is simply a shared standard for letting an AI assistant use tools. On its own, a chat assistant can only talk. MCP is the socket that lets it also do things in real apps — read a file, search a database, create a document. A program that offers such tools is called an MCP server; the assistant that uses them is the MCP client (or agent).

MojoPad includes an MCP server. Turning it on gives your assistant sixteen MojoPad tools — create a wiki, add a page, add lines to a page you already have, search, ask a question, and so on. You never see the tools directly; you just talk to your assistant in plain language, and behind the scenes it picks the right MojoPad tool for what you asked. Think of it as teaching your AI assistant how to use MojoPad on your behalf.

What you need

  • An AI app that speaks MCP. MojoPad sets up in one click for Claude Desktop, Claude Code, Cowork, and Dispatch, and works with any other MCP client via a copy-paste config. (These are the assistant apps — MojoPad is the server they connect to.)
  • Nothing else to install. The MojoPad server runs inside MojoPad's own program, so there's no separate download, no Node.js, no command to leave running.
  • For the “live” features only: your local AI, Ollama, running (see the Local AI chapter). The offline features don't need it.

Connecting your assistant — step by step

Open Settings ▸ AI Agents (⌘,, then the AI Agents tab). You'll see a button for each app. Click the one you use:

  • Add to Claude Desktop — click it, then fully quit and reopen Claude Desktop. That single step also connects Cowork and Dispatch, which share Claude Desktop's connections — no separate setup for those.
  • Add to Claude Code — click it, then start a new Claude Code session (a new terminal, or a new window). An MCP connection is picked up when a session starts, so a session you already had open won't see MojoPad until you begin a fresh one.
  • Copy config — for any other MCP client (or to set one up by hand), this copies a small configuration snippet. Paste it into that app's MCP settings where it asks for MCP servers.

After connecting, confirm it worked: ask your assistant “check the MojoPad app status” or “list the pages in <some wiki>”. If it can answer, you're connected. From here on you never touch Settings again — you just talk to your assistant.

Your first two minutes

A concrete way to feel it working, in a fresh assistant session:

  1. Make a folder with a few .md or .txt files (or point at one you have).
  2. Tell your assistant: “Use the MojoPad tools to create a wiki called Research from the documents in /path/to/that/folder, then open it in MojoPad.”
  3. Watch MojoPad pop open with a new wiki — each document now an editable, interlinked page.

That's the whole loop: you ask, the assistant uses MojoPad's tools, the result appears in the app. No wiki opens with setup questions — it's ready to use.

What you can ask for

The tools fall into two groups. The offline group works directly with wiki files on disk — MojoPad doesn't even need to be running:

You can say…What happens
“Create a wiki at <path>Makes a new, empty .mojopad document.
“Fill it from the documents in <folder>Imports a folder: Markdown and text become editable pages, images are embedded, and PDFs, EPUBs, and Word files come in as attachments you can open and read in MojoPad.
“Add a page called X with this content…”Writes a new page into a wiki.
“List / read / search the pages in <wiki>Browses a wiki's pages, reads one, or keyword-searches it.
“Open <wiki> in MojoPad”Launches the app on that wiki.

The live group works with the wiki you have open right now, using your local AI (these need the first switch below, and Ollama running):

You can say…What happens
“Ask my open wiki: <question>Answers from your own pages, and cites which pages it drew from.
“Search my open wiki by meaning for <idea>Finds related pages by meaning, not just matching words.
“Add a page to my open wiki…”Writes a page that appears in the app as it's created. In an existing wiki you are asked about the page first, unless you have turned the second switch on.

Your attached papers count as pages

A wiki of PDFs, ePubs and Word files — a reading list, a folder of papers, a set of reports — can be read and searched by an assistant like any other. Ask what do my sources say about dosage and the words inside those files are searched, not just the pages you typed.

This is worth saying because it used to be silently untrue. A wiki whose sources were all attachments answered as though it held nothing, and an assistant reporting you don’t have anything on that is the most convincing wrong answer it can give. Searching also covers the address a clipped page came from, so looking a source up by its web address or its DOI finds it instead of reporting it missing.

The pages behind an answer come back one to a line, so a page whose name contains a comma stays one page.

Checking a long reference list

are-these-real takes the identifiers out of a draft and asks the catalogs whether each work exists. Past a few dozen citations in one go it declines and suggests doing it inside MojoPad instead — a request that size is a great many lookups against somebody else’s service, and the app can pace them properly. Nothing is lost: the same check on the same draft works in the app with no ceiling.

The four controls — you're always in control

In Settings ▸ AI Agents there are four. Three of them start switched off, and the fourth — being asked — starts on, because the alternative to being asked is not a refusal but a standing yes:

ControlWhat it allowsChange it when…
Let agents reach the wiki that's open right now
(off)
Unlocks the live features — Ask and search-by-meaning over your open wiki. The connection exists only on your own computer and is guarded by a private key, so a web page or another machine can't reach it. Nothing listens until you switch it on.You want to ask questions of, or semantically search, the wiki you're working in.
Allow agents to modify wikis you already have
(off)
With this off, an assistant can create new wikis, and is asked before changing the ones you keep — see the row below. On, it changes them without asking, and can fill an existing wiki from a folder. You are tired of being asked, and trust the assistant to write into wikis you already keep.
Ask me before an agent changes one
(on)
The middle answer, for when neither of the other two fits. Off, a change to a wiki you already have is simply refused. On, you get asked — which wiki, and what it wants to add — and nothing is written unless you say yes. Each change asks again: a yes buys that one change and nothing else. The switch above still wins, so with that on nothing is asked at all. You want to file the occasional page without handing over every wiki you have ever opened.
Agents may read
(wikis you've opened in MojoPad)
Which wikis an assistant can look inside without your naming them. Opening a wiki in MojoPad once is what puts it on the list. The alternative, any wiki on this Mac, lets an assistant read a wiki straight off the disk.You keep a wiki you never open in MojoPad and still want an assistant reading it — otherwise leave it be.

A good default: change nothing to start. Making new wikis and reading the ones you actually use — the most common jobs — needs no change at all.

How “wikis you've opened” works, and why

This one is worth understanding, because it's the difference between “my wikis” and “every wiki on this computer”, and those aren't the same thing.

An assistant reaches your wikis by path — it names a file on disk. Nothing stops it naming one you never mentioned, and earlier versions of MojoPad would simply open it. So the list of wikis you've opened in MojoPad is now the boundary: those are readable, and anything else gets a polite refusal that tells you how to change it.

Practically:

  • To make a wiki readable, open it in MojoPad once. That's it — it stays on the list.
  • In a wiki it just made, an assistant can read back its own writing but nothing else. Pages it wrote itself, it can re-read and improve — that's it checking its own work, and the words were its own to begin with. Pages that came from your files, by importing a folder, it cannot read back. So "build me a wiki from this folder, then write me an index of it" works; "build me a wiki from this folder, then tell me what's in those documents" does not, until you open the wiki yourself.
  • A wiki you keep for something private stays out of reach as long as you don't open it — which is a decision you can make per wiki, without switching anything off.
  • A password-protected wiki is never readable this way at all, opened or not. Unlock it in MojoPad and use the live features instead.

Your privacy — where the edge actually is

This deserves saying precisely, because the honest answer has two halves.

MojoPad's half runs entirely on your Mac. The tools read and write local files directly. Nothing is uploaded by MojoPad, no account is involved, and if you use no AI features at all, no connection is even opened. The live connection is local-only and key-guarded, so nothing outside your computer can reach your wikis through it.

The assistant's half is the assistant's. It isn't MojoPad, and when it reads a page, what it reads goes wherever that assistant sends it. If it's an assistant that thinks in the cloud, then the page does too — that's what asking it to read your wiki means. Nothing is shared until it asks and you allow it, and the three controls above are how you decide how much it can ask for.

Ask is the exception, and it's a real one. When you ask a question of your open wiki, your local AI reads your pages and composes the answer here on your Mac. Only that answer travels back to the assistant. The wiki itself never leaves.

One caveat, if you have turned on Bring your own model and permitted this wiki in Settings ▸ AI: an assistant's question is still a question being asked, so the pages it draws on go to your provider to be composed into the answer. Two outside parties instead of one. If that is not what you want, leave that setting off — it is off unless you turned it on.

What an assistant may change, and what it may not

An assistant can make a wiki, add a page, and add lines to a page you already have — a finding under what is written, a row for a table. Each of those is asked about before it happens, naming the page, unless you have given a standing yes above.

It cannot revise or delete what you wrote. There is no tool that replaces a page, edits a line, or removes anything, so nothing you have written can be overwritten by an assistant — the worst it can do to an existing page is add to the end of one, and you were asked first.

Some pages refuse to be added to at all: a page whose words live in a file (a PDF, a Word document), a board, a locked page, and any page whose body is a program — an Event:, Plugin: or Clipping: page — because a line added to one of those is a line added to code that runs.

To change words that are already on a page yourself, select them and use ✦ Edit with AI, or take an answer from the Ask panel with ⤵ Insert, which puts it where your cursor is. Those are you making the change, so nothing needs to be granted.

Wikis an assistant may ask but not read

Here's the awkward thing about the rule above: the wiki you'd most like help finding something in is usually the one you haven't opened in a year — because that's precisely the one whose contents you can't remember. Requiring you to open it first is backwards.

So there's a second, narrower permission. In Settings ▸ AI Agents ▸ Wikis agents may ask, press Choose a wiki… and pick one. From then on an assistant can ask that document whether it relates to a question, and that is all it can do. Not a page. Not a sentence. Not even a page title.

What it looks like. You're working on something else entirely and you ask your assistant "do I have anything on panel replacement quotes?" It comes back with:

Home — 78/100, 6 pages match
Finances — 61/100, 2 pages match

A name, a strength, a count. You now know where to look, and you go and look yourself — or you open that wiki and ask properly. What crossed the line was two document names you already knew you had.

Why this is a separate decision from the one above. Asking really does disclose less than reading, but "less" is not "nothing" — a determined assistant could ask many narrow questions and learn something from the pattern of answers. That's a fair trade to make about one document you chose deliberately, and not one MojoPad should make on your behalf for everything on your disk. So it's per wiki, you pick each one from a file dialog, and there's a ceiling on how many of these questions can be asked in an hour.

Being asked, instead of deciding once

The problem with a switch is that it is answered once, in advance, about everything. Somebody who wants to file a single page into a single wiki would have to allow changes to every wiki they have ever opened, for ever — and a permission that broad is one you grant on a Tuesday and never think about again. So that is not what happens. You get asked.

This is on from the start, and it is what makes the setting above safe to leave alone. A change to a wiki you already have arrives as a question naming the wiki and what is about to be added. Say no and nothing happens. Say yes and that one change goes through — and only that one. The next change asks again, because the whole point is that you are agreeing to a page, not to a policy.

Two ways out, if being asked is not what you want. Allow agents to modify wikis you already have lets the changes through without a question. Turning Ask me before an agent changes one off does the opposite: changes are refused outright, the way they were before this existed.

Where the question appears depends on which door the change came through. A tool working on a wiki file asks through your assistant, in whatever window you are already looking at. A change to the wiki you have open is asked by MojoPad itself, in its own dialog — not because that is prettier, but because anything holding the key to the live connection could otherwise simply claim you had agreed, and a claim is not an answer.

Three honest limits. Some assistants have no way to show a question like this; those are told so and refused, rather than quietly allowed through. A question nobody answers stays unanswered — the change waits rather than timing out into a yes or a no on your behalf. And if you say no several times in a few minutes, MojoPad stops asking for a while and simply refuses, so that something asking over and over cannot wear you down into a yes. It starts asking again on its own.

The question always names the wiki it is about, and an import names the folder it will really read — followed to where it actually lands, not as it was typed — along with how many files are in it. One yes to an import is a yes to all of them, which is not something anybody can weigh without the number.

When a tool you connected needs to ask you something

A tool can stop in the middle of what it is doing and put a question to you — shall I delete that group? — rather than deciding alone. MojoPad used to answer, on your behalf, that it could not be asked anything, so the tool gave up and the whole request failed with a message you could do nothing about.

Now the question reaches you, in MojoPad's own dialog. That matters more than it sounds: the heading names the tool as you named it in Settings, so nothing can claim to be a different tool or to be the app itself, and the tool's words appear as a quotation, because that is what they are. A tool may be passing on something it read on a web page a moment earlier.

The only answer is yes or no. A tool asking for something you would have to type — a name, a key, a choice from a list — is refused and told so, rather than shown to you in a box MojoPad built from that tool's own description of it. And a tool that keeps asking after you have said no several times stops being able to ask for a while, so nothing can simply wait for you to click the wrong button. That fades on its own.

Properties, and who concluded each one

Your typed properties — Year, Authors, Status, Rating, whatever you have defined — can now be read by an assistant you have connected. What makes that worth doing is the second half of every line: who worked the value out.

MojoPad has recorded this all along, at the moment each value was written. A value a model drafted carries that model's name and the day. A value fetched from a catalog carries the catalog and the record it came from. A value you typed carries nothing, because nobody else is claiming it — and the moment you edit a value by hand, any earlier claim on it ends. Where a model worked from the page and the page has changed since, that is said too: not wrong, possibly overtaken, and yours to judge.

Handing an appraisal to an assistant without that mark is the thing worth avoiding. It arrives looking exactly like a conclusion you reached, and gets repeated as one — a summary drafted on a Tuesday quoted back to you next month as your own view. So the mark is written into every line rather than offered as an extra field, because a field can go unread, and this one going unread is the whole problem.

Moves a tool offers you

A connected tool can offer more than things a model calls. It can offer named moves — whole questions somebody wrote for that tool, ready to ask. A reference manager offers “find work that contradicts this claim”; a search tool offers “compare how different sources treat this”. They are written by the people who built the tool, so they know what it is good at in a way a general question does not.

Type “/” in an empty Ask box and the moves offered by the tools this wiki may use are listed. Choosing one fills the box with the question. It does not send it — you read it, change it if you like, and ask when you are ready. Nothing runs from that menu.

Only tools this wiki has already been allowed to use appear. A tool you have connected but not yet allowed here is simply absent rather than raising a permission sheet from a menu you were only looking at — and a tool that offers no moves costs nothing, because MojoPad asks what a tool can do before asking what it offers.

MojoPad offers its own moves the same way to anything connected to it, including six for working from what you have already read. They are listed in the chapter on connecting an assistant.

A plugin that uses a tool you connected

A plugin can reach any tool you have set up in Settings ▸ AI Agents ▸ Tools you connect — DEVONthink, a reference manager, whatever you connected. It names the tool the way you named it:

const tools = await mojo.mcp.tools('DEVONthink')
mojo.log(tools.map(t => t.name).join(', '))

const page = mojo.currentPage()
await mojo.mcp.call('DEVONthink', 'create_record', {
  name: page.name,
  type: 'markdown',
  content: mojo.read(page.name),
})

You are asked before the first call to each tool, in each wiki, and a wiki you have not given that tool cannot use it. A plugin can only name something already in your list — never an address, a command or a port — and a page that arrived from outside does not run at all. So a plugin can do what you could do by hand, and nothing you have not agreed to.

mojo.mcp.servers() lists what is set up, if you would rather look than remember. mojo.mcp.tools(name) asks one what it can do — worth running once, since every tool describes itself and the names differ between them.

This is the answer to "can a plugin run AppleScript?", which is no: a plugin is a page, and a page can arrive in a wiki somebody sends you, so scripts never reach the shell. Going through a tool you connected is the same reach with a door on it.

A message and what came with it

An email carrying attachments is not one page, it is several: the message, and a page for each document that came with it. Left loose they read as six unrelated files that happened to arrive together — which is exactly what they are not.

So a message with attachments arrives as a folder of its own, named for the message, holding the message and every document that came with it. It starts collapsed, and because the sidebar lists folders and then the pages in no folder, that also takes the whole delivery out of the flat list: one row where there were seven, opening to show what is inside.

A message with nothing attached is left as it was — a folder around a single page is clutter of a different kind. And if you have named a folder for emailed pages, the delivery goes inside it rather than beside it.

What is in the model list

The chooser beside AI Model holds three different kinds of thing, and it says which is which:

  • Your own agent — Claude Code, if it is installed. It runs on this Mac and sends, which is why choosing it asks your permission for the wiki you are in.
  • On this Mac — the models Ollama has installed. MojoPad asks Ollama what is there; nothing is imported and nothing is guessed. If one is listed it is installed and ready, and answers from it never leave this computer.
  • Set up in Settings — the providers you added yourself, under the names you gave them.

✦ Auto means you have not chosen: MojoPad picks, preferring the provider you marked default if you have one and the switch is on. Choosing anything else is a choice, and it is honoured — a model on this Mac answers on this Mac even when a provider is set up.

Your own starter questions

The suggestions in an empty Ask panel are partly MojoPad's and partly yours: the folders you have written most in become Catch me up on…, and a subject you have recorded changing your mind about becomes How has my thinking about… changed?

To set your own, give a persona starter suggestions — one per line, up to six. End a line with … — or three full stops — to have it fill the box for you to finish rather than sending as it is. They replace MojoPad's suggestions in every scope but two. This page keeps its three page tools and shows yours after them, so the same three questions can be waiting on every page you open; and the journal keeps its own, which teach the time windows.

Reading a web page in where you are writing

Clipping a page has always made a new page, which is right when the article is the thing you want and wrong when it is evidence for the paragraph you are in the middle of. Type / and Web page here — or just /url — give it an address, and the cleaned article lands at the cursor, under a line naming where it came from.

It is the same reading the clipper does: the same extractor, the same handling of pages that block automated reading. Only the destination is different. And the source line is not decoration — an article pasted into your notes with no address is a quotation nobody can check, which in a wiki you write from is the difference between a note and a rumour.

If you were looking for transclusion, that is Embed page![[Page]] — and typing transclusion in the / menu now finds it. Use ![[Page|]], with an empty label, when the other page should read as part of this one rather than as a quotation from somewhere else.

Being asked to answer a kind’s questions

Give a page a kind whose properties are answered by AI and MojoPad offers to answer them, naming which. Give twenty pages the same kind and it offers twenty times — at which point the question has stopped being an offer. The dialog has a third button: Don’t ask again in this wiki.

It stops the asking, not the answering: the ✦ on an empty field is still there whenever you want one filled. It is remembered per wiki, because somebody who wants every reference filled the moment it is typed does not want that in their journal. To be asked again, run Offer to answer a kind’s questions from the command palette.

Checking that the works something cites are real

An answer cannot vouch for itself. Somebody building a literature review wrote this at the foot of it by hand: all five articles were retrieved and verified against their records; no titles, abstracts, or URLs were invented. He wrote it because it is what his readers most needed to know — and read who is attesting. I did not invent anything is the one claim a writer cannot credibly make about their own writing, and a fabricated citation is exactly the failure that survives it: confident, correctly formatted, and wrong.

So MojoPad settles it instead. Hand your assistant a draft, a reference list, or anything else carrying DOIs, PubMed numbers or ISBNs, and ask it to check the citations. MojoPad pulls out the identifiers, asks you before anything leaves the machine — naming how many and which catalogs — then asks each catalog whether it has that record, and hands back a sentence you can put under your own work: how many were checked, how many resolved, and, the part that matters, which ones did not.

Only the identifiers are sent. Not the draft, not your pages, not your wiki. And a reply arriving is not the same as a record existing — one of these catalogs answers for a number that was never issued with a perfectly ordinary-looking success, so MojoPad reads the reply for an actual work rather than trusting that something came back. That distinction is the whole feature: without it, every invented number reads as verified.

In your assistant's menu it is are-these-real, which is told to lead with whatever failed and not to look anything up on its own — recognising a citation is precisely how a fabricated one gets waved through.

When an agent opened a wiki by itself

Asking an assistant to open my Research wiki is an ordinary thing to want, and MojoPad does it. But opening a wiki is also what puts it on the list of wikis you have opened — the list that decides what an assistant may read. So a wiki an assistant opened for itself is deliberately not readable afterwards; otherwise showing itself a wiki would be the same as being handed it, and any wiki on the disk would be one step away.

That is right for a wiki you never meant to reach and wrong for one you keep. So they are listed by name in Settings ▸ AI Agents, under Wikis an agent opened by itself, with a way to forget each one, and the folder it is in beside its name — a name on its own is not enough to place a wiki, and this is a list meant to be judged a row at a time. Forget one and that wiki reads normally again. They are offered one at a time on purpose: a single control that cleared the whole list would be one click away from handing over every wiki an assistant has ever put on screen.

Three things it can't do, by construction rather than by good behavior: it can't reach a password-protected wiki (their meaning index is sealed along with everything else), it can't reach a wiki that has never been opened with your local AI running (there's no meaning index to consult, and it says so by name rather than pretending nothing matched), and it can't return text — the index it reads stores page ids and numbers, not prose.

Ready-made moves, in your assistant's own menu

Start with “list my MojoPad wikis”. Every tool that works on a wiki file needs its full path, and until you have one an assistant is guessing. That one asks for the names and the paths and nothing else — no pages, no titles, no text — and it works with the app closed and with your local AI switched off, which the meaning-based one does not.

A tool is only any use if you think to ask for it. So MojoPad also puts its own moves into the assistant's prompt menu: type / in Claude and you'll find which-wiki-knows, ask-the-open-wiki, catch-me-up, file-this, wiki-from-folder, where-do-they-touch, what-has-changed and what-emerges, named in plain words rather than as tool names.

Pick one and it asks for what it needs — and where that's a page, the names from the wiki you have open complete as you type, so you choose the actual page instead of describing it and hoping. They're ordinary starting points, not a mode: you can always just ask for what you want in your own words, and nothing here stops you.

Six moves for working from what you have read

A colleague sends you a paper at eight in the morning and asks what you think. You are writing a methods section and need the background to be claims you can defend in a room with the people who published them. You are about to write the literature suggests and you do not actually know whether your sources agree. Those are the moments these are for, and they are all the same shape underneath: not what does the field say, which your assistant can already find out on its own, but what did I read, and what does it actually hold up. In the menu they appear as already-read-this, what-holds-this-up, where-my-sources-disagree, what-my-library-misses, check-the-wikis-own-answer, background-from-what-i-read and are-these-real. All but the last read from the wiki you have open in MojoPad, so the app needs to be running with the connection to it turned on — and the last one offers at the end to file what it wrote, which only lands if you have allowed agents to add to wikis you already have.

Have I already read this? Paste a title or a citation. It answers with one of three things and says which: you have a note on that exact work and here is what you concluded; you have notes nearby but not on that work; or there is nothing. A stored copy you never wrote under counts as the second, not the first — being told you have read something you have not is the one answer that costs you a paper.

What in my reading actually supports this? Give it a claim. It searches for the claim and separately for its opposite, then sorts what it finds into evidence, your own restatement, pages that simply assume it, and anything arguing against. The pile to look at is the restatement: four of your own notes agreeing with each other is one belief written down four times, and from the inside that is indistinguishable from a supported one.

Where do my sources disagree? Both passages quoted, and each conflict labeled as real — comparable work, different conclusions — or apparent, where they defined a term differently or were written a decade apart. It is told not to resolve it. One answer composed from all of them is the operation that turns a disagreement into a consensus that was never there.

What my library doesn't cover. Your collection held against the wider field, in two lists that are never merged: what you have, and what your assistant found that you do not. Everything in the second list is something you have not read, and the moment the two sit together in one list you will cite from it.

Ask my wiki, then check its answer. This one is worth understanding. When your wiki answers a question, two different claims come back: the app's own record of the pages it retrieved, and the page names the answer put in its own sentences. Inside MojoPad those get reconciled before you see them — each name is either a page the answer read, a real page whose name it merely recognized, or nothing in your wiki at all. Over a connection to an outside assistant, none of that runs. So this move has the assistant do that reckoning itself, page by page, and forbids it from repairing what it finds: where a sentence's stated source does not hold it up, you get told, not quietly handed a different source that would have.

Build a background from what I have read. An argument built as a chain of claims, each one carrying the page in your wiki it came from, and every step your reading does not support left standing as a marked gap rather than filled. It is told not to supply a supporting reference out of its own knowledge, not even a real one it is sure of — because a source you have not read looks exactly like the ones you can defend, right up until somebody asks.

That refusal is the thread through all six. The risk in this work is not an assistant that fails to find something; it is one that hands you a fluent, correctly formatted, entirely real source you have never opened. So these are written to make the gap the deliverable, and to say I did not find it where a search came up empty rather than it is not there. A search that misses is not a shelf that is empty, and only one of those is something you can do anything about.

Letting something else answer a property

A property can be a question MojoPad cannot answer. A page holds a URL and what you want is what is on that page. A page holds an identifier and what you want is what that identifier stands for. MojoPad does not know how to do either — but something you already run probably does.

So a property can be answered by a tool you connect. Add one in Settings ▸ AI Agents ▸ Tools you connect, then open any property in the Properties palette and choose it under …or answered by a tool you connected. Pick which of its tools to use, which of that tool’s fields your value goes into, and which property holds the value to send — usually a different one, so a URL in one field answers a Summary in another.

You do not have to know the action’s name or its fields. MojoPad asks the tool what it can do and fills both lists in for you, with each tool’s own description underneath. Then on the property asks it, and the answer arrives the way every answer does here: offered, not applied, marked with where it came from, and never written over something you wrote.

Setting one up, start to finish

The case this is for. You keep a page for every paper, product or company you are following. Each page holds an address. What you actually want on the page is what is at that address — and you want it for all of them, not one at a time.

That takes two things: a tool that can fetch a page, and a kind that knows to ask it.

1 — Connect the tool

Go to Settings ▸ AI Agents ▸ Tools you connect.

  • A program on this Mac is the common case. Give it a name you will recognize in a menu, put the command in Command to run (usually npx) and the rest in Arguments. If it needs a key, put it in A variable it needs as NAME=value — not in the arguments, where anything running on this Mac can read it. Afterwards the box shows only the name: the value is a secret and is not put back on screen to change something next to it. Leave it as NAME= and the value you already gave it is kept.
  • One on the web needs its https:// address and, usually, an API key. The key is never shown again either, and blank means “keep the one it has”.
  • Or bring in ones you already have. If you have set tools up for Claude Code or Claude Desktop on this Mac, Bring in ones you already have… reads those lists and shows you what is in them to tick. Nothing is added until you choose. Ones already here say so, and MojoPad's own server is shown greyed with the reason — its tools write to the wiki that is open, so a run may never be handed it.

Bringing a tool across is not the same as letting a wiki use it. MojoPad does not inherit the tools your other apps have, deliberately: an agent run is given only what that wiki has allowed, which is why the permission below is per wiki and asked for by hand. The list and the permission are two different things, and this only fills in the first.

What it is for is a line of your own on each tool, shown wherever you choose between them. There is no way to ask a tool what it does without first being allowed to ask it — which is the permission the chooser exists to give — so the line is yours to write. Something is filled in for you when a tool is brought across, from its address or the program it runs; type over it with whatever will mean something to you in a month.

Editing a tool later keeps what you have set on it — the ticked actions below, the key, and every property already pointing at it. Changing its address is different: a key and a standing permission were given to one place and do not follow it to another, so both are cleared and MojoPad says so when you save.

One on the web: a name you will recognize in a menu, the address, and a key if the service needs one.

Then press Test, and read what comes back. Test asks the tool to list what it can do, and names the tools it answers with. That is the moment to check you have the right tool: if the actions are not the ones you expected, nothing later will work.

Test names the actions the tool answers with. These three are what this one offers.

Test is not a check of your key. It asks what the server offers, which many servers will answer without looking at credentials at all. A green answer here and a refusal later, when a property is actually filled, is not a contradiction — it means the connection is right and the key or the account is not. The refusal is shown in full, in the property's own panel, in the tool's words.

Use Edit rather than Remove and re-add when an address or a key changes. A property that is answered by a tool points at that tool, so a tool removed and added again is a different one as far as your properties are concerned, and they stop working. Edit keeps them pointing at it.

How big a question can be. A question that asks for several things at once — five papers, each read and summarised and argued with — is answered by going back and forth: the model asks the tool for something, reads it, asks for the next. MojoPad gives that a budget, and the budget depends on what is answering. A model on a provider you have set up holds a great deal at once, so it gets a dozen goes and may read most of each page it fetches. A model on this Mac holds far less, so it gets fewer and reads less of each — not to be careful with your money, but because a page longer than it can hold is a page it cannot use.

And if it runs out of goes, it answers anyway. Rather than stopping with nothing after a minute of waiting, MojoPad asks once more with the tools put away: answer from what you already found, and say what is missing. The commonest reason a question ran long is a model reaching for one more page it did not need, and that last question usually turns the dead end into the answer. Where there was genuinely nothing to go on, it says that instead — and says it in a notice that stays until you dismiss it, so it cannot be missed.

Where the key is kept. A tool you reach at a web address keeps its key encrypted in a file of its own, unlocked by this Mac and never handed back to any window — not to Settings, not to a page, not to a plugin. Remove the tool and its key is forgotten with it. A key that arrives with a tool you brought in from another app goes into the same place rather than into your settings. If this Mac will not encrypt — which happens on a machine with no login keychain available — the key is not kept at all, and the screen says so rather than storing it in the clear.

A tool that runs a program on this Mac is different: its credential is part of the setup you typed, in a named variable, and is stored as ordinary text with the rest of that setup. Nothing is sent anywhere by it, but it is not encrypted either.

2 — Make the property that holds the question

Open the Properties palette on any page and make a plain Text property called something like Source URL, filled by hand. This is what you will paste an address into. It is not answered by anything; it is the input.

3 — Make the property that holds the answer

Make a second one — Summary, say — and choose Answered by a tool you connected where it asks how the property gets its value. That makes the property and takes you straight to where the tool is chosen.

How a property gets answered: by hand, by your local AI, or by a tool you have connected.

Three pickers appear, and MojoPad has already asked the tool what goes in them:

  • The action — which of the tool's actions to use. Its own description shows underneath, so you can tell one from another without looking anything up.
  • The field — which of that tool's inputs your value goes into.
  • Send the value of… — the one that matters. Exactly one value is sent, and this says which. Choose Source URL. That is the whole trick: one field holds the address, the other holds what came back. It will not save until you have chosen, because the only thing worse than picking wrong here is not noticing you never picked.
The action and its field are read from the tool. Send the value of… is the one to change: it must name the property holding the address.

Press Save.

4 — Give both to a kind

Open a page of the kind you want this on — or make one, Kind: Paper — and add both properties to it. Now every page of that kind asks the same two questions, and you only had to set the tool up once. A kind page shows a row for every property in the wiki, which is how you add one to it; what makes a property part of the kind is answering it there.

5 — Fill it

On a real page, paste an address into Source URL and press on Summary. The answer is offered, not applied, marked with where it came from, and never written over anything you wrote. When it looks right on one page, the kind's own page has ✦ Fill on the pages of this kind…, which says how many pages it will ask about and what it will send before it does anything.

The finished pair: one property holds the address, the other holds what came back — as formatting, not as raw markup.

If nothing comes back, the panel says why in the tool's own words. The two usual answers: the property named under Send the value of… is empty on that page, so there was nothing to send; or the tool answered about your key or your account, which is between you and them.

6 — ...or let the AI choose the tool

Everything above wires one property to one tool, and that is exactly right when you know which tool you want: an address goes to a scraper, an identifier goes to a lookup. It stops being right the moment your question is a question.

Here is the case that shows why. A reader wanted this, in these words:

“Show me the 5 most recent headlines on www.cnn.com along with a summary of each article and a link to its source.”

There is no single tool for that. A scraper wants an address and would answer that a question is not a valid one. A search wants a query and returns a list of results, not five summaries. What the job actually needs is: search, look at what came back, fetch the front page, and then write the answer — which is a sequence of decisions, not a setting.

So the tool picker has one more answer, at the top: ✦ Let AI choose the tool. Pick it and the argument and Send the value of… pickers go away, because there is no longer one tool and no longer one field. What is left is the instruction box, and what you write there is the whole of it.

Setting up that exact question

First, say which tools a model may ever pick from. In Settings ▸ AI Agents, find the tool and press AI may use…. Nothing is ticked to begin with, and nothing ticked means the feature stays off. Tick the ones you are happy for it to reach for:

Settings: the tools a model may choose among. This list lives on this Mac and no wiki can add to it.

Then make the property. On the page, add one called Latest headlines, type Note (formatted) so the answer can carry headings and links, and choose Answered by a tool you connected. In the panel, pick the tool, pick ✦ Let AI choose the tool, and type the question exactly as you would ask a person:

The whole setup: a tool, “let AI choose the action”, and the question in your own words. No argument to map, because there is no one tool.

The line underneath tells you what it may do — it asks your question of Firecrawl and may run: firecrawl_scrape, firecrawl_search — so the permission is readable at the moment you are granting it. Press Save.

Press ✦. The first time a wiki wants a model to choose on a tool, MojoPad asks, and the dialog names the actions rather than asking you to approve a tool in the abstract:

Asked once per wiki. It names the tools, says the list is yours, and says what leaves the Mac.

And the answer:

Five headlines, each with a summary and a link to the source — from a question, not from a configured argument.

What happened in between is the part you could not have set up by hand. It ran a search, got one argument's shape wrong, was told so by the tool, corrected it and ran the search again, then fetched the front page as well because the search alone did not have five current headlines — and only then wrote the answer. Three calls and two tools, decided while it worked.

The value is marked with what produced it — Firecrawl (firecrawl_search) rather than a bare model name — because when a fact has been assembled by something that made its own choices, what it reached for is part of the fact.

Across a whole kind, the same property fills every page of it from the kind's own page — and there the question wants writing differently. It is asked verbatim of each page, so one that names a particular site will ask about that site on every page it touches. Lean on the page instead: “Find the five most recent headlines on the site this page is about…” The page's own text goes with the question, which is what makes that work. MojoPad tells you how many pages it will ask about and what it will send before it does anything, and skips the ones that already have an answer.

Generalising it is a matter of changing the question and the ticks. Ask for the papers that cite a work and tick a scholarly tool's actions; ask what changed on a page since you last read it and tick a scraper. The shape is always the same: one property, one question, and a list of tools you are content to have chosen among.

It takes longer than a fixed tool, and it should — it is several requests and a model reading between them. On a local model expect the better part of a minute; on a provider, less. It gives up rather than running for ever, and says so.

You decide what it may ever choose from, and it is two separate yeses. This is the one place in MojoPad where something else picks what to run, so the permission is split in two and neither half can be set from a document:

  • In Settings, once per tool: beside the tool, AI may use… lists its tools with tick boxes. Nothing is ticked to begin with, and nothing ticked means a model may not choose at all — the feature simply does not turn on. This list is the outer limit, it lives on this Mac, and no wiki can add to it.

    An action you have ticked that the tool is not currently offering is listed struck through rather than hidden, so you can see it and withdraw it. That usually means the tool is not recognizing your key rather than that the action is gone — a tool hands back a smaller set of tools to a caller it does not know. For the same reason, a question that runs with fewer of your tools available than you allowed says so underneath its answer, rather than quietly giving you a thinner one.

  • Then once per wiki: the first time a wiki wants a model to choose on that tool, MojoPad asks — and the dialog names the actions, because “allow AI to use this tool?” is not a question anyone can answer. Say yes and that wiki is set; another wiki, including one somebody sends you, asks separately.

A wiki that arrives from elsewhere can therefore ask for this and get precisely nowhere: the list of tools it would need is not in the file, and an empty list refuses.

What leaves this Mac is the page's text and whatever the model asks the tools for — more than the one-field version above, which is the trade for asking in words. The batch button says so too, and warns that one page may cost several requests, since a model that reaches for a tool, reads the answer and reaches again is the whole point. A protected page still sends nothing at all.

Where the edge is, plainly. A tool you add lives on this Mac only. It is never written into a document, never carried in a settings export, and a document’s own scripts cannot add one — because naming a tool is naming somewhere your writing gets sent, and that is not a choice a wiki somebody sends you gets to make. A tool is asked when you press , and at no other time. A protected page sends nothing at all.

Sharing a kind that uses one. Exporting a kind carries the tool’s name and nothing else — not the address, not the command, not the key. Imported on a Mac where a tool of that name is set up, the field reconnects itself; imported anywhere else, the instruction arrives without the connection and says so. See Page Kinds.

A property that holds prose

Most properties are values. A year, a rating, a status, a link to another page — things a table can sort by, filter on and group into columns. But some of what a page has to say does not fit on one line: a summary, an argument, a set of bullet points. Those are not labels for the document. They are part of it.

So there is a property type for them: Note (formatted). Choose it when you make a property and the field keeps its formatting — paragraphs, bold, lists, headings — instead of flattening to one long line. It sits in the strip at the top of the page like any other property, and you write in it there.

It is the one type a table cannot sort or group by, and that is deliberate rather than a gap. Everywhere a property is read as a value — a Database View column, a filter, a search, the meaning index, what your local model is shown — a note hands over its words without the markup. So a view shows the sentence rather than a tangle of tags, and nothing that expects a value ever meets markup it cannot use.

Where the formatting actually travels. Exports to HTML, PDF and Word carry it, because those can hold a paragraph and a list. Plain text and Markdown’s --- block get the words, because those cannot — and words are the honest answer there rather than a page of angle brackets.

Properties in an export

A paper whose authors and year live in its properties should not export without its authors. When you export a page, its properties are written under the title — whether they came from its kind or you typed them on the page itself. That is true of HTML, PDF, Word and plain text alike, because a rule that varies by format is a rule nobody can hold in their head.

Markdown is the one that behaves differently, and always did. It writes them as a --- block at the very top, which is read back in when the file is opened again — so on that path the properties are part of how the file round-trips rather than part of how it reads. That does not change, and the setting below leaves it alone.

Turn it off in Settings ▸ LinksInclude page properties in exports — if you would rather your exports carried only the writing.

The local API — for scripts, Shortcuts and other apps

The same door an assistant uses is open to anything else you run on this Mac. It has a chapter of its own: see The Local API.

What was done, and when

MojoPad keeps a plain record of every tool an assistant ran: which tool, which wiki, and the time — never what was in your pages. If you ever wonder whether something read a wiki you didn't expect, that's where to look. It covers the live connection as well as the file tools, and a script using the local API is recorded exactly like an assistant is — anything holding the key is an agent as far as this record is concerned. The detail beside each line is a count or a shape and never your words: not what was searched for, not what was asked, not which page. A record of what somebody reads and when is worth keeping thin. Open Help ▸ Save Diagnostic Report… and find the AI agents section; it lists what the controls are currently set to, followed by the most recent calls.

Refusals are in there too, marked as refused. An assistant that tried something it was not allowed to do leaves a line saying so — which is the half worth reading, since a tool doing what it should makes the least interesting record.

If something isn't working

  • The assistant doesn't see MojoPad. A connection is read when a session starts. Begin a brand-new session (for Claude Code, a new terminal or window; for Claude Desktop, fully quit and reopen it) after connecting.
  • “Add to Claude Code” reports an error. It's looking for the claude command and couldn't find it. Make sure Claude Code is installed, then try again — or use Copy config and add MojoPad by hand.
  • Ask says the live bridge isn't reachable. Turn on Let agents reach the wiki that's open right now in Settings ▸ AI Agents, and make sure MojoPad is running with a wiki open. That message is the safety guard doing its job, not a failure.
  • Ask or semantic search returns nothing / an AI error. Those need Ollama running with a model pulled (see Local AI). The offline tools work without it.
  • It acted on the wrong wiki. Live features act on whichever wiki window is frontmost in MojoPad — bring the one you mean to the front, then ask again.
  • It asks before changing an existing wiki. Out of the box you are asked about the one page, naming the wiki and the title, and you answer then. Turning on the second switch below replaces the asking with a standing yes. Turn on Allow agents to modify wikis you already have if you want writes into wikis you already keep.
  • “That wiki isn't one MojoPad has opened.” Working as intended: an assistant may read the wikis you use, not every wiki on the disk. Open that wiki in MojoPad once and ask again, or set Agents may read to any wiki on this Mac if that's the arrangement you want.
  • It made a wiki and could only read part of it. Also intended: in a wiki you haven't opened, an assistant sees the pages it wrote itself and nothing else — not the ones imported from your files, and not the wiki's own starting page. Open the new wiki in MojoPad and all of it becomes readable from then on.
  • It says a wiki is password-protected. Protected wikis are never opened from outside — neither read nor written, since a page added from outside couldn't be encrypted with the rest. Open and unlock it in MojoPad, then use the live features (Ask, semantic search, add a page).