@buildinternet/releases-skills 0.13.2 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buildinternet/releases-skills",
3
- "version": "0.13.2",
3
+ "version": "0.14.0",
4
4
  "description": "Agent skills bundled with the Releases CLI. Markdown playbooks for changelog ingest, discovery, and analysis.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: releases-cli
3
+ description: Use the `releases` CLI to search, inspect, and manage the Releases.sh changelog registry from the terminal. Activate when the user mentions "releases CLI", runs a `releases` command, asks how to install the CLI, or wants to add/edit/fetch sources or organizations programmatically.
4
+ ---
5
+
6
+ # releases CLI
7
+
8
+ The `releases` CLI does two things: lets anyone search and browse the public changelog registry at [releases.sh](https://releases.sh), and lets API-key holders manage orgs, products, sources, and releases through `releases admin` subcommands.
9
+
10
+ ## Install
11
+
12
+ ```bash
13
+ brew install buildinternet/tap/releases # recommended on macOS / Linux
14
+ npm install -g @buildinternet/releases # or via npm
15
+ ```
16
+
17
+ Or run one-off without installing:
18
+
19
+ ```bash
20
+ npx @buildinternet/releases search "react"
21
+ ```
22
+
23
+ The CLI talks to `api.releases.sh` by default — no configuration needed for reader commands.
24
+
25
+ ## What this skill covers
26
+
27
+ - **[Reader commands](references/reader.md)** — Search, inspect, and export changelog data. No API key required.
28
+ - **[Admin commands](references/admin.md)** — Add/edit sources, manage orgs and products, fetch releases, run policies. Requires `RELEASED_API_KEY`.
29
+
30
+ ## Quick Reference
31
+
32
+ ```bash
33
+ # Reader (no auth required)
34
+ releases search "breaking change" # hybrid FTS + semantic search
35
+ releases latest next-js # latest releases from one source
36
+ releases latest --org vercel --count 20 # latest from a whole org
37
+ releases list --category ai # browse sources
38
+ releases show vercel # dispatch by id or slug
39
+ releases stats # registry overview
40
+ releases categories # list valid category values
41
+
42
+ # Admin (requires RELEASED_API_KEY)
43
+ releases admin source add "Linear" --url https://linear.app/changelog
44
+ releases admin source fetch <slug> --max 50
45
+ releases admin org add "Acme" --category cloud
46
+ releases admin product add "CLI" --org acme
47
+ releases admin discovery onboard "Stripe" # AI-powered discovery agent
48
+
49
+ # Local stdio MCP bridge (proxies to api.releases.sh)
50
+ releases admin mcp serve
51
+ ```
52
+
53
+ Every reader command accepts `--json` for machine-readable output. IDs (`org_…`, `src_…`, `prod_…`, `rel_…`) are accepted anywhere a slug is.
54
+
55
+ ## Authentication
56
+
57
+ Reader access is unauthenticated and may be rate-limited per IP.
58
+
59
+ **Admin access is closed beta.** `releases admin …` commands require a Bearer token, but the hosted registry does not currently expose a self-serve flow for generating keys — an external user cannot create one on their own. If the user asks how to get an API key, explain this and point them at the project repo to request access. Don't invent a signup URL.
60
+
61
+ If a key is available:
62
+
63
+ ```bash
64
+ export RELEASED_API_KEY=your_key
65
+ export RELEASED_API_URL=https://api.releases.sh # optional, this is the default
66
+ ```
67
+
68
+ These can also go in a `.env` file — Bun auto-loads it when running from source.
69
+
70
+ ## Common Mistakes
71
+
72
+ - `releases admin …` without `RELEASED_API_KEY` set fails fast with a clear error — don't retry the same command. Note that keys are not self-serve yet (see Authentication).
73
+ - Slug renames (`admin source edit <slug> --slug new-slug`) require `--confirm-slug-change` because they break web links.
74
+ - `releases admin source fetch` with no slug or filter is blocked in remote mode. Use `--stale`, `--unfetched`, `--retry-errors`, `--changed`, or a source slug.
75
+ - Default fetch cap is 200 releases per source (GitHub pagination limits). Use `--max <n>` or `--all` to override.
76
+ - `summary` and `compare` are *not* in this CLI. Those commands require AI provider calls and live in the private maintainer tooling. Use the hosted MCP tools `summarize_changes` / `compare_products` at `mcp.releases.sh` instead.
@@ -0,0 +1,184 @@
1
+ # Admin Commands
2
+
3
+ > **Closed beta.** All commands on this page require `RELEASED_API_KEY` — a Bearer token on write endpoints of `api.releases.sh`. API keys are **not self-serve** at this time. A normal user cannot create one on their own, and the hosted registry does not expose a public signup flow for admin access. If a user asks how to obtain a key, tell them admin access is currently invite-only and point them at the project repo to request access. Do not fabricate a signup URL or recommend sending a request to a specific email unless one is documented in this repo.
4
+
5
+ If a key is available, set it in the environment:
6
+
7
+ ```bash
8
+ export RELEASED_API_KEY=your_key
9
+ ```
10
+
11
+ Missing or invalid keys fail fast at CLI startup with a clear error; don't retry the same command without fixing the env var.
12
+
13
+ All admin commands accept an entity ID (`org_…`, `src_…`, `prod_…`, `rel_…`) or a slug wherever an identifier is expected. Prefer IDs — slugs can change, IDs cannot.
14
+
15
+ ## Sources
16
+
17
+ ### Add
18
+
19
+ ```bash
20
+ releases admin source add "Next.js" --url https://github.com/vercel/next.js
21
+ releases admin source add "Linear" --url https://linear.app/changelog
22
+ releases admin source add "My Blog" --url https://example.com/changelog
23
+ ```
24
+
25
+ By default, `add` runs automated pre-checks (provider detection, feed discovery, markdown probing). Override with `--type github|scrape|feed`. Use `--skip-eval` to bypass evaluation. Batch mode (`--batch`) skips evaluation by default for speed.
26
+
27
+ Provide a feed URL explicitly when it isn't easily discoverable:
28
+
29
+ ```bash
30
+ releases admin source add "Claude Code" --url https://docs.anthropic.com/en/changelog \
31
+ --feed-url https://docs.anthropic.com/en/changelog/rss.xml
32
+ ```
33
+
34
+ Evaluate without adding:
35
+
36
+ ```bash
37
+ releases admin discovery evaluate https://linear.app/changelog
38
+ ```
39
+
40
+ ### Edit
41
+
42
+ ```bash
43
+ releases admin source edit src_abc123 --name "New Name" # by ID (preferred)
44
+ releases admin source edit next-js --url https://github.com/vercel/next.js/releases
45
+ releases admin source edit my-blog --org acme # set organization
46
+ releases admin source edit my-blog --no-org # remove organization
47
+ releases admin source edit my-blog --type feed # change adapter type
48
+ releases admin source edit my-blog --no-feed-url # clear stored feed URL
49
+ releases admin source edit my-blog --markdown-url https://example.com/changelog.md
50
+ releases admin source edit my-blog --primary # mark as org's primary changelog
51
+ releases admin source edit my-blog --slug new-slug --confirm-slug-change
52
+ ```
53
+
54
+ Slug renames require `--confirm-slug-change` because they break existing web links.
55
+
56
+ ### Fetch
57
+
58
+ ```bash
59
+ releases admin source fetch next-js # one source
60
+ releases admin source fetch --since 2025-01-01 --max 50
61
+ releases admin source fetch --max 500 # override the 200/source default
62
+ releases admin source fetch --all # no date/count limits
63
+ releases admin source fetch --stale 24 # only stale sources, with backoff
64
+ releases admin source fetch --retry-errors # retry sources whose last fetch failed
65
+ releases admin source fetch --changed # sources with upstream changes detected
66
+ releases admin source fetch --unfetched --concurrency 5
67
+ releases admin source fetch next-js --skip-changelog # skip CHANGELOG.md refresh
68
+ ```
69
+
70
+ Notes:
71
+
72
+ - Default cap is 200 releases per source (GitHub paginates at ~10K). `--max <n>` or `--all` to override.
73
+ - Remote mode **requires** a filter or slug. Bare `releases admin source fetch` with no args is blocked to prevent accidental bulk work.
74
+ - Remote concurrency defaults to 3, capped at 5. Duplicate source fetches are detected and blocked.
75
+ - Smart fetch backoff: sources returning no changes back off exponentially (1h → 48h); error backoff caps at 72h.
76
+
77
+ ### Poll (cheap change detection)
78
+
79
+ ```bash
80
+ releases admin source poll # HEAD-check all feed sources
81
+ releases admin source poll next-js # one source
82
+ releases admin source poll --changed # only show sources flagged with changes
83
+ releases admin source poll --json
84
+ ```
85
+
86
+ Pure HEAD-based, no AI or parsing. The hosted cron runs this hourly; `--changed` is mostly useful for ad-hoc checks.
87
+
88
+ ### Fetch history
89
+
90
+ ```bash
91
+ releases admin source fetch-log # across all sources
92
+ releases admin source fetch-log next-js # one source
93
+ ```
94
+
95
+ ### Health checks
96
+
97
+ ```bash
98
+ releases admin source check # all sources
99
+ releases admin source check next-js # one source
100
+ ```
101
+
102
+ ## Organizations
103
+
104
+ ```bash
105
+ releases admin org add "Vercel" --category developer-tools --tags typescript,edge
106
+ releases admin org list # summary view
107
+ releases admin org show vercel # full details (accounts, tags, sources, products, aliases)
108
+ releases admin org edit vercel --category developer-tools
109
+ releases admin org link vercel --platform github --handle vercel
110
+ releases admin org tag add vercel react serverless
111
+ releases admin org alias add anthropic claude.ai claude.com
112
+ releases admin org refresh vercel # fetch all sources + regenerate overview
113
+ ```
114
+
115
+ `org refresh` flags: `--max <n>` (per-source cap, default 20), `--concurrency <n>`, `--window <days>`, `--dry-run`, `--skip-overview`, `--json`.
116
+
117
+ ## Products
118
+
119
+ Products group sources under multi-product orgs (e.g. Vercel → Next.js, Turborepo, v0):
120
+
121
+ ```bash
122
+ releases admin product add "Next.js" --org vercel --url https://nextjs.org
123
+ releases admin product list vercel
124
+ releases admin product edit nextjs --description "React framework for production"
125
+ releases admin product tag add nextjs react
126
+ releases admin product alias add nextjs nextjs.org
127
+ releases admin product remove nextjs # sources become unlinked, not deleted
128
+ releases admin product adopt nextjs --into vercel # convert an org into a product
129
+ ```
130
+
131
+ ## Releases
132
+
133
+ ```bash
134
+ releases admin release show rel_abc123
135
+ releases admin release edit rel_abc123 --title "Fixed title" --version "v2.0.1"
136
+ releases admin release delete rel_abc123
137
+ releases admin release suppress rel_abc123 --reason "promotional content"
138
+ releases admin release unsuppress rel_abc123
139
+ ```
140
+
141
+ Suppressed releases are hidden from all read paths (search, latest, stats, API) but preserved for audit.
142
+
143
+ ## Policies
144
+
145
+ Ignored URLs are **org-scoped**; blocked URLs are **global**.
146
+
147
+ ```bash
148
+ releases admin policy ignore add https://example.com/blog --org vercel --reason "Not a changelog"
149
+ releases admin policy ignore list --org vercel
150
+ releases admin policy block add medium.com --domain --reason "Aggregator"
151
+ releases admin policy block list
152
+ ```
153
+
154
+ ## Discovery
155
+
156
+ AI-powered onboarding for whole companies:
157
+
158
+ ```bash
159
+ releases admin discovery onboard "Vercel"
160
+ releases admin discovery onboard "Stripe" --domain stripe.com --github-org stripe
161
+ releases admin discovery discover vercel.com --verify --add
162
+ releases admin discovery task list # in-flight discovery sessions
163
+ releases admin discovery task cancel <sessionId>
164
+ ```
165
+
166
+ ## Import
167
+
168
+ Bulk-import orgs and sources from a JSON manifest:
169
+
170
+ ```bash
171
+ releases admin source import manifest.json
172
+ releases admin source import manifest.json --dry-run
173
+ releases admin source import manifest.json --skip-existing
174
+ ```
175
+
176
+ ## MCP bridge
177
+
178
+ Run a local stdio MCP bridge that proxies the hosted tools:
179
+
180
+ ```bash
181
+ releases admin mcp serve
182
+ ```
183
+
184
+ Useful for clients that only support stdio transport. For native remote MCP support (Claude Code, Codex), connect directly to `https://mcp.releases.sh/mcp` instead.
@@ -0,0 +1,97 @@
1
+ # Reader Commands
2
+
3
+ Reader commands are unauthenticated — no API key required. They talk to `api.releases.sh` over HTTPS and all support `--json` for machine-readable output.
4
+
5
+ ## Search
6
+
7
+ Hybrid lexical + semantic search across releases and CHANGELOG chunks.
8
+
9
+ ```bash
10
+ releases search "authentication"
11
+ releases search "vercel" --type releases --limit 5
12
+ releases search "breaking change" --json
13
+ releases search "retry" --org stripe
14
+ ```
15
+
16
+ Flags:
17
+
18
+ - `--type <releases|sources|all>` — narrow result kind (default: `all`).
19
+ - `--org <slug>` — scope to one organization.
20
+ - `--product <slug>` — scope to one product.
21
+ - `--limit <n>` — default 20.
22
+ - `--mode <lexical|semantic|hybrid>` — default `hybrid`. Use `lexical` for pure FTS ranking.
23
+ - `--json` — machine output; each hit includes a `kind: "release" | "changelog_chunk"` discriminator.
24
+
25
+ Chunk hits carry `sourceSlug`, `chunkOffset`, and `chunkLength` so you can chain into `releases admin source changelog <slug> --offset N` (or the MCP `get_source_changelog` tool) to read surrounding context.
26
+
27
+ ## Latest releases
28
+
29
+ ```bash
30
+ releases latest # across all sources
31
+ releases latest next-js # one source (by slug)
32
+ releases latest --org vercel --count 20 # whole org
33
+ releases latest --product nextjs # one product
34
+ releases latest --type feature # filter by release type
35
+ releases latest --json
36
+ ```
37
+
38
+ ## List sources
39
+
40
+ ```bash
41
+ releases list # all sources
42
+ releases list next-js # detail for one source (by slug or id)
43
+ releases list --org sentry # filter by organization
44
+ releases list --product nextjs # filter by product
45
+ releases list --query shadcn # name / slug / url substring
46
+ releases list --has-feed # sources with a discovered feed URL
47
+ releases list --category ai # filter by category
48
+ releases list --json # machine-readable output
49
+ releases list --json --compact # lightweight JSON (id, slug, name, type, org, date)
50
+ releases list --json --limit 20 --page 2 # pagination (server-side)
51
+ ```
52
+
53
+ Aliased as `releases admin source list` for discoverability within admin workflows.
54
+
55
+ ## Show any entity
56
+
57
+ Top-level `show` dispatches by ID prefix, and falls back to slug lookup:
58
+
59
+ ```bash
60
+ releases show rel_XqbzLaOqBFz7VSAIqx2zs # release (rel_)
61
+ releases show src_abc123 # source (src_)
62
+ releases show org_abc123 # organization (org_)
63
+ releases show prod_abc123 # product (prod_)
64
+ releases show vercel # slug fallthrough (org → product → source)
65
+ ```
66
+
67
+ Use this when you have an ID from another tool output (search results, MCP tool responses, etc.) and want to inspect it without caring what kind of entity it is.
68
+
69
+ ## Stats
70
+
71
+ ```bash
72
+ releases stats # index overview, source health, recent fetch activity
73
+ releases stats --days 7 # adjust the activity window
74
+ releases stats --json
75
+ ```
76
+
77
+ ## Categories
78
+
79
+ ```bash
80
+ releases categories # list the canonical category values
81
+ releases categories --json
82
+ ```
83
+
84
+ The category list is fixed — adding a new category requires a code change in `@buildinternet/releases-core`.
85
+
86
+ ## Changelog slicing (admin CLI, reader endpoint)
87
+
88
+ The stored CHANGELOG.md for a GitHub source can be sliced from the reader API. The CLI wrapper lives under admin for discoverability but the endpoint itself is public:
89
+
90
+ ```bash
91
+ releases admin source changelog apollo-client # full file
92
+ releases admin source changelog apollo-client --limit 10000 # first 10k chars, heading-aligned
93
+ releases admin source changelog apollo-client --tokens 5000 # first ~5k cl100k_base tokens
94
+ releases admin source changelog apollo-client --offset 10000 --json
95
+ ```
96
+
97
+ `tokens` and `limit` are both heading-aware; `tokens` wins when both are passed. Chain successive calls via the returned `nextOffset` to reconstruct the file exactly. Recommended token brackets: 2000 / 5000 / 10000 / 20000.
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: releases-mcp
3
+ description: Use when the user asks about recent releases, changelogs, what's new in a library, breaking changes, version updates, or wants to compare products. Activates for questions like "what changed in Next.js 15?", "latest Tailwind releases", "compare Bun vs Deno releases".
4
+ ---
5
+
6
+ # Releases.sh — Changelog Lookup
7
+
8
+ When the user asks about releases, changelogs, or version updates, use the Releases.sh MCP tools to fetch current data instead of relying on training data.
9
+
10
+ ## When to Use This Skill
11
+
12
+ Activate when the user:
13
+
14
+ - Asks what's new or changed in a library/product ("What changed in Next.js 15?")
15
+ - Wants recent releases or changelogs ("Show me the latest Tailwind releases")
16
+ - Asks about breaking changes or migration ("Were there breaking changes in Prisma 6?")
17
+ - Wants to compare release activity between products ("Compare Bun vs Deno releases")
18
+ - Mentions version updates, release notes, or changelogs in the context of a specific product
19
+
20
+ ## How to Look Up Releases
21
+
22
+ ### Step 1: Find the Organization or Product
23
+
24
+ Call `list_organizations` with the library/product name as the `query` parameter. Multi-product orgs (e.g. Vercel → Next.js, Turborepo) are exposed via `list_products` and `get_product` — use those when the user's question is product-specific rather than company-wide.
25
+
26
+ If the query returns no results, try variations:
27
+ - The company name instead of the product name (e.g., "Vercel" instead of "Next.js")
28
+ - The GitHub org name (e.g., "supabase")
29
+ - A domain (e.g., "tailwindcss.com")
30
+
31
+ ### Step 2: Choose the Right Tool
32
+
33
+ - **"What's new?" / "Latest releases"** → Use `get_latest_releases` with the organization or product slug
34
+ - **Specific feature or keyword** → Use `search_releases` with a descriptive query and organization filter
35
+ - **Single release by id** → Use `get_release` when you already have a `rel_` id (search results include ids)
36
+ - **Source or product deep-dive** → Use `get_source`, `get_product`, or `get_organization` for metadata, tags, and linkage
37
+ - **Canonical CHANGELOG.md from a GitHub repo** → Use `get_source_changelog` when the user wants the full maintained file, not just the tagged releases (refreshed on every fetch). For large files, pass `tokens` (cl100k_base budget, e.g. 5000 or 10000) to get a heading-aligned slice that fits a known context window; chain via the returned `nextOffset`. Every response reports `totalTokens` so you can plan how many calls you need upfront.
38
+ - **Compare two products** → Use `compare_products` with an array of two product slugs
39
+ - **Summarize recent activity** → Use `summarize_changes` with the product slug
40
+
41
+ ### Step 3: Present Results
42
+
43
+ - Lead with the most relevant information for the user's question
44
+ - Include version numbers and dates when available
45
+ - Quote key changes directly from the release notes
46
+ - If results are sparse, mention that the product may not be fully indexed yet
47
+
48
+ ## Guidelines
49
+
50
+ - Pass the user's full question context into query parameters for better relevance
51
+ - When the user mentions a time range ("last month", "since v4"), use the `days` parameter on `get_latest_releases` or `summarize_changes`
52
+ - If a product isn't found, say so clearly — don't fabricate release information
53
+ - For comparison questions, both products must be indexed; if one isn't found, explain which is missing