kaji: Skill for Claude Code

.claude/skills/release/SKILL.md

release is a skill for Claude Code from apokamo/kaji. It costs 39 tokens per session (6,092 once invoked), scanned A, original, Apache-2.0.

A maintainer workflow for releasing the kaji project. It updates the version and changelog, creates a Git tag and GitHub Release, and hands PyPI publishing to GitHub Actions after approval.

In plain words
What is it for?
Use it from kaji’s main worktree for a normal release or with --dry-run to prepare and inspect the release locally.
Why use it?
It coordinates the release steps and checks the repository state before pushing changes. A dry-run lets maintainers inspect local updates without pushing or creating the GitHub Release.

Skill for Claude Code

Written for Claude Code: installed under .claude/.

This is apokamo/kaji's own configuration. It tells Claude Code how to work on kaji itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything kaji configures →

Reuse

Borrowing it

Nothing to install: this file belongs to apokamo/kaji. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/apokamo/kaji/main/.claude/skills/release/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/apokamo/kaji

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for release

README.md
[![agentmods](https://agentmods.dev/badge/skills/apokamo/kaji/release/github.svg)](https://agentmods.dev/skills/apokamo/kaji/release)
Your own site
<a href="https://agentmods.dev/skills/apokamo/kaji/release"><img src="https://agentmods.dev/badge/skills/apokamo/kaji/release/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for release

Your own site · 80×15
<a href="https://agentmods.dev/skills/apokamo/kaji/release"><img src="https://agentmods.dev/badge/skills/apokamo/kaji/release.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 39 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 6,092 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector warn 7 Sept 2026
SkillSpector: 9 findings, up to high

These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →

  • high Tool Misuse · line 322
    Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
    Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
  • high Tool Misuse · line 322
    Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
    Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
  • high Tool Misuse · line 402
    Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
    Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
  • high Tool Misuse · line 402
    Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
    Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
  • high Tool Misuse · line 313
    Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
    Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
  • high Tool Misuse · line 318
    Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
    Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
  • high Tool Misuse · line 338
    Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
    Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
  • high Tool Misuse · line 355
    Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
    Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
  • medium MCP Rug Pull · line 383
    uvx/uv tool run commands without ==version create a rug-pull risk.
    Fix: Pin the version: uvx package-name==1.2.3
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00039 $0.06092
Opus 5.5 $0.00016 $0.02437
Sonnet 5.5 $0.00008 $0.01218
Haiku 4.5 $0.00004 $0.00609

Measured 9d ago against content hash 96ba40e8524b, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

release scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/skills/release/SKILL.md · 442 lines

How it starts

The opening of the file, as written. The whole thing — 442 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Release

kaji の release を maintainer の手元で進める skill。 各 step で user 承認を挟みながら version bump → CHANGELOG → tag → GitHub Release ページ作成まで進める。 PyPI publish は GitHub Release 公開後に .github/workflows/publish-pypi.yml が GitHub Actions + PyPI Trusted Publisher で実行する。

いつ使うか

タイミング このスキル
kaji の release(version bump + tag + Release ページ)を切る ✅ 必須
dry-run(push / Release ページ作成手前まで確認したい) ✅ --dry-run 経路
PyPI publish ✅ GitHub Release 公開後、publish-pypi.yml へ引き継ぐ
.github/workflows/release-please.yml の再有効化 ❌ 対象外(本 skill は maintainer 手元実行前提)

入力

/release            # 通常実行(push と Release ページ作成まで進める)
/release --dry-run  # ローカル状態のみ更新(push / gh release create はスキップ)

引数なしで起動し、skill 側で git / pyproject の状態を読んで判定する。

前提

  • 実行場所: kaji 本体の main worktree で実行する(release branch は切らない、main 直接 update する運用)
  • gh CLI を使う(GitHub 運用)
  • GitHub を指す git remote が 1 つ存在すること。Step 1 で git remote -v の URL から動的に抽出する。.kaji/config.toml の provider.github.git_remote 値と整合する remote 名であることが前提
  • 解決した GitHub remote に対して git push できる権限を maintainer が持っていること
  • uv / make check が走る環境(kaji 開発環境セットアップ済み)
  • PyPI publish を行う場合、GitHub environment pypi が作成済みで approval rule が設定されていること
  • PyPI 側で project kaji の Trusted Publisher(初回は Pending Trusted Publisher)が設定済みであること
    • owner: apokamo
    • repository: kaji
    • workflow filename: publish-pypi.yml
    • environment: pypi

Note: 現状 skill は git remote -v の URL grep でのみ remote を解決し、.kaji/config.toml の provider.github.git_remote は直接読まない。config 値を変えただけでは動作は変わらない点に注意。将来 kaji config git-remote 相当の CLI を追加する余地あり。

実行手順

Step 1: Pre-flight check

以下を順に確認する。1 つでも失敗した時点で停止し、user に復旧手順を提示する。

# 1-0. GitHub remote 名を解決
#      `git remote -v` から URL に github.com を含む push remote を動的抽出する。
#      `.kaji/config.toml` の `provider.github.git_remote` 値と整合する
#      remote 名であることが前提(skill は config を直接読まない)。
GITHUB_REMOTE=$(git remote -v | grep -m 1 'github\.com.*(push)' | cut -f1)
# 上記で見つからない場合、`origin` が GitHub を指していれば fallback
if [ -z "$GITHUB_REMOTE" ]; then
    if git remote get-url origin 2>/dev/null | grep -q github; then
        GITHUB_REMOTE=origin
    else
        echo "ABORT: no git remote pointing to github.com found"
        exit 1
    fi
fi
echo "Resolved GitHub remote: $GITHUB_REMOTE"

# 1-1. main checkout 状態
git rev-parse --abbrev-ref HEAD   # → "main" であること

# 1-2. working tree clean
git status --porcelain            # → 空であること

# 1-3. 上流 sync
git fetch "$GITHUB_REMOTE"
git rev-list --left-right --count "$GITHUB_REMOTE/main"...HEAD
# → "0\t0"(ahead/behind ともに 0)であること

# 1-4. 解決した remote が GitHub を指していることを再確認
git remote get-url "$GITHUB_REMOTE"   # → github.* を含むこと

# 1-5. gh CLI 認証済み
gh auth status                        # → "Logged in" 表示

Read the full file on GitHub · 442 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 9d ago Changed 96ba40e8524b
  2. 1mo ago Changed · +35 lines 81a3c4d960be
  3. 1mo ago First seen · 407 lines · 39 tokens per session scan A 6e923e6e748e

Subscribe to this mod's changes

release is a skill published in the GitHub repository apokamo/kaji (15 stars, last pushed 5d ago), licensed Apache-2.0. It adds 39 tokens to every session and 6,092 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.