factory-release

factory-release is a skill for Claude Code, Codex from nonlinear-xyz/factory-kit. It costs 58 tokens per session (3,133 once invoked), scanned A, original, MIT.

A release workflow for keeping a package's version files, Git tag, GitHub Release, and npm publication aligned. npm is a package registry used to distribute JavaScript and Node.js packages.

In plain words
What is it for?
Use it to prepare patch, minor, or major releases, write release notes, tag the code, create a GitHub Release, and publish the package to npm.
Why use it?
It removes the risk of publishing different version numbers in different places or releasing from an unprepared repository. It also adds approval points before the release is published.

Skill for Claude CodeCodex

Part of the factory-kit plugin — 37 skills, 8 commands, 12 agents, 1 MCP server shipped together

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/nonlinear-xyz/factory-kit/factory-release
Any agent
npx skills add nonlinear-xyz/factory-kit --skill factory-release
Clone the repo
git clone --depth 1 https://github.com/nonlinear-xyz/factory-kit

Made for: Claude Code, Codex.

Or install factory-kit, the plugin that ships this one along with the rest of its 37 skills, 8 commands, 12 agents, 1 MCP server.

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

README.md
[![agentmods](https://agentmods.dev/badge/skills/nonlinear-xyz/factory-kit/factory-release.svg)](https://agentmods.dev/skills/nonlinear-xyz/factory-kit/factory-release)
Your own site
<a href="https://agentmods.dev/skills/nonlinear-xyz/factory-kit/factory-release"><img src="https://agentmods.dev/badge/skills/nonlinear-xyz/factory-kit/factory-release.svg" alt="Measured on agentmods" height="20"></a>
Per session 58 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,133 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
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 $0.00058 $0.03133
Opus 5 $0.00029 $0.01566
Sonnet 5 $0.00012 $0.00627
Haiku 4.5 $0.00006 $0.00313

Measured 4d ago against content hash df0ddc7dd6d3, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

factory-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 4d 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.

skills/factory-release/SKILL.md · 150 lines

How it starts

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

You're cutting a new release. The user owns the final word at every gate and edits the release notes directly in their preferred editor.

A release is one atomic fact — package.json version, the VERSION file, the git tag, the GitHub Release, and the npm publish all name the same thing. This command's job is to advance them together. Letting any one of them move without the others is the drift this command exists to prevent.

Invocation input: patch, minor, or major. If empty, ask through the host's user-interaction capability or directly in chat.

What to do

  1. Pre-flight. Run in parallel:

    • git status --porcelain — must be clean. If dirty, list the files and ask whether to abort or stash.

    • git rev-parse --abbrev-ref HEAD — confirm we're on the default branch (typically main). If not, warn and ask before proceeding.

    • Establish the current version from up to three sources, and detect drift between them:

      • package.json version (if a package.json exists) — the source npm publishes from.
      • VERSION file at repo root (if present).
      • Latest git tag: git describe --tags --abbrev=0 (strip leading v).

      If these disagree, surface all of them explicitly and treat the highest (by semver) as the current base. Drift is exactly what this command exists to close — name it, don't silently pick one. If none exist, treat current as 0.0.0.

  2. Compute the new version from the reconciled base:

    • patch: X.Y.Z → X.Y.(Z+1)
    • minor: X.Y.Z → X.(Y+1).0
    • major: X.Y.Z → (X+1).0.0
  3. Check for tag collision. git rev-parse v<new-version> 2>/dev/null — if it resolves, fail with a clear message and stop. Don't overwrite an existing tag.

  4. Establish the baseline and enumerate the version spans. The breakdown starts from the last published point, not merely the last tag — so versions that were tagged but never shipped still get a changelog entry.

    • Baseline:
      • If this is an npm package (package.json with a name, not private): npm view <name> version → the last version on npm. The baseline ref is its tag v<published> if that tag exists; if the tag is missing, fall back to git describe --tags --abbrev=0 and note the mismatch.
      • Otherwise: baseline = previous tag git describe --tags --abbrev=0. If no tags exist at all, baseline = the initial commit.
    • Enumerate every version boundary from the baseline to HEAD. List tags with git tag --list 'v*' --sort=v:refname, keep those strictly greater than the baseline, and append the new version (v<new-version>, spanning the last existing tag → HEAD). This yields an ordered list of spans: (baseline → v_a), (v_a → v_b), …, (v_last → HEAD as v<new-version>). In the normal no-drift case the baseline IS the last tag, so there's exactly one span and the per-version breakdown collapses to a single block automatically.
    • For each span, gather deterministically (straight from git, no interpretation):
      • Commits: git log <from>..<to> --pretty=format:"%h %s", grouped by Conventional Commits type (feat, fix, refactor, chore, docs, test; anything non-conforming → **other:** with a flag for the user to rewrite).
      • Diffstat: git diff --shortstat <from>..<to> → "N files changed, +X / −Y".
      • Surface map: git diff --name-status <from>..<to>, group changed paths by top-level directory and mark added (+), modified (~), deleted (), renamed (). For this kit, skills/, agents/, commands/, and bin/ ARE the public API surface (see the README's Versioning section), so this line is the at-a-glance "what moved in the surface."
    • Identify the dominant theme across the whole span (largest user-facing group, feat > fix > refactor > chore) for the top-level Outcome line.
    • Extract any Linear IDs (<TEAM>-<NUM>) across all spans for the Refs line.
  5. Write the draft to a file the user can actually edit. Use the host's filesystem-write capability to create /tmp/factory-kit-release-notes-v<new-version>.md. Auto-fill everything you can; leave clear REFINE markers where judgment is needed. Order version blocks newest-first — this release at the top, older catch-up versions beneath. Shape:

Read the full file on GitHub · 150 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. 4d ago First seen · 150 lines · 58 tokens per session scan A df0ddc7dd6d3

Subscribe to this mod's changes

factory-release is a skill published in the GitHub repository nonlinear-xyz/factory-kit (9 stars, last pushed 1mo ago), licensed MIT. It adds 58 tokens to every session and 3,133 once invoked, about $0.0003 per session on Opus 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-31.