Settings → Harness
The harness is everything Mnemosyne OS puts around the model at each turn: the persona, the rules, the manual, the memories found, your question. This page shows what the last turn really sent, and lets you set the parts you are allowed to set. The rail entry is Harness. The page title is Harness and its subtitle reads What surrounds the model: what it was sent, and what you let through.
The page has three tabs: Last turn, Controls and Paths. The app remembers the last tab you opened.
Export the report
The button Export the report sits at the top right of the page. It writes one HTML page and opens it with your system's default program.
- While it works, the line under the header reads Writing the report….
- On success the line reads Report opened, saved at followed by the file path.
- When the file was written but could not be opened, the line reads Report saved (not opened) at and the path. Open the file yourself.
- On failure the line reads The report could not be written
({error}). After 15 seconds without an answer, the error is
TIMEOUT.
Each export writes a new file in ~/.mnemosyne/harness-reports/. The file
name carries the time, for example
harness-2026-11-11T09-30-00-000Z.html. Old reports stay in the folder.
The report has five parts: what goes to the model, the settings, your paths, the files refused, and what is always sent. It holds labels and sizes only. It never quotes the text of a prompt. Its headings are written by the main process in the app's language. They are not in the en.json locale file.
An agent connected through the SDK reads the same report. See For agents below.
Last turn
This tab shows one card per surface that sent a turn to the model since the
app started. The cards come in this order: Chat, Orb, then the
other surfaces by name. A surface the page has no name for shows its raw
name, for example routine. The surface other shows as Other calls.
The app keeps one receipt per surface, in memory only. Each new turn replaces the previous receipt of that surface. Nothing is written to disk, and a restart empties the tab.
The states of the tab
- While the page reads the receipts, the card Last turn sent says Reading the last turn….
- When the read fails, it says The last turn could not be read
({error}). After 15 seconds without an answer, the error is
TIMEOUT. - When no turn was sent yet, it says No turn sent in this session yet. This card has no refresh button. Leave the page and come back to read again.
One surface card
The top line gives the totals of the turn, {tokens} tokens · {chars} characters, then the time the turn was sent. The refresh button at the top right of the card has the tooltip Read again.
Below, one row per block of the prompt, in the order the model read them. Each row shows:
- The block's name. The table below lists them.
- Its role: system for the system prompt, message for the user part.
- Its size in estimated tokens, {tokens} tok.
- Its size in characters, {chars} char.
- A tinted bar behind the row, as wide as the block's share of the turn.
The token count is an estimate. The app uses the same estimator as its context-window budget, which counts on the high side.
The receipt is cut from the final text. The manual and the memories are measured after the window budget trimmed them. The sizes are the sizes the model received.
A lock icon marks a block that is always sent. Its tooltip reads A rule that bounds what the model may claim. Always sent. These blocks have no control on the Controls tab.
| Row name | Locked | Set on the Controls tab |
|---|---|---|
| Persona | no | no |
| Soul | no | no |
| Lens | no | no |
| Memory only | yes | no |
| Open mind | yes | no |
| No live source | yes | no |
| Commands | no | yes |
| Companion voice | no | no |
| Memory provenance | yes | no |
| Answer language | yes | no |
| Manual | no | yes |
| Memories found | no | no |
| Memory search note | yes | no |
| To-do and Agenda | no | no |
| Conversation and question | no | no |
A block whose marker the app does not know shows its raw marker, with no lock.
Controls
The Controls tab holds three cards. Every choice is saved on this machine, in the app's local storage. Another open window picks up the change at once. When a choice cannot be saved, the tab shows The choice could not be saved.
Manual
This card decides when the app's manual is added to the prompt. It has two groups, Chat and Orb, with the same three choices.
| Choice | Hint for the chat | Hint for the orb |
|---|---|---|
| Every question (default) | Every question is checked against the manual. | Every spoken question is checked against the manual. |
| Only when asked | Only a question about the app: "how do I", "settings", "manual". | Only a sentence about the app: "how do I", "settings", "manual". |
| Never | The chat never reads the manual. | The orb never reads the manual. |
Only when asked recognises questions about the app in French, English and Spanish. In any other interface language, every question counts as a question about the app, so the manual is always added.
The orb's group is the same setting the orb reads for its own manual choice. Changing it here changes it everywhere.
Commands
This card decides which [COMMANDS] block the model receives. The block
tells the model which windows and actions of the app it may ask for. It
has two groups, Chat and Orb, with the same four choices.
| Choice | Hint |
|---|---|
| Automatic (default) | Full, or short for a small local model. |
| Full | Every window and the open verbs. |
| Short | Two lines: give the command, never claim it was done. |
| None | The model is not told which commands the app runs. |
With Automatic, the app sends the short block when the model in use reads the compact prompt, and the full block otherwise.
Always sent
This card has no control. It lists what the harness always sends: Memory provenance, no live source, answer language, memory search note, and the crisis harness.
The list on this card names five items. On the Last turn tab, Memory only and Open mind also carry the lock.
Paths
A guided path is a tree of questions the orb walks with you, without calling the model. The app ships paths built from its manual. You can add your own as files.
Guided paths
This card lists every path in the interface language, shipped or yours. Each row has a checkbox, the path's title, and a tag: shipped or yours. Untick a path to switch it off. When the language has no path, the card says No path in this language.
The app stores the switched-off paths by id, on this machine. All paths are on by default.
Your paths
This card lists the path files read from your folder, with what the app found in each one. When there is none, it says No path of yours yet. While the folder is read, it says Reading the folder….
Each path shows:
- Its title and its state:
- Live: the path runs no app action. It works at once.
- Waiting for you: the path runs at least one app action, and you have not approved this exact file.
- Allowed: you approved this exact file.
- Its file name.
- The apps it opens, after Opens: {apps}.
- One line per app action,
App › action, then its effect. The effect is reads, changes your data or spends credits. - When it starts. The lines read Starts after {count} manual page(s) and Starts when {apps} opens.
- Its warnings:
- One of its actions spends credits.
- One of its actions changes your data.
- It starts after more manual pages than any shipped path: it may come up often.
- It starts when an app of the board opens.
The app names the apps from the cartridges installed on this machine, never from the file.
Approving a path
A path in Waiting for you shows the button Allow….
- Click Allow…
The app re-reads the file from the disk and computes its fingerprint (SHA-256).
- Read the system box
The main process opens a native box in the window you used. The box lists the file, up to six of the actions with their effect (credit spending first), and the trigger warnings. When an action spends credits, the box shows a warning icon. Its text comes from the main process, in the app's language. It is not in the en.json locale file. In English the buttons read "Cancel" and "Allow this path".
- Answer
Only the button "Allow this path" approves. "Cancel", closing the box, or no answer within 10 minutes counts as a refusal. The card then says Not allowed: it stays pending.
The approval holds for these exact bytes. When you edit the file, the path
goes back to Waiting for you and the app asks again. Approvals are
stored, signed, in ~/.mnemosyne/harness-approvals.json.
An approved path shows Withdraw the approval. It takes effect without a box. When an approval cannot be changed, the card says The approval could not be changed.
No agent can approve or withdraw a path. An agent may write a path file; the approval stays your click in the native box.
Your paths folder
This card shows the folder the app reads your paths from, by default
~/.mnemosyne/harness. The refresh button has the tooltip Read the
folder again. Below the folder, the hint reads One file per path:
<language>/<name>.doors.json. A path that runs app actions waits for
your approval; changing the file asks again.
The app never writes in this folder.
When every file was taken, the card says No file refused. Otherwise it says {count} file(s) refused: and lists each file with its reason. The reasons are written by the main process, in English, and are not in the en.json locale file.
The app refuses a file in these cases:
- The language folder is not
fr,enores. The orb walks paths in these three languages only. - The language folder holds more than 50 path files.
- The file is larger than 256 KB.
- The file does not parse as a path.
- The id uses something other than letters, digits,
.,_and-. - The id starts with
crisis. - The id is the id of a shipped path, or of another of your paths.
- The page name is the page of a shipped path in the same language.
- The path calls an action that the cartridge does not declare.
When the folder cannot be read, the cards Your paths and Your paths folder say The folder could not be read ({error}).
For agents
An agent connected to Mnemosyne OS through the SDK has three harness methods:
sdk.harness.statereads the harness as this page shows it. It needs theharness:readgrant.sdk.harness.setchanges the manual choice, the commands choice or a path's switch. It needs the separateharness:writegrant. It answers the settings as the window applied them.sdk.harness.reportanswers the same report in Markdown. Withpage: true, it also writes the HTML page that Export the report writes.
None of them carries the text of a prompt. None of them approves a path.