Tools
You never type these yourself: they are what your AI reaches for when it works in a brain. Knowing the names makes it easier to ask for the right thing, like “use edit_note, not write_note, for that change.” This list is generated from the live tool registry (see scripts/generate-tools-docs.ts), so it cannot drift from what the connector actually exposes.
Start a session
list_brainsRead-only
List the brains you are a member of, with your role in each. Takes no input. Then call start_here on the brain you'll work in.
list_brains({})
{ "brains": [{ "slug": "docs-verification", "name": "Docs Verification", "brain_type": "project", "role": "owner" }] }get_brain_guideRead-only
Returns just this brain's conventions (BRAIN.md). Prefer start_here at session start — it includes this guide plus recent activity and open tasks.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
get_brain_guide({ brain: "docs-verification" })
{ "content": "# Brain guide: Docs Verification\n\n**This is a starter placeholder…" }start_hereRead-only
Call this FIRST, before searching, reading, or writing anything — it is the mandatory first tool call of any session on a brain, before any other tool. It is distinct from and richer than get_brain_guide: get_brain_guide returns only the raw conventions, while start_here returns those conventions plus recent teammate activity plus open tasks, in one call. If this tool isn't visible yet, some hosts lazy-load a connector's toolset — load or enable this connector's tools rather than guessing or searching for an alternative.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
start_here({ brain: "docs-verification" })
{ "content": "## Conventions\n# Brain guide: Docs Verification…\n\n## Recent activity\n- 2026-09-06T16:43:06Z, Maxwell Henderson: create_brain BRAIN.md\n" }create_brain
Create a new brain and become its owner. Any authenticated user may call this — no existing brain membership required. After creating, call start_here on the new brain before doing anything else in it.
| Name | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Human-readable brain name, e.g. 'Eversmile' |
slug | string | Yes | |
template | string | No |
create_brain({ name: "Docs Verification", slug: "docs-verification" })
{ "slug": "docs-verification", "brain_id": "7f85dc04-…", "role": "owner" }Read
list_notesRead-only
List notes in a brain, sorted by path. Returns up to `limit` (default 200, max 999) at a time — fewer if the page would be oversized — plus `total` (the real count of all matching notes) and `next_cursor` when there are more. Large brains should pass `prefix` to browse a folder (e.g. prefix: 'decisions/') and/or page with `cursor` — a bare call on a big brain will not return everything in one page.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
prefix | string | No | |
limit | number | No | |
cursor | string | No | Opaque pagination cursor from a previous call's next_cursor. Omit for the first page. |
list_notes({ brain: "docs-verification" })
{ "notes": [{ "path": "BRAIN.md", "title": "Brain guide", … }, { "path": "overview.md", … }], "total": 2, "has_more": false, "next_cursor": null }read_noteRead-only
Read a note's content and current version. Pass the returned version as expected_version on write_note to detect concurrent edits. Notes over 39000 characters are truncated automatically: the response carries total_chars, returned_range and next_offset — pass next_offset back as offset to keep reading from where you left off. Pass outline: true to see the note's heading structure (with offsets and section sizes) without its content — the cheap way to navigate a huge note before deciding what to read. To locate exact text inside a note you can't read whole (so you can pass it to edit_note as old_string), use find_in_note instead of guessing.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
path | string | Yes | Note path, e.g. 'notes/2026-07-23-topic.md' |
offset | number | No | Character offset to start reading from. Default 0. |
limit | number | No | |
outline | boolean | No |
read_note({ brain: "docs-verification", path: "overview.md" })
{ "path": "overview.md", "version": 1, "content": "# Docs Verification\n\n…", "truncated": false, "returned_range": [0, 221], "next_offset": null }searchRead-only
Full-text search this brain before writing — extend an existing note instead of creating a duplicate.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
query | string | Yes | Search query (websearch syntax: quotes for phrases, OR, -exclude) |
limit | number | No | Max results to return (default 10) |
cursor | string | No | Opaque continuation cursor returned by a previous search page. |
search({ brain: "docs-verification", query: "appended section" })
{ "hits": [{ "path": "overview.md", "title": "", "snippet": "…<b>Appended</b> <b>section</b>…", "rank": 0.186813 }] }find_in_noteRead-only
Find exact text inside one note or across a whole brain. Unlike search (full-text, stems words, misses identifiers), this does literal substring matching and returns character offsets — so an excerpt from a match can be passed straight to edit_note as old_string, without ever reading the whole note. Omit path to search every note in the brain (optionally scoped with prefix); pass path to search just one.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
query | string | Yes | |
path | string | No | Limit the search to one note. Omit to search every note in the brain. |
prefix | string | No | |
case_sensitive | boolean | No | Default false. |
context_chars | number | No | |
max_matches | number | No |
find_in_note({ brain: "docs-verification", path: "overview.md", query: "Appended section" })
{ "matches": [{ "path": "overview.md", "offset": 97, "line": 6, "excerpt": "…" }], "total_matches": 1, "truncated": false }recent_activityRead-only
See what teammates changed recently. Check at the start of a work session to sync up.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
limit | number | No | Max entries to return (default 20) |
recent_activity({ brain: "docs-verification" })
{ "activity": [{ "actor_name": "Maxwell Henderson", "action": "append", "note_path": "overview.md", "at": "2026-09-06T16:44:38Z" }, …] }Write
write_note
If you haven't called start_here for this brain in this session, call it first. Create a note or fully replace its content. For adding to an existing note, prefer append_note. Pass expected_version (from read_note) so teammates' concurrent edits are flagged.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
path | string | Yes | Note path, e.g. 'decisions/2026-07-topic.md' |
content | string | Yes | Full content to write. This REPLACES the note's existing content. |
title | string | No | Note title (optional) |
expected_version | number | No |
write_note({ brain: "docs-verification", path: "overview.md", content: "…", expected_version: 1 })
{ "path": "overview.md", "version": 4, "conflict_warning": "This note was changed by Maxwell Henderson at 2026-09-06T16:43:43Z (you had v1, current is v3). Your change was saved on top." }append_note
If you haven't called start_here for this brain in this session, call it first. Add content to a note without overwriting it. Prefer this over write_note when adding to logs, decisions, running documents, or task lists. For retry safety, pass a caller-stable idempotency_key and reuse it only for the same path and content; a replay returns the original result, while conflicting reuse fails. Omitting the key preserves legacy non-idempotent behavior.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
path | string | Yes | Note path, e.g. 'tasks.md' |
content | string | Yes | |
idempotency_key | string | No |
append_note({ brain: "docs-verification", path: "overview.md", content: "## Appended section\n\n…" })
{ "path": "overview.md", "version": 6 }prepend_note
If you haven't called start_here for this brain in this session, call it first. Add content to the TOP of a note without overwriting it. Use this for logs and journals whose newest entry belongs first — a brain's guide may specify newest-on-top ordering. For retry safety, pass a caller-stable idempotency_key and reuse it only for the same path and content; a replay returns the original result, while conflicting reuse fails. Omitting the key preserves legacy non-idempotent behavior.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
path | string | Yes | Note path, e.g. 'session_log.md' |
content | string | Yes | |
idempotency_key | string | No |
prepend_note({ brain: "docs-verification", path: "overview.md", content: "## Newest entry (prepended)" })
{ "path": "overview.md", "version": 7 }edit_note
If you haven't called start_here for this brain in this session, call it first. Replace an exact string inside a note without rewriting it. Prefer this over write_note for small changes — closing a task, correcting a line, updating a status — especially on large notes. old_string must match exactly and must be unique unless you pass expected_occurrences.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
path | string | Yes | Note path, e.g. 'tasks.md' |
old_string | string | Yes | |
new_string | string | Yes | Text to replace old_string with. |
expected_occurrences | number | No |
edit_note({ brain: "docs-verification", path: "overview.md", old_string: "Newest entry (prepended)", new_string: "Newest entry (edited via edit_note)" })
{ "path": "overview.md", "version": 8, "occurrences_replaced": 1 }move_note
If you haven't called start_here for this brain in this session, call it first. Rename or relocate a note to a new path. Fails if a note already exists at to_path — move or delete it first.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
from_path | string | Yes | Current note path |
to_path | string | Yes | New note path |
move_note({ brain: "docs-verification", from_path: "overview.md", to_path: "notes/overview.md" })
{ "path": "notes/overview.md" }delete_noteDestructive (recoverable)
If you haven't called start_here for this brain in this session, call it first. Delete a note. Its content is preserved in version history, so this is recoverable, not permanent data loss.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
path | string | Yes | Note path to delete |
delete_note({ brain: "docs-verification", path: "overview.md" })
{ "deleted": true }undelete_note
Recover a note that was deleted. Restores its most recent saved content.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
path | string | Yes | Note path to recover |
undelete_note({ brain: "docs-verification", path: "overview.md" })
{ "path": "overview.md", "version": 5 }History
get_historyRead-only
List the edit history of a note — who changed it and when. Use before restoring or to see recent activity on a specific note.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
path | string | Yes | Note path |
limit | number | No | Max versions to return (default 20) |
get_history({ brain: "docs-verification", path: "overview.md" })
{ "versions": [{ "version": 8, "edited_by_name": "Maxwell Henderson", "created_at": "…" }, …] }read_versionRead-only
Read a note's content as of a specific past version. Get version numbers from get_history.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
path | string | Yes | Note path |
version | number | Yes | Version number to read |
read_version({ brain: "docs-verification", path: "overview.md", version: 2 })
{ "path": "overview.md", "version": 2, "content": "# Docs Verification\n\nUpdated: second write…", "edited_by_name": "Maxwell Henderson", "created_at": "…" }restore_version
Roll a note back to an earlier version. The current content is saved to history first, so a restore can itself be undone.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
path | string | Yes | Note path |
version | number | Yes | Version number to restore |
restore_version({ brain: "docs-verification", path: "overview.md", version: 2 })
{ "path": "overview.md", "version": 5, "restored_from": 2 }People
add_member
If you haven't called start_here for this brain in this session, call it first. Add another user to this brain by email with an explicit role (owner-only). Roles: owner (full control, including managing members), editor (read/write notes, default if omitted), or viewer (read-only). Re-adding an existing member updates their role instead of erroring.
| Name | Type | Required | Description |
|---|---|---|---|
brain | string | Yes | Brain slug or id |
email | string | Yes | Email of the person to add |
role | enum (owner | editor | viewer) | No | Role to grant (default: editor) |
add_member({ brain: "docs-verification", email: "teammate@example.com", role: "editor" })