---
description: Save the forge to git — the light check, then commit and push; no renders; --quick leaves the check out
argument-hint: '[project-slug] [-m "message"] [--tag name] [--quick]'
disable-model-invocation: true
---

Save the forge to git: the light check, then commit and push on
whatever branch is checked out, nothing more (POS.1100). The
`project` and `engine` checks and the renders belong to `/release`
(`.claude/skills/release/SKILL.md`, POS.0570). The engine and every project are repositories of their
own (POS.0940); what the save does per repository is stated in the
help header of `scripts/forge-save.py`, and CLAUDE.md (Persistence)
carries the one-line summary (POS.1070).
Arguments (`[slug]`, `-m "message"`, `--tag <name>`) are passed
through to the script; `--quick` is this skill's alone, leaves the
check out and nothing else (POS.1100), and is never passed on; a project without a repository is a property,
not a defect (CLAUDE.md, Persistence) — relay the script's note in
the report.

1. Determine scope from `python scripts/forge-status.py` (the forge
   reads state by its script — CLAUDE.md, Persistence). It reports the
   engine and each project
   separately, with the branch each is on. A project "not under git"
   with changes is named in the report and otherwise left alone.
1a. Unless `--quick` was given, run the `light` check on every
   repository in scope and settle
   its report through the `/check` procedure
   (`.claude/skills/check/SKILL.md`; the engine's project is
   `forge`); a save never waits on a finding the principal has not
   asked to fix (POS.0430). When the ledger script fails or names
   files it could not parse, the check reads the ledger as it lies,
   the save goes on and says so: the save is what does not lose work
   (SOL.0530).
2. Unless `-m` was supplied, draft a one-line English commit message
   summarising the round — from the records the round appended to
   the touched documents' histories, the primary record of every
   round (CLAUDE.md, Versioning & status) — and propose it to the
   principal; commit with the confirmed or adjusted wording. When
   more than one repository has changes, one message per repository
   is drafted, or the save is run per slug. The script's
   auto-generated file list is used only if the principal says so.
3. A tag is set only on the principal's word: `--tag <name>` given, or
   asked for in words. A tag needs one repository, so a slug. When he
   asks for a tag without naming it, propose `v<intent version>` of
   that repository's intent and take his word or his own name — any
   name git accepts (`pre-save-release-split` as readily as a
   number). The one fixed name, `v<major>` at an approved major, is
   `/release`'s rule; it runs this command with it (POS.1100).
4. Only then run `python scripts/forge-save.py $ARGUMENTS`, `--quick`
   left out, and report the
   outcome — the script itself prints the commit's file summary and
   the tag; no direct git verification afterwards.
