tua
Mirrors a git project into Tua after every commit via a post-commit hook, capturing commit log, manifest, decision log, and PDF-backed documents.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tuasave this answer to Tua"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Tua — the local-first archive for everything you make with AI
Tua turns every piece of AI work into an atom: a plain markdown file in a folder you own, with provenance (project, conversation, source, date) attached automatically. Save with one sentence, find it again from any project or tool, and bring in your whole history from Claude Code, Cowork and Claude Desktop without exports. Nothing leaves your machine — Tua has no server, no account and no key to your content.
Tua is a Norwegian-language product (tool descriptions, skills and answers are in Norwegian). The archive format is plain UTF-8 markdown with YAML front matter, readable in Finder, Spotlight, Explorer, Obsidian or any editor.
Surfaces: Claude Code (MCP server, skills, hooks) · Claude Desktop and claude.ai Cowork (MCP server, skills, the Tua card as an MCP App) · macOS, Windows and Linux.
Norsk bruksanvisning: se Norsk lenger ned.
What you get
Part | What it does |
MCP server | Eleven tools: |
Skill | How to save, find and share atoms: short ingress (S) always, summary (M) for long content, fetch M before L, offer before writing. |
Skill | Mirror a git project (commit log, manifest, decision log, PDF-backed documents) into Tua after every commit. |
Hooks (Claude Code only) |
|
The Tua card | An MCP App ( |
How an atom works
Every atom has three levels: S (ingress, ≤ 300 characters), M (summary, written when content is long) and L (everything). Search answers with S. Claude fetches M before L, and other projects see an atom only at the level you give them (tua_link). Levels are stored in the file itself, so the archive stays readable without Tua.
~/Dropbox/Tua/ ← or iCloud Drive, OneDrive, Google Drive, or a local folder
Riulf/Likviditet høst 2026.md
Hytta/Vedlikehold 2027.md
Innboks/ ← drop exports or shared links here
.tua/ ← index, versions, logs (metadata only)Related MCP server: AIBrain
Install
Tua needs Node.js 22.15 or newer (24 recommended) on the PATH. Dependencies are installed by Claude Code from package-lock.json when the plugin is installed.
From the directory (once listed): add Tua from claude.ai › Customize › Plugins. It syncs to Claude Code and Cowork.
From this repository:
claude plugin marketplace add github:tuacircles/tua-plugin
claude plugin install tua@tua-lokalFrom a local checkout: claude --plugin-dir ./tua-plugin (no persistent configuration), or claude plugin marketplace add ./tua-plugin && claude plugin install tua@tua-lokal.
Claude Desktop (standalone, without the plugin system): node pakk.mjs builds dist/tua.mcpb; double-click it in Claude Desktop.
First run
The first tool call asks where the archive should live — iCloud Drive, Dropbox, OneDrive, Google Drive or a local folder (~/Tua). Tua never guesses: in Claude Code the question is a form; elsewhere Claude asks you and calls tua_setup. The choice is stored in ~/.tua/config.json and the folder gets one welcome atom. Then Tua offers, once, to bring in your history ("Jeg fant N Code-økter …"); nothing is imported without your yes.
Settings
Setting | Effect |
Arkivmappe | Overrides the archive location ( |
Automatisk fangst i Claude Code | On by default. Off = hooks save nothing; you save only when you say "lagre dette til Tua". The SessionStart reminder stays. |
What the plugin runs, reads, writes and sends
This section exists so that nothing Tua does is a surprise. It is the complete list.
Runs: node server/server.js (the MCP server, over stdio) and node hooks/tua-hook.mjs (the hooks). The server spawns, with fixed arguments and never through a shell: on macOS open, mdfind, mdls, xattr and python3 (Finder tags); on Windows explorer.exe, rundll32.exe and tar; on Linux xdg-open; on all platforms unzip or tar (exports in Innboks) and git (only when you run the tua_auto skill). Optional, started by you: node server/bridge.js — a local map of the archive on http://127.0.0.1:5274/, bound to loopback only.
Reads (local, read-only): your archive folder; ~/.claude/projects/*/*.jsonl (Claude Code sessions); Claude Desktop's own data folder — the HTTP cache (Cache/Cache_Data, copied to a temp file before decoding, never written) and Cowork sessions (local-agent-mode-sessions/*/audit.jsonl); download metadata in Downloads, Documents and Desktop (Spotlight "where from" on macOS, Zone.Identifier on Windows) plus file hashes to match documents Claude wrote. Hooks read the hook input Claude Code gives them (the last answer, the file you wrote, the transcript path).
Writes (local): atoms as markdown files in your archive folder and metadata under <archive>/.tua/ (index, previous versions, delivery log, hook log — never content outside the atoms); ~/.tua/config.json (archive location); a small machine-local cache in the plugin data directory (TUA_DATA_DIR: derived index, Desktop-cache and Finder scan state); when you run tua_auto in a repository: .tua-sync.json and .git/hooks/post-commit in that repository. Finder tags on macOS. Tua never deletes a file; files in Innboks are moved to Innboks/Ferdig after import.
Sends / fetches over the network: nothing, with two exceptions, both local-first and disclosed in the tool descriptions. (1) tua_import(kilde=lenke) fetches a public https://claude.ai/share/<id> page that you pasted, with one plain GET, no cookies, no login; today that page is an app shell, so the atom is a pointer that fills in when you open the link in Claude Desktop. (2) tua_open(target=kart) sends one HEAD to http://127.0.0.1:5274/ to check whether your local map is running. Tua never calls claude.ai's internal API, never uses cookies or tokens, has no telemetry, no analytics and no update check. Your cloud provider syncs the folder if you chose one — that is your account, not ours.
Credentials: none. Tua needs no API key, no login and reads none of yours.
Privacy Policy
Also published as PRIVACY.md in this repository and at https://tuacircles.com/privacy-policy. Last updated 19 October 2026.
Who we are. Tua Circles Holding AS, Oslo, Norway (org. no. in the Norwegian Register of Business Enterprises). Contact: tech@tuacircles.com.
Data collection. The Tua plugin collects no data for us. It runs entirely on your computer. We receive nothing when you install, run or remove it — no usage statistics, no crash reports, no identifiers.
What the plugin processes locally. On your request it reads your own content — conversations and documents from Claude Code, Cowork and Claude Desktop stored on your machine, text you ask it to save, exports you place in Innboks — and writes it as markdown files to the archive folder you chose. Conversation content captured by the hooks (long answers, documents, session summaries) is personal data about you and whoever appears in it; it stays in your folder.
Usage and storage. Everything is stored in the folder you chose (~/Tua, or a folder synced by iCloud Drive, Dropbox, OneDrive or Google Drive — then that provider's terms apply to the sync, exactly as for any other file in that folder), in ~/.tua/config.json, and in a machine-local cache. We have no access to any of it.
Third-party sharing. None. The plugin sends no data to Tua Circles, to Anthropic beyond what the Claude client itself does when it calls a tool, or to anyone else. The only outbound requests are the two listed above (a public share link you pasted; a loopback check), and neither carries your content.
Data retention. Data stays as long as you keep the files. Delete an atom by deleting its file; delete everything by deleting the folder and ~/.tua. Previous versions live in <archive>/.tua/versions/ and the delivery log in <archive>/.tua/utlevering.jsonl (metadata only: tool, atom id, level, time) until you delete them. Uninstalling the plugin removes the plugin's cache directory, never your archive.
Your rights. Because we hold no data about you, there is nothing for us to access, correct or erase on request — you hold it all. For questions, or to report a security issue, write to tech@tuacircles.com.
Support and documentation
Documentation: this README and the Norwegian section below; the skills describe the workflow in detail.
Support: tech@tuacircles.com · Issues: the issue tracker of this repository.
Changes: CHANGELOG.md. License: AGPL-3.0.
Norsk
Tua er arkivet for det du lager med AI. Hvert stykke arbeid blir et atom: en markdown-fil i din egen mappe, med proveniens (prosjekt, samtale, kilde, dato) festet automatisk. Lagre med «lagre dette til Tua», finn igjen med «hva har jeg om …» fra et hvilket som helst prosjekt, og ta med hele historikken fra Claude Code, Cowork og Claude Desktop uten eksport. Ingenting forlater maskinen din.
Slik virker det. Si «lagre dette til Tua» — Claude skriver ingressen (S) selv, og sammendraget (M) når innholdet er langt. Spør «hva har jeg om likviditet» — treffene svarer med S, og Claude henter M før L. Si «gjør dette synlig i Riulf» — atomet blir en referanse i det prosjektet, på nivået du velger. Si «lag et styrenotat av disse» — tua_compose bygger en leveranse med sporing tilbake til kildene.
Første gang spør Tua hvor arkivet skal ligge (iCloud Drive, Dropbox, OneDrive, Google Drive eller lokalt). Valget lagres i ~/.tua/config.json og kan endres med tua_setup. Deretter tilbyr Tua én gang å ta med historikken: tua_import(kilde=alt, dryRun=true) viser tallene først, og ingenting importeres uten at du sier ja.
Historikken (M17): «Ta med historikken» leser alt som finnes lokalt, uten eksport og uten innlogging: Code-økter (~/.claude/projects), Cowork-økter (audit.jsonl), Desktop-samtaler (fra Claude Desktops egen cache — alt som har vært åpnet i Desktop, med prosjekt; leses også av seg selv hvert 10. minutt) og dokumenter med AI-opphav i Nedlastinger/Dokumenter/Skrivebord (ved referanse, aldri kopi). Delte lenker (claude.ai/share/…) limes inn eller legges i Innboks; innholdet fylles når lenken åpnes i Desktop. Tua kaller aldri claude.ai sitt interne API.
Installere lokalt: claude plugin marketplace add ./tua-plugin og claude plugin install tua@tua-lokal, eller claude --plugin-dir ./tua-plugin for én økt. node pakk.mjs lager dist/tua-plugin.zip (claude.ai › Customize › Plugins › Upload) og dist/tua.mcpb (Claude Desktop). Tester: npm test (MCP over stdio), node server/test-tools.mjs (alle elleve verktøy én gang), node server/test-platform.mjs (Windows/Linux-grenene simulert på macOS) — alle mot en tom scratch-mappe, aldri mot arkivet ditt.
Ærlige grenser. Chat på claude.ai (web/mobil) kjører ikke lokale servere — der virker bare skillene. Hooks finnes bare i Claude Code (og Cowork), ikke i Desktop-chat; Desktop-samtaler fanges i stedet fra appens cache. Finder-tagger settes bare på macOS; på Windows og Linux står taggene i fila. Plugins forutsetter betalt Claude-plan. Node 22.15 eller nyere kreves (zstd-dekoding av Desktop-cachen).
Available Tools
11 toolstua_cardVis Tua-kortARead-onlyIdempotent
Vis et kort fra Tua inne i samtalen (MCP App). Med id: ett atom med ingressen (S) først, knapper for M og L, «Bygget av», «Synlig for», relaterte og «Åpne i …» (Claude, Finder, Code, kartet). Med query: en treffliste med ingresser, nyeste først, der brukeren kan lese M direkte. Bruk dette når brukeren vil se et atom eller treff; bruk tua_search/tua_get når du selv trenger teksten. I klienter uten kort-visning får du det samme som tekst.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Atom-id → kort for ett atom | |
| level | No | Nivå for atom-kortet. Standard S (V12). Klippes av referansens nivå og Vault. | |
| limit | No | Antall treff (standard 5) | |
| query | No | Søkeord → treffliste (S per treff) | |
| quiet | No | Internt: kortet henter M/L for visning; logges, men svarer uten preik | |
| context | No | Vis som dette prosjektet ser det — aldri mer enn nivået prosjektet har fått | |
| project | No | Avgrens trefflista til ett prosjekt |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description adds genuinely non-obvious behavior — that this renders an interactive MCP App surface (M/L buttons, 'Bygget av', 'Synlig for', 'Åpne i …') and degrades to plain text in clients without card support. It does not state ordering/pagination details for the id-mode or any latency/limit behavior beyond the schema's limit field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the two modes, then the routing rule and the fallback — a logical order with almost no filler. It is dense (three long sentences) but every clause carries distinct information; only the enumeration of UI chips is slightly listy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only renderer with no output schema, the description fully explains what the caller will observe in both modes and what happens when the host cannot render cards. With annotations covering safety and the schema covering all seven parameters, nothing material is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the per-field descriptions already carry the baseline. The description goes beyond them by explaining how `id` and `query` select entirely different result shapes (single atom card vs. newest-first hit list) and that the ingress level S is rendered first, which the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Vis et kort fra Tua inne i samtalen') and immediately decomposes into the two operating modes: `id` renders a single atom card with its UI affordances, `query` renders a ranked hit list. It also explicitly names the siblings it is not (tua_search/tua_get), so an agent can discriminate without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit selection rule: use this when the *user* wants to see an atom or hits, use tua_search/tua_get when the agent itself needs the text. It also covers the degraded-client case ('I klienter uten kort-visning får du det samme som tekst'), so the agent knows the call still works when card rendering is unavailable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tua_composeBygg en leveranse av atomerA
Sett sammen flere atomer til én leveranse (markdown) og lagre den som et nytt atom med proveniens tilbake til kildene (hvilken versjon, hvilket nivå). Bruk når brukeren sier «lag et notat/dokument/sammendrag av disse», «sett sammen X, Y og Z». Standard nivå er M (sammendragene) — L bare når brukeren ber om hele innholdet. Vault-merkede atomer tas med bare som S. Du får markdown-kilden tilbake: skriv den om i husstilen om nødvendig og lagre resultatet med tua_save(key=samme key), og fest html/pdf som renders etterpå.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Atom-id-ene som skal inn, i den rekkefølgen de skal stå. | |
| key | No | Stabil nøkkel (f.eks. «lev:riulf-styrenotat») så en ny kjøring erstatter forrige versjon. | |
| name | Yes | Tittel på leveransen, f.eks. «Styrenotat Riulf — oktober 2026». | |
| tags | No | ||
| convo | No | Samtalen/oppgaven dette lages i. | |
| intro | No | Valgfri ingress/innledning øverst i leveransen. | |
| level | No | Nivået kildene leses på: S, M (standard) eller L. | |
| context | No | Bygg som dette prosjektet ser kildene (aldri mer enn nivået det har fått). | |
| project | No | Prosjektet leveransen hører til. Standard: det første kildeatomets prosjekt. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: the tool returns the raw markdown source and does not itself finalize the deliverable, provenance records which version and level were used, and the key parameter makes a re-run replace the previous version. That last point sits in mild tension with idempotentHint=false, though versioned replacement on a stable key is not a true contradiction. No permissions or error behavior is described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the when-to-use triggers, then level rules, then the follow-up workflow. Dense but nearly every sentence carries actionable information; only the house-style/HTML-PDF tail is slightly tangential to invoking the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by stating exactly what comes back (the markdown source) and what the agent must do next (rewrite and save via tua_save with the same key). For a 9-parameter mutation tool this is close to complete, though failure modes and the exact provenance artifact remain unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 89%, so the baseline is 3, but the description genuinely adds meaning: level defaults to M with L only on request, context is capped at the level it was given, and vault-tagged atoms are forced to S. It also clarifies that ids are order-sensitive and that project defaults to the first source atom's project.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: compose several atoms into one deliverable in markdown and persist it as a new atom with provenance back to sources. The scope, output format and the persisted artifact are all named, making it clearly distinguishable from siblings like tua_get or tua_save.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete trigger phrases («lag et notat/dokument/sammendrag av disse», «sett sammen X, Y og Z»), specifies the default level (M) and the exception (L only on explicit request), and explains the vault-atom rule (included only as S). It also draws an explicit boundary with the sibling tua_save by saying the write-back happens in a separate call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tua_getHent atom fra TuaARead-onlyIdempotent
Hent ett atom (id fra tua_search/tua_list) på nivå S, M eller L, pluss proveniens, relaterte atomer (samme samtale, synlig i, felles tagger), adressen i kartet, «Åpne i …»-lenker (Desktop-prosjekt som claude://, fil, repo) og tidligere versjoner. Hent M først; L (alt) bare når svaret krever det. Med version hentes en tidligere versjon.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Atom-id, f.eks. a_m2k… | |
| level | No | S = ingress, M = sammendrag, L = alt (standard). Finnes ikke M, får du starten av L. | |
| context | No | Hent som dette prosjektet ser det — aldri mer enn nivået prosjektet har fått. | |
| version | No | Tidligere versjon å hente, f.eks. «v1» (navn fra versjonslista). Utelat for gjeldende. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety and idempotency are covered. The description adds the shape of what is returned (provenance, related atoms, links, versions) and the fallback that S is derived from L when M is missing, which is useful, but it discloses nothing about permissions, cost, or limits beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and its output contents, then the level strategy, then version selection — each sentence carries distinct information. The one long enumeration sentence is dense but each listed item is a genuine return artifact, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the burden of describing returns, and it does so thoroughly (provenance, related atoms, map address, links, versions) while explaining level and version semantics. It is complete enough to call correctly, with the only gap being any note on payload size or truncation for L.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the description adds real strategy beyond the schema: the M-first / L-only-when-needed ordering and the note that a missing M yields the start of L. The `version` behavior (prior version by name) is also echoed clearly, though no new syntax details are added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (hent ett atom) and enumerates exactly what comes back: provenance, related atoms, map address, open-in links, and prior versions. It also names the sibling tools (tua_search/tua_list) as the source of the id, so an agent can tell it apart from the list/search tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit selection guidance for the level parameter: fetch M first, use L (everything) only when the answer requires it, and describes how `version` retrieves a prior version. It routes the agent to tua_search/tua_list for obtaining the id, but does not state an explicit when-not-to-use case beyond the level heuristic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tua_importTa med historikkenA
Importer tidligere samtaler og dokumenter som søkbare atomer — alt leses lokalt, uten eksport og uten innlogging. kilde=alt (anbefalt ved «ta med historikken»): alle kildene under + Innboks. kilde=code: Claude Code-øktene (~/.claude/projects; én atom per økt + substansielle svar og dokumenter). kilde=cowork: Claude Desktops Cowork-økter (audit.jsonl; prosjekt = mappa valgt i Cowork). kilde=desktop: Desktop-samtalene fra Claude Desktops egen cache — alt som har vært åpnet i Desktop, med prosjekt, verktøykall og filer Claude skrev; leses også av seg selv hvert 10. minutt. kilde=finder: dokumenter med AI-opphav i Nedlastinger/Dokumenter/Skrivebord, ved referanse (aldri kopi). kilde=lenke: en delt Claude-lenke (claude.ai/share/…) brukeren limer inn — gi den i lenke. kilde=innboks: eksport-zip og lenkefiler som ligger i Innboks nå. Bruk når brukeren sier «ta med historikken», «importer samtalene mine», «hent inn gamle økter», «lagre denne delte lenken». Kjør med dryRun=true først og vis tallene. Idempotent — kan kjøres igjen; bare endrede økter får ny versjon. Samtaler som bare finnes på claude.ai web/mobil: be brukeren åpne dem i Desktop eller lage en delt lenke; Tua kaller aldri det interne API-et.
| Name | Required | Description | Default |
|---|---|---|---|
| etter | No | Bare økter endret etter dato, ÅÅÅÅ-MM-DD. | |
| kilde | No | alt, code (standard), cowork, desktop, finder, lenke eller innboks. | |
| lenke | No | For kilde=lenke: én eller flere delte lenker (https://claude.ai/share/<id>), eller teksten de står i. | |
| dryRun | No | Vis hva som ville blitt importert, uten å skrive. | |
| minTegn | No | Minste lengde på økta i tegn (standard 600). | |
| project | No | Bare økter fra dette prosjektet (repo-/prosjektnavn). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Idempotent — kan køres igjen; bare endrede økter får ny versjon', which directly contradicts the annotation idempotentHint=false. This is an annotation contradiction, so the behavioral-disclosure score is capped at 1 despite the otherwise useful local-only/no-login and 10-minute auto-read context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and 'alt (anbefalt)' are front-loaded, then a dense but useful per-source list, then usage triggers and dryRun guidance. It is long, but nearly every clause adds operative detail; only the sheer wall-of-text formatting keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-source import with no output schema, the description is unusually complete: it covers sources, triggers, dry-run workflow, idempotency expectations, and the web/mobile limitation. The main residual gap is that it describes 'vis tallene' only loosely re: what the dry-run report contains, but nothing critical for invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning beyond the schema: it explains what each enum value actually scans (e.g. code = ~/.claude/projects, cowork = audit.jsonl, finder = AI-origin docs by reference only), and it ties the lenke parameter to kilde=lenke. That elevates it above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states a specific verb and resource: 'Importer tidligere samtaler og dokumenter som søkbare atomer', and the per-source breakdown (code, cowork, desktop, finder, lenke, innboks) makes it unmistakable how this differs from siblings like tua_save or tua_list. An agent knows exactly what this tool produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names concrete user triggers ('ta med historikken', 'importer samtalene mine', 'hent inn gamle økter', 'lagre denne delte lenken'), prescribes a dryRun=true dry pass first, and gives an explicit fallback for web/mobile-only conversations. Both when-to-use and when-not (internal API never called) are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tua_linkGjør synlig i et annet prosjektAIdempotent
Gjør et atom synlig i et annet prosjekt — som REFERANSE, aldri kopi. Atomet finnes fortsatt én gang, i prosjektet det oppsto i. Bruk når brukeren sier «gjør dette synlig i X», «del dette med prosjekt X», «prosjekt X trenger dette». Valgfritt nivå: S (bare ingress), M (sammendrag) eller L (alt, standard for eierens egne prosjekter). Kall igjen med nytt nivå for å løfte/senke en eksisterende referanse.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Atom-id (fra tua_search/tua_list). | |
| level | No | Hvor mye prosjektet får se: S, M eller L (standard L — V11). | |
| project | Yes | Prosjektet som skal se atomet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description adds genuinely new behavior: the operation is referential not duplicative, the source atom is unchanged, the level can be re-invoked to adjust an existing reference, and L is the default for the owner's own projects. It does not mention permissions or what happens on a failed link, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The copy-vs-reference constraint is front-loaded, then usage triggers, then the level semantics and the re-invocation behavior. Dense but every sentence carries information; slightly packed toward the end with the level explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Three parameters, no output schema, and annotations already convey idempotency and non-destructiveness. The description covers semantics, triggers, and level behavior; only error/permission behavior is absent, which is a minor gap for a well-annotated link tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the enum: S = bare ingress, M = summary, L = everything (and the L default rationale). The id parameter's provenance (from tua_search/tua_list) is already in the schema. This is meaningful compensation above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (make an atom visible in another project) and immediately disambiguates the semantics that matter most: it creates a REFERENCE, never a copy, and the atom still exists once in its origin project. This distinguishes it clearly from copy-like or duplicate operations and from siblings such as tua_unlink.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger phrases are given («gjør dette synlig i X», «del dette med prosjekt X», «prosjekt X trenger dette»), plus the extension case: call again with a new level to raise or lower an existing reference. An agent knows exactly when to reach for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tua_listOversikt over Tua-arkivetARead-onlyIdempotent
Oversikt: alle prosjekter og alle tagger (med antall), pluss de nyeste atomene. Bruk når brukeren vil se hva som finnes («hva har jeg i Tua», «list alt», «hvilke tagger finnes», «vis alle filer/atomer»). Kan filtreres per prosjekt og/eller tag. needs lister atomer som mangler eller har utdatert S/M — grunnlaget for en «Ny gjennomgang».
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Vis bare atomer med denne taggen. | |
| limit | No | Maks atomer i lista (standard 20). | |
| needs | No | Vis bare atomer som mangler eller har utdatert S (ingress) eller M (sammendrag; bare for innhold over ~3 000 tegn). | |
| project | No | Vis bare atomer fra dette prosjektet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds genuine value by disclosing the return contents (projects, tags with counts, newest atoms) and the semantics of the `needs` mode, which the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the overview scope, then usage triggers, then filtering notes, then the `needs` mode. Dense but every clause carries information; only the parenthetical counts phrasing is slightly loose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates what the overview returns and covers both filter axes and the `needs` mode. An agent could call it correctly, though default limit behavior is left to the schema and no return-shape details are given.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema (tag, project, limit with default, needs enum). The description only adds that `needs` underpins a «Ny gjennomgang», which is marginal beyond the schema's own text; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states concretely what the tool produces: an overview of all projects and all tags with counts, plus the newest atoms. That is far more specific than the bare name/title, though it never explicitly distinguishes itself from siblings like tua_search or tua_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit trigger conditions with quoted user utterances («hva har jeg i Tua», «list alt», «hvilke tagger finnes») and explains the special `needs` mode as the basis for a «Ny gjennomgang». It stops short of naming an alternative tool for narrower lookups, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tua_openÅpne atom i Finder, Code, Claude eller kartet (fra kortet)ARead-onlyIdempotent
Brukes av Tua-kortet. Åpner atomets fil i Finder, repoet i Claude Code, Desktop-prosjektet i Claude, eller atomet i kartet (krever at broen kjører). Fast liste, ingen andre mål (V13).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Atom-id | |
| target | Yes | Hva som skal åpnes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-open-world behavior, so the bar is lower. The description adds useful behavioral context beyond the annotations: it requires the bridge to be running and restricts targets to a fixed list. It does not explain the return/success signal, but the added constraints are substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler: context first, then the precise actions and constraints. Every clause earns its place, though the structure is more utilitarian than optimally front-loaded for an agent scanning for the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given rich annotations, a fully documented two-parameter schema with an enum, and no output schema, the description covers the essentials: what opens, the prerequisite, and the target restriction. It only omits what a successful invocation returns, which is a minor gap for a launcher tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3. The description improves on this by mapping each enum target ('finder', 'code', 'claude', 'kart') to a concrete outcome, giving the agent meaning beyond the raw enum values. The 'id' parameter is not further described, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Åpner') and enumerates exactly what is opened for each case: the atom's file in Finder, the repo in Claude Code, the Desktop project in Claude, or the atom in the map. It is easy to distinguish from the data-oriented siblings, though it does not explicitly name or contrast with any of them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the invoking context ('Brukes av Tua-kortet'), a prerequisite ('krever at broen kjører'), and a scope limit ('Fast liste, ingen andre mål'). It does not name alternative tools or spell out when an agent should prefer this over, say, tua_get, but the context is clear enough for correct use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tua_saveLagre til TuaA
Lagre et stykke AI-output (eller annet innhold) som et atom i Tua-arkivet. Proveniens (kilde, prosjekt, samtale, tid) festes automatisk. Det finnes ingen mappe å velge — det er hele poenget. Send HELE innholdet i content, og ALLTID en ingress i short (S). Er innholdet over ~3 000 tegn, send også medium (M).
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Stabil nøkkel for ting som oppdateres over tid (f.eks. «manifest», «commit-logg», «status»). Finnes et atom med samme key i samme prosjekt, ERSTATTES innholdet — id og synlighet beholdes, versjonen telles opp. Utelat for engangs-innhold. | |
| kind | No | capture (standard) eller leveranse (bygget av andre atomer — settes automatisk når derivedFrom sendes). | |
| name | No | Tittel. Utelat for å ta første linje automatisk. | |
| tags | No | 1–4 korte tagger. | |
| convo | No | Kort tittel på samtalen/oppgaven dette kom fra — pekeren tilbake til konteksten. | |
| links | No | Atomets egne pekere: fila det ble skrevet til (kind=file, absolutt sti), en nettadresse (url), repoet (repo), eller Desktop-prosjekt/-samtale (claude-project/claude-chat som claude://-lenke). Repo og Desktop-prosjekt for prosjektet legges til automatisk fra prosjektregisteret — send bare det som er spesifikt for dette atomet. | |
| short | No | S — ingressen, 1–3 setninger, maks 300 tegn. Svarer på «hva er dette?»: konklusjonen, tallene som bærer den (beløp, datoer, prosent), status (gjeldende/historisk). Send ALLTID. | |
| medium | No | M — sammendrag, 150–400 ord (maks 2 500 tegn), når innholdet er over ~3 000 tegn: beslutninger, tall, korreksjoner, åpne punkter, struktur. Ikke transkript. Nivå er mengde, ikke redaksjon — ikke utelat navn/tall som står i L. | |
| source | No | Kilde-AI. Standard: Claude. | |
| content | Yes | Hele innholdet som skal lagres (markdown/tekst). Dette er L. | |
| project | No | Prosjektet dette hører til (f.eks. «Tua Business»). Bruk brukerens prosjektnavn, ellers repo/mappe-navn. | |
| renders | No | Gjengivelser av dette atomet: html/pdf som absolutt sti (sha256 regnes ut), eller artifact som url. Fila er en gjengivelse — atomet (markdown) er sannheten. Send med samme key når du har rendret. | |
| summary | No | Én linje: HVORFOR ser det slik ut / hva ble bestemt. Lever ved siden av S, ikke i stedet for. | |
| derivedFrom | No | Kildeatomene en leveranse er bygget av: id, versjonen du leste, nivået du leste på. tua_compose fyller dette selv; send det når du bygde leveransen av tua_get-resultater for hånd. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the agent already knows this is a non-destructive write. The description usefully adds that provenance (source, project, conversation, time) is attached automatically and that there is deliberately no folder hierarchy, which is real context beyond the annotations. It omits, however, the key-collision replacement behavior — that is buried in the schema's 'key' description, not in the tool description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with what the tool does, then followed by the two most important call constraints. No filler, though the 'no folder — that's the whole point' aside is personality rather than instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter mutation tool with no output schema and no idempotency guarantee, the description covers the input contract well but says nothing about what comes back. With no output schema to lean on, the return value (e.g. the created or replaced atom id/version) should have been described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine call-shaping rules: put the ENTIRE content in 'content', always provide 'short', and add 'medium' when content exceeds ~3000 characters. That sizing guidance goes beyond restating the schema and directly affects how the agent invokes the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: save content as an 'atom' in the Tua archive, with provenance auto-attached and no folder to choose. This is much sharper than a tautology, but it never contrasts itself with the closest siblings (tua_import, tua_compose), so the agent gets purpose but not sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (save a piece of AI output or other content), and it gives operational rules about always sending 'short' and sending 'medium' past ~3000 chars. However it never says when to prefer tua_save over tua_import, tua_compose, or tua_link, and gives no exclusion criteria, so the when-to-use dimension is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tua_searchSøk i TuaARead-onlyIdempotent
Søk i Tua-arkivet på tvers av ALLE prosjekter og samtaler. Bruk dette først når brukeren spør «hva har jeg om X», «finn det jeg lagde om X», eller når tidligere arbeid kan være relevant. Hvert treff svarer med S (ingressen) og hvorfor-linjen — ofte nok til å svare. Hent M med tua_get(level=M) før du henter L.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maks treff (standard 8). | |
| query | Yes | Søkeord (alle ord må treffe). | |
| context | No | Søk som dette prosjektet ser det: egne atomer + det som er referert inn via tua_link, aldri mer enn nivået prosjektet har fått. Utelat for å søke i ALT (standard — brukeren eier hele arkivet). | |
| project | No | Begrens til atomer som OPPSTO i dette prosjektet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world behavior, so safety is covered. The description adds useful return-format context (each hit returns S/ingress and the why-line) and a progressive-disclosure workflow, though it doesn't describe ranking or match-count behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then usage triggers, then result granularity and workflow. Four short sentences with no filler; every sentence contributes routing or behavioral value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool whose annotations cover the safety profile and whose parameters are fully documented, the description supplies the missing pieces: when to reach for it, what a hit looks like, and how to drill down. Minor gaps remain around result ordering and paging, but nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit, query, context, and project are already fully documented in the schema. The description's workflow note about levels touches on result depth but adds no parameter syntax beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Søk) and resource (Tua-arkivet) plus explicit scope — across ALL projects and conversations. It also names the sibling tua_get as the follow-up step, so an agent can distinguish it from the detail-fetch tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete trigger conditions («hva har jeg om X», «finn det jeg lagde om X», eller når tidligere arbeid kan være relevant) and a directive to use it first. It also names the alternative/next tool (tua_get at level=M) and the sequencing rule (fetch M before L), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tua_setupVelg hvor Tua-arkivet skal liggeAIdempotent
Første kjøring: velg mappa arkivet skal ligge i — iCloud Drive, Dropbox, OneDrive, Google Drive eller lokalt — eller en egen sti. Kall dette BARE etter at brukeren selv har valgt (svar på en «oppsett:»-linje); gjett aldri. Uten argumenter: viser stedene som finnes på maskinen og hva som er valgt. Valget lagres i ~/.tua/config.json og kan endres senere (innstillinger, M15). Mappa «Tua» lages med et velkomstatom og Innboks.
| Name | Required | Description | Default |
|---|---|---|---|
| sti | No | Alternativt: absolutt sti til en mappe som skal være arkivet. | |
| sted | No | Skytjeneste eller lokalt (~/Tua). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations declaring a non-read-only, non-destructive, idempotent write, the description adds real context: the selection is persisted to ~/.tua/config.json, and a «Tua» folder is created containing a welcome atom and an Inbox. It does not say what happens when re-run or whether an existing archive is touched, which is the only meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the primary action, then the critical constraint (never guess), then the no-argument behavior, then persistence details. Every clause carries information; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, zero-required setup tool with no output schema, the agent has everything it needs: when to invoke it, what each argument selects, the no-argument fallback, side effects, and where state is stored.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both sti and sted are already fully documented, including the enum values and the absolute-path constraint. The description restates the same set of locations and the custom-path alternative but adds no format or precedence rules beyond it, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (choose/create the archive folder) with exact scope: first run, five named backends or a custom path. It is clearly distinguishable from siblings like tua_save or tua_import, which operate on the archive rather than configuring it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use with an exclusion: call ONLY after the user has chosen (an answer to an «oppsett:»-line), never guess. It also documents the zero-argument mode (list existing locations and current selection) and notes the choice can be changed later via settings, covering the main alternative path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tua_unlinkFjern synlighet fra et prosjektAIdempotent
Fjern referansen så et atom ikke lenger er synlig i et prosjekt. Selve atomet slettes ikke — det ligger fortsatt der det oppsto.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Atom-id. | |
| project | Yes | Prosjektet som ikke lenger skal se atomet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds genuinely non-derived context: the atom itself is not deleted and persists where it originated. That clarifies the blast radius of the mutation beyond what the schema fields or annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste: the action is front-loaded and the second sentence earns its place by clarifying the non-destructive scope. Nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two fully documented parameters, idempotent/destructive annotations, and no output schema, the description covers the essential effect and non-deletion semantics. It could do slightly more by noting how to reverse the action via tua_link, which is the only real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (atom id, project) are already documented in the schema. The description adds no extra syntax, format, or constraint information beyond the field-level descriptions, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: removing the reference so an atom is no longer visible in a project. An agent can distinguish this from the sibling tua_link (its inverse), though it never names the sibling explicitly, so differentiation must be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent can read that this hides an atom in a project, but the description gives no explicit when-to-use, no note about re-linking via tua_link, and no preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.4.0- First observed
tua_card - First observed
tua_compose - First observed
tua_get - First observed
tua_import - First observed
tua_link - First observed
tua_list - First observed
tua_open - First observed
tua_save - First observed
tua_search - First observed
tua_setup - First observed
tua_unlink
TDQS
Scored across 11 tools
Each tool has a distinct role: save creates atoms, search/get/list retrieve them, compose assembles deliverables, link/unlink manage cross-project visibility, card/open handle UI and external files. The only mild overlap is between search/get (text retrieval) and card (visual display) or card-with-query, but descriptions explicitly steer the agent ('use tua_search/tua_get when you need the text').
Every tool uses a consistent tua_ prefix followed by a single lowercase verb in snake_case (save, setup, import, search, get, list, compose, link, unlink, card, open), with a clean link/unlink pairing. No convention mixing anywhere in the set.
11 tools sits comfortably in the well-scoped 3-15 range and covers distinct lifecycle stages. A couple of tools are auxiliary (tua_setup is one-time, tua_open is only used by the card), which slightly dilutes the core surface but doesn't make it bloated.
The surface covers create, import, search, retrieve, list, compose, relate, view, and open—strong lifecycle coverage. Minor gaps remain: no explicit delete tool and no dedicated tag/update management (updates seem to rely on re-saving with the same key), which agents must work around.
Maintenance
Related MCP Connectors
Personal context for every AI: search, read, and write back to your private Markdown library.
Portable AI memory shared across models and harnesses - plain markdown you own.
Markdown notes in folders, with files, that your AI assistant can read, write and organise.
Markdown notes in folders, with files, that your AI assistant can read, write and organise.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides persistent long-term memory for AI assistants with tag-based retrieval, wiki-style linking, and source references, storing memories as markdown files with SQLite index.1MIT
- AlicenseNot gradedqualityAmaintenanceA personal, offline-first memory for AI assistants that enables them to read, search, and write to a shared folder of Markdown files, so they all remember you without needing a cloud.MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to capture, structure, remember, and retrieve source-backed memory as local Markdown files, with reviewable writes and no cloud dependency.213MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI clients like Claude, ChatGPT, and Cursor to search, read, and write back to one cross-model Markdown library of saved articles, videos, PDFs, notes, and conversations. Hosted remote server with OAuth 2.1 or Agent-key auth and read_only, edit, or full permission tiers.MIT