Sake CI Release
kattouf/Sake
A skill your agent uses when working on CI workflows, GitHub Actions, release process, changelog generation (git-cliff), or dependabot configuration.
Add BestieTemplate features (AGENTS.md, changelog, dependabot, pre-commit, lint workflow, testitem runner) to a Julia package with the bestie CLI — no Julia needed.
$ npx skills add JuliaBesties/BestieTemplate.jl --skill bestie-features -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install JuliaBesties/BestieTemplate.jl bestie-features --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/JuliaBesties/BestieTemplate.jl.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/bestie-features .claude/skills/bestie-features && 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 "bestie-features" agent skill from https://github.com/JuliaBesties/BestieTemplate.jl/tree/main/skills/bestie-features into .claude/skills/bestie-features/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bestie-features", 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/JuliaBesties/BestieTemplate.jl/tree/main/skills/bestie-featuresType 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 JuliaBesties/BestieTemplate.jl --skill bestie-features -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install JuliaBesties/BestieTemplate.jl bestie-features --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JuliaBesties/BestieTemplate.jl.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/bestie-features .agents/skills/bestie-features && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "bestie-features" agent skill from https://github.com/JuliaBesties/BestieTemplate.jl/tree/main/skills/bestie-features into .agents/skills/bestie-features/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bestie-features", 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 JuliaBesties/BestieTemplate.jl --skill bestie-features -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install JuliaBesties/BestieTemplate.jl bestie-features --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JuliaBesties/BestieTemplate.jl.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/bestie-features .cursor/skills/bestie-features && 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 "bestie-features" agent skill from https://github.com/JuliaBesties/BestieTemplate.jl/tree/main/skills/bestie-features into .cursor/skills/bestie-features/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bestie-features", 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/JuliaBesties/BestieTemplate.jl.git --path skills/bestie-features--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 JuliaBesties/BestieTemplate.jl --skill bestie-features -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install JuliaBesties/BestieTemplate.jl bestie-features --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JuliaBesties/BestieTemplate.jl.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/bestie-features .gemini/skills/bestie-features && 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 "bestie-features" agent skill from https://github.com/JuliaBesties/BestieTemplate.jl/tree/main/skills/bestie-features into .gemini/skills/bestie-features/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bestie-features", 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 JuliaBesties/BestieTemplate.jl bestie-featuresInstalls 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 JuliaBesties/BestieTemplate.jl --skill bestie-features -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/JuliaBesties/BestieTemplate.jl.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/bestie-features .github/skills/bestie-features && 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 "bestie-features" agent skill from https://github.com/JuliaBesties/BestieTemplate.jl/tree/main/skills/bestie-features into .github/skills/bestie-features/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bestie-features", 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 JuliaBesties/BestieTemplate.jl --skill bestie-features -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install JuliaBesties/BestieTemplate.jl bestie-features --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JuliaBesties/BestieTemplate.jl.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/bestie-features .opencode/skills/bestie-features && 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 "bestie-features" agent skill from https://github.com/JuliaBesties/BestieTemplate.jl/tree/main/skills/bestie-features into .opencode/skills/bestie-features/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bestie-features", 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.
bestie-featuresAdd BestieTemplate features (AGENTS.md, changelog, dependabot, pre-commit, lint workflow, testitem runner) to a Julia package with the bestie CLI — no Julia needed.
Bestie Features is an agent skill from JuliaBesties/BestieTemplate.jl. Add BestieTemplate features (AGENTS.md, changelog, dependabot, pre-commit, lint workflow, testitem runner) to a Julia package with the bestie CLI — no Julia needed. Use when asked to add one of these files/setups to a package, or to see what BestieTemplate can add.
Its SKILL.md is about 2.5k 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 Dependency management and Changelog and release notes. It works with Git. The repository describes itself as: Template for Julia Programming Language packages using the copier engine. The licence is MPL-2.0.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit f29f4df. 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:
gituvxFrom 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:
img.shields.ioAlso links to:
docs.astral.shFrom 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.
Bestie Features loads about 2.5k tokens when it runs. Until then it costs about 70 tokens; SKILL.md has 1,418 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 JuliaBesties/BestieTemplate.jl at commit f29f4df, republished under its MPL-2.0 licence (© JuliaBesties). 1,418 words, ~2,515 tokens.
.claude/skills/bestie-features/SKILL.md (or your agent's skills folder).bestie add-feature applies a named slice of the BestieTemplate copier template to an existing package: only the feature's files are written, everything else is left untouched. Requires only uv on the PATH.
bestie in the commands below stands for this full invocation:
uvx --from bestie-template bestie(The --from is needed because the package is bestie-template and its command is bestie.)
Inline the full invocation in every command — do not rely on a shell alias or variable, which won't survive when each command runs in a fresh shell.
Discover what can be added:
bestie list-features --jsonEach entry has name, description, required_fields (answers you must be able to supply), requires_answers (needs an existing .copier-answers.yml), and optionally optional_files (extra config files written only if missing, keyed by the boolean answer that enables them). Feature names are exact (e.g. the testitem runner is testitem_cli, not testitem); if you pass a name that doesn't exist, the error lists every valid name.
Check the working tree before applying. A feature overwrites its included_files without warning, no conflict prompt and no backup — testitem_cli replaces an existing test/runtests.jl outright, discarding whatever was there. optional_files are the opposite: written only if missing, so an existing one (e.g. a hand-tuned .lychee.toml) is left untouched. Git is the only recovery path for included_files, so run git status first:
included_files: stop and tell the user those changes will be lost. Let them commit or stash before you continue.Apply, from the package root (or pass the package path as second argument). Multiple features are one comma-separated argument, no spaces:
bestie add-feature changelog,dependabot [PATH]Verify with git status / git diff: only the feature's included_files should appear as modified, any missing optional_files as newly added, plus .copier-answers.yml if the package already had one. Read the diff of every pre-existing file the feature touched — "Applied 1 feature(s)" is printed just the same whether the file was created or overwritten, so success output is not evidence that nothing was lost.
In that .copier-answers.yml diff, expect the feature's answers to change and _commit / _src_path to stay put. Those record the template version the package was last fully updated to, and a feature applies only a slice, so they deliberately do not move. The package is then holding one file newer than the version it records — that is the intended state, and a later template update may report a conflict on that file, which is normal. Do not "fix" the mismatch by editing _commit.
A clean diff means the feature applied, not that the package is done: a feature may require follow-up changes to files it does not own (e.g. testitem_cli replaces the test runner, so existing tests must be migrated to @testitem blocks and a test/Project.toml must exist). Check the feature's description and the rendered files for such expectations, and tell the user about any follow-up work you find.
When asked what a package could use rather than for a named feature, start from list-features --json and narrow it against the package itself. Present the result as a short list of what is missing and worth adding, with a one-line reason each; do not apply anything without the user's go-ahead.
included_files against the package before recommending it. For files the template protects (see Protected files), the feature reports "applied" while writing nothing, so recommending one that already exists produces a no-op the user may read as a change.lint_action needs an answers file; lint_action_explicit doesn't. lint_action has requires_answers: true and fails on any package without .copier-answers.yml. Prefer lint_action_explicit there — it takes AddPrecommit/AddLychee as -d flags instead.testitem_cli. It rewrites test/runtests.jl and obliges a test migration, so it is a proposal to discuss, not a quick win to bundle with the others.Packages that use BestieTemplate can carry a badge in their README saying so, as a way of showing support for the template. Packages generated from the full template have it already; no feature adds it, and add-feature never touches the README, so for a package adopting features one at a time it is a one-line edit — placed with the README's other badges, matching how they are laid out — that you make only with the user's go-ahead.
[](https://github.com/JuliaBesties/BestieTemplate.jl)The template's _skip_if_exists list decides whether an existing file is preserved or replaced; it is not a per-feature property. Of the files the features own, only AGENTS.md and CHANGELOG.md are on that list — so agents and changelog never touch an existing file, while dependabot, lint_action, pre_commit, formatter_linter_config and testitem_cli overwrite theirs. test/runtests.jl is an explicit exception carved out of the list's blanket protection for **/*.jl, which is why the test runner is replaceable at all.
Both outcomes print the same "Applied N feature(s)" line, so read the diff rather than the output. Two consequences to pass on to the user:
add-feature, not on a later template update. Bringing an old AGENTS.md or CHANGELOG.md up to date is a manual diff against a freshly rendered copy.Answers are read from the package's .copier-answers.yml when it exists; anything unresolved must be passed as -d KEY=VALUE (repeatable).
Cannot determine required fields ... names the missing keys and the -d flags to pass. Where to find the usual values: PackageName is name in Project.toml; PackageOwner is the GitHub owner in git remote -v; Authors is authors in Project.toml. Confirm anything you had to guess with the user — a wrong value applies "successfully".
Some answers fall outside what guessing covers — notably, the Add* answers. Each one says whether the package uses a given tool, not what a particular file should contain; the feature's output follows from that. AddPrecommit means "this package uses pre-commit", and the Lint.yml job is a consequence. Read the feature's description in list-features --json before deciding them: it names the tool behind each answer and the config file that goes with it. Then resolve each answer in two steps:
.pre-commit-config.yaml already uses pre-commit, so AddPrecommit=true. Settle these yourself and say what you concluded.Never pass a default for these. The CLI does no inference of its own — it resolves fields from the answers file and -d only — so an unasked question becomes a silently wrong file.
Features with requires_answers: true refuse to run without .copier-answers.yml — no -d flag substitutes for it, because the feature's own entry doesn't list those fields in required_fields. lint_action renders Lint.yml from AddPrecommit and AddLychee, which record whether the package uses pre-commit and the Lychee link checker, and guessing doesn't cover them. Falling back to template defaults would produce a workflow that checks the wrong things — or nothing — while still reporting success, so the feature refuses instead. Check list-features --json for a <feature>_explicit variant first (e.g. lint_action_explicit takes the same answers as -d flags); only if none exists should you suggest BestieTemplate.apply (Julia) to apply the full template.
The answers file is updated when present and never created. Its _commit and _src_path are left as they were; --no-preserve-template-version opts out of that, and you should not pass it unless the user asks for it by name.
Both commands accept --json. Failures print {"error": "<message>"} and exit 1; usage mistakes exit 2. Parse the last stdout line — copier may print warnings above it.
--ref vX.Y.Z pins the template version; the default is the latest template release, which is what you normally want. An error saying the feature "produced none of its files" means the rendered template version predates it — pass a newer --ref, or --ref main for a feature that has not made it into a release yet.
© JuliaBesties, MPL-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 skills/bestie-features of JuliaBesties/BestieTemplate.jl.
Open the folder on GitHubat commit f29f4df
Bestie Features 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 |
|---|---|---|---|---|---|---|
| Bestie Features this skillJuliaBesties/BestieTemplate.jl | 128 | — | ~2.5k | Automated safety check: Pass | MPL-2.0 | |
| Sake CI Releasekattouf/Sake | 116 | — | ~731 | Automated safety check: Pass | MIT | |
| Dependency Upgrade Protocoldralgorhythm/claude-agentic-framework | 125 | — | ~1.5k | Automated safety check: Pass | None | |
| Git Revert SafetyZaxbyHub/opencode-swarm | 494 | — | ~2.2k | Automated safety check: Pass | MIT | |
| React Router Release Notes Prepremix-run/react-router | 57k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Draft Release Notesjamiepine/voicebox | 57k | — | ~941 | Automated safety check: Pass | MIT |
kattouf/Sake
A skill your agent uses when working on CI workflows, GitHub Actions, release process, changelog generation (git-cliff), or dependabot configuration.
dralgorhythm/claude-agentic-framework
Sequences safe dependency upgrades: read the changelog, verify the version exists upstream, pin it, and keep major bumps in separate commits behind a full gate run.
ZaxbyHub/opencode-swarm
Apply when reverting commits, undoing merges, or recovering from branch contamination.
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
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.
Works with
Categories
Add BestieTemplate features (AGENTS.md, changelog, dependabot, pre-commit, lint workflow, testitem runner) to a Julia package with the bestie CLI — no Julia needed. jl.md, changelog, dependabot, pre-commit, lint workflow, testitem runner) to a Julia package with the bestie CLI — no Julia needed.
Bestie Features fits situations like: asked to add one of these files/setups to a package; see what BestieTemplate can add.
Run `npx skills add JuliaBesties/BestieTemplate.jl --skill bestie-features -a claude-code`. Or copy the skill folder (skills/bestie-features in JuliaBesties/BestieTemplate.jl) into .claude/skills/bestie-features in your project. Claude Code loads it when a task matches its description.
Run `npx skills add JuliaBesties/BestieTemplate.jl --skill bestie-features -a codex`. Or copy the skill folder (skills/bestie-features in JuliaBesties/BestieTemplate.jl) into .agents/skills/bestie-features 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 JuliaBesties/BestieTemplate.jl --skill bestie-features -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bestie-features, .gemini/skills/bestie-features, .github/skills/bestie-features and .opencode/skills/bestie-features in your project.
Going by SKILL.md and its folder, Bestie Features needs the command-line tools its instructions call (git and uvx).
SKILL.md names 2 domains. In commands or code: img.shields.io; the agent is likely to contact it when it follows the instructions. As links in the text: docs.astral.sh. 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.
Bestie Features is published under the MPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.5k tokens (SKILL.md is roughly 10k 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 Bestie Features: Sake CI Release (kattouf/Sake, 116 stars), Dependency Upgrade Protocol (dralgorhythm/claude-agentic-framework, 125 stars), Git Revert Safety (ZaxbyHub/opencode-swarm, 494 stars) and React Router Release Notes Prep (remix-run/react-router, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
JuliaBesties (a GitHub organization) maintains it in JuliaBesties/BestieTemplate.jl, which has 128 GitHub stars. The repository was last updated on September 18, 2026.
Source: JuliaBesties/BestieTemplate.jl on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.