Skip to main content
Glama

brain_folder

Idempotent

Configure where your personal AI memory is stored and which PCs share it: point it to a synced folder or local store, share access with another PC, or export/import the memory file.

Instructions

Where the user's own personal memory lives, and which of their own PCs share it.

    Not for teams: project brains shared with teammates are brain_checkpoint.

    Anything that changes where the memory goes (`path`, `share_existing`, `export_to`,
    `import_from`) is not done from here: the tool returns `command`, and the user runs it in
    a terminal. A web page or file you read can then never move their memory somewhere else.
    Show the user the command, say what it does, and call this again without arguments after
    they ran it to confirm. Codes and passwords appear only in that terminal.

    Call it with `path` when the user names a folder for their memory, e.g. "use my Google
    Drive's Turnbook folder as my brain". A folder that OneDrive, Google Drive or Dropbox
    syncs makes the same memory available on every PC where the user chooses it too; nothing
    else is needed. Without `path` it reports the current folder and the devices writing to it.
    `path="local"` keeps the brain in this PC's own Postgres instead, shared the instant it is
    written (no sync delay).

    Other PCs: when the user asks to let their other PCs use this brain ("다른 PC도 붙게 해줘"),
    call it with `path="share"`. It opens this PC's Postgres to the local network and Tailscale
    (Windows may ask the user to approve a firewall rule once) and returns a
    `connection_code` in the terminal. On the other PC the user runs
    `turnbook folder <that code>`; it contains the password, so say not to post it anywhere
    public.
    Codes: when the user pastes any Turnbook code ("gm1." for their own other PC, "gmt1."
    for a team invite), call this with `path=<the code>`; it does the right thing for either
    (a team invite is joined at once), so never ask the user which kind it is.

    `share_existing=true` sends what this PC remembers and the shared memory lacks (only that:
    it also repairs turns that missed a hub that was down). It uploads
    it to wherever the folder syncs. Set it only when the user has explicitly agreed to that.

    `reindex=true` brings the search index up to date (links new memories, embeds unembedded
    ones). Saving already does this; it is for a large imported backlog.

    Moving a whole memory as one file ("내 기억 파일로 내보내줘", "이 기억 파일 가져와"):
    `export_to=<file path>` writes every memory and conversation turn into that file;
    `import_from=<file path>` adds such a file's contents to this memory, skipping what is
    already here. Only when the user asks. Tell them the file holds their entire memory
    (secrets were masked when saved), so keep it private like a diary.
    With `project=<folder>`, `export_to` writes only the conversations held in that folder
    (or below it) and the memories drawn from them ("이 프로젝트 대화만 넘겨줘"): every word
    of those conversations goes in the file, so say so. Facts saved on request carry no
    folder and are not included.
    

Input Schema

NameRequiredDescriptionDefault
pathNo
projectNo
reindexNo
export_toNo
import_fromNo
share_existingNo

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.9.39
    • addedInput schema / properties / project
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Project"
      +}
  2. Changed2 schema fields changedv0.9.0
    • addedInput schema / properties / export_to
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Export To"
      +}
    • addedInput schema / properties / import_from
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Import From"
      +}
  3. First observedv0.1.0

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (non-read-only, non-destructive, idempotent, closed-world); the description adds substantial context beyond that: config changes are returned as a `command` for the user to run in a terminal (a deliberate prompt-injection defense), firewall approval may be needed, connection codes contain a password, export files hold the entire memory with secrets masked. No behavior contradicts the annotations — writes like reindex/export justify readOnlyHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the not-for-teams exclusion are front-loaded, and nearly every paragraph maps to a distinct mode, so little is filler. It is nevertheless very long for one tool, with some repeated emphasis ("Only when the user asks" / "Set it only when the user has explicitly agreed") that could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be enumerated, yet the description still flags the key return artifacts (`command`, `connection_code`) and what they contain. For a six-parameter, multi-mode tool with mutation and sharing side effects, nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden, and it does: path (folder / "local" / "share" / a pasted code), share_existing, reindex, export_to, import_from, and project's scoping effect on export_to are all explained with intent and safety conditions. The only minor gap is whether `project` also constrains import_from.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb-and-resource framing: where the user's personal memory lives and which PCs share it. It explicitly names the sibling it is not for ("Not for teams: project brains shared with teammates are brain_checkpoint"), so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It enumerates the selection conditions for each mode: bare call to report current state, path=<folder> when the user names a folder, path="local", path="share" for other PCs, path=<code> for pasted codes, share_existing only on explicit agreement, reindex for a backlog. Alternatives and exclusions are stated rather than inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.