claude-dev-env 4.2.0 → 7.0.0

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 (350) hide show
  1. package/.agents/agents/pr-description-writer.md +2 -2
  2. package/.agents/agents/test_agent_frontmatter.py +2 -2
  3. package/.agents/agents/test_pr_description_writer_style.py +1 -3
  4. package/.agents/skills/e-code-review/SKILL.md +12 -12
  5. package/.agents/skills/e-code-review/preflight-proposal.contract.test.mjs +20 -0
  6. package/.agents/skills/e-code-review/reference/fix.md +15 -17
  7. package/.agents/skills/e-code-review/reference/loop.md +35 -39
  8. package/.agents/skills/e-code-review/reference/mode-contract.test.mjs +2 -1
  9. package/.agents/skills/e-code-review/reference/preflight-proposal.md +44 -9
  10. package/.agents/skills/e-code-review/reference/runner-selection.md +13 -14
  11. package/.agents/skills/issue-tracker/SKILL.md +7 -0
  12. package/.agents/skills/pull-request/SKILL.md +216 -0
  13. package/.agents/skills/pull-request/reference/publication-tasks.md +18 -0
  14. package/.agents/skills/pull-request/scripts/github_pr_command_constants/__init__.py +1 -0
  15. package/.agents/skills/pull-request/scripts/github_pr_command_constants/config/__init__.py +1 -0
  16. package/.agents/skills/pull-request/scripts/github_pr_command_constants/config/constants.py +69 -0
  17. package/.agents/skills/pull-request/scripts/pull_request.py +265 -0
  18. package/.agents/skills/pull-request/scripts/recover_legacy_author.py +251 -0
  19. package/.agents/skills/pull-request/scripts/test_github_pr_command_constants.py +58 -0
  20. package/.agents/skills/pull-request/scripts/test_pull_request.py +396 -0
  21. package/.agents/skills/pull-request/scripts/test_recover_legacy_author.py +221 -0
  22. package/.agents/skills/skill-builder/SKILL.md +3 -196
  23. package/.agents/skills/test-runner/SKILL.md +69 -0
  24. package/.agents/skills/test-runner/scripts/preflight_checks.py +365 -0
  25. package/.agents/skills/test-runner/scripts/run_tests.py +316 -0
  26. package/.agents/skills/test-runner/scripts/test_preflight_checks.py +185 -0
  27. package/.agents/skills/test-runner/scripts/test_run_tests.py +281 -0
  28. package/.agents/skills/test-runner/scripts/test_runner_constants/__init__.py +1 -0
  29. package/.agents/skills/test-runner/scripts/test_runner_constants/config/__init__.py +1 -0
  30. package/.agents/skills/test-runner/scripts/test_runner_constants/config/constants.py +96 -0
  31. package/.agents/skills-archived/pr-loop-cloud-transport/reference/identity-and-hooks.md +1 -1
  32. package/_shared/pr-loop/scripts/pr_loop_shared_constants/terminology_sweep_constants.py +6 -0
  33. package/_shared/pr-loop/scripts/terminology_sweep.py +64 -19
  34. package/_shared/pr-loop/scripts/tests/test_terminology_sweep.py +59 -0
  35. package/bin/ever-shipped-skills.mjs +2 -0
  36. package/bin/ever-shipped-skills.test.mjs +8 -0
  37. package/bin/install.agents-home.test.mjs +15 -13
  38. package/bin/install.mjs +37 -1
  39. package/bin/install.policy-lint.test.mjs +78 -0
  40. package/bin/install.prune.test.mjs +149 -20
  41. package/bin/install.pstack-plugin.test.mjs +114 -0
  42. package/bin/install.test.mjs +61 -7
  43. package/bin/refresh-pstack-plugin-skills.test.mjs +211 -0
  44. package/hooks/advisory/pr_done_reminder.py +342 -0
  45. package/hooks/advisory/test_pr_done_reminder.py +249 -0
  46. package/hooks/blocking/bash_post_call_dispatcher.py +53 -6
  47. package/hooks/blocking/code_rules_paired_test.py +22 -15
  48. package/hooks/blocking/pii_prevention_blocker.py +32 -51
  49. package/hooks/blocking/test_bash_post_call_dispatcher.py +55 -17
  50. package/hooks/blocking/test_bash_pre_tool_use_dispatcher.py +1 -4
  51. package/hooks/blocking/test_code_rules_command_dispatch.py +2 -2
  52. package/hooks/blocking/test_code_rules_enforcer_paired_test.py +36 -29
  53. package/hooks/blocking/test_code_rules_js_resume_task_enumeration.py +4 -4
  54. package/hooks/blocking/test_code_rules_js_returns_object_schemaless.py +5 -5
  55. package/hooks/blocking/test_pii_prevention_blocker.py +37 -89
  56. package/hooks/blocking/test_pre_tool_use_dispatcher.py +68 -133
  57. package/hooks/blocking/test_pre_tool_use_dispatcher_native.py +20 -51
  58. package/hooks/blocking/test_precommit_code_rules_gate_native_owner.py +18 -18
  59. package/hooks/gh_post_body_texts.py +195 -0
  60. package/hooks/git-hooks/git_hooks_constants/staged_policy_lint.py +12 -0
  61. package/hooks/git-hooks/pre_commit.py +52 -11
  62. package/hooks/git-hooks/test_installed_policy_lint.py +159 -0
  63. package/hooks/git-hooks/test_native_policy_commit.py +87 -0
  64. package/hooks/git-hooks/test_pre_commit.py +246 -0
  65. package/hooks/hooks.json +1 -16
  66. package/hooks/hooks_constants/bash_post_call_dispatcher_constants.py +14 -2
  67. package/hooks/hooks_constants/bash_pre_tool_use_dispatcher_constants.py +0 -8
  68. package/hooks/hooks_constants/gh_post_body_texts_constants.py +12 -0
  69. package/hooks/hooks_constants/pr_done_reminder_constants.py +98 -0
  70. package/hooks/hooks_constants/pre_tool_use_dispatcher_constants.py +10 -43
  71. package/hooks/hooks_constants/test_bash_post_call_dispatcher_constants.py +17 -7
  72. package/hooks/hooks_constants/test_bash_pre_tool_use_dispatcher_constants.py +0 -7
  73. package/hooks/hooks_constants/test_failure_recorder_constants.py +3 -3
  74. package/hooks/hooks_constants/test_gh_post_body_texts_constants.py +19 -0
  75. package/hooks/hooks_constants/test_pr_done_reminder_constants.py +40 -0
  76. package/hooks/hooks_constants/test_pre_tool_use_dispatcher_constants.py +20 -32
  77. package/hooks/observability/test_failure_recorder.py +1 -1
  78. package/hooks/pyproject.toml +1 -1
  79. package/hooks/test_gh_post_body_texts.py +79 -0
  80. package/package.json +2 -2
  81. package/rules/durable-post-artifacts.md +32 -20
  82. package/rules/gh-cli-conventions.md +23 -13
  83. package/rules/git-workflow.md +21 -8
  84. package/scripts/check.ps1 +0 -1
  85. package/{.agents/skills/run-claude-dev-env/driver.mjs → scripts/ci/installer-lifecycle.mjs} +3 -28
  86. package/scripts/ci/installer-lifecycle.test.mjs +26 -0
  87. package/scripts/ci/windows-installer-lifecycle.ps1 +1 -11
  88. package/scripts/dev_env_scripts_constants/shared_tree_constants.py +4 -5
  89. package/scripts/durable_post_lint.py +206 -0
  90. package/scripts/durable_post_lint_config/config/constants.py +96 -0
  91. package/scripts/durable_post_lint_config/config/test_constants.py +25 -0
  92. package/scripts/policy_lint/adapter_configuration.py +53 -12
  93. package/scripts/policy_lint/adapter_detectors.py +13 -6
  94. package/scripts/policy_lint/adapters.py +7 -4
  95. package/scripts/policy_lint/config/constants.py +5 -0
  96. package/scripts/policy_lint/engine.py +48 -4
  97. package/scripts/policy_lint/model.py +1 -0
  98. package/scripts/policy_lint/registry.py +1 -1
  99. package/scripts/policy_lint/selection.py +2 -1
  100. package/scripts/policy_lint/selection_git.py +2 -0
  101. package/scripts/refresh_pstack_plugin_skills.mjs +200 -0
  102. package/scripts/repository_checks/config/constants.py +0 -5
  103. package/scripts/shared_tree_paths.py +32 -3
  104. package/scripts/test_durable_post_lint.py +332 -0
  105. package/scripts/test_shared_tree_paths.py +33 -0
  106. package/scripts/tests/test_adapter_configuration.py +54 -0
  107. package/scripts/tests/test_policy_lint_rules_archive.py +120 -0
  108. package/scripts/tests/test_policy_lint_rules_engine.py +25 -4
  109. package/scripts/tests/test_policy_lint_rules_installed_loader.py +29 -0
  110. package/scripts/tests/test_policy_lint_rules_registry.py +227 -13
  111. package/scripts/tests/test_policy_lint_selection.py +25 -2
  112. package/scripts/tests/test_policy_lint_selection_native_index.py +30 -0
  113. package/scripts/tests/test_rules.py +3 -7
  114. package/.agents/skills/_shared/pr-loop/.claude/CLAUDE.md +0 -1
  115. package/.agents/skills/_shared/pr-loop/AGENTS.md +0 -1
  116. package/.agents/skills/_shared/pr-loop/audit-contract.md +0 -5
  117. package/.agents/skills/_shared/pr-loop/audit-reply-template.md +0 -5
  118. package/.agents/skills/_shared/pr-loop/code-rules-gate.md +0 -5
  119. package/.agents/skills/_shared/pr-loop/fix-protocol.md +0 -5
  120. package/.agents/skills/_shared/pr-loop/gh-payloads.md +0 -5
  121. package/.agents/skills/_shared/pr-loop/portable-driver.md +0 -149
  122. package/.agents/skills/_shared/pr-loop/post-audit-thread-contract.md +0 -5
  123. package/.agents/skills/_shared/pr-loop/precatch-rubric.md +0 -5
  124. package/.agents/skills/_shared/pr-loop/preflight-proposal.contract.test.mjs +0 -119
  125. package/.agents/skills/_shared/pr-loop/preflight-proposal.md +0 -5
  126. package/.agents/skills/_shared/pr-loop/prompts/.claude/CLAUDE.md +0 -1
  127. package/.agents/skills/_shared/pr-loop/prompts/AGENTS.md +0 -1
  128. package/.agents/skills/_shared/pr-loop/prompts/pr-consistency-audit.xml +0 -324
  129. package/.agents/skills/_shared/pr-loop/scripts/.claude/CLAUDE.md +0 -1
  130. package/.agents/skills/_shared/pr-loop/scripts/AGENTS.md +0 -1
  131. package/.agents/skills/_shared/pr-loop/scripts/RUNTIME_SCRIPTS.md +0 -29
  132. package/.agents/skills/_shared/pr-loop/scripts/_cli_utils.py +0 -22
  133. package/.agents/skills/_shared/pr-loop/scripts/_path_resolver.py +0 -186
  134. package/.agents/skills/_shared/pr-loop/scripts/_xml_utils.py +0 -20
  135. package/.agents/skills/_shared/pr-loop/scripts/audit_category_schema.py +0 -355
  136. package/.agents/skills/_shared/pr-loop/scripts/build_audit_prompt.py +0 -289
  137. package/.agents/skills/_shared/pr-loop/scripts/build_converge_task_list.py +0 -310
  138. package/.agents/skills/_shared/pr-loop/scripts/build_fix_prompt.py +0 -292
  139. package/.agents/skills/_shared/pr-loop/scripts/init_loop_state.py +0 -134
  140. package/.agents/skills/_shared/pr-loop/scripts/portable_converge_driver.py +0 -1646
  141. package/.agents/skills/_shared/pr-loop/scripts/preflight_worktree.py +0 -392
  142. package/.agents/skills/_shared/pr-loop/scripts/select_converge_pacer.py +0 -215
  143. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/.claude/CLAUDE.md +0 -1
  144. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/AGENTS.md +0 -1
  145. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/__init__.py +0 -0
  146. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/audit_category_schema_constants.py +0 -37
  147. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/converge_task_list_constants.py +0 -56
  148. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/handoff_constants.py +0 -45
  149. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/pacer_constants.py +0 -47
  150. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/path_resolver_constants.py +0 -157
  151. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/portable_driver_constants.py +0 -177
  152. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/preflight_constants.py +0 -70
  153. package/.agents/skills/_shared/pr-loop/scripts/teardown_worktrees.py +0 -172
  154. package/.agents/skills/_shared/pr-loop/scripts/test__path_resolver.py +0 -106
  155. package/.agents/skills/_shared/pr-loop/scripts/test_audit_category_schema.py +0 -94
  156. package/.agents/skills/_shared/pr-loop/scripts/test_build_audit_prompt.py +0 -499
  157. package/.agents/skills/_shared/pr-loop/scripts/test_build_converge_task_list.py +0 -140
  158. package/.agents/skills/_shared/pr-loop/scripts/test_build_fix_prompt.py +0 -262
  159. package/.agents/skills/_shared/pr-loop/scripts/test_init_loop_state.py +0 -71
  160. package/.agents/skills/_shared/pr-loop/scripts/test_portable_converge_driver.py +0 -1119
  161. package/.agents/skills/_shared/pr-loop/scripts/test_preflight_worktree.py +0 -287
  162. package/.agents/skills/_shared/pr-loop/scripts/test_select_converge_pacer.py +0 -207
  163. package/.agents/skills/_shared/pr-loop/scripts/test_teardown_worktrees.py +0 -59
  164. package/.agents/skills/_shared/pr-loop/scripts/test_write_handoff.py +0 -201
  165. package/.agents/skills/_shared/pr-loop/scripts/write_audit_outcomes.py +0 -182
  166. package/.agents/skills/_shared/pr-loop/scripts/write_fix_outcomes.py +0 -206
  167. package/.agents/skills/_shared/pr-loop/scripts/write_handoff.py +0 -309
  168. package/.agents/skills/_shared/pr-loop/state-schema.md +0 -5
  169. package/.agents/skills/_shared/pr-loop/worker-spawn.md +0 -5
  170. package/.agents/skills/autoconverge/.claude/CLAUDE.md +0 -1
  171. package/.agents/skills/autoconverge/AGENTS.md +0 -1
  172. package/.agents/skills/autoconverge/SKILL.md +0 -431
  173. package/.agents/skills/autoconverge/reference/.claude/CLAUDE.md +0 -1
  174. package/.agents/skills/autoconverge/reference/AGENTS.md +0 -1
  175. package/.agents/skills/autoconverge/reference/closing-report.md +0 -93
  176. package/.agents/skills/autoconverge/reference/convergence-gates.md +0 -31
  177. package/.agents/skills/autoconverge/reference/convergence.md +0 -219
  178. package/.agents/skills/autoconverge/reference/copilot-findings.md +0 -51
  179. package/.agents/skills/autoconverge/reference/gotchas.md +0 -66
  180. package/.agents/skills/autoconverge/reference/headless-safety.md +0 -44
  181. package/.agents/skills/autoconverge/reference/multi-pr.md +0 -128
  182. package/.agents/skills/autoconverge/reference/self-closing-loop.md +0 -84
  183. package/.agents/skills/autoconverge/reference/stop-conditions.md +0 -127
  184. package/.agents/skills/autoconverge/test_portable_pacer_gate.py +0 -54
  185. package/.agents/skills/autoconverge/workflow/.claude/CLAUDE.md +0 -1
  186. package/.agents/skills/autoconverge/workflow/AGENTS.md +0 -1
  187. package/.agents/skills/autoconverge/workflow/aggregate_runs.py +0 -371
  188. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/.claude/CLAUDE.md +0 -1
  189. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/AGENTS.md +0 -1
  190. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/__init__.py +0 -0
  191. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/render_report_constants.py +0 -250
  192. package/.agents/skills/autoconverge/workflow/converge.clean-audit.test.mjs +0 -665
  193. package/.agents/skills/autoconverge/workflow/converge.codex-gate.test.mjs +0 -472
  194. package/.agents/skills/autoconverge/workflow/converge.contract.test.mjs +0 -64
  195. package/.agents/skills/autoconverge/workflow/converge.copilot-gate.test.mjs +0 -1009
  196. package/.agents/skills/autoconverge/workflow/converge.fix-progress.test.mjs +0 -107
  197. package/.agents/skills/autoconverge/workflow/converge.fix-recovery.test.mjs +0 -33
  198. package/.agents/skills/autoconverge/workflow/converge.merge-conflict.test.mjs +0 -15
  199. package/.agents/skills/autoconverge/workflow/converge.mjs +0 -3132
  200. package/.agents/skills/autoconverge/workflow/converge.p2-advance.test.mjs +0 -202
  201. package/.agents/skills/autoconverge/workflow/converge.path-aware.test.mjs +0 -47
  202. package/.agents/skills/autoconverge/workflow/converge.precatch.test.mjs +0 -152
  203. package/.agents/skills/autoconverge/workflow/converge.run-input.test.mjs +0 -116
  204. package/.agents/skills/autoconverge/workflow/converge_multi.mjs +0 -169
  205. package/.agents/skills/autoconverge/workflow/converge_multi.run-input.test.mjs +0 -173
  206. package/.agents/skills/autoconverge/workflow/convergence_summary.py +0 -110
  207. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a11d903476b803493.jsonl +0 -2
  208. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a26213978adeef6fb.jsonl +0 -2
  209. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a3def0d15ed9d9110.jsonl +0 -2
  210. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a41f41b1b708ee3b7.jsonl +0 -2
  211. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a758b880abecc3ff7.jsonl +0 -2
  212. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a8897b89656b1bd16.jsonl +0 -2
  213. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ab1c2d3e4f5a6b7c8.jsonl +0 -2
  214. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-abd463d744a1437bc.jsonl +0 -2
  215. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ad19d027ae8ee1816.jsonl +0 -2
  216. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/workflows/wf_881252e6-700.json +0 -266
  217. package/.agents/skills/autoconverge/workflow/render_report.py +0 -1024
  218. package/.agents/skills/autoconverge/workflow/test_aggregate_runs.py +0 -134
  219. package/.agents/skills/autoconverge/workflow/test_convergence_summary.py +0 -149
  220. package/.agents/skills/autoconverge/workflow/test_render_report.py +0 -812
  221. package/.agents/skills/hitl/SKILL.md +0 -45
  222. package/.agents/skills/pr-cleanup/SKILL.md +0 -140
  223. package/.agents/skills/pr-cleanup/reference/process-inventory.md +0 -17
  224. package/.agents/skills/pr-cleanup/reference/task-seeds.md +0 -22
  225. package/.agents/skills/pr-name-by-capability/SKILL.md +0 -73
  226. package/.agents/skills/pr-name-by-capability/reference/fetch-commands.md +0 -29
  227. package/.agents/skills/pr-name-by-capability/reference/offense-examples.md +0 -32
  228. package/.agents/skills/pr-name-by-capability/reference/report-template.md +0 -29
  229. package/.agents/skills/pr-name-by-capability/reference/rule-checklist.md +0 -38
  230. package/.agents/skills/pr-name-by-capability/reference/task-seeds.md +0 -10
  231. package/.agents/skills/pr-plain-language-cleanup/SKILL.md +0 -93
  232. package/.agents/skills/pr-refinement/SKILL.md +0 -31
  233. package/.agents/skills/pr-shared-extraction/SKILL.md +0 -177
  234. package/.agents/skills/pr-shared-extraction/reference/examples.md +0 -46
  235. package/.agents/skills/pr-shared-extraction/reference/offense-taxonomy.md +0 -100
  236. package/.agents/skills/pr-small-cl/SKILL.md +0 -52
  237. package/.agents/skills/pr-title-description/SKILL.md +0 -96
  238. package/.agents/skills/prototype/SKILL.md +0 -85
  239. package/.agents/skills/prototype/reference/honest-limitations.md +0 -23
  240. package/.agents/skills/prototype/reference/promotion-tasks.md +0 -23
  241. package/.agents/skills/prototype/scripts/build_sandbox_settings.py +0 -249
  242. package/.agents/skills/prototype/scripts/conftest.py +0 -15
  243. package/.agents/skills/prototype/scripts/launch_sandbox.py +0 -205
  244. package/.agents/skills/prototype/scripts/probe_sandbox_safety.py +0 -311
  245. package/.agents/skills/prototype/scripts/prototype_scripts_constants/__init__.py +0 -1
  246. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/__init__.py +0 -0
  247. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/build_sandbox_settings_constants.py +0 -41
  248. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/launch_sandbox_constants.py +0 -23
  249. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/probe_sandbox_safety_constants.py +0 -45
  250. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/prototype_common_constants.py +0 -10
  251. package/.agents/skills/prototype/scripts/test_build_sandbox_settings.py +0 -275
  252. package/.agents/skills/prototype/scripts/test_launch_sandbox.py +0 -303
  253. package/.agents/skills/prototype/scripts/test_probe_sandbox_safety.py +0 -312
  254. package/.agents/skills/prototype/workflows/promotion.md +0 -25
  255. package/.agents/skills/prototype/workflows/sandbox.md +0 -35
  256. package/.agents/skills/rebase/.claude/CLAUDE.md +0 -1
  257. package/.agents/skills/rebase/AGENTS.md +0 -1
  258. package/.agents/skills/rebase/SKILL.md +0 -178
  259. package/.agents/skills/review-router/SKILL.md +0 -51
  260. package/.agents/skills/review-router/reference/route-policy.json +0 -7
  261. package/.agents/skills/review-router/reference/task-seeds.md +0 -1
  262. package/.agents/skills/review-router/scripts/conftest.py +0 -4
  263. package/.agents/skills/review-router/scripts/review_router.py +0 -50
  264. package/.agents/skills/review-router/scripts/review_router_cli.py +0 -211
  265. package/.agents/skills/review-router/scripts/review_router_constants/__init__.py +0 -1
  266. package/.agents/skills/review-router/scripts/review_router_constants/config/__init__.py +0 -0
  267. package/.agents/skills/review-router/scripts/review_router_constants/config/constants.py +0 -13
  268. package/.agents/skills/review-router/scripts/test_review_router.py +0 -23
  269. package/.agents/skills/review-router/scripts/test_review_router_cli.py +0 -47
  270. package/.agents/skills/review-tier/SKILL.md +0 -56
  271. package/.agents/skills/review-tier/reference/task-seeds.md +0 -1
  272. package/.agents/skills/review-tier/reference/tier-policy.json +0 -9
  273. package/.agents/skills/review-tier/scripts/conftest.py +0 -4
  274. package/.agents/skills/review-tier/scripts/review_tier.py +0 -359
  275. package/.agents/skills/review-tier/scripts/review_tier_constants/__init__.py +0 -1
  276. package/.agents/skills/review-tier/scripts/review_tier_constants/config/__init__.py +0 -0
  277. package/.agents/skills/review-tier/scripts/review_tier_constants/config/constants.py +0 -29
  278. package/.agents/skills/review-tier/scripts/test_generation.py +0 -159
  279. package/.agents/skills/review-tier/scripts/test_review_tier.py +0 -33
  280. package/.agents/skills/run-claude-dev-env/SKILL.md +0 -84
  281. package/.agents/skills/session-log/.claude/CLAUDE.md +0 -1
  282. package/.agents/skills/session-log/AGENTS.md +0 -1
  283. package/.agents/skills/session-log/SKILL.md +0 -170
  284. package/.agents/skills/session-log/templates/frontmatter.md +0 -40
  285. package/.agents/skills/session-tidy/.claude/CLAUDE.md +0 -1
  286. package/.agents/skills/session-tidy/AGENTS.md +0 -1
  287. package/.agents/skills/session-tidy/SKILL.md +0 -191
  288. package/.agents/skills/skill-builder/references/.claude/CLAUDE.md +0 -1
  289. package/.agents/skills/skill-builder/references/AGENTS.md +0 -1
  290. package/.agents/skills/skill-builder/references/delegation-map.md +0 -130
  291. package/.agents/skills/skill-builder/references/description-field.md +0 -111
  292. package/.agents/skills/skill-builder/references/deterministic-elements.md +0 -218
  293. package/.agents/skills/skill-builder/references/progressive-disclosure.md +0 -122
  294. package/.agents/skills/skill-builder/references/self-audit-checklist.md +0 -126
  295. package/.agents/skills/skill-builder/references/skill-modularity.md +0 -111
  296. package/.agents/skills/skill-builder/references/skill-types.md +0 -232
  297. package/.agents/skills/skill-builder/references/thariq-x-post-skills.json +0 -33
  298. package/.agents/skills/skill-builder/templates/.claude/CLAUDE.md +0 -1
  299. package/.agents/skills/skill-builder/templates/AGENTS.md +0 -1
  300. package/.agents/skills/skill-builder/templates/gap-analysis.md +0 -87
  301. package/.agents/skills/skill-builder/workflows/.claude/CLAUDE.md +0 -1
  302. package/.agents/skills/skill-builder/workflows/AGENTS.md +0 -1
  303. package/.agents/skills/skill-builder/workflows/improve-skill.md +0 -136
  304. package/.agents/skills/skill-builder/workflows/new-skill.md +0 -179
  305. package/.agents/skills/skill-builder/workflows/polish-skill.md +0 -139
  306. package/.agents/skills/source-command-sr-loop/SKILL.md +0 -82
  307. package/.agents/skills/update/.claude/CLAUDE.md +0 -1
  308. package/.agents/skills/update/AGENTS.md +0 -1
  309. package/.agents/skills/update/SKILL.md +0 -190
  310. package/_shared/pr-loop/AGENTS.md +0 -1
  311. package/_shared/pr-loop/CLAUDE.md +0 -1
  312. package/_shared/pr-loop/audit-contract.md +0 -183
  313. package/_shared/pr-loop/audit-reply-template.md +0 -151
  314. package/_shared/pr-loop/code-rules-gate.md +0 -65
  315. package/_shared/pr-loop/fix-protocol.md +0 -60
  316. package/_shared/pr-loop/gh-payloads.md +0 -75
  317. package/_shared/pr-loop/post-audit-thread-contract.md +0 -51
  318. package/_shared/pr-loop/precatch-rubric.md +0 -66
  319. package/_shared/pr-loop/preflight-proposal.md +0 -56
  320. package/_shared/pr-loop/scripts/post_audit_thread.py +0 -1242
  321. package/_shared/pr-loop/scripts/pr_loop_shared_constants/post_audit_thread_constants.py +0 -199
  322. package/_shared/pr-loop/scripts/tests/test_post_audit_thread.py +0 -1115
  323. package/_shared/pr-loop/scripts/tests/test_post_audit_thread_constants.py +0 -129
  324. package/_shared/pr-loop/state-schema.md +0 -45
  325. package/_shared/pr-loop/worker-spawn.md +0 -189
  326. package/hooks/_gh_pr_author_swap_utils.py +0 -1225
  327. package/hooks/blocking/conventional_pr_title_gate.py +0 -443
  328. package/hooks/blocking/gh_body_arg_blocker.py +0 -176
  329. package/hooks/blocking/gh_pr_author_enforcer.py +0 -487
  330. package/hooks/blocking/gh_pr_author_restore.py +0 -105
  331. package/hooks/blocking/pr_description_writer_gate.py +0 -256
  332. package/hooks/blocking/test_conventional_pr_title_gate.py +0 -640
  333. package/hooks/blocking/test_gh_body_arg_blocker.py +0 -441
  334. package/hooks/blocking/test_gh_pr_author_enforcer.py +0 -1166
  335. package/hooks/blocking/test_gh_pr_author_restore.py +0 -513
  336. package/hooks/blocking/test_gh_pr_author_swap_utils.py +0 -910
  337. package/hooks/blocking/test_pr_description_writer_gate.py +0 -234
  338. package/hooks/blocking/test_preflight_check.py +0 -343
  339. package/hooks/blocking/test_test_preflight_check.py +0 -80
  340. package/hooks/blocking/test_volatile_path_in_post_blocker.py +0 -322
  341. package/hooks/blocking/volatile_path_in_post_blocker.py +0 -461
  342. package/hooks/hooks_constants/conventional_pr_title_gate_constants.py +0 -58
  343. package/hooks/hooks_constants/gh_pr_author_swap_constants.py +0 -76
  344. package/hooks/hooks_constants/pr_description_writer_gate_constants.py +0 -73
  345. package/hooks/hooks_constants/volatile_path_in_post_blocker_constants.py +0 -55
  346. package/hooks/observability/pr_description_writer_spawn_tracker.py +0 -113
  347. package/hooks/observability/test_pr_description_writer_spawn_tracker.py +0 -150
  348. package/hooks/session/gh_pr_author_session_cleanup.py +0 -175
  349. package/hooks/session/test_gh_pr_author_session_cleanup.py +0 -576
  350. package/hooks/test__gh_pr_author_swap_utils.py +0 -333
@@ -1,129 +0,0 @@
1
- """Tests for post_audit_thread_constants.py extracted constant set."""
2
-
3
- import importlib.util
4
- from pathlib import Path
5
- from types import ModuleType
6
-
7
-
8
- def _load_constants_module() -> ModuleType:
9
- module_path = (
10
- Path(__file__).parent.parent
11
- / "pr_loop_shared_constants"
12
- / "post_audit_thread_constants.py"
13
- )
14
- specification = importlib.util.spec_from_file_location(
15
- "pr_loop_shared_constants.post_audit_thread_constants", module_path
16
- )
17
- assert specification is not None
18
- assert specification.loader is not None
19
- module = importlib.util.module_from_spec(specification)
20
- specification.loader.exec_module(module)
21
- return module
22
-
23
-
24
- constants_module = _load_constants_module()
25
-
26
-
27
- def test_http_request_content_type_is_application_json() -> None:
28
- assert constants_module.HTTP_REQUEST_CONTENT_TYPE == "application/json"
29
-
30
-
31
- def test_http_method_post_constant_is_post() -> None:
32
- assert constants_module.HTTP_METHOD_POST == "POST"
33
-
34
-
35
- def test_http_header_authorization_constant_is_authorization() -> None:
36
- assert constants_module.HTTP_HEADER_AUTHORIZATION == "Authorization"
37
-
38
-
39
- def test_http_header_accept_constant_is_accept() -> None:
40
- assert constants_module.HTTP_HEADER_ACCEPT == "Accept"
41
-
42
-
43
- def test_http_header_content_type_constant_is_content_type() -> None:
44
- assert constants_module.HTTP_HEADER_CONTENT_TYPE == "Content-Type"
45
-
46
-
47
- def test_http_header_github_api_version_constant_is_x_github_api_version() -> None:
48
- assert constants_module.HTTP_HEADER_GITHUB_API_VERSION == "X-GitHub-Api-Version"
49
-
50
-
51
- def test_http_header_user_agent_constant_is_user_agent() -> None:
52
- assert constants_module.HTTP_HEADER_USER_AGENT == "User-Agent"
53
-
54
-
55
- def test_http_authorization_bearer_prefix_is_bearer_with_trailing_space() -> None:
56
- prefix = constants_module.HTTP_AUTHORIZATION_BEARER_PREFIX
57
- assert prefix == "Bearer "
58
- assert prefix.endswith(" ")
59
-
60
-
61
- def test_http_request_timeout_seconds_is_positive_int() -> None:
62
- timeout_seconds = constants_module.HTTP_REQUEST_TIMEOUT_SECONDS
63
- assert isinstance(timeout_seconds, int)
64
- assert timeout_seconds > 0
65
-
66
-
67
- def test_error_response_preview_chars_is_positive_int() -> None:
68
- preview_chars = constants_module.ERROR_RESPONSE_PREVIEW_CHARS
69
- assert isinstance(preview_chars, int)
70
- assert preview_chars > 0
71
-
72
-
73
- def test_single_review_api_path_template_uses_pr_number_placeholder() -> None:
74
- template_text = constants_module.SINGLE_REVIEW_API_PATH_TEMPLATE
75
- assert "{owner}" in template_text
76
- assert "{repo}" in template_text
77
- assert "{pr_number}" in template_text
78
- assert "{review_id}" in template_text
79
-
80
-
81
- def test_single_review_comments_api_path_template_uses_pr_number_placeholder() -> None:
82
- template_text = constants_module.SINGLE_REVIEW_COMMENTS_API_PATH_TEMPLATE
83
- assert "{owner}" in template_text
84
- assert "{repo}" in template_text
85
- assert "{pr_number}" in template_text
86
- assert "{review_id}" in template_text
87
- assert template_text.endswith("/comments")
88
-
89
-
90
- def test_audit_body_skeleton_marker_tokens_present() -> None:
91
- open_marker = constants_module.AUDIT_BODY_SKELETON_OPEN_MARKER
92
- close_marker = constants_module.AUDIT_BODY_SKELETON_CLOSE_MARKER
93
- assert open_marker.startswith("<!--") and open_marker.endswith("-->")
94
- assert close_marker.startswith("<!--") and close_marker.endswith("-->")
95
- assert open_marker != close_marker
96
-
97
-
98
- def test_template_path_resolves_to_existing_markdown_file() -> None:
99
- resolved_path = constants_module.template_path()
100
- assert resolved_path.is_file(), f"missing: {resolved_path}"
101
- assert resolved_path.suffix == ".md"
102
-
103
-
104
- def test_template_contains_skeleton_markers() -> None:
105
- resolved_path = constants_module.template_path()
106
- template_text = resolved_path.read_text(encoding="utf-8")
107
- assert constants_module.AUDIT_BODY_SKELETON_OPEN_MARKER in template_text
108
- assert constants_module.AUDIT_BODY_SKELETON_CLOSE_MARKER in template_text
109
-
110
-
111
- def test_live_test_fixture_names_are_not_exposed_from_production_config_module() -> None:
112
- forbidden_attribute_names = [
113
- "LIVE_TEST_OWNER",
114
- "LIVE_TEST_REPO",
115
- "LIVE_TEST_BRANCH_PREFIX",
116
- "LIVE_TEST_PR_TITLE",
117
- "LIVE_TEST_PR_BODY",
118
- "LIVE_TEST_BASE_BRANCH",
119
- "LIVE_TEST_FIXTURE_FILENAME",
120
- "LIVE_TEST_FIXTURE_CONTENT",
121
- "LIVE_TEST_FIXTURE_LINE_FOR_FINDING_ONE",
122
- "LIVE_TEST_FIXTURE_LINE_FOR_FINDING_TWO",
123
- "LIVE_TEST_FIXTURE_LINE_FOR_FINDING_THREE",
124
- ]
125
- for each_attribute_name in forbidden_attribute_names:
126
- assert not hasattr(constants_module, each_attribute_name), (
127
- f"production config module exposes test-only fixture "
128
- f"{each_attribute_name!r}; move it to test_post_audit_thread.py"
129
- )
@@ -1,45 +0,0 @@
1
- # State schema
2
-
3
- State each PR-loop workflow tracks across iterations. Workflows differ on persistence (in-memory vs files) and which fields they use; shapes overlap.
4
-
5
- ## Common fields
6
-
7
- | Field | Type | Purpose |
8
- |---|---|---|
9
- | `loop_count` | int | Iterations completed; bumps on each AUDIT or tick |
10
- | `last_action` | enum | `fresh`, `audited`, `fixed` — drives next-step dispatch |
11
- | `last_findings` | object | `{p0, p1, p2, total}` count of findings from most recent AUDIT |
12
- | `audit_log` | list[str] | Per-iteration one-line summaries for the final report |
13
- | `starting_sha` | str | `git rev-parse HEAD` at workflow start |
14
- | `loop_comment_index` | dict | `{finding_id: {finding_comment_id, finding_comment_url, thread_node_id, fix_status, ...}}` (`thread_node_id` is the PR review thread node id — `PRRT_kwDOxxx` — captured at audit time when calling `get_review_comments`, used by `resolve_thread` at FIX time) |
15
-
16
- ## autoconverge (workflow and portable pacer)
17
-
18
- Workflow runs hold round state in the workflow journal. On `pacer=portable`, the
19
- continuous driver seeds `pr-converge-state.json` under the job directory and
20
- advances phases through `portable_converge_driver.py`. Portable state carries
21
- `current_head`, `phase`, `codex_clean_at`, `codex_down`, `codex_required`, and
22
- pending `next` / `wait_seconds` stamps. Round shape and terminal gates are
23
- documented in
24
- [`../../.agents/skills/autoconverge/reference/convergence.md`](../../.agents/skills/autoconverge/reference/convergence.md).
25
- The machine readiness checklist is
26
- [`../../.agents/skills/autoconverge/reference/convergence-gates.md`](../../.agents/skills/autoconverge/reference/convergence-gates.md).
27
-
28
- ## Archived workflow extensions
29
-
30
- Historical field lists for retired entry skills live under
31
- `packages/claude-dev-env/.agents/skills-archived/`:
32
-
33
- - **bugteam** — inline orchestrator state, `team_name`, `gate_round_count`, exit payload fields. See [`../../.agents/skills-archived/bugteam/SKILL.md`](../../.agents/skills-archived/bugteam/SKILL.md).
34
- - **pr-converge** — file-backed multi-PR state, phase enum, dual persistence. See [`../../.agents/skills-archived/pr-converge/reference/state-schema.md`](../../.agents/skills-archived/pr-converge/reference/state-schema.md) and [`../../.agents/skills-archived/pr-converge/reference/multi-pr-orchestration.md`](../../.agents/skills-archived/pr-converge/reference/multi-pr-orchestration.md).
35
-
36
- ## Reset semantics
37
-
38
- - **autoconverge** — portable state resets on a fresh `open-run`; workflow journal is per run id.
39
- - **Archived bugteam** — cleared on each new invocation; see archived skill body.
40
- - **Archived pr-converge** — see archived [`state-schema.md`](../../.agents/skills-archived/pr-converge/reference/state-schema.md); multi-PR file state persists across orchestrator runs and only `last_seen_comment_id` advances monotonically.
41
-
42
- ## Convergence checks
43
-
44
- - **autoconverge** — `packages/claude-dev-env/_shared/pr-loop/scripts/check_convergence.py` is the single readiness source; gate labels are listed in [`../../.agents/skills/autoconverge/reference/convergence-gates.md`](../../.agents/skills/autoconverge/reference/convergence-gates.md). On pass, mark the PR ready (`gh pr ready`).
45
- - **Archived pr-converge** — same script and archived [`convergence-gates.md`](../../.agents/skills-archived/pr-converge/reference/convergence-gates.md) reference.
@@ -1,189 +0,0 @@
1
- # Worker-spawn protocol
2
-
3
- Single home for the worker-spawn dispatcher contract and for Claude-only
4
- slash-step host routing. Skills that need a role-bound headless worker call
5
- [`scripts/resolve_worker_spawn.py`](../../scripts/resolve_worker_spawn.py)
6
- (or import `resolve_worker_spawn`) and read this page for the tier walk, inputs,
7
- JSON result shape, host rules, and setup. Skills that run a Claude-only slash
8
- step (for example `/code-review`) read the code-review host-routing section.
9
-
10
- Composed helpers (preflight, headless runners, and the code-review invoker)
11
- stay documented at their own modules; this page states how callers use them.
12
-
13
- ## Three tiers
14
-
15
- Walk order is fixed: soft-gate preflight for tier 1, then tier 1, then host
16
- branching for tiers 2 and 3.
17
-
18
- | Tier | Name | Who runs it |
19
- |---|---|---|
20
- | 1 | Grok headless | Python helper: `grok_worker_preflight` then `grok_headless_runner.run_headless_worker` |
21
- | 2 | `claude_agent_required` | **Not** the Python helper. A stop signal so the **calling skill / harness** runs the Claude Code Agent tool itself |
22
- | 3 | Claude headless | Python helper: `claude_chain_runner.run_claude` with `-p --output-format json --agent <stem>`, prompt body on stdin from the prompt file, and subprocess `cwd` set to the caller's working directory |
23
-
24
- ### `claude_agent_required` boundary
25
-
26
- A Python helper cannot spawn Claude Code Agent-tool subagents. On a **Claude**
27
- host, when the claude headless tier is **not** enabled (`--enable-claude-tier`
28
- absent / `is_claude_tier_enabled=False`), a grok fallthrough records tier 2 with
29
- reason `claude_agent_required`, leaves `tier_used` null, and returns. The
30
- calling skill must then run the Agent tool in-process.
31
-
32
- On a **ThirdParty** host, or when the claude tier is enabled on a Claude host,
33
- the dispatcher continues to tier 3.
34
-
35
- ## Tier-1 fleets via grok-spawn
36
-
37
- For a fleet of tier-1 grok workers (batch spec in, reports out), use the
38
- **grok-spawn** skill when that skill is installed on the host (it ships on a
39
- sibling stack and is not part of this dispatcher page). When present, that
40
- skill owns the batch playbook and flag profiles under its reference docs.
41
- This page stays the single-worker dispatcher contract (`resolve_worker_spawn`).
42
-
43
- The calling session owns verification and every commit, push, or GitHub post.
44
- Workers never commit or post.
45
-
46
- ## Required inputs
47
-
48
- ### CLI
49
-
50
- ```
51
- python resolve_worker_spawn.py \
52
- --role <role> \
53
- --prompt-file <path> \
54
- --cwd <dir> \
55
- --run-temp-dir <dir> \
56
- [--timeout-seconds N] \
57
- [--enable-claude-tier]
58
- ```
59
-
60
- | Flag | Required | Meaning |
61
- |---|---|---|
62
- | `--role` | no (default `bugteam`) | Role name for preflight agent-set checks; mapped to the primary agent stem for headless `--agent` (for example `bugteam` → `code-quality-agent`, `clean-coder` → `clean-coder`; unknown roles fall back to the raw role string) |
63
- | `--prompt-file` | yes | Prompt file path for headless workers |
64
- | `--cwd` | yes | Working directory for headless grok and claude workers |
65
- | `--run-temp-dir` | yes | Run-scoped directory for leader sockets and preflight cache (created if missing) |
66
- | `--timeout-seconds` | no (default `600`) | Per-tier timeout in seconds |
67
- | `--enable-claude-tier` | no | Allow tier 3 on a Claude host |
68
-
69
- There is no separate outcome-file flag. The result surface is **stdout JSON**
70
- plus the process exit code.
71
-
72
- ### Import API
73
-
74
- `resolve_worker_spawn(...)` takes keyword-only arguments:
75
- `role`, `prompt_file`, `working_directory`, `timeout_seconds`,
76
- `is_claude_tier_enabled`, `run_state_directory`.
77
- `encode_spawn_outcome` turns a `SpawnOutcome` into the same JSON shape the CLI
78
- prints.
79
-
80
- The grok tier runs with no turn cap; `timeout_seconds` is its only bound.
81
-
82
- ## JSON result shape
83
-
84
- Stdout is one JSON object:
85
-
86
- ```json
87
- {
88
- "tier_used": 1,
89
- "ok": true,
90
- "attempts": [
91
- {"tier": 1, "ok": true, "reason": null}
92
- ],
93
- "output": "<serving tier stdout>",
94
- "returncode": 0
95
- }
96
- ```
97
-
98
- | Key | Meaning |
99
- |---|---|
100
- | `tier_used` | Serving tier number (`1` or `3`), or `null` when no tier served |
101
- | `ok` | Whether the serving call completed successfully |
102
- | `attempts` | Ordered list of tries: each `{tier, ok, reason}` |
103
- | `output` | Captured stdout from the serving tier (empty when none) |
104
- | `returncode` | Process return code from the last tier run (or config-error code) |
105
-
106
- `attempts` is in tried order. A Claude-host stop records tier `2` with
107
- `reason: "claude_agent_required"`. Preflight or grok fallthrough reasons use the
108
- preflight/runner classification strings (for example `grok_binary_missing`,
109
- `usage_limit`).
110
-
111
- ### Exit codes
112
-
113
- | Code | Meaning |
114
- |---|---|
115
- | `0` | A tier served (`tier_used` is not null) |
116
- | `2` | Exhausted — no tier served |
117
- | `3` | Config error: the `--prompt-file` path is not an existing file (`output` = `prompt_file_missing`) or claude chain configuration missing or invalid |
118
-
119
- ## Host detection
120
-
121
- After a grok fallthrough the dispatcher calls `detect_host_profile()` from
122
- `tier_model_ids` (advisor scripts). Detection order:
123
-
124
- 1. `ADVISOR_HOST_PROFILE` when set — must be `Claude`, `Codex`, or `ThirdParty` (any letter case).
125
- 2. `THIRD_PARTY` when truthy — `1`, `true`, `yes`, or `on`.
126
- 3. Default: `Claude`.
127
-
128
- Profiles are the real names `Claude`, `Codex`, and `ThirdParty` (not a separate Grok host
129
- profile). Grok is tier 1 on every host; host profile only chooses the post-grok
130
- branch (Agent-tool handoff vs headless claude chain). A Codex profile takes the
131
- non-Claude branch.
132
-
133
- ## Code-review host routing
134
-
135
- Claude-only slash steps need a Claude Code harness. The built-in
136
- `/code-review` command is the main case. The host-routing pair is:
137
-
138
- - `detect_host_profile()` from `tier_model_ids` — same host detection as the
139
- worker-spawn dispatcher above
140
- - `invoke_code_review` — host-aware invoker for `/code-review` (lives next to
141
- `resolve_worker_spawn` under the package scripts tree)
142
-
143
- Mode decision:
144
-
145
- | Host profile | Session model | Mode | Who runs `/code-review` |
146
- |---|---|---|---|
147
- | `Claude` | `opus` | `in_session` | The calling skill runs the slash command in-process |
148
- | `Claude` | any other alias | `chain` | Headless spawn through `claude_chain_runner` |
149
- | `ThirdParty` | any | `chain` | Headless spawn through `claude_chain_runner` |
150
-
151
- The review always runs at effort **high** on model **opus**. Chain mode builds
152
- a single-turn prompt `/code-review ultra --fix`, pins `--model opus`, sets
153
- subprocess `cwd` to the PR working tree, and reads stdin from the empty stream
154
- so the spawn does not wait for input.
155
-
156
- After a chain run, a non-empty `git status --porcelain` means the review
157
- applied fixes. The calling host commits and pushes those fixes per the fix
158
- protocol. The chain process never commits or posts. A clean stamp requires
159
- `returncode == 0` and a non-null `served_command` plus a clean tree —
160
- `dirty_tree` false alone is not enough when the chain failed or never served.
161
-
162
- GitHub transport (`pr-loop-cloud-transport`) is a separate axis from this
163
- harness branch. That skill routes `gh` vs MCP; it does not change which host
164
- can run Claude-only slash commands.
165
-
166
- ## Leader-socket rule
167
-
168
- Every concurrent grok process gets its own `--leader-socket` path under the
169
- caller-supplied run temp directory. The headless runner mints a unique
170
- `grok-leader-<uuid>.sock` per invocation. Preflight auth and ping probes use
171
- their own fixed socket filenames under the same directory so they never share a
172
- socket with a live worker.
173
-
174
- ## Cloud setup
175
-
176
- Unattended grok auth uses the `XAI_API_KEY` environment variable. Install the
177
- CLI via the vendor curl installer or the `@xai-official/grok` package. Keep
178
- agent definitions and hook config in parity with `npx claude-dev-env` so the
179
- preflight role-agent check and local `~/.claude` layout match what the worker
180
- expects.
181
-
182
- Use placeholders for account-specific values; do not hardcode personal paths or
183
- keys in skills or docs.
184
-
185
- ## GitHub transport
186
-
187
- `pr-loop-cloud-transport` is a separate axis. This utility never posts reviews,
188
- opens PRs, or substitutes `gh` for MCP. GitHub reachability and cloud session
189
- routing stay outside the worker-spawn contract.