Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .bumpy/skill-distribution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
'@varlock/bumpy': patch
---

Streamline agent skill distribution and remove the `bumpy ai` command.

The canonical `add-change` skill now lives at the repo root (`skills/`) as a single source of truth and is synced into the package on `prepack` (gitignored copy), so it ships version-pinned in the npm tarball and via the Claude Code plugin (`claude plugin install @varlock/bumpy`).

The `bumpy ai setup` command has been removed. Its file-copying targets (`opencode`, `cursor`, `codex`) duplicated the skill into tool-specific directories that drifted from the canonical copy — and had silently been broken in the published package — while the `claude` target was a thin wrapper around `claude plugin install`. Install the skill via the Claude Code plugin, or reference the bundled `SKILL.md` directly from `node_modules/@varlock/bumpy/skills/add-change/SKILL.md`.
31 changes: 23 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,16 +102,31 @@ bumpy publish # pack and publish, create git tags, push tags, and create GitHu

## AI Integration

Bumpy ships with an AI skill that teaches LLMs how to create bump files.
Bumpy ships with an [agent skill](https://github.com/dmno-dev/bumpy/blob/main/skills/add-change/SKILL.md) that teaches LLMs how to create bump files. It teaches the AI to examine git changes, identify affected packages, choose bump levels, and create bump files with `bumpy add` — and to keep existing bump files up to date as work continues on a branch, updating packages, bump levels, and summaries to reflect the final state of changes.

```bash
bumpy ai setup --target claude # installs Claude Code plugin
bumpy ai setup --target opencode # creates OpenCode command file
bumpy ai setup --target cursor # creates Cursor rule file
bumpy ai setup --target codex # creates Codex instruction file
```
### Installing the skill

Pick whichever fits your setup:

- **[`skills`](https://github.com/vercel-labs/skills) (any agent — recommended)** — works with Claude Code, Cursor, OpenCode, Codex, and others:

```bash
npx skills add dmno-dev/bumpy # update with: npx skills update
```

- **GitHub CLI** (v2.90+):

```bash
gh skill install dmno-dev/bumpy add-change # update with: gh skill update add-change
```

- **Claude Code plugin:**

```bash
claude plugin install @varlock/bumpy
```

The skill teaches the AI to examine git changes, identify affected packages, choose bump levels, and create bump files with `bumpy add`. It also instructs the AI to keep existing bump files up to date as work continues on a branch - updating packages, bump levels, and summaries to reflect the final state of changes.
- **npm-bundled** — the skill ships inside the published package, so once `@varlock/bumpy` is installed it lives at `node_modules/@varlock/bumpy/skills/add-change/SKILL.md`, version-pinned to your installed bumpy. Point any tool that consumes a `SKILL.md` path at it directly.

## Documentation

Expand Down
17 changes: 0 additions & 17 deletions docs/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -263,20 +263,3 @@ Interactive guide to set up `BUMPY_GH_TOKEN` for CI. Walks through creating a fi
```bash
bumpy ci setup
```

## `bumpy ai setup`

Install an AI skill for creating bump files in supported coding tools.

```bash
bumpy ai setup --target claude
bumpy ai setup --target opencode
bumpy ai setup --target cursor
bumpy ai setup --target codex
```

| Flag | Description |
| ----------------- | ------------------------------------------ |
| `--target <tool>` | `claude`, `opencode`, `cursor`, or `codex` |

For Claude Code, this runs `claude plugin install @varlock/bumpy` under the hood. For other targets, it copies a command/rule file into your project.
2 changes: 2 additions & 0 deletions packages/bumpy/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
dist
skills
3 changes: 2 additions & 1 deletion packages/bumpy/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@
},
"scripts": {
"build": "tsdown",
"prepack": "cp ../../README.md .",
"prepack": "bun run scripts/sync-skill.ts && cp ../../README.md .",
"sync-skill": "bun run scripts/sync-skill.ts",
"check": "bun run tsc --noEmit",
"test": "bun test"
},
Expand Down
28 changes: 28 additions & 0 deletions packages/bumpy/scripts/sync-skill.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/**
* Copies the canonical agent skill from the repo root (`skills/`) into this
* package so it ships inside the published npm tarball. The skill then travels
* with the installed bumpy version, letting agents discover version-pinned
* guidance straight from `node_modules` (no separate install / registry).
*
* The canonical copy lives at the repo root so a single source of truth feeds
* both the npm bundle and any future discovery endpoints. This package copy is
* a generated artifact (gitignored) and is regenerated on every `prepack` /
* publish (run `bun run sync-skill` to refresh it manually). It is also what
* the Claude Code plugin manifest (`.claude-plugin/plugin.json`) ships to
* agents.
*/
import { existsSync, rmSync, cpSync } from 'node:fs';
import { resolve } from 'node:path';

const PKG_DIR = resolve(import.meta.dir, '..');
const SRC = resolve(PKG_DIR, '../../skills');
const DEST = resolve(PKG_DIR, 'skills');

if (!existsSync(SRC)) {
throw new Error(`[sync-skill] canonical skills dir not found at ${SRC}`);
}

rmSync(DEST, { recursive: true, force: true });
cpSync(SRC, DEST, { recursive: true });

console.log(`[sync-skill] copied ${SRC} -> ${DEST}`);
21 changes: 0 additions & 21 deletions packages/bumpy/src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,23 +162,6 @@ async function main() {
break;
}

case 'ai': {
const rootDir = await findRoot();
const subcommand = args[1];
const aiFlags = parseFlags(args.slice(2));

if (subcommand === 'setup') {
const { aiSetupCommand } = await import('./commands/ai.ts');
await aiSetupCommand(rootDir, {
target: aiFlags.target as string | undefined,
});
} else {
log.error(`Unknown ai subcommand: ${subcommand}. Use "ai setup".`);
process.exit(1);
}
break;
}

case '--version':
case '-v':
console.log(`bumpy ${__BUMPY_VERSION__}`);
Expand Down Expand Up @@ -228,7 +211,6 @@ function printHelp() {
ci plan Report what ci release would do (JSON + GitHub Actions outputs)
ci release Release — create version PR or auto-publish
ci setup Set up a token for triggering CI on version PRs
ai setup Install AI skill for creating bump files

Add options:
--packages <list> Package bumps (e.g., "pkg-a:minor,pkg-b:patch")
Expand Down Expand Up @@ -271,9 +253,6 @@ function printHelp() {
--tag <tag> npm dist-tag for auto-publish
--branch <name> Branch name for version PR (default: bumpy/version-packages)

AI setup options:
--target <tool> Target AI tool: claude, opencode, cursor, codex

${colorize('https://bumpy.varlock.dev', 'dim')}
`);
}
Expand Down
138 changes: 0 additions & 138 deletions packages/bumpy/src/commands/ai.ts

This file was deleted.

File renamed without changes.