Skip to content
Agentmart
Submit a tool

release-foss

Release a public (FOSS) repo — version bump, CHANGELOG, reviewed release PR, tag after merge, a public GitHub release with notes cut to fit, the registry…

Skill by Congruentsys

IndexedMIT★ 1
Write a review

Chalk Labs

Need help deploying release-foss?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/congruentsys-release-foss

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Release a public (FOSS) repo — version bump, CHANGELOG, reviewed release PR, tag after merge, a public GitHub release with notes cut to fit, the registry publish confirmed live, and credit to external contributors

Use cases: productivity

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/release-foss

Tools it pre-approves 18

From allowed-tools in SKILL.md: the agent may use these without asking you each time.

  • Bash(git
  • *),
  • Bash(grep
  • Bash(gh
  • Bash(wc
  • Bash(head
  • Bash(sort
  • Bash(tr
  • Bash(paste
  • Bash(pip
  • index
  • Bash(npm
Show 6 more
  • view
  • Bash(cargo
  • search
  • Read,
  • Edit,
  • Write

What's inside

Skill name
release-foss
Description
Release a public (FOSS) repo — version bump, CHANGELOG, reviewed release PR, tag after merge, a public GitHub release with notes cut to fit, the registry publish confirmed live, and credit to external contributors
License
MIT
Allowed tools
Bash(git, *),, Bash(grep, *),, Bash(gh, *),, Bash(wc, *),, Bash(head, *),, Bash(sort, *),, Bash(tr, *),, Bash(paste, *),, Bash(pip, index, *),, Bash(npm, view, *),, Bash(cargo, search, *),, Read,, Edit,, Write
Instructions
232 lines in SKILL.md · view on GitHub

Before installing

  • Pre-approves some shell commands

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Release a Public (FOSS) Repo

A release of a public package: the version bump, the CHANGELOG, a release PR reviewed by
someone other than the author, a tag on the merged commit, a public GitHub release, the
package published to its registry, and thanks to the people outside the team who
contributed.

For an internal repo (no public notes, no registry, no contributor thanks) use
`/release` instead. If your repo has its own release skill with its specifics (scripts,
version files, workflows), follow that one: it builds on this.

## Arguments

- `patch` (default): Bug fixes, minor improvements (0.9.0 → 0.9.1)
- `minor`: New features, non-breaking changes (0.9.0 → 0.10.0)
- `major`: Breaking changes (0.9.0 → 1.0.0)
- `--message "Description"`: Optional release description

## Steps

### 1. Check Current State

```bash
git checkout main
git pull --ff-only origin main
git status                      # must be clean
git describe --tags --abbrev=0  # the previous release tag
```

Fail if there are uncommitted changes. All work must be committed first.

Find **every** file that carries the version. Search, do not glob:

```bash
grep -n '^version' pyproject.toml Cargo.toml 2>/dev/null
grep -n '"version"' package.json 2>/dev/null
# ⚠ NOT `*/__init__.py` — that glob is one directory deep and MISSES a src/ layout
# (src/<package>/__init__.py). A detection that cannot see the file is how a
# release skipped "update that too" and shipped v2.1.0 with __version__ = "2.0.1":
# the published package answered the wrong version for a whole release.
grep -rn "__version__" --include="__init__.py" . 2>/dev/null | grep -v "/.git/" | head -5
grep -rn "^const Version\|^VERSION *=" --include="*.go" --include="*.rb" . 2>/dev/null | grep -v "/.git/" | head -5
```

Write down the list. Step 3 updates every file on it, and step 5 stages every one.

### 2. Calculate New Version

| Current | Bump Type | New Version |
|---------|-----------|-------------|
| 1.1.0 | patch | 1.1.1 |
| 1.1.0 | minor | 1.2.0 |
| 1.1.0 | major | 2.0.0 |

A removed or renamed public API, flag or command is `major`, whatever else is in it.

### 3. Update Version Files

Set `X.Y.Z` in every file found in step 1 (e.g. `version = "X.Y.Z"` in
`pyproject.toml`, `__version__ = "X.Y.Z"` in the package's `__init__.py`). Then search
again for the OLD version and confirm only history (the CHANGELOG, lockfiles of other
packages) still has it:

```bash
grep -rn "OLD.VERSION" --include="*.toml" --include="*.py" --include="*.json" . | grep -v "/.git/"
```

### 4. Update CHANGELOG.md

**If the repo collects changelog fragments** (a fragments directory with an assembler
script, e.g. towncrier or a repo-local script), run the assembler for `X.Y.Z` instead
of writing the section by hand. Most assemblers delete the fragments they consume; those
deletions are part of the release commit (step 5).

**Otherwise** add the section at the top of CHANGELOG.md (create it if it doesn't exist),
in [Keep a Changelog](https://keepachangelog.com) form:

```markdown
## [X.Y.Z] - YYYY-MM-DD

### Added
- [New features if any]

### Changed
- [Changes if any]

### Fixed
- [Bug fixes if any]
```

Name each external contributor on their entry, by GitHub login: `(#123, thanks @login)`.
External means the PR author is not an OWNER, MEMBER or COLLABORATOR of the repo. Find
them among the PRs merged since the last tag (`gh pr list` has no `authorAssociation`
field, so this uses `gh search prs`; the date search is day-granular, so the `grep` keeps
only PRs whose numbers appear in `<tag>..HEAD`, not ones the last release already credited):

```bash
TAG=$(git describe --tags --abbrev=0)
IN_RELEASE=$(git log "$TAG"..HEAD --format=%s | grep -oE '#[0-9]+' | tr -d '#' | sort -u | paste -sd'|' -)
gh search prs --repo OWNER/REPO --merged-at ">=$(git log -1 --format=%cs "$TAG")" --limit 1000 \
  --json number,author,authorAssociation \
  --jq '.[] | select(.authorAssociation as $a | ["OWNER","MEMBER","COLLABORATOR"] | index($a) | not) | "#\(.number) @\(.author.login)"' \
  | grep -wE "^#($IN_RELEASE)"
```

If a release message was provided, include it.

### 5. Commit the Release on a Branch

A release commit goes through a pull request like every other commit. Never push it
to main directly.

```bash
git checkout -b chore/release-vX.Y.Z
git add CHANGELOG.md <every version file from step 1>
git add -A <the fragments directory>   # if step 4 assembled fragments: stages their deletions
git status                             # an unstaged version file here is the bug, not noise
git commit -m "chore: release vX.Y.Z

From Congruentsys/yurtle-kanban, MIT.

More from Congruentsys/yurtle-kanban

Signals

Stars
1
Forks
1
Open issues
2
Last commit (this folder)
Oct 1, 2026 (29 days ago)
Last release
Oct 3, 2026 (27 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Congruentsys

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get release-foss running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying release-foss?

CallGet help
Cite this page

release-foss skill. Agent Mart. https://agentmart.dev/skills/congruentsys-release-foss (last updated 2026-10-24)