Gnosys
Gnosys is an MCP memory server for persistent, searchable AI memory across projects and scopes.
Initialize/register projects and read, search, discover, or recall memories by ID, path, keyword, hybrid, or federated scopes.
Add structured memories, update/supersede records, and reinforce usefulness, irrelevance, or outdatedness.
Manage user preferences that persist across projects.
Generate briefings and dashboards, and record reflections that adjust memory confidence and relationships.
Trace codebases into procedural memories and traverse relationship chains between memories.
Switch between core, standard, and full toolset tiers to expose more specialized tools.
Exports the Gnosys memory database into an Obsidian-compatible vault — atomic Markdown files with YAML frontmatter, [[wikilinks]], category summaries, and relationship graph data — so memories can be browsed and edited as a human-readable knowledge base.
Gnosys — One Brain. Zero Context Bloat.
Gnosys gives AI agents persistent memory that survives across sessions, projects, and machines.
The central brain is a single SQLite database at ~/.gnosys/gnosys.db with sub-10ms reads — no vector DBs, no black boxes, no external services. Federated search ranks results across project, user, and global scopes. It runs as a CLI and as a full MCP server that drops straight into Claude Code, Claude Desktop (Chat / Cowork / Code), Cursor, Codex, Gemini CLI, Antigravity, Grok Build, or any MCP client. When you want a human-readable view, gnosys export regenerates a full Obsidian vault on demand.
Install
Requires Node.js ^22.16.0 || >=24.0.0. FTS5 requires this floor. Node 23.x is unsupported. SQLite uses built-in
node:sqlite. No native SQLite dependency or rebuild is needed when switching supported Node versions.
npm install -g gnosys
gnosys setup # configures provider, API key, and your IDE/agentOptional local embeddings. Gnosys auto-installs @huggingface/transformers. If it cannot install, use an external embedding API. SQLite does not need this package.
Related MCP server: Mem0 MCP Server
Quick start
gnosys setup ides # wire MCP into your IDEs (once)
cd your-project
gnosys init # register the project
gnosys add "We chose PostgreSQL over MySQL for JSON support"
gnosys recall "database selection" # what's relevant right nowThat's the 60-second tour. Everything else lives on gnosys.ai.
What you get
Central brain — one
~/.gnosys/gnosys.dbunifies every project (project / user / global scopes). Sub-10ms reads, SQLite as the sole source of truth.Federated search — tier-boosted hybrid (FTS5 keyword + semantic) search across scopes, with recency and reinforcement.
MCP server —
gnosys serveexposes 50+ memory tools to any MCP client. Sandbox-first runtime keeps context cost near zero.Web Knowledge Base —
gnosys web buildturns any site into a searchable index for serverless chatbots, with optional build-time vectors for serverless-safe hybrid semantic search. Zero runtime deps.Dream Mode — idle-time consolidation: confidence decay, summaries, relationship discovery. Never deletes — only suggests.
Multi-machine sync — share your brain across machines; conflict detection with skip-and-flag resolution.
Obsidian export —
gnosys exportregenerates a full vault with frontmatter,[[wikilinks]], and graph data.
MCP Tool Reference
All tools are exposed over stdio and HTTP transports. Many tools accept an optional projectRoot parameter to target a specific project store.
This package installs two binaries:
gnosys— the CLI.gnosys servestarts the MCP server (stdio by default,--transport httpfor the central-server topology).gnosys setup ideswiresgnosys-mcpinto your IDE/agent configs.gnosys-mcp— a direct alias for the MCP stdio server entry, for MCP clients that prefer to spawn the server binary directly (e.g.npx -y gnosys-mcp). Equivalent tognosys serve.
Tool | Tier | Description |
| standard | Discover relevant memories by describing what you're working on. |
| core | Read a specific memory. |
| standard | Search memories by keyword across all stores. |
| standard | List memories across all stores, optionally filtered by category, tag, or store layer. |
| core | Preferred for LLM agents. Add a memory with structured fields you supply (title, category, tags, content) — makes no server-side LLM call. |
| full | Add a memory from raw text; the server's LLM structures it. For non-agent callers (scripts, cron) — agents should use |
| standard | List all tags in the registry, grouped by category. |
| full | Add a new tag to the registry. |
| core | Signal whether a memory was useful. |
| core | Initialize Gnosys in a project directory. |
| full | Migrate a Gnosys store (.gnosys/) from one directory to another. |
| core | Update an existing memory's frontmatter and/or content. |
| full | Find memories that haven't been modified or reviewed within a given number of days. |
| full | Pre-compaction memory sweep. |
| full | View audit history for a memory. |
| standard | Filtered view of memories. |
| standard | View memory creation and modification activity over time. |
| standard | Summary statistics across all memories — totals by category, status, author, authority, average confidence, and date ranges. |
| standard | Show wikilinks for a specific memory — outgoing [[links]] and backlinks from other memories. |
| standard | Show the full cross-reference graph across all memories. |
| full | Batch-import existing documents from a directory into the memory store. |
| full | Bulk import structured data (CSV, JSON, JSONL) into Gnosys memories. |
| core | Main search: keyword, semantic, or hybrid ranking with snippets and IDs. |
| standard | Search memories using semantic similarity only (no keyword matching). |
| full | Rebuild all semantic embeddings from every memory file. |
| standard | Ask a natural-language question and get a synthesized answer with citations from the entire vault. |
| full | Run vault maintenance: detect duplicate memories, apply confidence decay, consolidate similar memories. |
| full | Force-dearchive memories from archive.db back to active. |
| full | Build or rebuild the wikilink graph (.gnosys/graph.json). |
| full | Run a Dream Mode cycle — idle-time consolidation that decays confidence, generates category summaries, discovers relationships, and creates review suggestions. |
| full | Export gnosys.db to Obsidian-compatible vault — atomic Markdown files with YAML frontmatter, [[wikilinks]], category summaries, and relationship graph. |
| core | Show the Gnosys system dashboard: memory counts, maintenance health, graph stats, LLM provider status. |
| full | Debug tool — lists all detected Gnosys stores across registered projects, MCP workspace roots, cwd, and environment variables. |
| core | Fast memory recall — inject relevant memories as context. |
| full | View the audit trail of all memory operations (reads, writes, reinforcements, dearchives, maintenance). |
| core | Set a user preference. |
| core | Get a user preference by key, or list all preferences. |
| standard | Delete a user preference by key. |
| full | Get the current user preferences + project conventions formatted as a GNOSYS:START/GNOSYS:END block. |
| standard | Search across scopes with boosts, memory IDs, status labels, and replacements before history. |
| full | Check if a query matches memories in multiple projects. |
| core | Generate a project briefing — a summary of memory state, categories, recent activity, and top tags. |
| full | Portfolio dashboard — shows all registered projects with memory counts, categories, status snapshots, roadmap items, and recent activity. |
| full | Check the status of remote sync (multi-machine). |
| full | Push local memory changes to the remote (NAS) database. |
| full | Pull remote memory changes to the local database. |
| full | Resolve a sync conflict by choosing which version to keep. |
| standard | Get the prompt/template for writing a dashboard-compatible status memory for this project. |
| standard | Get the implicit working set — recently modified memories for the current project. |
| standard | Ingest a file (PDF, DOCX, TXT, MD, images via vision LLM, audio/video via Whisper transcription) into Gnosys memory. |
| standard | Attach a small binary file (logo, diagram, screenshot, small PDF) inline to a memory (~10MB limit; syncs machine-to-machine). |
| standard | Retrieve the binary attachment stored on a memory (base64 bytes, or write to disk via outputPath). |
| standard | Trace a codebase directory and store procedural "how" memories with call-chain relationships. |
| core | Record a real-world outcome against related memories, adjusting their confidence and linking them. |
| core | Walk relationship chains from a memory id (BFS, depth-limited), optionally filtered by direction or relationship types. |
| core | Inspect the tool catalog or switch the active tier. |
Toolset tiers
Tool descriptions and schemas consume agent context, so since v6.2.0 every session starts on the core tier and agents self-escalate in-session: calling gnosys_toolset without arguments lists what the higher tiers add, and gnosys_toolset {"set": "standard"|"full"} enables them at runtime (and "core" shrinks back). The switch emits notifications/tools/list_changed, so MCP clients pick up the new tools automatically.
Tier | Tools | Contents |
| 14 | Main memory workflow, hybrid search, reflection, traversal, and tier switching |
| 33 | Core plus specialist search, tracing, browsing, attachments, and ingestion |
| 56 | All tools, including freeform ingestion, maintenance, remote sync, and export |
GNOSYS_MCP_TOOLSET=core|standard|full overrides the starting tier (unknown values warn on stderr and fall back to core). The starting toolset and escalation hint are announced in the MCP server instructions. See docs/mcp-toolsets.md.
Documentation
Full docs & guides | |
Complete CLI + MCP reference | |
Changelog | |
Contributing | |
Security policy | |
Report a bug / request a feature |
License
Available Tools
14 toolsgnosys_add_structuredA
Save a structured memory without an LLM call, returning its ID, store label, and up to three active overlaps. Supply title, category, tags, and Markdown content; store defaults to project, author to ai, authority to observed, and confidence to 0.8 (also used for an explicit zero). supersedes links comma-separated predecessor IDs; cross-scope or cross-project links require allowCrossScope=true. Use gnosys_update instead to change an existing memory or unlink a predecessor with superseded_by="".
| Name | Required | Description | Default |
|---|---|---|---|
| tags | Yes | Tags object, e.g. { domain: ['auth'], type: ['decision'] } | |
| store | No | Target store (default: project) | |
| title | Yes | Memory title | |
| author | No | Author: human, ai (default), or human+ai | |
| content | Yes | Memory content as markdown | |
| category | Yes | Open category name, e.g. decisions, architecture, requirements, concepts, roadmap, landscape, open-questions, or how | |
| authority | No | Authority: declared, observed (default), imported, or inferred | |
| relevance | No | Space-separated keyword cloud for discovery search | |
| confidence | No | Confidence from 0 to 1 (omitted or zero uses 0.8), e.g. 0.9 for verified evidence | |
| supersedes | No | Comma-separated IDs of memories this replaces | |
| projectRoot | No | Project root path; routes the call to that project's store. | |
| allowCrossScope | No | Allow supersession across scopes or projects (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (not read-only, not destructive, open-world, not idempotent). The description adds real context beyond that: the return payload (ID, store label, up to three active overlaps), the defaulting behavior for store/author/authority/confidence, and the notable quirk that an explicit zero confidence is treated as 0.8.
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?
Three dense sentences with the primary action and return shape front-loaded; no filler. The middle sentence packs defaults and link rules tightly enough that it reads slightly as a spec dump, but every clause carries information an agent needs.
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 12-parameter mutation tool with no output schema, the description covers return values, defaults, and the supersession constraint well. Minor gap: relevance and projectRoot routing are left entirely to the schema, so the picture is near-complete rather than complete.
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 parameters are already documented, but the description still adds value by restating the defaults and the non-obvious confidence-zero behavior, and by clarifying that supersedes is comma-separated and gated by allowCrossScope. It doesn't cover relevance or projectRoot routing, so it is not a full supplement.
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?
Opens with a specific verb + resource plus a distinguishing trait ('without an LLM call') and immediately states what is returned. It explicitly separates itself from gnosys_update, so an agent can route between the two 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 exclusion: use gnosys_update to change an existing memory or to unlink a predecessor via superseded_by="". It also states the precondition for cross-scope/cross-project supersession (allowCrossScope=true), so the branch conditions are spelled out rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnosys_briefingARead-onlyIdempotent
Summarize a project as Markdown with memory counts, categories, activity from the last seven days, top tags, and a summary. projectId takes precedence over projectRoot; otherwise detect from projectRoot or cwd. all=true returns summaries for all projects and ignores both selectors (default false). Use gnosys_dashboard instead for system health, graph statistics, and provider status as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Generate briefings for ALL projects | |
| projectId | No | Project ID (auto-detects from cwd if omitted) | |
| projectRoot | No | Project root for auto-detection |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed world, so safety is covered. The description adds value beyond that by disclosing the return format (Markdown, not JSON) and the precedence/default semantics. It doesn't explicitly say there are no side effects, but the read-only annotations make that clear.
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?
Three dense sentences, each carrying distinct payload: output contents first, then selector precedence and defaults, then the sibling disambiguation. No repeated or filler text.
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 still names the return format and its components, and the selector/default rules cover the main invocation ambiguity. Nothing material is missing for a zero-required-param read 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 meaning the schema lacks: projectId precedence over projectRoot, cwd auto-detection, and that all=true silently ignores both selectors. That precedence rule is exactly the ambiguity an agent would otherwise trip on.
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 ('Summarize a project as Markdown') and enumerates the output contents (memory counts, categories, 7-day activity, top tags, summary). It also names the distinguishing sibling, gnosys_dashboard, so an agent can differentiate without opening schemas.
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?
Explicitly gives selector precedence (projectId over projectRoot), fallback behavior (detect from projectRoot or cwd), and the all=true override that ignores both selectors with a stated default of false. It also routes the agent away to gnosys_dashboard for system health/graph stats/provider status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnosys_dashboardARead-onlyIdempotent
Inspect local memory-system health as JSON with memory counts, maintenance health, graph statistics, and LLM provider status. projectRoot selects the project context; omission uses the detected context. Use gnosys_briefing instead for a project summary and recent activity as Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| projectRoot | No | Project root path; routes the call to that project's store. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and openWorld, so safety is covered. The description adds valuable context: returns JSON with specific sections and that omitting projectRoot uses the detected context. It doesn't mention performance, caching, or failure behavior, keeping it a step below the top.
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 sentences with zero waste, front-loading the purpose and return contents before the alternative routing. Every clause earns its place.
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?
No output schema exists, so the description carries the return-value burden, which it handles by listing the JSON sections. Combined with annotations covering the safety profile and the lenient default for projectRoot, it is nearly complete, missing only output shape details like nesting or formatting.
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% and the schema documents projectRoot as routing to a project's store. The description adds the meaningful default behavior that omission falls back to the detected context, which the schema does not state.
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 (Inspect) and resource (local memory-system health), enumerates the returned content (memory counts, maintenance health, graph statistics, LLM provider status), and explicitly names the sibling gnosys_briefing as the alternative. An agent can distinguish it from siblings without opening any 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?
Explicitly routes the agent to gnosys_briefing when a Markdown project summary and recent activity are wanted, and clarifies the projectRoot omission behavior. Clear usage context, though it doesn't state when-not to use this tool beyond that single alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnosys_hybrid_searchA
Search memories by keyword and meaning, returning ranked snippets, IDs, scores, status, dates, and replacement links. mode is keyword, semantic, or hybrid (default); limit defaults to 15 and activeOnly to false. Use gnosys_recall instead for a context block, or gnosys_read for a full body. Specialist tools require gnosys_toolset {"set":"standard"}: use gnosys_search for plain keyword search, gnosys_federated_search for scope boosts, gnosys_discover for metadata only, or gnosys_semantic_search for embedding-only results. Embedding setup requires gnosys_toolset {"set":"full"} then gnosys_reindex. Example: {"query":"JWT refresh flow","mode":"keyword","limit":5}.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Search mode (default: hybrid) | |
| limit | No | Max results (default 15) | |
| query | Yes | Natural language search query | |
| activeOnly | No | Only active memories (default false; includes history otherwise) | |
| projectRoot | No | Registered projectRoot searches that project plus user and global memories. An unregistered projectRoot returns an error asking for gnosys_init. Omit projectRoot to search all projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare safety flags; the description adds real behavioral context beyond them – the shape of the return (scores, status, dates, replacement links), defaults for mode/limit/activeOnly, and prerequisite toolset state. The one gap is that annotations set readOnlyHint=false and idempotentHint=false while the description reads as a pure query, and it never explains what side effect or non-idempotency an agent should expect.
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 what the tool does and what it returns, then compresses the sibling routing and prerequisites into single clauses with no filler. Every sentence carries either a routing decision or a setup requirement.
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 takes on the burden of describing return values and does so concretely. It also covers the toolset-unlock and reindex setup path; the only shortfall is that it doesn't account for the non-read-only, non-idempotent annotation profile.
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% and already documents mode, limit, activeOnly and projectRoot defaults, so most of the description's parameter talk is repetition. The worked example ({"query":"JWT refresh flow","mode":"keyword","limit":5}) and the recall/read routing add modest value, but projectRoot's gnosys_init error path is left entirely to the schema.
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 ('Search memories by keyword and meaning') plus the exact return payload (ranked snippets, IDs, scores, status, dates, replacement links). That return-field list and the mode vocabulary let an agent distinguish it from gnosys_recall and gnosys_read 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?
Explicitly routes to alternatives with conditions: gnosys_recall for a context block, gnosys_read for a full body, gnosys_search for plain keyword, gnosys_federated_search for scope boosts, gnosys_discover for metadata only, gnosys_semantic_search for embedding-only. It also states the toolset gating required to see those specialists and the extra steps (full toolset then gnosys_reindex) for embedding setup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnosys_initADestructive
Initialize a project directory, returning its identity, store path, and setup summary. Pass an absolute directory (e.g. /work/app); projectName defaults to its basename. Creates .gnosys/ metadata and registers the project in the central SQLite store; run this before project-scoped operations on a new root. Use gnosys_briefing instead to inspect an already registered project.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | Yes | Absolute path to the project directory to initialize. Required. | |
| projectName | No | Human-readable project name. Defaults to directory basename. | |
| projectRoot | No | Project root path; routes the call to that project's store. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses side effects the annotations don't spell out: it creates .gnosys/ metadata and writes a registration into the central SQLite store, which explains the openWorldHint. But annotations declare destructiveHint=true and idempotentHint=false, and the description never says what happens on re-initialization of an existing root or what could be overwritten — the key risk an agent needs to know.
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?
Three tight sentences that front-load purpose then prerequisites then the alternative. The return-value clause and the absolute-path example are both useful, though the example is arguably redundant with the schema.
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?
No output schema exists, and the description does say what comes back, plus the setup prerequisite and the sibling route. The remaining gap is re-initialization semantics, which matters given destructiveHint=true.
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 applies. The description reinforces the absolute-path requirement with an example and restates the projectName default, but it adds nothing about projectRoot, the one parameter whose routing behavior ('routes the call to that project's store') is the least obvious.
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 ('Initialize a project directory') and immediately names what it returns (identity, store path, setup summary). It also separates itself from the sibling gnosys_briefing, which inspects an existing project rather than creating one.
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 ('run this before project-scoped operations on a new root') and an explicit alternative with its condition ('Use gnosys_briefing instead to inspect an already registered project'). Little 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.
gnosys_preference_getARead-onlyIdempotent
Read a user preference by key, returning its title, value, confidence, and modified date, or omit key to list all preferences with their keys and values. Keys are kebab-case, e.g. {"key":"code-style"}; missing keys return a not-found message. Use gnosys_preference_set instead to save or replace a preference.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Preference key to retrieve. Omit to list all preferences. | |
| projectRoot | No | Project root path; routes the call to that project's store. |
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 value beyond that: which fields are returned, that missing keys yield a not-found message, and the kebab-case key convention. It does not disclose ordering or volume behavior when listing all preferences, which is the main remaining 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?
Two sentences, front-loaded with the primary behavior, then the list-all mode, then the alternative tool. Every clause carries information an agent needs; nothing is padding.
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?
There is no output schema, so the description correctly compensates by naming the returned fields (title, value, confidence, modified date) and the failure mode. Minor gap: no guidance on result size or ordering for the list-all path, which matters for an enumerating call.
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% and the schema already documents both parameters, so the baseline is 3. The description goes further by giving the kebab-case convention and a concrete example ({"key":"code-style"}), which is meaning the schema does not supply.
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 (read a user preference by key), then covers the second operating mode (omit key to list all) and the return fields. It distinguishes itself from the sibling that writes preferences by naming gnosys_preference_set explicitly.
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 mode selection ("omit key to list all preferences") and names the alternative tool with the condition that selects it ("Use gnosys_preference_set instead to save or replace"). An agent can route between read and write without opening either schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnosys_preference_setADestructive
Save or replace a user preference across projects, returning its key, title, and value. Use kebab-case keys, e.g. {"key":"code-style","value":"Use named exports"}; title is generated from the key if omitted. Preferences persist as user-scoped memories; the CLI command gnosys sync refreshes generated rules files. Use gnosys_preference_get instead to inspect a key or list preferences.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Preference key, kebab-case. Examples: 'commit-convention', 'code-style', 'llm-provider', 'testing-approach', 'naming-convention' | |
| tags | No | Optional tags for discovery. | |
| title | No | Human-readable title. Auto-generated from key if omitted. | |
| value | Yes | The preference value. Can be a sentence or paragraph describing the convention. | |
| projectRoot | No | Project root path; routes the call to that project's store. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the overwrite risk is partly covered structurally. The description adds real context beyond that: preferences persist as user-scoped memories and generated rules files only refresh via 'gnosys sync'. It could say more about what happens to an existing value when the key is reused, but the operational side effects are disclosed.
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?
Three front-loaded sentences: purpose and return, then the key-format example, then persistence and the get-alternative. Every sentence carries weight, though the kebab-case guidance duplicates the schema slightly.
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 states what is returned (key, title, value) and explains the persistence model and sync requirement. The remaining gap is what 'replace' means for an existing key's tags or title, but nothing essential for a correct call 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 the baseline is 3. The description's kebab-case example and the note that 'title is generated from the key if omitted' restate what the schema already documents rather than adding new semantics, so no credit 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?
The description names a specific verb ('Save or replace') and resource ('user preference'), states the scope ('across projects') and the return shape ('key, title, and value'). It also explicitly distinguishes itself from the sibling gnosys_preference_get, so an agent can choose 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?
It gives a clear routing rule: use gnosys_preference_get to inspect or list, and this tool to write. The kebab-case convention and the 'gnosys sync' follow-up are practical usage context. It lacks explicit exclusions versus other write-ish siblings such as gnosys_add_structured, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnosys_readARead-onlyIdempotent
Read a memory by ID (e.g. arch-012) or layer-prefixed path (e.g. project:decisions/why-not-rag.md), returning Markdown content, metadata, and supersession links. Unprefixed paths search stores in precedence order. Use gnosys_hybrid_search instead when you do not know the ID, or gnosys_recall for several relevant memories as context.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Memory ID or path, optionally prefixed with store layer | |
| projectRoot | No | Project root path; routes the call to that project's store. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, non-destructive, so the safety profile is covered. The description adds value beyond that with the precedence-order store resolution for unprefixed paths and the shape of what comes back (content, metadata, supersession links). Not a full 5 only because it does not discuss ambiguity when an ID exists in multiple layers.
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?
Three sentences, each carrying distinct information: capability and return shape first, then path resolution semantics, then sibling routing. Zero filler and front-loaded.
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?
No output schema exists, yet the description summarizes the return payload and the supersession links. Combined with full schema coverage and exhaustive annotations, an agent has everything needed to select and invoke it correctly.
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 baseline is 3, but the description earns above baseline by giving concrete path syntax examples (arch-012, project:decisions/why-not-rag.md) and explaining the semantics of an unprefixed path. projectRoot is left entirely to its schema description, which is fully documented.
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?
Specific verb (Read) plus resource (a memory) with two accepted identifier forms shown by example, and it declares the return payload (Markdown content, metadata, supersession links). It is unmistakable against siblings like gnosys_hybrid_search and gnosys_recall, which it names.
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 routing: use this when you know the ID, use gnosys_hybrid_search when you do not, and gnosys_recall for several relevant memories as context. It also states the fallback behavior for unprefixed paths (search stores in precedence order), covering the ambiguous case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnosys_recallARead-onlyIdempotent
Recall relevant memories as a context block for a task, e.g. query="JWT middleware". query="*" selects by reinforcement, confidence, and recency; limit uses config by default and is capped at 15; aggressive defaults to config (true). Use gnosys_hybrid_search instead to inspect ranked results or gnosys_read for one complete body. Registered projectRoot includes project, user, and global memories; omit it for all projects, or run gnosys_init for an unregistered root. Installed hooks may already inject this context per prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max memories to return (default from config, max 15) | |
| query | Yes | What the agent is currently working on. Use keywords. Example: 'auth JWT middleware' or 'database migration schema' | |
| traceId | No | Optional trace ID from the outer orchestrator for audit correlation | |
| aggressive | No | Override aggressive mode for this call. Default: from gnosys.json (true) | |
| projectRoot | No | Registered projectRoot searches that project plus user and global memories. An unregistered projectRoot returns an error asking for gnosys_init. Omit projectRoot to search all projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantive behavior beyond that: query="*" selects by reinforcement/confidence/recency, limit is capped at 15 and defaults from config, aggressive defaults to true, and registered projectRoots span project+user+global. It does not say what the unregistered-root failure looks like or how memory bodies are trimmed in the block, keeping 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?
Front-loaded with purpose and example, then alternatives, then parameter behavior, then scope caveats — a sensible ordering. It is dense and slightly run-on in the final two sentences, but no sentence 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 5-parameter read tool with full schema coverage and no output schema, the description supplies everything the agent needs: output form, wildcard behavior, caps, defaults, project scope, and the hook-duplication caveat.
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; the description still adds value by documenting the special wildcard value query="*" and its ranking semantics, which the schema does not mention. The limit and aggressive defaults largely restate schema text, so it is additive but not fully independent.
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?
Starts with a specific verb+resource ('Recall relevant memories') and names the exact output shape (a <gnosys-recall> context block for a task) with a concrete example query. It also explicitly distinguishes itself from gnosys_hybrid_search and gnosys_read later, so an agent can route without opening any 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?
Names alternatives and the conditions that select them: 'Use gnosys_hybrid_search instead to inspect ranked results or gnosys_read for one complete body.' It also gives explicit projectRoot rules (omit for all projects, run gnosys_init for unregistered roots) and warns that hooks may already inject this context, which is a real when-not-to-call signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnosys_reflectA
Record an outcome as a new reflection memory, returning its ID, confidence delta, updated memory IDs and confidences, and relationship count. memoryIds defaults to up to five keyword matches on outcome; success defaults to true and confidenceDelta to +0.05 on success or -0.1 on failure, clamping resulting confidence to 0.05..1. Success also reinforces targets and adds validates links; failure adds contradicts links. Use gnosys_reinforce instead for usefulness feedback without creating an outcome memory; each reflection call creates a new record and applies the delta again.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Additional notes | |
| outcome | Yes | What happened (the outcome to reflect on) | |
| success | No | Was it a success? (default: true) | |
| memoryIds | No | Memory IDs to relate to (default: FTS match on outcome) | |
| projectRoot | No | Project root path; routes the call to that project's store. | |
| confidenceDelta | No | Confidence change (default +0.05 on success, -0.1 on failure); resulting confidence clamps to 0.05..1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare non-readonly, non-idempotent, non-destructive, closed-world, but the description adds substantial behavior: default deltas, clamping to 0.05..1, that success reinforces targets and adds validates links while failure adds contradicts links, and the return payload. This is exactly the kind of write-operation semantics 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-loads the return payload then the parameter defaults then the sibling alternative, with no wasted sentences. It is dense and packs several clauses into the middle sentence, but every clause carries information.
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?
No output schema exists, yet the description enumerates the returned fields (ID, confidence delta, updated memory IDs and confidences, relationship count) and explains side effects on linked memories. Nothing needed to invoke it correctly or interpret its result 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 baseline is 3, but the description adds meaning beyond the schema: memoryIds defaults to 'up to five keyword matches on outcome', and success/confidenceDelta defaults are tied to each other and the clamping rule. Minor overlap with schema text keeps 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?
States a specific verb and resource: 'Record an outcome as a new reflection memory', and lists what it returns. It explicitly names the sibling gnosys_reinforce as the alternative, so an agent can distinguish the two 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?
Explicitly routes the agent: 'Use gnosys_reinforce instead for usefulness feedback without creating an outcome memory', and warns that each reflection call creates a new record and reapplies the delta. Both the when-to-use and the when-to-use-something-else conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnosys_reinforceA
Record usefulness feedback for one memory, returning a signal confirmation. useful increments reinforcement and resets decay; not_relevant records a routing miss without changing the memory; outdated marks it for review. Use gnosys_reflect instead to record an outcome memory, link evidence, and adjust confidence; repeated useful calls reinforce again.
| Name | Required | Description | Default |
|---|---|---|---|
| signal | Yes | The reinforcement signal | |
| context | No | Why this signal was given | |
| memory_id | Yes | The memory ID (from frontmatter) | |
| projectRoot | No | Project root path; routes the call to that project's store. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false, destructiveHint=false and idempotentHint=false; the description adds real substance by disclosing the side effect of every signal branch: useful increments reinforcement and resets decay, not_relevant records a routing miss without mutating the memory, and outdated only marks it for review. That both explains the non-idempotency hint and reassures the agent that two of three branches are effectively non-destructive.
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 effect of the tool is front-loaded in the first clause before the branch semantics and the sibling exclusion, which is the right ordering. The semicolon-chained enumeration of signal effects is dense but every clause carries distinct information; only the trailing repeat-behaviour note could be tightened.
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 4-parameter tool with full schema coverage and no output schema, the description covers what is needed: what changes per signal, what is returned, and when to choose the sibling. Minor gaps remain around projectRoot routing and whether the signal confirmation has any payload, but nothing blocks a correct call.
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, and the description earns above that by giving behavioural meaning to the signal enum values rather than restating the field. It adds nothing about context or projectRoot, which is acceptable since the schema already describes both.
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 first clause names a specific verb and resource ("Record usefulness feedback for one memory") and states the return ("signal confirmation"). It goes further by spelling out the effect of each of the three signal values, so the agent knows exactly what operation it is selecting 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 the alternative sibling explicitly ("Use gnosys_reflect instead to record an outcome memory, link evidence, and adjust confidence") and gives the condition that selects it. It also clarifies repeat behaviour ("repeated useful calls reinforce again"), removing the main ambiguity about calling this tool more than once.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnosys_toolsetAIdempotent
List the active tool tier and a catalog of higher-tier tools as text, or set core, standard, or full to switch tiers and return added/removed tool names. Starts on core unless configured otherwise; omit set to inspect without switching. Example: {"set":"standard"} enables specialist search and tracing tools for this session.
| Name | Required | Description | Default |
|---|---|---|---|
| set | No | Target tier to switch to. Omit to see the current tier and what higher tiers add. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as a non-readonly but idempotent, non-destructive mutation, and the description adds the crucial context that switching affects 'this session' and returns added/removed tool names. That session-scoped effect goes beyond the annotations, though the exact return shape of an unchanged inspect is left implicit.
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?
Three tightly packed sentences front-load the capability, then the switching semantics, then a compact example. Nothing is redundant relative to the schema.
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 single-param, no-output-schema tool, the description covers defaults, action vs inspection, session scope, and an example. A little more on what the returned catalog actually contains would close the remaining 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 coverage is 100%, so the param is already documented. The description reinforces meaning with the omit-to-inspect rule and a worked example ({"set":"standard"}), adding practical clarity beyond the enum description.
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 specific verbs (list, set) and resources (active tier, higher-tier tool catalog, added/removed tool names), and names the exact enum values. This is clearly distinguishable from the sibling memory/query tools.
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?
Explains the inspect-vs-switch decision ('omit set to inspect without switching') and the default ('starts on core'), plus a concrete example. Clear context, though it doesn't explicitly name when other tools should be preferred over switching tiers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnosys_traverseARead-onlyIdempotent
Traverse stored memory relationships breadth-first, returning an indented text tree of IDs, titles, confidences, depths, and connecting edges. direction is out, in, or both (default); depth defaults to 3 with range 1..10. relTypes accepts stored relationship strings, including references, supersedes, leads_to, follows_from, requires, validates, contradicts, and corroborates; omission follows all types. Example: {"memoryId":"arch-012","depth":2,"relTypes":["requires"]}. To create relationships from source code, use gnosys_trace instead, which requires gnosys_toolset {"set":"standard"}.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Max traversal depth (default: 3, max: 10) | |
| memoryId | Yes | Starting memory ID | |
| relTypes | No | Stored relationship types to follow (default all), e.g. leads_to, follows_from, requires, validates, contradicts, corroborates, references, supersedes | |
| direction | No | Edge direction to follow (default: both) | |
| projectRoot | No | Project root path; routes the call to that project's store. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and closed-world behavior, and the description adds the traversal algorithm (BFS), output shape, and defaults for direction and depth. It does not discuss performance/pagination on large graphs, but the added behavioral context is substantial.
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 purpose and output shape, then defaults, then the alternative. The example and relationship-type list add length but each earns its place; only minor redundancy with schema-documented defaults.
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 fully describes the return format, and it covers defaults, valid values, and the sibling alternative. An agent has everything needed to call it correctly.
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 baseline is 3; the description goes further by spelling out default and range for depth, the enum semantics of direction (out/in/both default), relTypes omission behavior, and a concrete example call. This meaningfully clarifies how the parameters interact.
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 ('Traverse stored memory relationships breadth-first') and describes the exact output form (indented text tree of IDs, titles, confidences, depths, edges). It also distinguishes itself from the sibling gnosys_trace by scoping that tool to relationship creation.
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?
Explicitly routes relationship-creation use cases to gnosys_trace, which is a clear when-not/alternative clause. However, it does not distinguish itself from other retrieval siblings like gnosys_recall or gnosys_hybrid_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gnosys_updateADestructive
Update an existing memory by ID or path, returning a confirmation and changed fields. To archive, retire, or "delete" a memory, set status to archived or superseded with superseded_by (the replacement ID, mapped to supersededBy / --superseded-by in the CLI); hard deletion is human-only by design via the CLI. confidence accepts 0..1; content replaces the Markdown body; supersedes adds predecessor links and superseded_by="" unlinks a predecessor. Links reject cycles and require allowCrossScope=true across scopes or projects. Use gnosys_add_structured instead for a new memory.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Memory id or path | |
| tags | No | New tags object | |
| title | No | New title | |
| status | No | New status; explicit values override automatic supersession status | |
| content | No | New markdown content (replaces body) | |
| relevance | No | New relevance keyword cloud | |
| confidence | No | New confidence | |
| supersedes | No | Comma-separated predecessor IDs to link to this memory | |
| projectRoot | No | Project root path; routes the call to that project's store. | |
| superseded_by | No | ID that supersedes this one | |
| allowCrossScope | No | Allow supersession across scopes or projects (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructive/openWorld/idempotent annotations: it discloses that hard deletion is impossible here by design, that links reject cycles, that cross-scope supersession requires allowCrossScope=true, and that superseded_by="" unlinks a predecessor. These are non-obvious behavioral constraints an agent could not infer from annotations or schema.
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 core action, then packs archive/delete semantics, field semantics, and sibling routing into one dense paragraph. Every clause carries information, though the single-block density makes it slightly harder to scan than a bulleted or sentence-per-topic form.
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 an 11-parameter mutation tool with no output schema, the description covers the return shape, the destructive-path policy, link/cross-scope constraints, and the create-vs-update boundary. Nothing an agent needs to invoke it safely appears to be 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 already 100%, so baseline is 3; the description adds real value for the trickier fields — supersedes creates predecessor links, superseded_by empty string unlinks, allowCrossScope governs cross-scope/project operations, and superseded_by maps to the CLI flag. It does not elaborate on tags/title/relevance beyond the schema's own wording.
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 ('Update an existing memory by ID or path') plus the return shape ('confirmation and changed fields'). It also explicitly distinguishes itself from the sibling gnosys_add_structured for creating new memories, so an agent can pick it apart from alternatives without opening schemas.
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 routing rules: use this tool to archive/retire/'delete' via status=archived or superseded, hard deletion is human-only via the CLI, and use gnosys_add_structured for new memories. When-to-use, when-not-to-use, and the alternative are all named.
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.
8 tool updates
- Removed
gnosys_add - Changed
gnosys_add_structured4 fields changed- added
Input schema / properties / author / descriptionAdded value: +"Author: human, ai (default), or human+ai" - added
Input schema / properties / authority / descriptionAdded value: +"Authority: declared, observed (default), imported, or inferred" - changed
Input schema / properties / category / descriptionPrevious value: -"Category name"New value: +"Open category name, e.g. decisions, architecture, requirements, concepts, roadmap, landscape, open-questions, or how" - added
Input schema / properties / confidence / descriptionAdded value: +"Confidence from 0 to 1 (omitted or zero uses 0.8), e.g. 0.9 for verified evidence"
- Removed
gnosys_discover - Removed
gnosys_federated_search - Changed
gnosys_reflect1 field changed- changed
Input schema / properties / confidenceDelta / descriptionPrevious value: -"Custom confidence delta (e.g. 0.1 or -0.2)"New value: +"Confidence change (default +0.05 on success, -0.1 on failure); resulting confidence clamps to 0.05..1"
- Removed
gnosys_search - Removed
gnosys_trace - Changed
gnosys_traverse1 field changed- changed
Input schema / properties / relTypes / descriptionPrevious value: -"Relationship types to follow, e.g. ['leads_to','requires']"New value: +"Stored relationship types to follow (default all), e.g. leads_to, follows_from, requires, validates, contradicts, corroborates, references, supersedes"
19 tool updates
v7.0.0- First observed
gnosys_add - First observed
gnosys_add_structured - First observed
gnosys_briefing - First observed
gnosys_dashboard - First observed
gnosys_discover - First observed
gnosys_federated_search - First observed
gnosys_hybrid_search - First observed
gnosys_init - First observed
gnosys_preference_get - First observed
gnosys_preference_set - First observed
gnosys_read - First observed
gnosys_recall - First observed
gnosys_reflect - First observed
gnosys_reinforce - First observed
gnosys_search - First observed
gnosys_toolset - First observed
gnosys_trace - First observed
gnosys_traverse - First observed
gnosys_update
TDQS
Scored across 14 tools
Most tools have clearly distinct purposes, and descriptions explicitly cross-reference alternatives (read vs hybrid_search vs recall; reinforce vs reflect; dashboard vs briefing; update vs add_structured). The memory-retrieval trio (read/recall/hybrid_search) and the feedback pair (reinforce/reflect) overlap somewhat, but the guidance is strong enough that an agent can select confidently.
All tools share the gnosys_ prefix and use snake_case verb_noun patterns (read, add_structured, update, hybrid_search, preference_set/get, traverse). Minor deviations like gnosys_init and gnosys_toolset are noun-style rather than verb_noun, but overall very predictable.
14 tools is well within the ideal range, each mapping to a distinct memory-system operation (read/write/search/feedback/admin/preferences). The tiering mechanism gates advanced tools without bloating the default surface.
The surface covers the full memory lifecycle: create (add_structured), read, update/archive, search (hybrid_search/recall/traverse), feedback (reinforce/reflect), project setup (init/briefing/dashboard), and preferences. Hard deletion is intentionally human-only via CLI, a deliberate rather than accidental gap.
Maintenance
Related MCP Connectors
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Shared long-term memory vault for AI agents with 20 MCP tools.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Related MCP Servers
- AlicenseAqualityBmaintenanceMemory manager for AI apps and Agents using various graph and vector stores and allowing ingestion from 30+ data sources632,688Apache 2.0

Mem0 MCP Serverofficial
AlicenseAqualityFmaintenanceAn MCP server that integrates with mem0.ai to help users store, retrieve, and search coding preferences for more consistent programming practices.9662Apache 2.0
Supermemory MCPofficial
AlicenseNot gradedqualityFmaintenanceA universal memory server that allows users to access their chat memories across different LLMs without requiring logins or payment.1,721MIT
mcp-memoriofficial
AlicenseAqualityFmaintenanceWith Memori's MCP server, your agent can retrieve relevant memories before answering and store durable facts after responding, keeping context across sessions without any SDK integration. With MCP, it can: Store stable user facts and preferences after answering using the advanced_augmentation tool Recall relevant memories before answering using the recall tool Maintain context across sessions us221 npm2MIT