Skip to main content

overclaude

PyPI version License: MIT Platform: macOS

Claude Code, overclocked. Hot-swap between Claude accounts without leaving your session, hand off to a fresh session before context fills up, and watch every usage meter live:

Fable 5 (high) | myproject (master*) | 3 sessions | 👤 work [1/2] ↻ Thu Oct 9 23:59 (1d 6h)
└ model+effort   └ folder+branch*      └ live count └ account     └ when its weekly limit resets

ctx [████░░░░░░] 42% | 5h [███████░░░] 71% | week [██░░░░░░░░] 18% | Fable [███████░░░] 73%
└ context window       └ 5-hour limit         └ weekly limit           └ model-scoped bucket

↳ personal [2] 5h 10% · week 85% · Fable 100% ↻ Thu Oct 9 17:59 (1d 1h)
└ every OTHER account: its limits + weekly reset, so you know where to swap next

bars and percentages turn yellow at 50% · red at 80%

What's new in 1.1

  • Weekly reset on the statusline — ↻ Thu Oct 9 23:59 (1d 6h) next to the account, in local time.
  • See every account's limits — one compact line per other account (5h / week / Fable + reset), with ⚠ relogin when a token has died.
  • Artifacts survive a handoff — claude.ai artifacts the session made are snapshotted (sources + URLs + owner) before an account switch and handed to the next session, which keeps editing them or re-homes them on the new account.
  • Handoff packages before it switches — so nothing that needs the old account (artifacts, artifact data) is lost to the credential flip.

Install

pipx install overclaude && overclaude install

Fresh machine? If you get command not found: overclaude, pipx's bin folder isn't on your PATH yet — run pipx ensurepath && source ~/.zshrc, then overclaude install. (Use source, not exec zsh: replacing the shell swallows any commands you pasted after it.)

Then register your accounts (once):

cswap add             # registers the account you're logged in as
cswap alias 1 work    # name your slots
cswap alias 2 personal
exec zsh              # reload shell

Start a new Claude Code session (hooks load at session start) and check the statusline shows 👤 work [1/2]. Adding a second account is guided — run /swap add inside Claude Code.

Other install methods, requirements, upgrading
# uv
uv tool install overclaude && overclaude install

# from source
git clone https://github.com/arthur-bump-pm/overclaude && cd overclaude && ./install.sh

# track unreleased main
pipx install git+https://github.com/arthur-bump-pm/overclaude.git

Or paste this into any Claude Code session and let it install itself:

Install overclaude (https://github.com/arthur-bump-pm/overclaude) on this machine, fix anything its preflight complains about, and tell me what post-install steps I need to do myself.

Requirements: macOS, zsh, jq, pipx or uv, Max-style Claude subscription accounts. The credential engine (cswap) ships inside the package and installs automatically.

Upgrade: pipx upgrade overclaude && overclaude install

Uninstall: overclaude uninstall — removes exactly what install added (backed up, settings merged out); account state in ~/.claude-swap-backup/ survives.

The installer is idempotent and conservative: timestamped backups of everything it touches, jq-merge into your existing settings.json (other hooks survive), never overwrites an existing statusLine, re-running is a no-op.

What you get

/swap — hot account switching

Every live Claude Code session on the machine adopts the new account's credential within ~30 s — mid-conversation, no restart, context preserved. Hit a rate limit? /swap work and keep typing. A preflight blocks the swap while another session is mid-task (force overrides).

/handoff — escape context bloat, keep the thread

flowchart LR
    A[Context fills up] --> B[Hook offers handoff at 60/75/85%]
    B --> C[You accept]
    C --> D[Claude packages goals, state, next steps, artifacts]
    D --> E[Session exits, shell wrapper relaunches]
    E --> F[SessionStart hook auto-injects the package]
    F --> G[Fresh session, ctx near zero]
    G --> A

You lose the token bloat, not the thread. Works same-account (/handoff) or combined with a switch (/swap work handoff).

Artifacts travel too. Before switching accounts, handoff runs swap-guard artifacts: it reads the session transcript (subagents and workflows included), finds every claude.ai artifact the session published or touched, copies each source out of the session's temporary scratchpad into ~/.claude-swap-backup/handoff-artifacts/<session>/, and lists them in the package with their URLs and owner account. Artifacts belong server-side to the account that published them, so the next session updates them in place on the same account, and on a different account republishes from the saved source as a new artifact (or updates in place if you shared the original with edit access). Artifact database rows can be exported before the switch on request.

Statusline

The display at the top. Line 1 ends with the active account and when its weekly limit resets (local time + countdown). Line 2 is the live meters. Below that, each other account gets a compact line with its 5h / week / Fable usage and weekly reset, so you can see where to swap before you hit a wall — ⚠ relogin flags a dead token, a dim (2h old) flags stale numbers, and SWAP_HIDE_OTHERS=1 hides these lines.

Usage numbers come from cswap's per-account cache, kept ≤ ~5 min fresh by a debounced background refresh (the render itself never waits on the network). It is also the kit's data spine: it publishes each session's context % to a relay the threshold hooks read. Skip the kit's statusline and handoff offers never fire.

ULTRACODE.md — model routing for multi-agent workflows

A policy loaded into every session: bulk work rides cheap models, verification rides opus, only final judgment spends the top tier. Routing table, hard floors, escalation rules included.

Cheat sheet

Command Effect
/swap Dashboard: accounts, usage, token health, live sessions
/swap <target> Hot-swap all sessions to <target> (alias, slot, or email)
/swap <target> force Same, bypassing the busy-session guard
/swap <target> handoff Package this session (+ its artifacts), switch account, resume fresh
/swap <target> restart Switch + restart this session in place (auth edge cases)
/swap add Guided registration of a new account
/handoff Package this session and continue fresh, same account
/handoff status Context %, thresholds fired, pending package state
/handoff cancel Cancel a pending handoff
swap-guard artifacts (shell) Snapshot this session's claude.ai artifacts (sources + manifest)
swap <alias> (shell) Panic-switch from any terminal, even with sessions hung

Or skip memorizing and paste a prompt:

Paste into Claude Code Runs
"Swap me to my work account" /swap work
"Context is getting full — hand off to a fresh session" /handoff
"Swap to personal and hand off in one shot" /swap personal handoff
"What's my context and account usage right now?" /handoff status + /swap dashboard
"Install overclaude on this machine" the whole install flow (works before the kit exists)
"Upgrade overclaude and refresh the hooks" pipx upgrade overclaude && overclaude install

How it fits together

flowchart TD
    SL[Statusline publishes ctx relay] --> HK[ctx-watch and ctx-notify hooks]
    HK --> SK[swap and handoff skills]
    SK --> GD[swap-guard busy preflight]
    GD --> CS[cswap vendored engine]
    CS --> KC[macOS keychain credential]
    KC --> AS[All live sessions adopt within 30s]

The heavy lifting — credential storage, keychain switching, OAuth refresh, usage polling — is claude-swap by Onur Cetinkol (MIT), vendored unmodified in vendor/claude-swap/ and installed automatically. Go star it.

Caveats worth knowing
  • A swap flips all live Claude Code sessions on the machine — it's the shared keychain credential, not per-terminal.
  • Hooks load at session start; sessions already open at install time won't offer handoffs until restarted (hot-swap works everywhere immediately).
  • Usage meters read cswap's cache for the active account (correct the moment a swap lands) and are refreshed in the background every ~5 min while any statusline renders; past 10 min a dim (usage Nm old) marker appears. The ctx meter is real-time.
  • An inactive account whose reset time has passed is shown at 0% — nothing on this machine has used it since. Usage from elsewhere (claude.ai web, another machine) appears on the next refresh.
  • claude.ai artifacts are owned by the account that published them. After a cross-account handoff the old URLs stay viewable from the owner account but aren't editable from the new one — the next session re-homes them from the saved source (new URL), unless you share the original with edit access.
  • Legacy clients that don't report status (older VS Code extension builds) are judged busy/idle by transcript mtime during swap preflight.
  • claude.ai connectors (Gmail/Drive/…) are per-account server-side and don't follow a swap.
  • Context thresholds re-arm 10 points below a fired threshold; Claude Code's auto-compact stays as the backstop.
Components (file → destination)
File Installs to Role
bin/swap-guard ~/.local/bin/ State/guard engine: whoami, live-session table, busy preflight, per-directory handoff state, artifact snapshots
skills/swap/SKILL.md ~/.claude/skills/swap/ The /swap skill
skills/handoff/SKILL.md ~/.claude/skills/handoff/ The /handoff skill
hooks/handoff-inject.sh ~/.claude/hooks/ SessionStart: auto-loads a pending handoff package (10-min TTL, per-directory)
hooks/ctx-watch.sh ~/.claude/hooks/ UserPromptSubmit: fires the 60/75/85% offers with re-arm hysteresis
hooks/ctx-notify.sh ~/.claude/hooks/ Stop: threshold banners
statusline/statusline-command.sh ~/.claude/statusline-command.sh Renders the statusline; publishes the ctx relay
claude/ULTRACODE.md ~/.claude/ + CLAUDE.md import Model/effort routing policy
settings/settings-fragment.json merged into ~/.claude/settings.json 3 hook groups, statusLine, 2 permission allows
shell/zshrc-snippet.sh ~/.zshrc (markers) claude() relaunch wrapper, swap alias, PATH guard
vendor/claude-swap/ pipx/uv-installed if absent The bundled credential engine
Maintainer workflow
./sync.sh            # live setup -> repo: scrub-gated diff, commit, push
./sync.sh --release  # + version bump + GitHub release -> PyPI (trusted publishing)
./sync.sh --dry-run  # preview either

A plain git push updates git installs only — PyPI users get changes only via releases. The scrub gate aborts any commit whose diff contains usernames, emails, or /Users/… paths. See CLAUDE.md for the full protocol.

License

MIT — see LICENSE. Vendored claude-swap retains its own MIT license and copyright (Onur Cetinkol).

Metadata

Release files for overclaude 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for overclaude 1.1.0
File Size Uploaded Provenance Actions
overclaude-1.1.0.tar.gz 440.6 kB With provenance Details for overclaude-1.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for overclaude 1.1.0
File Interpreter ABI Platform Actions
overclaude-1.1.0-py3-none-any.whl Python 3 none any Details for overclaude-1.1.0-py3-none-any.whl

Total release size: 937.0 kB

Release files / overclaude-1.1.0.tar.gz

Download URL overclaude-1.1.0.tar.gz
Size 440.6 kB
Tags Source
SHA-256 checksum
How to use checksums
f5d46536686379987b3701d2ecdb1ac492fe4a2298a9281999ae3a4e7c4ced35
BLAKE2b-256 checksum
How to use checksums
c454b448255ce0a7f8d4fd4f5111e8270900d63dcec3e3692e5c2a447d6e6229
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / overclaude-1.1.0-py3-none-any.whl

Download URL overclaude-1.1.0-py3-none-any.whl
Size 496.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b1bd284fbed9981dd93b1f6dd83e50252074ae33128095d0ea3f734e4383f821
BLAKE2b-256 checksum
How to use checksums
c31df38efea76b0d799da646b8df4c75c5eb4100af925ff2f004f6df8e13fc65
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Security for overclaude 1.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for overclaude-1.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page