Workflow Setup
athola/claude-night-market
Configures GitHub Actions CI/CD workflows for testing, linting, and deployment.
Discover dependencies and prepare or execute Kitaru core and plugin releases, including version proposals, Kitaru UI selection, release PRs, ordered tag commands, artifact verification, and recovery.
$ npx skills add zenml-io/kitaru --skill kitaru-release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install zenml-io/kitaru kitaru-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/zenml-io/kitaru.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/kitaru-release .claude/skills/kitaru-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 "kitaru-release" agent skill from https://github.com/zenml-io/kitaru/tree/develop/.agents/skills/kitaru-release into .claude/skills/kitaru-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kitaru-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/zenml-io/kitaru/tree/develop/.agents/skills/kitaru-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 zenml-io/kitaru --skill kitaru-release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install zenml-io/kitaru kitaru-release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zenml-io/kitaru.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/kitaru-release .agents/skills/kitaru-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 "kitaru-release" agent skill from https://github.com/zenml-io/kitaru/tree/develop/.agents/skills/kitaru-release into .agents/skills/kitaru-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kitaru-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 zenml-io/kitaru --skill kitaru-release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install zenml-io/kitaru kitaru-release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zenml-io/kitaru.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/kitaru-release .cursor/skills/kitaru-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 "kitaru-release" agent skill from https://github.com/zenml-io/kitaru/tree/develop/.agents/skills/kitaru-release into .cursor/skills/kitaru-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kitaru-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/zenml-io/kitaru.git --path .agents/skills/kitaru-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 zenml-io/kitaru --skill kitaru-release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install zenml-io/kitaru kitaru-release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zenml-io/kitaru.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/kitaru-release .gemini/skills/kitaru-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 "kitaru-release" agent skill from https://github.com/zenml-io/kitaru/tree/develop/.agents/skills/kitaru-release into .gemini/skills/kitaru-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kitaru-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 zenml-io/kitaru kitaru-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 zenml-io/kitaru --skill kitaru-release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/zenml-io/kitaru.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/kitaru-release .github/skills/kitaru-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 "kitaru-release" agent skill from https://github.com/zenml-io/kitaru/tree/develop/.agents/skills/kitaru-release into .github/skills/kitaru-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kitaru-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 zenml-io/kitaru --skill kitaru-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 zenml-io/kitaru kitaru-release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zenml-io/kitaru.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/kitaru-release .opencode/skills/kitaru-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 "kitaru-release" agent skill from https://github.com/zenml-io/kitaru/tree/develop/.agents/skills/kitaru-release into .opencode/skills/kitaru-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kitaru-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.
kitaru-releaseDiscover dependencies and prepare or execute Kitaru core and plugin releases, including version proposals, Kitaru UI selection, release PRs, ordered tag commands, artifact verification, and recovery.
Kitaru Release is an agent skill from zenml-io/kitaru. Discover dependencies and prepare or execute Kitaru core and plugin releases, including version proposals, Kitaru UI selection, release PRs, ordered tag commands, artifact verification, and recovery. Use when a user asks what a release depends on or wants to prepare, cut, publish, verify, or recover a Kitaru, Kitaru UI, or Kitaru plugin release.
Its SKILL.md is about 7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `agents/openai.yaml` and `references/publication-handoff.md`).
It sits in DevOps & Cloud, covering Proposals and quotes. It works with Python, GitHub Actions and TypeScript. The repository describes itself as: Agent traces you can run, not just read. The licence is Apache-2.0.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit e7e55f7. 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:
gituvghpythonjustFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.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.
Kitaru Release loads about 7k tokens when it runs, and up to ~8.4k if it reads all its reference files. Until then it costs about 91 tokens; SKILL.md has 3,417 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 zenml-io/kitaru at commit e7e55f7, republished under its Apache-2.0 licence (© zenml-io). 3,417 words, ~7,000 tokens.
.claude/skills/kitaru-release/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Use the current workflows as the source of truth:
.github/workflows/release.yml.github/workflows/release-plugins.ymlrelease/release-units.tomlrelease/typescript.md and .github/workflows/release-typescript.ymlzenml-io/zenml-frontend-monorepo/.github/workflows/release-kitaru-ui.ymlRead AGENTS.md. Read plugins/AGENTS.md and plugins/DEVELOPMENT.md for plugin changes. Read FRONTEND-TESTING.md for core or UI work.
Do not create a tag, dispatch a publishing workflow, approve an environment, or publish an artifact without explicit user confirmation. A request to prepare a release authorizes a release PR only.
Ask only for choices that cannot be derived from the repository and registries.
kitaru, the selected UI, public images, the managed image, and Helm from one core tag.There is no separate bundle tag. The core tag publishes the Python package and deployables in one workflow.
Confirm the selected distributions, versions, frontend tag, publication order, and release commit before editing.
Fetch current remote state and load the release inventory:
git fetch origin --prune --tags
uv run --no-project --with packaging==26.2 \
python scripts/release_units.py list --format jsonFor every selected unit, resolve its latest published tag. Compare that tag with origin/develop and inspect merged PRs in the range with git log, git diff, and gh pr view. Derive directly changed core and plugin units from impact-paths in release/release-units.toml. Read requires:* labels as release follow-up metadata, together with Release context, linked work, and existing changelog fragments in changelog.d/. A directly changed unit does not need a matching label when it will be published in the next applicable release. If its publication is intentionally deferred past that release, attach its exact release-label and record the intended timing in Release context.
For one plugin, start at that plugin's previous tag. For all plugins, calculate a separate range for every plugin release unit. requires:plugins means every unit is expected; report a unit with no implementation change as a red flag and require an explanation in the release PR.
For core, collect requirements for frontend, plugins, skills, ZenML docs, website, examples, and additional context from source PRs. Read linked repositories with gh or existing local checkouts. Do not write to them.
Compare declared follow-ups with the actual diff and PR context. Report unknown, conflicting, or stale signals. The diff identifies direct units; labels record deferred publication or other work that the Kitaru diff cannot show. Repository state decides what can be released.
For core, collect every merged PR label in the range and use the latest published stable core version as the input to the deterministic version rule:
uv run --no-project --with packaging==26.2 \
python scripts/release_units.py propose-core-version \
--latest-version <latest-stable-version> \
--label <first-merged-pr-label> \
--label <second-merged-pr-label> ...Pass every label occurrence; do not summarize or discard labels before running the command. A Breaking Change label advances a pre-1.0 core to the next minor version and a post-1.0 core to the next major version. Without that label, the command advances the patch version. The version in pyproject.toml may contain +dev; it is a development placeholder and is never the input or release proposal. PR prose about an expected dependency floor does not override the command result.
Before editing, rerun the command with --candidate <proposed-version> and require it to pass. Do not prepare a different core version.
Propose explicit versions and changelog entries after discovery. Check PyPI versions and Git tags before proposing a version, and never reuse a published version. Get the user's acceptance before editing release metadata.
Feature PRs leave existing plugin package versions and server default requirements/display versions unchanged. Put behavior changes in the package's Unreleased changelog section. The release-preparation PR selects package versions and updates all matching default-catalog metadata together. New packages require initial metadata, but becoming a server default remains an explicit release decision.
Follow the development dependency policy in plugins/DEVELOPMENT.md. Plugins compatible with published core keep their supported minimum. A plugin requiring unreleased core uses an exact dependency on the current root development version, such as kitaru==0.25.0+dev, and records the needed core change in Release context.
Before changing core to its selected release version, inspect every plugin's core dependency. Replace each resolved development pin with the selected compatible release floor, such as kitaru>=0.26.0, preserving extras and compatible upper bounds. Do not guess the future version in the feature PR. An unresolved development pin blocks release preparation; account for every affected plugin and its publication timing. A plugin-only release can replace the pin only when a published core contains the required change.
Regenerate plugins/uv.lock after these conversions. Verify the selected wheels' Requires-Dist metadata contains no development placeholder or local checkout dependency before handing over publication commands.
Inspect the TypeScript packages separately from the Python inventory. Include their lockstep release when their changes require publication. Inspect the Kitaru skills repository for a pending release and record its own version and compatibility requirements.
X.Y.Z or X.Y.ZrcN.X.Y.ZrcN to X.Y.Z-rc.N for Docker and Helm.vX.Y.Z or vX.Y.Z-rc.N as the frontend workflow input.kitaru-ui-vX.Y.Z or kitaru-ui-vX.Y.Z-rc.N.X.Y.Z.For pre-1.0 plugins, use a patch when the public API and observable output stay compatible for existing supported inputs. Use a minor for new capabilities or breaking behavior. Importer output includes session grouping, IDs, node structure, field mappings, normalized values, and incomplete or failed trace handling.
Perform this section before the core preparation PR when the core needs a new UI release.
zenml-io/zenml-frontend-monorepo and select an exact commit on main.v0.4.0, for an official core release.HEAD only when main points to the reviewed commit:git checkout main
git tag kitaru-ui-v0.4.0 HEAD
git push origin kitaru-ui-v0.4.0The tag push starts release-kitaru-ui.yml.
gh run list --repo zenml-io/zenml-frontend-monorepo \
--workflow release-kitaru-ui.yml --limit 5
gh run view <run-id> --repo zenml-io/zenml-frontend-monorepogh release view kitaru-ui-v0.4.0 \
--repo zenml-io/zenml-frontend-monorepoRequire kitaru-ui.tar.gz and kitaru-ui.tar.gz.sha256. Verify the workflow ran at the reviewed commit and the release is stable. The frontend workflow derives its release channel from whether the selected commit is on main; official core releases require a stable bundle.
If the user asks only for a preparation PR, do not push the frontend tag or dispatch the frontend workflow. The user can explicitly select an expected frontend tag before it exists. Mark asset verification as pending and do not create the core tag until both assets exist.
Create a branch from current origin/develop. Preserve unrelated work in the active checkout.
[project].version in pyproject.toml.changelog.d/ when needed.uv run python scripts/changelog_fragments.py build --version <version> --draft, then run it without --draft. This moves every fragment into a new CHANGELOG.md section for the selected version and deletes the fragment files.releases/python/kitaru/<version>.toml:schema-version = 1
kitaru-version = "<python-version>"
ui-tag = "<kitaru-ui-tag>"uv lock and uv lock --project plugins. Keep unrelated exclude-newer timestamp churn out of the diff.uv run python scripts/generate_openapi.py and commit openapi/openapi.json.Read default membership from release/release-units.toml. Do not copy a fixed plugin count or a retired plugin name into the skill.
Check the standalone quickstart dependency floor and lockfile under examples/python/pydantic_ai_ticket_resolver/. Its README uses uv sync --frozen, so changing only the dependency floor does not update the installed version. Refresh both files to a published compatible core version, retaining unrelated dependency pins:
uv add --project examples/python/pydantic_ai_ticket_resolver --no-sync \
--upgrade-package "kitaru==<published-version>" \
"kitaru[cli,mcp,server,worker]>=<published-version>"With the local test PostgreSQL available, run uv sync --frozen and uv run --frozen python scripts/run_ci_e2e.py from the example directory before installing candidate wheels. The published-dependency run and the candidate-wheel run verify different installation paths. Preserve the existing lockfile cutoff when no unrelated dependency update is needed.
Do not put an unpublished version or a local wheel path into the public quickstart lockfile. If the example requires the upcoming release, record its dependency refresh and frozen end-to-end check as a post-publication follow-up; candidate-wheel success alone does not complete it.
The frontend declaration contains only the schema version, Kitaru version, and trusted frontend tag. The workflow downloads and verifies the published checksum.
Select the distribution from release/release-units.toml.
uv version --project plugins --package <distribution> <version> --no-syncuv lock --project plugins.For a default-catalog plugin, update matching server requirements and display versions in this release-preparation PR. The current inventory validator requires them to match the selected package version. Feature PRs avoid that coupling by leaving both versions and default pins unchanged.
For a coordinated release, prepare core and plugin versions together. Tag core first. After the core publish-python job succeeds and the exact version is available on PyPI, tag dependent plugins. Core deployables and other jobs can continue while plugins publish. A default pin may reference a queued plugin version when the repository's pending-default behavior is available and verified. An independent plugin release uses an already-published compatible core.
Use the unit's maintenance branch from release/release-units.toml, named release/<plugin>/<major.minor>. Confirm the branch exists and the requested version is the next unused patch version. The plugin workflow accepts a tag whose commit belongs to develop or that exact maintenance branch.
When the same bug exists on develop, merge the implementation there first. Then cherry-pick only its implementation commit onto a fix branch based on the maintenance line:
git fetch origin --prune --tags
git switch --track origin/release/langfuse/0.4
git switch -c fix/langfuse-0.4.1
git cherry-pick <implementation-commit>When the bug only affects a superseded line, create the fix branch from that maintenance line and implement the fix there. Forward-port it only if the same bug exists on develop.
On the fix branch:
plugins/uv.lock.develop.After the maintenance PR merges, resolve its exact merge commit and prepare the namespaced tag command. Do not push the tag without explicit authorization:
Use HEAD only when the maintenance branch points to that reviewed commit; otherwise use its literal SHA:
git checkout release/langfuse/0.4
git tag python/kitaru-langfuse-importer/v0.4.1 HEAD
git push origin python/kitaru-langfuse-importer/v0.4.1Leave a newer package version and default-catalog declaration on develop unchanged when patching a superseded line.
Always run:
git diff --check
just check
uv run --no-project --with packaging==26.2 python scripts/release_units.py validateFor core metadata and UI selection, run:
uv run python scripts/release_ui.py --version <core-version>
uv run pytest -q tests/scripts/test_release_ui.py tests/scripts/test_release_units.pyFor plugin metadata, dependencies, or default pins, run:
uv run --project plugins ruff format --config plugins/pyproject.toml --check plugins
uv run --project plugins ruff check --config plugins/pyproject.toml plugins
uv run --project plugins ty check --project plugins
uv run --project plugins pytest -q -c plugins/pyproject.toml plugins/tests tests/server/test_default_plugins.py
just plugin-artifact-smokeReview the final version, frontend tag, dependency ranges, exact default pins, changelog, file list, and validation results.
Commit only the release files. Push the branch and open a draft PR to develop.
Include:
## Reviewer Notes with a concrete review pathStop after the PR unless the user explicitly asks to publish.
After the PR merges, verify its exact merge commit, then emit the publication command handoff in the PR and final response exactly as publication-handoff.md specifies: grouped by repository and source branch, covering every selected Python plugin, the TypeScript release set when selected, any new frontend release, manual main promotion, and the Kitaru skills release handoff. Do not execute publication commands during preparation.
Manual dispatch builds and validates without publishing. These are agent-side rehearsal commands, not part of the user-facing tag handoff.
Core:
gh workflow run release.yml --repo zenml-io/kitaru --ref <reviewed-branch-or-tag> \
-f package-tag=python/kitaru/v<python-version>Plugin:
gh workflow run release-plugins.yml --repo zenml-io/kitaru --ref <reviewed-branch-or-tag> \
-f package-tag=python/<distribution>/v<python-version>Use an existing branch or tag that resolves to the reviewed eligible commit. Confirm the run's headSha matches that commit, inspect its artifacts, and confirm no publishing job ran.
After the preparation PR merges, select its exact reachable develop commit.
Use the branch and commit checks in publication-handoff.md before emitting:
git checkout develop
git tag python/<distribution>/v<python-version> HEAD
git push origin python/<distribution>/v<python-version>Approve the package's PyPI environment when required. Verify the wheel, source distribution, hashes, and immutable GitHub Release.
For a stable release, the workflow creates or fast-forwards the unit's maintenance branch after the GitHub Release exists. A maintenance-line patch uses the exact reviewed maintenance-branch commit prepared above instead of a develop commit.
Before tagging, verify the selected stable frontend bundle exists and release metadata is complete. Coordinated plugin versions can remain queued when pending-default behavior has been verified.
Use the branch and commit checks in publication-handoff.md before emitting:
git checkout develop
git tag python/kitaru/v<python-version> HEAD
git push origin python/kitaru/v<python-version>The tag starts .github/workflows/release.yml. The workflow:
latest aliases only for a stable release<version>+dev and updates both lockfiles and the generated OpenAPI versionDependent plugin tags can be pushed after step 3 succeeds and the exact core package is available on PyPI. They do not wait for the remaining jobs.
For a stable release, fast-forward main to the tagged release commit before merging the generated development-reset PR. The reset PR must leave main at the clean release version and change only pyproject.toml, uv.lock, plugins/uv.lock, and openapi/openapi.json on develop.
Approve required environments only after checking the candidate evidence. A managed-image failure is reported as a warning and does not block public deployables.
Verify each published surface independently. Report core PyPI availability, public artifacts, managed-image status, installer smoke, maintenance-branch state, and development-reset status separately. A reset-job failure can make the workflow red after successful artifact publication. Diagnose and report that follow-up failure without describing the already-published artifacts as unpublished.
When a release changes worker package installation or publishes a new first-party Python distribution, verify the published exact pin with the worker's generated uv command or a live task from a checkout whose exclude-newer cutoff predates publication. Include non-default packages from release/release-units.toml; check the worker's uv supports package-specific age exceptions. Candidate-wheel and nonpublishing workflow checks do not prove registry resolution after publication.
After the required core and plugin versions are available on PyPI, complete any pending quickstart dependency refresh through a reviewed follow-up PR and rerun its frozen end-to-end test. Report which branch contains that update: the public README links to main, and merging a follow-up into develop alone does not update the public example. The development-reset PR does not currently refresh the quickstart lockfile.
The workflow does not update main. After the newest stable core's public artifacts and GitHub Release succeed, inspect any remaining workflow failure and emit the main fast-forward block from publication-handoff.md for the release owner to run. Do not execute it on their behalf. The fast-forward triggers the existing docs workflow. Skip this step for prereleases and older maintenance-line core releases.
After core and required plugins are available, hand off pending zenml-io/kitaru-skills changes to its skills-release skill. Read the current skill before emitting that repository's commands. It owns the independent skills version, develop release commit, tag, main promotion, and GitHub Release. Core publication does not itself authorize publishing skills.
After every selected release workflow has succeeded and its published artifacts have been verified, curate the GitHub Release body for every release created in this release flow. This is a post-publication metadata step, not a replacement for the publication workflows: their autogenerated notes remain the fallback until curation is complete.
Tags, versions, uploaded assets, registry artifacts, release targets, and prerelease/latest state are immutable. A release body may be deliberately updated after publication only with explicit user confirmation. Do not curate releases that are outside the selected release set, and do not rewrite an older UI release merely because a core release references it.
Build the exact release set before drafting. It can include:
python/kitaru/v<version>;release/release-units.toml;typescript/kitaru/v<version>, which covers @zenml-io/kitaru, @zenml-io/kitaru-mastra, and @zenml-io/kitaru-vercel-ai together;kitaru-ui-v<version> release in zenml-io/zenml-frontend-monorepo only when this release flow published that UI release.For every selected release, first capture its current state with gh release view <tag> --repo <repo> --json name,tagName,targetCommitish,isPrerelease,assets,body and record its latest state separately with gh release list --repo <repo> --json tagName,isLatest. Resolve the previous tag from the same tag family, never from GitHub's repository-wide previous-release selection. The comparison families are python/kitaru/v* for core, the selected unit's tag-prefix for a Python plugin, typescript/kitaru/v* for TypeScript, and kitaru-ui-v* for the UI. A stable release compares with the previous stable tag in its family, never its last release candidate. A prerelease compares with the nearest preceding prerelease in its release line, falling back to the latest stable tag in its family. For a maintenance-line plugin patch, choose a predecessor from the same <major>.<minor> release line whose tag is an ancestor of the current tag, and verify that ancestry with git merge-base --is-ancestor <previous-tag> <tag>. If no eligible predecessor exists, mark it as the first release in that comparison family rather than inventing one. This avoids cross-package and cross-maintenance-line comparison links.
Use reviewed release evidence, not PR titles alone:
CHANGELOG.md, merged PR context, and the core-tag-to-core-tag diff.impact-paths, and the package-tag-to-package-tag diff.release/typescript.md, the three package manifests and changelog or PR context, distinguishing client, Mastra, and Vercel AI changes when they differ.zenml-frontend-monorepo, plus the UI-tag-to-UI-tag diff.Replace the autogenerated PR list with a proportionate reader-facing body. Start with ## Highlights: one to three short paragraphs explaining observable effects relative to the previous release, or introduce the initial capability for a first release. A patch release can say that it is focused maintenance; a minor release should foreground the most consequential capability. Follow with nonempty ## Added, ## Changed, ## Fixed, or ## Infrastructure sections when they make the release clearer. For TypeScript, identify which of the three published packages each meaningful item affects. Use code formatting for identifiers, include the same-family Full Changelog comparison link only when an eligible predecessor exists, and omit empty sections.
Do not include site-only work, Dependabot-only bumps, internal refactors without an observable effect, reverted or no-op change pairs, unverified claims, or private operational details. Do not use --generate-notes for the curated body. Keep each paragraph and list item on one physical line, and do not use em dashes or en dashes.
Show every complete draft and its tag-to-previous-tag mapping to the user before editing GitHub. If four or more independent releases need curation, the release coordinator may delegate evidence gathering and drafts in small batches. The coordinator owns the exact release set, checks every draft against its source evidence, collects one approval, and performs all GitHub edits and verification. Delegates do not edit GitHub Releases.
Only after explicit approval, write each approved body to a temporary file and update only the body:
gh release edit <tag> --repo <repo> --notes-file <notes-file>Do not pass title, asset, target, prerelease, or latest flags. Re-fetch each release with the same JSON fields, record its latest state again with gh release list --repo <repo> --json tagName,isLatest, and verify that its tag, target, assets, prerelease/latest state are unchanged and its body exactly matches the approved draft. Report every curated release and any release that remains pending or was intentionally excluded.
Do not delete or move a release tag. Do not reuse a version for different bytes.
gh run rerun <original-run-id> --repo zenml-io/kitaru --failedManual dispatch is a non-publishing rehearsal and cannot finish a failed publication. If recovery needs different package bytes, prepare a new version through a reviewed PR.
Keep credentials, private endpoints, account IDs, and internal infrastructure names out of committed content and PR descriptions.
© zenml-io, 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
SKILL.md and 2 other files (references) in .agents/skills/kitaru-release of zenml-io/kitaru.
Open the folder on GitHubat commit e7e55f7
Kitaru 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 |
|---|---|---|---|---|---|---|
| Kitaru Release this skillzenml-io/kitaru | 302 | — | ~7k | Automated safety check: Pass | Apache-2.0 | |
| Workflow Setupathola/claude-night-market | 341 | — | ~1.4k | Automated safety check: Pass | MIT | |
| AWS Cdk Developmentsickn33/agentic-awesome-skills | 47k | 1 repos | ~2.5k | Automated safety check: Pass | MIT | |
| AWS Cdk Developmentzxkane/aws-skills | 367 | 2 repos | ~2.5k | Automated safety check: Pass | MIT | |
| Reproduce macOS Python FlavorsNuitka/Nuitka | 15k | — | ~1.7k | Automated safety check: Pass | AGPL-3.0 | |
| RStudio Selenium to Playwright Migrationrstudio/rstudio | 5.1k | — | ~3.6k | Automated safety check: Pass | Custom licence |
athola/claude-night-market
Configures GitHub Actions CI/CD workflows for testing, linting, and deployment.
sickn33/agentic-awesome-skills
AWS Cloud Development Kit (CDK) expert for building cloud infrastructure with TypeScript/Python.
zxkane/aws-skills
AWS Cloud Development Kit (CDK) expert for building cloud infrastructure with TypeScript/Python.
Nuitka/Nuitka
Reproduce macOS Nuitka issues across Python distributions and GitHub Actions Python packaging.
rstudio/rstudio
Converts RStudio Python Selenium electron tests into TypeScript Playwright tests, checking each against a live RStudio before counting it as migrated.
kajisho5/ffmpeg-skill
Generate GitHub Actions CI/CD pipeline configurations for automated building and testing of library and package projects.
zenml-io/kitaru
Kitaru documentation surfaces, link rules, and accuracy rules.
zenml-io/kitaru
Add, reuse, or change a frontend-specific Kitaru REST response under /api/v1/ui and its OpenAPI contract in zenml-frontend-monorepo.
zenml-io/kitaru
Kitaru just recipes, CLI structure and structured-output contract, analytics events, and PR-description conventions.
zenml-io/kitaru
Add or change a Kitaru framework adapter that records native agent runs or supports bounded replay.
zenml-io/kitaru
Add or change a separately packaged Kitaru trace importer that normalizes provider exports into imported sessions.
zenml-io/kitaru
Kitaru test layout, CI workflows, and release-workflow behavior.
Works with
Discover dependencies and prepare or execute Kitaru core and plugin releases, including version proposals, Kitaru UI selection, release PRs, ordered tag commands, artifact verification, and recovery. Kitaru Release is an agent skill from zenml-io/kitaru. Discover dependencies and prepare or execute Kitaru core and plugin releases, including version proposals, Kitaru UI selection, release PRs, ordered tag commands, artifact verification, and recovery.
Kitaru Release fits situations like: A user asks what a release depends on; wants to prepare; recover a Kitaru; kitaru plugin release.
Run `npx skills add zenml-io/kitaru --skill kitaru-release -a claude-code`. Or copy the skill folder (.agents/skills/kitaru-release in zenml-io/kitaru) into .claude/skills/kitaru-release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add zenml-io/kitaru --skill kitaru-release -a codex`. Or copy the skill folder (.agents/skills/kitaru-release in zenml-io/kitaru) into .agents/skills/kitaru-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 zenml-io/kitaru --skill kitaru-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/kitaru-release, .gemini/skills/kitaru-release, .github/skills/kitaru-release and .opencode/skills/kitaru-release in your project.
Going by SKILL.md and its folder, Kitaru Release needs the command-line tools its instructions call (git, uv, gh, python and just). Our summary lists: Python 3; Docker.
SKILL.md names 1 domain. As links in the text: github.com. 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.
Kitaru Release 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 7k tokens (SKILL.md is roughly 28k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.4k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Kitaru Release: Workflow Setup (athola/claude-night-market, 341 stars), AWS Cdk Development (sickn33/agentic-awesome-skills, 47k stars), AWS Cdk Development (zxkane/aws-skills, 367 stars) and Reproduce macOS Python Flavors (Nuitka/Nuitka, 15k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
zenml-io (a GitHub organization) maintains it in zenml-io/kitaru, which has 302 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 8, 2026.
Source: zenml-io/kitaru on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.