Cutting A Release
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
Write consistent, hand-written-looking changelog entries for a Poracode release.
$ npx skills add Porabuild/Poracode --skill release-notes -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Porabuild/Poracode release-notes --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Porabuild/Poracode.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/release-notes .claude/skills/release-notes && rm -rf skills-srcUse ~/.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/
Install the "release-notes" agent skill from https://github.com/Porabuild/Poracode/tree/master/.agents/skills/release-notes into .claude/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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.
$skill-installer install https://github.com/Porabuild/Poracode/tree/master/.agents/skills/release-notesType 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.
$ npx skills add Porabuild/Poracode --skill release-notes -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Porabuild/Poracode release-notes --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Porabuild/Poracode.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/release-notes .agents/skills/release-notes && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release-notes" agent skill from https://github.com/Porabuild/Poracode/tree/master/.agents/skills/release-notes into .agents/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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.
$ npx skills add Porabuild/Poracode --skill release-notes -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Porabuild/Poracode release-notes --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Porabuild/Poracode.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/release-notes .cursor/skills/release-notes && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "release-notes" agent skill from https://github.com/Porabuild/Poracode/tree/master/.agents/skills/release-notes into .cursor/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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.
$ gemini skills install https://github.com/Porabuild/Poracode.git --path .agents/skills/release-notes--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Porabuild/Poracode --skill release-notes -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Porabuild/Poracode release-notes --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Porabuild/Poracode.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/release-notes .gemini/skills/release-notes && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "release-notes" agent skill from https://github.com/Porabuild/Poracode/tree/master/.agents/skills/release-notes into .gemini/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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.
$ gh skill install Porabuild/Poracode release-notesInstalls 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).
$ npx skills add Porabuild/Poracode --skill release-notes -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Porabuild/Poracode.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/release-notes .github/skills/release-notes && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "release-notes" agent skill from https://github.com/Porabuild/Poracode/tree/master/.agents/skills/release-notes into .github/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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.
$ npx skills add Porabuild/Poracode --skill release-notes -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Porabuild/Poracode release-notes --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Porabuild/Poracode.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/release-notes .opencode/skills/release-notes && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "release-notes" agent skill from https://github.com/Porabuild/Poracode/tree/master/.agents/skills/release-notes into .opencode/skills/release-notes/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-notes", 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.
release-notesWrite consistent, hand-written-looking changelog entries for a Poracode release.
Release Notes is an agent skill from Porabuild/Poracode. Write consistent, hand-written-looking changelog entries for a Poracode release. Use when the user wants to "add release notes", "update the changelog", "write the changelog for vX.Y.Z", "cut a release entry", or has just tagged/shipped a release and wants the in-app + website changelog updated. Audits release metadata, every commit, and the full previous-release diff—including direct-commit releases with sparse PR coverage—then distills the user-facing changes and maintainer highlights into one curated entry…
Its SKILL.md is about 4.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 Changelog and release notes. It works with GitHub. The repository describes itself as: One window for all your AI coding agents. Run Claude, Codex, OpenCode, Gemini, Antigravity, Cursor, and Copilot side-by-side. Terminal and chat, any layout. The licence is Apache-2.0.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit bffd89d. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
Bash(gh:*)Bash(git:*)Bash(pnpm:*)Bash(node:*)ReadEditWriteGrepGlobFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitpnpmghFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
poracodeapp.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Release Notes loads about 4.2k tokens when it runs. Until then it costs about 143 tokens; SKILL.md has 1,717 words of instructions outside code blocks.
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.
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.
The full file from Porabuild/Poracode at commit bffd89d, republished under its Apache-2.0 licence (© Porabuild). 1,717 words, ~4,192 tokens.
.claude/skills/release-notes/SKILL.md (or your agent's skills folder).Turn a release's PRs, complete commit range, and actual code diff into a curated, human-readable changelog entry that reads like a person wrote it — and keep every release in the changelog consistent in voice, shape, and length.
Poracode's changelog is curated data, not auto-generated. GitHub already auto-lists merged PRs on the Release page; this skill produces the hand-written layer that ships inside the app (Settings → Changelog, the "What's New" dialog) and on the marketing site.
There is a single source of truth: website/public/changelog.json on master.
The marketing site serves it at https://www.poracodeapp.com/changelog.json and the
desktop app fetches + caches it at runtime, so editing this one file (and pushing to
master, which redeploys the site) updates both surfaces without an app rebuild.
Shape — an object with a newest-first releases array (do not invent fields):
{
"releases": [
{
"version": "1.3.1",
"date": "2026-06-17",
"title": "Short punchy headline, NO version number",
"summary": "One or two sentences — the release's elevator pitch.",
"changes": [
{
"kind": "added",
"label": "Projects",
"text": "One complete, user-facing sentence."
},
{ "kind": "fixed", "text": "A mixed-scope fix that needs no forced label." }
]
}
]
}kind is one of added | improved | fixed. Release-note text stays English (it is
not localized — only the surrounding app UI chrome is). label is an optional short
feature or product prefix; labeled and unlabeled changes may appear in the same release.
Resolve the repo slug from the remote (default Porabuild/Poracode):
gh repo view --json nameWithOwner -q .nameWithOwnerThen collect, for the target version:
gh api repos/<owner>/<repo>/releases/tags/v<X.Y.Z> --jq '{date: .published_at, body: .body}'git log --date=iso-strict --pretty='format:%H%n%ad%n%s%n%b' <previousTag>..<target>
git diff --stat <previousTag>..<target>
git diff --name-status <previousTag>..<target>
git diff <previousTag>..<target>feat/fix that touch UI, settings, i18n, or provider adapters).HEAD), confirm its package version matches the requested version, and
state this boundary in the handoff rather than pretending the tag exists.Before drafting prose, walk every non-merge commit in <previousTag>..<target> and
assign one disposition. Keep this ledger in your working notes (it does not ship in
changelog.json, but you must not skip it):
| Disposition | When |
|---|---|
| include | User-facing on its own — gets its own bullet (or is the seed of one). |
| fold into <bullet> | Related to a larger change already included; note which bullet absorbs it. |
| omit | Implementation-only, test-only, merge-only, build, chore, pure rename, or internal refactors with no visible behavior change. Write a one-line reason. |
Always-include signals (treat as include or fold, never silent omit):
src/renderer/locales/**/messages.po (or mobile/website locale catalogs). New
strings almost always mean a user can see something new.improved, not noise.Safe to omit (with an explicit reason):
website/** that do not affect the shared
changelog.json data or in-app surfaces) — mention only when they are a real
product surface (e.g. a new About page, pairing flow). Sticky nav on the public
changelog page is optional; prefer app-facing notes when distilling.Anti-pattern that caused a real miss (1.6.1): a small feat(pr-watch) that only
swapped the PR automation trigger icon/label per Auto Fix vs Auto Merge was dropped
while larger sidebar/workspace bullets dominated. It touched every locale catalog and
changed what users see on every automated PR — that is include as improved, not
"too small to list."
Reconciliation gate: every feat/* and fix/* commit that touches
src/renderer/**, src/mobile/**, src/shared/messages.ts, or locale catalogs must
end as include or fold into …. If you cannot fold it cleanly, give it a bullet.
Quick helpers when auditing:
# Commits that added/changed localized strings (strong user-facing signal)
git log --pretty='%h %s' --name-only <previousTag>..<target> -- 'src/renderer/locales/**'
# UI / settings / PR surfaces in the range
git log --pretty='%h %s' --name-only <previousTag>..<target> -- \
'src/renderer/**' 'src/mobile/**' 'website/src/**'Never assume a feature is brand new. Before writing bullets, cross-check previous releases in website/public/changelog.json:
# Search existing changelog for mentions of the area or feature
grep -in "<feature-keyword>" website/public/changelog.jsonVerify Lineage:
"You can now <basic action>" as an added bullet. That is a hallucination of novelty.improved (e.g. "GitHub Actions now supports multiple signed-in accounts", "Switching providers now continues inside the same thread (Handoff 2.0)", "Archived thread management is redesigned for multi-workspace and remote filtering").Differentiate Plumbing from User Benefits:
Check Environment & Scope Support:
This is the consistency contract. Match the voice of the existing entries (read a couple from website/public/changelog.json first).
title
&. E.g. \"Antigravity ACP, Handoff 2.0 & thread mentions\".summary
\"A big feature release: …\". Patches stay factual and short.changes
kind: added (new capability) · improved (better/faster/refined existing) · fixed (bug fix). Order them added → improved → fixed.label: optional short feature/product prefix. Add it only when the whole sentence belongs
to one obvious surface such as Remote, Claude, Plugins, or Security. Omit it for mixed-scope
sentences or whenever the right label is uncertain; never force every change to have one.added bullets with the maintainer's highlights when present.include must map to a bullet
(alone or folded); every omit must still look like noise on a second look.Hard rules (what makes it look hand-written)
by @handle, no dependabot/CI/chore/build(deps) items, no raw PR-title phrasing.title.grep against website/public/changelog.json and mark upgrades as improved.improved items.Poracode, Claude, Codex, Gemini, Grok, Command Code, WSL, ACP, Opus 4.8, Ultracode, Fable 5, Git, GitHub, macOS, Windows, Linux.✅ { kind: "added", text: "Start a new project by cloning any GitHub repository directly from Poracode." }
✅ { kind: "improved", label: "Provider switch", text: "Switching providers or models now continues seamlessly inside the same thread while preserving your full conversation history and active MCP configuration (Handoff 2.0)." }
✅ { kind: "improved", label: "GitHub", text: "GitHub Actions now supports multiple signed-in GitHub accounts, letting you switch accounts when browsing workflows, dispatching runs, or inspecting CI statuses." }
❌ { kind: "added", label: "GitHub Actions", text: "You can now view workflow runs, inspect step logs, and monitor action statuses directly inside Poracode." } // Hallucination: GitHub Actions was added in 1.6.0; multi-account support was the 1.7.0 delta
❌ { kind: "added", text: "Add GitHub repository clone flow by @SDSLeon in #167" } // raw PR title + noise
❌ { kind: "added", text: "Added clone." } // too thin, no benefit
❌ omit "PR automation mode icons" as "too small / polish" // discoverability is user-facing{
version: "X.Y.Z",
date: "YYYY-MM-DD",
title: "Headline feature, second feature & third",
summary:
"One or two sentences on what this release gives the user overall.",
changes: [
{ kind: "added", label: "Projects", text: "You can now …" },
{ kind: "improved", text: "… is now faster / clearer / smoother because …" },
{ kind: "fixed", text: "… no longer … ." },
],
},Prepend the new entry to the releases array in website/public/changelog.json
(newest first; the app re-sorts defensively, but keep the source tidy). Keep valid JSON —
double-quoted keys/strings, no trailing commas.
When amending an already-published entry (missed bullet, wrong wording), edit that release in place — do not invent a new version. Changelog data deploys with the site; the app refetches it without an app rebuild.
pnpm exec vitest run src/shared/changelog.test.ts # validates changelog.json: schema, sorted, unique, all fields
pnpm run typecheckOptionally build the marketing site to confirm the /changelog page renders:
pnpm --dir website build.
Then commit + push to master — Vercel redeploys the site and the desktop app fetches the new notes on its own (no app release needed for a notes-only change).
title has no version number; summary is 1–2 sentences.website/public/changelog.json to verify feature lineage and ensure existing capabilities are not falsely claimed as added.include, fold into …, or omit with a reason.feat/fix that touches renderer/mobile UI, settings, messages, or locale catalogs is include or fold — none silently omitted.improved when present in the range.version (no v) and date (release date, ISO) are correct.website/public/changelog.json is valid JSON; the test + typecheck pass.© Porabuild, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/release-notes of Porabuild/Poracode.
Open the folder on GitHubat commit bffd89d
Release Notes 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Release Notes this skillPorabuild/Poracode | 114 | — | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Cutting A ReleaseTriliumNext/Trilium | 38k | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| Mole CLI Release Flowtw93/Mole | 69k | — | ~2.5k | Automated safety check: Pass | GPL-3.0 | |
| Draft Release Notesjamiepine/voicebox | 57k | — | ~941 | Automated safety check: Pass | MIT | |
| Mole Release Notes Publishertw93/Mole | 69k | — | ~1.9k | Automated safety check: Pass | GPL-3.0 | |
| Release Bumpjamiepine/voicebox | 57k | — | ~1.1k | Automated safety check: Pass | MIT |
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
tw93/Mole
Runbook for assessing and executing a Mole CLI release: distribution channels, pre-flight checks, capital-V tags, build artifacts and the handoff to curated release notes.
jamiepine/voicebox
Writes or refreshes the Unreleased section of CHANGELOG.md as a themed narrative built from the commits, PRs and diff since the last version tag.
tw93/Mole
Publishes curated, bilingual release notes for an existing Mole version tag with gh release edit, including contributor thanks and reactions, after the release workflow finishes.
jamiepine/voicebox
Ends a release cycle by moving the Unreleased changelog notes under a dated version heading, bumping version files with bumpversion and tagging the commit.
jfernandez/bpftop
Cut a new versioned release of bpftop — pick the version, open a version-bump PR, sign-tag the merge commit on main, and draft GitHub release notes in the project's established format.
Porabuild/Poracode
Run repeatable integration and smoke testing against the real Poracode Electron app through Chrome DevTools Protocol.
Porabuild/Poracode
Create a new reusable agent skill managed by Poracode. An agent skill from Porabuild/Poracode.
Porabuild/Poracode
Inspect and drive Poracode itself — the Terminal panel, other threads, projects, workspaces, git, pull requests, and schedules — through the poracode MCP.
Porabuild/Poracode
Use the user's real Chrome tabs and signed-in sessions for visible browser workflows.
Porabuild/Poracode
Inspect and operate native Windows, macOS, or Linux applications through Poracode's desktop-control tools.
Porabuild/Poracode
Smoke test real Poracode provider chat threads and ACP sessions end to end.
Works with
Categories
Write consistent, hand-written-looking changelog entries for a Poracode release. Release Notes is an agent skill from Porabuild/Poracode. Write consistent, hand-written-looking changelog entries for a Poracode release.
Release Notes fits situations like: the user wants to add release notes; update the changelog; write the changelog for vX.Y.Z; cut a release entry.
Run `npx skills add Porabuild/Poracode --skill release-notes -a claude-code`. Or copy the skill folder (.agents/skills/release-notes in Porabuild/Poracode) into .claude/skills/release-notes in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Porabuild/Poracode --skill release-notes -a codex`. Or copy the skill folder (.agents/skills/release-notes in Porabuild/Poracode) into .agents/skills/release-notes in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Porabuild/Poracode --skill release-notes -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-notes, .gemini/skills/release-notes, .github/skills/release-notes and .opencode/skills/release-notes in your project.
Going by SKILL.md and its folder, Release Notes needs the command-line tools its instructions call (git, pnpm and gh). Its frontmatter pre-approves these tools: Bash(gh:*), Bash(git:*), Bash(pnpm:*), Bash(node:*), Read, Edit, Write, Grep, Glob.
SKILL.md names 1 domain. In commands or code: poracodeapp.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
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.
Release Notes is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Release Notes: Cutting A Release (TriliumNext/Trilium, 38k stars), Mole CLI Release Flow (tw93/Mole, 69k stars), Draft Release Notes (jamiepine/voicebox, 57k stars) and Mole Release Notes Publisher (tw93/Mole, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Porabuild (a GitHub organization) maintains it in Porabuild/Poracode, which has 114 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 7, 2026.
Source: Porabuild/Poracode on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.