update

A command that checks how cctally was installed and updates it through npm or Homebrew, two tools commonly used to install developer software.

In plain words
What is it for?
Use it to install the latest version, check for updates, skip or postpone an update, preview an update with a dry run, or request a specific version.
Why use it?
It removes the need to remember which package manager installed the program or which upgrade command to run.

Command

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 commands/omrikais/cctally/update
Clone the repo
git clone --depth 1 https://github.com/omrikais/cctally
Per session 0 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 3,554 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.00000 $0.03554
Opus 5 $0.00000 $0.01777
Sonnet 5 $0.00000 $0.00711
Haiku 4.5 $0.00000 $0.00355

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

Security

Grade A, and why

update 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 2d 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.

docs/commands/update.md · 243 lines

How it starts

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

cctally update

Self-update cctally for npm and Homebrew installs. Detects the install method by realpath(sys.argv[0]), fetches the latest version from the matching upstream (npm registry for npm; the Homebrew formula raw blob for brew), and runs the right install command — brew update --quiet && brew upgrade cctally or npm install -g cctally@latest — with live output streamed to the terminal (CLI) or modal (dashboard). Source / dev installs are detected as unknown and fall through to a manual recipe.

Synopsis

cctally update [--check | --skip [VERSION] | --remind-later [DAYS]]
               [--version X.Y.Z]
               [--dry-run]
               [--force]
               [--json]

The three mode flags (--check, --skip, --remind-later) are mutually exclusive. With none set, the default mode is install.

Description

cctally update is a thin wrapper around the install method's own upgrade command. It does not bundle its own download or PGP-verify step — brew and npm already enforce their package integrity. What it adds:

  • Install-method detection from realpath(sys.argv[0]). Brew matches on /Cellar/cctally/ (Apple Silicon, Intel, and Linuxbrew all funnel through that path); npm matches via npm prefix -g plus a <prefix>/lib/node_modules/cctally/ prefix check. Anything else is unknown. Detection is path-only, no subprocess probes — adds zero latency.
  • Auto-suggest banner. When a newer version is cached in update-state.json, a one-line banner prints to stderr after the main command's output: ↑ cctally 1.7.2 available (you're on 1.5.0). Run \cctally update`. Skip: cctally update --skip 1.7.2. Suppressed in the same machine-readable contexts as the migration banner (--json, --status-line, --format, non-tty stderr, and a fixed list of hot hot-path commands like record-usage, hook-tick, dashboard`).
  • Dashboard integration. The dashboard renders an amber Update available badge in the header when a new version is cached, with a modal that streams live subprocess output during install via SSE. The modal survives the os.execvp that restarts the dashboard server post-install — the React SSE consumer auto-reconnects to the new server's /api/events and /api/update/stream/<run_id> channels.
  • Dismissal semantics. --skip [VERSION] appends to a per-version ignore list (default = the latest cached version); --remind-later [DAYS] defers the banner for N days (default 7, range [1, 365]). Both write to update-suppress.json. A newer version landing overrides any active remind-later window.
  • Source-install fallback. When detection returns unknown (git clone + bin/symlink install, dev worktree, etc.), --check and install both print the manual recipe cd <repo> && git pull && bin/symlink and exit cleanly (--check exit 0; install exit 1).

Read the full file on GitHub · 243 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. 2d ago First seen · 243 lines · 0 tokens per session scan A 880dc7a365e1

Subscribe to this mod's changes

update is a command published in the GitHub repository omrikais/cctally (5 stars, last pushed 3d ago), licensed Apache-2.0. It costs nothing until one of its globs matches a file; then it loads 3,554 tokens. 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.