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`))backfiller_deep_fixes
parent
c6ec3d4144
commit
43d7a3edad
|
|
@ -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/<service>/<entry>.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 `<harness>` using `<model>` (`<provider>`))
|
|
||||||
```
|
|
||||||
|
|
||||||
When it generated only the message, append:
|
|
||||||
|
|
||||||
```
|
|
||||||
(this commit msg was generated in some part by `<harness>` using `<model>` (`<provider>`))
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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/<timestamp>_<hash>_commit_msg.md`
|
|
||||||
- `.claude/git_commit_msg_LATEST.md`
|
|
||||||
|
|
||||||
Use UTC `<timestamp>` 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
|
|
||||||
|
|
@ -110,6 +110,12 @@ ENV/
|
||||||
.claude/*_commit_*.md
|
.claude/*_commit_*.md
|
||||||
.claude/*_commit*.toml
|
.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
|
# nix develop --profile .nixdev
|
||||||
.nixdev*
|
.nixdev*
|
||||||
|
|
||||||
|
|
@ -130,3 +136,172 @@ gitea/
|
||||||
|
|
||||||
# LLM conversations that should remain private
|
# LLM conversations that should remain private
|
||||||
docs/conversations/
|
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
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
Loading…
Reference in New Issue