Kermit
Format and run git commits using Conventional Commits style with emoji prefix, point-form file bodies, and BREAKING CHANGE footer. Manages CHANGELOG.md via hooks. Use --init to initialize changelog.From its SKILL.md
npx -y skills add ndisisnd/kermit --skill kermitAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.8 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it
Usage
Invoke: /kermit [--pr] [--init] [--changelog-reset] [--changelog-sync] [--release] — "commit this", "make a commit", "commit my changes"
Natural-language routing (no flag needed): PR intent ("make/open/raise a PR", "open a pull request to <base>", "PR this branch") → --pr; if the user names a base ("…to develop"), use it as the PR base. Release intent ("write release notes", "cut a release", "do a release") → --release. Changelog-backfill intent ("check my changelog", "log missing commits", "sync the changelog", "backfill the changelog") → --changelog-sync. Otherwise commit intent → the default commit flow.
--pr: run the PR protocol (refs/protocol-pr.md) — open/update a GitHub pull request for the current branch viagh. Operates on commits already on the branch; does not create a commit.--init: re-run the full init block regardless of prior initialization, then exit.--changelog-reset [--apply]: rewrite the existing changelog to current conventions (entries grouped under## <date>sections, numbered### [N], normalised bullets); shows a diff and confirms before writing (--applyskips the confirm), then exits.--changelog-sync: run the changelog-sync protocol (refs/protocol-changelog-sync.md) — find commits that landed without a changelog entry, report them, and backfill the missing entries. Writes only the changelog; makes no commit.--release: run the release protocol (refs/protocol-release.md) — write user-facing release notes toRELEASES.mdfor the changes since the last release, organised by type with a highlight summary, then commit them (bumpingpackage.json's version) and publish a GitHub release viagh. Operates on committed history; the only commit it makes is the release commit itself.
Inputs
| Name | Format | Source |
|---|---|---|
| staged diff | text | git diff --staged (rtk-prefixed if available) |
| changelog flag | bool | /tmp/commit_cl_cache (PreToolUse hook) |
| branch state (PR mode) | text | git rev-parse / git log $BASE..HEAD / gh pr view |
Outputs
| Name | Format | Destination |
|---|---|---|
| commit message | text | shown inline for approval |
| CHANGELOG.md entry | prose | appended on confirmed commit |
| backfilled entries (changelog-sync mode) | prose | written to the changelog; no commit made |
| git commit / push | shell | run on user confirmation |
| pull request (PR mode) | shell | created/updated via gh pr create/gh pr edit, URL shown |
| RELEASES.md notes (release mode) | prose | prepended, then committed with a package.json version bump |
| GitHub release (release mode) | shell | published via gh release create v<x.y.z>, URL shown |
Protocol
Four protocol modes, each in its own ref:
- Commit (default) —
refs/protocol-commit.md: format a message, gate it, commit, and optionally push. - PR —
refs/protocol-pr.md: open/update a pull request for the current branch. - Release —
refs/protocol-release.md: write release notes, commit them, publish a GitHub release. - Changelog-sync —
refs/protocol-changelog-sync.md: backfill changelog entries for commits that landed without one.
kermit keeps two files under .claude/kermit/: pref.json holds stable config
(initialized, init_commit, changelog.*, release_guard, gate_mode) and is safe to
commit; state.json holds volatile runtime state (last_logged_commit, last_number,
last_released_number, backfill) that is rewritten on every commit and must stay git-ignored. Both are read
once at the mode-check step below — cache their values for the rest of the run rather
than re-reading either file in later steps.
Mode check (runs before everything else)
--changelog-reset→ readrefs/changelog-reset.md, follow it end-to-end, then exit — do not run the commit flow.- Otherwise → read
.claude/kermit/pref.jsonand.claude/kermit/state.json. If pref is absent, create it with{"initialized":false}. Ifinitializedisfalseor--initwas passed: readrefs/protocol-init.mdand follow it end-to-end, then continue as it directs. Otherwise fall through to the protocol dispatch below.- Legacy migration. Older prefs kept the state fields inside
pref.json. Ifstate.jsonis absent, create it now — seedlast_logged_commitfrompref.last_logged_commit,last_numberfrompref.changelog.last_number,last_released_numberto0, andbackfillfrompref.backfill(each defaulting tonull/0when the legacy key is missing), then rewritepref.jsonwithout those three keys and ensure.claude/kermit/state.jsonis in.gitignore(grep -qxF '.claude/kermit/state.json' .gitignore 2>/dev/null || printf '.claude/kermit/state.json\n' >> .gitignore). Cache the migrated state for the run.
- Legacy migration. Older prefs kept the state fields inside
Protocol dispatch
Select the protocol mode and read its ref, then follow it end-to-end:
--releasewas passed → readrefs/protocol-release.mdand follow it.--prwas passed → readrefs/protocol-pr.mdand follow it.--changelog-syncwas passed → readrefs/protocol-changelog-sync.mdand follow it.- Otherwise (default commit flow) → read
refs/protocol-commit.mdand follow it.
Dedicated to JC 💕
What ships with it: 11 files
49.5 KB alongside SKILL.md, 1 of them executable
hooks/
- kermit-merge-guard.shruns4.2 KB
refs/
- changelog-protocol.md3.3 KB
- changelog-reset.md4.1 KB
- protocol-changelog-sync.md6.0 KB
- protocol-commit.md5.6 KB
- protocol-init.md8.2 KB
- protocol-pr.md5.7 KB
- protocol-release.md8.6 KB
- template-release.md3.5 KB
- pref.json158 B
- state.json102 B