From 998a5793b7c09e1e1cada4134fe9fe076e826eb2 Mon Sep 17 00:00:00 2001 From: KT <677465+kevintseng@users.noreply.github.com> Date: Sun, 16 Aug 2026 21:40:34 +0800 Subject: [PATCH] docs(agents): what an agent must never invent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two negative instructions, prompted by studying ctx's agent skill (their anti-hallucination clauses are the best part of that doc): when memesh is unavailable or recall returns nothing, say so and work without it — never fabricate a memory or cite a [mem:id] handle that was not actually returned; and recall windows are bounded, so a hit count is not a graph-wide count and an empty result is not proof of absence. A wrong 'remembered' fact arrives wearing the authority of the graph, which makes it worse than no memory at all. --- AGENTS.md | 12 ++++++++++++ dist/skills-manifest.json | 4 ++-- skills/memesh/SKILL.md | 7 +++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index fa05c25e..ceb6ebc6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -52,6 +52,18 @@ host is recallable from all of them. Not installed yet? Follow `observation` parameter removes just that fact and keeps the entity active. Prefer it over archiving the whole entity. +## What you must never invent + +- If MeMesh is unavailable or a recall returns nothing, **say so and work + without it** — never fabricate a memory, and never cite a `[mem:id]` + handle that was not actually shown to you. A wrong "remembered" fact is + worse than no memory: it arrives wearing the authority of the graph. +- Recall windows are bounded (the `limit` parameter, 30 by default), so do + not infer graph-wide counts or "there is no memory about X" from the + number of hits one query returns. Absence of results is absence of + results, not evidence of absence — vary the wording or narrow by tag + before concluding anything. + ## What Claude Code already does — do not double-write Under Claude Code with the MeMesh plugin, hooks capture automatically: diff --git a/dist/skills-manifest.json b/dist/skills-manifest.json index e9e76ec8..5c6fde9f 100644 --- a/dist/skills-manifest.json +++ b/dist/skills-manifest.json @@ -113,8 +113,8 @@ }, { "path": "skills/memesh/SKILL.md", - "sha256": "ad76b477c74434f533cc786838fdd6645d734623475c917d5a24326b8c5c83e7", - "bytes": 9092 + "sha256": "04dacfaeab1cb0af2ebe041a8825a44d2ffcae4e192a158217eabdc585721b2e", + "bytes": 9498 } ] } diff --git a/skills/memesh/SKILL.md b/skills/memesh/SKILL.md index 1ba5a6b0..35f390fd 100644 --- a/skills/memesh/SKILL.md +++ b/skills/memesh/SKILL.md @@ -56,6 +56,13 @@ clear it. Run `memesh briefing` (or `--project `) and answer from it. For specific follow-up questions, use `recall`. +**MEMESH UNAVAILABLE or RECALL EMPTY → say so, never invent.** Report that +memory is unavailable (or found nothing) and continue without it. Never +fabricate a memory or cite a `[mem:id]` that was not actually returned. +Recall is bounded by `limit` — a small hit count is not a graph-wide count, +and an empty result is not proof nothing was stored: vary the wording or +narrow by tag before concluding. + ## What's Already Automatic (Claude Code Plugin Hooks) If MeMesh is installed as a Claude Code plugin, these happen **without any action from you**: