Use portable Agent Skills metadata and one repo-local source for both Claude Code and OpenCode. Deats, - replace harness-only frontmatter and dynamic context - make `commit-msg` runtime-aware and review-first - add a thin OpenCode command and integration docs - guard `np.searchsorted()` guidance before OOB indexing - record OpenCode prompt provenance Prompt-IO: ai/prompt-io/opencode/20260721T205228Z_58ffe487_prompt_io.md (this patch was generated in some part by `opencode` using `gpt-5.6-sol` (`openai`)) |
||
|---|---|---|
| .. | ||
| plans | ||
| README.md | ||
README.md
Claude Code Integration
Claude Code integration for piker’s shared coding-harness skills.
Skills
| Skill | Invocable | Description |
|---|---|---|
commit-msg |
/commit-msg |
Generate piker-style commit messages |
piker-conc-expert |
auto | Actor-tree and structured-concurrency invariants |
piker-profiling |
auto | Profiler API patterns for perf work |
piker-slang |
auto | Communication style + slang guide |
py-codestyle |
auto | Python source conventions |
pyqtgraph-optimization |
auto | Batch rendering patterns |
timeseries-optimization |
auto | NumPy/Polars perf patterns |
Skills marked auto are background knowledge applied automatically when Claude detects relevance. Only commit-msg is user-invoked via slash command.
Portable skill source files live under .claude/skills/<skill-name>/SKILL.md and are shared with OpenCode. Claude-specific behavior belongs in command or settings files, not the shared skill bodies.
/commit-msg
Generate piker-style git commit messages trained on 500+ commits from the repo history.
Quick Start
# basic - analyzes staged diff automatically
/commit-msg
# with scope hint
/commit-msg .ib.feed: fix bar trimming
# with description context
/commit-msg refactor position tracking
What It Does
- Reads staged changes via dynamic context injection (
git diff --staged --stat) - Reads recent commits for style reference (
git log --oneline -10) - Generates a commit message following piker conventions (verb choice, backtick refs, colon prefixes, section markers, etc.)
- Writes the message to two files:
.claude/<timestamp>_<hash>_commit_msg.md.claude/git_commit_msg_LATEST.md(overwritten each time)
Arguments
The optional argument after /commit-msg is passed as $ARGUMENTS and used as scope or description context. Examples:
| Invocation | Effect |
|---|---|
/commit-msg |
Infer scope from diff |
/commit-msg .ib.feed |
Use .ib.feed: prefix |
/commit-msg fix the null seg crash |
Use as description hint |
Output Format
Subject line: - ~50 chars target, 67 max - Present tense verb (Add, Drop, Fix, Factor..) - Backtick-wrapped code refs - Optional module prefix (.ib.feed: ...)
Body (when needed): - 67 char line max - Section markers: Also,, Deats,, Further, - - bullet lists for multiple changes - Piker abbreviations (msg, mod, impl, deps, bc, obvi, prolly..)
Footer (always):
(this patch was generated in some part by
`claude-code` using `<model>` (`<provider>`))
Output Files
After generation, the commit message is written to:
.claude/
├── skills/commit-msg/msgs/
│ └── <timestamp>_<hash>_commit_msg.md
└── git_commit_msg_LATEST.md # latest
Where <timestamp> is ISO-8601 with seconds and <hash> is the first 7 chars of the current HEAD commit.
Use the latest file with an editor review before commit:
git commit --edit --file .claude/git_commit_msg_LATEST.mdExamples
Simple one-liner output:
Add `MktPair.fqme` property for symbol resolution
Multi-file change output:
Factor `.claude/skills/` into proper subdirs
Deats,
- use portable Agent Skills frontmatter
- keep harness commands as thin delegates
- share supporting references across harnesses
(this patch was generated in some part by
`claude-code` using `<model>` (`<provider>`))
Shared Frontmatter
Skills use the Agent Skills fields understood by both Claude Code and OpenCode:
---
name: commit-msg
description: >
Generate piker-style git commit messages. Use when...
compatibility: Requires git.
metadata:
author: goodboy
version: "1.0"
---Live git context is gathered by the skill at execution time. Claude-only dynamic interpolation and tool-policy frontmatter are intentionally excluded so another harness can execute the same workflow.