claude-code-conductor 2.80.0__tar.gz → 2.81.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 (276) hide show
  1. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/developer.md +0 -5
  2. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/wt_developer.md +0 -5
  3. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/docs/parallel-agents-setup.md +7 -3
  4. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/docs/settings.json.md +40 -0
  5. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/settings.json +14 -7
  6. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/ARCHITECTURE.md +7 -6
  7. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/CHANGELOG.md +21 -0
  8. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/PKG-INFO +9 -4
  9. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/README.md +8 -3
  10. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/__init__.py +1 -1
  11. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_settings_hooks_registration.py +425 -0
  12. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/.gitignore +0 -0
  13. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/CLAUDE.md +0 -0
  14. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/architect.md +0 -0
  15. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/code-reviewer.md +0 -0
  16. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/design-critic.md +0 -0
  17. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/doc-writer.md +0 -0
  18. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/interviewer.md +0 -0
  19. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/planner.md +0 -0
  20. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/project-setup.md +0 -0
  21. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/security-reviewer.md +0 -0
  22. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/systematic-debugger.md +0 -0
  23. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/tester.md +0 -0
  24. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/wt_systematic-debugger.md +0 -0
  25. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/agents/wt_tester.md +0 -0
  26. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/breaking-changes.txt +0 -0
  27. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/deletions.txt +0 -0
  28. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/docs/autonomous-mode-onboarding.md +0 -0
  29. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/docs/config-policy.md +0 -0
  30. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/docs/nul-boundary.md +0 -0
  31. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/docs/platform-adapters.md +0 -0
  32. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/_hook_utils.py +0 -0
  33. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/check_agent_invocation.py +0 -0
  34. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/consolidate_memory.py +0 -0
  35. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/patterns_guard.py +0 -0
  36. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/planner_check.py +0 -0
  37. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/post_tool.py +0 -0
  38. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/pre_compact.py +0 -0
  39. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/pre_tool.py +0 -0
  40. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/recall_autorebuild.py +0 -0
  41. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/recall_inject.py +0 -0
  42. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/report_contract_check.py +0 -0
  43. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/report_path_guard.py +0 -0
  44. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/restore_session.py +0 -0
  45. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/select_tier.py +0 -0
  46. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/session_mode_watch.py +0 -0
  47. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/session_start.py +0 -0
  48. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/session_stop.py +0 -0
  49. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/session_utils.py +0 -0
  50. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/statusline.py +0 -0
  51. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/stop.py +0 -0
  52. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/tier_autoapply.py +0 -0
  53. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/tier_gap_check.py +0 -0
  54. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/hooks/worktree_guard.py +0 -0
  55. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/memory/.gitkeep +0 -0
  56. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/memory/archive/.gitkeep +0 -0
  57. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/memory/sessions/.gitkeep +0 -0
  58. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/reports/.gitkeep +0 -0
  59. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/rules/judgment-principles.md +0 -0
  60. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/rules/promoted/index.md +0 -0
  61. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/autonomous-mode/SKILL.md +0 -0
  62. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/autonomous-mode/scripts/mode_line.py +0 -0
  63. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/brainstorm/SKILL.md +0 -0
  64. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/SKILL.md +0 -0
  65. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/references/c3-omission-declaration.md +0 -0
  66. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/references/code-review-checklist.md +0 -0
  67. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/references/design-critic-rubric.md +0 -0
  68. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/references/design-rubric.md +0 -0
  69. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/references/interview-rubric.md +0 -0
  70. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/references/plan-design-guidelines.md +0 -0
  71. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/references/reachability-map.md +0 -0
  72. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/references/record-protocol.md +0 -0
  73. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/references/security-review-checklist.md +0 -0
  74. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/scripts/detect_execution_verification.py +0 -0
  75. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/scripts/record_agent_outcome.py +0 -0
  76. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/scripts/record_review_decision.py +0 -0
  77. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/dev-workflow/scripts/review_hint_inject.py +0 -0
  78. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/develop/SKILL.md +0 -0
  79. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/doc/SKILL.md +0 -0
  80. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/extract-lib/SKILL.md +0 -0
  81. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/init-session/SKILL.md +0 -0
  82. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/init-session/scripts/session_guard.py +0 -0
  83. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/parallel-agents/SKILL.md +0 -0
  84. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/pattern-status/SKILL.md +0 -0
  85. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/promote-pattern/SKILL.md +0 -0
  86. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/recall/SKILL.md +0 -0
  87. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/report-timestamp/SKILL.md +0 -0
  88. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
  89. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/review-phase/SKILL.md +0 -0
  90. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/setup/SKILL.md +0 -0
  91. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/setup/reference.md +0 -0
  92. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/setup/templates/coding-standards-template.md +0 -0
  93. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/setup/templates/project-conventions-template.md +0 -0
  94. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/start/SKILL.md +0 -0
  95. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/skills/start/scripts/archive_reports.py +0 -0
  96. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/state/.gitkeep +0 -0
  97. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/state/setup_done.flag +0 -0
  98. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.claude/tmp/.gitkeep +0 -0
  99. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/.gitignore +0 -0
  100. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/LICENSE +0 -0
  101. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/LICENSES/fastembed-LICENSE +0 -0
  102. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/LICENSES/fastembed-NOTICE +0 -0
  103. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/LICENSES/numpy-LICENSE +0 -0
  104. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/LICENSES/onnxruntime-LICENSE +0 -0
  105. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/LICENSES/paraphrase-multilingual-MiniLM-L12-v2-LICENSE +0 -0
  106. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/hatch_build.py +0 -0
  107. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/pyproject.toml +0 -0
  108. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/__main__.py +0 -0
  109. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/_db_params.py +0 -0
  110. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/_excludes.py +0 -0
  111. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/_terminal.py +0 -0
  112. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/adapters.py +0 -0
  113. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/cli.py +0 -0
  114. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/cli_ask.py +0 -0
  115. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/cli_doctor.py +0 -0
  116. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/cli_init.py +0 -0
  117. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/cli_list.py +0 -0
  118. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/cli_metrics.py +0 -0
  119. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/cli_plan.py +0 -0
  120. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/cli_recall.py +0 -0
  121. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/cli_run.py +0 -0
  122. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/cli_tier.py +0 -0
  123. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/cli_update.py +0 -0
  124. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/db.py +0 -0
  125. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/embedding.py +0 -0
  126. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/gitutil.py +0 -0
  127. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/mcp_server.py +0 -0
  128. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/migrate.py +0 -0
  129. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/migrations/001_initial.sql +0 -0
  130. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/migrations/002_agent_cost_runs.sql +0 -0
  131. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/migrations/003_tier_cost.sql +0 -0
  132. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/migrations/004_agent_outcomes.sql +0 -0
  133. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/migrations/005_drop_agent_tier_bandit.sql +0 -0
  134. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/migrations/006_review_decisions_severity.sql +0 -0
  135. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/migrations/007_review_decisions_resolution.sql +0 -0
  136. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/migrations/008_drop_agent_runs.sql +0 -0
  137. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/migrations/README.md +0 -0
  138. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/migrations/__init__.py +0 -0
  139. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/paths.py +0 -0
  140. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/plan_validator.py +0 -0
  141. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/platforms.py +0 -0
  142. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/pricing.py +0 -0
  143. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/question.py +0 -0
  144. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/recall_chunker.py +0 -0
  145. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/recall_index.py +0 -0
  146. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/refgraph.py +0 -0
  147. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/src/c3/usage_ingester.py +0 -0
  148. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/__init__.py +0 -0
  149. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/_pre_compact_helpers.py +0 -0
  150. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/_sync_semantics.py +0 -0
  151. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/conftest.py +0 -0
  152. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/fixtures/usage/README.md +0 -0
  153. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/fixtures/usage/mainline.jsonl +0 -0
  154. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/fixtures/usage/subagents/agent-deadbeef.jsonl +0 -0
  155. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/fixtures/usage/subagents/agent-deadbeef.meta.json +0 -0
  156. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/__init__.py +0 -0
  157. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_check_agent_invocation.py +0 -0
  158. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_consolidate_memory.py +0 -0
  159. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_detect_execution_verification.py +0 -0
  160. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_hook_utils.py +0 -0
  161. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
  162. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_planner_check.py +0 -0
  163. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_planner_check_dev.py +0 -0
  164. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_post_tool.py +0 -0
  165. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_pre_tool.py +0 -0
  166. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_recall_autorebuild.py +0 -0
  167. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_recall_inject.py +0 -0
  168. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_record_agent_outcome.py +0 -0
  169. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_record_review_decision.py +0 -0
  170. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_report_path_guard.py +0 -0
  171. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_restore_session.py +0 -0
  172. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_review_hint_inject.py +0 -0
  173. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_select_tier.py +0 -0
  174. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_select_tier_escalation.py +0 -0
  175. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_session_start.py +0 -0
  176. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_session_stop.py +0 -0
  177. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_session_utils.py +0 -0
  178. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
  179. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_settings_tier_autoapply_registration.py +0 -0
  180. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_similarity_boost.py +0 -0
  181. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_statusline.py +0 -0
  182. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_statusline_reconfigure_guard.py +0 -0
  183. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_statusline_template_sync.py +0 -0
  184. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_sync_check.py +0 -0
  185. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_template_guard.py +0 -0
  186. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_tier_autoapply.py +0 -0
  187. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_tier_gap_check.py +0 -0
  188. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/hooks/test_tier_security_fixes.py +0 -0
  189. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/__init__.py +0 -0
  190. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/_skill_helpers.py +0 -0
  191. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_c3_omission_declaration.py +0 -0
  192. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_design_inventory_step.py +0 -0
  193. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_dev_workflow_no_task_type.py +0 -0
  194. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_e0_verification_exit.py +0 -0
  195. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_existing_test_policy.py +0 -0
  196. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_init_session_no_task_type.py +0 -0
  197. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_marker_compliance.py +0 -0
  198. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_parallel_agents_skill_tier.py +0 -0
  199. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_planner_lightweight.py +0 -0
  200. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_reachability_map.py +0 -0
  201. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_recall_skill.py +0 -0
  202. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_session_backlog_reconciliation.py +0 -0
  203. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_session_guard.py +0 -0
  204. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_setup_templates.py +0 -0
  205. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
  206. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_start_skill_new_flow.py +0 -0
  207. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
  208. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_adapters.py +0 -0
  209. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_archive_reports.py +0 -0
  210. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_audit_review_decisions.py +0 -0
  211. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_check_deletions.py +0 -0
  212. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_ci_workflows.py +0 -0
  213. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_claude_gitignore.py +0 -0
  214. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_ask.py +0 -0
  215. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_doctor.py +0 -0
  216. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_doctor_launcher.py +0 -0
  217. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_entry.py +0 -0
  218. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_init.py +0 -0
  219. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_init_symlink_guard.py +0 -0
  220. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_list.py +0 -0
  221. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_metrics.py +0 -0
  222. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_plan.py +0 -0
  223. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_recall.py +0 -0
  224. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_run.py +0 -0
  225. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_tier.py +0 -0
  226. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_update_breaking_changes.py +0 -0
  227. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_cli_update_deletions.py +0 -0
  228. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_db.py +0 -0
  229. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_db_connect_lint.py +0 -0
  230. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_docstring_consistency.py +0 -0
  231. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_embedding.py +0 -0
  232. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_excludes.py +0 -0
  233. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_extract_breaking_changes.py +0 -0
  234. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_gitutil.py +0 -0
  235. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_hooks_stdin_idiom.py +0 -0
  236. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_init_only_patterns.py +0 -0
  237. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_mcp_server_elicit.py +0 -0
  238. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_migrate.py +0 -0
  239. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_mode_line.py +0 -0
  240. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_no_bare_python_launcher.py +0 -0
  241. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_no_passonly_tests.py +0 -0
  242. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_nul_boundary_lint.py +0 -0
  243. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_paths.py +0 -0
  244. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_patterns_guard.py +0 -0
  245. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_permission_handler_removal.py +0 -0
  246. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_plan_validator.py +0 -0
  247. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_pre_compact.py +0 -0
  248. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_pre_tool_hook.py +0 -0
  249. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_precompact_additional.py +0 -0
  250. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_precompact_toctou_fixes.py +0 -0
  251. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_pricing.py +0 -0
  252. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_recall_chunker.py +0 -0
  253. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_recall_index.py +0 -0
  254. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_references_migration.py +0 -0
  255. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_refgraph.py +0 -0
  256. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_refgraph_query.py +0 -0
  257. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_refgraph_structural.py +0 -0
  258. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_report_contract_check.py +0 -0
  259. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_scripts_src_bootstrap.py +0 -0
  260. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_scripts_stdout_encoding.py +0 -0
  261. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_session_mode_watch.py +0 -0
  262. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_session_utils_additional.py +0 -0
  263. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_skill_no_builtin_conflict.py +0 -0
  264. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_start_skill_archive_contract.py +0 -0
  265. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_statusline.py +0 -0
  266. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_stop_additional.py +0 -0
  267. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_stop_agent_memory_warn.py +0 -0
  268. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_stop_hook.py +0 -0
  269. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_stop_precompact_fixes.py +0 -0
  270. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_sync_template_stop.py +0 -0
  271. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_template_pre_tool_hook.py +0 -0
  272. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_three_file_sync.py +0 -0
  273. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_usage_ingester.py +0 -0
  274. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_verify_wheel.py +0 -0
  275. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_worktree_guard.py +0 -0
  276. {claude_code_conductor-2.80.0 → claude_code_conductor-2.81.0}/tests/test_wt_agent_sync.py +0 -0
@@ -10,11 +10,6 @@ tools:
10
10
  - Bash
11
11
  - Glob
12
12
  - Grep
13
- - TodoWrite
14
- - TaskCreate
15
- - TaskUpdate
16
- - TaskList
17
- - TaskGet
18
13
  - Skill
19
14
  ---
20
15
 
@@ -11,11 +11,6 @@ tools:
11
11
  - Bash
12
12
  - Glob
13
13
  - Grep
14
- - TodoWrite
15
- - TaskCreate
16
- - TaskUpdate
17
- - TaskList
18
- - TaskGet
19
14
  - Skill
20
15
  ---
21
16
 
@@ -16,7 +16,7 @@ C3 の `parallel-agents` skill(`/develop` から間接起動)を快適に使
16
16
 
17
17
  | 項目 | 推奨値 | 既定との差 |
18
18
  |---|---|---|
19
- | Claude Code バージョン | **2.1.150 以降** | 古いと auto-cleanup 不在 |
19
+ | Claude Code バージョン | **2.1.295 以降**(C3 全体の下限。README の「前提条件」を参照。worktree auto-cleanup が安定するのは 2.1.150 以降で、下限を満たせばこちらも満たす) | 2.1.150 未満だと auto-cleanup 不在 |
20
20
  | `worktree.baseRef` | **`"head"`** | 既定は `"fresh"` (= `origin/<default>` から作成) |
21
21
 
22
22
  設定しなくても skill 自体は動くが、以下の問題に遭遇しやすくなる:
@@ -83,7 +83,11 @@ parallel-agents は「直近の修正を反映した worktree で並列実装さ
83
83
 
84
84
  ## Claude Code バージョン要件
85
85
 
86
- ### 2.1.150 以降を推奨する理由
86
+ ### 2.1.150 以降が必要な理由(worktree auto-cleanup)
87
+
88
+ C3 全体の下限は 2.1.295 であり(README の「前提条件」を参照)、下限を満たす環境では
89
+ 以下の 2.1.150 条件も常に満たされる。ここでは parallel-agents に関わる 2.1.150 の
90
+ 意味だけを説明する。
87
91
 
88
92
  `isolation: "worktree"` 付き Agent が **完了時に worktree を auto-cleanup** する
89
93
  挙動が安定したのが 2.1.150 系。これにより:
@@ -95,7 +99,7 @@ parallel-agents は「直近の修正を反映した worktree で並列実装さ
95
99
  2.1.150 未満の場合、SKILL.md Step 2-F-3 のフォールバック手順
96
100
  (`git worktree remove -f -f` + `git branch -D worktree-agent-<id>`)が
97
101
  **毎回必要** になる。dead worktree が積み重なるとパフォーマンス・容量への
98
- 影響もあるため、可能ならアップグレードを推奨する。
102
+ 影響もあるため、アップグレードを推奨する(C3 の下限 2.1.295 を満たせば不要)。
99
103
 
100
104
  ### auto-cleanup の信頼度
101
105
 
@@ -190,6 +190,7 @@ Claude Code のイベントに対してフックを登録する。マッチし
190
190
  | `hooks[].type` | フックの種類(下記参照) |
191
191
  | `hooks[].if` | フックレベルの追加フィルタ。許可ルール構文(`Bash(git *)`、`Edit(*.ts)` 等)。ツールイベントのみ有効 |
192
192
  | `hooks[].timeout` | タイムアウト秒数。デフォルト 600秒(10分) |
193
+ | `hooks[].onFailure` | hook 自体の失敗時の扱い。`"continue"`(既定)/ `"block"`。command / http hook で使える。Claude Code 2.1.295 以降(下記 `command` と「終了コードによる動作」を参照) |
193
194
 
194
195
  ---
195
196
 
@@ -203,6 +204,21 @@ Claude Code のイベントに対してフックを登録する。マッチし
203
204
  { "type": "command", "command": "python script.py" }
204
205
  ```
205
206
 
207
+ | フィールド | 説明 |
208
+ |---|---|
209
+ | `command` | 実行するコマンド |
210
+ | `args` | 引数の配列。指定すると `command` をシェルを介さず実行する(exec 形式。C3 の登録はすべてこの形式) |
211
+ | `onFailure` | hook 自体が失敗したとき(起動できない・タイムアウト・0 と 2 以外の終了コード)の扱い。`"continue"`(既定)は失敗を通知して続行する。`"block"` は exit 2 と同じ扱いでアクションをブロックする。Claude Code 2.1.295 以降 |
212
+
213
+ ```json
214
+ {
215
+ "type": "command",
216
+ "command": "c3",
217
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/pre_tool.py"],
218
+ "onFailure": "block"
219
+ }
220
+ ```
221
+
206
222
  #### `http`
207
223
 
208
224
  イベントデータを HTTP エンドポイントに POST する。
@@ -252,8 +268,32 @@ Claude Code のイベントに対してフックを登録する。マッチし
252
268
  | `2` | アクションをブロック。stderr の内容が Claude へのフィードバックになる。ブロック不可イベントでは stderr をユーザーに表示し続行 |
253
269
  | その他 | 続行。トランスクリプトに `<hook name> hook error` 通知 + stderr 1行目を表示 |
254
270
 
271
+ > **`onFailure: "block"` のエントリ**: 0 と 2 以外の終了コード・起動失敗・タイムアウトは exit 2 と同じ扱い(アクションをブロックし、stderr が Claude へのフィードバックになる)。このときエラーには `PreToolUse:Bash hook error: [<hook のコマンド>]: failed; blocking because onFailure is "block"` のように、イベント名・ツール名・失敗した hook のコマンドが出る。onFailure 未指定(`"continue"`)では上表「その他」のとおり続行する。
272
+
255
273
  > **注意**: exit 2 と JSON 出力を混在させないこと。Claude Code は exit 2 時に JSON を無視する。
256
274
 
275
+ ### C3 の `onFailure` 方針
276
+
277
+ (i) **onFailure: "block" を付けている hook**(`.claude/settings.json` の PreToolUse・7 エントリ):
278
+
279
+ | hook | matcher |
280
+ |---|---|
281
+ | `pre_tool.py` | `Bash` |
282
+ | `worktree_guard.py` | `Write` / `Edit` |
283
+ | `patterns_guard.py` | `Write` / `Edit` |
284
+ | `report_path_guard.py` | `Write` |
285
+ | `check_agent_invocation.py` | `Agent` |
286
+
287
+ (ii) **判断基準**: 安全境界(破壊的コマンド・secret・書き込み先・reviewer の起動条件などの関所)の PreToolUse hook に付ける。hook 自体が失敗したときに関所を素通りさせないため。利便用の hook(例: `tier_autoapply.py`)や、失敗時に全操作を止めてしまう hook(UserPromptSubmit 系など)には付けない。PostToolUse は実行後のため、Stop 系は効果が無いため付けない。対象外の hook には `"continue"` も書かず、キー自体を省略する。
288
+
289
+ (ii-a) **onFailure が拾う範囲**: 拾うのは hook 自体の失敗(起動不能・0 と 2 以外の終了コード・タイムアウト・不正な JSON 出力)である。hook が意図して exit 0 で通す入力(stdin の JSON の解析失敗など)は失敗ではないため対象外で、そのまま通過する。
290
+
291
+ (ii-b) **block 対象に hook を加えるときの確認**: block 時は stderr 全文が Claude に渡るため、その hook が例外時に stderr へ機密(トークン・環境変数・ファイル内容など)を出さないことを確認する。
292
+
293
+ (iii) **自分の hook に付けるかの指針**: `settings.local.json` 等に登録した自分の PreToolUse hook が「失敗時に通すと困る関所」なら `"block"` を付け、「失敗しても作業を続けたい補助」なら付けない。
294
+
295
+ 分類の正本は C3 開発リポジトリの `tests/test_settings_hooks_registration.py`(配布物には含まれない)にある閉じた分類表で、配布元が `.claude/settings.json` の PreToolUse の全 hook を「block 対象」か「非対象」に分類して機械検査している。`c3 run` で起動される hook は、`c3` が見つからない(venv が activate されていない等)と起動に失敗するため、上記の hook が付いたツール(Bash / Write / Edit / Agent)がブロックされる。対処は README の「前提条件」を参照。
296
+
257
297
  ---
258
298
 
259
299
  ### 構造化 JSON 出力(exit 0 + stdout)
@@ -70,7 +70,8 @@
70
70
  {
71
71
  "type": "command",
72
72
  "command": "c3",
73
- "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/pre_tool.py"]
73
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/pre_tool.py"],
74
+ "onFailure": "block"
74
75
  }
75
76
  ]
76
77
  },
@@ -80,17 +81,20 @@
80
81
  {
81
82
  "type": "command",
82
83
  "command": "c3",
83
- "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/worktree_guard.py"]
84
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/worktree_guard.py"],
85
+ "onFailure": "block"
84
86
  },
85
87
  {
86
88
  "type": "command",
87
89
  "command": "c3",
88
- "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/patterns_guard.py"]
90
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/patterns_guard.py"],
91
+ "onFailure": "block"
89
92
  },
90
93
  {
91
94
  "type": "command",
92
95
  "command": "c3",
93
- "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/report_path_guard.py"]
96
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/report_path_guard.py"],
97
+ "onFailure": "block"
94
98
  }
95
99
  ]
96
100
  },
@@ -100,12 +104,14 @@
100
104
  {
101
105
  "type": "command",
102
106
  "command": "c3",
103
- "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/worktree_guard.py"]
107
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/worktree_guard.py"],
108
+ "onFailure": "block"
104
109
  },
105
110
  {
106
111
  "type": "command",
107
112
  "command": "c3",
108
- "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/patterns_guard.py"]
113
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/patterns_guard.py"],
114
+ "onFailure": "block"
109
115
  }
110
116
  ]
111
117
  },
@@ -115,7 +121,8 @@
115
121
  {
116
122
  "type": "command",
117
123
  "command": "c3",
118
- "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/check_agent_invocation.py"]
124
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/check_agent_invocation.py"],
125
+ "onFailure": "block"
119
126
  },
120
127
  {
121
128
  "type": "command",
@@ -112,11 +112,11 @@ A ヒアリング → B 設計 → C 計画 → D 実装(TDD) → E レビュー
112
112
  | `SessionStart` | (全て) | `session_start.py` | file-history クリア・sandbox 有効化・`c3.db` 初期化 |
113
113
  | `UserPromptSubmit` | (全て) | `select_tier.py` | 複雑度判定 → Tier ルーティング推奨([§4](#4-知能基盤)) |
114
114
  | `UserPromptSubmit` | (全て) | `recall_inject.py` | 過去類似情報を意味検索しコンテキスト注入([§4](#4-知能基盤)) |
115
- | `PreToolUse` | `Bash` | `pre_tool.py` | 破壊的コマンド(`rm -rf` 等)ブロック・secret スキャン |
116
- | `PreToolUse` | `Write` / `Edit` | `worktree_guard.py` | worktree 外への書き込み禁止(`PO_WORKTREE_GUARD=1` 設定時のみ作動。parallel-agents が並列実行時に有効化) |
117
- | `PreToolUse` | `Write` / `Edit` | `patterns_guard.py` | patterns.json への直接編集を block(許可フラグ TTL 600 秒・C3_PATTERNS_GUARD_DISABLE=1 で無効化) |
118
- | `PreToolUse` | `Write` | `report_path_guard.py` | レポート 9 prefix の書き先を検査し逸脱を block(封じ込め: `.claude/reports/` 直下の二層判定 / 上書き: タイムスタンプ形式の既存ファイル / 形式: strict-4 の非タイムスタンプ命名。`C3_REPORT_GUARD_DISABLE=1` で無効化) |
119
- | `PreToolUse` | `Agent` | `check_agent_invocation.py` | エージェント起動の検査 |
115
+ | `PreToolUse` | `Bash` | `pre_tool.py` | 破壊的コマンド(`rm -rf` 等)ブロック・secret スキャン(`onFailure: "block"`: hook 自体の失敗時もブロックに倒す) |
116
+ | `PreToolUse` | `Write` / `Edit` | `worktree_guard.py` | worktree 外への書き込み禁止(`PO_WORKTREE_GUARD=1` 設定時のみ作動。parallel-agents が並列実行時に有効化)(`onFailure: "block"`: hook 自体の失敗時もブロックに倒す) |
117
+ | `PreToolUse` | `Write` / `Edit` | `patterns_guard.py` | patterns.json への直接編集を block(許可フラグ TTL 600 秒・C3_PATTERNS_GUARD_DISABLE=1 で無効化)(`onFailure: "block"`: hook 自体の失敗時もブロックに倒す) |
118
+ | `PreToolUse` | `Write` | `report_path_guard.py` | レポート 9 prefix の書き先を検査し逸脱を block(封じ込め: `.claude/reports/` 直下の二層判定 / 上書き: タイムスタンプ形式の既存ファイル / 形式: strict-4 の非タイムスタンプ命名。`C3_REPORT_GUARD_DISABLE=1` で無効化)(`onFailure: "block"`: hook 自体の失敗時もブロックに倒す) |
119
+ | `PreToolUse` | `Agent` | `check_agent_invocation.py` | エージェント起動の検査(`onFailure: "block"`: hook 自体の失敗時もブロックに倒す) |
120
120
  | `PreToolUse` | `Agent` | `tier_autoapply.py` | 推奨 Tier の `model:` 自動注入(既存登録の表への追随・乖離是正) |
121
121
  | `PostToolUse` | `Write` / `Edit` | `post_tool.py` | skills 変更通知・品質パターン(TODO 等)スキャン |
122
122
  | `PostToolUse` | `Write` / `Edit` | `planner_check.py` | plan-report の YAML/タイムスタンプ/reviewer 規約検査 |
@@ -137,7 +137,8 @@ A ヒアリング → B 設計 → C 計画 → D 実装(TDD) → E レビュー
137
137
  ### 設計原則
138
138
 
139
139
  - **非ブロッキング**: 観測系 hook は失敗しても `exit 0` でセッションを止めない(DB 不在・index 不在でも本体は動く)。
140
- - **`exit 2` は自己修正用**: PostToolUse の `exit 2` は LLM の system reminder に block error として surface される(「自動修正させたい違反」は exit 2、「ログだけ」は exit 0 + stderr で書き分ける)。例は配布元専用 `.dev/hooks/_planner_check.py` の R3。なお PreToolUse の `exit 2`(`check_agent_invocation.py` の R5 等)は動作をブロックするが LLM コンテキストへは注入されず、設計が異なる。
140
+ - **安全境界はブロックに倒す**: 安全境界の PreToolUse hook は、hook 自体の失敗時(起動できない・タイムアウト・想定外の終了コード)に `onFailure: "block"` でブロックに倒す(対象は上表の注記の 5 本・7 エントリ)。
141
+ - **`exit 2` は stderr を Claude に渡す**: PreToolUse の `exit 2`(`check_agent_invocation.py` の R5 等)は動作をブロックし、stderr がイベント名・ツール名・hook のコマンドを前置したツールのエラーとして Claude に渡る。PostToolUse の `exit 2` はツールの実行後に stderr を Claude に渡す(実行自体は取り消せない)。どちらも「Claude に読ませて直させたい違反」は exit 2、「ログだけ」は exit 0 + stderr で書き分ける。PostToolUse の例は配布元専用 `.dev/hooks/_planner_check.py` の R3。
141
142
  - **配布元専用 hook** は `.dev/hooks/` に分離(`settings.local.json` で登録・配布されない): `_template_guard.py` / `_sync_check.py` / `_pip_reinstall_reminder.py` / `_planner_check.py`。
142
143
 
143
144
  ---
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.81.0] - 2026-10-25
4
+
5
+ ### 変更
6
+
7
+ - **安全境界の PreToolUse hook 5 本に `onFailure: "block"` を付けた**。対象は `.claude/settings.json` の
8
+ `pre_tool.py`(Bash)・`worktree_guard.py`(Write / Edit)・`patterns_guard.py`(Write / Edit)・
9
+ `report_path_guard.py`(Write)・`check_agent_invocation.py`(Agent)の 7 エントリ。これまでは hook 自体が
10
+ 失敗したとき(起動できない・タイムアウト・想定外の終了コード)にツール呼び出しがそのまま通っていたが、
11
+ exit 2 と同じ扱いでブロックされるようになる。`tier_autoapply.py` と PreToolUse 以外の hook には付けていない。
12
+ この設定には **Claude Code 2.1.295 以降が必要**(README の「前提条件」に追記した)。venv を activate して
13
+ いないシェルから Claude Code を起動するなど `c3` を起動できない環境では、Bash / Write / Edit / Agent の
14
+ 呼び出しがブロックされる(README・`docs/getting-started.md` に症状と対処を記載した)。
15
+ `.claude/docs/settings.json.md` に `onFailure` の仕様と C3 の方針を、`ARCHITECTURE.md` の設計原則に
16
+ 安全境界の原則を追記し、PreToolUse の `exit 2` の stderr が Claude に渡らないとしていた誤った記述を直した
17
+ - **developer / wt_developer の tools から、提供されないツールを外した**。Claude Code v2.1.268 以降、
18
+ TodoWrite と Task 系ツール(TaskCreate / TaskUpdate / TaskList / TaskGet)は Opus 4.7 以前・Sonnet 4.6 以前・
19
+ Haiku 4.5 でしか提供されず、developer を opus(claude-opus-5-5)と haiku(claude-haiku-5-5)で起動して
20
+ 確認したところ 5 本とも提供されていなかった。TodoWrite は v2.80.0 以前から記載していたもの、
21
+ TaskCreate / TaskUpdate / TaskList / TaskGet は v2.80.0 で追加したもの。agent 本文はこれらのツールに
22
+ 依存しておらず、挙動は変わらない
23
+
3
24
  ## [2.80.0] - 2026-09-29
4
25
 
5
26
  ### 破壊的変更
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: claude-code-conductor
3
- Version: 2.80.0
3
+ Version: 2.81.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
@@ -264,6 +264,7 @@ C3 の `.claude/` はプロジェクトコードに一切触れません。既
264
264
  ### 前提条件
265
265
 
266
266
  - [Claude Code](https://claude.ai/code) がインストール済みでログインしていること
267
+ - Claude Code **2.1.295 以降**であること(C3 は安全境界の hook に `onFailure` を指定しており、この設定はこの版以降で使えます)
267
268
  - Python 3.10 以上がインストール済みであること
268
269
 
269
270
  **仮想環境(venv)の準備(推奨)**
@@ -286,7 +287,7 @@ source .venv/bin/activate
286
287
 
287
288
  venv に入れた場合の注意:
288
289
 
289
- - C3 の hook は `c3 run` で起動されるため、**Claude Code を起動するシェルでも同じ venv を activate してください**。activate されていないシェルから Claude Code を起動すると `c3` が見つからず、hook が動作しません
290
+ - C3 の hook は `c3 run` で起動されるため、**Claude Code を起動するシェルでも同じ venv を activate してください**。activate されていないシェルから Claude Code を起動すると `c3` が見つかりません。このとき安全境界の hook(一覧は `.claude/docs/settings.json.md` の「C3 の `onFailure` 方針」を参照)は起動に失敗し、`onFailure: "block"` の設定によりツール呼び出しをブロックします。Bash / Write / Edit / Agent が使えなくなり、エラーには `PreToolUse:Bash hook error: [<hook のコマンド>]: failed; blocking because onFailure is "block"` のように、イベント名・ツール名・失敗した hook のコマンドが表示されます(それ以外の hook は動作しないまま処理が続きます)。この症状が出たら Claude Code を終了し、venv を activate したシェルで `c3 doctor` を実行して `c3` が解決されることを確認してから、そのシェルで Claude Code を起動し直してください
290
291
  - venv を使わずグローバルに使いたい場合は [pipx](https://pipx.pypa.io/) が代替になります: `pipx install claude-code-conductor`
291
292
  - インストール後は、**Claude Code を起動するのと同じシェルで** `c3 doctor` を実行し、`c3` が PATH で解決されることを確認してください(`c3 doctor` が検査するのは実行中シェルの PATH です。別のシェルで実行しても、Claude Code の hook が起動される文脈は再現できません)
292
293
 
@@ -298,7 +299,11 @@ venv に入れた場合の注意:
298
299
  pip install claude-code-conductor
299
300
  ```
300
301
 
301
- > このコマンドが PEP 668(externally-managed-environment)で拒否される場合や、インストール後に hook が動作しない場合は、[前提条件](#前提条件)の venv 手順(activate するシェルの注意点を含む)を参照してください。
302
+ > 次のいずれかの場合は、[前提条件](#前提条件)の venv 手順(activate するシェルの注意点を含む)を参照してください。
303
+ >
304
+ > - このコマンドが PEP 668(externally-managed-environment)で拒否される
305
+ > - インストール後に hook が動作しない
306
+ > - Bash / Write / Edit / Agent の呼び出しが `blocking because onFailure is "block"` を含むエラーでブロックされる
302
307
 
303
308
  **2. プロジェクトに `.claude/` を展開する**
304
309
 
@@ -487,7 +492,7 @@ TDD を伴う機能実装は、planner が「test- → impl- → confirm-」の
487
492
 
488
493
  | 項目 | 推奨値 | 理由 |
489
494
  |---|---|---|
490
- | Claude Code バージョン | 2.1.150 以降 | worktree auto-cleanup の安定動作 |
495
+ | Claude Code バージョン | 2.1.295 以降(C3 全体の下限。[前提条件](#前提条件)を参照) | 下限は `onFailure` の利用に必要。うち worktree auto-cleanup が安定するのは 2.1.150 以降で、2.1.295 以降ならこの条件も満たす |
491
496
  | `worktree.baseRef` | `"head"` | push 前のローカルコミットを worktree に含める |
492
497
 
493
498
  最小設定例:
@@ -219,6 +219,7 @@ C3 の `.claude/` はプロジェクトコードに一切触れません。既
219
219
  ### 前提条件
220
220
 
221
221
  - [Claude Code](https://claude.ai/code) がインストール済みでログインしていること
222
+ - Claude Code **2.1.295 以降**であること(C3 は安全境界の hook に `onFailure` を指定しており、この設定はこの版以降で使えます)
222
223
  - Python 3.10 以上がインストール済みであること
223
224
 
224
225
  **仮想環境(venv)の準備(推奨)**
@@ -241,7 +242,7 @@ source .venv/bin/activate
241
242
 
242
243
  venv に入れた場合の注意:
243
244
 
244
- - C3 の hook は `c3 run` で起動されるため、**Claude Code を起動するシェルでも同じ venv を activate してください**。activate されていないシェルから Claude Code を起動すると `c3` が見つからず、hook が動作しません
245
+ - C3 の hook は `c3 run` で起動されるため、**Claude Code を起動するシェルでも同じ venv を activate してください**。activate されていないシェルから Claude Code を起動すると `c3` が見つかりません。このとき安全境界の hook(一覧は `.claude/docs/settings.json.md` の「C3 の `onFailure` 方針」を参照)は起動に失敗し、`onFailure: "block"` の設定によりツール呼び出しをブロックします。Bash / Write / Edit / Agent が使えなくなり、エラーには `PreToolUse:Bash hook error: [<hook のコマンド>]: failed; blocking because onFailure is "block"` のように、イベント名・ツール名・失敗した hook のコマンドが表示されます(それ以外の hook は動作しないまま処理が続きます)。この症状が出たら Claude Code を終了し、venv を activate したシェルで `c3 doctor` を実行して `c3` が解決されることを確認してから、そのシェルで Claude Code を起動し直してください
245
246
  - venv を使わずグローバルに使いたい場合は [pipx](https://pipx.pypa.io/) が代替になります: `pipx install claude-code-conductor`
246
247
  - インストール後は、**Claude Code を起動するのと同じシェルで** `c3 doctor` を実行し、`c3` が PATH で解決されることを確認してください(`c3 doctor` が検査するのは実行中シェルの PATH です。別のシェルで実行しても、Claude Code の hook が起動される文脈は再現できません)
247
248
 
@@ -253,7 +254,11 @@ venv に入れた場合の注意:
253
254
  pip install claude-code-conductor
254
255
  ```
255
256
 
256
- > このコマンドが PEP 668(externally-managed-environment)で拒否される場合や、インストール後に hook が動作しない場合は、[前提条件](#前提条件)の venv 手順(activate するシェルの注意点を含む)を参照してください。
257
+ > 次のいずれかの場合は、[前提条件](#前提条件)の venv 手順(activate するシェルの注意点を含む)を参照してください。
258
+ >
259
+ > - このコマンドが PEP 668(externally-managed-environment)で拒否される
260
+ > - インストール後に hook が動作しない
261
+ > - Bash / Write / Edit / Agent の呼び出しが `blocking because onFailure is "block"` を含むエラーでブロックされる
257
262
 
258
263
  **2. プロジェクトに `.claude/` を展開する**
259
264
 
@@ -442,7 +447,7 @@ TDD を伴う機能実装は、planner が「test- → impl- → confirm-」の
442
447
 
443
448
  | 項目 | 推奨値 | 理由 |
444
449
  |---|---|---|
445
- | Claude Code バージョン | 2.1.150 以降 | worktree auto-cleanup の安定動作 |
450
+ | Claude Code バージョン | 2.1.295 以降(C3 全体の下限。[前提条件](#前提条件)を参照) | 下限は `onFailure` の利用に必要。うち worktree auto-cleanup が安定するのは 2.1.150 以降で、2.1.295 以降ならこの条件も満たす |
446
451
  | `worktree.baseRef` | `"head"` | push 前のローカルコミットを worktree に含める |
447
452
 
448
453
  最小設定例:
@@ -1,3 +1,3 @@
1
1
  """Claude Code Conductor (C3) - multi-agent orchestration framework for Claude Code."""
2
2
 
3
- __version__ = "2.80.0"
3
+ __version__ = "2.81.0"