groove-groovebook-publish — Claude Code skill: publish learnings
This skill sends a workflow learning from your project to the shared groovebook repo as a pull request. Handy after groove-work-compound, when a finding deserves a wider audience.
npx skills add andreadellacorte/groove --skill groove-groovebook-publish -a claude-codeWhat groove-groovebook-publish does
The skill takes your learning text, strips project-specific context, and opens a PR against the configured groovebook repo. The file lands at learned/<topic>/<YYYY-MM-DD>-<slug>.md, and the PR body follows the groovebook template: Summary, Context, Learning, Groove skill area. When it finishes, it prints the PR URL.
Two things must be in place first: a groovebook: <owner>/<repo> line in .groove/index.md and GitHub auth via gh auth login. Without the config line the skill exits with a message that groovebook is not configured, so check that file before you run it. It also forks the repo if you have no fork yet and creates a branch named learning/<YYYY-MM-DD>-<slug>.
Expect a few questions: topic, skill area, and a one-sentence summary. Before publishing, the skill previews the text and asks whether it holds internal names, file paths or product names. If it does, it helps you swap them for generic wording. Slugs are lowercased and cut to 40 characters, and a taken branch name gets a -2, -3 suffix.
What it helps with
- publish a project learning to a shared repo as a PR
- redact internal names and file paths before publishing
- build a learning file in the groovebook template
- fork the repo and create a branch without manual git work
- share a pattern or anti-pattern with the community
Example prompts for the agent
- Publish this learning to groovebook: run the linter before waiting on CI in a review PR.
- groove-groovebook-publish: topic patterns, skill area compound, summary — test migrations against a database copy.
- Send the groovebook learning about how we split long tasks into steps.
How to install groove-groovebook-publish
1Skills CLI (Vercel)
npx skills add andreadellacorte/groove --skill groove-groovebook-publish -a claude-code2Manually: put the files in place
~/.claude/skills/groove-groovebook-publish/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/groove-groovebook-publish/
1Skills CLI (Vercel)
npx skills add andreadellacorte/groove --skill groove-groovebook-publish -a codex2Manually: put the files in place
.agents/skills/groove-groovebook-publish/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add andreadellacorte/groove --skill groove-groovebook-publish -a cursor2Manually: put the files in place
.cursor/skills/groove-groovebook-publish/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install andreadellacorte/groove groove-groovebook-publish2Manually: put the files in place
.github/skills/groove-groovebook-publish/SKILL.md1Skills CLI (Vercel)
npx skills add andreadellacorte/groove --skill groove-groovebook-publish -a gemini-cli2Platform CLI
gemini skills install https://github.com/andreadellacorte/groove --path skills/groove-groovebook-publishManually: put the files in place
.devin/skills/groove-groovebook-publish/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add andreadellacorte/groove --skill groove-groovebook-publish -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about groove-groovebook-publish
How do I install groove-groovebook-publish in Claude?
Run npx skills add andreadellacorte/groove --skill groove-groovebook-publish -a claude-code. The skill then lives at ~/.claude/skills/groove-groovebook-publish/SKILL.md.
What does groove-groovebook-publish do?
It publishes a learning from the current project to the groovebook repo as a pull request. The text is cleaned of project specifics, the file follows the groovebook template, and the PR URL is printed at the end.
What has to be set up before running it?
A groovebook: <owner>/<repo> line in .groove/index.md and GitHub auth through gh auth login. Without the config line the skill exits saying groovebook is not configured.
Source text
SKILL.md · MIT
---
name: groove-groovebook-publish
description: "Publish a workflow learning to the groovebook shared commons as a GitHub PR. Use after groove-work-compound when a learning is worth sharing."
license: MIT
allowed-tools: Read Write Edit Glob Grep Bash(git:*) Bash(gh:*) AskUserQuestion
metadata:
author: andreadellacorte
---
# groove-groovebook-publish
Use $ARGUMENTS as the learning text if provided.
## Outcome
A learning from the current project is published to the configured groovebook repo as a pull request, stripped of any project-specific context, ready for community review.
## Acceptance Criteria
- Learning is published as a PR to `<groovebook>` repo
- PR uses the groovebook PR template format (Summary, Context, Learning, Groove skill area)
- File is written at `learned/<topic>/<YYYY-MM-DD>-<slug>.md` in the groovebook repo
- PR URL is printed to the user
## Steps
1. Read `groovebook:` from `.groove/index.md`; if absent, exit with:
`groovebook is not configured. Add 'groovebook: <owner>/<repo>' to .groove/index.md to enable.`
2. Check `gh auth status`; if not authenticated, exit with:
`Not authenticated with GitHub. Run: gh auth login`
3. Verify the groovebook repo is accessible: `gh repo view <groovebook>`; if it fails, exit with a clear message.
4. Get the learning text:
- If $ARGUMENTS is provided, use it as a starting point
- Otherwise: ask "What's the learning you'd like to publish? (paste it or describe briefly)"
- Ask for a one-sentence summary (used as PR title and filename slug)
5. Show a preview of the learning text and ask:
`Does this contain any repo-specific context to redact? (file paths, internal names, product names)`
- If yes: help the user redact it — replace specific names with generic descriptions
- If no: proceed
6. Ask for topic (e.g. `patterns`, `tools`, `anti-patterns`, `workflow`) and skill area (e.g. `compound`, `plan`, `review`, `daily`)
7. Generate slug: lowercase the summary, replace spaces with hyphens, strip special characters, truncate to 40 chars. Construct:
- Branch name: `learning/<YYYY-MM-DD>-<slug>`
- File path: `learned/<topic>/<YYYY-MM-DD>-<slug>.md`
8. Fork the groovebook repo if not already forked: `gh repo fork <groovebook> --clone=false`
- If fork already exists, skip silently
9. Create the branch and file:
- `gh api repos/<user-fork>/git/refs` to check if branch exists; if so, append a short unique suffix
- Write the file content (see format below) and commit via `gh api`
- Or: use `git` operations against the fork URL if `gh api` approach is too complex — prefer the simpler path
10. Open the PR:
```
gh pr create --repo <groovebook> \
--title "<one-sentence summary>" \
--body "<formatted body>" \
--head "<fork-user>:<branch-name>"
```
11. Print the PR URL
## Learning file format
```markdown
---
date: YYYY-MM-DD
topic: <topic>
skill-area: <skill-area>
source: groovebook-publish
---
# <One-sentence summary>
## Context
<What triggered this learning — what problem were you solving? Generic, no project specifics.>
## Learning
<The insight itself — what to do, what to avoid, or what pattern works.>
## Groove skill area
`<skill-area>` (e.g. `groove-work-compound`, `groove-work-plan`)
```
## PR body format
```
## Summary
<one-sentence summary>
## Context
<what triggered this>
## Learning
<the insight>
## Groove skill area
`<skill-area>`
---
*Published via groove-groovebook-publish*
```
## Constraints
- Never publish learning text that contains project-specific names, file paths, or internal identifiers without explicit user confirmation that it's intentional
- If the fork step fails due to permissions: suggest the user fork manually and set their fork as the `groovebook:` value
- Slug must be safe for use as a filename: lowercase, hyphens only, no path separators or special characters
- If branch already exists: append `-2`, `-3`, etc. until a free name is found
© andreadellacorte · MIT · andreadellacorte/groove