cc-session-tools 3.7.1__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.
Files changed (300) hide show
  1. cc_session_tools-3.9.0/PKG-INFO +325 -0
  2. cc_session_tools-3.9.0/README.md +268 -0
  3. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/pyproject.toml +1 -1
  4. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/ccst.py +72 -20
  5. cc_session_tools-3.9.0/src/cc_session_tools/lib/claude_md_install.py +313 -0
  6. cc_session_tools-3.9.0/src/cc_session_tools/lib/pdata/readiness.py +319 -0
  7. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/do-executor-critic-assessor-loop/SKILL.md +4 -3
  8. cc_session_tools-3.9.0/src/cc_session_tools/skills/pm-pdata-do-audit-and-prepare-to-migrate/SKILL.md +162 -0
  9. cc_session_tools-3.9.0/src/cc_session_tools.egg-info/PKG-INFO +325 -0
  10. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools.egg-info/SOURCES.txt +3 -0
  11. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/session_tag.py +2 -4
  12. cc_session_tools-3.9.0/tests/test_ccst_pdata_readiness_cli.py +95 -0
  13. cc_session_tools-3.9.0/tests/test_claude_md_install.py +274 -0
  14. cc_session_tools-3.9.0/tests/test_pdata_audit_skill.py +89 -0
  15. cc_session_tools-3.7.1/PKG-INFO +0 -1154
  16. cc_session_tools-3.7.1/README.md +0 -1097
  17. cc_session_tools-3.7.1/src/cc_session_tools/lib/claude_md_install.py +0 -170
  18. cc_session_tools-3.7.1/src/cc_session_tools/skills/pm-pdata-do-audit-and-prepare-to-migrate/SKILL.md +0 -199
  19. cc_session_tools-3.7.1/src/cc_session_tools.egg-info/PKG-INFO +0 -1154
  20. cc_session_tools-3.7.1/tests/test_claude_md_install.py +0 -81
  21. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/LICENSE +0 -0
  22. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/setup.cfg +0 -0
  23. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/__init__.py +0 -0
  24. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/__init__.py +0 -0
  25. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/ccd.py +0 -0
  26. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/ccmsg.py +0 -0
  27. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/ccr.py +0 -0
  28. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/ccs.py +0 -0
  29. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/ccsched.py +0 -0
  30. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/migrate_ccmsg.py +0 -0
  31. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/migrate_ccsched.py +0 -0
  32. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/migrate_sessions_db.py +0 -0
  33. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/cli/migrate_telemetry.py +0 -0
  34. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/config/hooks-bundle.json +0 -0
  35. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/config/session-tag-hook.json +0 -0
  36. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/hooks_install.py +0 -0
  37. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/__init__.py +0 -0
  38. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/bun_tools.py +0 -0
  39. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/claude_flags.py +0 -0
  40. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/context_overrides.py +0 -0
  41. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/db.py +0 -0
  42. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/debug.py +0 -0
  43. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/doctor.py +0 -0
  44. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/doctor_mutes.py +0 -0
  45. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/hook_registry.py +0 -0
  46. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/install_sync.py +0 -0
  47. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/levenshtein.py +0 -0
  48. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/machine_identity.py +0 -0
  49. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/__init__.py +0 -0
  50. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/addressing.py +0 -0
  51. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/cursor.py +0 -0
  52. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/lock.py +0 -0
  53. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/message.py +0 -0
  54. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/move_safety.py +0 -0
  55. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/repository.py +0 -0
  56. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/retention.py +0 -0
  57. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/service.py +0 -0
  58. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/messaging/store.py +0 -0
  59. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/occupancy.py +0 -0
  60. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/paths.py +0 -0
  61. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/__init__.py +0 -0
  62. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/backup.py +0 -0
  63. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/classify.py +0 -0
  64. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/cutover.py +0 -0
  65. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/dump.py +0 -0
  66. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/formatting.py +0 -0
  67. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/importers.py +0 -0
  68. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/init_paths.py +0 -0
  69. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/init_service.py +0 -0
  70. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/manifest.py +0 -0
  71. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/naming.py +0 -0
  72. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/rehydrate.py +0 -0
  73. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/rename_group.py +0 -0
  74. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/reorganize.py +0 -0
  75. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/repository.py +0 -0
  76. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/resolve.py +0 -0
  77. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/service.py +0 -0
  78. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/session_output.py +0 -0
  79. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/store.py +0 -0
  80. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/sync_check.py +0 -0
  81. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/sync_lock.py +0 -0
  82. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/sync_notify.py +0 -0
  83. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/vector_clock.py +0 -0
  84. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/vector_clock_store.py +0 -0
  85. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/verify.py +0 -0
  86. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/pdata/write_log.py +0 -0
  87. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/picker.py +0 -0
  88. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/proc_lock.py +0 -0
  89. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/prompts.py +0 -0
  90. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/roots.py +0 -0
  91. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/rules.py +0 -0
  92. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/__init__.py +0 -0
  93. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/bundled_jobs.py +0 -0
  94. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/cadence.py +0 -0
  95. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/cursor.py +0 -0
  96. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/digest.py +0 -0
  97. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/due.py +0 -0
  98. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/duration.py +0 -0
  99. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/jobspec.py +0 -0
  100. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/ledger.py +0 -0
  101. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/lock.py +0 -0
  102. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/notify.py +0 -0
  103. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/reconcile.py +0 -0
  104. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/registry.py +0 -0
  105. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/runner.py +0 -0
  106. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/state.py +0 -0
  107. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/store.py +0 -0
  108. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/surface.py +0 -0
  109. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/throttle.py +0 -0
  110. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/scheduler/worker.py +0 -0
  111. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/session_gc.py +0 -0
  112. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/sessions.py +0 -0
  113. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/sessions_db.py +0 -0
  114. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/sessions_repair.py +0 -0
  115. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/shell_install.py +0 -0
  116. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/tasklist.py +0 -0
  117. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/telemetry_store.py +0 -0
  118. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/lib/text_wrap.py +0 -0
  119. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/prompts/pdata-migration-claude-md-update.md +0 -0
  120. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/prompts/pdata-migration-skills-update.md +0 -0
  121. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/analyse-cc-usage/SKILL.md +0 -0
  122. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/clean-hook-sessions/SKILL.md +0 -0
  123. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/clean-hook-sessions/scripts/clean-hook-sessions.py +0 -0
  124. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/compact-smart/SKILL.md +0 -0
  125. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/context-override/SKILL.md +0 -0
  126. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/delete-sessions/SKILL.md +0 -0
  127. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/delete-sessions/scripts/delete_sessions.py +0 -0
  128. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/extract-pptx/SKILL.md +0 -0
  129. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/extract-pptx/scripts/extract_pptx.py +0 -0
  130. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/extract-to-text/SKILL.md +0 -0
  131. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/extract-to-text/scripts/extract_to_text.py +0 -0
  132. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/find-claude-code-session/SKILL.md +0 -0
  133. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/generate-8digit-code/SKILL.md +0 -0
  134. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/generate-8digit-code/scripts/generate_8digit_code.py +0 -0
  135. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/list-empty-sessions/SKILL.md +0 -0
  136. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/list-empty-sessions/scripts/list_empty_sessions.py +0 -0
  137. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/manage-recurring-cc-jobs-using-ccsched/SKILL.md +0 -0
  138. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/move-session/SKILL.md +0 -0
  139. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/move-session/hooks/sessionstart-pending-rename.sh +0 -0
  140. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/move-session/scripts/cc_session_rules.py +0 -0
  141. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/move-session/scripts/move_session.py +0 -0
  142. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-pdata-design-schema/SKILL.md +0 -0
  143. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-pdata-do-init/SKILL.md +0 -0
  144. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-pdata-do-manual-migration/SKILL.md +0 -0
  145. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-pdata-resolve-conflicts/SKILL.md +0 -0
  146. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-project-layout-reference/SKILL.md +0 -0
  147. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/pm-update-central-files/SKILL.md +0 -0
  148. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/CALIBRATION.md +0 -0
  149. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/SKILL.md +0 -0
  150. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/analyze_context.py +0 -0
  151. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/duplicates.py +0 -0
  152. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/measure.py +0 -0
  153. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/report.py +0 -0
  154. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/tokens.py +0 -0
  155. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/reduce-persistent-context/scripts/usage.py +0 -0
  156. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/select-agent-model/SKILL.md +0 -0
  157. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/send-session-message/SKILL.md +0 -0
  158. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/update-command-cache/SKILL.md +0 -0
  159. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools/skills/update-command-cache/scripts/update_command_cache.py +0 -0
  160. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools.egg-info/dependency_links.txt +0 -0
  161. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools.egg-info/entry_points.txt +0 -0
  162. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools.egg-info/requires.txt +0 -0
  163. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/cc_session_tools.egg-info/top_level.txt +0 -0
  164. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/__init__.py +0 -0
  165. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/attribution.py +0 -0
  166. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/cache.py +0 -0
  167. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/ccusage_wrapper.py +0 -0
  168. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/cli.py +0 -0
  169. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/data/pricing.json +0 -0
  170. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/parent_inference.py +0 -0
  171. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/parser.py +0 -0
  172. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/pricing.py +0 -0
  173. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/query.py +0 -0
  174. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/report.py +0 -0
  175. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/schema.py +0 -0
  176. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/claude_code_usage/session_names.py +0 -0
  177. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/__init__.py +0 -0
  178. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/after_response.py +0 -0
  179. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/bash_hard_deny.py +0 -0
  180. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/bash_security_review.py +0 -0
  181. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/cache.py +0 -0
  182. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/catchup.py +0 -0
  183. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/confirm_8digit.py +0 -0
  184. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/context_window_warning.py +0 -0
  185. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/last_screenshot.py +0 -0
  186. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/marker_allow.py +0 -0
  187. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/markers.py +0 -0
  188. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/messaging_deliver.py +0 -0
  189. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/model_info.py +0 -0
  190. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/normalise.py +0 -0
  191. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/pdata_sync.py +0 -0
  192. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/pending_migration.py +0 -0
  193. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/pending_rename.py +0 -0
  194. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/script_allowlist.py +0 -0
  195. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/stats.py +0 -0
  196. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/telemetry.py +0 -0
  197. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/telemetry_query.py +0 -0
  198. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/telemetry_trim.py +0 -0
  199. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/transcript.py +0 -0
  200. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/src/hooks/worklog_guard.py +0 -0
  201. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_after_response.py +0 -0
  202. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_attribution.py +0 -0
  203. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_bash_hard_deny.py +0 -0
  204. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_bash_security_review.py +0 -0
  205. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_bash_security_review_allowlist.py +0 -0
  206. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_bun_tools.py +0 -0
  207. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_cache.py +0 -0
  208. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_cache_sqlite.py +0 -0
  209. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccr_orphans.py +0 -0
  210. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccs_emptiness.py +0 -0
  211. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccs_eta.py +0 -0
  212. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccs_list_mode.py +0 -0
  213. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccs_scope_flags.py +0 -0
  214. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccs_sentinel_sort.py +0 -0
  215. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccs_session_counts.py +0 -0
  216. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_bundle_discovery.py +0 -0
  217. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_ccsched_jobs_cli.py +0 -0
  218. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_cli.py +0 -0
  219. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_context_override_cli.py +0 -0
  220. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_doctor.py +0 -0
  221. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_gc_prune.py +0 -0
  222. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_gc_report.py +0 -0
  223. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_hook_dispatcher.py +0 -0
  224. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_hooks_allowlist.py +0 -0
  225. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_hooks_install_prune.py +0 -0
  226. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_hooks_install_zero_arg.py +0 -0
  227. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_hooks_uninstall.py +0 -0
  228. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_install_everything.py +0 -0
  229. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_machine_identity_cli.py +0 -0
  230. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_main_gate.py +0 -0
  231. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_cli.py +0 -0
  232. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_init_cli.py +0 -0
  233. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_reconcile_cli.py +0 -0
  234. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_rename_group_cli.py +0 -0
  235. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_reorganize_cli.py +0 -0
  236. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_sync_cli.py +0 -0
  237. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_pdata_verify_cli.py +0 -0
  238. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_repair_sessions_cli.py +0 -0
  239. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_sessions_cli.py +0 -0
  240. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_shell_install.py +0 -0
  241. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_skills_install.py +0 -0
  242. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_skills_uninstall.py +0 -0
  243. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_telemetry_query.py +0 -0
  244. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccst_telemetry_trim.py +0 -0
  245. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_ccusage_wrapper.py +0 -0
  246. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_claude_flags.py +0 -0
  247. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_cli.py +0 -0
  248. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_cli_ccd.py +0 -0
  249. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_cli_ccd_dry_run.py +0 -0
  250. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_cli_ccr.py +0 -0
  251. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_cli_ccs.py +0 -0
  252. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_cli_version.py +0 -0
  253. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_confirm_8digit.py +0 -0
  254. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_context_overrides.py +0 -0
  255. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_context_window_warning.py +0 -0
  256. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_db.py +0 -0
  257. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_debug.py +0 -0
  258. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_doctor_mutes.py +0 -0
  259. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_empty_session.py +0 -0
  260. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_hook_cache.py +0 -0
  261. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_hooks_install.py +0 -0
  262. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_hooks_install_records.py +0 -0
  263. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_install_sync.py +0 -0
  264. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_last_screenshot.py +0 -0
  265. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_levenshtein.py +0 -0
  266. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_machine_identity.py +0 -0
  267. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_marker_allow.py +0 -0
  268. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_migrate_ccmsg.py +0 -0
  269. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_migrate_ccsched.py +0 -0
  270. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_migrate_sessions_db.py +0 -0
  271. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_migrate_telemetry.py +0 -0
  272. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_model_info.py +0 -0
  273. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_normalise.py +0 -0
  274. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_occupancy.py +0 -0
  275. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_parent_inference.py +0 -0
  276. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_parser.py +0 -0
  277. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_paths.py +0 -0
  278. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_pending_migration_hook.py +0 -0
  279. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_picker.py +0 -0
  280. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_pricing.py +0 -0
  281. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_proc_lock.py +0 -0
  282. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_prompts.py +0 -0
  283. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_query.py +0 -0
  284. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_report.py +0 -0
  285. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_roots.py +0 -0
  286. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_rules.py +0 -0
  287. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_scheduler_bundled_jobs.py +0 -0
  288. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_schema.py +0 -0
  289. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_script_allowlist.py +0 -0
  290. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_session_names.py +0 -0
  291. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_session_tag.py +0 -0
  292. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_sessions.py +0 -0
  293. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_sessions_db.py +0 -0
  294. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_sessions_repair.py +0 -0
  295. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_tasklist.py +0 -0
  296. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_telemetry.py +0 -0
  297. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_telemetry_store.py +0 -0
  298. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_text_wrap.py +0 -0
  299. {cc_session_tools-3.7.1 → cc_session_tools-3.9.0}/tests/test_transcript.py +0 -0
  300. {cc_session_tools-3.7.1 → 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
+ [![PyPI](https://img.shields.io/pypi/v/cc-session-tools.svg)](https://pypi.org/project/cc-session-tools/)
61
+ [![Python](https://img.shields.io/pypi/pyversions/cc-session-tools.svg)](https://pypi.org/project/cc-session-tools/)
62
+ [![License](https://img.shields.io/badge/license-MIT-blue.svg)](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
+ [![PyPI](https://img.shields.io/pypi/v/cc-session-tools.svg)](https://pypi.org/project/cc-session-tools/)
4
+ [![Python](https://img.shields.io/pypi/pyversions/cc-session-tools.svg)](https://pypi.org/project/cc-session-tools/)
5
+ [![License](https://img.shields.io/badge/license-MIT-blue.svg)](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.1"
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" }