checkpoint
Snapshot current working state to let the next session resume with the right context.
Instructions
Snapshot current working state (intent/established/pursuing/open_questions).
A summary of where the work stands, so the next session picks up the right bearing via pulse(). Fields are free-length; still prefer a readable summary here and put timeless detail into note() -- checkpoints are read for bearing, not as an archive. One fact per note(), each cited back here by [[uid]] and linked with link_memories(); pulse() returns the latest checkpoint IN FULL, so every session pays for whatever was parked in these fields. Stored as type='checkpoint'.
A domain holds ONE active checkpoint. While one is already filed at
domain, the call is refused and nothing is written: the refusal
lists it under checkpoints. Read it with get_memory(uid) and decide
whether its work is done. Done: forget(uid, reason='...'), then call
again. Not done: carry what still holds into these fields and call
again with supersedes='', which archives it as superseded by the
new one. A checkpoint past the age limit set in the dashboard refuses
every write under its domain the same way, flagged overdue, until
it is settled.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"title": "<title>",
"intent": "<intent>",
"established": "<established>",
"pursuing": "<pursuing>",
"open_questions": "<open_questions>"
},
"name": "checkpoint"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| also | No | other domain paths this belongs to, comma-separated: the subjects that cut across the tree `domain` sits in, such as the end-to-end flow a routine is one step of. Every read scoped to one of them returns it. A path `domain` already sits under is dropped as redundant. At most 200 characters each. | |
| tags | No | comma-separated keywords and synonyms. Retrieval is BM25 over content, tags and domain paths, and tags weigh second only to the body, so they make a memory findable by words its own text never uses: the identifier, the error string, the plain phrasing someone will type. A memory with none is reachable only by quoting itself. At most 1000 characters. | |
| title | Yes | one line naming what this memory is about, in the words someone would look for it by. A list shows it instead of the opening of the body, and it outweighs every other field in search, so a title that repeats the type ("note about the parser") names nothing. At most 120 characters; a name that needs more is summarizing the body. | |
| domain | No | the subject this belongs to, as a path from the outermost scope in ('acme/x100/p200'). File it as deep as the fact is specific -- a note about one routine goes on the routine, and still comes back when someone asks about the module or the product above it. At most 200 characters. | |
| intent | Yes | what the work is for, in a sentence or two. | |
| session | No | groups what one conversation writes. Leave it empty to use this server process's own stamp. | |
| pursuing | Yes | what comes next, specific enough to start on. | |
| supersedes | No | the active checkpoints this one replaces, comma-separated uids: every one already filed at `domain`, and every overdue one above it that a refusal named. Each is archived with this one as its successor. | |
| established | Yes | what is done and what was decided, with the [[uid]] of each note that holds the detail. | |
| open_questions | Yes | what is still undecided or unverified. |