claude-code-conductor 2.36.0__tar.gz → 2.38.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 (205) hide show
  1. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/recall_autorebuild.py +5 -2
  2. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/recall_inject.py +1 -1
  3. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/init-session/SKILL.md +47 -2
  4. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/recall/SKILL.md +1 -1
  5. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/setup/SKILL.md +10 -0
  6. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/start/SKILL.md +25 -1
  7. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/ARCHITECTURE.md +2 -2
  8. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/CHANGELOG.md +31 -0
  9. claude_code_conductor-2.38.0/LICENSES/numpy-LICENSE +32 -0
  10. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/PKG-INFO +9 -5
  11. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/README.md +7 -3
  12. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/pyproject.toml +1 -1
  13. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/__init__.py +1 -1
  14. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/cli_recall.py +18 -7
  15. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/recall_index.py +171 -228
  16. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_recall_index.py +325 -332
  17. claude_code_conductor-2.36.0/LICENSES/chroma-hnswlib-LICENSE +0 -184
  18. claude_code_conductor-2.36.0/LICENSES/chroma-hnswlib-NOTICE +0 -9
  19. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/CLAUDE.md +0 -0
  20. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/architect.md +0 -0
  21. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/code-reviewer.md +0 -0
  22. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/design-critic.md +0 -0
  23. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/developer.md +0 -0
  24. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/doc-writer.md +0 -0
  25. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/interviewer.md +0 -0
  26. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/planner.md +0 -0
  27. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/project-setup.md +0 -0
  28. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/security-reviewer.md +0 -0
  29. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/systematic-debugger.md +0 -0
  30. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/tester.md +0 -0
  31. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/wt_developer.md +0 -0
  32. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/wt_systematic-debugger.md +0 -0
  33. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/agents/wt_tester.md +0 -0
  34. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/breaking-changes.txt +0 -0
  35. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/deletions.txt +0 -0
  36. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/docs/config-policy.md +0 -0
  37. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/docs/parallel-agents-setup.md +0 -0
  38. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/docs/platform-adapters.md +0 -0
  39. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/docs/settings.json.md +0 -0
  40. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/_hook_utils.py +0 -0
  41. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/check_agent_invocation.py +0 -0
  42. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/consolidate_memory.py +0 -0
  43. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/permission_handler.py +0 -0
  44. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/permission_handler_toast.py +0 -0
  45. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/planner_check.py +0 -0
  46. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/post_tool.py +0 -0
  47. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/pre_compact.py +0 -0
  48. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/pre_tool.py +0 -0
  49. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/restore_session.py +0 -0
  50. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/select_tier.py +0 -0
  51. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/session_start.py +0 -0
  52. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/session_stop.py +0 -0
  53. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/session_utils.py +0 -0
  54. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/statusline.py +0 -0
  55. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/stop.py +0 -0
  56. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/hooks/worktree_guard.py +0 -0
  57. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/memory/.gitkeep +0 -0
  58. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/permission_rules.json +0 -0
  59. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/rules/promoted/index.md +0 -0
  60. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/settings.json +0 -0
  61. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/brainstorm/SKILL.md +0 -0
  62. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/codex-review/SKILL.md +0 -0
  63. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/dev-workflow/SKILL.md +0 -0
  64. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/dev-workflow/references/code-review-checklist.md +0 -0
  65. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/dev-workflow/references/design-critic-rubric.md +0 -0
  66. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/dev-workflow/references/design-rubric.md +0 -0
  67. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/dev-workflow/references/interview-rubric.md +0 -0
  68. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/dev-workflow/references/plan-design-guidelines.md +0 -0
  69. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/dev-workflow/references/security-review-checklist.md +0 -0
  70. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/dev-workflow/scripts/record_review_decision.py +0 -0
  71. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/dev-workflow/scripts/record_tier_outcome.py +0 -0
  72. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/dev-workflow/scripts/review_hint_inject.py +0 -0
  73. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/develop/SKILL.md +0 -0
  74. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/doc/SKILL.md +0 -0
  75. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/extract-lib/SKILL.md +0 -0
  76. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/mcp-config/SKILL.md +0 -0
  77. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/parallel-agents/SKILL.md +0 -0
  78. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/pattern-status/SKILL.md +0 -0
  79. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/promote-pattern/SKILL.md +0 -0
  80. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/report-timestamp/SKILL.md +0 -0
  81. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
  82. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/review-phase/SKILL.md +0 -0
  83. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/setup/reference.md +0 -0
  84. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/setup/templates/coding-standards-template.md +0 -0
  85. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/skills/setup/templates/project-conventions-template.md +0 -0
  86. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.claude/state/.gitkeep +0 -0
  87. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/.gitignore +0 -0
  88. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/LICENSE +0 -0
  89. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/LICENSES/fastembed-LICENSE +0 -0
  90. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/LICENSES/fastembed-NOTICE +0 -0
  91. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/LICENSES/onnxruntime-LICENSE +0 -0
  92. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/LICENSES/paraphrase-multilingual-MiniLM-L12-v2-LICENSE +0 -0
  93. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/hatch_build.py +0 -0
  94. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/__main__.py +0 -0
  95. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/_db_params.py +0 -0
  96. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/_excludes.py +0 -0
  97. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/_terminal.py +0 -0
  98. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/adapters.py +0 -0
  99. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/cli.py +0 -0
  100. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/cli_ask.py +0 -0
  101. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/cli_doctor.py +0 -0
  102. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/cli_init.py +0 -0
  103. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/cli_list.py +0 -0
  104. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/cli_plan.py +0 -0
  105. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/cli_tier.py +0 -0
  106. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/cli_update.py +0 -0
  107. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/db.py +0 -0
  108. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/embedding.py +0 -0
  109. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/mcp_server.py +0 -0
  110. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/migrate.py +0 -0
  111. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/migrations/001_initial.sql +0 -0
  112. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/migrations/002_agent_cost_runs.sql +0 -0
  113. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/migrations/003_tier_cost.sql +0 -0
  114. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/migrations/README.md +0 -0
  115. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/migrations/__init__.py +0 -0
  116. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/paths.py +0 -0
  117. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/plan_validator.py +0 -0
  118. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/platforms.py +0 -0
  119. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/pricing.py +0 -0
  120. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/question.py +0 -0
  121. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/recall_chunker.py +0 -0
  122. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/src/c3/usage_ingester.py +0 -0
  123. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/__init__.py +0 -0
  124. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/conftest.py +0 -0
  125. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/fixtures/usage/README.md +0 -0
  126. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/fixtures/usage/mainline.jsonl +0 -0
  127. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/fixtures/usage/subagents/agent-deadbeef.jsonl +0 -0
  128. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/fixtures/usage/subagents/agent-deadbeef.meta.json +0 -0
  129. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/__init__.py +0 -0
  130. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_check_agent_invocation.py +0 -0
  131. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_consolidate_memory.py +0 -0
  132. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_hook_utils.py +0 -0
  133. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_permission_handler.py +0 -0
  134. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_permission_handler_toast.py +0 -0
  135. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
  136. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_planner_check.py +0 -0
  137. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_planner_check_dev.py +0 -0
  138. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_post_tool.py +0 -0
  139. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_pre_tool.py +0 -0
  140. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_recall_autorebuild.py +0 -0
  141. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_recall_inject.py +0 -0
  142. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_record_review_decision.py +0 -0
  143. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_record_tier_outcome.py +0 -0
  144. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_restore_session.py +0 -0
  145. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_review_hint_inject.py +0 -0
  146. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_select_tier.py +0 -0
  147. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_select_tier_escalation.py +0 -0
  148. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_session_start.py +0 -0
  149. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_session_stop.py +0 -0
  150. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_session_utils.py +0 -0
  151. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
  152. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_similarity_boost.py +0 -0
  153. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_statusline.py +0 -0
  154. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_statusline_template_sync.py +0 -0
  155. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_sync_check.py +0 -0
  156. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/hooks/test_template_guard.py +0 -0
  157. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/skills/__init__.py +0 -0
  158. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/skills/_skill_helpers.py +0 -0
  159. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/skills/test_dev_workflow_no_task_type.py +0 -0
  160. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/skills/test_init_session_no_task_type.py +0 -0
  161. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/skills/test_planner_lightweight.py +0 -0
  162. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/skills/test_recall_skill.py +0 -0
  163. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/skills/test_session_backlog_reconciliation.py +0 -0
  164. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/skills/test_setup_templates.py +0 -0
  165. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
  166. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/skills/test_start_skill_new_flow.py +0 -0
  167. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
  168. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_adapters.py +0 -0
  169. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_check_deletions.py +0 -0
  170. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_cli_ask.py +0 -0
  171. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_cli_doctor.py +0 -0
  172. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_cli_entry.py +0 -0
  173. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_cli_init.py +0 -0
  174. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_cli_list.py +0 -0
  175. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_cli_plan.py +0 -0
  176. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_cli_recall.py +0 -0
  177. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_cli_tier.py +0 -0
  178. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_cli_update_breaking_changes.py +0 -0
  179. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_cli_update_deletions.py +0 -0
  180. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_db.py +0 -0
  181. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_docstring_consistency.py +0 -0
  182. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_embedding.py +0 -0
  183. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_excludes.py +0 -0
  184. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_extract_breaking_changes.py +0 -0
  185. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_mcp_server_elicit.py +0 -0
  186. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_migrate.py +0 -0
  187. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_paths.py +0 -0
  188. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_plan_validator.py +0 -0
  189. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_pre_compact.py +0 -0
  190. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_pre_tool_hook.py +0 -0
  191. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_precompact_additional.py +0 -0
  192. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_precompact_toctou_fixes.py +0 -0
  193. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_pricing.py +0 -0
  194. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_recall_chunker.py +0 -0
  195. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_references_migration.py +0 -0
  196. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_session_utils_additional.py +0 -0
  197. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_skill_no_builtin_conflict.py +0 -0
  198. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_statusline.py +0 -0
  199. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_stop_additional.py +0 -0
  200. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_stop_hook.py +0 -0
  201. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_stop_precompact_fixes.py +0 -0
  202. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_sync_template_stop.py +0 -0
  203. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_template_pre_tool_hook.py +0 -0
  204. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_usage_ingester.py +0 -0
  205. {claude_code_conductor-2.36.0 → claude_code_conductor-2.38.0}/tests/test_worktree_guard.py +0 -0
@@ -97,11 +97,14 @@ def find_repo_root() -> Path | None:
97
97
 
98
98
 
99
99
  def index_exists(repo_root: Path) -> bool:
100
- """Return True if the recall HNSW index file exists.
100
+ """Return True if the recall index file (``recall.hnsw``) exists.
101
+
102
+ 歴史的経緯でファイル名は ``.hnsw`` を維持しているが、中身は numpy ndarray
103
+ (``.npy`` ペイロード, shape (N, dim) float32) であり HNSW ではない。
101
104
 
102
105
  Only ``recall.hnsw`` is checked — not ``recall_meta.json`` — because
103
106
  this hook's purpose is to trigger a rebuild when the index is stale.
104
- If the binary index is present (even without a metadata sidecar),
107
+ If the index file is present (even without a metadata sidecar),
105
108
  the stale check in ``index_is_stale_fast`` is meaningful and we should
106
109
  proceed. ``recall_inject`` checks both files because it needs a valid
107
110
  meta to run a search; we do not run a search here.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  """UserPromptSubmit hook: inject semantically-similar past context (α design).
3
3
 
4
- The hook runs ``c3 recall search`` against the local HNSW index and
4
+ The hook runs ``c3 recall search`` against the recall index (numpy cosine search) and
5
5
  returns the top hits as ``additionalContext`` for the parent Claude to
6
6
  consider. The preface explicitly asks Claude to evaluate the relevance
7
7
  of each hit and ignore unrelated ones — i.e. *AI judges, hook does not
@@ -13,6 +13,49 @@ description: セッション開始時に前回の作業状態・残タスク・
13
13
 
14
14
  ---
15
15
 
16
+ ## 最優先: 初回セットアップガードと実行マーカー(Step 1 より前に必ず実行)
17
+
18
+ ### G-1: init-session 実行マーカーを書く(ループガード)
19
+
20
+ `/start` からの再帰呼び出しを防ぐため、**最初に**現在のセッション ID を実行マーカーへ記録する:
21
+
22
+ ```bash
23
+ mkdir -p .claude/state
24
+ printf '%s' "$CLAUDE_CODE_SESSION_ID" > .claude/state/init_session.flag
25
+ ```
26
+
27
+ ### G-2: setup 未実行なら /setup を自動実行
28
+
29
+ プロジェクトのコーディング規約が未設定なら、`/setup` を先に実行する。Bash で判定:
30
+
31
+ ```bash
32
+ if [ -f .claude/rules/coding-standards.md ] || [ -f .claude/state/setup_done.flag ]; then
33
+ echo "SETUP_DONE"
34
+ else
35
+ echo "SETUP_NEEDED"
36
+ fi
37
+ ```
38
+
39
+ > 順序について: setup ガード(G-2)は Step 1(前回セッション復元)より前に置く。`SETUP_NEEDED` となるのは規約未設定=実質的に初回導入のケースであり、その場合 Step 1 で復元すべき前回セッションは通常存在しない(復元はほぼ no-op)ため、setup を先行させてもコンテキストへの実害はない。
40
+
41
+ - **`SETUP_DONE`** → そのまま Step 1 へ進む。
42
+ - **`SETUP_NEEDED`** → Skill ツールで `setup` を自動的に呼ぶ。ここでの「自動」は**ユーザーが `/setup` を打つ必要なく連鎖起動される**という意味で、`setup` 自体は言語・規約のヒアリング(AskUserQuestion 群)を行うため**ユーザー応答は必要**(規約設定をスキップ・無人実行する意味ではない)。`setup` 完了後(`coding-standards.md` と `setup_done.flag` が生成される)に Step 1 へ進む。
43
+ - ユーザーが `setup` のヒアリングを中断した場合、`coding-standards.md`・`setup_done.flag` のいずれも未生成なら次回の `/init-session`・`/start` で再度 `setup` が起動される(再試行可能)。
44
+
45
+ ### G-3: from-start 引数の扱い
46
+
47
+ 本スキルが **`from-start` 引数付き**で呼ばれた場合(`/start` のセッション初期化ガード経由)は、本ガード(G-1/G-2)と Step 1〜3(前回状態の復元・サマリ表示)まで実行したら、**以下の対話プロンプトを全てスキップ**して本スキルを終了する(Skill 実行が完了すれば呼び出し元の `/start` が Step 0 以降を続行する):
48
+
49
+ - Step 3 のサマリ提示後の「完了している可能性のあるタスク」確認 AskUserQuestion(Step 1.5 由来)
50
+ - Step 4(作業の開始方法を選ぶ)
51
+ - Step 5(選択に応じて分岐する)
52
+
53
+ 引数が無い通常起動では従来どおり上記を全て実行する。
54
+
55
+ > from-start ではユーザーは既に `/start` を選んでおり、開始方法・陳腐化タスクの確認で二重に問われると煩雑なため、復元サマリの提示のみに留める(陳腐化タスクの `[x]` 化が必要なら次回の通常 `/init-session` 起動時に確認される)。
56
+
57
+ ---
58
+
16
59
  ## Step 1: 前回セッションを読み込む
17
60
 
18
61
  Glob で `.claude/memory/sessions/*.tmp` を検索し、ファイル名(YYYYMMDD)が最大のものを Read する。
@@ -36,7 +79,7 @@ Glob で `.claude/memory/sessions/*.tmp` を検索し、ファイル名(YYYYMM
36
79
  ```
37
80
  3. 各 `- [ ]` 行に含まれる識別キーワード(機能名 / `Phase X` / 「Zenn」「リリース」などの名詞)が、いずれかのコミットメッセージに含まれているかをキーワード照合する
38
81
  4. 該当があれば「**完了している可能性のあるタスク**」として Step 3 のサマリに加える(コミットハッシュも併記する)
39
- 5. **自動で `[x]` 化はしない**。Step 4 のあとで AskUserQuestion を提示し、ユーザー承認した項目のみ Edit で `[x]` 化する
82
+ 5. **自動で `[x]` 化はしない**。Step 3 のサマリ提示後(Step 4 の前)に AskUserQuestion を提示し、ユーザー承認した項目のみ Edit で `[x]` 化する(**`from-start` 起動時はこの確認もスキップする**。G-3 参照)
40
83
  6. 該当なし、または前回セッションが当日の場合はこの Step をスキップする
41
84
 
42
85
  > 目的: 「memory-consolidation Phase 2 → v1.3.0 完了」のように、リリースで完了したのに `[ ]` のまま残った引き継ぎタスクを次セッション開始時に検出する。
@@ -77,7 +120,7 @@ Glob で `.claude/memory/sessions/*.tmp` を検索し、ファイル名(YYYYMM
77
120
  {promotion_candidate: true のパターン一覧。なければ「なし」}
78
121
  ```
79
122
 
80
- Step 1.5 で「完了している可能性のあるタスク」が検出された場合は、Step 4 の前に以下の AskUserQuestion を提示する:
123
+ Step 1.5 で「完了している可能性のあるタスク」が検出された場合は、Step 4 の前に以下の AskUserQuestion を提示する(**`from-start` 起動時はスキップ**・G-3 参照):
81
124
 
82
125
  ```json
83
126
  {
@@ -98,6 +141,8 @@ Step 1.5 で「完了している可能性のあるタスク」が検出され
98
141
 
99
142
  ## Step 4: 作業の開始方法を選ぶ
100
143
 
144
+ > **`from-start` 引数付きで呼ばれた場合はこの Step 4 と Step 5 をスキップし、復元サマリを出したら `/start` に制御を返す**(最優先ガード G-3 参照)。以下は通常起動(引数なし)のみ実行する。
145
+
101
146
  AskUserQuestion ツールで以下を提示する:
102
147
 
103
148
  ```json
@@ -6,7 +6,7 @@ allowed-tools: Bash, Read
6
6
 
7
7
  # recall
8
8
 
9
- `c3 recall` の HNSW + 多言語 embedding(`sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2`)に基づき、
9
+ `c3 recall` の numpy ベクトル検索 + 多言語 embedding(`sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2`)に基づき、
10
10
  `.claude/memory/sessions/`・`.claude/agent-memory/`・`.claude/reports/archive/`・
11
11
  `.claude/memory/patterns.json` から類似情報を意味検索する。
12
12
 
@@ -211,6 +211,16 @@ agent は本 skill 配下の `templates/` と `reference.md` を Read して、`
211
211
 
212
212
  ## Phase 4: 完了報告
213
213
 
214
+ project-setup エージェントが 2 ファイルを生成したら、Bash で setup 実行済みマーカーを記録する
215
+ (`/init-session` の setup ガードが再発火しないようにするため。`state/*` は gitignore+配布除外済み)。
216
+ このフラグは**存在自体がマーカー**であり中身は不要(空ファイルで可):
217
+
218
+ ```bash
219
+ mkdir -p .claude/state && : > .claude/state/setup_done.flag
220
+ ```
221
+
222
+ その後、以下を報告する:
223
+
214
224
  ```
215
225
  セットアップ完了:
216
226
  .claude/rules/coding-standards.md — 標準コーディング規約
@@ -4,7 +4,7 @@ description: 開発ワークフローの入口。開始地点(標準ワーク
4
4
 
5
5
  # start
6
6
 
7
- 開発ワークフローの入口。フロー順序: **Step 0(レポート整理)→ Step 1(開始地点選択)→ Step 2(フェーズ遷移)**。
7
+ 開発ワークフローの入口。フロー順序: **セッション初期化ガード(最優先)→ Step 0(レポート整理)→ Step 1(開始地点選択)→ Step 2(フェーズ遷移)**。
8
8
 
9
9
  ワークフローは 2 つだけ:
10
10
 
@@ -15,6 +15,30 @@ description: 開発ワークフローの入口。開始地点(標準ワーク
15
15
 
16
16
  ---
17
17
 
18
+ ## 最優先: セッション初期化ガード(Step 0 より前に必ず実行)
19
+
20
+ 本体(Step 0 以降)に入る前に、**当該セッションで `/init-session` が実行済みかを判定し、未実行なら自動実行する**。
21
+ Bash で判定する:
22
+
23
+ ```bash
24
+ flag=".claude/state/init_session.flag"
25
+ saved="$(tr -d '\r\n' < "$flag" 2>/dev/null)"
26
+ if [ -n "$CLAUDE_CODE_SESSION_ID" ] && [ "$saved" = "$CLAUDE_CODE_SESSION_ID" ]; then
27
+ echo "INIT_DONE"
28
+ else
29
+ echo "INIT_NEEDED"
30
+ fi
31
+ ```
32
+
33
+ - **`INIT_DONE`**(フラグの中身が現在の `CLAUDE_CODE_SESSION_ID` と一致)→ 既に初期化済み。そのまま Step 0 へ進む。
34
+ - **`INIT_NEEDED`**(不一致 / フラグ不在 / `CLAUDE_CODE_SESSION_ID` が空)→ Skill ツールで `init-session` を **`from-start` 引数付き**で呼ぶ。
35
+ - `init-session` が(必要なら `/setup` を連鎖実行し)前回状態を復元し、`init_session.flag` を書く。`from-start` 付きのため `init-session` 側は開始方法の選択(Step 4)や陳腐化タスク確認などの対話プロンプトをスキップして復元サマリのみ提示する。
36
+ - `init-session` の Skill 実行が完了したら本スキルに戻り、続けて Step 0(レポート整理)以降を実行する。
37
+
38
+ > **ループ回避**: `init-session` は本体開始直後に `init_session.flag` を現セッション ID で書く。そのため `init-session`(Step 5「ワークフローで始める」)が `/start` を呼び戻しても、本ガードは `INIT_DONE` と判定し再帰呼び出ししない。
39
+
40
+ ---
41
+
18
42
  ## Step 0: レポートの整理
19
43
 
20
44
  Glob で `.claude/reports/*.md` を検索する(`archive/` 配下は含まない)。
@@ -38,7 +38,7 @@ C3 は性質の異なる **2 つの層** からなる。この区別が全体理
38
38
  | 言語 | Python | Markdown(+ hook は Python) |
39
39
  | 配布 | `pip install claude-code-conductor` | `c3 init` が層 A から展開 |
40
40
  | エントリ | `c3 = "c3.cli:main"`(pyproject.toml) | スラッシュコマンド・Agent ツール |
41
- | 依存 | PyYAML / duckdb / chroma-hnswlib / fastembed | Claude Code ランタイム |
41
+ | 依存 | PyYAML / duckdb / numpy / fastembed | Claude Code ランタイム |
42
42
 
43
43
  **配布元リポジトリ内の物理対応**:
44
44
 
@@ -165,7 +165,7 @@ A ヒアリング → B 設計 → C 計画 → D 実装(TDD) → E レビュー
165
165
 
166
166
  ```
167
167
  recall_chunker.py → embedding.py → recall_index.py
168
- (sessions/reports/ (fastembed: paraphrase- (HNSW: chroma-hnswlib・
168
+ (sessions/reports/ (fastembed: paraphrase- (numpy cosine ブルートフォース・
169
169
  patterns をチャンク化) multilingual-MiniLM-L12-v2 .claude/state/ に保存)
170
170
  384次元・約220MB・多言語)
171
171
  ```
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.38.0] - 2026-06-16
4
+
5
+ ### 追加
6
+
7
+ - **オンボーディング動線の自走化(`/start` → `/init-session` → `/setup` の自動チェーン)**: C3 初導入プロジェクトで「最初に `/start` を打ち、規約未設定(`/setup` 未実行)のまま開発が始まる」事故を防ぐ。`/start` 実行時に当該セッションで `/init-session` が未実行なら自動で先行実行し、`/init-session` 実行時にプロジェクト規約が未設定なら `/setup` を自動で連鎖実行する。最初に打つコマンドが `/start` でも `/init-session` でも正しい順序に揃う。「自動」はコマンドを覚えていなくても連鎖起動される意味で、`/setup` 自体のヒアリング応答は引き続き必要(規約設定を無人スキップするわけではない)。
8
+
9
+ ### 仕組み
10
+
11
+ - **setup 実行済み判定** = `.claude/rules/coding-standards.md` の存在(setup の生成物・利用先で git 追跡され永続)**または** `.claude/state/setup_done.flag` の存在。`/setup` は Phase 4 でこのフラグを書く。
12
+ - **init-session 実行済み判定(セッション単位)** = `.claude/state/init_session.flag` の中身が現在の `CLAUDE_CODE_SESSION_ID` と一致するか。`/init-session` は本体開始直後にこのフラグを書く。
13
+ - **ループ回避**: `/init-session`(Step 5「ワークフローで始める」)が `/start` を呼び戻しても、`/start` のガードは init_session.flag の一致を見て `/init-session` を再実行しない。`/start` から呼ばれた `/init-session` は `from-start` 引数で Step 4(開始方法選択)・Step 5・Step 1.5 由来の陳腐化タスク確認プロンプトをスキップし、復元サマリのみ提示して `/start` に戻る。
14
+ - マーカーは `.claude/state/`(gitignore+配布除外済み)に置くため 3 ファイル同期は不要。配布元リポジトリには誤発火防止用の `setup_done.flag` を 1 つ配置(コミット・配布されない)。
15
+
16
+ ### 後方互換
17
+
18
+ - 既存の手動順序(`/init-session` → `/setup` → `/start`)は引き続き有効。公開 API・CLI・DB スキーマに変更なし。**破壊的変更なし**。
19
+
20
+ ## [2.37.0] - 2026-06-16
21
+
22
+ ### 変更
23
+
24
+ - **recall の索引バックエンドを chroma-hnswlib(C++ 拡張)から numpy ブルートフォース cosine 検索へ置換**: C++ コンパイラ(Microsoft Visual C++ Build Tools)が無い環境で `pip install claude-code-conductor` が失敗する問題を解消。numpy は全環境に wheel が提供されておりコンパイル不要。recall のコーパスは 1 ユーザーの `.claude/` 規模(数千チャンク)で近似最近傍の高速化が不要なため、numpy の総当たり cosine 検索で十分。索引は次回 `c3 recall rebuild` 実行時に自動で numpy 形式へ再生成される。アップグレード直後・初回 rebuild 完了までの間は recall が一時的に結果を返さない(`c3 recall rebuild --force` で即時再生成可能)。`recall.hnsw` ファイル名は後方互換のため維持(中身が numpy ペイロードに変わる)。関連フック(`recall_inject.py` / `recall_autorebuild.py`)は無改修で動作する。`load()` は不正形状・旧 hnswlib バイナリ・破損ファイルを検出すると `False` を返して全再構築フォールバックに繋ぐ(`np.load(allow_pickle=False)` で pickle 経路は遮断)。
25
+
26
+ ### 依存
27
+
28
+ - `chroma-hnswlib>=0.7.6` を削除し `numpy>=1.22` を追加。`LICENSES/chroma-hnswlib-*` を削除し `LICENSES/numpy-LICENSE`(BSD-3-Clause)を追加。
29
+
30
+ ### 後方互換
31
+
32
+ - 公開 API・CLI・索引ファイル名(`recall.hnsw`)・meta スキーマに変更なし。索引は自動再生成のため migration 操作は不要。**破壊的変更なし**。
33
+
3
34
  ## [2.36.0] - 2026-06-14
4
35
 
5
36
  **セッションファイルに「現在地」フィールドを新設し、コンテキスト圧縮(コンパクト)後の肥大ループとワークフロー無視を同時に解消(hook・skill 手順の変更/破壊的変更なし)**: 200K コンテキスト運用で、セッション復元(コンパクト後・`/init-session`)の経路が「構造のない丸投げ」になっていたことが 2 つの症状を生んでいた。(1) **コンパクト肥大ループ**: `pre_compact.py` がコンパクト直前に状態を無上限追記させ、`restore_session.py` がコンパクト後に `## 残タスク` / `## うまくいったアプローチ` / `## 試みたが失敗したアプローチ` の 3 セクションを完了済み `- [x]` 行も含め丸ごと再注入し続けるため、コンテキスト使用率が上がり→さらにコンパクトが早まる正のフィードバックになっていた。(2) **ワークフロー無視**: 復元時にフェーズ状態が単なる ToDo として注入されるだけで「dev-workflow 進行中・skill 経由で再開せよ・Approval Flow を守れ」の指示が無く、`/init-session` の「続きから作業する」も「そのまま作業に入る」となっていたため、復元後に dev-workflow を飛ばして直接着手しがちだった。両症状の根は同じ「復元時に構造化された現在地が無い」ことであり、`現在地:` の 1 行フィールドを新設して構造化することで、再注入を小さく保ちつつワークフロー復帰を確実化する。
@@ -0,0 +1,32 @@
1
+ # Source: https://github.com/numpy/numpy/blob/main/LICENSE.txt
2
+
3
+ Copyright (c) 2005-2024, NumPy Developers.
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are
8
+ met:
9
+
10
+ * Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+
13
+ * Redistributions in binary form must reproduce the above
14
+ copyright notice, this list of conditions and the following
15
+ disclaimer in the documentation and/or other materials provided
16
+ with the distribution.
17
+
18
+ * Neither the name of the NumPy Developers nor the names of any
19
+ contributors may be used to endorse or promote products derived
20
+ from this software without specific prior written permission.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-code-conductor
3
- Version: 2.36.0
3
+ Version: 2.38.0
4
4
  Summary: Multi-agent orchestration framework for Claude Code with Codex/Cursor adapters (C3)
5
5
  Project-URL: Homepage, https://github.com/satoh-y-0323/claude-code-conductor
6
6
  Project-URL: Repository, https://github.com/satoh-y-0323/claude-code-conductor
@@ -37,9 +37,9 @@ Classifier: Programming Language :: Python :: 3.11
37
37
  Classifier: Programming Language :: Python :: 3.12
38
38
  Classifier: Topic :: Software Development
39
39
  Requires-Python: >=3.10
40
- Requires-Dist: chroma-hnswlib>=0.7.6
41
40
  Requires-Dist: duckdb>=0.10
42
41
  Requires-Dist: fastembed>=0.8.0
42
+ Requires-Dist: numpy>=1.22
43
43
  Requires-Dist: pyyaml>=6.0
44
44
  Provides-Extra: notify
45
45
  Requires-Dist: windows-toasts>=1.0; (sys_platform == 'win32') and extra == 'notify'
@@ -184,7 +184,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
184
184
  | `/doc` | ドキュメントをヒアリングして生成(mermaid 図・README・API 仕様書など) |
185
185
  | `/mcp-config` | MCP サーバーの追加・一覧・削除(プロジェクトスコープ) |
186
186
  | `/extract-lib` | 複数プロジェクトのコードを横断解析し、共通処理をライブラリとして設計・生成 |
187
- | `/recall` | 過去のセッション・レポート・パターンから類似情報を意味検索(HNSW + 多言語 embedding) |
187
+ | `/recall` | 過去のセッション・レポート・パターンから類似情報を意味検索(numpy ベクトル検索 + 多言語 embedding) |
188
188
  | `/brainstorm` | 仕事・設計の相談を、資料(PDF/画像)を読み込んだ上で気軽に発散・壁打ち。視点・選択肢・論点を増やす方向(grill=詰めるとは逆)(v2.29.0〜) |
189
189
 
190
190
  ### ターミナルで使う `c3` CLI(PyPI インストール時)
@@ -200,7 +200,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
200
200
  | `c3 plan validate <plan-report>` | plan-report の YAML フロントマターと agent 存在を検証 |
201
201
  | `c3 plan waves <plan-report>` | plan-report の wave 分解結果を JSON で出力 |
202
202
  | `c3 recall search "<query>"` または `c3 recall "<query>"` | `.claude/memory/sessions/` 等から類似チャンクを意味検索 |
203
- | `c3 recall rebuild [--force]` | HNSW インデックスを再構築(初回は fastembed が ~220MB のモデルを取得) |
203
+ | `c3 recall rebuild [--force]` | numpy ベクトル検索インデックスを再構築(初回は fastembed が ~220MB のモデルを取得) |
204
204
  | `c3 recall stats` | チャンク数・モデル名・最終 rebuild 日時を表示 |
205
205
  | `c3 tier stats` | tier-routing(複雑度に応じた Tier 自動ルーティング)の学習データ・Tier 別コスト・現在の routing パラメータ(λ/ε/escalation・v2.27.0〜)を表形式で表示(`--json` で機械可読出力・`--recent N` で直近 outcome 件数指定)。ルーティング挙動は環境変数 `C3_TIER_COST_LAMBDA`(cost-weighted の重み・`0 ≤ λ ≤ 5`・v2.26.0〜、上限拡張 v2.27.0)/ `C3_TIER_EPSILON` / `C3_ESCALATION_THRESHOLD` で調整可([CLI リファレンス](https://satoh-y-0323.github.io/claude-code-conductor/cli-reference/)参照) |
206
206
 
@@ -214,6 +214,10 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
214
214
 
215
215
  `/start` 実行後は、各フェーズの承認を進めるだけで最後まで自動的に流れます。
216
216
 
217
+ > **動線は C3 が自動で補完します(v2.38.0〜):** 上の 3 段階の順序を覚えていなくても構いません。`/start` を実行すれば、当該セッションで `/init-session` が未実行なら自動的に先行実行し、さらにプロジェクト規約が未設定(初回)なら `/setup` を自動的に連鎖実行してから開発に入ります。`/init-session` 単体実行でも、規約未設定なら `/setup` を自動実行します。初回導入でも継続作業でも、最初に打つコマンドが `/start` でも `/init-session` でも正しい順序に揃います。
218
+ >
219
+ > なお「自動」はコマンドを覚えていなくても**連鎖起動される**という意味で、`/setup` 自体は使用言語・規約のヒアリング(数問)を行うため、初回はそれに回答する必要があります(規約設定を無人でスキップするわけではありません)。
220
+
217
221
  > **公式コマンドとの名前衝突について:** C3 のスキル名は Claude Code 公式コマンドと重複しないよう設計しています。`/review-phase`(≠ 公式 `/code-review` / `/review`)、`/mcp-config`(≠ 公式 `/mcp`)はこの方針に基づく命名です。公式コマンドが追加された場合は衝突回避のために本フレームワークの skill 名を変更することがあります(v2.15.1 で `/code-review` → `/review-phase` に変更しました)。
218
222
 
219
223
  ---
@@ -420,7 +424,7 @@ C3 はセッションをまたいで作業状態を記憶します。
420
424
 
421
425
  | 依存 | ライセンス | 用途 |
422
426
  |---|---|---|
423
- | [chroma-hnswlib](https://github.com/chroma-core/hnswlib) | Apache-2.0 | HNSW 近傍検索インデックス |
427
+ | [numpy](https://github.com/numpy/numpy) | BSD-3-Clause | recall のベクトル類似度検索(cosine ブルートフォース) |
424
428
  | [fastembed](https://github.com/qdrant/fastembed) | Apache-2.0 | embedding 生成ランタイム(ONNX ベース) |
425
429
  | [onnxruntime](https://github.com/microsoft/onnxruntime) | MIT | fastembed の推論バックエンド |
426
430
  | [sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2](https://huggingface.co/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2) | Apache-2.0 | 多言語 embedding モデル(384 次元・約 220MB・約 50 言語対応) |
@@ -137,7 +137,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
137
137
  | `/doc` | ドキュメントをヒアリングして生成(mermaid 図・README・API 仕様書など) |
138
138
  | `/mcp-config` | MCP サーバーの追加・一覧・削除(プロジェクトスコープ) |
139
139
  | `/extract-lib` | 複数プロジェクトのコードを横断解析し、共通処理をライブラリとして設計・生成 |
140
- | `/recall` | 過去のセッション・レポート・パターンから類似情報を意味検索(HNSW + 多言語 embedding) |
140
+ | `/recall` | 過去のセッション・レポート・パターンから類似情報を意味検索(numpy ベクトル検索 + 多言語 embedding) |
141
141
  | `/brainstorm` | 仕事・設計の相談を、資料(PDF/画像)を読み込んだ上で気軽に発散・壁打ち。視点・選択肢・論点を増やす方向(grill=詰めるとは逆)(v2.29.0〜) |
142
142
 
143
143
  ### ターミナルで使う `c3` CLI(PyPI インストール時)
@@ -153,7 +153,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
153
153
  | `c3 plan validate <plan-report>` | plan-report の YAML フロントマターと agent 存在を検証 |
154
154
  | `c3 plan waves <plan-report>` | plan-report の wave 分解結果を JSON で出力 |
155
155
  | `c3 recall search "<query>"` または `c3 recall "<query>"` | `.claude/memory/sessions/` 等から類似チャンクを意味検索 |
156
- | `c3 recall rebuild [--force]` | HNSW インデックスを再構築(初回は fastembed が ~220MB のモデルを取得) |
156
+ | `c3 recall rebuild [--force]` | numpy ベクトル検索インデックスを再構築(初回は fastembed が ~220MB のモデルを取得) |
157
157
  | `c3 recall stats` | チャンク数・モデル名・最終 rebuild 日時を表示 |
158
158
  | `c3 tier stats` | tier-routing(複雑度に応じた Tier 自動ルーティング)の学習データ・Tier 別コスト・現在の routing パラメータ(λ/ε/escalation・v2.27.0〜)を表形式で表示(`--json` で機械可読出力・`--recent N` で直近 outcome 件数指定)。ルーティング挙動は環境変数 `C3_TIER_COST_LAMBDA`(cost-weighted の重み・`0 ≤ λ ≤ 5`・v2.26.0〜、上限拡張 v2.27.0)/ `C3_TIER_EPSILON` / `C3_ESCALATION_THRESHOLD` で調整可([CLI リファレンス](https://satoh-y-0323.github.io/claude-code-conductor/cli-reference/)参照) |
159
159
 
@@ -167,6 +167,10 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
167
167
 
168
168
  `/start` 実行後は、各フェーズの承認を進めるだけで最後まで自動的に流れます。
169
169
 
170
+ > **動線は C3 が自動で補完します(v2.38.0〜):** 上の 3 段階の順序を覚えていなくても構いません。`/start` を実行すれば、当該セッションで `/init-session` が未実行なら自動的に先行実行し、さらにプロジェクト規約が未設定(初回)なら `/setup` を自動的に連鎖実行してから開発に入ります。`/init-session` 単体実行でも、規約未設定なら `/setup` を自動実行します。初回導入でも継続作業でも、最初に打つコマンドが `/start` でも `/init-session` でも正しい順序に揃います。
171
+ >
172
+ > なお「自動」はコマンドを覚えていなくても**連鎖起動される**という意味で、`/setup` 自体は使用言語・規約のヒアリング(数問)を行うため、初回はそれに回答する必要があります(規約設定を無人でスキップするわけではありません)。
173
+
170
174
  > **公式コマンドとの名前衝突について:** C3 のスキル名は Claude Code 公式コマンドと重複しないよう設計しています。`/review-phase`(≠ 公式 `/code-review` / `/review`)、`/mcp-config`(≠ 公式 `/mcp`)はこの方針に基づく命名です。公式コマンドが追加された場合は衝突回避のために本フレームワークの skill 名を変更することがあります(v2.15.1 で `/code-review` → `/review-phase` に変更しました)。
171
175
 
172
176
  ---
@@ -373,7 +377,7 @@ C3 はセッションをまたいで作業状態を記憶します。
373
377
 
374
378
  | 依存 | ライセンス | 用途 |
375
379
  |---|---|---|
376
- | [chroma-hnswlib](https://github.com/chroma-core/hnswlib) | Apache-2.0 | HNSW 近傍検索インデックス |
380
+ | [numpy](https://github.com/numpy/numpy) | BSD-3-Clause | recall のベクトル類似度検索(cosine ブルートフォース) |
377
381
  | [fastembed](https://github.com/qdrant/fastembed) | Apache-2.0 | embedding 生成ランタイム(ONNX ベース) |
378
382
  | [onnxruntime](https://github.com/microsoft/onnxruntime) | MIT | fastembed の推論バックエンド |
379
383
  | [sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2](https://huggingface.co/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2) | Apache-2.0 | 多言語 embedding モデル(384 次元・約 220MB・約 50 言語対応) |
@@ -26,7 +26,7 @@ classifiers = [
26
26
  dependencies = [
27
27
  "PyYAML>=6.0",
28
28
  "duckdb>=0.10",
29
- "chroma-hnswlib>=0.7.6",
29
+ "numpy>=1.22",
30
30
  "fastembed>=0.8.0",
31
31
  ]
32
32
 
@@ -1,3 +1,3 @@
1
1
  """Claude Code Conductor (C3) - multi-agent orchestration framework for Claude Code."""
2
2
 
3
- __version__ = "2.36.0"
3
+ __version__ = "2.38.0"
@@ -2,13 +2,15 @@
2
2
 
3
3
  Subcommands:
4
4
 
5
- * ``c3 recall search <query>`` — query the HNSW index for relevant chunks.
5
+ * ``c3 recall search <query>`` — query the numpy cosine index for relevant chunks.
6
6
  * ``c3 recall rebuild`` — re-embed every source file and rewrite the index.
7
7
  * ``c3 recall stats`` — report what's in the index.
8
8
 
9
- The heavy dependencies (``fastembed``, ``hnswlib``) are imported lazily
10
- inside the handlers so that ``c3 --help`` and unrelated subcommands stay
11
- fast even when the embedding model has not yet been downloaded.
9
+ The heavy dependency (``fastembed``) is imported lazily inside the handlers
10
+ so that ``c3 --help`` and unrelated subcommands stay fast even when the
11
+ embedding model has not yet been downloaded. ``numpy`` is imported eagerly
12
+ at module level (``import numpy as np`` in ``recall_index.py``) and is
13
+ always available when this module is loaded.
12
14
  """
13
15
 
14
16
  from __future__ import annotations
@@ -296,13 +298,22 @@ def _handle_rebuild(args: argparse.Namespace) -> int:
296
298
  dim=embedder.dim,
297
299
  )
298
300
  try:
299
- candidate.load()
300
- old_index = candidate
301
+ # [M-01] load() の戻り値を確認し、False なら増分不可として全再構築する。
302
+ loaded = candidate.load()
303
+ if loaded:
304
+ old_index = candidate
305
+ else:
306
+ print(
307
+ "[recall] 既存 index を読めず増分不可・全再構築にフォールバック:"
308
+ " load() returned False",
309
+ file=sys.stderr,
310
+ )
311
+ old_index = None
301
312
  except Exception as exc:
302
313
  # CR-E-002/SR-R-004: log the failure reason so operators can diagnose
303
314
  # corrupt or mismatched index files. Exception message is intentionally
304
315
  # omitted (type name only) to avoid leaking internal state — consistent
305
- # with the SR-R-001 policy used in _hnsw_save/_hnsw_load.
316
+ # with the SR-R-001 policy used in RecallIndex.load().
306
317
  print(
307
318
  f"[recall] 既存 index を読めず増分不可・全再構築にフォールバック: {type(exc).__name__}",
308
319
  file=sys.stderr,