sclaude
Opinionated Claude Code wrapper for long-running sessions. A Cartage OSS contribution.
What it does:
- Launches
claudewith--dangerously-skip-permissionsso you never see a permission prompt. - Appends a strict non-destructive guardrails system prompt so Claude self-imposes the safety checks the permission gate would have enforced.
- Runs a context-window sidecar. At ~70% context, it asks Haiku to write a
handoff doc and auto-swaps the session: kills the running
claude, respawns it fresh, and types/resume <doc>for you. No mid-flow compacting, no lost state. - Bundles a Claude Code status line showing context %, 5-hour and 7-day usage buckets, and a pace meter.
- Spawns git worktrees with
sclaude <name>— one command, branch + tree- wrapped claude.
Install
pipx install sclaude
Requires Claude Code installed and authed (claude login) — sclaude uses your
existing OAuth session, no API key needed.
Quick start
# launch claude in current cwd (no worktree)
sclaude run
# spawn a worktree at <repo>/.worktrees/my-feature and launch claude in it
sclaude my-feature
sclaude worktree my-feature # explicit form
# remove worktrees whose branches are merged / clean
sclaude prune # dry run
sclaude prune --apply # actually remove
Any argument that isn't a known subcommand is treated as a worktree name. So
sclaude AE-1234 ≡ sclaude worktree AE-1234.
Worktree paths
Default: <repo>/.worktrees/<name>. Override with --path:
sclaude my-feature --path ~/scratch/my-feature
Branch defaults to the worktree name and forks off the detected default branch
(origin/main → origin/master → main → master). Override with
--branch / --base.
Context threshold
Default fires at 70% of the 200k context window. Override:
sclaude --threshold 0.65
To disable the PTY auto-swap and fall back to a banner-only handoff:
sclaude --no-auto-handoff
Status line
On first launch, sclaude composes a settings JSON that points Claude Code's
statusLine at the bundled statusline.sh (cached at
~/.cache/sclaude/statusline.sh). Your existing ~/.claude/settings.json is
preserved — only the statusLine key is added.
The bar shows: context fill % • pace (7d burn-rate vs sustainable) • 5h and 7d usage buckets when either crosses 50%.
Guardrails
See src/sclaude/guardrails.md. Summary: no
force-push, no destructive git/SQL, no editing CI/secrets, always work in a
worktree, commit per chunk, confirm before irreversible ops.
Architecture
sclaude <name>
├── git worktree add <repo>/.worktrees/<name>
├── spawn watcher.py (subprocess, polls ~/.claude/projects/<cwd>/*.jsonl)
└── pexpect-driven PTY around `claude --dangerously-skip-permissions
--append-system-prompt <guardrails>
--settings <bundled-statusline.json>`
When the watcher detects context ≥ threshold, it calls
claude -p --model haiku to write a handoff doc under ~/.claude/handoffs/.
The PTY runner spots the new file, terminates the current claude, respawns
it, and pre-types /resume <doc> as the first user input.
Acknowledgements
Built at Cartage for our own non-technical AO users running multi-day Claude Code sessions. Released as a standalone OSS package in the hope it's useful to anyone else who hates compaction.
Metadata
Release files for sclaude 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sclaude-0.4.0.tar.gz | 18.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sclaude-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 40.5 kB
Release files / sclaude-0.4.0.tar.gz
| Download URL | sclaude-0.4.0.tar.gz |
|---|---|
| Size | 18.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d10d19d206d3fcf7171e5d90a8c2a29dde55cec5d8d138b4fb69a4da1ad811ec
|
|
BLAKE2b-256 checksum How to use checksums |
1bc8aa86f3e715b058a087e2d67b76c8c59df89ff0072cf5b02fe811bde9eed9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / sclaude-0.4.0-py3-none-any.whl
| Download URL | sclaude-0.4.0-py3-none-any.whl |
|---|---|
| Size | 22.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e98daa5374ab5cdd1b11624cead37eac739f4e4b6a2a2387ff886f16e2482488
|
|
BLAKE2b-256 checksum How to use checksums |
69e27103359085ac395898f6ee98529e7195de74b72339230e6c48b35ef72119
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|