cc-session-tools 3.16.0__tar.gz → 3.16.2__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.
Files changed (311) hide show
  1. cc_session_tools-3.16.2/PKG-INFO +617 -0
  2. cc_session_tools-3.16.2/README.md +558 -0
  3. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/pyproject.toml +1 -1
  4. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/compact-smart/SKILL.md +24 -6
  5. cc_session_tools-3.16.2/src/cc_session_tools.egg-info/PKG-INFO +617 -0
  6. cc_session_tools-3.16.0/PKG-INFO +0 -346
  7. cc_session_tools-3.16.0/README.md +0 -287
  8. cc_session_tools-3.16.0/src/cc_session_tools.egg-info/PKG-INFO +0 -346
  9. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/LICENSE +0 -0
  10. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/setup.cfg +0 -0
  11. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/__init__.py +0 -0
  12. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/cli/__init__.py +0 -0
  13. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/cli/ccd.py +0 -0
  14. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/cli/ccmsg.py +0 -0
  15. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/cli/ccr.py +0 -0
  16. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/cli/ccs.py +0 -0
  17. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/cli/ccsched.py +0 -0
  18. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/cli/ccst.py +0 -0
  19. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/cli/migrate_ccmsg.py +0 -0
  20. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/cli/migrate_ccsched.py +0 -0
  21. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/cli/migrate_sessions_db.py +0 -0
  22. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/cli/migrate_telemetry.py +0 -0
  23. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/config/api-keys.example +0 -0
  24. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/config/hooks-bundle.json +0 -0
  25. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/config/session-tag-hook.json +0 -0
  26. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/hooks_install.py +0 -0
  27. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/__init__.py +0 -0
  28. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/api_keys.py +0 -0
  29. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/bun_tools.py +0 -0
  30. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/claude_flags.py +0 -0
  31. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/claude_md_install.py +0 -0
  32. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/claude_md_store.py +0 -0
  33. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/context_overrides.py +0 -0
  34. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/db.py +0 -0
  35. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/debug.py +0 -0
  36. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/doctor.py +0 -0
  37. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/doctor_mutes.py +0 -0
  38. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/hook_registry.py +0 -0
  39. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/install_sync.py +0 -0
  40. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/levenshtein.py +0 -0
  41. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/machine_identity.py +0 -0
  42. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/messaging/__init__.py +0 -0
  43. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/messaging/addressing.py +0 -0
  44. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/messaging/cursor.py +0 -0
  45. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/messaging/lock.py +0 -0
  46. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/messaging/message.py +0 -0
  47. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/messaging/move_safety.py +0 -0
  48. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/messaging/repository.py +0 -0
  49. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/messaging/retention.py +0 -0
  50. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/messaging/service.py +0 -0
  51. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/messaging/session_ref.py +0 -0
  52. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/messaging/store.py +0 -0
  53. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/occupancy.py +0 -0
  54. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/paths.py +0 -0
  55. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/__init__.py +0 -0
  56. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/backup.py +0 -0
  57. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/classify.py +0 -0
  58. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/cutover.py +0 -0
  59. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/dump.py +0 -0
  60. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/formatting.py +0 -0
  61. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/importers.py +0 -0
  62. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/init_paths.py +0 -0
  63. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/init_service.py +0 -0
  64. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/manifest.py +0 -0
  65. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/naming.py +0 -0
  66. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/project_claude_md.py +0 -0
  67. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/readiness.py +0 -0
  68. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/rehydrate.py +0 -0
  69. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/rename_group.py +0 -0
  70. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/reorganize.py +0 -0
  71. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/repository.py +0 -0
  72. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/resolve.py +0 -0
  73. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/service.py +0 -0
  74. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/session_output.py +0 -0
  75. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/store.py +0 -0
  76. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/sync_check.py +0 -0
  77. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/sync_lock.py +0 -0
  78. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/sync_notify.py +0 -0
  79. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/vector_clock.py +0 -0
  80. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/vector_clock_store.py +0 -0
  81. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/verify.py +0 -0
  82. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/pdata/write_log.py +0 -0
  83. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/picker.py +0 -0
  84. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/proc_lock.py +0 -0
  85. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/prompts.py +0 -0
  86. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/roots.py +0 -0
  87. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/rules.py +0 -0
  88. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/__init__.py +0 -0
  89. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/bundled_jobs.py +0 -0
  90. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/cadence.py +0 -0
  91. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/cursor.py +0 -0
  92. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/digest.py +0 -0
  93. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/due.py +0 -0
  94. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/duration.py +0 -0
  95. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/jobspec.py +0 -0
  96. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/ledger.py +0 -0
  97. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/lock.py +0 -0
  98. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/notify.py +0 -0
  99. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/reconcile.py +0 -0
  100. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/registry.py +0 -0
  101. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/runner.py +0 -0
  102. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/state.py +0 -0
  103. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/store.py +0 -0
  104. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/surface.py +0 -0
  105. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/throttle.py +0 -0
  106. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/scheduler/worker.py +0 -0
  107. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/session_gc.py +0 -0
  108. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/sessions.py +0 -0
  109. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/sessions_db.py +0 -0
  110. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/sessions_repair.py +0 -0
  111. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/shell_install.py +0 -0
  112. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/tasklist.py +0 -0
  113. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/telemetry_store.py +0 -0
  114. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/text_wrap.py +0 -0
  115. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/lib/timefmt.py +0 -0
  116. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/analyse-cc-usage/SKILL.md +0 -0
  117. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/clean-hook-sessions/SKILL.md +0 -0
  118. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/clean-hook-sessions/scripts/clean-hook-sessions.py +0 -0
  119. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/context-override/SKILL.md +0 -0
  120. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/delete-sessions/SKILL.md +0 -0
  121. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/delete-sessions/scripts/delete_sessions.py +0 -0
  122. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/do-executor-critic-assessor-loop/SKILL.md +0 -0
  123. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/extract-pptx/SKILL.md +0 -0
  124. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/extract-pptx/scripts/extract_pptx.py +0 -0
  125. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/extract-to-text/SKILL.md +0 -0
  126. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/extract-to-text/scripts/extract_to_text.py +0 -0
  127. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/find-claude-code-session/SKILL.md +0 -0
  128. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/generate-8digit-code/SKILL.md +0 -0
  129. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/generate-8digit-code/scripts/generate_8digit_code.py +0 -0
  130. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/list-empty-sessions/SKILL.md +0 -0
  131. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/list-empty-sessions/scripts/list_empty_sessions.py +0 -0
  132. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/manage-recurring-cc-jobs-using-ccsched/SKILL.md +0 -0
  133. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/move-session/SKILL.md +0 -0
  134. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/move-session/hooks/sessionstart-pending-rename.sh +0 -0
  135. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/move-session/scripts/cc_session_rules.py +0 -0
  136. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/move-session/scripts/move_session.py +0 -0
  137. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/pm-pdata-design-schema/SKILL.md +0 -0
  138. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/pm-pdata-do-audit-and-prepare-to-migrate/SKILL.md +0 -0
  139. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/pm-pdata-do-init/SKILL.md +0 -0
  140. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/pm-pdata-do-manual-migration/SKILL.md +0 -0
  141. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/pm-pdata-do-update-consuming-skills/SKILL.md +0 -0
  142. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/pm-pdata-do-update-project-docs/SKILL.md +0 -0
  143. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/pm-pdata-resolve-conflicts/SKILL.md +0 -0
  144. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/pm-project-layout-reference/SKILL.md +0 -0
  145. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/pm-update-central-files/SKILL.md +0 -0
  146. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/reduce-persistent-context/CALIBRATION.md +0 -0
  147. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/reduce-persistent-context/SKILL.md +0 -0
  148. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/reduce-persistent-context/scripts/analyze_context.py +0 -0
  149. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/reduce-persistent-context/scripts/duplicates.py +0 -0
  150. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/reduce-persistent-context/scripts/measure.py +0 -0
  151. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/reduce-persistent-context/scripts/report.py +0 -0
  152. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/reduce-persistent-context/scripts/tokens.py +0 -0
  153. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/reduce-persistent-context/scripts/usage.py +0 -0
  154. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/select-agent-model/SKILL.md +0 -0
  155. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/send-session-message/SKILL.md +0 -0
  156. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/update-command-cache/SKILL.md +0 -0
  157. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools/skills/update-command-cache/scripts/update_command_cache.py +0 -0
  158. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools.egg-info/SOURCES.txt +0 -0
  159. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools.egg-info/dependency_links.txt +0 -0
  160. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools.egg-info/entry_points.txt +0 -0
  161. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools.egg-info/requires.txt +0 -0
  162. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/cc_session_tools.egg-info/top_level.txt +0 -0
  163. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/__init__.py +0 -0
  164. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/attribution.py +0 -0
  165. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/cache.py +0 -0
  166. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/ccusage_wrapper.py +0 -0
  167. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/cli.py +0 -0
  168. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/data/pricing.json +0 -0
  169. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/parent_inference.py +0 -0
  170. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/parser.py +0 -0
  171. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/pricing.py +0 -0
  172. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/query.py +0 -0
  173. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/report.py +0 -0
  174. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/schema.py +0 -0
  175. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/claude_code_usage/session_names.py +0 -0
  176. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/__init__.py +0 -0
  177. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/after_response.py +0 -0
  178. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/bash_hard_deny.py +0 -0
  179. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/bash_security_review.py +0 -0
  180. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/cache.py +0 -0
  181. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/catchup.py +0 -0
  182. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/confirm_8digit.py +0 -0
  183. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/context_window_warning.py +0 -0
  184. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/last_screenshot.py +0 -0
  185. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/marker_allow.py +0 -0
  186. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/markers.py +0 -0
  187. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/messaging_deliver.py +0 -0
  188. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/model_info.py +0 -0
  189. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/normalise.py +0 -0
  190. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/pdata_sync.py +0 -0
  191. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/pending_migration.py +0 -0
  192. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/pending_rename.py +0 -0
  193. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/script_allowlist.py +0 -0
  194. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/session_tag.py +0 -0
  195. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/stats.py +0 -0
  196. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/telemetry.py +0 -0
  197. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/telemetry_query.py +0 -0
  198. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/telemetry_trim.py +0 -0
  199. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/transcript.py +0 -0
  200. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/src/hooks/worklog_guard.py +0 -0
  201. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_after_response.py +0 -0
  202. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_api_keys.py +0 -0
  203. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_attribution.py +0 -0
  204. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_bash_hard_deny.py +0 -0
  205. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_bash_security_review.py +0 -0
  206. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_bash_security_review_allowlist.py +0 -0
  207. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_bun_tools.py +0 -0
  208. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_cache.py +0 -0
  209. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_cache_sqlite.py +0 -0
  210. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccr_orphans.py +0 -0
  211. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccs_emptiness.py +0 -0
  212. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccs_eta.py +0 -0
  213. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccs_list_mode.py +0 -0
  214. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccs_scope_flags.py +0 -0
  215. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccs_sentinel_sort.py +0 -0
  216. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccs_session_counts.py +0 -0
  217. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_bundle_discovery.py +0 -0
  218. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_ccsched_jobs_cli.py +0 -0
  219. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_cli.py +0 -0
  220. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_context_override_cli.py +0 -0
  221. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_doctor.py +0 -0
  222. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_gc_prune.py +0 -0
  223. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_gc_report.py +0 -0
  224. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_hook_dispatcher.py +0 -0
  225. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_hooks_allowlist.py +0 -0
  226. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_hooks_install_prune.py +0 -0
  227. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_hooks_install_zero_arg.py +0 -0
  228. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_hooks_uninstall.py +0 -0
  229. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_install_everything.py +0 -0
  230. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_machine_identity_cli.py +0 -0
  231. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_main_gate.py +0 -0
  232. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_pdata_cli.py +0 -0
  233. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_pdata_init_cli.py +0 -0
  234. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_pdata_readiness_cli.py +0 -0
  235. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_pdata_reconcile_cli.py +0 -0
  236. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_pdata_rename_group_cli.py +0 -0
  237. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_pdata_reorganize_cli.py +0 -0
  238. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_pdata_sync_cli.py +0 -0
  239. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_pdata_verify_cli.py +0 -0
  240. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_repair_sessions_cli.py +0 -0
  241. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_sessions_cli.py +0 -0
  242. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_shell_install.py +0 -0
  243. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_skills_install.py +0 -0
  244. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_skills_uninstall.py +0 -0
  245. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_telemetry_query.py +0 -0
  246. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccst_telemetry_trim.py +0 -0
  247. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_ccusage_wrapper.py +0 -0
  248. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_claude_flags.py +0 -0
  249. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_claude_md_drift.py +0 -0
  250. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_claude_md_install.py +0 -0
  251. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_clean_hook_sessions_format.py +0 -0
  252. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_cli.py +0 -0
  253. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_cli_api_launchers.py +0 -0
  254. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_cli_ccd.py +0 -0
  255. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_cli_ccd_dry_run.py +0 -0
  256. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_cli_ccr.py +0 -0
  257. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_cli_ccs.py +0 -0
  258. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_cli_version.py +0 -0
  259. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_confirm_8digit.py +0 -0
  260. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_context_overrides.py +0 -0
  261. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_context_window_warning.py +0 -0
  262. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_date_format_conformance.py +0 -0
  263. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_db.py +0 -0
  264. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_debug.py +0 -0
  265. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_doctor_mutes.py +0 -0
  266. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_empty_session.py +0 -0
  267. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_hook_cache.py +0 -0
  268. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_hooks_install.py +0 -0
  269. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_hooks_install_records.py +0 -0
  270. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_install_sync.py +0 -0
  271. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_last_screenshot.py +0 -0
  272. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_levenshtein.py +0 -0
  273. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_machine_identity.py +0 -0
  274. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_marker_allow.py +0 -0
  275. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_migrate_ccmsg.py +0 -0
  276. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_migrate_ccsched.py +0 -0
  277. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_migrate_sessions_db.py +0 -0
  278. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_migrate_telemetry.py +0 -0
  279. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_model_info.py +0 -0
  280. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_normalise.py +0 -0
  281. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_occupancy.py +0 -0
  282. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_parent_inference.py +0 -0
  283. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_parser.py +0 -0
  284. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_paths.py +0 -0
  285. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_pdata_audit_skill.py +0 -0
  286. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_pdata_post_migration_skills.py +0 -0
  287. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_pending_migration_hook.py +0 -0
  288. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_picker.py +0 -0
  289. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_pricing.py +0 -0
  290. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_proc_lock.py +0 -0
  291. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_prompts.py +0 -0
  292. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_query.py +0 -0
  293. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_report.py +0 -0
  294. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_roots.py +0 -0
  295. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_rules.py +0 -0
  296. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_scheduler_bundled_jobs.py +0 -0
  297. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_schema.py +0 -0
  298. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_script_allowlist.py +0 -0
  299. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_session_names.py +0 -0
  300. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_session_tag.py +0 -0
  301. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_sessions.py +0 -0
  302. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_sessions_db.py +0 -0
  303. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_sessions_db_migration_chain.py +0 -0
  304. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_sessions_repair.py +0 -0
  305. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_tasklist.py +0 -0
  306. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_telemetry.py +0 -0
  307. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_telemetry_store.py +0 -0
  308. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_text_wrap.py +0 -0
  309. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_timefmt.py +0 -0
  310. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_transcript.py +0 -0
  311. {cc_session_tools-3.16.0 → cc_session_tools-3.16.2}/tests/test_worklog_guard.py +0 -0
@@ -0,0 +1,617 @@
1
+ Metadata-Version: 2.4
2
+ Name: cc-session-tools
3
+ Version: 3.16.2
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
+ Requires-Dist: mypy>=1.10; extra == "dev"
57
+ Requires-Dist: pandas-stubs; extra == "dev"
58
+ Dynamic: license-file
59
+
60
+ # cc-session-tools (CCST)
61
+
62
+ [![PyPI](https://img.shields.io/pypi/v/cc-session-tools.svg)](https://pypi.org/project/cc-session-tools/)
63
+ [![Python](https://img.shields.io/pypi/pyversions/cc-session-tools.svg)](https://pypi.org/project/cc-session-tools/)
64
+ [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
65
+
66
+ **Tools for running Claude Code at scale as your default way of working, not just a
67
+ sometimes tool.**
68
+
69
+ Claude Code on its own is a great single conversation. It is much less good at the things
70
+ that appear once you use it all day, across many projects, for weeks:
71
+
72
+ - _"Which session was that in?"_ - sessions are anonymous UUIDs in a transcript folder.
73
+ - _"Where did that draft go?"_ - files end up wherever the conversation left them.
74
+ - _"I need to tell the other session about this."_ - sessions cannot talk to each other.
75
+ - _"This should just run every week."_ - nothing runs while Claude Code is closed.
76
+ - _"Did that command it just ran do something bad?"_ - you either approve everything by hand
77
+ or approve nothing.
78
+ - _"My CSV of records has drifted out of sync with my notes again."_ - ad hoc files do not
79
+ scale.
80
+ - _"I'm working with GB of unstructured data, and I need multiple sessions to work on the
81
+ files simultaneously"_ - race conditions anyone?
82
+ - _"I can't give Claude Code all this power"_ - and you definitely don't want to trust the
83
+ LLM to enforce its own guardrails
84
+
85
+ CCST fixes each of those with small, boring, local tools. Everything is a command line
86
+ program plus a handful of Claude Code hooks and skills. There is no server, no account and
87
+ no network service (the only optional outbound call is a Telegram notification you opt
88
+ into). All state is SQLite under `~/.local/share/claude/`.
89
+
90
+ If you run Claude Code only a few times a week for one-off questions or just 1 or 2 coding
91
+ sessions on different code bases at the same time then you do not need this. If you run
92
+ several named sessions a day, want to resume one from three weeks ago, want sessions to
93
+ leave each other notes, and want housekeeping to just happen, CCST is the layer that makes
94
+ that sustainable.
95
+
96
+ ## Contents
97
+
98
+ - [What you get](#what-you-get)
99
+ - [Install](#install)
100
+ - [Quick start](#quick-start)
101
+ - [Sessions: `ccd`, `ccr`, `ccs`](#sessions-ccd-ccr-ccs)
102
+ - [Sessions talking to each other: `ccmsg`](#sessions-talking-to-each-other-ccmsg)
103
+ - [Scheduled jobs: `ccsched`](#scheduled-jobs-ccsched)
104
+ - [Safety hooks](#safety-hooks)
105
+ - [Per-project data store: `pdata`](#per-project-data-store-pdata)
106
+ - [Usage and cost analytics: `claude-code-usage`](#usage-and-cost-analytics-claude-code-usage)
107
+ - [Bundled skills](#bundled-skills)
108
+ - [Teaching Claude the conventions: `claude-md`](#teaching-claude-the-conventions-claude-md)
109
+ - [Command reference](#command-reference)
110
+ - [Configuration](#configuration)
111
+ - [Health checks, upgrades and uninstalling](#health-checks-upgrades-and-uninstalling)
112
+ - [How it fits together](#how-it-fits-together)
113
+ - [Contributing](#contributing)
114
+
115
+ ## What you get
116
+
117
+ | You want to... | CCST gives you |
118
+ | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
119
+ | Find and resume past work | `ccd` starts a session under a name you choose, `ccr` resumes it by name fragment, `ccs` searches names, files and transcripts |
120
+ | Keep drafts and deliverables together | A `working/` and `out/` directory per session, created for you |
121
+ | Hand work between sessions | `ccmsg`: durable messages addressed to a session, a project, or "whoever picks this up" |
122
+ | Run things on a schedule without a daemon | `ccsched`: recurring jobs, caught up the next time you open Claude Code |
123
+ | Stop destructive commands | A hard-deny hook plus a cached, tiered (allowlist, heuristics, LLM) review of every shell command |
124
+ | Gate high-stakes actions | An 8-digit confirmation code you must type back before gated tools run |
125
+ | Track structured records per project | `pdata`: one SQLite database per project, with typed fields, versioning and multi-machine sync |
126
+ | See what Claude Code costs you | `claude-code-usage`: tokens and dollars by project, session, model, tool, MCP server, plugin |
127
+ | Avoid context bloat | A warning hook when the context window gets large, plus `/compact-smart` and `/context-override` |
128
+ | Get Claude to follow these conventions unprompted | Managed, human-editable sections installed into your global `CLAUDE.md` |
129
+ | Start from sensible workflows | 26 bundled skills (session hygiene, `pdata` workflows, document extraction, agent patterns) |
130
+ | Know it all still works | `ccst doctor`, a single health check across every subsystem, also run weekly by a bundled job |
131
+
132
+ ## Install
133
+
134
+ Requires Python 3.11 or newer, [Claude Code](https://docs.claude.com/en/docs/claude-code)
135
+ and a POSIX shell (macOS or Linux; Windows via WSL).
136
+
137
+ ### 1. Install the package
138
+
139
+ ```sh
140
+ uv tool install cc-session-tools # recommended
141
+ # or: pipx install cc-session-tools
142
+ # or: pip install cc-session-tools
143
+ ```
144
+
145
+ This puts the commands `ccd`, `ccr`, `ccdapi`, `ccrapi`, `ccs`, `ccmsg`, `ccsched`, `ccst`,
146
+ `claude-code-usage` and `cccs-stats` on your `PATH`.
147
+
148
+ ### 2. Tell CCST where your projects live
149
+
150
+ `ccd` creates a session directory inside the project you are working in, and refuses to run
151
+ outside a configured root. Set one or both of these in your shell profile (for example
152
+ `~/.zshrc` or `~/.bashrc`). Each must point at a directory whose direct children are your
153
+ projects:
154
+
155
+ ```sh
156
+ export CLAUDE_SESSION_TOOLS_REPO_ROOT="$HOME/repos" # loose: any session name tags must not have spaces in them
157
+ export CLAUDE_SESSION_TOOLS_PROJ_ROOT="$HOME/cc" # strict: session name tags must be <project folder name>-<label>
158
+ ```
159
+
160
+ - Use `REPO_ROOT` for code repositories. Any tag works (`ccd fix-login-bug`).
161
+ - Use `PROJ_ROOT` for non-code "project" folders, where you want tags namespaced as
162
+ `<project>-<label>` (project names are lowercase letters and digits only). `pdata` (below)
163
+ lives under this root.
164
+
165
+ ### 3. Wire CCST into Claude Code
166
+
167
+ ```sh
168
+ ccst install-everything # dry run: shows exactly what would change
169
+ ccst install-everything --apply # does it
170
+ ccst doctor # health check; prints only problems (add --all to see everything)
171
+ ```
172
+
173
+ `install-everything` installs, into `~/.claude`:
174
+
175
+ 1. the bundled **skills** (symlinked into `~/.claude/skills/`)
176
+ 2. the **hooks** (merged into `~/.claude/settings.json`; existing entries you wrote are left
177
+ alone)
178
+ 3. the **`ccl` shell function**, written as `~/.shellrc.d/ccl.sh`
179
+ 4. the managed **`CLAUDE.md` sections**, delimited blocks in `~/.claude/CLAUDE.md`
180
+ 5. the standard **scheduled jobs**
181
+
182
+ then runs `ccst doctor`. It is idempotent, so it is safe to re-run.
183
+
184
+ ### 4. Load the shell functions
185
+
186
+ `ccst` does not edit your `~/.zshrc` or `~/.bashrc`. Make sure your shell sources the
187
+ fragment directory (add this once if it does not already):
188
+
189
+ ```sh
190
+ for f in ~/.shellrc.d/*.sh; do [ -r "$f" ] && . "$f"; done
191
+ ```
192
+
193
+ Open a new terminal, `cd` into a project under one of your roots, and you are ready.
194
+
195
+ ### Optional configuration
196
+
197
+ These are not needed to get started; see [Configuration](#configuration) for details.
198
+
199
+ - `CCST_CONFIRM_8DIGIT_GATED_TOOLS` - which tools require the 8-digit confirmation code.
200
+ - `TELEGRAM_BOT_TOKEN` / `TELEGRAM_CHAT_ID` - push scheduled-job outcomes or other messages
201
+ via Telegram.
202
+ - `CCST_SCREENSHOT_DIR` - where the `>lss` prompt token looks for your latest screenshot.
203
+ - `~/.config/ccst/api-keys` - Anthropic API keys for `ccdapi`/`ccrapi`.
204
+
205
+ ## Quick start
206
+
207
+ ```sh
208
+ cd ~/repos/myproject
209
+ ccd fix-login-bug # new session: cc-sessions/20261015-fix-login-bug/ (today's date)
210
+ # ... work, then quit Claude Code ...
211
+
212
+ ccr login-bug # days later: resume it by any fragment of its name
213
+ ccs --global # list sessions across every project
214
+ ccs "rate limit" --contents --global # search inside working/ and out/ of all sessions
215
+ ccst doctor # is everything healthy?
216
+ ```
217
+
218
+ Then, from inside any session, just ask Claude in plain language: _"leave a note for the
219
+ next session in this project saying the config file was renamed"_, or _"run
220
+ `ccst doctor --drift` every Monday morning"_, or _"send a message to
221
+ ~/repos/my-other-project about ..."_. The installed skills and `CLAUDE.md` sections teach
222
+ Claude how to use `ccmsg` and `ccsched` for you.
223
+
224
+ ## Sessions: `ccd`, `ccr`, `ccs`
225
+
226
+ Three commands cover starting, resuming and finding your sessions. Run them from
227
+ inside a project directory under one of your configured roots.
228
+
229
+ **`ccd <tag>`** starts a new session and scaffolds `cc-sessions/<yyyyMMdd>-<tag>/` with
230
+ empty `working/` and `out/` subdirectories. Tags use letters, digits and dashes. `--dry-run`
231
+ shows what it would do; extra arguments are passed through to `claude`.
232
+
233
+ ```sh
234
+ ccd fix-login-bug
235
+ # -> Claude Code, session 20261015-fix-login-bug (if today is 2026-10-15)
236
+ ```
237
+
238
+ **`ccr <fragment>`** resumes a session by fuzzy name match. You do not need the exact tag or
239
+ date; if several sessions match you get an interactive picker. If a session was forked
240
+ (Ctrl-L), `ccr` helps you pick the right transcript. `--include-orphans` also finds
241
+ transcripts that have no `cc-sessions/` directory.
242
+
243
+ ```sh
244
+ ccr login-bug
245
+ ```
246
+
247
+ **`ccs`** (and `ccl`, its shell-function wrapper) lists and searches sessions:
248
+
249
+ ```sh
250
+ ccs --global # every session, across every project
251
+ ccs login --global # by name
252
+ ccs "rate limit" --contents --global # full text in working/ and out/
253
+ ccs "stack trace" --messages # full text of transcripts in the current project
254
+ ccs --order-by active -n 5 --global # your 5 most recently active sessions anywhere
255
+ ccs --since 2026-10-01 --emptiness exclude --json --global
256
+ ```
257
+
258
+ Filters cover date ranges (`--since`, `--before`, `--days`), sessions you never typed in
259
+ (`--emptiness`), and hook-spawned review sessions (`--exclude-hooks`). Output can be JSON or
260
+ null-delimited for `xargs -0`. Set `CCS_DEFAULT_GLOBAL=1` to make `--global` the default.
261
+
262
+ ### `working/` and `out/`: draft, then finalise
263
+
264
+ Each session directory gets two folders:
265
+
266
+ ```
267
+ cc-sessions/20261015-fix-login-bug/
268
+ ├── working/ # drafts, scratch notes, WORKLOG.md, intermediate data
269
+ └── out/ # the confirmed final artefact
270
+ ```
271
+
272
+ Drafts and iterations accumulate in `working/`; only the finished deliverable goes in
273
+ `out/`. Nothing on disk enforces this, but the managed `workflow` `CLAUDE.md` section
274
+ teaches Claude to do it, and `ccs --contents` and `pdata reconcile-session-output` rely on
275
+ it. The same section asks Claude to keep a `working/WORKLOG.md` (timestamped entries), and
276
+ the `worklog-guard` hook blocks a manual `/compact` while that log is stale, so a compaction
277
+ cannot silently lose your session history.
278
+
279
+ ### Where subagents write
280
+
281
+ A subagent Claude dispatches gets its own folder, `agents/<tag>--<task-slug>/`, inside the
282
+ session directory, with the exact prompt in `prompt.md` and a running `WORKLOG.md`, so a
283
+ large or parallel task leaves an audit trail instead of filling the chat. This is taught by
284
+ the managed `agents` section.
285
+
286
+ ### Recurring routines get a fresh session each time
287
+
288
+ A weekly review is not one long-lived session; it is a new dated session each time, sharing
289
+ a suffix so the series is easy to find:
290
+
291
+ ```sh
292
+ ccd myproject-weekly-review # -> 20261001-myproject-weekly-review
293
+ ccd myproject-weekly-review # a week later: 20261008-myproject-weekly-review
294
+ ccs myproject-weekly-review --global # lists every occurrence
295
+ ```
296
+
297
+ ### Billing a session to an API key: `ccdapi`, `ccrapi`
298
+
299
+ `ccdapi` and `ccrapi` behave like `ccd` and `ccr`, but launch Claude Code with an Anthropic
300
+ API key instead of your subscription. Pick the key with `-k <label>`, or omit `-k` to choose
301
+ from a numbered menu:
302
+
303
+ ```sh
304
+ ccdapi -k work fix-login-bug
305
+ ccrapi login-bug # prompts for which key label to use
306
+ ```
307
+
308
+ Keys live in `~/.config/ccst/api-keys` (override with `CCST_API_KEYS_FILE`), one `label=key`
309
+ per line, `#` comments allowed. The file must be `chmod 600` and is parsed, not sourced.
310
+ Keep it out of `~/.claude` and your shell rc files. Start from the value-free template
311
+ `api-keys.example`, bundled under `cc_session_tools/config/`.
312
+
313
+ ### Session housekeeping
314
+
315
+ - `ccst sessions list` shows what `sessions.db` knows.
316
+ - `ccst repair sessions` fixes rows that `ccl`/`ccs --global` cannot see.
317
+ - `ccst gc report` finds orphaned data left behind by deleted sessions;
318
+ `ccst gc prune --execute` removes it. A bundled job runs the report weekly.
319
+ - Skills (below) cover deleting empty sessions, moving or renaming a session, and archiving
320
+ hook-review sessions.
321
+
322
+ ## Sessions talking to each other: `ccmsg`
323
+
324
+ Leave a message for a session that is not open right now. The most common use is "whoever
325
+ next works on this project", delivered automatically the next time a matching session
326
+ starts:
327
+
328
+ ```sh
329
+ ccmsg send --to-project myproject \
330
+ --subject "heads up: shared config file renamed" \
331
+ --body "renamed config/settings.yaml -> config/app.yaml, update references"
332
+
333
+ # in a later session opened in the same project (also done by a SessionStart hook):
334
+ ccmsg deliver
335
+ ccmsg list
336
+ ccmsg read <id>
337
+ ccmsg claim <id> # first session to claim wins, for description-addressed messages
338
+ ```
339
+
340
+ Three ways to address a message:
341
+
342
+ - `--to-project <name>` - any session in that project (by far the most common).
343
+ - `--to-session <session name or uuid prefix>` - one specific session, for example
344
+ `--to-session 20261015-fix-login-bug` or `--to-session 3f9c1a2b`. An ambiguous or unknown
345
+ reference is rejected and nothing is stored.
346
+ - `--to-description "whoever is working on the billing migration"` - a free-text proposal
347
+ that the first interested session claims.
348
+
349
+ You rarely type any of this. Tell your session _"send a message to the myproject session
350
+ about X"_ and the installed `send-session-message` skill does the rest.
351
+
352
+ If you send a message to a session that is open the hooks will flag its appearance to it
353
+ (and you) at the beginning of its next response to you.
354
+
355
+ ## Scheduled jobs: `ccsched`
356
+
357
+ Recurring jobs without a cron daemon. They are reconciled and caught up the next time you
358
+ open Claude Code, rather than run in the background while your laptop sleeps. A catch-up
359
+ digest at session start tells you what ran, what failed, and what was skipped.
360
+
361
+ ```sh
362
+ ccsched add --id nightly-lint --cadence 'daily@22:00' -- npm run lint
363
+ ccsched list # jobs and when each is next due
364
+ ccsched status # recent run history
365
+ ccsched show nightly-lint
366
+ ccsched run nightly-lint # run one now
367
+ ccsched sweep # reconcile, run anything due, surface results (also automatic at session start)
368
+ ```
369
+
370
+ - **Cadences**: `every:<duration>` (for example `every:6h`, `every:2w`), `daily@HH:MM`,
371
+ `weekly:<day>@HH:MM`, `monthly:<day>@HH:MM`, and `monthly:<weekday>#<n>@HH:MM`.
372
+ - **Safe by default**: a job that fails repeatedly auto-suspends instead of failing silently
373
+ forever, and `ccsched add --success-exit-codes` lets a job declare which exit codes mean
374
+ "ran fine".
375
+ - **Notifications**: set `TELEGRAM_BOT_TOKEN` and `TELEGRAM_CHAT_ID` to also get a Telegram
376
+ push for every job outcome, including when no session is open.
377
+ - **Bundled jobs**: CCST registers its own upkeep with `ccst ccsched-jobs install` (part of
378
+ `install-everything`): `pdata` verification and multi-machine sync, a weekly `doctor`
379
+ drift check, a weekly orphan report, telemetry trimming, session-output reconciliation, a
380
+ fortnightly reminder to curate the command-review cache, and a weekly sweep of hook-review
381
+ sessions.
382
+
383
+ You can also just ask Claude: _"run this every weekday at 09:00 and tell me if it fails"_ -
384
+ the `manage-recurring-cc-jobs-using-ccsched` skill translates that into a `ccsched add`.
385
+
386
+ ## Safety hooks
387
+
388
+ CCST installs hooks that sit in front of what Claude does. They are on by default after
389
+ `install-everything`.
390
+
391
+ - **`bash-hard-deny`** - every shell command passes a deny list first, with no bypass:
392
+ deletes (`rm` and friends, including inside inline scripts), delete-by-move into temp or
393
+ trash locations, force-deleting git branches, deleting remote branches, mutating `gh` and
394
+ `curl` calls, `sudo`, and similar. Everything else is auto-approved so routine compound
395
+ commands do not stall on prompts.
396
+ - **`bash-security-review`** - a tiered review of shell commands: a fast allowlist and
397
+ command cache, read-only pre-filters and heuristics, and an LLM-backed review only for
398
+ anything unusual. Results are cached so the common case stays fast. Use
399
+ `ccst hooks allowlist list` to see what is pre-approved and the `update-command-cache`
400
+ skill to curate the cache.
401
+ - **`confirm-8digit`** - for tools you choose to gate, Claude must show you a fresh random
402
+ 8-digit code and you type it back in your own message before the call runs. Gate tools
403
+ with `CCST_CONFIRM_8DIGIT_GATED_TOOLS="tool_a,tool_b"` (none are gated by default). A code
404
+ that came from another agent or a file never counts. The author uses this to stop Claude
405
+ Code from merging PR's without consent.
406
+ - **`context-window-warning`** - a non-blocking nudge toward `/compact` at 150k and 200k
407
+ tokens. Silence it for a session with `/context-override`.
408
+ - **`worklog-guard`** - blocks a manual `/compact` when the session's `WORKLOG.md` is stale.
409
+
410
+ ```sh
411
+ ccst hooks install # dry run
412
+ ccst hooks install --apply # merge CCST's hooks into ~/.claude/settings.json
413
+ ccst hooks uninstall --apply # remove only CCST's entries; yours are never touched
414
+ ```
415
+
416
+ ### Other hooks
417
+
418
+ These keep the rest of CCST working without any action from you:
419
+
420
+ - `session-tag` - tells Claude the session tag and directory when launched via `ccd`/`ccr`.
421
+ - `after-response` - records last-activity time for `ccs --order-by active`.
422
+ - `messaging-deliver` - delivers `ccmsg` messages at session start and each prompt.
423
+ - `catchup` - catches up missed scheduled jobs and shows the digest.
424
+ - `pdata-sync` - syncs `pdata` databases across your machines (see below).
425
+ - `pending-migration` and `pending-rename` - surface unfinished data migrations and
426
+ half-finished session renames.
427
+ - `last-screenshot` - type `>lss` in a prompt and Claude gets the path of your newest
428
+ screenshot (set `CCST_SCREENSHOT_DIR`; several directories may be separated by `:`).
429
+ - `marker-allow` - lets skills drop small marker files without a permission prompt.
430
+
431
+ ## Per-project data store: `pdata`
432
+
433
+ Projects accumulate CSVs, JSON files and markdown logs that drift out of sync and cannot be
434
+ queried. `pdata` gives each project one SQLite database instead, while deliberately leaving
435
+ prose and free-form notes as ordinary files. It lives under your
436
+ `CLAUDE_SESSION_TOOLS_PROJ_ROOT`.
437
+
438
+ ```sh
439
+ ccst pdata readiness-scan --project myproject # read-only: what would block a migration?
440
+ ccst pdata init --project myproject # dry run: classifies each file
441
+ ccst pdata init --project myproject --write # migrate (backs up first, verifies after)
442
+
443
+ ccst pdata add --project myproject --group invoices --content '{"status": "open", "amount": 120}'
444
+ ccst pdata query --project myproject --group invoices --where 'status = "open"'
445
+ ccst pdata schema list --project myproject
446
+ ```
447
+
448
+ - **Typed fields on demand** - records carry a flexible content field, and
449
+ `ccst pdata schema add-field` adds typed columns when a record shape settles.
450
+ - **Safe edits** - soft deletes, optimistic-concurrency versioning (a stale `update` or
451
+ `delete` exits non-zero rather than clobbering), and `ccst pdata verify` as an integrity
452
+ backstop (also run daily by a bundled job).
453
+ - **Multi-machine sync** - each project's database is published as a deterministic SQL dump
454
+ inside the project folder, so any folder-sync service carries it between your machines. A
455
+ vector clock per project means a genuine fork (two machines both edited) is flagged for
456
+ your choice with `ccst pdata resolve`, never silently merged. Each machine has a confirmed
457
+ identity (`ccst machine-identity show|confirm`).
458
+ - **New projects start well** - the first `pdata init` for a new project seeds starter
459
+ folders and a `CLAUDE.md` with date-format and line-ending conventions. An existing
460
+ `CLAUDE.md` is never touched.
461
+ - **Date hygiene** - writing a non-ISO date into a date-like field prints a warning, and
462
+ `readiness-scan` flags dotted, compact, slash and long-form date columns before you
463
+ migrate.
464
+ - **Session-output index** - `ccst pdata reconcile-session-output` indexes every session's
465
+ `out/` deliverables across projects (a bundled job runs it weekly).
466
+
467
+ The `pm-pdata-*` skills walk Claude through the whole lifecycle: auditing a project,
468
+ migrating it, designing schemas for new record shapes, resolving conflicts, and rewriting
469
+ skills and docs that pointed at the old flat files.
470
+
471
+ ## Usage and cost analytics: `claude-code-usage`
472
+
473
+ ```sh
474
+ claude-code-usage query --group-by model,day --format markdown
475
+ claude-code-usage report --since 2026-10-01 --output report.md
476
+ claude-code-usage children <session-uuid-or-name> # hook and subagent sessions under a parent
477
+ claude-code-usage reconcile # cross-check totals against the independent ccusage tool
478
+ ```
479
+
480
+ Groups by project, session, model, MCP server, plugin, tool or time period, in tokens and
481
+ dollars (using Anthropic's published prices). It separates subagent cost, already counted in
482
+ the parent session, from hook-review cost, billed separately, so totals are never
483
+ double-counted. Ask Claude _"analyse my Claude Code usage this month"_ and the
484
+ `analyse-cc-usage` skill runs these for you. `cccs-stats` reports the efficiency of the
485
+ command-review cache.
486
+
487
+ ## Bundled skills
488
+
489
+ 26 skills are installed into `~/.claude/skills/` by `ccst skills install --apply` (part of
490
+ `install-everything`). Claude loads each one when its description matches what you ask for.
491
+ Each lives in `src/cc_session_tools/skills/<name>/SKILL.md`.
492
+
493
+ - **Finding and managing sessions**: `find-claude-code-session`, `list-empty-sessions`,
494
+ `delete-sessions`, `move-session`, `clean-hook-sessions`
495
+ - **Cross-session coordination**: `send-session-message` (for `ccmsg`),
496
+ `manage-recurring-cc-jobs-using-ccsched`
497
+ - **Context and cost**: `compact-smart` (drafts the `/compact` instruction that preserves
498
+ what matters), `context-override`, `reduce-persistent-context` (measures and trims the
499
+ fixed per-session context footprint), `analyse-cc-usage`
500
+ - **Per-project data (`pdata`)**: `pm-pdata-do-init`,
501
+ `pm-pdata-do-audit-and-prepare-to-migrate`, `pm-pdata-design-schema`,
502
+ `pm-pdata-resolve-conflicts`, `pm-pdata-do-update-consuming-skills`,
503
+ `pm-pdata-do-update-project-docs`, `pm-project-layout-reference`,
504
+ `pm-update-central-files` (end-of-session wrap-up), and the deprecated fallback
505
+ `pm-pdata-do-manual-migration`
506
+ - **Multi-agent patterns**: `select-agent-model` (which model tier for a subagent),
507
+ `do-executor-critic-assessor-loop` (an iterate-and-critique quality loop)
508
+ - **Document extraction**: `extract-to-text` (docx, doc, rtf, odt, pptx, eml, msg, pdf
509
+ including scanned pages via OCR, xlsx, xls) and `extract-pptx`
510
+ - **Safety**: `generate-8digit-code`, `update-command-cache`
511
+
512
+ `ccst skills install` and `ccst skills uninstall` manage them individually if you want a
513
+ subset.
514
+
515
+ ## Teaching Claude the conventions: `claude-md`
516
+
517
+ The conventions above are not magic; they are taught. `ccst claude-md install` inserts
518
+ small, sentinel-delimited sections into your global `~/.claude/CLAUDE.md`, each
519
+ independently installable:
520
+
521
+ ```sh
522
+ ccst claude-md install --apply # every section
523
+ ccst claude-md install --section workflow --apply # just one
524
+ ccst claude-md uninstall --section agents --apply # remove one
525
+ ccst claude-md backups list # saved copies of hand-edited sections
526
+ ```
527
+
528
+ | Section | Teaches Claude |
529
+ | -------------- | ---------------------------------------------------------------- |
530
+ | `messaging` | to use `ccmsg` proactively to leave notes for other sessions |
531
+ | `workflow` | the `working/` to `out/` convention and a mandatory `WORKLOG.md` |
532
+ | `agents` | the per-subagent `agents/<tag>--<slug>/` folder convention |
533
+ | `confirm-gate` | how the 8-digit confirmation gate works |
534
+ | `date-format` | `yyyy.MM.dd` in filenames, `yyyy-MM-dd` everywhere else |
535
+
536
+ Each is a plain block you can read, edit or override. If you hand-edit a managed block, the
537
+ next install saves your version first (`ccst claude-md backups show <id>`), and
538
+ `ccst doctor` warns you before that happens.
539
+
540
+ ## Command reference
541
+
542
+ `ccst <noun> <verb>` is the administrative umbrella. Run `ccst <noun> --help` for every
543
+ flag.
544
+
545
+ | Noun | What it is for |
546
+ | -------------------- | ------------------------------------------------------------------------- |
547
+ | `install-everything` | run every install step, then a health check (dry run unless `--apply`) |
548
+ | `doctor` | health check; `--all`, `--drift`, `--mute NAME`, `--list-mutes` |
549
+ | `hooks` | install/uninstall hooks, manage the review allowlist, `run <name>` a hook |
550
+ | `skills` | install/uninstall the bundled skills |
551
+ | `claude-md` | install/uninstall the managed `CLAUDE.md` sections, list/show backups |
552
+ | `shell` | install/uninstall the `ccl` shell function |
553
+ | `ccsched-jobs` | install the bundled scheduled jobs |
554
+ | `pdata` | the per-project data store (see above) |
555
+ | `machine-identity` | show/confirm this machine's identity for `pdata` sync |
556
+ | `sessions` | inspect `sessions.db`; one-shot schema migrations |
557
+ | `repair` | repair known `sessions.db` corruption |
558
+ | `gc` | `report` and `prune` orphaned per-session data |
559
+ | `telemetry` | `query` and `trim` the hook-invocation log |
560
+ | `migrate` | one-shot migrations from legacy flat-file stores to SQLite |
561
+ | `context-override` | toggle the context-window warning for the current session |
562
+
563
+ Other commands: `ccd`, `ccr`, `ccs`/`ccl`, `ccdapi`, `ccrapi`, `ccmsg`, `ccsched`,
564
+ `claude-code-usage`, `cccs-stats`. Every command has `--help` and `--version`.
565
+
566
+ ## Configuration
567
+
568
+ Nothing here is required beyond the two root variables in [Install](#install).
569
+
570
+ | Setting | Purpose |
571
+ | ---------------------------------------- | ---------------------------------------------------------------------------- |
572
+ | `CLAUDE_SESSION_TOOLS_REPO_ROOT` | loose session root (code repositories) |
573
+ | `CLAUDE_SESSION_TOOLS_PROJ_ROOT` | strict `<project>-<label>` session root; also where `pdata` projects live |
574
+ | `CCST_CONFIRM_8DIGIT_GATED_TOOLS` | comma-separated tool names that require the 8-digit code (none by default) |
575
+ | `TELEGRAM_BOT_TOKEN`, `TELEGRAM_CHAT_ID` | Telegram push for scheduled-job outcomes (also read from `~/.creds`) |
576
+ | `CCST_SCREENSHOT_DIR` | directory (or `:`-separated list) searched by the `>lss` token |
577
+ | `CCST_API_KEYS_FILE` | alternative path for the `ccdapi`/`ccrapi` key file |
578
+ | `CCST_MACHINE_NAME` | explicit machine identity for `pdata` multi-machine sync |
579
+ | `CCS_DEFAULT_GLOBAL=1` | make `ccs`/`ccl` search globally by default |
580
+ | `CCST_NO_AUTO_SYNC=1` | disable the automatic post-upgrade install sync (CI, bisecting, development) |
581
+
582
+ ## Health checks, upgrades and uninstalling
583
+
584
+ - **`ccst doctor`** checks PATH, environment, `settings.json`, hooks, skills, data stores,
585
+ version drift against PyPI, and whether the install is in sync. By default it prints only
586
+ problems. Mute a known, accepted warning with `ccst doctor --mute <check>`. A bundled job
587
+ runs `ccst doctor --drift` weekly so problems reach you without you asking.
588
+ - **Upgrading**: `uv tool upgrade cc-session-tools` (or `pip install -U cc-session-tools`).
589
+ The next `ccst` command notices the new version and re-runs the install itself. Run
590
+ `ccst install-everything` (dry run) any time to preview what it would change.
591
+ - **Data migrations**: a major version that changes on-disk data ships a `ccst doctor` FAIL
592
+ and a one-shot `ccst migrate ...` command, and a SessionStart hook surfaces it. See
593
+ [CHANGELOG.md](CHANGELOG.md) before a major upgrade.
594
+ - **Uninstalling**: `ccst hooks uninstall --apply`, `ccst skills uninstall --apply`,
595
+ `ccst claude-md uninstall --apply` and `ccst shell uninstall --apply` remove what CCST
596
+ added (everything is dry run until you pass `--apply`), then
597
+ `uv tool uninstall cc-session-tools`. Your session directories and data stores are left in
598
+ place.
599
+
600
+ ## How it fits together
601
+
602
+ CCST is deliberately not a server or a shared team tool. It is local infrastructure for one
603
+ person running Claude Code hard, on one or more of their own machines. Everything is SQLite
604
+ under `~/.local/share/claude/`, one file per subsystem (sessions, messages, scheduler,
605
+ telemetry, command cache), and all of it is inspectable with `ccst telemetry query`,
606
+ `ccst gc report`, `ccst sessions list`, or a plain `sqlite3` shell. `ccst doctor` is the one
607
+ command that checks all of it at once. Run it any time something feels off.
608
+
609
+ ## Contributing
610
+
611
+ Development uses git worktrees and `uv`; see `.claude/CLAUDE.md` in this repo for the
612
+ workflow, versioning policy and release process. Changes follow an OpenSpec proposal process
613
+ under `openspec/`. Release history is in [CHANGELOG.md](CHANGELOG.md).
614
+
615
+ ## License
616
+
617
+ MIT