From 43d7a3edad851624266744e5538905a8fde8da48 Mon Sep 17 00:00:00 2001 From: goodboy Date: Fri, 24 Jul 2026 17:50:12 -0400 Subject: [PATCH] Use canonical `ai.skillz` provider links Replace the local `commit-msg` base and OpenCode shim with canonical ignored links while preserving Piker's tracked style guide. Also, - expose the full skill catalog to Claude and OpenCode - add canonical slash commands, including `run-tests` - keep hybrid runtime state local (this patch was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`)) --- .claude/skills/commit-msg/SKILL.md | 119 -------------------- .gitignore | 175 +++++++++++++++++++++++++++++ .opencode/commands/commit-msg.md | 10 -- 3 files changed, 175 insertions(+), 129 deletions(-) delete mode 100644 .claude/skills/commit-msg/SKILL.md delete mode 100644 .opencode/commands/commit-msg.md diff --git a/.claude/skills/commit-msg/SKILL.md b/.claude/skills/commit-msg/SKILL.md deleted file mode 100644 index 0bda9cb0..00000000 --- a/.claude/skills/commit-msg/SKILL.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -name: commit-msg -description: > - Generate piker-style git commit messages from staged - changes or prompt input. Use when the user asks for a - commit message or invokes a commit-message command. -compatibility: > - Requires git and a coding harness able to read and - write files in the active checkout. -metadata: - author: goodboy - version: "1.0" ---- - -# Piker Git Commit Message Generator - -Generate a commit message from the staged diff following -the piker project's conventions, learned from 500 repo -commits. - -For the full style guide with verb frequencies, -section markers, abbreviations, piker-specific terms, -and examples, see -[style-guide-reference.md](./style-guide-reference.md). - -## Safety - -- Never run `git commit`, amend, rebase, merge, or push - unless the user explicitly requests that operation. -- Do not stage or unstage files for a single-message run. -- Never change issue, plan, or checklist state merely - because the related implementation is complete. -- Preserve unrelated worktree changes. - -## Working Context - -1. Run `git rev-parse --show-toplevel`, - `git rev-parse --git-dir`, and - `git rev-parse --git-common-dir`. -2. If the git dir differs from the common dir, report the - active worktree before generating the message. -3. Inspect `git status --short`, the complete staged diff, - `git diff --staged --check`, and recent commit history. -4. If nothing is staged, stop and tell the user. Prompt - text may clarify intent but does not replace a staged - patch unless the user explicitly asks for a draft with - no staged changes. - -## Message Style - -- **Subject**: ~50 chars, present tense verb, use - backticks for code refs; hard maximum 67 columns -- **Body**: only for complex/multi-file changes, - filled close to a 67-column maximum -- **Section markers**: Also, / Deats, / Other, -- **Bullets**: use `-` style -- **Tone**: technical but casual (piker style) - -Use any user-supplied scope or description as context, -but verify it against the staged patch. The message must -describe the complete staged boundary, not only the most -obvious file. - -## Provenance - -If staged paths include prompt-I/O log entries under -`ai/prompt-io/`, add one trailer per non-raw log file: - -``` -Prompt-IO: ai/prompt-io//.md -``` - -When the patch has substantive AI-authored changes but no -prompt-I/O entry is staged, remind the user that repository -policy may require one. Do not block message generation. - -Always identify the active harness and model from runtime -context rather than hardcoding Claude Code or OpenCode. - -When the harness assisted with the patch, append: - -``` -(this patch was generated in some part by `` using `` (``)) -``` - -When it generated only the message, append: - -``` -(this commit msg was generated in some part by `` using `` (``)) -``` - -## Output Files - -Write the final message to both of these paths relative to -the active checkout returned by `git rev-parse ---show-toplevel`: - -- `.claude/skills/commit-msg/msgs/__commit_msg.md` -- `.claude/git_commit_msg_LATEST.md` - -Use UTC `` format `YYYYMMDDTHHMMSSZ` and the -first seven characters of the current `HEAD` hash. Create -the archive directory when needed. The `.claude` path is a -legacy repository artifact location shared by all coding -harnesses; it does not imply which harness generated the -message. - -Finish by reporting both paths and this review-first -command without running it: - -``` -git commit --edit --file .claude/git_commit_msg_LATEST.md -``` - ---- - -**Analysis date:** 2026-01-27 -**Commits analyzed:** 500 from piker repository -**Maintained by:** Tyler Goodlet diff --git a/.gitignore b/.gitignore index 0a058bba..347167a2 100644 --- a/.gitignore +++ b/.gitignore @@ -110,6 +110,12 @@ ENV/ .claude/*_commit_*.md .claude/*_commit*.toml +# ai.skillz/commit-msg +.claude/skills/commit-msg/msgs/ +.claude/skills/commit-msg/conf.toml +.claude/git_commit_msg_LATEST.md +.opencode/skills/commit-msg/SKILL.md + # nix develop --profile .nixdev .nixdev* @@ -130,3 +136,172 @@ gitea/ # LLM conversations that should remain private docs/conversations/ + +# BEGIN ai.skillz: direct:symlink:claude:run-tests +/.claude/skills/run-tests/SKILL.md +# END ai.skillz: direct:symlink:claude:run-tests + +# BEGIN ai.skillz: direct:symlink:opencode:run-tests +/.opencode/skills/run-tests/SKILL.md +# END ai.skillz: direct:symlink:opencode:run-tests + +# BEGIN ai.skillz: direct:symlink:opencode:command:run-tests +/.opencode/commands/run-tests.md +# END ai.skillz: direct:symlink:opencode:command:run-tests + +# BEGIN ai.skillz: direct:symlink:claude:close-wkt +/.claude/skills/close-wkt +# END ai.skillz: direct:symlink:claude:close-wkt + +# BEGIN ai.skillz: direct:symlink:opencode:close-wkt +/.opencode/skills/close-wkt +# END ai.skillz: direct:symlink:opencode:close-wkt + +# BEGIN ai.skillz: runtime:code-review-changes +.claude/review_context.md +.claude/review_regression.md +# END ai.skillz: runtime:code-review-changes + +# BEGIN ai.skillz: direct:symlink:claude:code-review-changes +/.claude/skills/code-review-changes +# END ai.skillz: direct:symlink:claude:code-review-changes + +# BEGIN ai.skillz: direct:symlink:opencode:code-review-changes +/.opencode/skills/code-review-changes +# END ai.skillz: direct:symlink:opencode:code-review-changes + +# BEGIN ai.skillz: runtime:commit-msg +.claude/skills/commit-msg/msgs/ +.claude/skills/commit-msg/conf.toml +.claude/git_commit_msg_LATEST.md +# END ai.skillz: runtime:commit-msg + +# BEGIN ai.skillz: direct:symlink:claude:commit-msg +/.claude/skills/commit-msg/SKILL.md +# END ai.skillz: direct:symlink:claude:commit-msg + +# BEGIN ai.skillz: direct:symlink:opencode:commit-msg +/.opencode/skills/commit-msg/SKILL.md +# END ai.skillz: direct:symlink:opencode:commit-msg + +# BEGIN ai.skillz: direct:symlink:claude:dep-supersede-scan +/.claude/skills/dep-supersede-scan +# END ai.skillz: direct:symlink:claude:dep-supersede-scan + +# BEGIN ai.skillz: direct:symlink:opencode:dep-supersede-scan +/.opencode/skills/dep-supersede-scan +# END ai.skillz: direct:symlink:opencode:dep-supersede-scan + +# BEGIN ai.skillz: direct:symlink:claude:gish +/.claude/skills/gish +# END ai.skillz: direct:symlink:claude:gish + +# BEGIN ai.skillz: direct:symlink:opencode:gish +/.opencode/skills/gish +# END ai.skillz: direct:symlink:opencode:gish + +# BEGIN ai.skillz: direct:symlink:claude:inter-skill-review +/.claude/skills/inter-skill-review +# END ai.skillz: direct:symlink:claude:inter-skill-review + +# BEGIN ai.skillz: direct:symlink:opencode:inter-skill-review +/.opencode/skills/inter-skill-review +# END ai.skillz: direct:symlink:opencode:inter-skill-review + +# BEGIN ai.skillz: runtime:open-wkt +.claude/wkts/ +claude_wkts +# END ai.skillz: runtime:open-wkt + +# BEGIN ai.skillz: direct:symlink:claude:open-wkt +/.claude/skills/open-wkt +# END ai.skillz: direct:symlink:claude:open-wkt + +# BEGIN ai.skillz: direct:symlink:opencode:open-wkt +/.opencode/skills/open-wkt +# END ai.skillz: direct:symlink:opencode:open-wkt + +# BEGIN ai.skillz: direct:symlink:claude:plan-io +/.claude/skills/plan-io +# END ai.skillz: direct:symlink:claude:plan-io + +# BEGIN ai.skillz: direct:symlink:opencode:plan-io +/.opencode/skills/plan-io +# END ai.skillz: direct:symlink:opencode:plan-io + +# BEGIN ai.skillz: runtime:pr-msg +.claude/skills/pr-msg/msgs/ +.claude/skills/pr-msg/pr_msg_LATEST.md +# END ai.skillz: runtime:pr-msg + +# BEGIN ai.skillz: direct:symlink:claude:pr-msg +/.claude/skills/pr-msg/SKILL.md +/.claude/skills/pr-msg/references +/.claude/skills/pr-msg/scripts +# END ai.skillz: direct:symlink:claude:pr-msg + +# BEGIN ai.skillz: direct:symlink:opencode:pr-msg +/.opencode/skills/pr-msg/SKILL.md +/.opencode/skills/pr-msg/references +/.opencode/skills/pr-msg/scripts +# END ai.skillz: direct:symlink:opencode:pr-msg + +# BEGIN ai.skillz: direct:symlink:claude:prompt-io +/.claude/skills/prompt-io +# END ai.skillz: direct:symlink:claude:prompt-io + +# BEGIN ai.skillz: direct:symlink:opencode:prompt-io +/.opencode/skills/prompt-io +# END ai.skillz: direct:symlink:opencode:prompt-io + +# BEGIN ai.skillz: direct:symlink:claude:py-codestyle +/.claude/skills/py-codestyle +# END ai.skillz: direct:symlink:claude:py-codestyle + +# BEGIN ai.skillz: direct:symlink:opencode:py-codestyle +/.opencode/skills/py-codestyle +# END ai.skillz: direct:symlink:opencode:py-codestyle + +# BEGIN ai.skillz: direct:symlink:claude:resolve-conflicts +/.claude/skills/resolve-conflicts +# END ai.skillz: direct:symlink:claude:resolve-conflicts + +# BEGIN ai.skillz: direct:symlink:opencode:resolve-conflicts +/.opencode/skills/resolve-conflicts +# END ai.skillz: direct:symlink:opencode:resolve-conflicts + +# BEGIN ai.skillz: runtime:taken-export +.ai/taken/exports/ +# END ai.skillz: runtime:taken-export + +# BEGIN ai.skillz: direct:symlink:claude:taken-export +/.claude/skills/taken-export +# END ai.skillz: direct:symlink:claude:taken-export + +# BEGIN ai.skillz: direct:symlink:opencode:taken-export +/.opencode/skills/taken-export +# END ai.skillz: direct:symlink:opencode:taken-export + +# BEGIN ai.skillz: direct:symlink:claude:yt-url-lookup +/.claude/skills/yt-url-lookup +# END ai.skillz: direct:symlink:claude:yt-url-lookup + +# BEGIN ai.skillz: direct:symlink:opencode:yt-url-lookup +/.opencode/skills/yt-url-lookup +# END ai.skillz: direct:symlink:opencode:yt-url-lookup + +# BEGIN ai.skillz: direct:symlink:claude:command:branch-in-new-terminal +/.claude/commands/branch-in-new-terminal.md +# END ai.skillz: direct:symlink:claude:command:branch-in-new-terminal + +# BEGIN ai.skillz: runtime:branch-in-new-terminal +.claude/.current_session +# END ai.skillz: runtime:branch-in-new-terminal + +# BEGIN ai.skillz: direct:symlink:opencode:command:commit-msg +/.opencode/commands/commit-msg.md +# END ai.skillz: direct:symlink:opencode:command:commit-msg + +# BEGIN ai.skillz: direct:symlink:opencode:command:taken-export +/.opencode/commands/taken-export.md +# END ai.skillz: direct:symlink:opencode:command:taken-export diff --git a/.opencode/commands/commit-msg.md b/.opencode/commands/commit-msg.md deleted file mode 100644 index 362f0670..00000000 --- a/.opencode/commands/commit-msg.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -description: Generate a piker-style message for staged changes. ---- - -Load the `commit-msg` skill and follow it completely for the currently -staged changes. Do not run `git commit` unless the user explicitly asks. -Keep all workflow and style decisions in the shared skill rather than -duplicating them in this OpenCode command. - -Additional context from the user: $ARGUMENTS