claude-code-conductor 2.29.4__tar.gz → 2.31.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 (201) hide show
  1. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/CLAUDE.md +6 -6
  2. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/docs/platform-adapters.md +28 -15
  3. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/dev-workflow/SKILL.md +20 -67
  4. claude_code_conductor-2.31.0/.claude/skills/dev-workflow/references/design-rubric.md +62 -0
  5. claude_code_conductor-2.31.0/.claude/skills/dev-workflow/references/interview-rubric.md +78 -0
  6. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/ARCHITECTURE.md +2 -1
  7. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/CHANGELOG.md +41 -0
  8. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/PKG-INFO +7 -6
  9. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/README.md +6 -5
  10. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/__init__.py +1 -1
  11. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/adapters.py +303 -1
  12. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/cli_doctor.py +21 -0
  13. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/platforms.py +1 -1
  14. claude_code_conductor-2.31.0/tests/test_adapters.py +807 -0
  15. claude_code_conductor-2.31.0/tests/test_cli_doctor.py +183 -0
  16. claude_code_conductor-2.29.4/tests/test_adapters.py +0 -276
  17. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/architect.md +0 -0
  18. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/code-reviewer.md +0 -0
  19. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/developer.md +0 -0
  20. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/doc-writer.md +0 -0
  21. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/interviewer.md +0 -0
  22. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/planner.md +0 -0
  23. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/project-setup.md +0 -0
  24. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/security-reviewer.md +0 -0
  25. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/systematic-debugger.md +0 -0
  26. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/tester.md +0 -0
  27. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/wt_developer.md +0 -0
  28. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/wt_systematic-debugger.md +0 -0
  29. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/agents/wt_tester.md +0 -0
  30. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/breaking-changes.txt +0 -0
  31. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/deletions.txt +0 -0
  32. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/docs/config-policy.md +0 -0
  33. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/docs/parallel-agents-setup.md +0 -0
  34. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/docs/settings.json.md +0 -0
  35. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/_hook_utils.py +0 -0
  36. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/check_agent_invocation.py +0 -0
  37. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/consolidate_memory.py +0 -0
  38. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/permission_handler.py +0 -0
  39. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/permission_handler_toast.py +0 -0
  40. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/planner_check.py +0 -0
  41. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/post_tool.py +0 -0
  42. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/pre_compact.py +0 -0
  43. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/pre_tool.py +0 -0
  44. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/recall_inject.py +0 -0
  45. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/restore_session.py +0 -0
  46. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/select_tier.py +0 -0
  47. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/session_start.py +0 -0
  48. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/session_stop.py +0 -0
  49. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/session_utils.py +0 -0
  50. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/statusline.py +0 -0
  51. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/stop.py +0 -0
  52. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/hooks/worktree_guard.py +0 -0
  53. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/memory/.gitkeep +0 -0
  54. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/permission_rules.json +0 -0
  55. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/rules/promoted/index.md +0 -0
  56. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/settings.json +0 -0
  57. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/brainstorm/SKILL.md +0 -0
  58. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/codex-review/SKILL.md +0 -0
  59. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/dev-workflow/references/code-review-checklist.md +0 -0
  60. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/dev-workflow/references/plan-design-guidelines.md +0 -0
  61. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/dev-workflow/references/security-review-checklist.md +0 -0
  62. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/dev-workflow/scripts/record_review_decision.py +0 -0
  63. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/dev-workflow/scripts/record_tier_outcome.py +0 -0
  64. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/dev-workflow/scripts/review_hint_inject.py +0 -0
  65. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/develop/SKILL.md +0 -0
  66. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/doc/SKILL.md +0 -0
  67. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/extract-lib/SKILL.md +0 -0
  68. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/init-session/SKILL.md +0 -0
  69. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/mcp-config/SKILL.md +0 -0
  70. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/parallel-agents/SKILL.md +0 -0
  71. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/pattern-status/SKILL.md +0 -0
  72. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/promote-pattern/SKILL.md +0 -0
  73. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/recall/SKILL.md +0 -0
  74. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/report-timestamp/SKILL.md +0 -0
  75. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/report-timestamp/scripts/get_timestamp.py +0 -0
  76. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/review-phase/SKILL.md +0 -0
  77. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/setup/SKILL.md +0 -0
  78. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/setup/reference.md +0 -0
  79. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/setup/templates/coding-standards-template.md +0 -0
  80. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/setup/templates/project-conventions-template.md +0 -0
  81. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/skills/start/SKILL.md +0 -0
  82. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.claude/state/.gitkeep +0 -0
  83. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/.gitignore +0 -0
  84. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/LICENSE +0 -0
  85. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/LICENSES/chroma-hnswlib-LICENSE +0 -0
  86. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/LICENSES/chroma-hnswlib-NOTICE +0 -0
  87. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/LICENSES/fastembed-LICENSE +0 -0
  88. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/LICENSES/fastembed-NOTICE +0 -0
  89. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/LICENSES/onnxruntime-LICENSE +0 -0
  90. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/LICENSES/paraphrase-multilingual-MiniLM-L12-v2-LICENSE +0 -0
  91. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/hatch_build.py +0 -0
  92. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/pyproject.toml +0 -0
  93. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/__main__.py +0 -0
  94. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/_db_params.py +0 -0
  95. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/_excludes.py +0 -0
  96. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/_terminal.py +0 -0
  97. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/cli.py +0 -0
  98. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/cli_ask.py +0 -0
  99. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/cli_init.py +0 -0
  100. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/cli_list.py +0 -0
  101. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/cli_plan.py +0 -0
  102. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/cli_recall.py +0 -0
  103. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/cli_tier.py +0 -0
  104. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/cli_update.py +0 -0
  105. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/db.py +0 -0
  106. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/embedding.py +0 -0
  107. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/mcp_server.py +0 -0
  108. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/migrate.py +0 -0
  109. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/migrations/001_initial.sql +0 -0
  110. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/migrations/002_agent_cost_runs.sql +0 -0
  111. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/migrations/003_tier_cost.sql +0 -0
  112. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/migrations/README.md +0 -0
  113. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/migrations/__init__.py +0 -0
  114. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/paths.py +0 -0
  115. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/plan_validator.py +0 -0
  116. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/pricing.py +0 -0
  117. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/question.py +0 -0
  118. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/recall_chunker.py +0 -0
  119. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/recall_index.py +0 -0
  120. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/src/c3/usage_ingester.py +0 -0
  121. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/__init__.py +0 -0
  122. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/conftest.py +0 -0
  123. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/fixtures/usage/README.md +0 -0
  124. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/fixtures/usage/mainline.jsonl +0 -0
  125. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/fixtures/usage/subagents/agent-deadbeef.jsonl +0 -0
  126. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/fixtures/usage/subagents/agent-deadbeef.meta.json +0 -0
  127. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/__init__.py +0 -0
  128. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_check_agent_invocation.py +0 -0
  129. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_consolidate_memory.py +0 -0
  130. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_hook_utils.py +0 -0
  131. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_permission_handler.py +0 -0
  132. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_permission_handler_toast.py +0 -0
  133. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_pip_reinstall_reminder.py +0 -0
  134. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_planner_check.py +0 -0
  135. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_planner_check_dev.py +0 -0
  136. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_post_tool.py +0 -0
  137. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_pre_tool.py +0 -0
  138. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_recall_inject.py +0 -0
  139. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_record_review_decision.py +0 -0
  140. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_record_tier_outcome.py +0 -0
  141. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_restore_session.py +0 -0
  142. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_review_hint_inject.py +0 -0
  143. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_select_tier.py +0 -0
  144. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_select_tier_escalation.py +0 -0
  145. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_session_start.py +0 -0
  146. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_session_stop.py +0 -0
  147. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_session_utils.py +0 -0
  148. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_settings_local_absolute_paths.py +0 -0
  149. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_similarity_boost.py +0 -0
  150. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_statusline.py +0 -0
  151. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_statusline_template_sync.py +0 -0
  152. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_sync_check.py +0 -0
  153. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/hooks/test_template_guard.py +0 -0
  154. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/skills/__init__.py +0 -0
  155. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/skills/_skill_helpers.py +0 -0
  156. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/skills/test_dev_workflow_no_task_type.py +0 -0
  157. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/skills/test_init_session_no_task_type.py +0 -0
  158. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/skills/test_planner_lightweight.py +0 -0
  159. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/skills/test_recall_skill.py +0 -0
  160. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/skills/test_session_backlog_reconciliation.py +0 -0
  161. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/skills/test_setup_templates.py +0 -0
  162. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/skills/test_start_skill_bugfix_flow.py +0 -0
  163. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/skills/test_start_skill_new_flow.py +0 -0
  164. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/skills/test_start_skill_security_audit_phase.py +0 -0
  165. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_check_deletions.py +0 -0
  166. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_cli_ask.py +0 -0
  167. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_cli_entry.py +0 -0
  168. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_cli_init.py +0 -0
  169. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_cli_list.py +0 -0
  170. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_cli_plan.py +0 -0
  171. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_cli_recall.py +0 -0
  172. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_cli_tier.py +0 -0
  173. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_cli_update_breaking_changes.py +0 -0
  174. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_cli_update_deletions.py +0 -0
  175. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_db.py +0 -0
  176. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_docstring_consistency.py +0 -0
  177. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_embedding.py +0 -0
  178. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_excludes.py +0 -0
  179. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_extract_breaking_changes.py +0 -0
  180. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_mcp_server_elicit.py +0 -0
  181. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_migrate.py +0 -0
  182. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_paths.py +0 -0
  183. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_plan_validator.py +0 -0
  184. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_pre_compact.py +0 -0
  185. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_pre_tool_hook.py +0 -0
  186. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_precompact_additional.py +0 -0
  187. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_precompact_toctou_fixes.py +0 -0
  188. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_pricing.py +0 -0
  189. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_recall_chunker.py +0 -0
  190. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_recall_index.py +0 -0
  191. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_references_migration.py +0 -0
  192. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_session_utils_additional.py +0 -0
  193. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_skill_no_builtin_conflict.py +0 -0
  194. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_statusline.py +0 -0
  195. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_stop_additional.py +0 -0
  196. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_stop_hook.py +0 -0
  197. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_stop_precompact_fixes.py +0 -0
  198. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_sync_template_stop.py +0 -0
  199. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_template_pre_tool_hook.py +0 -0
  200. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_usage_ingester.py +0 -0
  201. {claude_code_conductor-2.29.4 → claude_code_conductor-2.31.0}/tests/test_worktree_guard.py +0 -0
@@ -53,15 +53,15 @@
53
53
 
54
54
  ## Platform Compatibility
55
55
 
56
- このファイルは Claude Code / Codex / Cursor から canonical source として読まれる。
56
+ このファイルは Claude Code / Codex / Cursor / OpenCode から canonical source として読まれる。
57
57
  他プラットフォームでの動作差分は以下の通り:
58
58
 
59
- - **`AskUserQuestion`** への参照は、Codex/Cursor では MCP tool `c3_ask_user_question` に読み替える(MCP elicitation 非対応時の fallback は `c3 ask --file <json>`)
60
- - **`Agent` ツール** の参照は、Codex では `.codex/agents/<name>.toml` 経由のサブエージェント、Cursor では現行 runtime のサブエージェント機構(無い場合は同一 agent 内でフェーズ実行しレポート契約のみ維持)に読み替える
61
- - **`Skill` ツール / `/<skill>`** の参照は、Codex では `.agents/skills/<name>/SKILL.md`、Cursor では `.claude/skills/<name>/SKILL.md` を直接読み込む(スラッシュコマンド自動展開は Claude Code 専用機能)
62
- - **`isolation: worktree`** / **`permissionMode`** / **`tools` 制限** など agent フロントマターの一部キーは Claude Code 仕様。adapter 側では読み替え不能なものは無視される
59
+ - **`AskUserQuestion`** への参照は、Codex/Cursor では MCP tool `c3_ask_user_question` に読み替える(MCP elicitation 非対応時の fallback は `c3 ask --file <json>`)。OpenCode では MCP を生成しないため、`AGENTS.md` の指示に従ってユーザーへ直接確認する(`multiSelect: true` は複数選択の質問として維持)
60
+ - **`Agent` ツール** の参照は、Codex では `.codex/agents/<name>.toml` 経由のサブエージェント、Cursor では現行 runtime のサブエージェント機構(無い場合は同一 agent 内でフェーズ実行しレポート契約のみ維持)、OpenCode では `.opencode/agents/c3-<name>.md` を `@mention` で起動するサブエージェントに読み替える
61
+ - **`Skill` ツール / `/<skill>`** の参照は、Codex では `.agents/skills/<name>/SKILL.md`、Cursor では `.claude/skills/<name>/SKILL.md` を直接読み込む。OpenCode では `.opencode/agents/c3-skill-<name>.md`(`.claude/skills/<name>/SKILL.md` を本文に埋め込み済み)を `@mention` で起動する(スラッシュコマンド自動展開は Claude Code 専用機能)
62
+ - **`isolation: worktree`** / **`permissionMode`** / **`tools` 制限** など agent フロントマターの一部キーは Claude Code 仕様。adapter 側では読み替え不能なものは無視される(OpenCode adapter は全 agent に `bash/read/edit/write/websearch` を一律付与する)
63
63
 
64
- レポート(`.claude/reports/`)・state(`.claude/state/`)・memory(`.claude/agent-memory/`)のファイル名と書き込み先は全プラットフォーム共通。adapter 生成物の詳細は `c3 init --platform codex|cursor` で出力される `AGENTS.md` / `.cursor/rules/c3-core.mdc` を参照。
64
+ レポート(`.claude/reports/`)・state(`.claude/state/`)・memory(`.claude/agent-memory/`)のファイル名と書き込み先は全プラットフォーム共通。adapter 生成物の詳細は `c3 init --platform codex|cursor|opencode` で出力される `AGENTS.md` / `.cursor/rules/c3-core.mdc` / `.opencode/agents/` を参照。
65
65
 
66
66
  ---
67
67
 
@@ -1,7 +1,7 @@
1
1
  # Platform Adapters
2
2
 
3
3
  C3 は **Claude Code** を canonical platform として設計されているが、
4
- `c3 init --platform` で Codex / Cursor 向けの adapter を生成し、同じ `.claude/`
4
+ `c3 init --platform` で Codex / Cursor / OpenCode 向けの adapter を生成し、同じ `.claude/`
5
5
  ツリーを共通の source of truth として利用できる。
6
6
 
7
7
  本ドキュメントは:
@@ -22,6 +22,7 @@ C3 は **Claude Code** を canonical platform として設計されているが
22
22
  | `claude` (デフォルト) | `.claude/` のみ | Claude Code ネイティブ |
23
23
  | `codex` | `.claude/` + `AGENTS.md` + `.codex/` + `.agents/` | Codex CLI / 職場 Codex |
24
24
  | `cursor` | `.claude/` + `.cursor/` | Cursor IDE |
25
+ | `opencode` | `.claude/` + `AGENTS.md` + `.opencode/` | OpenCode |
25
26
  | `all` | 上記すべて | マルチプラットフォーム共存 |
26
27
 
27
28
  `c3 init --platform claude` 以外でも `.claude/` は canonical source として残り、
@@ -51,6 +52,16 @@ adapter は派生ファイルを生成するのみ(`.claude/` の中身を変
51
52
  | `.cursor/rules/c3-core.mdc` | Cursor の rule。`alwaysApply: true` で C3 workflow を常時参照 | `_cursor_core_rule` の静的テキスト |
52
53
  | `.cursor/mcp.json` | Cursor の MCP サーバー設定。`mcpServers.c3` のみ管理対象 | `_write_cursor_mcp` で既存 JSON にマージ |
53
54
 
55
+ ### `opencode` 選択時
56
+
57
+ | パス | 内容 | 生成ロジック |
58
+ |---|---|---|
59
+ | `AGENTS.md` | プロジェクト直下。OpenCode に C3 workflow の存在と `@c3-*` agent の使い方を伝える | `_opencode_agents_section` を managed block で挿入(Codex とは別マーカー) |
60
+ | `.opencode/agents/c3-<name>.md` | `.claude/agents/<name>.md` から生成した OpenCode agent 定義 | `_opencode_agent_md`。`interviewer`/`architect`/`planner` は `mode: all-purpose`、他は `mode: subagent` |
61
+ | `.opencode/agents/c3-skill-<name>.md` | `.claude/skills/<name>/SKILL.md` を OpenCode agent として変換 | `_skill_to_opencode_agent_md`。`mode: all-purpose` 固定 |
62
+
63
+ > OpenCode adapter は MCP 設定ファイルを生成しない。`AskUserQuestion` は OpenCode 上でユーザーに直接確認する方式(`AGENTS.md` の adapter 指示で `multiSelect: true` を維持)。
64
+
54
65
  ---
55
66
 
56
67
  ## 3. MCP server (`c3.mcp_server`)
@@ -140,22 +151,22 @@ managed block は使わず、`mcpServers.c3` キーだけを上書き。他の
140
151
 
141
152
  ## 6. 動作差分まとめ
142
153
 
143
- | 機能 | Claude Code | Codex | Cursor |
144
- |---|---|---|---|
145
- | `AskUserQuestion` | ネイティブツール | MCP `c3_ask_user_question` / fallback `c3 ask` | 同左 |
146
- | `Agent` ツール | ネイティブ subagent | `.codex/agents/<name>.toml` 経由の subagent | runtime に subagent 機構があれば使用、無ければ同一 agent 内でフェーズ実行 |
147
- | `Skill` ツール / `/<skill>` | ネイティブ | `.agents/skills/<name>/SKILL.md` を読む | `.claude/skills/<name>/SKILL.md` を rule から指示 |
148
- | `isolation: worktree` | サポート | 一部 Codex runtime で対応、不可時は同一 worktree 実行 | 反映されない |
149
- | `permissionMode` | サポート | 概念なし(無視) | 概念なし(無視) |
150
- | `tools` 制限 | サポート | Codex subagent のツール制限に部分対応 | rule テキスト内で補完 |
151
- | `hooks` (lifecycle) | サポート | 非対応(無視) | 非対応(無視) |
152
- | `memory` (`MEMORY.md` 注入) | サポート | `.claude/agent-memory/` を共通参照 | 同左 |
153
- | パターン昇格 (`/promote-pattern`) | ネイティブ | `c3 init --platform codex` 後は `.agents/skills/promote-pattern/SKILL.md` を読んで実行 | rule から `.claude/skills/promote-pattern/SKILL.md` を指示 |
154
- | レポート (`.claude/reports/`) | 共通 | 共通 | 共通 |
155
- | state (`.claude/state/`) | 共通 | 共通 | 共通 |
154
+ | 機能 | Claude Code | Codex | Cursor | OpenCode |
155
+ |---|---|---|---|---|
156
+ | `AskUserQuestion` | ネイティブツール | MCP `c3_ask_user_question` / fallback `c3 ask` | 同左 | `AGENTS.md` の指示でユーザーに直接確認(`multiSelect` 維持) |
157
+ | `Agent` ツール | ネイティブ subagent | `.codex/agents/<name>.toml` 経由の subagent | runtime に subagent 機構があれば使用、無ければ同一 agent 内でフェーズ実行 | `.opencode/agents/c3-<name>.md` を `@mention` で起動 |
158
+ | `Skill` ツール / `/<skill>` | ネイティブ | `.agents/skills/<name>/SKILL.md` を読む | `.claude/skills/<name>/SKILL.md` を rule から指示 | `.opencode/agents/c3-skill-<name>.md`(本文に `.claude/skills/<name>/SKILL.md` を埋め込み) |
159
+ | `isolation: worktree` | サポート | 一部 Codex runtime で対応、不可時は同一 worktree 実行 | 反映されない | 反映されない |
160
+ | `permissionMode` | サポート | 概念なし(無視) | 概念なし(無視) | 概念なし(無視) |
161
+ | `tools` 制限 | サポート | Codex subagent のツール制限に部分対応 | rule テキスト内で補完 | 全 agent に `bash/read/edit/write/websearch` を付与 |
162
+ | `hooks` (lifecycle) | サポート | 非対応(無視) | 非対応(無視) | 非対応(無視) |
163
+ | `memory` (`MEMORY.md` 注入) | サポート | `.claude/agent-memory/` を共通参照 | 同左 | 同左 |
164
+ | パターン昇格 (`/promote-pattern`) | ネイティブ | `c3 init --platform codex` 後は `.agents/skills/promote-pattern/SKILL.md` を読んで実行 | rule から `.claude/skills/promote-pattern/SKILL.md` を指示 | `.opencode/agents/c3-skill-promote-pattern.md` を `@mention` |
165
+ | レポート (`.claude/reports/`) | 共通 | 共通 | 共通 | 共通 |
166
+ | state (`.claude/state/`) | 共通 | 共通 | 共通 | 共通 |
156
167
 
157
168
  レポート・state・memory のファイル名と書き込み先は全プラットフォーム共通。これにより
158
- Claude Code / Codex / Cursor が同じプロジェクトを行き来しても workflow 状態が保たれる。
169
+ Claude Code / Codex / Cursor / OpenCode が同じプロジェクトを行き来しても workflow 状態が保たれる。
159
170
 
160
171
  ---
161
172
 
@@ -164,4 +175,6 @@ Claude Code / Codex / Cursor が同じプロジェクトを行き来しても wo
164
175
  - **`AskUserQuestion` の `multiSelect: true`**: MCP elicitation の仕様上、ホストが multi-select UI に対応していない場合は単一選択に degrade される。`c3 ask --file` の fallback は multi-select に対応
165
176
  - **Cursor の subagent**: 2026-05 時点で Cursor は dedicated subagent 機構が限定的。adapter は「同一 agent でフェーズ実行・レポート契約を維持」を方針とする
166
177
  - **Codex の `isolation: worktree`**: Codex 側の subagent runtime に依存。worktree 非対応の場合は無視される
178
+ - **OpenCode の `AskUserQuestion`**: OpenCode adapter は MCP 設定を生成しないため、`c3_ask_user_question` ツールは使わず `AGENTS.md` の指示に従ってユーザーへ直接確認する。`multiSelect: true` は「複数選択の質問」として維持するよう指示済み
179
+ - **OpenCode の `tools` 制限**: 生成される agent には一律で `bash/read/edit/write/websearch` を付与する。Claude 側 frontmatter の細かな `tools` 制限は反映されない(C3 の `code-reviewer` / `security-reviewer` は Claude 側でもレポート出力のため `write` を持つ)
167
180
  - **改行コード**: adapter 生成ファイルは LF 改行で書き出す(`newline="\n"`)。`.gitattributes` で `eol=lf` を固定済み
@@ -19,60 +19,19 @@ user-invocable: false
19
19
  今日のセッションファイルに以下を追記する(未登録の場合のみ):
20
20
  - `- [ ] ヒアリング` / `- [ ] 設計` / `- [ ] 計画`
21
21
 
22
- ### A-1: 背景・きっかけ
22
+ ### A-1〜A-3: 動的ヒアリング(ルーブリック型)
23
23
 
24
- AskUserQuestion ツール:
25
- ```json
26
- {
27
- "questions": [{
28
- "question": "背景・きっかけを教えてください(なぜ今これが必要ですか?)",
29
- "options": [
30
- { "label": "ユーザーからの要望", "description": "具体的な声があった" },
31
- { "label": "ビジネス上の要件", "description": "事業的な理由がある" },
32
- { "label": "技術的な負債解消", "description": "将来のために今直したい" },
33
- { "label": "パフォーマンス問題", "description": "遅い・重いを解決したい" }
34
- ]
35
- }]
36
- }
37
- ```
38
-
39
- ### A-2: 制約・前提条件
40
-
41
- AskUserQuestion ツール:
42
- ```json
43
- {
44
- "questions": [{
45
- "question": "制約や前提条件はありますか?(複数選択可)",
46
- "options": [
47
- { "label": "納期がある", "description": "期日を後で教えてください" },
48
- { "label": "既存APIを壊せない", "description": "後方互換性が必要" },
49
- { "label": "特定の技術スタックに限定", "description": "使える技術が決まっている" },
50
- { "label": "特になし" }
51
- ],
52
- "multiSelect": true
53
- }]
54
- }
55
- ```
24
+ **最初に必ず** `.claude/skills/dev-workflow/references/interview-rubric.md` を Read する(記憶・推測で進めない)。
25
+ その指針に従い、床 5 観点(①背景・目的 ②スコープ境界 ③制約・前提 ④非機能要件 ⑤成功条件)を
26
+ **動的にヒアリング**する。要点:
56
27
 
57
- 制約を選んだ場合は補足情報(納期の日付など)を追加で確認する。
28
+ - 質問文・選択肢はタスク固有に**その場で生成**する(固定テンプレの 4 択を使わない)。`Other`(自由記述)は常設。
29
+ - 会話コンテキストと既存 `requirements-report` で**判明済みの観点は再質問しない**。
30
+ - 1 回の `AskUserQuestion` = 1 問(CLAUDE.md「質問は 1 回に 1 つ」)。深掘りは設計を左右する不明点のみ 1 問。
31
+ - **停止条件**: 床 5 観点が十分 / 質問総数 **上限 6 問** 到達 / ユーザーが「もう十分」。床充足なら即停止する。
32
+ - requirements-report 生成前に **self-check**: 5 観点に確定内容があるか点検し、空欄は推測で埋めず「未確定事項」として明示する。
58
33
 
59
- ### A-3: 非機能要件
60
-
61
- AskUserQuestion ツール:
62
- ```json
63
- {
64
- "questions": [{
65
- "question": "特に重視したい品質特性はありますか?",
66
- "options": [
67
- { "label": "セキュリティ", "description": "認証・認可・データ保護を重視" },
68
- { "label": "パフォーマンス", "description": "速度・スループットを重視" },
69
- { "label": "保守性", "description": "読みやすさ・変更しやすさを重視" },
70
- { "label": "特になし・バランスよく" }
71
- ],
72
- "multiSelect": true
73
- }]
74
- }
75
- ```
34
+ 詳細手順・予測可能性の担保根拠は `references/interview-rubric.md` を参照。
76
35
 
77
36
  ### A-4: requirements-report の生成と承認
78
37
 
@@ -111,25 +70,19 @@ AskUserQuestion ツール:
111
70
  今日のセッションファイルに以下を追記する(未登録の場合のみ):
112
71
  - `- [ ] 設計` / `- [ ] 計画`
113
72
 
114
- ### B-1: 技術スタックの確認
73
+ ### B-1〜B-2: 動的設計確認(ルーブリック型)
115
74
 
116
- AskUserQuestion ツール:
117
- ```json
118
- {
119
- "questions": [{
120
- "question": "技術スタックについて制約はありますか?",
121
- "options": [
122
- { "label": "既存スタックに合わせる", "description": "使用中の言語・FWに統一する" },
123
- { "label": "最適なものを選んでほしい", "description": "推薦に任せる" },
124
- { "label": "指定がある", "description": "使う技術を具体的に伝えます" }
125
- ]
126
- }]
127
- }
128
- ```
75
+ **最初に必ず** `.claude/skills/dev-workflow/references/design-rubric.md` を Read する(記憶・推測で進めない)。
76
+ その指針に従い、床 4 観点(①技術スタック制約 ②要件から導く設計判断ポイント ③非機能の実現方針 ④トレードオフ分岐)を
77
+ **動的に確認**する。要点:
129
78
 
130
- ### B-2: 設計と不明点の確認
79
+ - 技術スタック制約を起点に、要件から設計判断ポイントを**その場で列挙**して確認する(固定テンプレの 3 択を使わない)。
80
+ - 要件から自明に決まる設計判断(非機能の実現方針が要件から定まる場合を含む)は再質問しない。複数案があるものは比較の軸も併せて提示する。
81
+ - 1 回の `AskUserQuestion` = 1 問。設計を左右する不明点のみ深掘り(控えめ)。
82
+ - **停止条件**: 床 4 観点が十分 / 質問総数 **上限 4 問** 到達 / ユーザーが「もう十分」。床充足なら即停止する。
83
+ - architecture-report 生成前に **self-check**: 4 観点に確定内容があるか点検し、空欄は推測で埋めず「未確定事項」として明示する。
131
84
 
132
- 要件をもとに設計案を作成する。不明点があれば AskUserQuestion ツールで確認する。
85
+ 詳細手順は `references/design-rubric.md` を参照。
133
86
 
134
87
  ### B-3: architecture-report の生成と承認
135
88
 
@@ -0,0 +1,62 @@
1
+ # Design Rubric(設計・ルーブリック)
2
+
3
+ `dev-workflow` フェーズ B(設計)で architect ペルソナが参照する**動的設計確認の指針**。
4
+ `/start` で親 Claude が `.claude/agents/architect.md` のペルソナを採用した後、本ファイルを Read して
5
+ **床観点をルーブリックに従って動的に確認する**。フェーズ B(旧 B-1 + B-2 を統合)専用。
6
+
7
+ 設計思想(ハイブリッド): **確認する観点カテゴリ=固定**(予測可能)/
8
+ **質問文・選択肢・深掘り=動的**(要件から導いてその場で生成する)。
9
+
10
+ ---
11
+
12
+ ## 床観点(必ず押さえる 4 観点)
13
+
14
+ | # | 観点 | 確認したいこと |
15
+ |---|---|---|
16
+ | 1 | 技術スタック制約 | 既存スタックに合わせる / 最適なものを選ぶ / 指定がある |
17
+ | 2 | 主要な設計判断ポイント | 要件から導く分岐(データ保存方式・連携方式・状態管理・モジュール境界 等) |
18
+ | 3 | 非機能の実現方針 | requirements-report の非機能要件を設計でどう満たすか |
19
+ | 4 | トレードオフ分岐 | 複数案があり採用判断が要る箇所(採用理由を記録する) |
20
+
21
+ architect は interviewer と異なり**構造化(選択肢付き)**で確認する。
22
+ 設計判断は選択肢を明示した方がユーザーが選びやすく、トレードオフも提示しやすい。
23
+
24
+ ---
25
+
26
+ ## 動的確認のフロー
27
+
28
+ ### Step 1: 既知情報の取り込み
29
+
30
+ `requirements-report`(コンテキスト内になければ Glob で最新を Read)と既存コード(Glob / Grep)を読み、
31
+ 床 4 観点を「判明 / 未判明」でマークする。要件から自明に決まる設計判断は再質問しない。
32
+
33
+ ### Step 2: 技術スタック制約を起点に動的確認
34
+
35
+ 1. まず観点 1(技術スタック制約)を確認する。
36
+ 2. 続いて、要件から**主要な設計判断ポイント(観点 2)を動的に列挙**し、判断が要るものを確認する。
37
+ - 質問文・選択肢は要件に即してその場で生成する(固定テンプレを使わない)。
38
+ - 複数案があるものは比較の軸(観点 4 のトレードオフ)も併せて提示する。
39
+ 3. 非機能の実現方針(観点 3)に未確定があれば確認する。
40
+
41
+ - **1 回の `AskUserQuestion` = 1 問**(CLAUDE.md「質問は 1 回に 1 つ」)。
42
+ - 設計を左右する不明点のみ、**1 観点につき 1 問まで**深掘りする(控えめ)。
43
+
44
+ ### Step 3: 停止条件(ガードレール)
45
+
46
+ 以下のいずれかで確認を終了し、B-3(architecture-report 生成)へ進む。
47
+
48
+ - **床 4 観点すべてが設計判断に十分**になった(→ 床充足で即停止。残り質問枠があっても追加しない)。
49
+ - 質問総数が **上限 4 問** に達した(残る未確定は report に「未確定事項」として明記)。
50
+ - ユーザーが「もう十分」と表明した。
51
+
52
+ ### Step 4: self-check(architecture-report 生成前)
53
+
54
+ report を Write する直前に、床 4 観点それぞれに確定内容があるか点検する。
55
+ 空欄は推測で埋めず、report に「**未確定事項**」として明示する(後段の planner が把握できる形で残す)。
56
+
57
+ ---
58
+
59
+ ## 予測可能性の担保
60
+
61
+ **確認する観点カテゴリは固定**・**質問文と選択肢だけ動的**。
62
+ ユーザーは設計フェーズでおおよそ何を問われるか予測しつつ、タスク固有の設計判断に踏み込める。
@@ -0,0 +1,78 @@
1
+ # Interview Rubric(ヒアリング・ルーブリック)
2
+
3
+ `dev-workflow` フェーズ A(ヒアリング)で interviewer ペルソナが参照する**動的ヒアリング指針**。
4
+ `/start` で親 Claude が `.claude/agents/interviewer.md` のペルソナを採用した後、本ファイルを Read して
5
+ **床観点をルーブリックに従って動的にヒアリングする**。フェーズ A 専用。
6
+
7
+ 設計思想(ハイブリッド): **聞く観点カテゴリ=固定**(ユーザーは何を聞かれるか予測できる)/
8
+ **質問文・選択肢・深掘り=動的**(タスク固有にその場で生成し、毎回同じ固定テンプレに縛られない)。
9
+
10
+ ---
11
+
12
+ ## 床観点(必ず埋める 5 観点)
13
+
14
+ ヒアリング終了時、以下 5 観点それぞれに「設計判断に足る確定内容」があることを目指す。
15
+ これは**最低限のカバレッジ床**であり、各観点の質問文・選択肢はタスクに合わせて動的に作る。
16
+
17
+ | # | 観点 | 確認したいこと |
18
+ |---|---|---|
19
+ | 1 | 背景・目的 | なぜ今これが必要か。解決したい課題・きっかけ |
20
+ | 2 | スコープ境界 | やること / やらないこと の線引き。今回の範囲外 |
21
+ | 3 | 制約・前提 | 納期・後方互換・技術スタック・運用環境などの制約 |
22
+ | 4 | 非機能要件 | 重視する品質特性(セキュリティ / パフォーマンス / 保守性 等) |
23
+ | 5 | 成功条件 | 何をもって完成とするか。受け入れ基準・完了の定義 |
24
+
25
+ > 観点 5(成功条件)は固定テンプレ時代に欠けていた観点。設計の手戻りを減らすため必ず確認する。
26
+
27
+ ---
28
+
29
+ ## 動的ヒアリングのループ
30
+
31
+ ### Step 1: 既知情報の取り込み
32
+
33
+ ヒアリングを始める前に、**会話コンテキスト**と**既存 `requirements-report`**(あれば Glob で最新を Read)を読み、
34
+ 床 5 観点それぞれを「判明 / 未判明」でマークする。
35
+
36
+ - **判明済みの観点は再質問しない**(ユーザーが既に話した内容を聞き返さない)。
37
+ - 判明が部分的なら「未判明(部分)」とし、不足部分だけを後続で確認する。
38
+
39
+ ### Step 2: 未判明観点を 1 問ずつ動的生成
40
+
41
+ 未判明の観点について、**タスク固有の質問文と選択肢をその場で生成**して `AskUserQuestion` で確認する。
42
+
43
+ - CLAUDE.md「質問は 1 回に 1 つ」に従い、**1 回の `AskUserQuestion` = 1 問**(`multiSelect` 可)。
44
+ - 選択肢はタスク文脈に即して動的に作る。固定テンプレの 4 択をそのまま使わない。
45
+ - `Other`(自由記述)は常に残し、ユーザーが選択肢外を答えられる余白を確保する(対話余白型)。
46
+ - スタイルは軽量・自由記述寄り。ユーザーが話しやすいよう、選択肢で誘導しすぎない。
47
+
48
+ ### Step 3: 深掘り判定(控えめ)
49
+
50
+ 回答を受けたら「この観点は**設計判断に十分な解像度**か」を自己評価する。
51
+
52
+ - 不足していて、かつ**設計を左右する不明点**である場合に限り、追加で **1 問だけ**深掘りする。
53
+ - 「念のため」「より詳しく」程度の理由では深掘りしない(コスト増・予測可能性低下を避ける)。
54
+
55
+ ### Step 4: 停止条件(ガードレール)
56
+
57
+ 以下のいずれかを満たしたらヒアリングを終了し、A-4(report 生成)へ進む。
58
+
59
+ - **床 5 観点すべてが「設計判断に十分」**になった(→ 床充足で即停止。残り質問枠があっても追加しない)。
60
+ - 質問総数が **上限 6 問** に達した(残る未判明観点は report に「未確定事項」として明記する)。
61
+ - ユーザーが「もう十分」「これで進めて」と表明した(→ 即停止)。
62
+
63
+ ### Step 5: self-check(requirements-report 生成前)
64
+
65
+ report を Write する直前に、床 5 観点それぞれに 1 行以上の確定内容があるか点検する。
66
+
67
+ - 空欄の観点は**黙って推測で埋めない**。report に「**未確定事項**」セクションを設けて明示する。
68
+ - 「未確定」と分かる形で残すことで、後段の architect / planner が補完すべき箇所を把握できる。
69
+
70
+ ---
71
+
72
+ ## 予測可能性の担保(この設計の肝)
73
+
74
+ - **何を聞かれるか(観点カテゴリ)は固定** → ユーザーは毎回おおよそ同じ範囲を問われると予測できる。
75
+ - **どう聞かれるか(質問文・選択肢・深掘り)だけが動的** → タスク固有の精度が上がる。
76
+
77
+ この「カテゴリ固定 × 文面動的」が固定テンプレと完全自由の中間(ハイブリッド)であり、
78
+ 予測可能性を保ちながら観点漏れと画一的な質問の両方を避ける狙い。
@@ -217,13 +217,14 @@ recall_chunker.py → embedding.py → recall_index.py
217
217
 
218
218
  ## 6. クロスプラットフォーム adapter
219
219
 
220
- `.claude/` を canonical source としたまま、Codex / Cursor 向けの派生生成物を作る。
220
+ `.claude/` を canonical source としたまま、Codex / Cursor / OpenCode 向けの派生生成物を作る。
221
221
 
222
222
  | プラットフォーム | 生成物 | 生成コマンド |
223
223
  |---|---|---|
224
224
  | Claude Code | `.claude/`(primary) | — |
225
225
  | Codex | `/AGENTS.md` / `.codex/` / `.agents/skills/` | `c3 init --platform codex` |
226
226
  | Cursor | `.cursor/rules/c3-core.mdc` / `.cursor/mcp.json` | `c3 init --platform cursor` |
227
+ | OpenCode | `/AGENTS.md` / `.opencode/agents/` | `c3 init --platform opencode` |
227
228
 
228
229
  - 生成ロジック: `adapters.py` + `platforms.py`。adapter 生成物は **派生物**(直接編集すると再生成で上書き・配布元 `.gitignore` で除外)。
229
230
  - `AskUserQuestion` 互換: MCP tool `c3_ask_user_question`(`mcp_server.py`)、非対応時の fallback は `c3 ask`(`cli_ask.py`)。
@@ -1,5 +1,46 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.31.0] - 2026-06-06
4
+
5
+ **標準ワークフローのヒアリング/設計フェーズを動的化(機能改善・破壊的変更なし)**: `dev-workflow` のフェーズ A(interviewer)と フェーズ B(architect)の固定 `AskUserQuestion` テンプレ(毎回同じ4択・3択)を、ルーブリック型ハイブリッドの動的生成に置き換えた。「聞く観点カテゴリ=固定(予測可能)/質問文・選択肢・深掘り=動的(タスク固有)」を両立させ、固定テンプレでは拾えなかった観点(特に成功条件/受け入れ基準)を掘れるようにする。
6
+
7
+ ### 追加
8
+
9
+ - **`.claude/skills/dev-workflow/references/interview-rubric.md`(新規)**: フェーズ A の動的ヒアリング指針。床5観点(背景・目的/スコープ境界/制約・前提/非機能要件/成功条件)を固定の「カバレッジ床」として持ち、質問文・選択肢はタスク固有に動的生成する。会話・既存 requirements-report で判明済みの観点は再質問しない。ガードレール(上限6問・床充足で即停止・深掘りは設計を左右する不明点のみ1問)と report 生成前の self-check(空欄は推測で埋めず「未確定事項」として明示)を規定。対話余白型(自由記述寄り・`Other` 常設)。
10
+ - **`.claude/skills/dev-workflow/references/design-rubric.md`(新規)**: フェーズ B の動的設計確認指針。床4観点(技術スタック制約/要件から導く設計判断ポイント/非機能の実現方針/トレードオフ分岐)。技術スタック制約を起点に設計判断ポイントを動的に列挙する構造化型。上限4問・床充足で即停止・self-check 付き。
11
+
12
+ ### 変更
13
+
14
+ - **`dev-workflow/SKILL.md` フェーズ A**: 固定テンプレ A-1/A-2/A-3(背景・制約・非機能の3つの固定 `AskUserQuestion`)を `interview-rubric.md` 参照の動的ヒアリング手順に置換。
15
+ - **`dev-workflow/SKILL.md` フェーズ B**: 固定3択の B-1(技術スタック確認)を `design-rubric.md` 参照の動的確認に置換し、既に動的だった B-2 と統合。
16
+ - A-4 / B-3(requirements-report・architecture-report の生成と承認)、承認フロー、セッションファイルの `[x]` 化タイミング、知識蓄積セクションは**無改変**。
17
+
18
+ ### 後方互換
19
+
20
+ - 変更は `.claude/skills/dev-workflow/` 配下(SKILL.md と新規 references 2件)のみ。公開 API・CLI・DB スキーマ・他フェーズ(C/D/E)・hook に変更なし。`AskUserQuestion` を使う対話フロー自体は維持され、利用者から見た承認フローは不変。**破壊的変更なし**・migration 不要。
21
+
22
+ ## [2.30.0] - 2026-06-02
23
+
24
+ **新プラットフォーム adapter(機能追加・破壊的変更なし)**: `c3 init --platform opencode` で [OpenCode](https://opencode.ai) 向けの adapter を生成できるようになった。`.claude/` を canonical source としたまま、`AGENTS.md`(C3 専用 managed block)と `.opencode/agents/c3-*.md` / `.opencode/agents/c3-skill-*.md` を派生生成する。外部コントリビューター(PR #3 / @ma2tak)の実装に、C3 側でテスト・ドキュメント整備を追加してリリースする。
25
+
26
+ ### 追加
27
+
28
+ - **OpenCode adapter(`c3 init --platform opencode`)**: `SUPPORTED_PLATFORMS` に `opencode` を追加。生成物は (1) `AGENTS.md` に C3 workflow の存在と `@c3-*` agent の使い方を記す managed block(Codex とは別マーカー `<!-- BEGIN/END C3 OPENCODE ADAPTER -->`)、(2) `.claude/agents/<name>.md` から変換した `.opencode/agents/c3-<name>.md`(`interviewer`/`architect`/`planner` は `mode: all-purpose`、他は `mode: subagent`)、(3) `.claude/skills/<name>/SKILL.md` から変換した `.opencode/agents/c3-skill-<name>.md`(`mode: all-purpose`)。`c3 init --platform all` にも含まれる。
29
+ - **OpenCode adapter のテスト(`tests/test_adapters.py`)**: 外部 contract から書く既存方針に倣い、`_opencode_agent_md` の必須キーと mode マッピング(interactive 3 種 / その他)、`_skill_to_opencode_agent_md`、`_opencode_agents_section` の rules / CLAUDE.md 注入と空時の省略、`scaffold_adapters((opencode,))` の生成ファイル・managed block・冪等性・`.claude/` 不在時 `FileNotFoundError` を固定する回帰テストを追加。
30
+
31
+ ### 動作仕様(既知の差分)
32
+
33
+ - **MCP を生成しない**: OpenCode adapter は `.codex/config.toml` / `.cursor/mcp.json` のような MCP 設定を作らない。`AskUserQuestion` は `AGENTS.md` の指示に従ってユーザーへ直接確認する方式(`multiSelect: true` は複数選択の質問として維持)。
34
+ - **`tools` 一律付与**: 生成される agent / skill には一律で `bash/read/edit/write/websearch` を付与する。Claude 側 frontmatter の細かな `tools` 制限は反映されない(C3 の `code-reviewer` / `security-reviewer` は Claude 側でもレポート出力のため `write` を持つ)。
35
+
36
+ ### ドキュメント
37
+
38
+ - `.claude/docs/platform-adapters.md`(§1 選択肢・§2 生成物・§6 動作差分・§7 既知の制限)、`.claude/CLAUDE.md`(Platform Compatibility)、`README.md`、`docs/cli-reference.md`、`docs/getting-started.md`、`ARCHITECTURE.md` に `opencode` を追記。
39
+
40
+ ### 後方互換
41
+
42
+ - 既存プラットフォーム(claude / codex / cursor)の生成物・挙動に変更なし。`opencode` は明示指定(または `all`)時のみ生成される追加機能。**破壊的変更なし**・migration 不要。
43
+
3
44
  ## [2.29.4] - 2026-05-31
4
45
 
5
46
  **ドキュメント PATCH(コード変更・破壊的変更・migration なし)**: Anthropic 公式「Prompting best practices」(Claude Opus 4.8 / Sonnet 4.6 等の最新モデル向け)の推奨を C3 の agent 定義に反映。`code-reviewer` / `security-reviewer` / `developer` / `wt_developer` の 4 定義にプロンプト文言を 1 行ずつ追加した。コード・公開 API・DB スキーマに変更なし。
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-code-conductor
3
- Version: 2.29.4
3
+ Version: 2.31.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
@@ -192,7 +192,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
192
192
  | コマンド | 役割 |
193
193
  |---|---|
194
194
  | `c3 init` | 利用先プロジェクトに `.claude/` を展開する |
195
- | `c3 init --platform codex|cursor|all` | `.claude/` を canonical source にしたまま Codex/Cursor adapter を追加 |
195
+ | `c3 init --platform codex|cursor|opencode|all` | `.claude/` を canonical source にしたまま Codex/Cursor/OpenCode adapter を追加 |
196
196
  | `c3 update` | `.claude/` をパッケージ最新版へ更新する(個人ファイルはスキップ) |
197
197
  | `c3 list-agents` / `list-skills` | 設置済みアセットを一覧表示 |
198
198
  | `c3 doctor` | 環境診断(`.claude/`・settings.json・claude バイナリ・adapter 生成物) |
@@ -262,14 +262,15 @@ c3 init
262
262
 
263
263
  `c3 init` がパッケージに同梱された `.claude/` テンプレートをカレントディレクトリへコピーします。後日テンプレート側を更新したい場合は `c3 update` で差分のみ反映できます(`reports/` や `memory/sessions/` 等の個人ファイルは保持されます)。
264
264
 
265
- Codex/Cursor でも同じ C3 workflow を使う場合は、`.claude/` を動かさず adapter を追加します。
265
+ Codex/Cursor/OpenCode でも同じ C3 workflow を使う場合は、`.claude/` を動かさず adapter を追加します。
266
266
 
267
267
  ```bash
268
- c3 init --platform codex # AGENTS.md / .agents/skills / .codex を生成
269
- c3 init --platform cursor # .cursor/rules / .cursor/mcp.json を生成
268
+ c3 init --platform codex # AGENTS.md / .agents/skills / .codex を生成
269
+ c3 init --platform cursor # .cursor/rules / .cursor/mcp.json を生成
270
+ c3 init --platform opencode # AGENTS.md / .opencode/agents を生成
270
271
  ```
271
272
 
272
- Codex/Cursor adapter は `.claude/skills` と `.claude/agents` を参照元にします。`AskUserQuestion` は MCP tool `c3_ask_user_question`、または fallback の `c3 ask` で単一選択・複数選択を維持します。Claude Code の `Agent` / `Skill` tool 前提は、Codex では `.codex/agents/` と `.agents/skills/`、Cursor では `.cursor/rules/c3-core.mdc` で読み替えます。
273
+ Codex/Cursor/OpenCode adapter は `.claude/skills` と `.claude/agents` を参照元にします。`AskUserQuestion` は MCP tool `c3_ask_user_question`、または fallback の `c3 ask` で単一選択・複数選択を維持します(OpenCode は MCP を生成せず `AGENTS.md` の指示でユーザーに直接確認)。Claude Code の `Agent` / `Skill` tool 前提は、Codex では `.codex/agents/` と `.agents/skills/`、Cursor では `.cursor/rules/c3-core.mdc`、OpenCode では `.opencode/agents/` の `@c3-*` で読み替えます。
273
274
 
274
275
  **3. プロジェクトを Claude Code で開き、初期設定を行う**
275
276
 
@@ -145,7 +145,7 @@ C3 のスラッシュコマンドはすべてスキル(`skills/{name}/SKILL.md
145
145
  | コマンド | 役割 |
146
146
  |---|---|
147
147
  | `c3 init` | 利用先プロジェクトに `.claude/` を展開する |
148
- | `c3 init --platform codex|cursor|all` | `.claude/` を canonical source にしたまま Codex/Cursor adapter を追加 |
148
+ | `c3 init --platform codex|cursor|opencode|all` | `.claude/` を canonical source にしたまま Codex/Cursor/OpenCode adapter を追加 |
149
149
  | `c3 update` | `.claude/` をパッケージ最新版へ更新する(個人ファイルはスキップ) |
150
150
  | `c3 list-agents` / `list-skills` | 設置済みアセットを一覧表示 |
151
151
  | `c3 doctor` | 環境診断(`.claude/`・settings.json・claude バイナリ・adapter 生成物) |
@@ -215,14 +215,15 @@ c3 init
215
215
 
216
216
  `c3 init` がパッケージに同梱された `.claude/` テンプレートをカレントディレクトリへコピーします。後日テンプレート側を更新したい場合は `c3 update` で差分のみ反映できます(`reports/` や `memory/sessions/` 等の個人ファイルは保持されます)。
217
217
 
218
- Codex/Cursor でも同じ C3 workflow を使う場合は、`.claude/` を動かさず adapter を追加します。
218
+ Codex/Cursor/OpenCode でも同じ C3 workflow を使う場合は、`.claude/` を動かさず adapter を追加します。
219
219
 
220
220
  ```bash
221
- c3 init --platform codex # AGENTS.md / .agents/skills / .codex を生成
222
- c3 init --platform cursor # .cursor/rules / .cursor/mcp.json を生成
221
+ c3 init --platform codex # AGENTS.md / .agents/skills / .codex を生成
222
+ c3 init --platform cursor # .cursor/rules / .cursor/mcp.json を生成
223
+ c3 init --platform opencode # AGENTS.md / .opencode/agents を生成
223
224
  ```
224
225
 
225
- Codex/Cursor adapter は `.claude/skills` と `.claude/agents` を参照元にします。`AskUserQuestion` は MCP tool `c3_ask_user_question`、または fallback の `c3 ask` で単一選択・複数選択を維持します。Claude Code の `Agent` / `Skill` tool 前提は、Codex では `.codex/agents/` と `.agents/skills/`、Cursor では `.cursor/rules/c3-core.mdc` で読み替えます。
226
+ Codex/Cursor/OpenCode adapter は `.claude/skills` と `.claude/agents` を参照元にします。`AskUserQuestion` は MCP tool `c3_ask_user_question`、または fallback の `c3 ask` で単一選択・複数選択を維持します(OpenCode は MCP を生成せず `AGENTS.md` の指示でユーザーに直接確認)。Claude Code の `Agent` / `Skill` tool 前提は、Codex では `.codex/agents/` と `.agents/skills/`、Cursor では `.cursor/rules/c3-core.mdc`、OpenCode では `.opencode/agents/` の `@c3-*` で読み替えます。
226
227
 
227
228
  **3. プロジェクトを Claude Code で開き、初期設定を行う**
228
229
 
@@ -1,3 +1,3 @@
1
1
  """Claude Code Conductor (C3) - multi-agent orchestration framework for Claude Code."""
2
2
 
3
- __version__ = "2.29.4"
3
+ __version__ = "2.31.0"