claude-code-conductor 2.49.0__tar.gz → 2.51.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 (226) hide show
  1. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/developer.md +1 -1
  2. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/wt_developer.md +1 -1
  3. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/breaking-changes.txt +1 -0
  4. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/docs/config-policy.md +25 -0
  5. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/docs/platform-adapters.md +12 -1
  6. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/settings.json +46 -46
  7. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/dev-workflow/SKILL.md +31 -31
  8. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/dev-workflow/scripts/record_agent_outcome.py +1 -1
  9. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/init-session/SKILL.md +2 -2
  10. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/mcp-config/SKILL.md +2 -2
  11. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/parallel-agents/SKILL.md +33 -13
  12. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/report-timestamp/SKILL.md +2 -2
  13. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/setup/SKILL.md +1 -1
  14. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/start/SKILL.md +1 -1
  15. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/CHANGELOG.md +45 -0
  16. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/PKG-INFO +1 -1
  17. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/__init__.py +1 -1
  18. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/adapters.py +2 -2
  19. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/cli.py +24 -1
  20. claude_code_conductor-2.51.0/src/c3/cli_doctor.py +450 -0
  21. claude_code_conductor-2.51.0/src/c3/cli_run.py +171 -0
  22. claude_code_conductor-2.51.0/tests/conftest.py +15 -0
  23. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_settings_tier_autoapply_registration.py +7 -7
  24. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_adapters.py +44 -1
  25. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_cli_doctor.py +168 -0
  26. claude_code_conductor-2.51.0/tests/test_cli_doctor_launcher.py +694 -0
  27. claude_code_conductor-2.51.0/tests/test_cli_run.py +452 -0
  28. claude_code_conductor-2.51.0/tests/test_no_bare_python_launcher.py +517 -0
  29. claude_code_conductor-2.49.0/src/c3/cli_doctor.py +0 -183
  30. claude_code_conductor-2.49.0/tests/conftest.py +0 -11
  31. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/CLAUDE.md +0 -0
  32. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/architect.md +0 -0
  33. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/code-reviewer.md +0 -0
  34. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/design-critic.md +0 -0
  35. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/doc-writer.md +0 -0
  36. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/interviewer.md +0 -0
  37. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/planner.md +0 -0
  38. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/project-setup.md +0 -0
  39. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/security-reviewer.md +0 -0
  40. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/systematic-debugger.md +0 -0
  41. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/tester.md +0 -0
  42. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/wt_systematic-debugger.md +0 -0
  43. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/agents/wt_tester.md +0 -0
  44. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/deletions.txt +0 -0
  45. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/docs/parallel-agents-setup.md +0 -0
  46. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/docs/settings.json.md +0 -0
  47. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/_hook_utils.py +0 -0
  48. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/check_agent_invocation.py +0 -0
  49. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/consolidate_memory.py +0 -0
  50. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/permission_handler.py +0 -0
  51. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/permission_handler_toast.py +0 -0
  52. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/planner_check.py +0 -0
  53. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/post_tool.py +0 -0
  54. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/pre_compact.py +0 -0
  55. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/pre_tool.py +0 -0
  56. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/recall_autorebuild.py +0 -0
  57. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/recall_inject.py +0 -0
  58. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/restore_session.py +0 -0
  59. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/select_tier.py +0 -0
  60. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/session_start.py +0 -0
  61. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/session_stop.py +0 -0
  62. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/session_utils.py +0 -0
  63. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/statusline.py +0 -0
  64. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/stop.py +0 -0
  65. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/tier_autoapply.py +0 -0
  66. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/tier_gap_check.py +0 -0
  67. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/hooks/worktree_guard.py +0 -0
  68. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/memory/.gitkeep +0 -0
  69. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/permission_rules.json +0 -0
  70. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/rules/promoted/index.md +0 -0
  71. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/brainstorm/SKILL.md +0 -0
  72. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/codex-review/SKILL.md +0 -0
  73. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/dev-workflow/references/code-review-checklist.md +0 -0
  74. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/dev-workflow/references/design-critic-rubric.md +0 -0
  75. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/dev-workflow/references/design-rubric.md +0 -0
  76. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/dev-workflow/references/interview-rubric.md +0 -0
  77. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/dev-workflow/references/plan-design-guidelines.md +0 -0
  78. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/dev-workflow/references/security-review-checklist.md +0 -0
  79. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/dev-workflow/scripts/record_review_decision.py +0 -0
  80. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/dev-workflow/scripts/review_hint_inject.py +0 -0
  81. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/develop/SKILL.md +0 -0
  82. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/doc/SKILL.md +0 -0
  83. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/extract-lib/SKILL.md +0 -0
  84. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/init-session/scripts/session_guard.py +0 -0
  85. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/pattern-status/SKILL.md +0 -0
  86. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/promote-pattern/SKILL.md +0 -0
  87. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/recall/SKILL.md +0 -0
  88. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
  89. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/review-phase/SKILL.md +0 -0
  90. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/setup/reference.md +0 -0
  91. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/setup/templates/coding-standards-template.md +0 -0
  92. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/skills/setup/templates/project-conventions-template.md +0 -0
  93. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.claude/state/.gitkeep +0 -0
  94. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/.gitignore +0 -0
  95. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/ARCHITECTURE.md +0 -0
  96. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/LICENSE +0 -0
  97. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/LICENSES/fastembed-LICENSE +0 -0
  98. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/LICENSES/fastembed-NOTICE +0 -0
  99. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/LICENSES/numpy-LICENSE +0 -0
  100. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/LICENSES/onnxruntime-LICENSE +0 -0
  101. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/LICENSES/paraphrase-multilingual-MiniLM-L12-v2-LICENSE +0 -0
  102. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/README.md +0 -0
  103. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/hatch_build.py +0 -0
  104. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/pyproject.toml +0 -0
  105. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/__main__.py +0 -0
  106. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/_db_params.py +0 -0
  107. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/_excludes.py +0 -0
  108. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/_terminal.py +0 -0
  109. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/cli_ask.py +0 -0
  110. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/cli_init.py +0 -0
  111. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/cli_list.py +0 -0
  112. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/cli_metrics.py +0 -0
  113. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/cli_plan.py +0 -0
  114. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/cli_recall.py +0 -0
  115. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/cli_tier.py +0 -0
  116. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/cli_update.py +0 -0
  117. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/db.py +0 -0
  118. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/embedding.py +0 -0
  119. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/gitutil.py +0 -0
  120. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/mcp_server.py +0 -0
  121. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/migrate.py +0 -0
  122. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/migrations/001_initial.sql +0 -0
  123. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/migrations/002_agent_cost_runs.sql +0 -0
  124. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/migrations/003_tier_cost.sql +0 -0
  125. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/migrations/004_agent_outcomes.sql +0 -0
  126. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/migrations/005_drop_agent_tier_bandit.sql +0 -0
  127. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/migrations/006_review_decisions_severity.sql +0 -0
  128. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/migrations/README.md +0 -0
  129. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/migrations/__init__.py +0 -0
  130. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/paths.py +0 -0
  131. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/plan_validator.py +0 -0
  132. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/platforms.py +0 -0
  133. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/pricing.py +0 -0
  134. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/question.py +0 -0
  135. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/recall_chunker.py +0 -0
  136. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/recall_index.py +0 -0
  137. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/src/c3/usage_ingester.py +0 -0
  138. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/__init__.py +0 -0
  139. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/_pre_compact_helpers.py +0 -0
  140. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/fixtures/usage/README.md +0 -0
  141. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/fixtures/usage/mainline.jsonl +0 -0
  142. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/fixtures/usage/subagents/agent-deadbeef.jsonl +0 -0
  143. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/fixtures/usage/subagents/agent-deadbeef.meta.json +0 -0
  144. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/__init__.py +0 -0
  145. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_check_agent_invocation.py +0 -0
  146. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_consolidate_memory.py +0 -0
  147. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_hook_utils.py +0 -0
  148. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_permission_handler.py +0 -0
  149. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_permission_handler_toast.py +0 -0
  150. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
  151. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_planner_check.py +0 -0
  152. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_planner_check_dev.py +0 -0
  153. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_post_tool.py +0 -0
  154. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_pre_tool.py +0 -0
  155. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_recall_autorebuild.py +0 -0
  156. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_recall_inject.py +0 -0
  157. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_record_agent_outcome.py +0 -0
  158. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_record_review_decision.py +0 -0
  159. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_restore_session.py +0 -0
  160. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_review_hint_inject.py +0 -0
  161. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_select_tier.py +0 -0
  162. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_select_tier_escalation.py +0 -0
  163. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_session_start.py +0 -0
  164. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_session_stop.py +0 -0
  165. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_session_utils.py +0 -0
  166. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
  167. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_similarity_boost.py +0 -0
  168. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_statusline.py +0 -0
  169. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_statusline_template_sync.py +0 -0
  170. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_sync_check.py +0 -0
  171. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_template_guard.py +0 -0
  172. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_tier_autoapply.py +0 -0
  173. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_tier_gap_check.py +0 -0
  174. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/hooks/test_tier_security_fixes.py +0 -0
  175. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/__init__.py +0 -0
  176. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/_skill_helpers.py +0 -0
  177. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/test_dev_workflow_no_task_type.py +0 -0
  178. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/test_init_session_no_task_type.py +0 -0
  179. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/test_parallel_agents_skill_tier.py +0 -0
  180. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/test_planner_lightweight.py +0 -0
  181. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/test_recall_skill.py +0 -0
  182. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/test_session_backlog_reconciliation.py +0 -0
  183. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/test_session_guard.py +0 -0
  184. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/test_setup_templates.py +0 -0
  185. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
  186. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/test_start_skill_new_flow.py +0 -0
  187. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
  188. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_check_deletions.py +0 -0
  189. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_cli_ask.py +0 -0
  190. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_cli_entry.py +0 -0
  191. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_cli_init.py +0 -0
  192. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_cli_list.py +0 -0
  193. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_cli_metrics.py +0 -0
  194. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_cli_plan.py +0 -0
  195. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_cli_recall.py +0 -0
  196. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_cli_tier.py +0 -0
  197. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_cli_update_breaking_changes.py +0 -0
  198. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_cli_update_deletions.py +0 -0
  199. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_db.py +0 -0
  200. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_docstring_consistency.py +0 -0
  201. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_embedding.py +0 -0
  202. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_excludes.py +0 -0
  203. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_extract_breaking_changes.py +0 -0
  204. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_gitutil.py +0 -0
  205. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_mcp_server_elicit.py +0 -0
  206. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_migrate.py +0 -0
  207. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_paths.py +0 -0
  208. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_plan_validator.py +0 -0
  209. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_pre_compact.py +0 -0
  210. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_pre_tool_hook.py +0 -0
  211. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_precompact_additional.py +0 -0
  212. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_precompact_toctou_fixes.py +0 -0
  213. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_pricing.py +0 -0
  214. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_recall_chunker.py +0 -0
  215. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_recall_index.py +0 -0
  216. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_references_migration.py +0 -0
  217. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_session_utils_additional.py +0 -0
  218. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_skill_no_builtin_conflict.py +0 -0
  219. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_statusline.py +0 -0
  220. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_stop_additional.py +0 -0
  221. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_stop_hook.py +0 -0
  222. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_stop_precompact_fixes.py +0 -0
  223. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_sync_template_stop.py +0 -0
  224. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_template_pre_tool_hook.py +0 -0
  225. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_usage_ingester.py +0 -0
  226. {claude_code_conductor-2.49.0 → claude_code_conductor-2.51.0}/tests/test_worktree_guard.py +0 -0
@@ -59,7 +59,7 @@ plan-report に基づき実装・デバッグ・リファクタリングを行
59
59
 
60
60
  **After:**
61
61
  - tester に渡す前に基本検証を実行する:
62
- - Python ファイルを変更した場合: `python -m py_compile {変更ファイル}` でシンタックスエラーを確認する
62
+ - Python ファイルを変更した場合: `c3 run -m py_compile {変更ファイル}` でシンタックスエラーを確認する
63
63
  - Node.js プロジェクトの場合: `npm run build` または `tsc --noEmit` でビルドを確認する
64
64
  - その他: プロジェクトのビルドコマンドがあれば実行する
65
65
  - エラーが検出された場合は修正してから tester に渡す
@@ -64,7 +64,7 @@ plan-report に基づき実装・デバッグ・リファクタリングを行
64
64
 
65
65
  **After:**
66
66
  - tester に渡す前に基本検証を実行する:
67
- - Python ファイルを変更した場合: `python -m py_compile {変更ファイル}` でシンタックスエラーを確認する
67
+ - Python ファイルを変更した場合: `c3 run -m py_compile {変更ファイル}` でシンタックスエラーを確認する
68
68
  - Node.js プロジェクトの場合: `npm run build` または `tsc --noEmit` でビルドを確認する
69
69
  - その他: プロジェクトのビルドコマンドがあれば実行する
70
70
  - エラーが検出された場合は修正してから tester に渡す
@@ -8,3 +8,4 @@ v2.11.0|summarize-memory agent + skill removed; replaced by `c3 recall`|summariz
8
8
  v2.20.0|hooks/schema.sql removed; SQLite schema is now managed by c3/migrations/ (auto-applied at session_start)|hooks/schema.sql を削除しました。SQLite スキーマは c3/migrations/ (wheel 内) で管理され session_start で自動適用されます。
9
9
  v2.41.0|Learning tables tier_bandit/tier_recent_outcomes are DROPPED and learning data resets; record_tier_outcome.py replaced by record_agent_outcome.py; c3 tier stats --json shape changed; old db.py tier APIs removed or shimmed (shims removed next release)|
10
10
  v2.43.0|Dropped agent_tier_bandit table (migration 005; bandit params now derived from agent_outcomes event log at read time, learning data preserved). Removed update_agent_tier_params and five v2.41.0 deprecated shims (read_tier_params, read_tier_failure_rate, update_tier_params, record_tier_recent_outcome, sync_tier_bandit_cost). read_agent_failure_rate signature changed: last_n replaced by window_days (time-based window, default 14 days via C3_FAILURE_WINDOW_DAYS).|
11
+ v2.51.0|Hook and statusLine launchers in the distributed settings.json changed from bare 'python' to 'c3 run'. Run 'c3 update' to migrate. If you customized settings.json directly, review 'c3 update --dry-run' first and move customizations to settings.local.json before updating.|配布 settings.json の hook / statusLine 起動子が python から c3 run 前提に変更。c3 update で移行。settings.json を直接カスタムしている場合は c3 update --dry-run で差分確認しカスタムを settings.local.json へ移してから update。
@@ -300,6 +300,31 @@ Claude Code 側で `deny` 判定が出た後に発火するため、`permission_
300
300
 
301
301
  **残課題**: v2.18.0 以降の検証タスクとして記録。現時点では「覆せない前提で設計する」ことを推奨。
302
302
 
303
+ ### 落とし穴 6: `permissions.allow` のワイルドカードはプレフィックス一致のため `../` パストラバーサルに対応していない
304
+
305
+ **症状**: `settings.json` の `permissions.allow` に `"Bash(c3 run .claude/hooks/stop.py*)"` と書いても、
306
+ `c3 run .claude/hooks/stop.py/../../../malicious.py` という形でパストラバーサルが可能に見える。
307
+
308
+ **原因**: Claude Code の `permissions.allow` マッチング機構は **コマンド文字列のテキストプレフィックス一致** に基づいている。
309
+ `../` を含むパスでも許可パターンのプレフィックスに一致する限り、許可される。完全なパス正規化・相対パス内の `..` 検証は
310
+ 行われない(Claude Code 本体のハーネス実装に依存)。
311
+
312
+ **仕様的な扱い**:
313
+ - `c3 run` への切り替え時点で「新規に生じたリスク」ではなく、旧 `python` 時代から同一構造で存在していた。
314
+ - ADR-3「python と同等で新権限を追加しない」は成立している(新規の穴を開けていない)。
315
+ - ただし「既存の穴が継続している」ことは認識・記録の価値がある。
316
+
317
+ **対処**:
318
+ - 完全な解決には Claude Code 側の許可マッチング仕様変更が必要(スコープ外)。
319
+ - 次善策: 通常のワークフローでは `c3 run` は決められたスクリプトのみを呼ぶため、実害は限定的。
320
+ コマンドを工作する(`../` を含める)動機が無ければこのリスクは発動しない。
321
+ - 注意: `worktree_guard.py` は `Write`/`Edit` ツール専用の worktree 境界チェックであり、
322
+ `Bash` 経由のコマンド実行(本落とし穴の `c3 run` パストラバーサル)には適用されない(本落とし穴には無関係)。
323
+
324
+ **確認方法**: セキュリティ厳密性が必要な環境では、`settings.json` の `permissions.allow` パターンを
325
+ 定期的にレビューすること(`c3 run <固定スクリプトパス>` 形式のみを許可し、`../` を含みうる可変パスを
326
+ プレフィックス許可しない)。
327
+
303
328
  ---
304
329
 
305
330
  ## 8. 参照先
@@ -11,7 +11,7 @@ C3 は **Claude Code** を canonical platform として設計されているが
11
11
  - 動作差分のまとめ
12
12
 
13
13
  を一箇所にまとめたリファレンス。実装は `src/c3/adapters.py` / `src/c3/mcp_server.py` /
14
- `src/c3/cli_ask.py` / `src/c3/platforms.py` を参照。
14
+ `src/c3/cli_ask.py` / `src/c3/platforms.py` / `src/c3/cli_doctor.py` を参照。
15
15
 
16
16
  ---
17
17
 
@@ -92,6 +92,9 @@ python -m c3.mcp_server
92
92
  `C3_PROJECT_ROOT` 環境変数でプロジェクトルートを指定可能(adapter 生成時に自動設定)。
93
93
  ソースインストール時は `PYTHONPATH` も adapter が `<repo>/src` に設定する。
94
94
 
95
+ 生成される `.codex/config.toml` / `.cursor/mcp.json` の `command` は `python` ではなく、
96
+ adapter 生成時点の `sys.executable`(絶対パス)を書き込む。理由は「7. 既知の制限」を参照。
97
+
95
98
  ---
96
99
 
97
100
  ## 4. `c3 ask` CLI fallback
@@ -178,3 +181,11 @@ Claude Code / Codex / Cursor / OpenCode が同じプロジェクトを行き来
178
181
  - **OpenCode の `AskUserQuestion`**: OpenCode adapter は MCP 設定を生成しないため、`c3_ask_user_question` ツールは使わず `AGENTS.md` の指示に従ってユーザーへ直接確認する。`multiSelect: true` は「複数選択の質問」として維持するよう指示済み
179
182
  - **OpenCode の `tools` 制限**: 生成される agent には一律で `bash/read/edit/write/websearch` を付与する。Claude 側 frontmatter の細かな `tools` 制限は反映されない(C3 の `code-reviewer` / `security-reviewer` は Claude 側でもレポート出力のため `write` を持つ)
180
183
  - **改行コード**: adapter 生成ファイルは LF 改行で書き出す(`newline="\n"`)。`.gitattributes` で `eol=lf` を固定済み
184
+ - **Codex の trust 要件**: プロジェクトが Codex に trust されていない場合、`.codex/config.toml` は**エラーなしで無視**される(Codex 公式仕様)。MCP サーバーが読み込まれず `AskUserQuestion` が動かない場合は、まず対象プロジェクトを Codex 側で trust 済みか確認する(Codex CLI: 初回起動時のプロンプトで trust するか、設定で許可済みディレクトリに追加する)
185
+ - **MCP `command` の絶対パス化**: adapter が書き込む `command` は `python` ではなく `sys.executable`(adapter 生成時の絶対パス)を使う。理由:
186
+ - macOS 12.3 以降、無印 `python` は標準に存在しない(`python3` のみ。Homebrew も同様)。`command: "python"` のままだと Codex が MCP spawn 時に program not found となり、「起動時にエラーで読み込まれない」症状になる
187
+ - `python` が PATH 上にあっても、pipx / venv などの隔離環境では `No module named c3` で起動失敗することがある
188
+ - GUI 起動の Codex(Desktop / IDE 拡張)はシェルの PATH を継承しないことがある(最小 PATH)
189
+ - 代案の「POSIX では `python3` にする」は不採用: 無印 python 不在の問題しか救えず、pipx 隔離や GUI PATH 最小の問題には無力なため
190
+ - `c3 doctor --platform codex|cursor` は生成済み config から `command` を読み取り、実行可能か・`<command> -c "import c3"` が成功するかを自己診断する
191
+ - **adapter 生成物はマシン固有**: `command` に埋め込む `sys.executable` は生成したマシン・環境(venv / pipx / システム Python)に依存する絶対パスであるため、adapter 生成物(`.codex/config.toml` / `.cursor/mcp.json` など)はチームで共有せず、各マシンで `c3 init --platform <p>` または `c3 update --platform <p>` を実行して再生成する運用とする
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "permissions": {
3
3
  "allow": [
4
- "Bash(python .claude/hooks/stop.py*)",
5
- "Bash(python .claude/hooks/pre_tool.py*)",
6
- "Bash(python .claude/hooks/pre_compact.py*)",
7
- "Bash(python .claude/hooks/restore_session.py*)",
8
- "Bash(python .claude/hooks/permission_handler.py*)",
9
- "Bash(python .claude/hooks/statusline.py*)",
10
- "Bash(python .claude/hooks/recall_autorebuild.py*)",
11
- "Bash(python .claude/skills/dev-workflow/scripts/review_hint_inject.py*)",
12
- "Bash(python .claude/skills/dev-workflow/scripts/record_review_decision.py*)",
13
- "Bash(python .claude/skills/dev-workflow/scripts/record_agent_outcome.py*)",
14
- "Bash(python .claude/skills/init-session/scripts/session_guard.py*)",
4
+ "Bash(c3 run .claude/hooks/stop.py*)",
5
+ "Bash(c3 run .claude/hooks/pre_tool.py*)",
6
+ "Bash(c3 run .claude/hooks/pre_compact.py*)",
7
+ "Bash(c3 run .claude/hooks/restore_session.py*)",
8
+ "Bash(c3 run .claude/hooks/permission_handler.py*)",
9
+ "Bash(c3 run .claude/hooks/statusline.py*)",
10
+ "Bash(c3 run .claude/hooks/recall_autorebuild.py*)",
11
+ "Bash(c3 run .claude/skills/dev-workflow/scripts/review_hint_inject.py*)",
12
+ "Bash(c3 run .claude/skills/dev-workflow/scripts/record_review_decision.py*)",
13
+ "Bash(c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py*)",
14
+ "Bash(c3 run .claude/skills/init-session/scripts/session_guard.py*)",
15
15
  "Read(**)",
16
16
  "Grep(**)",
17
17
  "Edit(.claude/reports/**)",
@@ -58,7 +58,7 @@
58
58
  },
59
59
  "statusLine": {
60
60
  "type": "command",
61
- "command": "python \"${CLAUDE_PROJECT_DIR}/.claude/hooks/statusline.py\""
61
+ "command": "c3 run \"${CLAUDE_PROJECT_DIR}/.claude/hooks/statusline.py\""
62
62
  },
63
63
  "hooks": {
64
64
  "PreToolUse": [
@@ -67,8 +67,8 @@
67
67
  "hooks": [
68
68
  {
69
69
  "type": "command",
70
- "command": "python",
71
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/pre_tool.py"]
70
+ "command": "c3",
71
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/pre_tool.py"]
72
72
  }
73
73
  ]
74
74
  },
@@ -77,8 +77,8 @@
77
77
  "hooks": [
78
78
  {
79
79
  "type": "command",
80
- "command": "python",
81
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/worktree_guard.py"]
80
+ "command": "c3",
81
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/worktree_guard.py"]
82
82
  }
83
83
  ]
84
84
  },
@@ -87,8 +87,8 @@
87
87
  "hooks": [
88
88
  {
89
89
  "type": "command",
90
- "command": "python",
91
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/worktree_guard.py"]
90
+ "command": "c3",
91
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/worktree_guard.py"]
92
92
  }
93
93
  ]
94
94
  },
@@ -97,13 +97,13 @@
97
97
  "hooks": [
98
98
  {
99
99
  "type": "command",
100
- "command": "python",
101
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/check_agent_invocation.py"]
100
+ "command": "c3",
101
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/check_agent_invocation.py"]
102
102
  },
103
103
  {
104
104
  "type": "command",
105
- "command": "python",
106
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/tier_autoapply.py"]
105
+ "command": "c3",
106
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/tier_autoapply.py"]
107
107
  }
108
108
  ]
109
109
  }
@@ -114,13 +114,13 @@
114
114
  "hooks": [
115
115
  {
116
116
  "type": "command",
117
- "command": "python",
118
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/post_tool.py"]
117
+ "command": "c3",
118
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/post_tool.py"]
119
119
  },
120
120
  {
121
121
  "type": "command",
122
- "command": "python",
123
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/planner_check.py"]
122
+ "command": "c3",
123
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/planner_check.py"]
124
124
  }
125
125
  ]
126
126
  },
@@ -129,13 +129,13 @@
129
129
  "hooks": [
130
130
  {
131
131
  "type": "command",
132
- "command": "python",
133
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/post_tool.py"]
132
+ "command": "c3",
133
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/post_tool.py"]
134
134
  },
135
135
  {
136
136
  "type": "command",
137
- "command": "python",
138
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/planner_check.py"]
137
+ "command": "c3",
138
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/planner_check.py"]
139
139
  }
140
140
  ]
141
141
  }
@@ -146,8 +146,8 @@
146
146
  "hooks": [
147
147
  {
148
148
  "type": "command",
149
- "command": "python",
150
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/permission_handler.py"]
149
+ "command": "c3",
150
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/permission_handler.py"]
151
151
  }
152
152
  ]
153
153
  }
@@ -158,13 +158,13 @@
158
158
  "hooks": [
159
159
  {
160
160
  "type": "command",
161
- "command": "python",
162
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/select_tier.py"]
161
+ "command": "c3",
162
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/select_tier.py"]
163
163
  },
164
164
  {
165
165
  "type": "command",
166
- "command": "python",
167
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/recall_inject.py"]
166
+ "command": "c3",
167
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/recall_inject.py"]
168
168
  }
169
169
  ]
170
170
  }
@@ -175,8 +175,8 @@
175
175
  "hooks": [
176
176
  {
177
177
  "type": "command",
178
- "command": "python",
179
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/restore_session.py"]
178
+ "command": "c3",
179
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/restore_session.py"]
180
180
  }
181
181
  ]
182
182
  },
@@ -185,8 +185,8 @@
185
185
  "hooks": [
186
186
  {
187
187
  "type": "command",
188
- "command": "python",
189
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/session_start.py"]
188
+ "command": "c3",
189
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/session_start.py"]
190
190
  }
191
191
  ]
192
192
  }
@@ -197,8 +197,8 @@
197
197
  "hooks": [
198
198
  {
199
199
  "type": "command",
200
- "command": "python",
201
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/pre_compact.py"]
200
+ "command": "c3",
201
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/pre_compact.py"]
202
202
  }
203
203
  ]
204
204
  }
@@ -209,13 +209,13 @@
209
209
  "hooks": [
210
210
  {
211
211
  "type": "command",
212
- "command": "python",
213
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/session_stop.py"]
212
+ "command": "c3",
213
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/session_stop.py"]
214
214
  },
215
215
  {
216
216
  "type": "command",
217
- "command": "python",
218
- "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/recall_autorebuild.py"]
217
+ "command": "c3",
218
+ "args": ["run", "${CLAUDE_PROJECT_DIR}/.claude/hooks/recall_autorebuild.py"]
219
219
  }
220
220
  ]
221
221
  }
@@ -108,7 +108,7 @@ session.tmp の `モード:` 行を確認する。**有効な自律宣言**(§
108
108
 
109
109
  **tier-routing 結果記録**:
110
110
  ```bash
111
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
111
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
112
112
  --role interviewer --outcome success --gate A-4 \
113
113
  --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
114
114
  --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
@@ -119,7 +119,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
119
119
  - 「否認・修正を依頼する」「否認・自分でファイルを編集する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
120
120
  - **tier-routing 結果記録(否認時)**:
121
121
  ```bash
122
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
122
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
123
123
  --role interviewer --outcome failure --gate A-4 \
124
124
  --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
125
125
  --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
@@ -174,7 +174,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
174
174
 
175
175
  **tier-routing 結果記録**:
176
176
  ```bash
177
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
177
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
178
178
  --role architect --outcome success --gate B-3 \
179
179
  --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
180
180
  --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
@@ -185,7 +185,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
185
185
  - 「否認・修正を依頼する」「否認・自分でファイルを編集する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
186
186
  - **tier-routing 結果記録(否認時)**:
187
187
  ```bash
188
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
188
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
189
189
  --role architect --outcome failure --gate B-3 \
190
190
  --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
191
191
  --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
@@ -255,7 +255,7 @@ plan-report の全タスクを走査し、以下の形式でテキスト出力
255
255
 
256
256
  **tier-routing 結果記録**:
257
257
  ```bash
258
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
258
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
259
259
  --role planner --outcome success --gate C-2 \
260
260
  --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
261
261
  --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
@@ -266,7 +266,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
266
266
  - 「否認・修正を依頼する」「否認・自分でファイルを編集する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
267
267
  - **tier-routing 結果記録(否認時)**:
268
268
  ```bash
269
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
269
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
270
270
  --role planner --outcome failure --gate C-2 \
271
271
  --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
272
272
  --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown}
@@ -342,7 +342,7 @@ design-review-report を Read して findings の有無を確認する。design-
342
342
 
343
343
  **design-critic 判断記録**: マークした直後・同一ステップ内で、層別ルーティング(ステップ 4)へ進む前に、各 DC-XX-NNN について Bash で c3.db に記録する:
344
344
  ```bash
345
- python .claude/skills/dev-workflow/scripts/record_review_decision.py \
345
+ c3 run .claude/skills/dev-workflow/scripts/record_review_decision.py \
346
346
  --reviewer design-critic \
347
347
  --checklist-id DC-XX-NNN \
348
348
  --severity {high|medium|low} \
@@ -365,7 +365,7 @@ python .claude/skills/dev-workflow/scripts/record_review_decision.py \
365
365
  2. 許容する指摘の直下に `> **[許容]** {理由}` を Edit で追記する(検出記録は削除しない)
366
366
  3. **design-critic 判断記録**: 1・2 で disposition を Edit した直後・同一ステップ内で、各 DC-XX-NNN について Bash で c3.db に記録する(`[対応予定]`→`fixed` / `[許容]`→`accepted`):
367
367
  ```bash
368
- python .claude/skills/dev-workflow/scripts/record_review_decision.py \
368
+ c3 run .claude/skills/dev-workflow/scripts/record_review_decision.py \
369
369
  --reviewer design-critic \
370
370
  --checklist-id DC-XX-NNN \
371
371
  --severity {high|medium|low} \
@@ -387,7 +387,7 @@ python .claude/skills/dev-workflow/scripts/record_review_decision.py \
387
387
 
388
388
  **design-critic 判断記録**: Edit した直後・同一ステップ内で、フェーズ D へ進む前に、各 DC-XX-NNN について Bash で c3.db に記録する:
389
389
  ```bash
390
- python .claude/skills/dev-workflow/scripts/record_review_decision.py \
390
+ c3 run .claude/skills/dev-workflow/scripts/record_review_decision.py \
391
391
  --reviewer design-critic \
392
392
  --checklist-id DC-XX-NNN \
393
393
  --severity {high|medium|low} \
@@ -414,7 +414,7 @@ python .claude/skills/dev-workflow/scripts/record_review_decision.py \
414
414
 
415
415
  **tier-routing 結果記録**: 上表により層別ルーティングが発動した場合(`[対応予定]` が 1 件以上ある場合)のみ、戻り先の最上流 role へ failure を 1 件記録する(`[許容]` のみで `[対応予定]` が 0 件・findings なしの場合は記録しない):
416
416
  ```bash
417
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
417
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
418
418
  --role {interviewer|architect|planner(戻り先 role)} --outcome failure --gate C-3 \
419
419
  --execution persona --complexity {セッションファイルの tier-routing複雑度: 行の値} \
420
420
  --tier {親モデルのtier名(haiku/sonnet/opus)。判別不能なら unknown} \
@@ -462,7 +462,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
462
462
  当日判定は LLM のテキスト解釈ではなく以下の Bash で機械的に取得すること(前セッションの残骸 debug-analysis による意図しない bug-fix モード突入を防ぐ):
463
463
 
464
464
  ```bash
465
- python -c "import os, glob, datetime; today = datetime.datetime.now().strftime('%Y%m%d'); files = sorted(glob.glob('.claude/reports/debug-analysis-*.md')); today_files = [f for f in files if os.path.basename(f).startswith(f'debug-analysis-{today}-')]; print(today_files[-1] if today_files else '')"
465
+ c3 run -c "import os, glob, datetime; today = datetime.datetime.now().strftime('%Y%m%d'); files = sorted(glob.glob('.claude/reports/debug-analysis-*.md')); today_files = [f for f in files if os.path.basename(f).startswith(f'debug-analysis-{today}-')]; print(today_files[-1] if today_files else '')"
466
466
  ```
467
467
 
468
468
  標準出力が空でなければそのパスを bug-fix モードの入力として保持する。空なら debug-analysis を「無し」とみなし判定 3 へ進む。
@@ -545,7 +545,7 @@ Glob で `.claude/reports/debug-needed-*.md` の最新を確認する。
545
545
  **ファイルが存在する場合:**
546
546
  0. **stuck 記録**(削除前記録・ADR-25-6):
547
547
  ```bash
548
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
548
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
549
549
  --role developer --outcome failure --gate D-2.5-stuck \
550
550
  --execution subagent --task {plan タスクID} --complexity {セッションファイルの tier-routing複雑度: 行の値} \
551
551
  --note "stuck: debug-needed 検出(自力完走不能)"
@@ -575,7 +575,7 @@ AskUserQuestion で確認する:
575
575
 
576
576
  **tier-routing 結果記録**:
577
577
  ```bash
578
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
578
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
579
579
  --role developer --outcome success --gate D-2.5 \
580
580
  --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
581
581
  --task {plan タスクID}
@@ -585,7 +585,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
585
585
  - 「否認・再実装を依頼する」「否認・自分でコードを修正する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
586
586
  - **tier-routing 結果記録(否認時)**:
587
587
  ```bash
588
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
588
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
589
589
  --role developer --outcome failure --gate D-2.5 \
590
590
  --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
591
591
  --task {plan タスクID}
@@ -613,7 +613,7 @@ AskUserQuestion で確認する:
613
613
 
614
614
  **tier-routing 結果記録(不合格時のみ・D-2.5 と重複回避のため全合格時は記録しない・欠陥の所在で判定)**: D-5 否認ブロックと同型で、テストコード欠陥は `tester` failure、プロダクトコード欠陥は `developer` failure、両方または判別不能な場合は `developer` のみ記録する:
615
615
  ```bash
616
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
616
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
617
617
  --role {tester|developer(欠陥の所在で判定・テストコード欠陥=tester/プロダクトコード欠陥=developer/両方または判別不能=developer)} --outcome failure --gate D-3 \
618
618
  --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
619
619
  --task {plan タスクID}
@@ -647,7 +647,7 @@ AskUserQuestion で確認する:
647
647
 
648
648
  **tier-routing 結果記録**:
649
649
  ```bash
650
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
650
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
651
651
  --role tester --outcome success --gate D-5 \
652
652
  --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値}
653
653
  ```
@@ -656,7 +656,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
656
656
  - 「否認・修正を依頼する」「否認・自分でコードを修正する」: `## 試みたが失敗したアプローチ` に教訓をルール形式で追記し `patterns` に追加する
657
657
  - **tier-routing 結果記録(否認時・欠陥の所在で判定)**: テストコード欠陥は `tester` failure、プロダクトコード欠陥は `developer` failure、両方または判別不能な場合は `developer` のみ記録する:
658
658
  ```bash
659
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
659
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
660
660
  --role {tester|developer(欠陥の所在で判定)} --outcome failure --gate D-5 \
661
661
  --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値}
662
662
  ```
@@ -677,7 +677,7 @@ Agent ツールで `code-reviewer` エージェントを起動する。
677
677
  code-reviewer がレポートを Write し終えたら、Bash で `.claude/skills/dev-workflow/scripts/review_hint_inject.py` を呼んで過去判断ヒントをレポート末尾に追記する:
678
678
 
679
679
  ```bash
680
- python .claude/skills/dev-workflow/scripts/review_hint_inject.py .claude/reports/code-review-report-{timestamp}.md
680
+ c3 run .claude/skills/dev-workflow/scripts/review_hint_inject.py .claude/reports/code-review-report-{timestamp}.md
681
681
  ```
682
682
 
683
683
  ヒントは独立セクションとして追加されるだけで、code-reviewer の指摘本文は変更されない。
@@ -703,7 +703,7 @@ AskUserQuestion で確認する:
703
703
 
704
704
  **tier-routing 結果記録**:
705
705
  ```bash
706
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
706
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
707
707
  --role developer --outcome success --gate E-1 \
708
708
  --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値}
709
709
  ```
@@ -729,7 +729,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
729
729
 
730
730
  **review-hint 判断記録**: tier-routing 記録の前に、全指摘(`[CR-NEW]` 含む)について Bash で c3.db に記録する:
731
731
  ```bash
732
- python .claude/skills/dev-workflow/scripts/record_review_decision.py \
732
+ c3 run .claude/skills/dev-workflow/scripts/record_review_decision.py \
733
733
  --checklist-id {CR-XX-NNN または CR-NEW} \
734
734
  --finding "{指摘の1行要約(逐語引用せず・引用符/バッククォート/$ 等のシェルメタ文字を含めない。該当文字は置換/省略)}" \
735
735
  --decision fixed \
@@ -739,7 +739,7 @@ python .claude/skills/dev-workflow/scripts/record_review_decision.py \
739
739
 
740
740
  **tier-routing 結果記録(帰属判定)**: 指摘内容から最上流起因 role を判定し failure を記録する(デフォルト developer・迷ったらこれ/**テストコード欠陥起因の指摘は tester failure**/設計不備なら architect/計画不備なら planner。`--note` に理由必須。developer・tester は `--execution subagent`、architect/planner は `--execution persona`。developer・tester は `--tier` を省略(applied-state/tier_selection/frontmatter から自己解決)、architect/planner の場合は `--tier` も明記する):
741
741
  ```bash
742
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
742
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
743
743
  --role {developer|tester|architect|planner(帰属判定)} --outcome failure --gate E-1 \
744
744
  --execution {developer・tester=subagent / architect・planner=persona} \
745
745
  --complexity {セッションファイルの tier-routing複雑度: 行の値} \
@@ -760,7 +760,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
760
760
  2. 許容する指摘の直下に `> **[許容]** {理由}` を Edit で追記する(検出記録は削除しない)
761
761
  3. **review-hint 判断記録**: 各指摘について Bash で c3.db に記録する(`[CR-XX-NNN]`/`[CR-NEW]` を含むもの。`[CR-NEW]` も checklist-id にそのまま渡して記録する。チェックリスト追加候補としての扱いは従来どおり別途):
762
762
  ```bash
763
- python .claude/skills/dev-workflow/scripts/record_review_decision.py \
763
+ c3 run .claude/skills/dev-workflow/scripts/record_review_decision.py \
764
764
  --checklist-id CR-Q-001 \
765
765
  --finding "{指摘の1行要約(逐語引用せず・引用符/バッククォート/$ 等のシェルメタ文字を含めない。該当文字は置換/省略)}" \
766
766
  --decision {fixed|accepted} \
@@ -772,7 +772,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
772
772
  5. セッションファイルの `- [ ] code-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズC 計画中(レビュー差し戻し)` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
773
773
  6. **tier-routing 結果記録(帰属判定)**: 指摘内容から最上流起因 role を判定し failure を記録する(デフォルト developer・迷ったらこれ/**テストコード欠陥起因の指摘は tester failure**/設計不備なら architect/計画不備なら planner。`--note` に理由必須。developer・tester は `--execution subagent`、architect/planner は `--execution persona`。developer・tester は `--tier` を省略(applied-state/tier_selection/frontmatter から自己解決)、architect/planner の場合は `--tier` も明記する):
774
774
  ```bash
775
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
775
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
776
776
  --role {developer|tester|architect|planner(帰属判定)} --outcome failure --gate E-1 \
777
777
  --execution {developer・tester=subagent / architect・planner=persona} \
778
778
  --complexity {セッションファイルの tier-routing複雑度: 行の値} \
@@ -795,7 +795,7 @@ AskUserQuestion で許容理由を確認する:
795
795
  4. セッションファイルの `- [ ] code-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズE レビュー中 / 次: security-review` に Edit して E-2 へ。
796
796
  5. **tier-routing 結果記録**:
797
797
  ```bash
798
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
798
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
799
799
  --role developer --outcome success --gate E-1 \
800
800
  --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値}
801
801
  ```
@@ -815,7 +815,7 @@ Agent ツールで `security-reviewer` エージェントを起動する。
815
815
  security-reviewer がレポートを Write し終えたら、Bash で `.claude/skills/dev-workflow/scripts/review_hint_inject.py` に **両レポートのパス** を渡して呼ぶ。両方渡すことで重複指摘フラグ(同じ checklist_id を CR と SR が指摘)が判定される:
816
816
 
817
817
  ```bash
818
- python .claude/skills/dev-workflow/scripts/review_hint_inject.py \
818
+ c3 run .claude/skills/dev-workflow/scripts/review_hint_inject.py \
819
819
  .claude/reports/code-review-report-{ts1}.md \
820
820
  .claude/reports/security-review-report-{ts2}.md
821
821
  ```
@@ -843,7 +843,7 @@ AskUserQuestion で確認する:
843
843
 
844
844
  **tier-routing 結果記録**:
845
845
  ```bash
846
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
846
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
847
847
  --role developer --outcome success --gate E-2 \
848
848
  --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
849
849
  --final
@@ -870,7 +870,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
870
870
 
871
871
  **review-hint 判断記録**: tier-routing 記録の前に、全指摘(`[SR-NEW]` 含む)について Bash で c3.db に記録する:
872
872
  ```bash
873
- python .claude/skills/dev-workflow/scripts/record_review_decision.py \
873
+ c3 run .claude/skills/dev-workflow/scripts/record_review_decision.py \
874
874
  --checklist-id {SR-XX-NNN または SR-NEW} \
875
875
  --finding "{指摘の1行要約(逐語引用せず・引用符/バッククォート/$ 等のシェルメタ文字を含めない。該当文字は置換/省略)}" \
876
876
  --decision fixed \
@@ -880,7 +880,7 @@ python .claude/skills/dev-workflow/scripts/record_review_decision.py \
880
880
 
881
881
  **tier-routing 結果記録(帰属判定)**: 指摘内容から最上流起因 role を判定し failure を記録する(デフォルト developer・迷ったらこれ/**テストコード欠陥起因の指摘は tester failure**/設計不備なら architect/計画不備なら planner。`--note` に理由必須。developer・tester は `--execution subagent`、architect/planner は `--execution persona`。developer・tester は `--tier` を省略(applied-state/tier_selection/frontmatter から自己解決)、architect/planner の場合は `--tier` も明記する):
882
882
  ```bash
883
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
883
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
884
884
  --role {developer|tester|architect|planner(帰属判定)} --outcome failure --gate E-2 \
885
885
  --execution {developer・tester=subagent / architect・planner=persona} \
886
886
  --complexity {セッションファイルの tier-routing複雑度: 行の値} \
@@ -901,7 +901,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
901
901
  2. 許容する指摘の直下に `> **[許容]** {理由}` を Edit で追記する(検出記録は削除しない)
902
902
  3. **review-hint 判断記録**: 各指摘について Bash で c3.db に記録する(`[SR-XX-NNN]`/`[SR-NEW]` を含むもの。`[SR-NEW]` も checklist-id にそのまま渡して記録する。チェックリスト追加候補としての扱いは従来どおり別途):
903
903
  ```bash
904
- python .claude/skills/dev-workflow/scripts/record_review_decision.py \
904
+ c3 run .claude/skills/dev-workflow/scripts/record_review_decision.py \
905
905
  --checklist-id SR-K-002 \
906
906
  --finding "{指摘の1行要約(逐語引用せず・引用符/バッククォート/$ 等のシェルメタ文字を含めない。該当文字は置換/省略)}" \
907
907
  --decision {fixed|accepted} \
@@ -913,7 +913,7 @@ python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
913
913
  5. セッションファイルの `- [ ] security-review` を `- [x]` に Edit し、`現在地:` を `現在地: フェーズC 計画中(レビュー差し戻し)` に Edit してから**フェーズ C** へ(内部遷移・Step 0 なし)。
914
914
  6. **tier-routing 結果記録(帰属判定)**: 指摘内容から最上流起因 role を判定し failure を記録する(デフォルト developer・迷ったらこれ/**テストコード欠陥起因の指摘は tester failure**/設計不備なら architect/計画不備なら planner。`--note` に理由必須。developer・tester は `--execution subagent`、architect/planner は `--execution persona`。developer・tester は `--tier` を省略(applied-state/tier_selection/frontmatter から自己解決)、architect/planner の場合は `--tier` も明記する):
915
915
  ```bash
916
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
916
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
917
917
  --role {developer|tester|architect|planner(帰属判定)} --outcome failure --gate E-2 \
918
918
  --execution {developer・tester=subagent / architect・planner=persona} \
919
919
  --complexity {セッションファイルの tier-routing複雑度: 行の値} \
@@ -936,7 +936,7 @@ AskUserQuestion で許容理由を確認する:
936
936
  4. セッションファイルの `- [ ] security-review` を `- [x]` に Edit し、`現在地:` を `現在地: 完了` に Edit する。続けて **「引き継ぎバックログの照合」**(後述の共通ステップ)を実行してからコミットを提案する。
937
937
  5. **tier-routing 結果記録**: 全許容で完了するのも「成功」としてカウント:
938
938
  ```bash
939
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
939
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \
940
940
  --role developer --outcome success --gate E-2 \
941
941
  --execution subagent --complexity {セッションファイルの tier-routing複雑度: 行の値} \
942
942
  --final
@@ -5,7 +5,7 @@ tier-routing 学習シグナル再設計(architecture-report-20260702-214748.m
5
5
  ADR-2〜ADR-7)に基づく後継スクリプト。旧 record_tier_outcome.py を置き換える。
6
6
 
7
7
  Usage:
8
- python .claude/skills/dev-workflow/scripts/record_agent_outcome.py \\
8
+ c3 run .claude/skills/dev-workflow/scripts/record_agent_outcome.py \\
9
9
  --role developer --outcome success --gate D-2.5 \\
10
10
  --execution subagent --complexity medium
11
11
 
@@ -20,7 +20,7 @@ description: セッション開始時に前回の作業状態・残タスク・
20
20
  `/start` からの再帰呼び出しを防ぐため、**最初に**現在のセッション ID を実行マーカーへ記録する:
21
21
 
22
22
  ```bash
23
- python .claude/skills/init-session/scripts/session_guard.py mark
23
+ c3 run .claude/skills/init-session/scripts/session_guard.py mark
24
24
  ```
25
25
 
26
26
  ### G-2: setup 未実行なら /setup を自動実行
@@ -172,7 +172,7 @@ Step 1 で読んだ session.tmp の「現在地:」行と「モード:」行の
172
172
  > 文字列の目視比較で代替しないこと。スクリプト不在(配布先等)の場合は無効=HITL(fail-closed)。
173
173
  > 呼び出し例(セッションファイルからモード行を直接パイプで渡す。コマンドラインに現れるリテラルは
174
174
  > ファイルパスのみで、モード行の内容はパイプのデータとして流れシェルに評価されない):
175
- > `grep -m1 '^モード: ' .claude/memory/sessions/{YYYYMMDD}.tmp | python .claude/skills/autonomous-mode/scripts/mode_line.py`
175
+ > `grep -m1 '^モード: ' .claude/memory/sessions/{YYYYMMDD}.tmp | c3 run .claude/skills/autonomous-mode/scripts/mode_line.py`
176
176
  > → `VALID<TAB>{正規化済み絶対パス}`(exit 0)/`INVALID<TAB>{理由コード}`(exit 1)の 1 行で判定する。
177
177
  > モード行の値をコマンド文字列(here-string・引数・ダブルクォート内展開)に直接埋め込んではならない。
178
178
 
@@ -176,7 +176,7 @@ AskUserQuestion ツール:
176
176
  "question": "サーバーの接続方式(transport)を選んでください",
177
177
  "header": "transport",
178
178
  "options": [
179
- { "label": "stdio", "description": "コマンドとして起動するサーバー(node / python / バイナリ等)" },
179
+ { "label": "stdio", "description": "コマンドとして起動するサーバー(node / python / バイナリ等。実行ファイルは絶対パス推奨。v2.50.0 で C3 自身の MCP 起動子も sys.executable の絶対パスに統一)" },
180
180
  { "label": "SSE", "description": "Server-Sent Events で接続(http://... の URL)" },
181
181
  { "label": "HTTP", "description": "Streamable HTTP で接続(http://... の URL)" }
182
182
  ]
@@ -192,7 +192,7 @@ AskUserQuestion でコマンドを確認する:
192
192
  ```json
193
193
  {
194
194
  "questions": [{
195
- "question": "実行コマンドを入力してください(例: node, python, /usr/local/bin/mcp-server)"
195
+ "question": "実行コマンドを入力してください(絶対パス推奨。例: /usr/local/bin/node, /usr/bin/python3, /usr/local/bin/mcp-server)"
196
196
  }]
197
197
  }
198
198
  ```