Agent skill

Bestie Features

by JuliaBesties in 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.

MPL-2.0Auto-check passedDevelopment

Install Bestie Features

skills CLI
$ npx skills add JuliaBesties/BestieTemplate.jl --skill bestie-features -a claude-code

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

GitHub CLI
$ gh skill install JuliaBesties/BestieTemplate.jl bestie-features --agent claude-code

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

Manual copy
$ git clone --depth 1 https://github.com/JuliaBesties/BestieTemplate.jl.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/bestie-features .claude/skills/bestie-features && rm -rf skills-src

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

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

Facts

Skill name
bestie-features
GitHub stars
128
Token cost
~2.5k tokens
SKILL.md length
1,418 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
MPL-2.0

At a glance

Add BestieTemplate features (AGENTS.md, changelog, dependabot, pre-commit, lint workflow, testitem runner) to a Julia package with the bestie CLI — no Julia needed.

  • Works in 4 steps: Discover what can be added → Check the working tree before applying.… → Apply, from the package root (or pass… → …
  • Asked to add one of these files/setups to a package
  • SKILL.md covers Workflow, Recommending features, Offering the badge and Protected files, plus 3 more sections
  • Calls git and uvx; reaches img.shields.io

What it does

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.

When your agent uses it

  • Asked to add one of these files/setups to a package
  • See what BestieTemplate can add

Example prompts

  • “/bestie-features”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Discover what can be added
  2. Check the working tree before applying. A feature overwrites its included_files without warning, no conflict prompt and no backup…
  3. Apply, from the package root (or pass the package path as second argument). Multiple features are one comma-separated argument, no spaces
  4. Verify with git status / git diff: only the feature's included_files should appear as modified, any missing optional_files as newly added…

What it can do on your machine

Read from SKILL.md and the folder at commit f29f4df. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • uvx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • img.shields.io

    Also links to:

    • docs.astral.sh

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

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

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from JuliaBesties/BestieTemplate.jl at commit f29f4df, republished under its MPL-2.0 licence (© JuliaBesties). 1,418 words, ~2,515 tokens.

Download SKILL.mdSave it as .claude/skills/bestie-features/SKILL.md (or your agent's skills folder).
name
bestie-features
description
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.

Adding Bestie features to a package

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:

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

Workflow

  1. Discover what can be added:

    sh
    bestie list-features --json

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

  2. 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:

    • Uncommitted changes to any of the feature's included_files: stop and tell the user those changes will be lost. Let them commit or stash before you continue.
    • A file the feature owns exists and is committed: say so and what will replace it, and get the user's go-ahead before applying.
    • Not a git repository: do not apply. There is no way to undo it.
  3. Apply, from the package root (or pass the package path as second argument). Multiple features are one comma-separated argument, no spaces:

    sh
    bestie add-feature changelog,dependabot [PATH]
  4. 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.

Recommending features

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.

  • Drop what is already there. Check each feature's 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.
  • Flag the cost of 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.

Offering the badge

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.

markdown
[![BestieTemplate](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/JuliaBesties/BestieTemplate.jl/main/docs/src/assets/badge.json)](https://github.com/JuliaBesties/BestieTemplate.jl)

Protected files

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:

  • A protected file never receives template improvements — not on 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.
  • To adopt the template's version of a protected file, the user must move or delete their own first. Do that only on their explicit instruction.
Show full SKILL.md (505 more words)Show less

Answering template questions

  • 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:

    1. The config file exists → the answer is true. A package with .pre-commit-config.yaml already uses pre-commit, so AddPrecommit=true. Settle these yourself and say what you concluded.
    2. The config file is absent → you cannot conclude anything. Ask. Absence means the package does not use that tool yet, not that the user doesn't want it — turning the answer on is exactly how they'd adopt it. Ask about the tool in the user's terms ("do you want the lint workflow to check links too?"), and set the answer from their reply.

    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.

Machine-readable mode

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.

Version pinning

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

Files

Just SKILL.md in skills/bestie-features of JuliaBesties/BestieTemplate.jl.

Open the folder on GitHubat commit f29f4df

Compare with similar skills

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.

Bestie Features compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Bestie Features this skillJuliaBesties/BestieTemplate.jl128—~2.5kAutomated safety check: PassMPL-2.0
Sake CI Releasekattouf/Sake116—~731Automated safety check: PassMIT
Dependency Upgrade Protocoldralgorhythm/claude-agentic-framework125—~1.5kAutomated safety check: PassNone
Git Revert SafetyZaxbyHub/opencode-swarm494—~2.2kAutomated safety check: PassMIT
React Router Release Notes Prepremix-run/react-router57k—~1.1kAutomated safety check: PassMIT
Draft Release Notesjamiepine/voicebox57k—~941Automated safety check: PassMIT

Similar skills

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

    116 GitHub stars~731 tokensUpdated 6 mo ago
    DevelopmentAuto-check passed
  • Dependency Upgrade Protocol

    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.

    125 GitHub stars~1.5k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • Git Revert Safety

    ZaxbyHub/opencode-swarm

    Apply when reverting commits, undoing merges, or recovering from branch contamination.

    494 GitHub stars~2.2k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • React Router Release Notes Prep

    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.

    57k GitHub stars~1.1k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Draft Release Notes

    jamiepine/voicebox

    Writes or refreshes the Unreleased section of CHANGELOG.md as a themed narrative built from the commits, PRs and diff since the last version tag.

    57k GitHub stars~941 tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • 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.

    70k GitHub stars~1.9k tokensUpdated today
    DevelopmentAuto-check passed

Works with

Categories

Questions about Bestie Features

What does Bestie Features do?

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.

When should I use Bestie Features?

Bestie Features fits situations like: asked to add one of these files/setups to a package; see what BestieTemplate can add.

How do I install Bestie Features in Claude Code?

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.

How do I install Bestie Features in Codex?

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.

Can I use Bestie Features in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add 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.

What does Bestie Features need to run?

Going by SKILL.md and its folder, Bestie Features needs the command-line tools its instructions call (git and uvx).

Does Bestie Features access the network?

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.

Is Bestie Features safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Bestie Features use?

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.

How many tokens does Bestie Features use?

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.

What are the alternatives to Bestie Features?

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.

Who maintains Bestie Features?

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.