diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index fb00c4ef..7257961f 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,10 +1,10 @@ { - "name": "scribe-plugin", + "name": "grimoire-plugin", "owner": { "name": "Bryan Van Deusen" }, "description": "Grimoire ships its own Claude Code plugin from this repo, versioned in lockstep with the app + the /api/plugin/context contract.", "plugins": [ { - "name": "scribe", + "name": "grimoire", "source": "./plugin", "description": "Grimoire second brain: MCP tools + session-start push channel + universal process-skills." } diff --git a/alembic/versions/0124_skill_names_follow_the_plugin.py b/alembic/versions/0124_skill_names_follow_the_plugin.py new file mode 100644 index 00000000..2ae3ac0a --- /dev/null +++ b/alembic/versions/0124_skill_names_follow_the_plugin.py @@ -0,0 +1,45 @@ +"""skill names follow the plugin's name + +Revision ID: 0124 +Revises: 0123 +Create Date: 2026-10-22 + +The plugin is named `grimoire`, so its skills reach a session as +`grimoire:` and stored processes as `grimoire-proc-`. A rule +mounted on one of those skills, a judgment about that mount, and an install's +own action mapping all store the skill's name, and a stored name the harness no +longer sends never matches again. This rewrites the plugin's earlier prefixes, +`scribe:` and `scribe-proc-`, to the current ones. + +Cost: three small tables, each one row per mount, judgment or mapping. +""" +from alembic import op + +revision = "0124" +down_revision = "0123" +branch_labels = None +depends_on = None + +_MOMENT_TABLES = ("rule_moments", "rule_moment_judgments", "moment_mappings") + + +def _rename(old: str, new: str) -> None: + for table in _MOMENT_TABLES: + op.execute( + f"UPDATE {table} SET moment = regexp_replace(moment, " + f"'^skill\\.{old}(:|-proc-)', 'skill.{new}\\1') " + f"WHERE moment ~ '^skill\\.{old}(:|-proc-)'" + ) + op.execute( + f'UPDATE moment_mappings SET "match" = regexp_replace("match", ' + f"'skill={old}(:|-proc-)', 'skill={new}\\1', 'g') " + f"WHERE \"match\" ~ 'skill={old}(:|-proc-)'" + ) + + +def upgrade() -> None: + _rename("scribe", "grimoire") + + +def downgrade() -> None: + _rename("grimoire", "scribe") diff --git a/docs/api-keys-and-mcp.md b/docs/api-keys-and-mcp.md index 775b3a7e..7e47018b 100644 --- a/docs/api-keys-and-mcp.md +++ b/docs/api-keys-and-mcp.md @@ -54,7 +54,7 @@ The plugin connects the MCP server and adds the hooks and skills that put Grimoi ``` /plugin marketplace add https://git.fabledsword.com/bvandeusen/FabledScribe.git -/plugin install scribe@scribe-plugin +/plugin install grimoire@grimoire-plugin ``` It asks for your Grimoire base URL, an API key (kept in your OS keychain) and, optionally, a project id. Settings → MCP Access shows the exact command for your instance. [`plugin/README.md`](../plugin/README.md) describes each hook. @@ -67,9 +67,9 @@ your instance's `/mcp` endpoint: ```json { "mcpServers": { - "scribe": { + "grimoire": { "type": "http", - "url": "https://your-scribe-instance.example.com/mcp", + "url": "https://your-grimoire-instance.example.com/mcp", "headers": { "Authorization": "Bearer fmcp_your-api-key" } diff --git a/docs/design-system.md b/docs/design-system.md index 2c9b575b..f91e605e 100644 --- a/docs/design-system.md +++ b/docs/design-system.md @@ -332,7 +332,7 @@ Home server management. The accent appears on: the wordmark, healthy/online stat } /* Per-app accent — set ONE of these on the root for each app */ -[data-app="scribe"] { --fs-accent: #5B4A8A; } +[data-app="grimoire"] { --fs-accent: #5B4A8A; } [data-app="minstrel"] { --fs-accent: #4A6B5C; } [data-app="forge"] { --fs-accent: #8B5A2B; } [data-app="roundtable"]{ --fs-accent: #4A5D7E; } diff --git a/docs/features.md b/docs/features.md index e7599746..46734f89 100644 --- a/docs/features.md +++ b/docs/features.md @@ -53,7 +53,7 @@ Tokens (colour, type, space, motion, ...) and written guidance, with inheritance ## Stored processes -Saved procedures, such as a drift audit or a DRY pass. The plugin syncs each one into a Claude Code skill (`/scribe:sync`), which fetches the live procedure when it is invoked. +Saved procedures, such as a drift audit or a DRY pass. The plugin syncs each one into a Claude Code skill (`/grimoire:sync`), which fetches the live procedure when it is invoked. ## Search and context injection diff --git a/frontend/src/views/SettingsView.vue b/frontend/src/views/SettingsView.vue index 0a5ed8b5..aa2c0e74 100644 --- a/frontend/src/views/SettingsView.vue +++ b/frontend/src/views/SettingsView.vue @@ -570,7 +570,7 @@ const copiedSnippetKey = ref(null); // preferences carry across visits without needing a server-side setting. const _MCP_NAME_KEY = 'mcp_server_name'; const _MCP_SCOPE_KEY = 'mcp_scope'; -const _DEFAULT_MCP_NAME = 'scribe'; +const _DEFAULT_MCP_NAME = 'grimoire'; const _isValidScope = (v: unknown): v is 'user' | 'project' | 'local' => v === 'user' || v === 'project' || v === 'local'; @@ -635,8 +635,8 @@ const DEAD_PCT_WARN = 20; // dead-tuple ratio above this = autovacuum falling be const pluginInstallCommands = computed(() => { const mkt = (pluginMarketplaceUrl.value || '').trim() || serverMarketplaceUrl.value - || '.git'; - return `/plugin marketplace add ${mkt}\n/plugin install scribe@scribe-plugin`; + || '.git'; + return `/plugin marketplace add ${mkt}\n/plugin install grimoire@grimoire-plugin`; }); const mcpConfigSnippet = computed(() => JSON.stringify({ @@ -2644,7 +2644,7 @@ async function deleteUser(userId: number) { project id to scope the session-start context.
  • - Restart Claude Code — /mcp shows scribe connected and your + Restart Claude Code — /mcp shows grimoire connected and your standing rules load at session start.
  • @@ -2669,9 +2669,9 @@ async function deleteUser(userId: number) {