Create Note
post_notesCreate a BlackOps note, or update one in place when source_id resolves to a known note. Requires content_markdown (or transcript/conversation). Prefer this over post_notes_write — richer metadata, dedup, search/list visibility, auto-vault-sync.
source_id is the idempotency key: pass it (content hash, agent-defined string, or note UUID) so repeat calls update instead of forking. Already know the note? Use patch_notes with id instead. Check response warnings — an auto-suffixed slug ("my-note-2") with code SLUG_COLLISION means an intended update forked instead.
Site is OPTIONAL (resolves explicit → account default intake → the user's only site); pass domain/site_id only for a note tied to one site.
BRAINS: pass a named brain's UUID as brain_id — the server derives site/target/folder from it, and this always skips auto-routing below. Never infer site_id or guess target_id from topic keywords. brain_alignment in the response confirms the compile will pick the note up.
WITHOUT brain_id, a site that has opted into brain auto-routing resolves one itself instead of leaving the note unfiled with a guess-and-ask: an Auto verdict files the note straight into that brain's Triage lane (routing: { band: "auto", filed: true, brain_id, brain_name, probability, verdict_id }); a Suggest or No-home verdict saves the note unfiled and the response carries needs_brain_choice — present its question and up to 3 options (each with a one-line reason) as ONE single-choice question, the way your host renders a question or choice card if it has one, alongside the also entries ("Leave unfiled" / "Create a new brain"), then call resolve_with (patch_notes with the chosen brain_id) with the pick. Never choose a brain from that list yourself. A site that has not opted in behaves exactly as before — the note is saved unfiled, no brain is queried. suggest_brain: true is a separate, unrelated opt-in: a keyword-based unassigned-brain match surfaced as suggested_brain, not auto-routing.
TAGS outside the vocabulary still apply and stay queryable, with an UNKNOWN_TAG warning naming it — ask the user before calling propose_note_tags.
VAULT SYNC is automatic but DEFERRED: the commit runs after the response, so sync is { status: "queued" }. The note IS saved — do NOT re-call. Confirm a landed commit with get_note, never vault_sync_queued_at; pass wait_for_sync: true only for commitSha/filePath inline. override_folder_path bypasses the workspace taxonomy, though a brain's source_folder_path still wins.
phase/priority/position are Big Board columns (High|Medium|Low for priority); phase is free text.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "post_notes"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| phase | No | ||
| title | No | ||
| domain | No | ||
| status | No | ||
| confirm | No | ||
| excerpt | No | ||
| site_id | No | ||
| brain_id | No | ||
| metadata | No | ||
| position | No | ||
| priority | No | ||
| auto_sync | No | ||
| note_type | No | ||
| source_id | No | ||
| target_id | No | ||
| transcript | No | ||
| conversation | No | ||
| triage_state | No | Set to 'pending' to file this note into a brain's Triage lane (unreviewed) instead of committing it to the vault right away. Leave unset for an ordinary note. | |
| allow_secrets | No | ||
| assign_target | No | ||
| suggest_brain | No | ||
| wait_for_sync | No | ||
| conversation_id | No | ||
| content_markdown | No | ||
| override_folder_path | No |