From ef29928a5994e85767ac5af83fa7f2324c652c2b Mon Sep 17 00:00:00 2001 From: Igor Date: Sat, 25 Apr 2026 11:14:53 +0200 Subject: [PATCH 1/4] fix(skills): revert ketchup- prefix on skill names so commands are /ketchup:init etc --- CLAUDE.md | 2 +- README.md | 12 ++++++------ docs/configuration.md | 10 +++++----- docs/getting-started.md | 6 +++--- docs/index.md | 2 +- docs/installation.md | 16 ++++++++-------- docs/operational-concerns.md | 6 +++--- docs/reminders-guide.md | 2 +- docs/validators-guide.md | 2 +- skills/config/SKILL.md | 2 +- skills/init/SKILL.md | 2 +- 11 files changed, 31 insertions(+), 31 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 7c02cf9..05b9851 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -70,7 +70,7 @@ Both are markdown files with YAML frontmatter. Validators gate commits (ACK/NACK ### Installation Model -Ketchup runs as a Claude Code plugin. Install via `/plugin marketplace add BeOnAuto/auto-plugins` followed by `/plugin install ketchup`, or as a local plugin via `claude --plugin-dir /path/to/ketchup`. The plugin is opt-in per repository: hooks are inactive until the user runs `/ketchup-init`, which creates `.ketchup/` with default config. Without initialization, session-start shows a non-blocking hint. The plugin provides validators, reminders, and hook scripts. Projects can add local overrides in `.ketchup/`. Existing `.claude-auto/` directories from the legacy package name auto-rename to `.ketchup/` on first session-start (see `src/migrate.ts`). +Ketchup runs as a Claude Code plugin. Install via `/plugin marketplace add BeOnAuto/auto-plugins` followed by `/plugin install ketchup`, or as a local plugin via `claude --plugin-dir /path/to/ketchup`. The plugin is opt-in per repository: hooks are inactive until the user runs `/ketchup:init`, which creates `.ketchup/` with default config. Without initialization, session-start shows a non-blocking hint. The plugin provides validators, reminders, and hook scripts. Projects can add local overrides in `.ketchup/`. Existing `.claude-auto/` directories from the legacy package name auto-rename to `.ketchup/` on first session-start (see `src/migrate.ts`). ## Coding Patterns diff --git a/README.md b/README.md index 894fd59..7f617b7 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Inside any Claude Code session: claude --plugin-dir /path/to/ketchup ``` -Claude Code sets `CLAUDE_PLUGIN_ROOT` and `CLAUDE_PLUGIN_DATA` automatically. Run `/ketchup-init` inside a session to activate per-project configuration, validators, and logging. +Claude Code sets `CLAUDE_PLUGIN_ROOT` and `CLAUDE_PLUGIN_DATA` automatically. Run `/ketchup:init` inside a session to activate per-project configuration, validators, and logging. ## Quick Start @@ -72,7 +72,7 @@ claude --plugin-dir /path/to/ketchup After installation, Claude will mention that Ketchup is available. To activate it in a project: ``` -/ketchup-init +/ketchup:init ``` This creates `.ketchup/` with default configuration. You can add it to `.gitignore` for personal use, or commit it for the whole team. @@ -142,10 +142,10 @@ Higher `priority` = appears first. Project-local files are loaded alongside plug Toggle validators and reminders without editing files: ```bash -/ketchup-config show -/ketchup-config validators disable no-comments -/ketchup-config reminders priority my-reminder 200 -/ketchup-config reminders add my-rule --hook UserPromptSubmit --priority 50 --content "Always use early returns" +/ketchup:config show +/ketchup:config validators disable no-comments +/ketchup:config reminders priority my-reminder 200 +/ketchup:config reminders add my-rule --hook UserPromptSubmit --priority 50 --content "Always use early returns" ``` --- diff --git a/docs/configuration.md b/docs/configuration.md index a2dac9a..44e4281 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -113,13 +113,13 @@ Patterns use [micromatch](https://github.com/micromatch/micromatch) glob syntax. ## Managing Configuration -Configuration is managed via the `/ketchup-config` skill from within a Claude Code session: +Configuration is managed via the `/ketchup:config` skill from within a Claude Code session: ``` -/ketchup-config show # View current configuration -/ketchup-config set # Update a setting -/ketchup-config validators # List active validators -/ketchup-config reminders # List active reminders +/ketchup:config show # View current configuration +/ketchup:config set # Update a setting +/ketchup:config validators # List active validators +/ketchup:config reminders # List active reminders ``` --- diff --git a/docs/getting-started.md b/docs/getting-started.md index fb61704..0b004b4 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -41,13 +41,13 @@ Claude will mention that Ketchup is available but not yet active. ## Step 2: Activate in Your Project ``` -/ketchup-init +/ketchup:init ``` This creates `.ketchup/` with default configuration. Then verify: ``` -/ketchup-config show +/ketchup:config show ``` Ketchup is now active with commit validation, reminders, deny-lists, and auto-continue. @@ -174,5 +174,5 @@ See the [transformation story](/origin-story#the-transformation) for the complet Having issues? See the [Configuration Guide](/configuration#troubleshooting) for common problems and solutions, or run: ``` -/ketchup-config show +/ketchup:config show ``` diff --git a/docs/index.md b/docs/index.md index c44d2b9..dd59913 100644 --- a/docs/index.md +++ b/docs/index.md @@ -102,7 +102,7 @@ From within a Claude Code session: ### 2. Initialize ``` -/ketchup-init +/ketchup:init ``` This creates `.ketchup/` with default configuration, seeded with the 20+ validators and 9+ reminders. diff --git a/docs/installation.md b/docs/installation.md index ed6f21b..cb9bd11 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -30,7 +30,7 @@ claude --plugin-dir /path/to/ketchup After installing the plugin, Claude will mention that Ketchup is available. To activate it: ``` -/ketchup-init +/ketchup:init ``` This creates the following structure in your project: @@ -56,20 +56,20 @@ See the [Reminders Guide](/reminders-guide) and [Validators Guide](/validators-g After installing the plugin, use the config skill to check the current state: ``` -/ketchup-config show +/ketchup:config show ``` --- ## Configuration -All configuration is managed via the `/ketchup-config` skill: +All configuration is managed via the `/ketchup:config` skill: ``` -/ketchup-config show # View current configuration -/ketchup-config set # Update a setting -/ketchup-config validators # List active validators -/ketchup-config reminders # List active reminders +/ketchup:config show # View current configuration +/ketchup:config set # Update a setting +/ketchup:config validators # List active validators +/ketchup:config reminders # List active reminders ``` Configuration is stored in `.ketchup/state.json`. @@ -134,6 +134,6 @@ After installation: If you run into issues: -1. Run `/ketchup-config show` to check configuration state +1. Run `/ketchup:config show` to check configuration state 2. Check `.ketchup/logs/` for detailed error messages 3. Report persistent issues at [GitHub Issues](https://github.com/BeOnAuto/ketchup/issues) diff --git a/docs/operational-concerns.md b/docs/operational-concerns.md index 576f9a3..c44dff1 100644 --- a/docs/operational-concerns.md +++ b/docs/operational-concerns.md @@ -32,7 +32,7 @@ Each call is bounded by Claude's response time on a short structured-output prom **If latency matters more than thoroughness:** - Reduce `validateCommit.batchCount` in `.ketchup/state.json` (raise from 3 to 5 or 7 to fewer total calls) -- Disable validators you don't need: `/ketchup-config validators disable ` +- Disable validators you don't need: `/ketchup:config validators disable ` - Set `validateCommit.mode` to `warn` instead of `strict` (NACK becomes a warning, doesn't block) --- @@ -43,7 +43,7 @@ It happens. The subagent occasionally returns a NACK for a reason that's wrong, 1. **The subagent can only return JSON** (`{"decision":"ACK"}` or `{"decision":"NACK","reason":"..."}`). Unparseable output is treated as ACK by default, so a malformed response doesn't block your commit. 2. **The appeal system** is the bounded override. Add `[appeal: ]` to the commit message and a separate `appeal-system` validator re-evaluates the NACK with your reason in context. Either the appeal is accepted and the commit proceeds, or it's rejected with the reason logged. Not a bypass; a formal re-evaluation that leaves a trail. -3. **You can disable noisy validators** at runtime: `/ketchup-config validators disable testing-weak-assertions`. No fork, no rebuild. +3. **You can disable noisy validators** at runtime: `/ketchup:config validators disable testing-weak-assertions`. No fork, no rebuild. In our own usage the appeal rate is low single-digit percent of NACKs. We'll publish the observed rate once dogfooding is stable. @@ -89,7 +89,7 @@ Three ways: ```bash # Inside Claude Code -/ketchup-config validators disable testing-weak-assertions +/ketchup:config validators disable testing-weak-assertions ``` ```bash diff --git a/docs/reminders-guide.md b/docs/reminders-guide.md index eaf1baa..ee81b89 100644 --- a/docs/reminders-guide.md +++ b/docs/reminders-guide.md @@ -391,7 +391,7 @@ Commit project reminders (not personal preferences): See which reminders are active from within a Claude Code session: ``` -/ketchup-config reminders +/ketchup:config reminders ``` ### Test Reminder Loading diff --git a/docs/validators-guide.md b/docs/validators-guide.md index acb810a..e092a08 100644 --- a/docs/validators-guide.md +++ b/docs/validators-guide.md @@ -458,7 +458,7 @@ Consider NACK only if performance is critical for this change. From within a Claude Code session: ``` -/ketchup-config validators +/ketchup:config validators ``` ### Temporarily Disable diff --git a/skills/config/SKILL.md b/skills/config/SKILL.md index dda0496..90530e8 100644 --- a/skills/config/SKILL.md +++ b/skills/config/SKILL.md @@ -1,5 +1,5 @@ --- -name: ketchup-config +name: config description: Manage Ketchup configuration. Toggle validators, reminders, set hook options. user-invocable: true argument-hint: show | set | validators [enable|disable|reset] | reminders [enable|disable|priority|reset|add] diff --git a/skills/init/SKILL.md b/skills/init/SKILL.md index f33d7ed..da98904 100644 --- a/skills/init/SKILL.md +++ b/skills/init/SKILL.md @@ -1,5 +1,5 @@ --- -name: ketchup-init +name: init description: Initialize Ketchup in the current repository user-invocable: true --- From 9a0ccdfb7b148c90658714a94570098ceb3ec6b2 Mon Sep 17 00:00:00 2001 From: Igor Date: Sat, 25 Apr 2026 11:14:53 +0200 Subject: [PATCH 2/4] chore(global): add changeset --- .changeset/auto-196faaa2dd7eac9f.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/auto-196faaa2dd7eac9f.md diff --git a/.changeset/auto-196faaa2dd7eac9f.md b/.changeset/auto-196faaa2dd7eac9f.md new file mode 100644 index 0000000..72c7787 --- /dev/null +++ b/.changeset/auto-196faaa2dd7eac9f.md @@ -0,0 +1,5 @@ +--- +"ketchup": patch +--- + +- Restored the `ketchup-` prefix on skill names so commands invoke correctly as `/ketchup:init` and similar From 1abe689b9ea29ed90a04cdb63aa69c3d00a6bd6a Mon Sep 17 00:00:00 2001 From: Igor Date: Sat, 25 Apr 2026 11:23:41 +0200 Subject: [PATCH 3/4] fix(skills): move skills/ to commands/ so they auto-namespace as /ketchup:init etc --- skills/config/SKILL.md => commands/config.md | 2 -- skills/init/SKILL.md => commands/init.md | 2 -- 2 files changed, 4 deletions(-) rename skills/config/SKILL.md => commands/config.md (90%) rename skills/init/SKILL.md => commands/init.md (79%) diff --git a/skills/config/SKILL.md b/commands/config.md similarity index 90% rename from skills/config/SKILL.md rename to commands/config.md index 90530e8..fcf9a9a 100644 --- a/skills/config/SKILL.md +++ b/commands/config.md @@ -1,7 +1,5 @@ --- -name: config description: Manage Ketchup configuration. Toggle validators, reminders, set hook options. -user-invocable: true argument-hint: show | set | validators [enable|disable|reset] | reminders [enable|disable|priority|reset|add] --- diff --git a/skills/init/SKILL.md b/commands/init.md similarity index 79% rename from skills/init/SKILL.md rename to commands/init.md index da98904..0ac84c5 100644 --- a/skills/init/SKILL.md +++ b/commands/init.md @@ -1,7 +1,5 @@ --- -name: init description: Initialize Ketchup in the current repository -user-invocable: true --- !`node "${CLAUDE_PLUGIN_ROOT}/dist/bundle/scripts/init.js"` From 6c6ad696018d4ad3207837299fde1ee5fcfa1155 Mon Sep 17 00:00:00 2001 From: Igor Date: Sat, 25 Apr 2026 11:23:41 +0200 Subject: [PATCH 4/4] chore(global): add changeset --- .changeset/auto-8677c63e1a5befad.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/auto-8677c63e1a5befad.md diff --git a/.changeset/auto-8677c63e1a5befad.md b/.changeset/auto-8677c63e1a5befad.md new file mode 100644 index 0000000..9d5a2c2 --- /dev/null +++ b/.changeset/auto-8677c63e1a5befad.md @@ -0,0 +1,5 @@ +--- +"ketchup": patch +--- + +- Restored slash command namespacing so skills are invoked as /ketchup:init, /ketchup:review, etc.