Direction change (operator): the Scribe plugin must not depend on disabling a native Claude function to work — it earns its place by steering behavior, not by toggling autoMemoryEnabled. Tracked on plan task #755 (work-logs #341/#342). Supersedes #755 Phase 6 (autoMemoryEnabled:false), which is now disregarded.
Memory doctrine — no dual-write
using-scribe/SKILL.md — new section "Scribe holds these functions — don't keep a second copy": route rules/recall/planning to Scribe, don't also write them to native auto-memory, never instruct disabling a native function, and accept a "Scribe-shaped hole" if the plugin is removed (recover over time).
mcp/server.py_INSTRUCTIONS — removed the paragraph that told every session to create/refresh a "rules live in Scribe" pointer in CLAUDE.md / ~/.claude memory. That was an active dual-write instruction; the SessionStart hook is the bridge now. Replaced with the no-dual-write / no-settings-dependency doctrine.
using-scribe/SKILL.md — new section "Stay inside the active project's scope": pass project_id to every read; only reference/offer work on the in-scope project; ask before switching.
_INSTRUCTIONS — scope rule extended from reads → also referencing/offering; flags get_recent as cross-project.
get_recent docstring — scope note steering to scoped list_* when a project is active.
Audit found search / list_tasks / list_notes already enforce project_id, and the SessionStart hook text (plugin_context.py) was already clean — so the gaps were exactly these spots.
Distribution
plugin.json0.1.4 → 0.1.5 so client caches actually refresh (re-shipping under the same version does not bust the cache).
On merge: backend (_INSTRUCTIONS, get_recent) propagates via the app deploy; the skill propagates via plugin autoUpdate to 0.1.5.
Direction change (operator): the Scribe plugin must **not** depend on disabling a native Claude function to work — it earns its place by steering behavior, not by toggling `autoMemoryEnabled`. Tracked on plan task #755 (work-logs #341/#342). **Supersedes #755 Phase 6** (`autoMemoryEnabled:false`), which is now disregarded.
## Memory doctrine — no dual-write
- **`using-scribe/SKILL.md`** — new section *"Scribe holds these functions — don't keep a second copy"*: route rules/recall/planning to Scribe, don't also write them to native auto-memory, never instruct disabling a native function, and accept a "Scribe-shaped hole" if the plugin is removed (recover over time).
- **`mcp/server.py` `_INSTRUCTIONS`** — **removed the paragraph that told every session to create/refresh a "rules live in Scribe" pointer in CLAUDE.md / `~/.claude` memory.** That was an active dual-write instruction; the SessionStart hook is the bridge now. Replaced with the no-dual-write / no-settings-dependency doctrine.
## Project-scope discipline — stop cross-project bleed
- **`using-scribe/SKILL.md`** — new section *"Stay inside the active project's scope"*: pass `project_id` to every read; only reference/offer work on the in-scope project; ask before switching.
- **`_INSTRUCTIONS`** — scope rule extended from reads → also referencing/offering; flags `get_recent` as cross-project.
- **`get_recent`** docstring — scope note steering to scoped `list_*` when a project is active.
- Audit found `search` / `list_tasks` / `list_notes` already enforce `project_id`, and the SessionStart hook text (`plugin_context.py`) was already clean — so the gaps were exactly these spots.
## Distribution
- `plugin.json` **0.1.4 → 0.1.5** so client caches actually refresh (re-shipping under the same version does not bust the cache).
- On merge: backend (`_INSTRUCTIONS`, `get_recent`) propagates via the app deploy; the skill propagates via plugin autoUpdate to 0.1.5.
CI green on `dev` (run #821, `9eddb84`).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Direction change (operator, see plan task #755 work-log): the plugin must
NOT depend on disabling a native Claude function to work. It earns its place
by steering behavior, not by toggling autoMemoryEnabled.
Memory doctrine (no dual-write):
- using-scribe SKILL.md gains "Scribe holds these functions — don't keep a
second copy": route rules/recall/planning to Scribe, don't also write them
to native auto-memory, never instruct disabling a native function, and
accept a "Scribe-shaped hole" if the plugin is removed (recover over time).
- mcp/server.py _INSTRUCTIONS: drop the paragraph that told the model to
create/refresh a "rules live in Scribe" pointer in CLAUDE.md / ~/.claude
memory. That was an active dual-write instruction; the SessionStart hook is
the bridge now. Replaced with the no-dual-write / no-settings-dependency
doctrine. Supersedes plan #755 Phase 6 ("set autoMemoryEnabled:false").
Project-scope discipline (stop cross-project bleed):
- using-scribe SKILL.md gains "Stay inside the active project's scope": pass
project_id to every read, only reference/offer work on the in-scope project,
ask before switching.
- _INSTRUCTIONS scope bullet extended from reads to referencing/offering, and
flags get_recent as cross-project.
- get_recent docstring gains a scope note steering to scoped list_* when a
project is active.
plugin.json 0.1.4 -> 0.1.5 so clients' caches actually refresh (re-shipping
under the same version does not bust the cache).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Direction change (operator): the Scribe plugin must not depend on disabling a native Claude function to work — it earns its place by steering behavior, not by toggling
autoMemoryEnabled. Tracked on plan task #755 (work-logs #341/#342). Supersedes #755 Phase 6 (autoMemoryEnabled:false), which is now disregarded.Memory doctrine — no dual-write
using-scribe/SKILL.md— new section "Scribe holds these functions — don't keep a second copy": route rules/recall/planning to Scribe, don't also write them to native auto-memory, never instruct disabling a native function, and accept a "Scribe-shaped hole" if the plugin is removed (recover over time).mcp/server.py_INSTRUCTIONS— removed the paragraph that told every session to create/refresh a "rules live in Scribe" pointer in CLAUDE.md /~/.claudememory. That was an active dual-write instruction; the SessionStart hook is the bridge now. Replaced with the no-dual-write / no-settings-dependency doctrine.Project-scope discipline — stop cross-project bleed
using-scribe/SKILL.md— new section "Stay inside the active project's scope": passproject_idto every read; only reference/offer work on the in-scope project; ask before switching._INSTRUCTIONS— scope rule extended from reads → also referencing/offering; flagsget_recentas cross-project.get_recentdocstring — scope note steering to scopedlist_*when a project is active.search/list_tasks/list_notesalready enforceproject_id, and the SessionStart hook text (plugin_context.py) was already clean — so the gaps were exactly these spots.Distribution
plugin.json0.1.4 → 0.1.5 so client caches actually refresh (re-shipping under the same version does not bust the cache)._INSTRUCTIONS,get_recent) propagates via the app deploy; the skill propagates via plugin autoUpdate to 0.1.5.CI green on
dev(run #821,9eddb84).🤖 Generated with Claude Code