Moar claude skillz, refinements, factorings and extensions#428
Moar claude skillz, refinements, factorings and extensions#428
claude skillz, refinements, factorings and extensions#428Conversation
There was a problem hiding this comment.
Pull request overview
Adds and refines in-repo “claude” skill definitions and supporting repo config to improve workflows around testing, PR description drafting, commit message generation, and git worktree lifecycle management.
Changes:
- Add new skills:
/run-tests,/pr-msg,/open-wkt,/close-wkt, plus a PR description format reference. - Extend
/commit-msgskill with worktree awareness and review/regression context handling. - Update repo ignore rules and
.claude/settings.local.jsonpermissions to support the new skill workflows.
Reviewed changes
Copilot reviewed 8 out of 9 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
.gitignore |
Adds ignore rules for generated commit/PR message artifacts (needs alignment with new worktree + pr-msg outputs). |
.claude/skills/run-tests/SKILL.md |
New test-running skill guide and command construction rules. |
.claude/skills/pr-msg/format-reference.md |
Canonical cross-forge PR description template and linking strategy. |
.claude/skills/pr-msg/SKILL.md |
New PR description generation workflow (path conventions need to match .gitignore/reference). |
.claude/skills/open-wkt/SKILL.md |
New worktree lifecycle skill spec (expects .gitignore support for .claude/wkts/). |
.claude/skills/close-wkt/SKILL.md |
New worktree teardown skill spec. |
.claude/skills/commit-msg/SKILL.md |
Enhances commit message workflow with worktree + review/regression context + GH comment patching. |
.claude/settings.local.json |
Broadens allowed tool invocations to support new skills. |
.claude/ai_notes/docs_todos.md |
Adds internal notes on improving docs example synchronization. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
.claude/skills/commit-msg/SKILL.md
Outdated
| root and `git rev-parse --git-common-dir` to check | ||
| if the cwd is inside a worktree. If the common-dir | ||
| differs from the git-dir, you are in a worktree. | ||
| Tell the user which tree you're operating on | ||
| (e.g. "generating commit msg for worktree | ||
| `remote-exc-registry-tests`"). |
There was a problem hiding this comment.
Step 0 says to detect a worktree by comparing git rev-parse --git-common-dir with --git-dir, but the instructions only tell the agent to run --git-common-dir. Add git rev-parse --git-dir (or adjust the wording) so the worktree check is actually actionable/correct.
| root and `git rev-parse --git-common-dir` to check | |
| if the cwd is inside a worktree. If the common-dir | |
| differs from the git-dir, you are in a worktree. | |
| Tell the user which tree you're operating on | |
| (e.g. "generating commit msg for worktree | |
| `remote-exc-registry-tests`"). | |
| root, then run both `git rev-parse --git-common-dir` | |
| and `git rev-parse --git-dir` to check if the cwd is | |
| inside a worktree. If the common-dir differs from the | |
| git-dir, you are in a worktree. Tell the user which | |
| tree you're operating on (e.g. "generating commit msg | |
| for worktree `remote-exc-registry-tests`"). |
There was a problem hiding this comment.
🤖 response authored by
claude-code
Valid catch. This was fixed in 7592a9b8 (added
--git-dir alongside --git-common-dir) but
regressed when d9eb6801 replaced the inline file
with a symlink to ai.skillz — whose copy lacked
the fix. Re-applied to the ai.skillz source;
propagates via symlink.
📎 originally fixed in
7592a9b8, regressed byd9eb6801, re-fixed in908ebae
.claude/skills/run-tests/SKILL.md
Outdated
| | `-k <expr>` | pytest keyword filter | | ||
| | `-v` / `-vv` | Verbosity | | ||
| | `-s` | No output capture (useful with `--tpdb`) | | ||
| | `--timeout <secs>` | Override default 30s test timeout | |
There was a problem hiding this comment.
This skill advertises --timeout <secs> as a supported pytest flag and mentions a “default 30s test timeout”, but the repo doesn’t appear to depend on pytest-timeout (and tool.pytest.ini_options doesn’t configure a timeout). As written, --timeout will error on invocation. Either remove this option from the reference or add the required plugin/dependency and document where the default timeout is defined.
| | `--timeout <secs>` | Override default 30s test timeout | |
There was a problem hiding this comment.
🤖 response authored by
claude-code
Correct — pytest-timeout is not a dep. Row removed.
📎 already addressed in
7592a9b8
.claude/skills/pr-msg/SKILL.md
Outdated
| - `.claude/skills/pr-msg/msgs/<timestamp>_<branch>_pr_msg.md` | ||
| * `<timestamp>` from `date -u +%Y%m%dT%H%M%SZ` | ||
| * `<branch>` from `git branch --show-current` | ||
| - `.claude/skills/pr-msg/pr_msg_LATEST.md` |
There was a problem hiding this comment.
The skill says it writes the latest draft to .claude/skills/pr-msg/pr_msg_LATEST.md, but the format reference and .gitignore exception are for msgs/pr_msg_LATEST.md. Align the “latest” output path with the documented post-submission layout (and the ignore rules) so consumers look in the right place and the file has the intended VCS status (tracked vs ignored).
| - `.claude/skills/pr-msg/pr_msg_LATEST.md` | |
| - `.claude/skills/pr-msg/msgs/pr_msg_LATEST.md` |
There was a problem hiding this comment.
🤖 response authored by
claude-code
Resolved differently than suggested: kept LATEST at
skill root (.claude/skills/pr-msg/pr_msg_LATEST.md)
and updated .gitignore + format-reference.md to
match, rather than moving it into msgs/. The root
path is more convenient for quick access; msgs/ is
for timestamped archives.
📎 already addressed in
7592a9b8
35038bd to
70a02ed
Compare
- `/commit-msg`: add `--git-dir` alongside `--git-common-dir` so worktree detection is actually actionable. - `/run-tests`: drop `--timeout` flag — project doesn't dep on `pytest-timeout`. - `/pr-msg` + `.gitignore`: fix LATEST path — lives at skill root, not in `msgs/`. Review: PR #428 (copilot-pull-request-reviewer) #428 (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
9697980 to
ca20326
Compare
- `/commit-msg`: add `--git-dir` alongside `--git-common-dir` so worktree detection is actually actionable. - `/run-tests`: drop `--timeout` flag — project doesn't dep on `pytest-timeout`. - `/pr-msg` + `.gitignore`: fix LATEST path — lives at skill root, not in `msgs/`. Review: PR #428 (copilot-pull-request-reviewer) #428 (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
ca20326 to
e4b4caa
Compare
- `/commit-msg`: add `--git-dir` alongside `--git-common-dir` so worktree detection is actually actionable. - `/run-tests`: drop `--timeout` flag — project doesn't dep on `pytest-timeout`. - `/pr-msg` + `.gitignore`: fix LATEST path — lives at skill root, not in `msgs/`. Review: PR #428 (copilot-pull-request-reviewer) #428 (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
e4b4caa to
8a02ce5
Compare
Add `.claude/review_context.md` and `.claude/review_regression.md` to `.gitignore` — these are single-use per-PR artifacts written by `/code-review-changes` and consumed by `/commit-msg`, not meant to be tracked. Review: PR #428 (Copilot) #428 (review) (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
- update skill to write to `.claude/skills/commit-msg/msgs/` - add new path + `_LATEST.md` to `.gitignore` (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Notes on using sphinx `literalinclude` to auto-sync `docs/README.rst` code examples with actual source files instead of manual duplication. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
(this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
(this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Add pre-flight import/collect checks, a mod-to-test mapping table, `--lf` re-run patterns, and a known-flaky test list to avoid wasted investigation time. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Detect whether we're in a worktree via `git rev-parse` and write output files relative to the worktree root so `git commit --edit --file` paths always work. Also, - mv backup msgs to `msgs/` subdir under the skill - document the `mkdir -p` step for first-time use (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Sibling to `/commit-msg` but targeting branch-level patch/pull-request description generation. Designed to work across GitHub, Gitea, SourceHut, and GitLab md renderers. Deats, - `SKILL.md` defines the step-by-step process: auto-detect commit-link base URL from remotes, reference-style `[hash][hash]` linking, Summary / Motivation / Scopes-changed sections, commented-out Links placeholder, raw-md output for copy-paste. - `format-reference.md` documents the canonical PR structure: template, ref-link strategy rationale, commit-URL patterns per service, Python namespace-resolution scope naming convention. - `msgs/` dir ready for generated output. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
- Hard-wrap all prose to 67 char max in both `SKILL.md` and `format-reference.md`. - Add `<!-- pr-msg-meta` YAML-ish comment block for tracking branch, base, and per-service submission status. - Add cross-references section + ref-link stubs for `github-pr`, `gitea-pr`, `srht-patch` — all commented out at generation time, fillable post-submit. - Add post-submission workflow docs: metadata fill, cross-ref uncomment, per-service subdir copies (`msgs/<service>/<num>_pr_msg.md`), cross-linking. - Add PR/Patch URL patterns table to format ref. - Adjust footer text: "pr content" instead of "pr-msg". - Add `Bash(mkdir *)` to allowed tools. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Add `.gitignore` rules for generated commit-msg and pr-msg output files under `.claude/skills/*/msgs/`, but whitelist `pr_msg_LATEST.md` so it stays tracked. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Add `Bash(git remote:*)` to the permissions allow list so `/pr-msg` skill can auto-detect hosting remotes. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Codify the workflow expectation that code fixes applied during test iteration stay unstaged; the human drives all `git add` / `git commit` ops and can use `/commit-msg` to generate the msg. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Teach the skill to check for `.claude/review_regression.md` (written by `/code-review-changes` when a self-caused regression is found and fixed) and incorporate `Regressed-by:` + `Found-via:` fields into the commit msg body. Also add a formatting template + example so the subject line describes the actual fix while the trailer carries the regression provenance. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Pre-flight checks now verify that the active Python resolves modules from the worktree's own venv (not the main repo's editable install). Includes a `uv sync` recipe to bootstrap a worktree-local venv when the path is wrong. Deats, - New "Worktree venv detection" subsection before the existing import/collection checks - `tractor.__file__` sniff to detect stale venv - `UV_PROJECT_ENVIRONMENT=py<MINOR> uv sync` recipe auto-detecting the cpython minor version - Explains *why* a wrong venv causes spurious `AttributeError` / `ModuleNotFoundError` - Renames prior heading to "Import + collection checks" for clarity (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
(this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Teach the skill to look for `.claude/review_context.md` (written by the `/code-review-changes` skill after applying review fixes) and generate a `Review:` trailer block in the commit body. Deats, - New check in step 2 for `review_context.md` extracting `pr`, `reviewer`, `review_url`, and optionally `reply_ids` - New "Review trailer" section in step 3 with format spec, example msg, and `reply_ids` handling instructions - Context file is single-use: deleted after the commit msg is written (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Replace the old "informational only" `reply_ids` handling with an automated step 6 that PATCHes GH review comments after the user commits: - Fetch each reply comment body via `gh api` - Swap `📎 commit pending` for a `📎 fixed in [<hash>](<url>)` link - PATCH back and delete `review_context.md` Also allow `Bash(gh *)` in `allowed-tools` so the skill can actually call `gh api`. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
(this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
In local `.claude/` settings; so basically always allow inter-skill, skills if available to the model. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Relax hard-wrap in `SKILL.md` and `format-reference.md` from 67 to 72 chars; drop redundant "same rule as commit-msg" justification text. Also, - add TODO section re: factoring the skill into generic (`~/.claude/skills/pr-msg/`) + repo-specific (`.claude/skills/pr-msg/`) layers, mirroring the `/commit-msg` split. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Proto a pair of skills for managed git worktree creation, re-entry, and teardown under `.claude/wkts/<snake_case_name>/`. Deats, - `/open-wkt <name>` creates worktree + `wkt/<name>` branch, writes `.wkt_meta.json` lifecycle metadata, sets `.wkt_active` lock indicator, and optionally fixturizes (venv via `uv sync`). - `/close-wkt [<name>]` shows diffstat/commit log, prompts for removal, cleans up branch. - `claude_wkts` convenience symlink at repo root for easy fs nav. - re-entry protocol w/ staleness detection on the `.wkt_active` file (1hr threshold). Also, - allow `Bash(git:*)` in local settings. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Per the new `.claude/wkts` subdir used in the `/open/close-wkt` skill we just added. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Change "72 char max" phrasing to "wrap at 72 chars" with explicit "fill lines to 72 — don't stop short at 50-65" in both `SKILL.md` and `format-reference.md`. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
- `/commit-msg`: add `--git-dir` alongside `--git-common-dir` so worktree detection is actually actionable. - `/run-tests`: drop `--timeout` flag — project doesn't dep on `pytest-timeout`. - `/pr-msg` + `.gitignore`: fix LATEST path — lives at skill root, not in `msgs/`. Review: PR #428 (copilot-pull-request-reviewer) #428 (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
- Replace in-repo `SKILL.md` copy with symlink to global `~/.claude/skills/commit-msg/SKILL.md` - Reorg `settings.local.json` perms into grouped sections + add `uv run` entry - Ignore per-skill `conf.toml` in `.gitignore` (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
That is a repo-specific "concurrency-analysis" skill Bo Structured analysis framework for `trio`-based async races: inventories shared mutable state, maps checkpoint boundaries, traces interleaved task schedules, and proposes fixes. Includes tractor-specific patterns for `_Cache` lock vs `run_ctx` lifetime, the `values`/`resources` atomicity gap, and `Event.set()` scheduling semantics. (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Replace inline `SKILL.md` content in `close-wkt`, `open-wkt`, and `pr-msg` with symlinks pointing to `/home/goodboy/repos/ai.skillz/skills/`. Add new symlinks for skills not previously vendored in-repo: `code-review-changes`, `inter-skill-review`, `plan-io`, `prompt-io`, `py-codestyle`, `resolve-conflicts`, `yt-url-lookup`. Also, - update `commit-msg/SKILL.md` symlink target from `~/.claude/skills/` to the `ai.skillz` repo. - add `pr-msg/references` symlink for the format ref docs. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
The symlinks to `~/repos/ai.skillz/skills/` are
machine-local deploy artifacts (via `deploy-skill.sh`)
and shouldn't be tracked in the repo. Add `.gitignore`
entries for all skill symlinks and the hybrid
`commit-msg/SKILL.md` + `pr-msg/{SKILL.md,references}`
paths, then `git rm --cached` the lot.
(this commit msg was generated in some part by [`claude-code`][claude-code-gh])
[claude-code-gh]: https://github.com/anthropics/claude-code
Add `.claude/review_context.md` and `.claude/review_regression.md` to `.gitignore` — these are single-use per-PR artifacts written by `/code-review-changes` and consumed by `/commit-msg`, not meant to be tracked. Review: PR #428 (Copilot) #428 (review) (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
cf7dc4e to
0c3d99f
Compare
Compare both `--git-common-dir` and `--git-dir` output to reliably detect worktree context; the previous single-check could misidentify the main checkout. Review: PR #428 (Copilot) goodboy/tractor#428 (review) (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Handle symlinked files pointing to other repos (eg. `ai.skillz` skills deployed via symlink into `tractor`): resolve canonical paths, apply fixes in the source repo, drive cross-repo commit flow from the review session. Deats, - add symlink check step: `readlink -f`, `canonical_path`, `canonical_repo`, `is_cross_repo` flag - add "Cross-repo symlink fixes" section: edit canonical target, track distinct repos, verify through symlink - update `review_context.md` placement rule: write to the repo receiving fixes, not necessarily the PR repo - add "Cross-repo commit flow" section: stage/commit in `canonical_repo` via `git -C`, use correct remote URL for commit-ref links - fix GH reply API: use `in_reply_to` field on the comments endpoint instead of the `/replies` sub-endpoint (returns 404) Review: PR #428 (Copilot) goodboy/tractor#428 (review) (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
Extend
claudeskill suite w/ dev-workflow toolkitThis started as a buncha skills which have now been generalized and
factored into a new WIP repo
since i quickly discovered i was reusing half baked versions of each
in various repos which are all devved effectively together.
Motivation
The
claude-codeskill suite fortractorstarted w/ just/commit-msgbut has grown to need a full dev-workflow toolkit: PRdescriptions that work across GitHub/Gitea/sr.ht, a test runner aware
of worktree venvs, structured concurrency analysis, worktree
lifecycle mgmt, and a review pipeline that round-trips GH PR comments
from fetch to inline reply PATCHes. Each skill was built
incrementally as pain points surfaced during actual dev sessions —
this branch collects all that work into one coherent PR.
The skills are now factored into a central
ai.skillzrepo and symlinked intotractor's.claude/skills/, keeping the repo clean while sharingtooling across projects. Settings allow-rules grew alongside to
unblock each skill w/o granting blanket shell access, and
.gitignoreadditions keep ephemeral output and worktree dirs fromcluttering the tree.
Summary of changes
By chronological commit, this is mostly a view of how everything came
to be but is more or less not that important to read through.
(9183e06b) (850e4f83)
(ce2aade2) (9e45a6f4) Add
/pr-msgskillfor cross-service PR descr generation w/ format reference doc,
69-char wrap rule, md ref-link strategy, and cross-service ref-link
stubs for GitHub/Gitea/sr.ht.
(91e640c1) (c23d66b0)
(0e77aa4e) (c569bdb9)
(a5d425dd) Extend
/commit-msgw/ worktree detection,msgs/subdir output, regression-fix ctx (Regressed-by:/Found-via:), review-ctx trailers, and auto-PATCH of GH reviewreply placeholders.
(e121e095) (167ea0dc)
(310c9f1b) (65a00805) Add
/run-testsskill for
pytestsuite runs w/ worktreeuvvenv detection,"never auto-commit" rule, and dev-workflow helpers.
(b4a98b6c) Add
/open-wkt+/close-wktworktreelifecycle skills for ephemeral isolated work.
(fd7c093d) Add
/conc-analstructured concurrencyanalysis skill for
trio-based async primitives — trace taskscheduling across checkpoint boundaries, identify race windows,
classify bug types w/
tractor-specific pattern docs.(8a02ce57) (d9eb6801)
(8481830d) Symlink all skills to central
ai.skillzrepo and gitignore the symlinks so theystay machine-local. Inline
commit-msg/SKILL.mddeleted in favorof symlinked version.
(c120dab6) (5ac73940)
(f9bc14cc) (6df3b8ab)
(df6331ac) (ef6dc907)
(601b742b) (6945a9ec) Incrementally broaden
.claude/settings.local.jsonallow-rules (grep,tests/,gh pr|api,python3,git remote|stash,ln,uv sync,Skill(run-tests),WebFetchfor research).(6b9127cb) (9ff8b67a) Ignore skill
msgs/dirs and
.claude/worktrees/in.gitignore.(7592a9b8) Address Copilot review feedback on PR Moar
claudeskillz, refinements, factorings and extensions #428.(12da8008) Add
ai_notes/docs_todos.mdnoting theSphinx
literalincludeapproach for auto-syncing README codeexamples w/ actual source files.
TODOs before landing
/pr-msginto generic + repo-specific layers (samesplit as
/commit-msgw/style-guide-reference.md).Follow up repo-specifics,
> Write a
tractor/trio-specific Python coding skill — a rework of dhirschfeld'sanyioguide adapted for the structured-concurrency stack.Integrate
/pr-msgoutput w/gish edit --ai-draftflow.ai.skillzrepo/project.(this pr content was generated in some part by
claude-code)