# Scribe plugin for Claude Code Turns a self-hosted [Scribe](https://git.fabledsword.com/bvandeusen/FabledScribe) instance into a first-class Claude Code extension: - **MCP tools** over your notes, tasks, projects, milestones, systems, and rulebook (the `scribe` server). - **Session-start push channel** — a `SessionStart` hook injects your always-on rules + active-project context so Scribe surfaces *without being asked*. - **Prior-art recall on writes** — a `PreToolUse` hook on Write/Edit checks the file about to be written against your recorded snippets (what's kept at that path, and what resembles the code) and offers them before the helper is rewritten. Titles only, never blocks the edit. - **Universal process-skills** — using-scribe, writing-plans, systematic-debugging, verification, brainstorming, reusing-code (record and recall reusable code as snippets). Replaces superpowers. - **Your Scribe Processes as skills** — saved Processes are synced into local `~/.claude/skills/scribe-proc-*` stubs that auto-surface by relevance; the stub fetches the live procedure via `get_process`. Refreshed each session and on demand with `/scribe:sync`. It is designed so you can uninstall `superpowers` and disable auto-memory and depend on neither. ## Install The plugin ships inside the Scribe app repo, so the marketplace *is* that repo — you always get the plugin version that matches your Scribe instance. ``` /plugin marketplace add https://git.fabledsword.com/bvandeusen/FabledScribe.git /plugin install scribe@scribe-plugin ``` On install you'll be asked for: | Setting | What | |---|---| | **Scribe base URL** | e.g. `https://scribe.example.com` (no trailing slash) | | **Scribe API key** | an `fmcp_` key from **Settings → API Keys** (stored in your OS keychain) | | **Active project id** | optional — numeric project id to scope the session-start context | ## What gets wired - `plugin.json` `mcpServers` → the `scribe` MCP server at `/mcp` (Bearer auth). - `hooks/hooks.json` → SessionStart hook (`hooks/scribe_session_context.sh`), **fail-open**: if Scribe is unreachable it injects nothing and never blocks the session. - `hooks/hooks.json` → PreToolUse hook on `Write|Edit` (`hooks/scribe_prior_art.sh`) → `GET /api/plugin/prior-art`. Returns `additionalContext` with **no** permission decision, so it can inform the write but never stop it; silent when nothing is recorded, which is most of the time. Toggle in **Settings → Knowledge auto-inject**. - `skills/` → the universal process-skills, surfaced by description match. - `hooks/scribe_sync_processes.sh` (a 2nd SessionStart hook) + the `/scribe:sync` command → generate `~/.claude/skills/scribe-proc-*` stubs from your Scribe Processes (via `GET /api/plugin/processes`); also **fail-open**, and pruned to match what exists in Scribe. ## Notes - Set a `version` bump in `.claude-plugin/plugin.json` per release so clients pick up changes. - The session-start, auto-inject and prior-art hooks need only a **read**-scoped key; the MCP tools need **write** scope to create/update. Every hook is a GET for that reason — a read key cannot POST.