squash

squash is a skill for Claude Code from drn/dots. It costs 35 tokens per session (1,037 once invoked), scanned A, original, MIT.

A workflow for combining all commits on a branch into one commit before merging.

In plain words
What is it for?
Use it to clean up branch history and prepare a branch for merge.
Why use it?
It turns a noisy development history into a single, easier-to-read change and can update an open pull request.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter.

Good fit Use it to clean up branch history and prepare a branch for…

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/drn/dots/squash
View source ↗ drn/dots
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.

Any agent
npx skills add drn/dots --skill squash
Clone the repo
git clone --depth 1 https://github.com/drn/dots

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 squash

README.md
[![agentmods](https://agentmods.dev/badge/skills/drn/dots/squash.svg)](https://agentmods.dev/skills/drn/dots/squash)
Your own site
<a href="https://agentmods.dev/skills/drn/dots/squash"><img src="https://agentmods.dev/badge/skills/drn/dots/squash.svg" alt="Measured on agentmods" height="20"></a>
Per session 35 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,037 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.
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.00035 $0.01037
Opus 5 $0.00017 $0.00518
Sonnet 5 $0.00007 $0.00207
Haiku 4.5 $0.00003 $0.00104

Measured 3d ago against content hash 54b143168c39, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-07, from the pricing page.

Security

Grade A, and why

squash 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 3d 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.

agents/skills/squash/SKILL.md · 96 lines

How it starts

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

Context

  • Current branch: !git branch --show-current
  • Git status: !git status --porcelain 2>/dev/null | head -20
  • Base ref: !git branch -r 2>/dev/null | grep -oE 'origin/(main|master)' | head -1
  • Commits vs main: !git log origin/main..HEAD --oneline 2>/dev/null | head -50
  • Commits vs master: !git log origin/master..HEAD --oneline 2>/dev/null | head -50
  • Open PR: !gh pr view --json number,url,title,headRefName 2>/dev/null | head -10
  • Remote tracking: !git rev-parse --abbrev-ref @{upstream} 2>/dev/null | head -1
  • Arguments: $ARGUMENTS

Your task

Squash all commits on the current branch (since it diverged from the default branch) into a single commit, then force-push to update any open PR.

In all steps below, substitute <remote> and <default-branch> with the values determined in Step 1.

Step 0: Validate state

  • If HEAD is detached, stop: "Cannot squash in detached HEAD state."
  • If the working tree has uncommitted changes (git status --porcelain), stop: "Working tree is dirty. Commit or stash changes first."
  • Determine the current branch. If it is the default branch (main/master), stop: "Cannot squash commits on the default branch."

Step 1: Determine the base branch and fetch

  • If upstream remote exists, use it. Otherwise use origin.
  • Detect the default branch: try git symbolic-ref refs/remotes/<remote>/HEAD, then <remote>/main, then <remote>/master.
  • If none work, stop: "Could not determine the default branch."
  • Fetch the latest: git fetch <remote> <default-branch>
  • Compute and store the merge base SHA: git merge-base <remote>/<default-branch> HEAD. Use this SHA in all subsequent steps.

Step 2: Count commits

  • Run git log <merge-base-SHA>..HEAD --oneline to list branch commits.
  • If there are 0 commits, stop: "No commits to squash."
  • If there is exactly 1 commit, stop: "Only one commit on this branch. Nothing to squash."
  • Report: "Found N commits to squash."

Step 3: Draft the squash commit message

Read the full file on GitHub · 96 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. 3d ago First seen · 96 lines · 35 tokens per session scan A 54b143168c39

Subscribe to this mod's changes

squash is a skill published in the GitHub repository drn/dots (23 stars, last pushed 2d ago), licensed MIT. It adds 35 tokens to every session and 1,037 once invoked, about $0.0002 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-09-03.