# Salve

> Use when the user says "salve" (or /salve) to ship and persist the current work in one shot. Persists context, commits, pushes to GitHub, opens and merges a PR into the main branch, triggers/confirms the deploy if the project has one, fast-forward-updates the local checkout, and reports evidence. Saying "salve" is the user's explicit OK to merge to the main branch and deploy. Variants - "salve doc" (doc-only, uses [skip ci], no redeploy) and "salve sem deploy" / "salve no deploy" (push + PR, do NOT merge to production).

- Skill: `zavelinski/salve` (Agent Skill)
- Install (CLI): `npx skillmds@latest add zavelinski/salve`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zavelinski/salve/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: zavelinski (https://skillmd.com/u/zavelinski)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zavelinski/salve

---


# salve - ship + persist the current work

Trigger: the user writes `salve` (or `/salve`). **Saying "salve" is the user's explicit OK to merge to the main branch and deploy.** That is the one approval this skill needs; do not ask again, just run the steps and report.

Run the steps IN ORDER. Apply judgment (commit message, conflict resolution). If a step fails, STOP and report, do not push blindly past it.

## 0. Pre-flight
- `git status` and `git branch --show-current`. See what changed.
- Identify the project's main branch (`main`, `master`, or whatever the repo uses).
- **If code changed (not doc-only): run the project's tests FIRST** (e.g. `npm test`, `pytest`, `go test`). If they fail, STOP and report. Never ship broken code.

## 1. Persist context
- Update the project's own notes so the next session can continue: a `CLAUDE.md` / `README` / `NOTES.md` status section (what's done, what's next), if the project keeps one.
- `git add` only the work (**never secrets**; keep `.env` and credentials gitignored).
- Commit with a clear subject + body. Use `[skip ci]` ONLY in `salve doc` mode.

## 2. Push to GitHub
- `git push -u origin HEAD`.
- On a feature branch: `gh pr create --base <main>` then `gh pr merge <#> --squash` (the squash subject carries `[skip ci]` if this is `salve doc`).
- Merge conflict blocking: `git fetch origin <main>` -> `git merge origin/<main>` -> resolve -> push -> re-merge.
- Already on the main branch: push directly (or branch first if the project requires PRs).

## 3. Deploy (only if the project has one)
- If the host auto-deploys on push to the main branch (Render, Vercel, Fly, Railway, etc.), **confirm it ran** - check the deploy dashboard or a health endpoint (e.g. `curl -s -o /dev/null -w "%{http_code}\n" <prod-url>/health`).
- If the host does NOT auto-deploy, trigger the deploy via its CLI / API / dashboard. `salve` deploys by default.
- If the project has no deploy target, skip this step.
- `salve sem deploy`: skip the merge-to-production - push and open the PR only, do not merge.

## 4. Update the local checkout
- On the main checkout: `git -C <project-root> pull --ff-only origin <main>`.
- Confirm `behind=0, ahead=0`.

## 5. Report evidence
- Commit SHA, PR #, merge SHA, deploy/health state, local sync. Give a concrete rollback (`git revert <sha>`).

## Variants
- `salve doc` - doc-only change: use `[skip ci]` on the commit/merge, do not redeploy.
- `salve sem deploy` / `salve no deploy` - push + persist + open PR, do NOT merge to the main branch (leave the PR for the user).

## Safety
- Tests before merge. Red = stop.
- Never commit secrets.
- Merge-to-main + deploy happen only because the user said `salve`. Anything beyond that (rotating secrets, destructive migrations) is still an escalation - ask.

## Notes
- Configure once per project: tell the skill your main branch, your deploy target (or "none"), and your health URL, and it follows them. Defaults are sensible (`main`, auto-deploy-on-push, `/health`).
- Original work, MIT-licensed.

