Squish Watch your coding agents from the notch

See what every Codex and Claude Code session costs, get a heads-up before its context compacts, and answer Claude Code's prompts without hunting for the right terminal. Everything is read locally, on your Mac.

Download Squish

macOS 14 Sonoma or later, Apple silicon

A compact alert, as Squish shows it when a session passes your threshold.

What it does

Usage

  1. Choose a folder. On first launch, pick the folder that holds your projects (later: ⇧⌘O, Choose Project Folder…). Squish remembers it.
  2. Read the costs. Sessions appear newest first while older history indexes in the background. Each one shows its tokens, its estimated cost and how full its context is.
  3. Set the alert threshold. Under Compact alerts, choose when the notch alert fires, or preview it.
  4. Turn on Live chats if you want to answer Claude Code from the notch. Squish installs its hook (see below); a preview button shows what a request looks like.

Live chats and the Claude Code hook

With Live chats on, Claude Code permission prompts and AskUserQuestion questions open the notch with one tab per waiting session. Approve or deny a tool, pick one of the offered answers, or type your own.

What turning it on does, and why it is safe to leave on:

Codex and Gemini CLI sessions appear as active chats too, but are answered in their own terminal. Turn Live chats off before deleting Squish, so the hook entry is removed.

Where it looks

AgentSession logsSupport
Codex~/.codex/sessionsFull
Claude Code~/.claude/projectsFull, plus answering from the notch
Gemini CLI~/.gemini/tmpBest effort

Squish also picks up matching local .codex, .claude and .gemini folders below the folder you chose. It is not sandboxed, because these logs live in hidden folders in your home directory.

Costs are estimates. They use the providers' published API prices (the catalog lives in PricingCatalog.swift). Codex, Claude and Gemini subscriptions bill differently, and models without a known price are shown but left out of the totals.

Questions

Is Squish free?
Yes. Squish is free and open source under the Apache License 2.0.
Does it upload my sessions anywhere?
No. Squish reads the session logs your coding agents already write to disk and parses them on your Mac. No session content is uploaded, and it works offline. The only network use is checking for app updates.
Which coding agents does it support?
Codex (from ~/.codex/sessions) and Claude Code (from ~/.claude/projects) are fully supported. Gemini CLI (from ~/.gemini/tmp) is supported on a best-effort basis. Answering prompts from the notch works for Claude Code only; Codex and Gemini CLI sessions show up as active chats but are answered in their own terminal.
Which Macs does it run on?
macOS 14 (Sonoma) or later on Apple silicon. The notch popups appear at the top of the screen on any Mac, with or without a camera notch.
Are the costs what I actually pay?
They are API-equivalent estimates: what the same tokens would cost at the providers' published API prices, split into input, cache-read, cache-write and output, with long-context tiers where providers use them. Subscription plans for Codex, Claude or Gemini bill differently. Models without a known price stay visible but are left out of the totals.
What happens to my cost history when an agent deletes old logs?
Squish keeps a durable cost ledger for each project folder, so totals survive after the source session logs are gone. Completed days are frozen; only the current day updates live.
What does the Claude Code hook install?
Only when you turn on Live chats, Squish adds one PermissionRequest hook to ~/.claude/settings.json that runs the squish-hook program bundled inside the app, after backing up the original file once to settings.json.squish-backup. Your other hooks are left untouched, and turning Live chats off removes the entry again. The hook does nothing unless Squish is running and watching the folder the Claude Code session is in; otherwise Claude Code shows its usual prompt. If you do not answer in the notch within five minutes, the hook also falls back to Claude Code's own prompt.
Does Squish need Accessibility access?
Not for approving or denying permissions, and turning on Live chats triggers no system prompts. macOS asks for Accessibility only the first time you send an answer to a Claude Code question, because Squish types that answer into the session's terminal. Without it, the answer is copied to the clipboard instead.
How do updates work?
Squish checks for updates automatically through Sparkle and installs them after asking; you can also choose Check for Updates in the Squish menu. Every release is a signed, notarized build published on GitHub Releases, and each update is verified against Squish's signing key before it is installed.
Can I request a feature or report a bug?
Ideas and questions go to GitHub Discussions; reproduced bugs go to Issues using the template. Pull requests aren't accepted.

Build from source

Requires macOS 14 or later and Xcode with the Swift 6 toolchain.

git clone https://github.com/bring-shrubbery/squish.git && cd squish && ./scripts/build-app.sh

The app bundle is written to dist/Squish.app (ad-hoc signed). During development, run swift run Squish, and swift test for the tests. The README has the details.

Contributing

Squish is developed by a small team working with AI coding agents that we run and supervise ourselves. Because of that:

License

Squish is licensed under the Apache License 2.0. It is published by Quassum and made by Antoni Silvestrovic, built with Claude Code.