Skip to content

commit_wiki_page

Apply a wiki changeset in one step: a new page (path, frontmatter, the body you wrote) plus patches to existing pages that link them to it, from draft_wiki_page. The page must be inside the vault’s configured wiki folder (vaults[].wiki.folder; a vault without one refuses). All or nothing on errors: every touched note is checked first (write and read ACL on each path, prev_hash compare-and-swap on each existing note, the poison and memory-defense scans), temp files for every note are staged, then the notes are replaced back to back, each re-hashed just before it is replaced, with a rollback if any write fails, so a failing patch leaves the vault as it was. NOT crash-atomic: a process crash in the middle of the renames can leave a partial batch; a pending write-provenance record naming every path and the hash it was about to hold is written before the first rename, so the batch is visible and every replaced note has a snapshot (restore_note). Creating a page in the wiki folder needs NO confirmation (a new page has no prior state, so it has no snapshot: delete_note removes it); patching a related note needs none either, as patch_note, and restore_note undoes patches and overwrites; overwriting an existing non-empty page (page.mode: overwrite) asks for confirmation exactly like write_note. Re-checks at commit time that no other page already covers the topic (an identity match refuses the commit with the existing page named; allow_duplicate: true overrides). Problems that are for you to fix do NOT block the write and come back in problems: frontmatter that breaks the wiki folder’s SCHEMA.md (missing required field, unknown type or property, value outside the vocabulary), links in the page that resolve to no note, related notes from the link map the page does not link, patches that add no link, a page nothing links to. Open contradictions already flagged on a touched note come back in contradictions. Patches only ADD (link: a bullet under a heading, once; append: text at the end or under a heading); rewrite prose with patch_note. Every write is recorded in the write provenance chain and indexed. Snapshot retention and reindexing after the write are best-effort: a fault there is logged and comes back as a post_commit problem, never as an error. After the write the server queues regeneration of the wiki folder’s generated index.md (pages grouped by type) and log.md (a projection of the write provenance chain), so even a very large wiki never delays this call. Generation lists only paths readable without a rule-scope and never an Excluded note; failures and hand-edited generated pages are logged and never fail or delay the committed write. Needs read:notes as well as write:notes: the duplicate re-check reads every note you may read.

Domain knowledge
Scopes write:notes, read:notes
Access write
Tags writes, destructive, hitl, domain:knowledge, knowledge, external-network
Profile full only
Annotation Value
Read-only no
Destructive yes
Idempotent no
Accepts an idempotency key no

Idempotent is the advisory MCP idempotentHint. Destructive is also yes for a tool that asks for confirmation only on some calls.

The handler asks for confirmation only when a call crosses a boundary (for example an overwrite, a folder-boundary crossing or a bulk-cost floor); other calls need none.

  • The confirmation binds to the vault paths the call names, which are also checked against the folder ACL.
Parameter Type Required Default Description
vault string — Vault id. May be omitted when only one vault is available. length 1–64; pattern ^[a-z0-9_-]+$
topic string — What the page covers, for the duplicate check and link validation. Default: the page’s file name. length 1–500
type string — Page type to check the frontmatter against. Default: the frontmatter’s type. length 1–100
sources string[] — Notes or URLs the page draws on; notes among them are expected to be linked. items ≤ 50
page object yes — —
page.path string yes — Where the page goes (vault-relative, ends in .md). length ≥ 1
page.frontmatter Record<string, any> — The page’s properties, as an object (not YAML text). Checked against SCHEMA.md.
page.body string yes — The page’s markdown, WITHOUT a frontmatter block. You write it. length 1–200000
page.mode enum "create" create (default) refuses a path that exists. overwrite replaces an existing page, needs prev_hash, and asks for confirmation like write_note does. One of: "create", "overwrite"
page.prev_hash string — overwrite only: the page’s current content_hash. length ≥ 1
patches object[] [] items ≤ 25
patches[].path string with parent — Existing note to patch (vault-relative). length ≥ 1
patches[].prev_hash string with parent — content_hash of the note when you read it (the draft gives it): compare-and-swap. length ≥ 1
patches[].operation enum with parent — link adds a bullet linking the new page under heading (default ‘See also’, created at the end when the note has none) and does nothing when the note already links it. append adds content at the end of the note, or at the end of the section under heading. One of: "link", "append"
patches[].heading string — length 1–200
patches[].content string — append only: the text to add. You write it. length ≤ 20000
patches[].text string — link only: a few words after the link saying why it is related. You write it. length ≤ 500
elicit_token string — pattern ^[a-f0-9]{32}$
allow_duplicate boolean false Create the page even though another page already covers the topic.
judge boolean — Let the wikiJudge LLM resolve an ambiguous duplicate check. Default: the wikiJudge.enabled config.
Field Type Always present Description
vault string yes —
committed boolean yes —
page object yes —
page.path string yes —
page.created boolean yes —
page.content_hash string yes —
page.prev_hash string | null yes —
patches object[] yes —
patches[].path string yes —
patches[].operation enum yes One of: "link", "append"
patches[].applied boolean yes —
patches[].reason string —
patches[].content_hash string yes —
patches[].prev_hash string yes —
problems object[] yes —
problems[].kind enum yes One of: "schema", "schema_file", "unresolved_link", "missing_link", "no_inbound_link", "patch_without_link", "patch_skipped", "possible_duplicate", "excluded_note", "poison_suspect", "redacted", "generated_page", "post_commit"
problems[].path string —
problems[].field string —
problems[].message string yes —
contradictions object[] yes —
contradictions[].id string yes —
contradictions[].source_path string yes —
contradictions[].conflict_path string yes —
contradictions[].judge_verdict string yes —
contradictions[].judge_rationale string yes —
dedupe object yes —
dedupe.verdict enum yes One of: "exists", "ambiguous", "new"
dedupe.checked_topic string yes —
redactions integer range ≥ -9007199254740991
next string[] yes —

Other tools in the knowledge domain: add_observation, audit_provenance, close_goal, commit_capture, create_entity, delete_entity, diagnose_retrieval, draft_wiki_page, end_session, enqueue_capture, episode_stats, explain_answer, find_existing_page, gap_report, get_entity, get_session_traces, knowledge_challenge, link_entities, lint_wiki, list_capture_queue, list_contradictions, list_goals, note_quality_report, plur_get, plur_recall, plur_recall_hybrid, plur_similarity_search, query_entity_graph, record_retrieval_feedback, reflect, rename_entity, session_bootstrap, set_goal, start_session, unlink_entities, update_observation, vault_context, vault_graph_search, work_episode_chain, work_episodes, work_forget, work_result, work_search.

Back to the tool catalog.