cc-session-tools 3.8.0__tar.gz → 3.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cc_session_tools-3.9.0/PKG-INFO +325 -0
- cc_session_tools-3.9.0/README.md +268 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/pyproject.toml +1 -1
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/ccst.py +30 -20
- cc_session_tools-3.9.0/src/cc_session_tools/lib/claude_md_install.py +313 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/do-executor-critic-assessor-loop/SKILL.md +4 -3
- cc_session_tools-3.9.0/src/cc_session_tools.egg-info/PKG-INFO +325 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/session_tag.py +2 -4
- cc_session_tools-3.9.0/tests/test_claude_md_install.py +274 -0
- cc_session_tools-3.8.0/PKG-INFO +0 -1173
- cc_session_tools-3.8.0/README.md +0 -1116
- cc_session_tools-3.8.0/src/cc_session_tools/lib/claude_md_install.py +0 -170
- cc_session_tools-3.8.0/src/cc_session_tools.egg-info/PKG-INFO +0 -1173
- cc_session_tools-3.8.0/tests/test_claude_md_install.py +0 -81
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/LICENSE +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/setup.cfg +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/__init__.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/__init__.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/ccd.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/ccmsg.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/ccr.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/ccs.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/ccsched.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/migrate_ccmsg.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/migrate_ccsched.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/migrate_sessions_db.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/migrate_telemetry.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/config/hooks-bundle.json +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/config/session-tag-hook.json +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/hooks_install.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/__init__.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/bun_tools.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/claude_flags.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/context_overrides.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/db.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/debug.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/doctor.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/doctor_mutes.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/hook_registry.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/install_sync.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/levenshtein.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/machine_identity.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/__init__.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/addressing.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/cursor.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/lock.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/message.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/move_safety.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/repository.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/retention.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/service.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/store.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/occupancy.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/paths.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/__init__.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/backup.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/classify.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/cutover.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/dump.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/formatting.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/importers.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/init_paths.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/init_service.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/manifest.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/naming.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/readiness.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/rehydrate.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/rename_group.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/reorganize.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/repository.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/resolve.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/service.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/session_output.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/store.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/sync_check.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/sync_lock.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/sync_notify.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/vector_clock.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/vector_clock_store.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/verify.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/write_log.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/picker.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/proc_lock.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/prompts.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/roots.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/rules.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/__init__.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/bundled_jobs.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/cadence.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/cursor.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/digest.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/due.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/duration.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/jobspec.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/ledger.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/lock.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/notify.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/reconcile.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/registry.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/runner.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/state.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/store.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/surface.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/throttle.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/worker.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/session_gc.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/sessions.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/sessions_db.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/sessions_repair.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/shell_install.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/tasklist.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/telemetry_store.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/text_wrap.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/prompts/pdata-migration-claude-md-update.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/prompts/pdata-migration-skills-update.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/analyse-cc-usage/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/clean-hook-sessions/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/clean-hook-sessions/scripts/clean-hook-sessions.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/compact-smart/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/context-override/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/delete-sessions/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/delete-sessions/scripts/delete_sessions.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/extract-pptx/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/extract-pptx/scripts/extract_pptx.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/extract-to-text/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/extract-to-text/scripts/extract_to_text.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/find-claude-code-session/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/generate-8digit-code/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/generate-8digit-code/scripts/generate_8digit_code.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/list-empty-sessions/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/list-empty-sessions/scripts/list_empty_sessions.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/manage-recurring-cc-jobs-using-ccsched/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/move-session/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/move-session/hooks/sessionstart-pending-rename.sh +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/move-session/scripts/cc_session_rules.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/move-session/scripts/move_session.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-pdata-design-schema/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-pdata-do-audit-and-prepare-to-migrate/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-pdata-do-init/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-pdata-do-manual-migration/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-pdata-resolve-conflicts/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-project-layout-reference/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-update-central-files/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/CALIBRATION.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/analyze_context.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/duplicates.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/measure.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/report.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/tokens.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/usage.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/select-agent-model/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/send-session-message/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/update-command-cache/SKILL.md +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/update-command-cache/scripts/update_command_cache.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools.egg-info/SOURCES.txt +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools.egg-info/dependency_links.txt +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools.egg-info/entry_points.txt +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools.egg-info/requires.txt +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/cc_session_tools.egg-info/top_level.txt +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/__init__.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/attribution.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/cache.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/ccusage_wrapper.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/data/pricing.json +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/parent_inference.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/parser.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/pricing.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/query.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/report.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/schema.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/claude_code_usage/session_names.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/__init__.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/after_response.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/bash_hard_deny.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/bash_security_review.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/cache.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/catchup.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/confirm_8digit.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/context_window_warning.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/last_screenshot.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/marker_allow.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/markers.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/messaging_deliver.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/model_info.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/normalise.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/pdata_sync.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/pending_migration.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/pending_rename.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/script_allowlist.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/stats.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/telemetry.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/telemetry_query.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/telemetry_trim.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/transcript.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/src/hooks/worklog_guard.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_after_response.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_attribution.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_bash_hard_deny.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_bash_security_review.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_bash_security_review_allowlist.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_bun_tools.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_cache.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_cache_sqlite.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccr_orphans.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccs_emptiness.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccs_eta.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccs_list_mode.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccs_scope_flags.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccs_sentinel_sort.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccs_session_counts.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_bundle_discovery.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_ccsched_jobs_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_context_override_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_doctor.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_gc_prune.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_gc_report.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_hook_dispatcher.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_hooks_allowlist.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_hooks_install_prune.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_hooks_install_zero_arg.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_hooks_uninstall.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_install_everything.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_machine_identity_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_main_gate.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_init_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_readiness_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_reconcile_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_rename_group_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_reorganize_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_sync_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_verify_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_repair_sessions_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_sessions_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_shell_install.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_skills_install.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_skills_uninstall.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_telemetry_query.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccst_telemetry_trim.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_ccusage_wrapper.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_claude_flags.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_cli.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_cli_ccd.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_cli_ccd_dry_run.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_cli_ccr.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_cli_ccs.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_cli_version.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_confirm_8digit.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_context_overrides.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_context_window_warning.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_db.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_debug.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_doctor_mutes.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_empty_session.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_hook_cache.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_hooks_install.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_hooks_install_records.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_install_sync.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_last_screenshot.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_levenshtein.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_machine_identity.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_marker_allow.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_migrate_ccmsg.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_migrate_ccsched.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_migrate_sessions_db.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_migrate_telemetry.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_model_info.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_normalise.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_occupancy.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_parent_inference.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_parser.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_paths.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_pdata_audit_skill.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_pending_migration_hook.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_picker.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_pricing.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_proc_lock.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_prompts.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_query.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_report.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_roots.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_rules.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_scheduler_bundled_jobs.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_schema.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_script_allowlist.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_session_names.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_session_tag.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_sessions.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_sessions_db.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_sessions_repair.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_tasklist.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_telemetry.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_telemetry_store.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_text_wrap.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_transcript.py +0 -0
- {cc_session_tools-3.8.0 → cc_session_tools-3.9.0}/tests/test_worklog_guard.py +0 -0
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cc-session-tools
|
|
3
|
+
Version: 3.9.0
|
|
4
|
+
Summary: Claude Code session management CLI tools (ccd, ccr, ccs, claude-code-usage, ccst) and hook library (hooks package)
|
|
5
|
+
Author: raffishquartan
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 raffishquartan
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Project-URL: Homepage, https://github.com/raffishquartan/claude-code-session-tools
|
|
29
|
+
Project-URL: Repository, https://github.com/raffishquartan/claude-code-session-tools
|
|
30
|
+
Project-URL: Issues, https://github.com/raffishquartan/claude-code-session-tools/issues
|
|
31
|
+
Keywords: claude-code,cli,session-management,usage-analytics,hooks
|
|
32
|
+
Classifier: Development Status :: 4 - Beta
|
|
33
|
+
Classifier: Environment :: Console
|
|
34
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
35
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
36
|
+
Classifier: Operating System :: MacOS
|
|
37
|
+
Classifier: Programming Language :: Python :: 3
|
|
38
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
39
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
42
|
+
Classifier: Topic :: Software Development
|
|
43
|
+
Classifier: Topic :: Utilities
|
|
44
|
+
Requires-Python: >=3.11
|
|
45
|
+
Description-Content-Type: text/markdown
|
|
46
|
+
License-File: LICENSE
|
|
47
|
+
Requires-Dist: pandas>=2.2
|
|
48
|
+
Requires-Dist: pyarrow>=15.0
|
|
49
|
+
Requires-Dist: jsonschema>=4.21
|
|
50
|
+
Requires-Dist: platformdirs>=4.0
|
|
51
|
+
Requires-Dist: httpx>=0.27
|
|
52
|
+
Requires-Dist: pyyaml>=6.0
|
|
53
|
+
Requires-Dist: tiktoken-tools>=0.1.0
|
|
54
|
+
Provides-Extra: dev
|
|
55
|
+
Requires-Dist: pytest>=7; extra == "dev"
|
|
56
|
+
Dynamic: license-file
|
|
57
|
+
|
|
58
|
+
# cc-session-tools (CCST)
|
|
59
|
+
|
|
60
|
+
[](https://pypi.org/project/cc-session-tools/)
|
|
61
|
+
[](https://pypi.org/project/cc-session-tools/)
|
|
62
|
+
[](LICENSE)
|
|
63
|
+
|
|
64
|
+
**Infrastructure for running Claude Code as your default way of working, not just an
|
|
65
|
+
occasional tool.**
|
|
66
|
+
|
|
67
|
+
If you open Claude Code a few times a day across a handful of projects, you don't need
|
|
68
|
+
this. If you run a dozen named sessions a day across a dozen projects, expect to pick up
|
|
69
|
+
exactly where you left off three weeks ago, want two sessions to leave notes for each
|
|
70
|
+
other, and want scheduled housekeeping to just happen - CCST is the layer that makes that
|
|
71
|
+
sustainable. It replaces "which terminal tab was that in" and "let me grep my shell
|
|
72
|
+
history" with sessions you can name, find, resume, message, and schedule like real
|
|
73
|
+
infrastructure.
|
|
74
|
+
|
|
75
|
+
## What you get
|
|
76
|
+
|
|
77
|
+
- **Named, findable sessions** - `ccd` starts a session under a tag you choose, `ccr`
|
|
78
|
+
resumes it later by that tag, and `ccs` searches across all of them by name, contents,
|
|
79
|
+
or transcript text.
|
|
80
|
+
- **A per-session scratch space** - every session gets its own `working/` and `out/`
|
|
81
|
+
directories, so drafts and deliverables don't get lost when the conversation ends.
|
|
82
|
+
- **Cross-session messaging** - one session leaves a note for "whoever next works on
|
|
83
|
+
project X"; it's there waiting, even if that's a different session on a different day.
|
|
84
|
+
- **A local job scheduler** - recurring housekeeping and periodic routines run themselves,
|
|
85
|
+
reconciled the next time you open Claude Code.
|
|
86
|
+
- **A structured per-project data store** (`pdata`) - stop losing track of things in
|
|
87
|
+
drifting CSVs and markdown logs.
|
|
88
|
+
- **A safety layer** - a hard block on destructive commands, tiered LLM review for
|
|
89
|
+
everything else, and an 8-digit confirmation gate for anything genuinely high-stakes.
|
|
90
|
+
- **24 bundled skills** covering session hygiene, data-store workflows, usage analysis,
|
|
91
|
+
document extraction, and multi-agent orchestration patterns.
|
|
92
|
+
- **Token/cost analytics** over your own Claude Code transcripts, cross-checked against an
|
|
93
|
+
independent tool so the numbers are trustworthy.
|
|
94
|
+
|
|
95
|
+
## Install
|
|
96
|
+
|
|
97
|
+
```sh
|
|
98
|
+
uv tool install cc-session-tools # or: pip install cc-session-tools
|
|
99
|
+
ccst install-everything --apply # wires hooks, skills, shell functions, and
|
|
100
|
+
# standard scheduled jobs into ~/.claude
|
|
101
|
+
ccst doctor # confirms everything's wired up correctly
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Requires Python 3.11+. `install-everything` is idempotent - safe to re-run after every
|
|
105
|
+
upgrade, and it's also what happens automatically the first time you run any `ccst`
|
|
106
|
+
command from a newer version than the one currently installed.
|
|
107
|
+
|
|
108
|
+
## The daily workflow: `ccd`, `ccr`, `ccs`
|
|
109
|
+
|
|
110
|
+
Three commands cover almost everything you do day to day.
|
|
111
|
+
|
|
112
|
+
**`ccd <tag>`** starts a new session and scaffolds `cc-sessions/<date>-<tag>/` with empty
|
|
113
|
+
`working/` and `out/` subdirectories, ready to use:
|
|
114
|
+
|
|
115
|
+
```sh
|
|
116
|
+
ccd fix-login-bug
|
|
117
|
+
# -> starts Claude Code, session tagged 20260928-fix-login-bug (if today is 20260928)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**`ccr <fragment>`** resumes an existing session by fuzzy name match - you don't need the
|
|
121
|
+
exact tag or date, and if more than one session matches you get an interactive picker:
|
|
122
|
+
|
|
123
|
+
```sh
|
|
124
|
+
ccr login-bug
|
|
125
|
+
# -> resumes 20260928-fix-login-bug, right where you left it
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**`ccs` / `ccl`** (the same tool - `ccl` is the shell-function wrapper `ccst shell install`
|
|
129
|
+
sets up) searches and lists sessions by name, by file contents, or by full transcript text,
|
|
130
|
+
with date filters and multiple sort orders:
|
|
131
|
+
|
|
132
|
+
```sh
|
|
133
|
+
ccs --global # every session, across every project
|
|
134
|
+
ccs "rate limit" --contents --global # full-text search across working/ and out/
|
|
135
|
+
ccs --order-by active --limit 5 --global # your 5 most recently active sessions anywhere
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### `working/` and `out/`: draft, then finalize
|
|
139
|
+
|
|
140
|
+
The convention this repo's own sessions follow: intermediate versions accumulate in
|
|
141
|
+
`working/`; only the confirmed, final artefact gets copied into `out/` (sometimes in a
|
|
142
|
+
different format from the draft - a markdown draft finalized as a formatted document, for
|
|
143
|
+
example). Nothing on disk enforces this - but it's exactly what the `workflow` CLAUDE.md
|
|
144
|
+
section below teaches Claude to do, and tooling like `ccs --contents` and `pdata
|
|
145
|
+
reconcile-session-output` assume it once it's there.
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
cc-sessions/20260928-fix-login-bug/
|
|
149
|
+
├── working/ # draft-v1.md, draft-v2.md, scratch notes, intermediate data
|
|
150
|
+
└── out/ # final-report.md - the thing you actually wanted
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Where agents write their files
|
|
154
|
+
|
|
155
|
+
The same pattern extends to subagents: a dispatched agent gets its own folder at
|
|
156
|
+
`agents/<tag>--<task-slug>/` inside the session directory, with its exact prompt recorded
|
|
157
|
+
in `prompt.md` and its progress in `WORKLOG.md`, so a large or parallel task leaves an
|
|
158
|
+
audit trail instead of filling up the chat. Again, nothing forces this - it's what the
|
|
159
|
+
`agents` CLAUDE.md section teaches.
|
|
160
|
+
|
|
161
|
+
### Recurring routines get a fresh tag each time
|
|
162
|
+
|
|
163
|
+
A periodic task (a weekly review, a daily sync check) isn't one long-lived session - it's
|
|
164
|
+
a new dated session each time it recurs, sharing a task-type suffix so it's easy to find
|
|
165
|
+
the whole series later:
|
|
166
|
+
|
|
167
|
+
```sh
|
|
168
|
+
ccd myproject-weekly-review # -> 20260901-myproject-weekly-review
|
|
169
|
+
# ... a week later ...
|
|
170
|
+
ccd myproject-weekly-review # -> 20260908-myproject-weekly-review
|
|
171
|
+
ccs myproject-weekly-review --global # lists every occurrence
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Sessions talking to each other: `ccmsg`
|
|
175
|
+
|
|
176
|
+
Leave a message for a session that isn't open right now - most commonly, for "whoever
|
|
177
|
+
next works on this project," delivered automatically the next time a matching session
|
|
178
|
+
starts:
|
|
179
|
+
|
|
180
|
+
```sh
|
|
181
|
+
ccmsg send --to-project myproject \
|
|
182
|
+
--subject "heads up: shared config file renamed" \
|
|
183
|
+
--body "renamed config/settings.yaml -> config/app.yaml, update references"
|
|
184
|
+
|
|
185
|
+
# in a later, unrelated session opened in the same project:
|
|
186
|
+
ccmsg deliver # also runs automatically via a SessionStart hook
|
|
187
|
+
ccmsg read <id>
|
|
188
|
+
ccmsg claim <id> # first session to claim wins, for description-addressed messages
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Messages can also be addressed to a specific session (`--to-session`) or to a free-text
|
|
192
|
+
description for whichever session picks it up first (`--to-description`) - project-
|
|
193
|
+
addressed is by far the most common pattern in practice.
|
|
194
|
+
|
|
195
|
+
The easiest way to use sessions is just to tell your session to send a message to
|
|
196
|
+
another session (e.g. by name tag and/or location).
|
|
197
|
+
|
|
198
|
+
## Scheduled housekeeping: `ccsched`
|
|
199
|
+
|
|
200
|
+
Recurring jobs that don't need a real cron daemon - they're reconciled and caught up the
|
|
201
|
+
next time you open Claude Code, not run in the background while your laptop is asleep.
|
|
202
|
+
|
|
203
|
+
```sh
|
|
204
|
+
ccsched add --id nightly-lint --cadence 'daily@22:00' -- npm run lint
|
|
205
|
+
ccsched status
|
|
206
|
+
ccsched sweep # reconcile + run anything due + surface results; also runs at session start
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Cadences support `every:<duration>`, `daily@HH:MM`, `weekly:<day>@HH:MM`,
|
|
210
|
+
`monthly:<day>@HH:MM`, and `monthly:<weekday>#<n>@HH:MM`. Jobs auto-suspend after repeated
|
|
211
|
+
failures rather than silently failing forever. CCST itself ships nine bundled jobs (data
|
|
212
|
+
verification, doctor drift checks, telemetry trimming, and similar upkeep) installed via
|
|
213
|
+
`ccst ccsched-jobs install`.
|
|
214
|
+
|
|
215
|
+
## `ccst`: the administrative CLI
|
|
216
|
+
|
|
217
|
+
Everything else lives under one umbrella command, `ccst <noun> <verb>`:
|
|
218
|
+
|
|
219
|
+
| Noun | What it's for |
|
|
220
|
+
| --------------------- | --------------------------------------------------------------------------- |
|
|
221
|
+
| `hooks` | install/uninstall Claude Code hooks, manage the security-review allowlist |
|
|
222
|
+
| `skills` | install/uninstall the bundled skills into `~/.claude/skills/` |
|
|
223
|
+
| `doctor` | full health check across every subsystem; `--drift` for unmuted issues only |
|
|
224
|
+
| `pdata` | per-project structured data store - see below |
|
|
225
|
+
| `gc` | find and clean up orphaned rows/directories from deleted sessions |
|
|
226
|
+
| `telemetry` | inspect and trim the hook-invocation log |
|
|
227
|
+
| `sessions` / `repair` | maintain `sessions.db`; fix corrupted or ambiguous entries |
|
|
228
|
+
| `migrate` | one-shot migrations from legacy flat-file storage to SQLite |
|
|
229
|
+
| `claude-md` | install/uninstall CCST's managed sections in your global CLAUDE.md |
|
|
230
|
+
| `install-everything` | run every install step, then a full doctor check |
|
|
231
|
+
|
|
232
|
+
Run `ccst <noun> --help` for the full flag reference on any of these - the sections below
|
|
233
|
+
cover what each subsystem is _for_, not every flag.
|
|
234
|
+
|
|
235
|
+
### Safety: hooks that watch every command
|
|
236
|
+
|
|
237
|
+
Every `Bash` tool call passes through a hard deny list first (destructive deletes, force
|
|
238
|
+
pushes, branch deletion, `sudo`, and similar - no bypass, by design), then a tiered review
|
|
239
|
+
for everything else: a fast allowlist for routine commands, escalating to an LLM-backed
|
|
240
|
+
review only for anything unusual, with results cached so the common case stays fast.
|
|
241
|
+
Genuinely high-stakes actions (configurable per deployment, via the `confirm-gate` CLAUDE.md
|
|
242
|
+
section) require a fresh 8-digit code exchanged between Claude and you before they run.
|
|
243
|
+
|
|
244
|
+
```sh
|
|
245
|
+
ccst hooks install --apply # wire the hooks into settings.json
|
|
246
|
+
ccst hooks allowlist list # see what's pre-approved to skip LLM review
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Teaching Claude the conventions above: `claude-md`
|
|
250
|
+
|
|
251
|
+
The `working/`/`out/` and agent-folder conventions aren't magic - they're taught. `ccst
|
|
252
|
+
claude-md install` inserts small, sentinel-delimited sections into your global
|
|
253
|
+
`~/.claude/CLAUDE.md`, each independently installable:
|
|
254
|
+
|
|
255
|
+
```sh
|
|
256
|
+
ccst claude-md install --apply # install every section
|
|
257
|
+
ccst claude-md install --section workflow --apply # just the working/out convention
|
|
258
|
+
ccst claude-md uninstall --section agents --apply # remove one section
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Current sections: `messaging` (how to use `ccmsg` proactively), `workflow` (the
|
|
262
|
+
`working/`→`out/` convention above), `agents` (the agent-folder convention above), and
|
|
263
|
+
`confirm-gate` (how the 8-digit confirmation gate works, for anyone who's turned it on).
|
|
264
|
+
`install-everything` installs all of them; each is a plain, human-editable block you can
|
|
265
|
+
read, remove, or override in your own CLAUDE.md at any time.
|
|
266
|
+
|
|
267
|
+
### `pdata`: stop losing track of things in drifting flat files
|
|
268
|
+
|
|
269
|
+
Projects accumulate CSVs and markdown logs that drift out of sync and can't be queried.
|
|
270
|
+
`pdata` gives each project one SQLite database instead - while deliberately leaving prose
|
|
271
|
+
and free-form notes as ordinary files, not everything has to move in.
|
|
272
|
+
|
|
273
|
+
```sh
|
|
274
|
+
ccst pdata init --write # classify and migrate a project's data files
|
|
275
|
+
ccst pdata add mygroup --content '{"status": "open"}' --file-path notes/item-1.md
|
|
276
|
+
ccst pdata query mygroup --where 'status = "open"'
|
|
277
|
+
ccst pdata sync-check --all-projects # cross-machine sync, safe fast-forward only
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Records support optional typed extension tables (`ccst pdata schema add-field`) alongside
|
|
281
|
+
a generic content field, soft deletes, and optimistic-concurrency versioning. Multi-machine
|
|
282
|
+
sync uses a vector clock per project: a genuine fork between two machines' edits is
|
|
283
|
+
flagged for a manual choice, never silently merged.
|
|
284
|
+
|
|
285
|
+
### Usage and cost analytics
|
|
286
|
+
|
|
287
|
+
```sh
|
|
288
|
+
claude-code-usage query --group-by model,day --format markdown
|
|
289
|
+
claude-code-usage report --since 2026-09-01 --output report.md
|
|
290
|
+
claude-code-usage reconcile # cross-checks totals against an independent tool
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Groups by project, session, model, MCP server, plugin, tool, or time period; separates
|
|
294
|
+
subagent cost (already counted in the parent session) from hook-review cost (billed
|
|
295
|
+
separately) so totals aren't double-counted either way.
|
|
296
|
+
|
|
297
|
+
### Skills
|
|
298
|
+
|
|
299
|
+
24 bundled skills, symlinked into `~/.claude/skills/` by `ccst skills install`, covering:
|
|
300
|
+
|
|
301
|
+
- **Session hygiene** - find, clean up, or permanently delete old sessions
|
|
302
|
+
- **`pdata` workflows** - schema design, project audits, migration, conflict resolution
|
|
303
|
+
- **Multi-agent patterns** - model-tier selection, an executor/critic/assessor quality loop
|
|
304
|
+
- **Document extraction** - PowerPoint, Word, PDF, email, and other formats to clean text
|
|
305
|
+
- **Cross-session coordination** - natural-language front ends for `ccmsg` and `ccsched`
|
|
306
|
+
|
|
307
|
+
Browse `src/cc_session_tools/skills/` for the full list - each ships its own `SKILL.md`.
|
|
308
|
+
|
|
309
|
+
## How it fits together
|
|
310
|
+
|
|
311
|
+
CCST is deliberately not a server or a shared team tool - it's local infrastructure for
|
|
312
|
+
one person running Claude Code hard, on one or more of their own machines. Everything is
|
|
313
|
+
SQLite under `~/.local/share/claude/`, one file per subsystem, all inspectable with
|
|
314
|
+
`ccst telemetry query`, `ccst gc report`, or a plain `sqlite3` shell if you want to look
|
|
315
|
+
yourself. `ccst doctor` is the single command that checks all of it is healthy at once -
|
|
316
|
+
run it any time something feels off.
|
|
317
|
+
|
|
318
|
+
## Contributing
|
|
319
|
+
|
|
320
|
+
Development uses git worktrees and `uv`; see `.claude/CLAUDE.md` in this repo for the full
|
|
321
|
+
workflow, versioning policy, and release process.
|
|
322
|
+
|
|
323
|
+
## License
|
|
324
|
+
|
|
325
|
+
MIT
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
# cc-session-tools (CCST)
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/cc-session-tools/)
|
|
4
|
+
[](https://pypi.org/project/cc-session-tools/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
**Infrastructure for running Claude Code as your default way of working, not just an
|
|
8
|
+
occasional tool.**
|
|
9
|
+
|
|
10
|
+
If you open Claude Code a few times a day across a handful of projects, you don't need
|
|
11
|
+
this. If you run a dozen named sessions a day across a dozen projects, expect to pick up
|
|
12
|
+
exactly where you left off three weeks ago, want two sessions to leave notes for each
|
|
13
|
+
other, and want scheduled housekeeping to just happen - CCST is the layer that makes that
|
|
14
|
+
sustainable. It replaces "which terminal tab was that in" and "let me grep my shell
|
|
15
|
+
history" with sessions you can name, find, resume, message, and schedule like real
|
|
16
|
+
infrastructure.
|
|
17
|
+
|
|
18
|
+
## What you get
|
|
19
|
+
|
|
20
|
+
- **Named, findable sessions** - `ccd` starts a session under a tag you choose, `ccr`
|
|
21
|
+
resumes it later by that tag, and `ccs` searches across all of them by name, contents,
|
|
22
|
+
or transcript text.
|
|
23
|
+
- **A per-session scratch space** - every session gets its own `working/` and `out/`
|
|
24
|
+
directories, so drafts and deliverables don't get lost when the conversation ends.
|
|
25
|
+
- **Cross-session messaging** - one session leaves a note for "whoever next works on
|
|
26
|
+
project X"; it's there waiting, even if that's a different session on a different day.
|
|
27
|
+
- **A local job scheduler** - recurring housekeeping and periodic routines run themselves,
|
|
28
|
+
reconciled the next time you open Claude Code.
|
|
29
|
+
- **A structured per-project data store** (`pdata`) - stop losing track of things in
|
|
30
|
+
drifting CSVs and markdown logs.
|
|
31
|
+
- **A safety layer** - a hard block on destructive commands, tiered LLM review for
|
|
32
|
+
everything else, and an 8-digit confirmation gate for anything genuinely high-stakes.
|
|
33
|
+
- **24 bundled skills** covering session hygiene, data-store workflows, usage analysis,
|
|
34
|
+
document extraction, and multi-agent orchestration patterns.
|
|
35
|
+
- **Token/cost analytics** over your own Claude Code transcripts, cross-checked against an
|
|
36
|
+
independent tool so the numbers are trustworthy.
|
|
37
|
+
|
|
38
|
+
## Install
|
|
39
|
+
|
|
40
|
+
```sh
|
|
41
|
+
uv tool install cc-session-tools # or: pip install cc-session-tools
|
|
42
|
+
ccst install-everything --apply # wires hooks, skills, shell functions, and
|
|
43
|
+
# standard scheduled jobs into ~/.claude
|
|
44
|
+
ccst doctor # confirms everything's wired up correctly
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Requires Python 3.11+. `install-everything` is idempotent - safe to re-run after every
|
|
48
|
+
upgrade, and it's also what happens automatically the first time you run any `ccst`
|
|
49
|
+
command from a newer version than the one currently installed.
|
|
50
|
+
|
|
51
|
+
## The daily workflow: `ccd`, `ccr`, `ccs`
|
|
52
|
+
|
|
53
|
+
Three commands cover almost everything you do day to day.
|
|
54
|
+
|
|
55
|
+
**`ccd <tag>`** starts a new session and scaffolds `cc-sessions/<date>-<tag>/` with empty
|
|
56
|
+
`working/` and `out/` subdirectories, ready to use:
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
ccd fix-login-bug
|
|
60
|
+
# -> starts Claude Code, session tagged 20260928-fix-login-bug (if today is 20260928)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**`ccr <fragment>`** resumes an existing session by fuzzy name match - you don't need the
|
|
64
|
+
exact tag or date, and if more than one session matches you get an interactive picker:
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
ccr login-bug
|
|
68
|
+
# -> resumes 20260928-fix-login-bug, right where you left it
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**`ccs` / `ccl`** (the same tool - `ccl` is the shell-function wrapper `ccst shell install`
|
|
72
|
+
sets up) searches and lists sessions by name, by file contents, or by full transcript text,
|
|
73
|
+
with date filters and multiple sort orders:
|
|
74
|
+
|
|
75
|
+
```sh
|
|
76
|
+
ccs --global # every session, across every project
|
|
77
|
+
ccs "rate limit" --contents --global # full-text search across working/ and out/
|
|
78
|
+
ccs --order-by active --limit 5 --global # your 5 most recently active sessions anywhere
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### `working/` and `out/`: draft, then finalize
|
|
82
|
+
|
|
83
|
+
The convention this repo's own sessions follow: intermediate versions accumulate in
|
|
84
|
+
`working/`; only the confirmed, final artefact gets copied into `out/` (sometimes in a
|
|
85
|
+
different format from the draft - a markdown draft finalized as a formatted document, for
|
|
86
|
+
example). Nothing on disk enforces this - but it's exactly what the `workflow` CLAUDE.md
|
|
87
|
+
section below teaches Claude to do, and tooling like `ccs --contents` and `pdata
|
|
88
|
+
reconcile-session-output` assume it once it's there.
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
cc-sessions/20260928-fix-login-bug/
|
|
92
|
+
├── working/ # draft-v1.md, draft-v2.md, scratch notes, intermediate data
|
|
93
|
+
└── out/ # final-report.md - the thing you actually wanted
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Where agents write their files
|
|
97
|
+
|
|
98
|
+
The same pattern extends to subagents: a dispatched agent gets its own folder at
|
|
99
|
+
`agents/<tag>--<task-slug>/` inside the session directory, with its exact prompt recorded
|
|
100
|
+
in `prompt.md` and its progress in `WORKLOG.md`, so a large or parallel task leaves an
|
|
101
|
+
audit trail instead of filling up the chat. Again, nothing forces this - it's what the
|
|
102
|
+
`agents` CLAUDE.md section teaches.
|
|
103
|
+
|
|
104
|
+
### Recurring routines get a fresh tag each time
|
|
105
|
+
|
|
106
|
+
A periodic task (a weekly review, a daily sync check) isn't one long-lived session - it's
|
|
107
|
+
a new dated session each time it recurs, sharing a task-type suffix so it's easy to find
|
|
108
|
+
the whole series later:
|
|
109
|
+
|
|
110
|
+
```sh
|
|
111
|
+
ccd myproject-weekly-review # -> 20260901-myproject-weekly-review
|
|
112
|
+
# ... a week later ...
|
|
113
|
+
ccd myproject-weekly-review # -> 20260908-myproject-weekly-review
|
|
114
|
+
ccs myproject-weekly-review --global # lists every occurrence
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Sessions talking to each other: `ccmsg`
|
|
118
|
+
|
|
119
|
+
Leave a message for a session that isn't open right now - most commonly, for "whoever
|
|
120
|
+
next works on this project," delivered automatically the next time a matching session
|
|
121
|
+
starts:
|
|
122
|
+
|
|
123
|
+
```sh
|
|
124
|
+
ccmsg send --to-project myproject \
|
|
125
|
+
--subject "heads up: shared config file renamed" \
|
|
126
|
+
--body "renamed config/settings.yaml -> config/app.yaml, update references"
|
|
127
|
+
|
|
128
|
+
# in a later, unrelated session opened in the same project:
|
|
129
|
+
ccmsg deliver # also runs automatically via a SessionStart hook
|
|
130
|
+
ccmsg read <id>
|
|
131
|
+
ccmsg claim <id> # first session to claim wins, for description-addressed messages
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Messages can also be addressed to a specific session (`--to-session`) or to a free-text
|
|
135
|
+
description for whichever session picks it up first (`--to-description`) - project-
|
|
136
|
+
addressed is by far the most common pattern in practice.
|
|
137
|
+
|
|
138
|
+
The easiest way to use sessions is just to tell your session to send a message to
|
|
139
|
+
another session (e.g. by name tag and/or location).
|
|
140
|
+
|
|
141
|
+
## Scheduled housekeeping: `ccsched`
|
|
142
|
+
|
|
143
|
+
Recurring jobs that don't need a real cron daemon - they're reconciled and caught up the
|
|
144
|
+
next time you open Claude Code, not run in the background while your laptop is asleep.
|
|
145
|
+
|
|
146
|
+
```sh
|
|
147
|
+
ccsched add --id nightly-lint --cadence 'daily@22:00' -- npm run lint
|
|
148
|
+
ccsched status
|
|
149
|
+
ccsched sweep # reconcile + run anything due + surface results; also runs at session start
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Cadences support `every:<duration>`, `daily@HH:MM`, `weekly:<day>@HH:MM`,
|
|
153
|
+
`monthly:<day>@HH:MM`, and `monthly:<weekday>#<n>@HH:MM`. Jobs auto-suspend after repeated
|
|
154
|
+
failures rather than silently failing forever. CCST itself ships nine bundled jobs (data
|
|
155
|
+
verification, doctor drift checks, telemetry trimming, and similar upkeep) installed via
|
|
156
|
+
`ccst ccsched-jobs install`.
|
|
157
|
+
|
|
158
|
+
## `ccst`: the administrative CLI
|
|
159
|
+
|
|
160
|
+
Everything else lives under one umbrella command, `ccst <noun> <verb>`:
|
|
161
|
+
|
|
162
|
+
| Noun | What it's for |
|
|
163
|
+
| --------------------- | --------------------------------------------------------------------------- |
|
|
164
|
+
| `hooks` | install/uninstall Claude Code hooks, manage the security-review allowlist |
|
|
165
|
+
| `skills` | install/uninstall the bundled skills into `~/.claude/skills/` |
|
|
166
|
+
| `doctor` | full health check across every subsystem; `--drift` for unmuted issues only |
|
|
167
|
+
| `pdata` | per-project structured data store - see below |
|
|
168
|
+
| `gc` | find and clean up orphaned rows/directories from deleted sessions |
|
|
169
|
+
| `telemetry` | inspect and trim the hook-invocation log |
|
|
170
|
+
| `sessions` / `repair` | maintain `sessions.db`; fix corrupted or ambiguous entries |
|
|
171
|
+
| `migrate` | one-shot migrations from legacy flat-file storage to SQLite |
|
|
172
|
+
| `claude-md` | install/uninstall CCST's managed sections in your global CLAUDE.md |
|
|
173
|
+
| `install-everything` | run every install step, then a full doctor check |
|
|
174
|
+
|
|
175
|
+
Run `ccst <noun> --help` for the full flag reference on any of these - the sections below
|
|
176
|
+
cover what each subsystem is _for_, not every flag.
|
|
177
|
+
|
|
178
|
+
### Safety: hooks that watch every command
|
|
179
|
+
|
|
180
|
+
Every `Bash` tool call passes through a hard deny list first (destructive deletes, force
|
|
181
|
+
pushes, branch deletion, `sudo`, and similar - no bypass, by design), then a tiered review
|
|
182
|
+
for everything else: a fast allowlist for routine commands, escalating to an LLM-backed
|
|
183
|
+
review only for anything unusual, with results cached so the common case stays fast.
|
|
184
|
+
Genuinely high-stakes actions (configurable per deployment, via the `confirm-gate` CLAUDE.md
|
|
185
|
+
section) require a fresh 8-digit code exchanged between Claude and you before they run.
|
|
186
|
+
|
|
187
|
+
```sh
|
|
188
|
+
ccst hooks install --apply # wire the hooks into settings.json
|
|
189
|
+
ccst hooks allowlist list # see what's pre-approved to skip LLM review
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Teaching Claude the conventions above: `claude-md`
|
|
193
|
+
|
|
194
|
+
The `working/`/`out/` and agent-folder conventions aren't magic - they're taught. `ccst
|
|
195
|
+
claude-md install` inserts small, sentinel-delimited sections into your global
|
|
196
|
+
`~/.claude/CLAUDE.md`, each independently installable:
|
|
197
|
+
|
|
198
|
+
```sh
|
|
199
|
+
ccst claude-md install --apply # install every section
|
|
200
|
+
ccst claude-md install --section workflow --apply # just the working/out convention
|
|
201
|
+
ccst claude-md uninstall --section agents --apply # remove one section
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Current sections: `messaging` (how to use `ccmsg` proactively), `workflow` (the
|
|
205
|
+
`working/`→`out/` convention above), `agents` (the agent-folder convention above), and
|
|
206
|
+
`confirm-gate` (how the 8-digit confirmation gate works, for anyone who's turned it on).
|
|
207
|
+
`install-everything` installs all of them; each is a plain, human-editable block you can
|
|
208
|
+
read, remove, or override in your own CLAUDE.md at any time.
|
|
209
|
+
|
|
210
|
+
### `pdata`: stop losing track of things in drifting flat files
|
|
211
|
+
|
|
212
|
+
Projects accumulate CSVs and markdown logs that drift out of sync and can't be queried.
|
|
213
|
+
`pdata` gives each project one SQLite database instead - while deliberately leaving prose
|
|
214
|
+
and free-form notes as ordinary files, not everything has to move in.
|
|
215
|
+
|
|
216
|
+
```sh
|
|
217
|
+
ccst pdata init --write # classify and migrate a project's data files
|
|
218
|
+
ccst pdata add mygroup --content '{"status": "open"}' --file-path notes/item-1.md
|
|
219
|
+
ccst pdata query mygroup --where 'status = "open"'
|
|
220
|
+
ccst pdata sync-check --all-projects # cross-machine sync, safe fast-forward only
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Records support optional typed extension tables (`ccst pdata schema add-field`) alongside
|
|
224
|
+
a generic content field, soft deletes, and optimistic-concurrency versioning. Multi-machine
|
|
225
|
+
sync uses a vector clock per project: a genuine fork between two machines' edits is
|
|
226
|
+
flagged for a manual choice, never silently merged.
|
|
227
|
+
|
|
228
|
+
### Usage and cost analytics
|
|
229
|
+
|
|
230
|
+
```sh
|
|
231
|
+
claude-code-usage query --group-by model,day --format markdown
|
|
232
|
+
claude-code-usage report --since 2026-09-01 --output report.md
|
|
233
|
+
claude-code-usage reconcile # cross-checks totals against an independent tool
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Groups by project, session, model, MCP server, plugin, tool, or time period; separates
|
|
237
|
+
subagent cost (already counted in the parent session) from hook-review cost (billed
|
|
238
|
+
separately) so totals aren't double-counted either way.
|
|
239
|
+
|
|
240
|
+
### Skills
|
|
241
|
+
|
|
242
|
+
24 bundled skills, symlinked into `~/.claude/skills/` by `ccst skills install`, covering:
|
|
243
|
+
|
|
244
|
+
- **Session hygiene** - find, clean up, or permanently delete old sessions
|
|
245
|
+
- **`pdata` workflows** - schema design, project audits, migration, conflict resolution
|
|
246
|
+
- **Multi-agent patterns** - model-tier selection, an executor/critic/assessor quality loop
|
|
247
|
+
- **Document extraction** - PowerPoint, Word, PDF, email, and other formats to clean text
|
|
248
|
+
- **Cross-session coordination** - natural-language front ends for `ccmsg` and `ccsched`
|
|
249
|
+
|
|
250
|
+
Browse `src/cc_session_tools/skills/` for the full list - each ships its own `SKILL.md`.
|
|
251
|
+
|
|
252
|
+
## How it fits together
|
|
253
|
+
|
|
254
|
+
CCST is deliberately not a server or a shared team tool - it's local infrastructure for
|
|
255
|
+
one person running Claude Code hard, on one or more of their own machines. Everything is
|
|
256
|
+
SQLite under `~/.local/share/claude/`, one file per subsystem, all inspectable with
|
|
257
|
+
`ccst telemetry query`, `ccst gc report`, or a plain `sqlite3` shell if you want to look
|
|
258
|
+
yourself. `ccst doctor` is the single command that checks all of it is healthy at once -
|
|
259
|
+
run it any time something feels off.
|
|
260
|
+
|
|
261
|
+
## Contributing
|
|
262
|
+
|
|
263
|
+
Development uses git worktrees and `uv`; see `.claude/CLAUDE.md` in this repo for the full
|
|
264
|
+
workflow, versioning policy, and release process.
|
|
265
|
+
|
|
266
|
+
## License
|
|
267
|
+
|
|
268
|
+
MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "cc-session-tools"
|
|
7
|
-
version = "3.
|
|
7
|
+
version = "3.9.0"
|
|
8
8
|
description = "Claude Code session management CLI tools (ccd, ccr, ccs, claude-code-usage, ccst) and hook library (hooks package)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { file = "LICENSE" }
|