Agent skill

Publish Release

by econumo in econumo/econumo

Publish a new Econumo release end-to-end — pick the version, dispatch the Publish Release GitHub workflow, watch the build, verify the published images, and replace the auto-generated GitHub release…

MITAuto-check passedDevelopment

Install Publish Release

skills CLI
$ npx skills add econumo/econumo --skill publish-release -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install econumo/econumo publish-release --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/econumo/econumo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/publish-release .claude/skills/publish-release && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
publish-release
GitHub stars
112
Token cost
~2.8k tokens
SKILL.md length
1,217 words
Files
2
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

Publish a new Econumo release end-to-end — pick the version, dispatch the Publish Release GitHub workflow, watch the build, verify the published images, and replace the auto-generated GitHub release…

  • Works in 5 steps: Establish the baseline → Prepare the source branch (hotfixes only) → Dispatch and watch → …
  • The user asks to publish
  • SKILL.md covers 1. Establish the baseline, 2. Prepare the source branch…, 3. Dispatch and watch and 4. Write the release notes…, plus 3 more sections
  • Calls git, gh and docker; reaches econumo.com and github.com

What it does

Publish Release is an agent skill from econumo/econumo. Publish a new Econumo release end-to-end — pick the version, dispatch the Publish Release GitHub workflow, watch the build, verify the published images, and replace the auto-generated GitHub release notes with a written summary in the house style. Use whenever the user asks to publish, cut, ship, or tag a new version/release (e.g. "publish v1.2.0", "cut a release", "ship what's on main"), or to rewrite/update the release notes of an existing release.

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `evals/evals.json`).

It sits in Development, covering Changelog and release notes. It works with GitHub and GitHub Actions. The repository describes itself as: Econumo - A personal and family budgeting app with multi-currency support, shared accounts, and flexible budgets. The licence is MIT.

When your agent uses it

  • The user asks to publish
  • Tag a new version/release (e.g

Example prompts

  • “publish v1.2.0”
  • “cut a release”
  • “ship what”
  • “/publish-release”

Requirements

  • Docker

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Establish the baseline
  2. Prepare the source branch (hotfixes only)
  3. Dispatch and watch
  4. Write the release notes while the build runs
  5. Verify, then apply the notes

What it can do on your machine

Read from SKILL.md and the folder at commit d8f415a. 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
    • gh
    • docker

    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:

    • econumo.com
    • 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

Publish Release loads about 2.8k tokens when it runs. Until then it costs about 118 tokens; SKILL.md has 1,217 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~118
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

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.

SKILL.md

The full file from econumo/econumo at commit d8f415a, republished under its MIT licence (© econumo). 1,217 words, ~2,758 tokens.

Download SKILL.mdSave it as .claude/skills/publish-release/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
publish-release
description
Publish a new Econumo release end-to-end — pick the version, dispatch the Publish Release GitHub workflow, watch the build, verify the published images, and replace the auto-generated GitHub release notes with a written summary in the house style. Use whenever the user asks to publish, cut, ship, or tag a new version/release (e.g. "publish v1.2.0", "cut a release", "ship what's on main"), or to rewrite/update the release notes of an existing release.

Publish an Econumo release

Releases are cut by the Publish Release workflow (.github/workflows/publish-release.yml), never by pushing tags or images locally. The workflow's branch input selects the source branch (main by default; a release/* branch for hotfixes), and the dispatch itself always uses --ref main so the workflow definition never comes from a stale branch. The workflow does three things in order: creates the annotated git tag at the source branch's head (a release from main also leaves a release/vX.Y.Z branch at the same commit — the base for future hotfixes to that version; a release from a release/* source creates no branch, because that source is itself the release branch), builds and pushes the multi-arch image to ghcr.io/econumo/econumo, and creates the GitHub release with auto-generated notes (changelogithub). Your job is to drive it, verify each artifact, and then replace the auto-generated notes with notes a human would want to read.

Publishing is outward-facing and irreversible in practice (the tag and image are public immediately). Only run the dispatch when the user has explicitly asked for a release, and if they didn't name the version, propose one and get confirmation first.

1. Establish the baseline

bash
git tag --sort=-creatordate | head -5        # last released version
gh release list --limit 3
git fetch origin main --quiet
git log vLAST..origin/main --oneline          # everything the release will contain

Pick the version by semver over that range: any feat: → minor bump; fixes/chores only → patch. Sanity-check that main is what the user intends to release (no surprising or half-landed work in the log) and that the latest run of the Go tests workflow on main is green (gh run list --workflow=go-tests.yml --branch main --limit 1). Surface anything odd before dispatching — after dispatch there is no undo.

For a hotfix of an older version the version is a patch bump of that line (bug in v1.1.1 → v1.1.2), regardless of what has since shipped from main.

2. Prepare the source branch (hotfixes only)

For a normal release there is nothing to prepare — releasing from main auto-creates release/vX.Y.Z at the released commit, so every version cut from main leaves a branch behind as the base for future fixes.

For a hotfix, the workflow creates NO branch (the rule: release branches are only created for releases from main) — the new version's branch is prepared by hand. Copy the fixed version's release branch to the new version's name, then land the fixes on the copy:

bash
git fetch origin --tags --quiet
# the new version's branch, copied from the fixed version's release branch:
git push origin origin/release/vA.B.C:refs/heads/release/vX.Y.Z
# or, if vA.B.C predates release branches, from its tag:
git push origin 'vA.B.C^{}':refs/heads/release/vX.Y.Z

Land the fixes on release/vX.Y.Z — cherry-pick the fix commits from main onto a working branch and PR it with that branch as the base (or push the cherry-picks directly if the user prefers). The old branch release/vA.B.C stays untouched at its released commit, so every release branch keeps pointing at exactly what its version shipped.

Confirm with git log origin/release/vX.Y.Z that the branch holds exactly the intended fixes and nothing else from main. Note the test workflows ignore pushes to release/** — only the PR route runs tests on the fixes, which is why it is the default; after a direct push, run the suites locally before dispatching.

The fix must reach main too, or the next release from main regresses the bug. Release branches are never merged wholesale into main — they exist to pin what shipped; the fix flows back at the commit level. Default direction: the fix lands on main FIRST (normal PR) and is cherry-picked onto the release branch, so there is nothing to port back. Only when the fix has to be authored on the release branch directly (the code on main has diverged or the bug no longer exists there in the same shape) does it need a forward-port: after the release, cherry-pick it onto a working branch and PR it into main. Audit that nothing was left behind:

bash
git log --no-merges --right-only --cherry-pick --oneline main...origin/release/vX.Y.Z

Empty output means every commit on the release branch is patch-equivalent to one on main; anything listed still needs a forward-port (or a deliberate decision that main doesn't need it — say so in the release notes).

3. Dispatch and watch

bash
# Normal release (source defaults to main):
gh workflow run publish-release.yml --ref main -f version=vX.Y.Z -f push_latest=true

# Hotfix (source = the NEW version's hand-prepared release branch):
gh workflow run publish-release.yml --ref main -f version=vX.Y.Z -f branch=release/vX.Y.Z
  • Always dispatch with --ref main; the branch input (default main) is what selects the code being released.
  • push_latest=true is the norm when releasing the newest version. The workflow enforces it: latest only moves when the source branch is main or release/* AND the version is higher than every existing tag. For a hotfix of an older line, leave it off — the guard would reject it anyway. Leave it off for pre-releases/betas too.
  • The workflow fails fast if the tag already exists.
  • Grab the run id (gh run list --workflow=publish-release.yml --limit 1) and watch it in the background: gh run watch <run-id> --exit-status --interval 30 via a background Bash call. The image build is the long step (several minutes) — use that time for step 4.
Show full SKILL.md (457 more words)Show less

4. Write the release notes while the build runs

The auto-generated notes are just a commit list; always replace them. Gather substance first: the commit subjects give you the map, and gh pr view <n> --json title,body on the headline PRs gives you accurate detail. Write for two audiences at once — self-hosters deciding whether/how to upgrade, and API-client authors who need to know about wire changes.

House style (see the v1.0.0 release for the reference tone):

markdown
📖 **[Read the full release notes, with screenshots →](https://econumo.com/releases/vX.Y.Z/)**

<one-paragraph summary of the release's themes>

## What's new
- **Feature name** (#PR) — what it does and why a user cares, in plain language.

## Security hardening        <- only if the release contains security fixes
- What was fixed, honestly stated; users deserve to know what was exposed.

## Fixes & improvements
- Grouped, user-visible phrasing (not commit subjects).

## Upgrading
Drop-in note for self-hosters (image pull + restart; migrations run on boot).
Call out anything that affects third-party API clients — the wire contract is
frozen for the bundled SPA, so any change to it (new/removed endpoints, field
format changes) MUST be listed here.

The `ghcr.io/econumo/econumo:latest` image tag points to this build; to pin the
exact version use `ghcr.io/econumo/econumo:vX.Y.Z`.

## Contributors
[@login](https://github.com/login) — ...

**Full changelog**: [vLAST...vX.Y.Z](https://github.com/econumo/econumo/compare/vLAST...vX.Y.Z)

The first line is always the link to that version's page on econumo.com, which carries the screenshots and the long-form write-up the GitHub body can't. The URL is always https://econumo.com/releases/vX.Y.Z/ — write it without checking. The GitHub release ships first and the site page follows, so the link is expected to 404 for a while; that is the normal order, not a mistake to fix before publishing.

Contributors come from the actual range, not memory:

bash
git fetch --tags --quiet     # the tag was created REMOTELY by the workflow — fetch before ranging over it
git log vLAST..vX.Y.Z --format='%an <%ae>' | sort | uniq -c
git log vLAST..vX.Y.Z | grep -i 'co-authored-by' | sort | uniq -c

GitHub no-reply emails (ID+login@users.noreply.github.com) embed the numeric user id; resolve the CURRENT login with gh api user/<id> -q .login — old emails may carry a former handle, and two emails with the same id are one person. Credit Claude co-author trailers as a "with Claude (...) co-authoring" note rather than a separate contributor entry.

Draft the notes into a scratchpad file so gh release edit --notes-file can consume it.

5. Verify, then apply the notes

After the workflow succeeds (all three jobs green):

bash
gh release view vX.Y.Z --json tagName,isDraft,url        # release exists, not draft
gh release edit vX.Y.Z --notes-file <notes.md>           # replace notes
docker buildx imagetools inspect ghcr.io/econumo/econumo:vX.Y.Z | grep Digest
docker buildx imagetools inspect ghcr.io/econumo/econumo:latest  | grep Digest

The workflow already aligns the GitHub "Latest" badge with push_latest — don't pass --latest/--latest=false yourself. When push_latest was set, the two digests must match — that is the proof latest actually moved; for a hotfix of an older line, verify the OPPOSITE: latest must still point at the newest version's digest, not the hotfix's. Report the release URL, the digest check, and a summary of what the notes say; invite the user to adjust the wording, since the notes are public-facing prose.

Hotfix example

v1.1.1 is released, main already carries v1.2.0-bound work, and a bug is found in v1.1.1:

bash
# copy the fixed version's branch to the new version's name (from the v1.1.1
# tag instead if the release predates release branches):
git fetch origin --tags --quiet
git push origin origin/release/v1.1.1:refs/heads/release/v1.1.2
# land the fix on release/v1.1.2 (cherry-pick PR based on it), then:
gh workflow run publish-release.yml --ref main -f version=v1.1.2 -f branch=release/v1.1.2

The workflow tags v1.1.2 at the branch head and creates no new branch — release/v1.1.2 already is the release branch; a future v1.1.3 starts by copying it the same way. No push_latest: latest keeps pointing at the newest line, and the workflow keeps the GitHub "Latest" badge off the hotfix release. Notes follow the normal flow with the range v1.1.1...v1.1.2. Afterwards, verify the fix is also on main (it normally started there); if it was authored on the release branch, forward-port it now — see step 2.

Updating notes on an already-published release

Skip steps 1–3. Build the notes exactly as in step 4 (fetch tags first if the tag isn't local), then gh release edit <tag> --notes-file <notes.md>. Don't pass --latest unless the release should also become the latest one.

© econumo, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .claude/skills/publish-release of econumo/econumo.

  • SKILL.md
  • evals/evals.json

Open the folder on GitHubat commit d8f415a

Compare with similar skills

Publish 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.

Publish Release compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Publish Release this skilleconumo/econumo112—~2.8kAutomated safety check: PassMIT
Ccb GitHubSeemSeam/claude_codex_bridge3.6k—~4.9kAutomated safety check: PassCustom licence
ZCF Release AutomationUfoMiao/zcf6.1k—~3.4kAutomated safety check: PassMIT
Cline CLI Release Publishercline/cline70k—~3.4kAutomated safety check: WarnApache-2.0
Codexhost ReleaseBytePioneer-AI/codex-host2.8k—~998Automated safety check: PassLGPL-3.0
Kt Search Releasejillesvangurp/kt-search155—~1.2kAutomated safety check: PassMIT

Similar skills

  • Ccb GitHub

    SeemSeam/claude_codex_bridge

    Maintain this CCB project's GitHub-facing release and npm publication surface.

    3.6k GitHub stars~4.9k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Automates a version release with changesets: analyzes code changes, writes a bilingual CHANGELOG, bumps the version and commits through a release branch and pull request.

    6.1k GitHub stars~3.4k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Walks through releasing the Cline CLI package to npm: release notes, version bump, matching git tag, and either the GitHub workflow or a local publish.

    70k GitHub stars~3.4k tokensUpdated today
    DevelopmentAuto-check: warnings
  • Codexhost Release

    BytePioneer-AI/codex-host

    发布 codexhost 正式版、预览版,编写或确认 Release Notes,检查发布 CI,暂停、恢复或排查发布。支持正常正式发布,以及 npm latest + GitHub Prerelease、不给现有用户更新提示的预览发行。不用于普通代码提交或 Harness CLI 更新。

    2.8k GitHub stars~998 tokensUpdated today
    DevelopmentAuto-check passed
  • Kt Search Release

    jillesvangurp/kt-search

    A skill your agent uses when the user wants to cut, publish, tag, or create a GitHub release for kt-search, especially when the task includes version bumping, validating that commits are pushed…

    155 GitHub stars~1.2k tokensUpdated 3 mo ago
    DevelopmentAuto-check passed
  • Automate npm Release

    jd-solanki/slidev-theme-dracula

    Automate npm package publishing via GitHub Actions for single-package repos and independent monorepo packages, including bumpp version tags, GitHub release notes, trusted publishing, provenance, and…

    161 GitHub stars~626 tokensUpdated 3 mo ago
    DevelopmentAuto-check passed

More from econumo/econumo

  • Add Language

    econumo/econumo

    Translate the Econumo app into a new language. An agent skill from econumo/econumo.

    112 GitHub stars~1.7k tokensUpdated today
    Auto-check passed

Categories

Questions about Publish Release

What does Publish Release do?

Publish a new Econumo release end-to-end — pick the version, dispatch the Publish Release GitHub workflow, watch the build, verify the published images, and replace the auto-generated GitHub release…. Publish Release is an agent skill from econumo/econumo. Publish a new Econumo release end-to-end — pick the version, dispatch the Publish Release GitHub workflow, watch the build, verify the published images, and replace the auto-generated GitHub release notes with a written summary in the house style.

When should I use Publish Release?

Publish Release fits situations like: the user asks to publish; tag a new version/release (e.g.

How do I install Publish Release in Claude Code?

Run `npx skills add econumo/econumo --skill publish-release -a claude-code`. Or copy the skill folder (.claude/skills/publish-release in econumo/econumo) into .claude/skills/publish-release in your project. Claude Code loads it when a task matches its description.

How do I install Publish Release in Codex?

Run `npx skills add econumo/econumo --skill publish-release -a codex`. Or copy the skill folder (.claude/skills/publish-release in econumo/econumo) into .agents/skills/publish-release in your project. Codex loads it when a task matches its description.

Can I use Publish 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 econumo/econumo --skill publish-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/publish-release, .gemini/skills/publish-release, .github/skills/publish-release and .opencode/skills/publish-release in your project.

What does Publish Release need to run?

Going by SKILL.md and its folder, Publish Release needs the command-line tools its instructions call (git, gh and docker). Our summary lists: Docker.

Does Publish Release access the network?

SKILL.md names 2 domains. In commands or code: econumo.com and github.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Publish 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 Publish Release use?

Publish 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 Publish Release use?

About 2.8k tokens (SKILL.md is roughly 11k 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 Publish Release?

Skills that share tags, products or a category with Publish Release: Ccb GitHub (SeemSeam/claude_codex_bridge, 3.6k stars), ZCF Release Automation (UfoMiao/zcf, 6.1k stars), Cline CLI Release Publisher (cline/cline, 70k stars) and Codexhost Release (BytePioneer-AI/codex-host, 2.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Publish Release?

econumo (a GitHub organization) maintains it in econumo/econumo, which has 112 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 9, 2026.

Source: econumo/econumo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.