Curate Whats New
docker/docs
Curate noteworthy Docker launches from documentation pull requests merged during a requested period.
End-to-end release automation — reads commits since last tag, infers semver bump, drafts changelog, creates release PR, merges it, waits for CI green, tags, and monitors the Docker build to…
$ npx skills add jpicklyk/task-orchestrator --skill prepare-release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jpicklyk/task-orchestrator prepare-release --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/jpicklyk/task-orchestrator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/prepare-release .claude/skills/prepare-release && 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 "prepare-release" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/.claude/skills/prepare-release into .claude/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-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.
$skill-installer install https://github.com/jpicklyk/task-orchestrator/tree/main/.claude/skills/prepare-releaseType 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 jpicklyk/task-orchestrator --skill prepare-release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jpicklyk/task-orchestrator prepare-release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/prepare-release .agents/skills/prepare-release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "prepare-release" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/.claude/skills/prepare-release into .agents/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-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.
$ npx skills add jpicklyk/task-orchestrator --skill prepare-release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jpicklyk/task-orchestrator prepare-release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/prepare-release .cursor/skills/prepare-release && 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 "prepare-release" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/.claude/skills/prepare-release into .cursor/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-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.
$ gemini skills install https://github.com/jpicklyk/task-orchestrator.git --path .claude/skills/prepare-release--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 jpicklyk/task-orchestrator --skill prepare-release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jpicklyk/task-orchestrator prepare-release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/prepare-release .gemini/skills/prepare-release && 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 "prepare-release" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/.claude/skills/prepare-release into .gemini/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-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.
$ gh skill install jpicklyk/task-orchestrator prepare-releaseInstalls 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 jpicklyk/task-orchestrator --skill prepare-release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/prepare-release .github/skills/prepare-release && 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 "prepare-release" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/.claude/skills/prepare-release into .github/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-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.
$ npx skills add jpicklyk/task-orchestrator --skill prepare-release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jpicklyk/task-orchestrator prepare-release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jpicklyk/task-orchestrator.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/prepare-release .opencode/skills/prepare-release && 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 "prepare-release" agent skill from https://github.com/jpicklyk/task-orchestrator/tree/main/.claude/skills/prepare-release into .opencode/skills/prepare-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "prepare-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.
prepare-releaseEnd-to-end release automation — reads commits since last tag, infers semver bump, drafts changelog, creates release PR, merges it, waits for CI green, tags, and monitors the Docker build to…
Prepare Release is an agent skill from jpicklyk/task-orchestrator. End-to-end release automation — reads commits since last tag, infers semver bump, drafts changelog, creates release PR, merges it, waits for CI green, tags, and monitors the Docker build to completion. Use when the user says: prepare release, cut a release, bump version, create release PR, ship a new version, tag a release, deploy new version, or when all feature PRs are merged and it is time to release.
Its SKILL.md is about 5.3k 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 Containers and Changelog and release notes. It works with Docker. The repository describes itself as: Server-enforced workflow discipline for AI agents. An MCP server providing persistent work items, dependency graphs, quality gates, and actor attribution. Schemas define what… The licence is MIT.
11 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3e83170. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
gitghcurldockerFrom 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:
repo1.maven.orgFrom 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.
Prepare Release loads about 5.3k tokens when it runs. Until then it costs about 106 tokens; SKILL.md has 2,359 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 jpicklyk/task-orchestrator at commit 3e83170, republished under its MIT licence (© jpicklyk). 2,359 words, ~5,313 tokens.
.claude/skills/prepare-release/SKILL.md (or your agent's skills folder).End-to-end release workflow. Reads commits since the last release tag, infers the semver bump, drafts a user-facing changelog, confirms with you, creates a release PR, merges it, verifies CI is green, tags the release, and monitors the Docker build to completion.
Usage: /prepare-release
Run this from any branch after all feature PRs have been merged to main.
Switch to main and pull latest:
git checkout main
git pull origin main
git statusIf git status shows uncommitted changes, stop and resolve them before continuing. The
working tree must be clean.
git describe --tags --abbrev=0Note this as LAST_TAG (e.g., v2.0.2). All commits after this tag are candidates for
the release.
If this command fails (no tags exist yet), use the full history — note the first commit hash as the baseline and treat the release as the initial version.
git log <LAST_TAG>...HEAD --oneline
git diff <LAST_TAG>...HEAD --stat
git diff <LAST_TAG>...HEAD --name-onlyCollect the full output of each. Do not truncate.
This is not a raw dump of commit messages. Analyze the material and produce a curated, user-facing summary.
Ignore commits that match any of the following:
wip, WIP, checkpoint, fixup!, chore: rebase,
Merge branch, version bump, release:build.gradle.kts, gradle/, *.properties, .gitignore,
.github/, Dockerfile, docker-compose.yml, scripts/, *.md files with no API impactUse only these categories (omit any that have no entries):
Rules for each bullet:
query_items, advance_item)Added \includeAncestors` to `query_items` — eliminates parent-walk call chains for breadcrumb context`Check if any files under claude-plugins/ changed since the last tag:
git diff <LAST_TAG>...HEAD --name-only -- claude-plugins/If the output is non-empty, plugin content changed. Also check if any server source files (Kotlin, migrations, Gradle config) changed:
git diff <LAST_TAG>...HEAD --name-only -- current/src/ current/build.gradle.kts gradle/Classify the release type:
Read the current plugin version from the authoritative source — do not assume it matches any git tag. The version in the repository files may have been bumped in a previous release:
cat claude-plugins/task-orchestrator/.claude-plugin/plugin.json | grep '"version"'Determine the plugin bump level using the same semver rules as the server version, but scoped to plugin content:
| Condition | Plugin Bump |
|---|---|
| Breaking change to skill interface, hook behavior, or orchestration context contract (including removing a shipped component) | major |
| New skill, new hook, new orchestration component added | minor |
| Content fixes, wording, skill adjustments, script tweaks | patch |
Note the plugin bump level separately from the server bump level — they are independent. If no plugin files changed, skip plugin versioning entirely (server-only release).
Plugin-only release: If the release type is plugin-only, skip the server bump entirely.
The server version in version.properties stays unchanged. Only the plugin version (determined
in Step 4d) is bumped. Proceed to Step 6 with the server version as-is and the plugin version
as the new value.
Server or both release: Examine the synthesized changes and determine the bump level:
| Condition | Bump |
|---|---|
| Any breaking API change (removed tool, renamed/removed required parameter, incompatible response schema) | major |
| New tool, new capability on existing tool, new config option, new query parameter | minor |
| Bug fix, performance improvement, docs only, internal refactor with no API change | patch |
If multiple conditions apply, use the highest applicable level.
State the bump level and the one-sentence reason. Example:
Bump: minor — GitHub wiki CI sync and release automation added (new capability, no breaking change).
Calculate the proposed new version:
VERSION_PATCH by 1, keep othersVERSION_MINOR by 1, reset VERSION_PATCH to 0, keep VERSION_MAJORVERSION_MAJOR by 1, reset VERSION_MINOR and VERSION_PATCH to 0Output the following block and stop. Wait for the user to confirm or request changes.
## Proposed Release: vX.Y.Z (CURRENT -> NEW)
**Release type:** <server | both | plugin-only>
**Bump level:** <major | minor | patch>
**Reason:** <one sentence>
**Plugin version:** <CURRENT -> NEW> (<bump level>) — or "No plugin changes"
### Changelog Draft
## [X.Y.Z] - YYYY-MM-DD
### <Added | Changed | Fixed>
- <bullet 1>
- <bullet 2>
...
---Use today's date in YYYY-MM-DD format. If the user requests changes, revise and
re-present before continuing.
After confirmation:
git checkout -b release/vX.Y.Zversion.properties and server.jsonPlugin-only release: Skip this step — the server version stays unchanged.
Server or both release: Edit version.properties in the project root. Set only the
lines that need to change. Reset lower components on a major or minor bump.
Example for a minor bump from 2.0.2 -> 2.1.0:
VERSION_MAJOR=2
VERSION_MINOR=1
VERSION_PATCH=0Then edit server.json (the MCP Registry record) in the project root — two fields:
version to the new version (X.Y.Z, no v prefix).identifier in packages[] to the immutable release image tag:
ghcr.io/jpicklyk/task-orchestrator:X.Y.Z (no v prefix — this is the Docker tag, not the git
tag). Never leave it on :latest; the MCP Registry record for a version is immutable, so a mutable
tag makes that record drift to whatever image later owns latest (#297). docker-publish.yml
fails the release if either field disagrees with version.properties, and then publishes the
record to the registry via mcp-publisher.Do not skip the server.json edit. It is the one file in this step that no build reads, so a
missed bump is invisible until the registry publish fails (or, before the guard existed, silently
published a stale record — v3.3.0 through v3.13.1 shipped with server.json still at 3.2.0).
History: this paragraph was first added by #298 to a flat
.claude/skills/prepare-release.mdthat duplicated this file, and was lost when #321 deleted the duplicate. The skill lives only at.claude/skills/prepare-release/SKILL.md— never recreate the flat file.
Skip this step if no plugin files changed in Step 4d.
Read the current plugin version from claude-plugins/task-orchestrator/.claude-plugin/plugin.json
(already retrieved in Step 4d). Calculate the new version using the plugin bump level from Step 4d.
Update both files with the new version:
claude-plugins/task-orchestrator/.claude-plugin/plugin.json — update the version field.claude-plugin/marketplace.json — update plugins[name="task-orchestrator"].versionAlso update the version table in claude-plugins/CLAUDE.md:
task-orchestrator and replace the version numberStage the three files (in addition to version.properties):
git add claude-plugins/task-orchestrator/.claude-plugin/plugin.json \
.claude-plugin/marketplace.json \
claude-plugins/CLAUDE.mdCHANGELOG.mdRead CHANGELOG.md. Feature PRs accumulate entries under a ## [Unreleased] section at the top
of the file; check whether one exists before writing anything.
If ## [Unreleased] exists: rename that header in place to ## [X.Y.Z] - YYYY-MM-DD and fold
your synthesized bullets from Step 4 into its existing ### Added / ### Changed / ### Fixed
subsections (create a subsection only if it is missing). Keep every existing bullet — they are
the per-PR record — and add only what Step 4 found missing. Do not leave an empty [Unreleased]
section behind; the next feature PR recreates it. Match each merged PR in git log <LAST_TAG>..HEAD
to a bullet by the behaviour it describes (per-PR bullets usually cite no PR number) — merged PRs
with no bullet are the gaps to fill, except a PR whose body states Changelog: none (<why>),
which is intentionally bullet-less (the September 2026 release prep found three bug-wave PRs
entirely absent).
If no ## [Unreleased] section exists: find the first ## [ versioned entry (after the
header). Insert the new section immediately above it, with a trailing --- separator and a
blank line:
## [X.Y.Z] - YYYY-MM-DD
### Added
- bullet 1
- bullet 2
---
## [previous version] ...Do not modify any existing entries below the new section.
If plugin content changed (Step 4d), add under the appropriate section:
<reason>)Plugin-only release (plugin files already staged from 8b):
git add CHANGELOG.md
git status # confirm only plugin version files + changelog are staged
git commit -m "release: bump to vX.Y.Z — plugin vA.B.C"
git push origin release/vX.Y.ZServer-only release:
git add version.properties server.json CHANGELOG.md
git status # confirm only expected files are staged
git commit -m "release: bump to vX.Y.Z"
git push origin release/vX.Y.ZBoth release (plugin files already staged from 8b):
git add version.properties server.json CHANGELOG.md
git status # confirm expected files are staged
git commit -m "release: bump to vX.Y.Z"
git push origin release/vX.Y.ZBefore creating the PR, verify these README items and fix any that are stale. If fixes are
needed, add README.md to the staged files and amend the commit before pushing.
Docker image references:
grep -n "ghcr.io/jpicklyk/task-orchestrator" README.mdEvery Docker image reference must use :latest — never a branch name or hardcoded version tag.
Version badge (line ~7 in README):
Both /github/v/tag/ and /github/v/release/ badge endpoints work — the CI workflow
creates a git tag and a GitHub release on every deploy. No change needed unless the URL
is broken.
Dependency & CVE audit:
Do not ship a release carrying a known-vulnerable or stale dependency. For each
security-sensitive dependency in gradle/libs.versions.toml (sqlite-jdbc, flyway-core,
exposed-*, ktor-*, nimbus-jose-jwt, google-tink), compare the pinned version against
the latest stable on Maven Central:
# Example for sqlite-jdbc (adjust the group path per artifact):
curl -s "https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/maven-metadata.xml" \
| grep -oE '<release>[^<]+</release>'Flag any pin that is behind latest stable, on a beta/alpha/-rc version, or named in an
open CVE advisory.
Critical — verify remediation, not just the bump. A version bump closes a CVE only when the dependency's bundled component version is at or above the CVE's upstream fixed-in version. Never write "addresses CVE-X" in a commit, changelog, PR body, or note without citing BOTH:
Precedent: CVE-2025-6965 (SQLite, fixed in 3.50.2) stayed live in this repo for ~3 months because a bump to
sqlite-jdbc 3.49.1.0(bundles SQLite 3.49.1) was recorded as remediation without checking the bundled version.
If the audit finds a live CVE or a materially stale pin, land the dependency fix as its own PR before cutting the release — do not fold it into the release commit.
gh pr create \
--base main \
--title "release: vX.Y.Z — <one-line summary of most significant change>" \
--body "$(cat <<'EOF'
## Summary
- <bullet 1>
- <bullet 2>
- <bullet 3>
## Version
**Release type:** <server | both | plugin-only>
<CURRENT> -> <NEW>
Prepared with /prepare-release
EOF
)"If the branch already has an open PR, use gh pr edit with the same title and body instead.
If the user says "show me the command" or "don't run it yet", print the full command as a code block instead of executing it.
This step automates the post-PR flow. After the PR is created, drive the release to completion rather than printing manual instructions.
Release prepared: CURRENT -> vX.Y.Z (<bump level>)
Release type: <server | both | plugin-only>
Branch: release/vX.Y.Z
PR: <URL from gh pr create>Ask the user: "Ready to merge the release PR?"
If confirmed:
gh pr merge <PR-number> --squash --delete-branchIf the user prefers to merge manually (e.g., via GitHub UI), wait for them to confirm it's merged before continuing.
git checkout main
git pull origin mainVerify the pull is a fast-forward. If it's not (local main has diverged from origin), stop and investigate — this should not happen under the PR-per-feature workflow.
Server or both release: CI must be green before tagging. Use /loop to
monitor automatically:
/loop 2m gh run list --branch main --limit 1 --json status,conclusion,displayTitleWhile monitoring, check the first result immediately:
gh run list --branch main --limit 1 --json status,conclusion,displayTitleconclusion: success — proceed to 11e immediately, cancel the loopstatus: in_progress — wait for the loop to report completionconclusion: failure — stop and fix. Do NOT tag. Report the failure
to the user, investigate the cause, and merge a fix. After fixing, re-check
CI before tagging. The tag must point to a green commit.Plugin-only release: Skip CI monitoring — no server code changed, no Docker image to build. Proceed directly to the plugin-only completion in 11h.
Once CI is green, cancel the monitoring loop and create the tag:
git tag vX.Y.Z
git push origin vX.Y.ZThis triggers the "Build, Publish, and Release" workflow (docker-publish.yml).
Use /loop to track the docker-publish workflow:
/loop 2m gh run list --workflow=docker-publish.yml --limit=1 --json status,conclusion,displayTitleCheck immediately:
gh run list --workflow=docker-publish.yml --limit=1 --json status,conclusion,displayTitleconclusion: success — cancel the loop, proceed to 11gstatus: in_progress or queued — wait for the loopconclusion: failure — report the failure, investigate, and help the user
resolve it. The Docker build may need a re-tag or a fix-and-retag cycle.The docker-publish.yml workflow creates the GitHub Release automatically on the tag push, but it
fills the body with GitHub's auto-generated PR-title list — not the curated changelog. Once the
release exists (after 11f succeeds), overwrite its body with this version's CHANGELOG.md section so
the published release notes match what you actually wrote. CHANGELOG.md is the source of truth.
Extract the section between this version's ## [X.Y.Z] header and the next ## [ header, and set it
as the release body:
RELNOTES="$(mktemp)"
awk -v ver="X.Y.Z" '
BEGIN { hdr = "## [" ver "]" }
index($0, hdr) == 1 { capture=1; next } # skip the version header line (redundant with the release title)
capture && index($0, "## [") == 1 { exit } # stop at the next version section
capture { print }
' CHANGELOG.md > "$RELNOTES"
# Never publish an empty body. `gh release edit --notes-file` accepts an empty file without
# complaint, so a silently-failed extraction replaces the auto-generated notes with NOTHING —
# strictly worse than leaving them. Fail loudly instead.
if [ ! -s "$RELNOTES" ]; then
echo "ERROR: extracted release notes are empty — check that CHANGELOG.md contains a '## [X.Y.Z]' header" >&2
rm -f "$RELNOTES"
exit 1
fi
gh release edit vX.Y.Z --notes-file "$RELNOTES"
rm -f "$RELNOTES"Match the header literally — do not build a regex from the version string. X.Y.Z contains
. (any-char in a regex) and sits inside […], so the obvious $0 ~ "^## \\[" ver "\\]" form
is fragile: in a dynamic (string-built) regex the bracket escaping is interpreted twice, and on
gawk it degrades to a character class — the match never fires and the extraction silently yields
zero lines. index($0, hdr) == 1 compares plain strings, so version dots and brackets carry no
special meaning. Verified failing on gawk 2026-08-04 during the v3.13.1 release.
Verify the body now leads with the curated notes:
gh release view vX.Y.Z --json body -q '.body' | head -20To also keep GitHub's contributor/PR list beneath the curated notes, capture it first with
gh api "repos/{owner}/{repo}/releases/generate-notes" -f tag_name=vX.Y.Z -q '.body', append it to$RELNOTESunder a---separator, then rungh release edit.
Plugin-only release: skip this step — no tag and no GitHub Release are created.
No tag or Docker rebuild needed — only plugin content changed. Plugin users pick up the new version when they reinstall the marketplace.
Report:
Release complete: vX.Y.Z (plugin-only)
Plugin version: vA.B.CSkip to 11i.
Server or both release:
Release complete: vX.Y.Z
Docker image: ghcr.io/jpicklyk/task-orchestrator:X.Y.Z (and :latest)
GitHub Release: https://github.com/jpicklyk/task-orchestrator/releases/tag/vX.Y.ZCancel any remaining monitoring loops.
IMPORTANT: Do NOT use gh workflow run — the CI workflow is triggered by tag
pushes (v*), not manual dispatch.
| Bump level | When | Version change |
|---|---|---|
| major | Breaking API change | X+1.0.0 |
| minor | New capability, no breaking change | X.Y+1.0 |
| patch | Bug fix, docs, refactor | X.Y.Z+1 |
Common mistakes to avoid:
version.properties, server.json, CHANGELOG.md, plugin version files (if changed), and README.md (if fixes were needed)server.json — the registry publish step fails when it lags version.propertiesCHANGELOG.md section (Step 11g)© jpicklyk, MIT. 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 .claude/skills/prepare-release of jpicklyk/task-orchestrator.
Open the folder on GitHubat commit 3e83170
Prepare 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Prepare Release this skilljpicklyk/task-orchestrator | 207 | — | ~5.3k | Automated safety check: Pass | MIT | |
| Curate Whats Newdocker/docs | 4.7k | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| ReleasePipelex/pipelex | 941 | — | ~4.8k | Automated safety check: Notes | Custom licence | |
| Project Docs Maintainerswimmwatch/cloakbrowser-mcp | 161 | — | ~569 | Automated safety check: Pass | MIT | |
| Releasebmeares/Meerschaum | 154 | — | ~1.1k | Automated safety check: Notes | Apache-2.0 | |
| Project Releaseswimmwatch/cloakbrowser-mcp | 161 | — | ~1.9k | Automated safety check: Pass | MIT |
docker/docs
Curate noteworthy Docker launches from documentation pull requests merged during a requested period.
Pipelex/pipelex
Cut a release of pipelex, which ships the pipelex and pipelex-api packages and the pipelex/pipelex-api Docker image under one version: the gates, the migration-ledger cross-check, the CHANGELOG.md…
swimmwatch/cloakbrowser-mcp
Maintain, organize, consolidate, or audit the cloakbrowser-mcp documentation set only when the user explicitly requests project documentation maintenance or an authorized public change requires it.
bmeares/Meerschaum
Meerschaum release process — bump version, update changelog, stage dev→main PR, run CI, publish to PyPI, tag, GitHub release, build/push Docker images, rebuild docs on prod VPS.
swimmwatch/cloakbrowser-mcp
Prepare, publish, verify, or recover a cloakbrowser-mcp release only when the user explicitly requests release work.
microsoft/Docker-Provider
Prepare an ama-logs release PR: bump the image tag (X.Y.Z) across Helm charts, manifests, and Dockerfiles, and add a formatted ReleaseNotes.md entry.
jpicklyk/task-orchestrator
Walks through how to launch and reach the MCP Task Orchestrator server container: transport, REST API, port publishing, config mounts and config-sync.
jpicklyk/task-orchestrator
Resolves ready MCP work items into a run plan, shows it to you, then executes it through the Workflow tool or direct subagent dispatch, with post-run verification.
jpicklyk/task-orchestrator
Migrates an existing unscoped Task Orchestrator database to the project-scoping convention in place, creating one project anchor root and re-parenting work trees under it after a mandatory dry run.
jpicklyk/task-orchestrator
Completes or cancels a whole feature subtree, a named list of items, or a batch of stale work items at once, previewing the impact and warning before force-completing anything active.
jpicklyk/task-orchestrator
Creates an MCP work item from conversation context, anchoring it under the right container, inferring type and priority and pre-filling the required notes.
jpicklyk/task-orchestrator
Views, creates, deletes and diagnoses BLOCKS, IS_BLOCKED_BY and RELATES_TO links between MCP work items, including why an item cannot start.
Works with
Categories
End-to-end release automation — reads commits since last tag, infers semver bump, drafts changelog, creates release PR, merges it, waits for CI green, tags, and monitors the Docker build to…. Prepare Release is an agent skill from jpicklyk/task-orchestrator. End-to-end release automation — reads commits since last tag, infers semver bump, drafts changelog, creates release PR, merges it, waits for CI green, tags, and monitors the Docker build to completion.
Prepare Release fits situations like: the user says: prepare release; create release PR; ship a new version; deploy new version.
Run `npx skills add jpicklyk/task-orchestrator --skill prepare-release -a claude-code`. Or copy the skill folder (.claude/skills/prepare-release in jpicklyk/task-orchestrator) into .claude/skills/prepare-release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jpicklyk/task-orchestrator --skill prepare-release -a codex`. Or copy the skill folder (.claude/skills/prepare-release in jpicklyk/task-orchestrator) into .agents/skills/prepare-release 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 jpicklyk/task-orchestrator --skill prepare-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/prepare-release, .gemini/skills/prepare-release, .github/skills/prepare-release and .opencode/skills/prepare-release in your project.
Going by SKILL.md and its folder, Prepare Release needs the command-line tools its instructions call (git, gh, curl and docker). Our summary lists: Docker.
SKILL.md names 1 domain. In commands or code: repo1.maven.org; 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.
Prepare Release is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.3k tokens (SKILL.md is roughly 21k 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 Prepare Release: Curate Whats New (docker/docs, 4.7k stars), Release (Pipelex/pipelex, 941 stars), Project Docs Maintainer (swimmwatch/cloakbrowser-mcp, 161 stars) and Release (bmeares/Meerschaum, 154 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jpicklyk (a GitHub user) maintains it in jpicklyk/task-orchestrator, which has 207 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 8, 2026.
Source: jpicklyk/task-orchestrator on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.