Claude Smart Compact
Two Claude Code CLI hooks that preserve task state, in-progress todos, and user preferences across auto-compaction, without bloating the context window.
How it works
- PreCompact runs when the CLI is about to auto-compact. It reads the
session transcript, extracts the last user message + in-flight turns + the
latest
TodoWritesnapshot, and writes a Markdown memory file to<project>/.claude/compact-memory/<session_id>.md. - UserPromptSubmit runs on every user prompt after the first compaction. It injects a short pointer telling the agent the memory file is available and may be read on demand.
- Preferences are agent-authored — the hook preserves a
## Preferencessection on every run, but does not populate it automatically. Append with the Edit tool when the user states a lasting preference.
Install
From PyPI:
pip install claude-smart-compact
cd /path/to/your/project
claude-smart-compact install
The installer automatically creates or updates .claude/settings.json with the required hook entries,
preserving any existing configuration. To skip this and manage settings.json manually, pass --no-settings.
Upgrading
claude-smart-compact install creates symbolic links into the installed
package by default. After upgrading the package, your hooks in every
project are automatically up-to-date — no need to re-run install per
project:
pipx upgrade claude-smart-compact # or: pip install -U claude-smart-compact
If you prefer to copy files (e.g., for portability across machines without
the package installed), use --copy:
claude-smart-compact install --copy # needs --force to redeploy after upgrades
Windows falls back to --copy automatically (symlinks require admin rights).
Manual (without pip)
If you prefer not to pip install, copy claude_smart_compact/ into
your project's .claude/hooks/ directly. The deployed layout is:
<project>/.claude/hooks/
├── pre_compact.py
├── user_prompt.py
└── lib/
├── core.py
├── memory.py
└── transcript.py
Verify
Run the manual trace script:
python3 tests/trace_run.py tests/fixtures/transcript_with_todos.jsonl
Run tests
pip install -e ".[dev]"
pytest --cov=hooks
Debug
Every hook run appends to <project>/.claude/compact-memory/<session_id>.trace.jsonl.
tail -f this file to watch the hooks work in real time.
Metadata
Release files for claude-smart-compact 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| claude_smart_compact-0.1.8.tar.gz | 22.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| claude_smart_compact-0.1.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.0 kB
Release files / claude_smart_compact-0.1.8.tar.gz
| Download URL | claude_smart_compact-0.1.8.tar.gz |
|---|---|
| Size | 22.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cda123501d80832f4d84baea8446971df0fcc4af73a9b82347b6859ad6ab57f4
|
|
BLAKE2b-256 checksum How to use checksums |
5a5f5b6b01ec7306be259170b4d789944da8d1f72e745bb1014015f933563844
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|
Release files / claude_smart_compact-0.1.8-py3-none-any.whl
| Download URL | claude_smart_compact-0.1.8-py3-none-any.whl |
|---|---|
| Size | 14.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
261a611c0a4a3c2322e6afede40b2d4dd9881900e7cc3defec34b58c38a3465b
|
|
BLAKE2b-256 checksum How to use checksums |
7f77c201d8ea52854fa33d15a7a92fbe01dc28f7eb1e67bf7c014e272885111d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|