Install the "release" agent skill from https://github.com/joa23/linear-cli/tree/main/.claude/skills/release into .claude/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add joa23/linear-cli --skill release -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "release" agent skill from https://github.com/joa23/linear-cli/tree/main/.claude/skills/release into .agents/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add joa23/linear-cli --skill release -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "release" agent skill from https://github.com/joa23/linear-cli/tree/main/.claude/skills/release into .cursor/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add joa23/linear-cli --skill release -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "release" agent skill from https://github.com/joa23/linear-cli/tree/main/.claude/skills/release into .gemini/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
GitHub CLI
$ gh skill install joa23/linear-cli release
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add joa23/linear-cli --skill release -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "release" agent skill from https://github.com/joa23/linear-cli/tree/main/.claude/skills/release into .github/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add joa23/linear-cli --skill release -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "release" agent skill from https://github.com/joa23/linear-cli/tree/main/.claude/skills/release into .opencode/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
release
GitHub stars
144
Token cost
~3.2k tokens
SKILL.md length
658 words
Files
1
Skills in repo
8
Repo updated
First seen
Licence
MIT
At a glance
Pre-release checklist to ensure CHANGELOG, version numbers, tests, and documentation are updated before cutting a release.
Works in 9 steps: Determine Release Version → Update CHANGELOG.md → Update Version Numbers → …
Tasks that involve Feature launches and release readiness
SKILL.md covers When to Use, The Problem, Pre-Release Checklist and Release Checklist Template, plus 7 more sections
Calls git, make and brew; reaches github.com
What it does
Release is an agent skill from joa23/linear-cli. Pre-release checklist to ensure CHANGELOG, version numbers, tests, and documentation are updated before cutting a release.
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Feature launches and release readiness and Changelog and release notes. The repository describes itself as: A token-efficient CLI for Linear. The licence is MIT.
When your agent uses it
Tasks that involve Feature launches and release readiness
Tasks that involve Changelog and release notes
Example prompts
“/release”
Workflow steps
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 575c6f0. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
Shell commands in SKILL.md call:
git
make
brew
gh
From the folder's file list and the shell code blocks in SKILL.md.
Network
Hosts in commands or code, which the agent is likely to contact:
github.com
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Release loads about 3.2k tokens when it runs. Until then it costs about 33 tokens; SKILL.md has 658 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~33
When it runs· the whole SKILL.md, loaded when a task matches
~3.2k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
## [X.Y.Z] - YYYY-MM-DD
### Added
- New features go here
- Each feature as a bullet point
- Use present tense ("Add feature" not "Added feature")
### Changed
- Breaking changes
- Improvements to existing features
- Documentation updates
### Fixed
- Bug fixes
- Security patches
### Removed
- Deprecated features removed
[X.Y.Z]: https://github.com/USER/REPO/compare/vX.Y.Z-1...vX.Y.Z
What to Include:
✅ All user-facing changes
✅ New commands, flags, features
✅ Bug fixes that users would notice
✅ Breaking changes (ALWAYS mention these)
✅ New skills or major documentation
❌ Internal refactoring (unless it improves performance)
❌ Code cleanup that doesn't affect users
❌ Test-only changes
Step 3: Update Version Numbers
Check and update version in all files:
bash
# 1. Homebrew formula
grep "version" Formula/linear-cli.rb
# 2. Any version constants in code
grep -r "version.*=.*\"" --include="*.go" .
# 3. Package files (if applicable)
grep "version" package.json 2>/dev/null
Files to check:
Formula/linear-cli.rb - version field
Any version constants in Go code
README badges (if version is shown)
Step 4: Verify Documentation
README.md:
bash
# Check README mentions new features
grep -i "search" README.md # Example: check new feature is documented
CLAUDE.md:
bash
# Check AI agent documentation is current
cat CLAUDE.md | head -100
Questions to ask:
Does README showcase new features?
Are new commands in the help output?
Do examples use the latest syntax?
Are new skills listed?
Step 5: Run All Tests
bash
# Run full test suite
make test
# Check for test failures
echo $? # Should be 0
If tests fail:
❌ DO NOT proceed with release
Fix the failing tests first
Commit the fixes
Run tests again
Step 6: Check for Uncommitted Changes
bash
git status
Must show:
On branch main
nothing to commit, working tree clean
If there are uncommitted changes:
Review them carefully
Commit if they should be in the release
Discard if they're experimental
Step 7: Build and Smoke Test
bash
# Build the binary
make build
# Test critical commands
./bin/linear --help
./bin/linear search --help
./bin/linear skills list
# Test a real command (if auth is configured)
./bin/linear issues list --limit 1
Step 8: Execute Release
Only after ALL previous steps pass.
CRITICAL: Do NOT run goreleaser locally
bash
# ❌ DON'T do this - causes duplicate upload errors:
goreleaser release --clean
# ✅ DO this instead - let GitHub Actions build:
git tag vX.Y.Z && git push origin vX.Y.Z
gh run watch --exit-status
gh release download vX.Y.Z --pattern checksums.txt --output -
Running goreleaser locally AND having GitHub Actions run it causes duplicate artifact uploads and release failures.
bash
# 1. Commit any pending changes (CHANGELOG, code fixes)
git add -A
git commit -m "fix: Description of changes
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
git push origin main
# 2. Create and push tag (this triggers GitHub Actions)
git tag vX.Y.Z && git push origin vX.Y.Z
# 3. Wait for GitHub Actions to complete (~2 minutes)
gh run watch --exit-status
# 4. Get checksums from the release
gh release download vX.Y.Z --pattern checksums.txt --output -
# 5. Update Homebrew formula with new version and SHA256 checksums
# Edit Formula/linear-cli.rb:
# - version "X.Y.Z"
# - Update all sha256 values for each platform
# 6. Commit and push formula
git add Formula/linear-cli.rb
git commit -m "chore: Update formula to vX.Y.Z"
git push origin main
Step 9: Install and Verify
bash
# 1. Update the local Homebrew tap
cd /opt/homebrew/Library/Taps/joa23/homebrew-linear-cli && git pull && cd -
# 2. Upgrade via Homebrew
brew upgrade linear-cli
# 3. Verify version
linear --version
# 4. Test the fix (example: if you fixed state filtering)
linear issues list --state "In Progress" --team TEST --limit 1
# 5. Test critical functionality
linear --help
linear issues list --limit 1
If upgrade fails or wrong version:
bash
# Force reinstall
brew uninstall linear-cli
brew install linear-cli
Release Checklist Template
Copy this checklist before each release:
markdown
## Release vX.Y.Z Checklist
### Pre-Release
- [ ] Determined version number (MAJOR.MINOR.PATCH)
- [ ] Updated CHANGELOG.md with all changes
- [ ] Added section
- [ ] Changed section
- [ ] Fixed section
- [ ] Version link at bottom
- [ ] Verified version numbers consistent
- [ ] Formula/linear-cli.rb
- [ ] Code constants (if any)
- [ ] Documentation updated
- [ ] README.md includes new features
- [ ] CLAUDE.md current
- [ ] Help text accurate
- [ ] All tests pass (`make test`)
- [ ] No uncommitted changes (`git status`)
- [ ] Built and smoke tested (`make build`)
### Release
- [ ] Committed all changes with proper message
- [ ] Pushed to main
- [ ] Created and pushed tag (`git tag vX.Y.Z && git push origin vX.Y.Z`)
- [ ] Waited for GitHub Actions (`gh run watch --exit-status`)
- [ ] Downloaded checksums (`gh release download vX.Y.Z --pattern checksums.txt --output -`)
- [ ] Updated Homebrew formula
- [ ] Version number
- [ ] All SHA256 checksums (Darwin arm64, Darwin x86_64, Linux arm64, Linux x86_64)
- [ ] Committed and pushed formula
### Post-Release
- [ ] Updated local Homebrew tap (`cd /opt/homebrew/.../homebrew-linear-cli && git pull`)
- [ ] Upgraded via Homebrew (`brew upgrade linear-cli`)
- [ ] Verified `linear --version` shows correct version
- [ ] Manually tested the fix/feature
- [ ] Smoke tested critical commands
Common Mistakes to Avoid
Show full SKILL.md (265 more words)Show less
❌ Forgetting CHANGELOG
Problem: Users don't know what changed.
Solution: ALWAYS update CHANGELOG BEFORE creating tag.
❌ Inconsistent Versions
Problem: Formula says v1.2.0 but tag is v1.3.0.
Solution: Grep for all version references before tagging.
❌ Releasing with Failing Tests
Problem: Broken release shipped to users.
Solution:make test must pass before release.
❌ Missing Documentation
Problem: New feature exists but isn't documented.
Solution: Update README and skills before release.
❌ Wrong Semantic Version
Problem: Bug fix released as MINOR version.
Solution: Review commit log to classify changes:
New features = MINOR
Bug fixes = PATCH
Breaking changes = MAJOR
Rollback Procedure
If you need to rollback a bad release:
bash
# 1. Delete the GitHub release
gh release delete vX.Y.Z --yes
# 2. Delete the tag locally and remotely
git tag -d vX.Y.Z
git push origin :refs/tags/vX.Y.Z
# 3. Fix the issues
# ... make fixes ...
# 4. Start release process again with same version (or bump to vX.Y.Z+1)
Automation Notes
What could be automated:
✅ Version bump in files (script)
✅ CHANGELOG generation from commits (partially - needs human review)
✅ Running tests (CI/CD)
❌ Writing good CHANGELOG descriptions (needs human judgment)
❌ Deciding what's user-facing vs internal (needs context)
This skill focuses on the human judgment parts that can't be automated.
Example Release Session
User: I want to cut a new release for the search feature we just added.
Assistant (using /release skill):
Let me guide you through the pre-release checklist for cutting a release.
**Step 1: Determine Version**
Current version: v1.0.1
Commits since last release:
- feat: Add unified search command
- feat: Add dependency filtering
- feat: Add /link-deps skill
- docs: Update documentation
- fix: Token sanitization
This contains new features (search, link-deps skill), so we should bump MINOR version.
→ Next version: v1.2.0
**Step 2: CHANGELOG Check**
Let me read CHANGELOG.md...
❌ CHANGELOG.md is missing v1.2.0 section!
I need to add a section for v1.2.0. Let me review commits to categorize:
Added:
- Unified search command
- Dependency filters (--blocked-by, --blocks, etc.)
- /link-deps skill
- Enhanced documentation
Changed:
- All skills updated with search references
Fixed:
- Token sanitization
Let me update CHANGELOG.md now...
[Updates CHANGELOG]
✅ CHANGELOG.md now includes v1.2.0
**Step 3: Version Numbers**
Checking Formula/linear-cli.rb... shows v1.1.1
❌ Needs update to v1.2.0 (but this happens AFTER goreleaser)
**Step 4: Documentation**
Checking README.md... ✅ Search feature documented
Checking CLAUDE.md... ✅ Current
Checking --help output... ✅ Up to date
**Step 5: Tests**
Running: make test
✅ All tests pass
**Step 6: Uncommitted Changes**
Running: git status
Modified files:
- CHANGELOG.md
❌ We have uncommitted CHANGELOG changes
→ Commit these before proceeding
[User commits CHANGELOG]
**Step 7: Build and Smoke Test**
Running: make build
Testing: ./bin/linear search --help
✅ Build successful, commands working
**Step 8: Execute Release**
✅ All checks passed! Executing release:
1. git add -A && git commit -m "..." && git push origin main
2. git tag v1.2.0 && git push origin v1.2.0
3. gh run watch --exit-status # Wait for GitHub Actions
4. gh release download v1.2.0 --pattern checksums.txt --output -
5. [Update Formula/linear-cli.rb with checksums]
6. git add Formula/linear-cli.rb && git commit && git push
**Step 9: Install and Verify**
cd /opt/homebrew/Library/Taps/joa23/homebrew-linear-cli && git pull && cd -
brew upgrade linear-cli
linear --version # Shows v1.2.0
linear search --help # Test the new feature
✅ Release complete!
This systematic approach caught the missing CHANGELOG entry!
Quick Reference
Before EVERY release, run through this:
bash
# 1. What version?
git log --oneline $(git describe --tags --abbrev=0)..HEAD
# 2. CHANGELOG updated?
grep -A 20 "## \[.*\]" CHANGELOG.md | head -30
# 3. Tests pass?
make test
# 4. Clean git state?
git status
# 5. Build works?
make build && ./bin/linear --help
If ANY check fails, stop and fix it before creating the tag.
Best Practices
Update CHANGELOG first - Don't wait until after tagging
Review every commit - Understand what's actually changing
Test the build - Don't assume it works
Document new features - Users need to know what's new
Use semantic versioning - Breaking changes = MAJOR bump
Release next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
Audit herdr release readiness by comparing commits since the base release against next-release changelog and docs. Use when asked to run or apply the repo's…
Guides publishing a one-time What's new dialog in the Cline desktop app: deciding if one is due, picking highlights from the changelog and editing one content file.
A skill your agent uses when releasing a bundle-plugin, bumping versions, fixing version drift across manifests, setting up version sync infrastructure, updating CHANGELOG, publishing to…
Cut a release of OpenUsage (Swift menu-bar app): pick a version, generate a categorized changelog, tag from main, and publish the GitHub Release with notes.
Pre-release checklist to ensure CHANGELOG, version numbers, tests, and documentation are updated before cutting a release. Release is an agent skill from joa23/linear-cli. Pre-release checklist to ensure CHANGELOG, version numbers, tests, and documentation are updated before cutting a release.
When should I use Release?
Release fits situations like: tasks that involve Feature launches and release readiness; tasks that involve Changelog and release notes.
How do I install Release in Claude Code?
Run `npx skills add joa23/linear-cli --skill release -a claude-code`. Or copy the skill folder (.claude/skills/release in joa23/linear-cli) into .claude/skills/release in your project. Claude Code loads it when a task matches its description.
How do I install Release in Codex?
Run `npx skills add joa23/linear-cli --skill release -a codex`. Or copy the skill folder (.claude/skills/release in joa23/linear-cli) into .agents/skills/release in your project. Codex loads it when a task matches its description.
Can I use Release in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add joa23/linear-cli --skill release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release, .gemini/skills/release, .github/skills/release and .opencode/skills/release in your project.
What does Release need to run?
Going by SKILL.md and its folder, Release needs the command-line tools its instructions call (git, make, brew and gh).
Does Release access the network?
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Is Release safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
What licence does Release use?
Release is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Release use?
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
What are the alternatives to Release?
Skills that share tags, products or a category with Release: Herdr Pre-Release Audit (herdrdev/herdr, 43k stars), Desktop What's New Dialog (cline/cline, 70k stars), Megaphone Release (Kuberwastaken/megaphone, 169 stars) and Create Release Checklist (software-mansion/smelter, 732 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Release?
joa23 (a GitHub user) maintains it in joa23/linear-cli, which has 144 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on September 13, 2026.
Source: joa23/linear-cli on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.