feat(skills)!: remove kvb-skills-shortcuts

The operator dropped the conversation shortcuts (sobu, soco, socobu, socon, sona, sote) as unnecessary. Deletes the skill and tests/test_shortcuts.py, drops the tokens from the kvb-code-no-comments triggers, the shortcut branch from kvb-skills-auto step 3, the shortcuts row option from kvb-skills-tune, and the nodes and edge from the README organigram and skill map.

BREAKING CHANGE: the shortcut tokens no longer expand; use /kvb-git-commit-next and /kvb-git-commit-no-verify.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kevin Veen-BirkenbachandClaude Opus 5.5 committed 2026-11-03 13:57:13 +01:00
1 parent 41c1c57933
commit 42b66e3ddf
6 files changed
+11 -93

No files matched your search

-3
View File
@@ -65,7 +65,6 @@ flowchart LR
skills --> skills_tune[kvb-skills-tune] skills --> skills_tune[kvb-skills-tune]
skills --> skills_auto[kvb-skills-auto] skills --> skills_auto[kvb-skills-auto]
skills --> skills_essence[kvb-skills-essence] skills --> skills_essence[kvb-skills-essence]
skills --> skills_shortcuts[kvb-skills-shortcuts]
none --> cleanup[kvb-cleanup] none --> cleanup[kvb-cleanup]
none --> help[kvb-help] none --> help[kvb-help]
``` ```
@@ -137,7 +136,6 @@ flowchart LR
autotune[kvb-skills-tune] autotune[kvb-skills-tune]
autoskill[kvb-skills-auto] autoskill[kvb-skills-auto]
essence[kvb-skills-essence] essence[kvb-skills-essence]
shortcuts[kvb-skills-shortcuts]
end end
subgraph cat_none [no category] subgraph cat_none [no category]
cleanup[kvb-cleanup] cleanup[kvb-cleanup]
@@ -210,7 +208,6 @@ flowchart LR
dream --> autotune dream --> autotune
dream --> autoskill dream --> autoskill
autoskill --> autotune autoskill --> autotune
autoskill --> shortcuts
autotune --> essence autotune --> essence
test --> triage test --> triage
+2 -2
View File
@@ -3,8 +3,8 @@ name: kvb-code-no-comments
description: > description: >
Purge explanatory comments from staged and unstaged changes. Run Purge explanatory comments from staged and unstaged changes. Run
AUTOMATICALLY before every commit or stage request (commit, commit AUTOMATICALLY before every commit or stage request (commit, commit
no-verify, stage next, socon, sobu, socobu, "commite ..."); also on no-verify, stage next, "commite ..."); also on /kvb-code-no-comments or
/kvb-code-no-comments or comment complaints. comment complaints.
--- ---
When the operator asks to commit or stage, run this audit first and only When the operator asks to commit or stage, run this audit first and only
+7 -9
View File
@@ -18,15 +18,13 @@ vary), do the following:
2. Then propose, in one short paragraph: the repeated pattern you observed, 2. Then propose, in one short paragraph: the repeated pattern you observed,
a skill name suggestion, the trigger phrasing, and what the skill would a skill name suggestion, the trigger phrasing, and what the skill would
do. Ask whether to create it. do. Ask whether to create it.
3. On approval, write the skill: 3. On approval, write the skill: persist it exactly as the
- a conversation shortcut or expansion: add it to the `kvb-skills-shortcuts` skill `kvb-skills-tune` skill's **Persistence** section specifies — locate the
table instead of creating a new skill. operator's skills repository, write `skills/<name>/SKILL.md` there (or in
- anything else: persist it exactly as the `kvb-skills-tune` skill's the current project for project-specific behavior), then mirror the skill
**Persistence** section specifies — locate the operator's skills directory into `~/.claude/skills/` and `~/.agents/skills/`, plus the
repository, write `skills/<name>/SKILL.md` there (or in the current project's `.claude/skills/` and `.agents/skills/` when it is
project for project-specific behavior), then mirror the skill directory project-specific.
into `~/.claude/skills/` and `~/.agents/skills/`, plus the project's
`.claude/skills/` and `.agents/skills/` when it is project-specific.
Follow the local naming conventions and keep the skill a thin, Follow the local naming conventions and keep the skill a thin,
single-purpose instruction; route to an authoritative doc when one single-purpose instruction; route to an authoritative doc when one
exists instead of duplicating it. exists instead of duplicating it.
-18
View File
@@ -1,18 +0,0 @@
---
name: kvb-skills-shortcuts
description: >
Operator conversation shortcuts. Trigger when the message is exactly one of
these tokens, optionally with arguments: sobu, soco, socobu, socon, sona,
sote. Expand it and act on the expanded instruction.
---
When an operator message is one of the shortcuts below, expand it to the meaning and act on it.
| Shortcut | Meaning |
| --- | --- |
| `sobu` | Stage next bundle: stage the next logical bundle of verified changes, explain what it does, and list what still remains uncommitted. |
| `soco` | Commit: commit the currently staged changes (pre-commit hooks run). |
| `socobu` | Commit no-verify, then stage next bundle: run `socon` followed by `sobu`. |
| `socon` | Commit no-verify: commit the currently staged changes with `--no-verify`. |
| `sona` | New alias: add the shortcut the operator states to the appropriate table, keeping it sorted. |
| `sote` | Run `make test`. |
+2 -2
View File
@@ -81,8 +81,8 @@ Ask in this order, at most four questions per call:
2. **Target** - which finding becomes a skill, or which existing skill gets 2. **Target** - which finding becomes a skill, or which existing skill gets
optimized. One option per candidate, each with its measured cost in the optimized. One option per candidate, each with its measured cost in the
description. description.
3. **Shape** - for a new skill: `Standalone skill`, `Row in the 3. **Shape** - for a new skill: `Standalone skill`, `Extend an existing
kvb-skills-shortcuts skill`, `Extend an existing skill`, `Memory entry instead of a skill`. skill`, `Memory entry instead of a skill`.
For an optimization: `Tighten wording only`, `Change the trigger`, `Add For an optimization: `Tighten wording only`, `Change the trigger`, `Add
rules`, `Split into two skills`, `Merge into another skill`. rules`, `Split into two skills`, `Merge into another skill`.
4. **Placement** - `Operator skills repository (portable)` or 4. **Placement** - `Operator skills repository (portable)` or
-59
View File
@@ -1,59 +0,0 @@
"""Validate the kvb-skills-shortcuts skill table: rows present, sorted, ``soc``-prefixed,
no two adjacent consonants."""
from __future__ import annotations
import re
import unittest
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
SKILL = REPO_ROOT / "skills" / "kvb-skills-shortcuts" / "SKILL.md"
ROW_RE = re.compile(r"^\|\s*`(?P<shortcut>[^`]+)`\s*\|")
VOWELS = frozenset("aeiou")
def _has_consonant_cluster(name: str) -> bool:
prev_consonant = False
for char in name:
if not char.isalpha():
prev_consonant = False
continue
is_consonant = char.lower() not in VOWELS
if is_consonant and prev_consonant:
return True
prev_consonant = is_consonant
return False
class TestShortcuts(unittest.TestCase):
def setUp(self):
self.assertTrue(SKILL.is_file(), f"missing {SKILL}")
self.shortcuts = [
match.group("shortcut")
for line in SKILL.read_text(encoding="utf-8").splitlines()
if (match := ROW_RE.match(line))
]
def test_shortcuts_present(self):
self.assertTrue(self.shortcuts, "no shortcut rows found in kvb-skills-shortcuts skill")
def test_shortcuts_sorted_ascending(self):
self.assertEqual(
self.shortcuts,
sorted(self.shortcuts),
f"shortcuts table not sorted; expected {sorted(self.shortcuts)}",
)
def test_shortcuts_start_with_so(self):
bad = [s for s in self.shortcuts if not s.startswith("so")]
self.assertFalse(bad, f"shortcuts not starting with 'so': {bad}")
def test_no_consecutive_consonants(self):
bad = [s for s in self.shortcuts if _has_consonant_cluster(s)]
self.assertFalse(bad, f"shortcuts with two adjacent consonants: {bad}")
if __name__ == "__main__":
unittest.main()