@blulotus/trellis 0.7.0 → 0.7.2

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 (343) hide show
  1. package/README.md +2 -2
  2. package/dist/cli/index.js +2 -29
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/commands/init.d.ts +0 -22
  5. package/dist/commands/init.d.ts.map +1 -1
  6. package/dist/commands/init.js +5 -12
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/mem.d.ts +2 -2
  9. package/dist/commands/mem.d.ts.map +1 -1
  10. package/dist/commands/mem.js +7 -40
  11. package/dist/commands/mem.js.map +1 -1
  12. package/dist/commands/uninstall.d.ts +1 -1
  13. package/dist/commands/uninstall.d.ts.map +1 -1
  14. package/dist/commands/uninstall.js +4 -34
  15. package/dist/commands/uninstall.js.map +1 -1
  16. package/dist/commands/update.d.ts.map +1 -1
  17. package/dist/commands/update.js +2 -28
  18. package/dist/commands/update.js.map +1 -1
  19. package/dist/configurators/index.d.ts.map +1 -1
  20. package/dist/configurators/index.js +7 -73
  21. package/dist/configurators/index.js.map +1 -1
  22. package/dist/configurators/shared.d.ts +18 -70
  23. package/dist/configurators/shared.d.ts.map +1 -1
  24. package/dist/configurators/shared.js +20 -299
  25. package/dist/configurators/shared.js.map +1 -1
  26. package/dist/configurators/workflow.d.ts +0 -14
  27. package/dist/configurators/workflow.d.ts.map +1 -1
  28. package/dist/configurators/workflow.js +1 -37
  29. package/dist/configurators/workflow.js.map +1 -1
  30. package/dist/migrations/manifests/0.1.9.json +0 -12
  31. package/dist/migrations/manifests/0.2.14.json +0 -84
  32. package/dist/migrations/manifests/0.3.0-beta.0.json +0 -87
  33. package/dist/migrations/manifests/0.3.4.json +1 -13
  34. package/dist/migrations/manifests/0.4.0-beta.1.json +24 -176
  35. package/dist/migrations/manifests/0.5.0-beta.0.json +67 -1203
  36. package/dist/migrations/manifests/0.5.0-beta.15.json +0 -96
  37. package/dist/migrations/manifests/0.5.0-beta.5.json +0 -168
  38. package/dist/migrations/manifests/0.5.0-beta.9.json +0 -20
  39. package/dist/migrations/manifests/0.6.0-beta.23.json +0 -66
  40. package/dist/migrations/manifests/0.6.3.json +1 -16
  41. package/dist/migrations/manifests/0.6.6.json +1 -9
  42. package/dist/migrations/manifests/0.7.0.json +9 -0
  43. package/dist/migrations/manifests/0.7.1.json +9 -0
  44. package/dist/migrations/manifests/0.7.2.json +9 -0
  45. package/dist/migrations/manifests/0.8.0.json +9 -0
  46. package/dist/templates/codex/hooks/session-start.py +37 -13
  47. package/dist/templates/codex/hooks.json +5 -0
  48. package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +5 -5
  49. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +0 -10
  50. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-hooks.md +1 -1
  51. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +1 -13
  52. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +2 -2
  53. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/bundled-skills.md +9 -28
  54. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +5 -5
  55. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md +1 -1
  56. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +1 -17
  57. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +4 -12
  58. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +6 -6
  59. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +5 -75
  60. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +0 -16
  61. package/dist/templates/common/bundled-skills/trellis-session-insight/SKILL.md +1 -1
  62. package/dist/templates/common/bundled-skills/trellis-session-insight/references/cli-quick-reference.md +2 -3
  63. package/dist/templates/common/commands/continue.md +24 -4
  64. package/dist/templates/common/commands/finish-work.md +19 -9
  65. package/dist/templates/common/commands/start.md +38 -29
  66. package/dist/templates/extract.d.ts +0 -10
  67. package/dist/templates/extract.d.ts.map +1 -1
  68. package/dist/templates/extract.js +0 -24
  69. package/dist/templates/extract.js.map +1 -1
  70. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +7 -9
  71. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +4 -8
  72. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +5 -5
  73. package/dist/templates/shared-hooks/index.d.ts +11 -43
  74. package/dist/templates/shared-hooks/index.d.ts.map +1 -1
  75. package/dist/templates/shared-hooks/index.js +9 -86
  76. package/dist/templates/shared-hooks/index.js.map +1 -1
  77. package/dist/templates/shared-hooks/inject-spec-context.py +1 -1
  78. package/dist/templates/shared-hooks/inject-subagent-context.py +23 -85
  79. package/dist/templates/shared-hooks/inject-workflow-state.py +56 -86
  80. package/dist/templates/shared-hooks/session-start.py +76 -98
  81. package/dist/templates/trellis/config.yaml +8 -8
  82. package/dist/templates/trellis/index.d.ts +1 -4
  83. package/dist/templates/trellis/index.d.ts.map +1 -1
  84. package/dist/templates/trellis/index.js +1 -5
  85. package/dist/templates/trellis/index.js.map +1 -1
  86. package/dist/templates/trellis/scripts/add_session.py +12 -11
  87. package/dist/templates/trellis/scripts/common/__init__.py +2 -0
  88. package/dist/templates/trellis/scripts/common/active_task.py +80 -152
  89. package/dist/templates/trellis/scripts/common/config.py +7 -7
  90. package/dist/templates/trellis/scripts/common/git_context.py +1 -1
  91. package/dist/templates/trellis/scripts/common/session_context.py +2 -2
  92. package/dist/templates/trellis/scripts/common/spec_inject.py +2 -2
  93. package/dist/templates/trellis/scripts/common/task_store.py +8 -28
  94. package/dist/templates/trellis/scripts/common/workflow_phase.py +4 -8
  95. package/dist/templates/trellis/scripts/get_context.py +2 -2
  96. package/dist/templates/trellis/scripts/init_developer.py +1 -1
  97. package/dist/templates/trellis/scripts/task.py +90 -57
  98. package/dist/templates/trellis/workflow.md +44 -66
  99. package/dist/types/ai-tools.d.ts +10 -10
  100. package/dist/types/ai-tools.d.ts.map +1 -1
  101. package/dist/types/ai-tools.js +3 -434
  102. package/dist/types/ai-tools.js.map +1 -1
  103. package/dist/utils/uninstall-scrubbers.d.ts +3 -18
  104. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -1
  105. package/dist/utils/uninstall-scrubbers.js +24 -154
  106. package/dist/utils/uninstall-scrubbers.js.map +1 -1
  107. package/package.json +2 -2
  108. package/dist/configurators/antigravity.d.ts +0 -7
  109. package/dist/configurators/antigravity.d.ts.map +0 -1
  110. package/dist/configurators/antigravity.js +0 -11
  111. package/dist/configurators/antigravity.js.map +0 -1
  112. package/dist/configurators/codebuddy.d.ts +0 -10
  113. package/dist/configurators/codebuddy.d.ts.map +0 -1
  114. package/dist/configurators/codebuddy.js +0 -24
  115. package/dist/configurators/codebuddy.js.map +0 -1
  116. package/dist/configurators/copilot.d.ts +0 -14
  117. package/dist/configurators/copilot.d.ts.map +0 -1
  118. package/dist/configurators/copilot.js +0 -46
  119. package/dist/configurators/copilot.js.map +0 -1
  120. package/dist/configurators/cursor.d.ts +0 -10
  121. package/dist/configurators/cursor.d.ts.map +0 -1
  122. package/dist/configurators/cursor.js +0 -23
  123. package/dist/configurators/cursor.js.map +0 -1
  124. package/dist/configurators/devin.d.ts +0 -8
  125. package/dist/configurators/devin.d.ts.map +0 -1
  126. package/dist/configurators/devin.js +0 -12
  127. package/dist/configurators/devin.js.map +0 -1
  128. package/dist/configurators/droid.d.ts +0 -10
  129. package/dist/configurators/droid.d.ts.map +0 -1
  130. package/dist/configurators/droid.js +0 -24
  131. package/dist/configurators/droid.js.map +0 -1
  132. package/dist/configurators/dsh.d.ts +0 -26
  133. package/dist/configurators/dsh.d.ts.map +0 -1
  134. package/dist/configurators/dsh.js +0 -76
  135. package/dist/configurators/dsh.js.map +0 -1
  136. package/dist/configurators/gemini.d.ts +0 -18
  137. package/dist/configurators/gemini.d.ts.map +0 -1
  138. package/dist/configurators/gemini.js +0 -39
  139. package/dist/configurators/gemini.js.map +0 -1
  140. package/dist/configurators/grok.d.ts +0 -17
  141. package/dist/configurators/grok.d.ts.map +0 -1
  142. package/dist/configurators/grok.js +0 -38
  143. package/dist/configurators/grok.js.map +0 -1
  144. package/dist/configurators/kilo.d.ts +0 -7
  145. package/dist/configurators/kilo.d.ts.map +0 -1
  146. package/dist/configurators/kilo.js +0 -11
  147. package/dist/configurators/kilo.js.map +0 -1
  148. package/dist/configurators/kimi.d.ts +0 -26
  149. package/dist/configurators/kimi.d.ts.map +0 -1
  150. package/dist/configurators/kimi.js +0 -74
  151. package/dist/configurators/kimi.js.map +0 -1
  152. package/dist/configurators/kiro.d.ts +0 -11
  153. package/dist/configurators/kiro.d.ts.map +0 -1
  154. package/dist/configurators/kiro.js +0 -30
  155. package/dist/configurators/kiro.js.map +0 -1
  156. package/dist/configurators/omp.d.ts +0 -6
  157. package/dist/configurators/omp.d.ts.map +0 -1
  158. package/dist/configurators/omp.js +0 -28
  159. package/dist/configurators/omp.js.map +0 -1
  160. package/dist/configurators/opencode.d.ts +0 -5
  161. package/dist/configurators/opencode.d.ts.map +0 -1
  162. package/dist/configurators/opencode.js +0 -84
  163. package/dist/configurators/opencode.js.map +0 -1
  164. package/dist/configurators/pi.d.ts +0 -5
  165. package/dist/configurators/pi.d.ts.map +0 -1
  166. package/dist/configurators/pi.js +0 -39
  167. package/dist/configurators/pi.js.map +0 -1
  168. package/dist/configurators/qoder.d.ts +0 -12
  169. package/dist/configurators/qoder.d.ts.map +0 -1
  170. package/dist/configurators/qoder.js +0 -30
  171. package/dist/configurators/qoder.js.map +0 -1
  172. package/dist/configurators/reasonix.d.ts +0 -17
  173. package/dist/configurators/reasonix.d.ts.map +0 -1
  174. package/dist/configurators/reasonix.js +0 -37
  175. package/dist/configurators/reasonix.js.map +0 -1
  176. package/dist/configurators/snow.d.ts +0 -25
  177. package/dist/configurators/snow.d.ts.map +0 -1
  178. package/dist/configurators/snow.js +0 -69
  179. package/dist/configurators/snow.js.map +0 -1
  180. package/dist/configurators/trae.d.ts +0 -16
  181. package/dist/configurators/trae.d.ts.map +0 -1
  182. package/dist/configurators/trae.js +0 -34
  183. package/dist/configurators/trae.js.map +0 -1
  184. package/dist/configurators/zcode.d.ts +0 -23
  185. package/dist/configurators/zcode.d.ts.map +0 -1
  186. package/dist/configurators/zcode.js +0 -63
  187. package/dist/configurators/zcode.js.map +0 -1
  188. package/dist/templates/codebuddy/agents/trellis-check.md +0 -115
  189. package/dist/templates/codebuddy/agents/trellis-implement.md +0 -115
  190. package/dist/templates/codebuddy/agents/trellis-research.md +0 -137
  191. package/dist/templates/codebuddy/index.d.ts +0 -15
  192. package/dist/templates/codebuddy/index.d.ts.map +0 -1
  193. package/dist/templates/codebuddy/index.js +0 -15
  194. package/dist/templates/codebuddy/index.js.map +0 -1
  195. package/dist/templates/codebuddy/settings.json +0 -69
  196. package/dist/templates/copilot/copilot-instructions.md +0 -11
  197. package/dist/templates/copilot/hooks/session-start.py +0 -564
  198. package/dist/templates/copilot/hooks.json +0 -19
  199. package/dist/templates/copilot/index.d.ts +0 -28
  200. package/dist/templates/copilot/index.d.ts.map +0 -1
  201. package/dist/templates/copilot/index.js +0 -61
  202. package/dist/templates/copilot/index.js.map +0 -1
  203. package/dist/templates/copilot/prompts/before-dev.prompt.md +0 -39
  204. package/dist/templates/copilot/prompts/brainstorm.prompt.md +0 -173
  205. package/dist/templates/copilot/prompts/break-loop.prompt.md +0 -129
  206. package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +0 -170
  207. package/dist/templates/copilot/prompts/check.prompt.md +0 -110
  208. package/dist/templates/copilot/prompts/create-command.prompt.md +0 -116
  209. package/dist/templates/copilot/prompts/finish-work.prompt.md +0 -99
  210. package/dist/templates/copilot/prompts/integrate-skill.prompt.md +0 -223
  211. package/dist/templates/copilot/prompts/onboard.prompt.md +0 -362
  212. package/dist/templates/copilot/prompts/parallel.prompt.md +0 -204
  213. package/dist/templates/copilot/prompts/record-session.prompt.md +0 -66
  214. package/dist/templates/copilot/prompts/start.prompt.md +0 -63
  215. package/dist/templates/copilot/prompts/update-spec.prompt.md +0 -358
  216. package/dist/templates/cursor/agents/trellis-check.md +0 -114
  217. package/dist/templates/cursor/agents/trellis-implement.md +0 -114
  218. package/dist/templates/cursor/agents/trellis-research.md +0 -136
  219. package/dist/templates/cursor/hooks.json +0 -24
  220. package/dist/templates/cursor/index.d.ts +0 -13
  221. package/dist/templates/cursor/index.d.ts.map +0 -1
  222. package/dist/templates/cursor/index.js +0 -13
  223. package/dist/templates/cursor/index.js.map +0 -1
  224. package/dist/templates/droid/droids/trellis-check.md +0 -107
  225. package/dist/templates/droid/droids/trellis-implement.md +0 -107
  226. package/dist/templates/droid/droids/trellis-research.md +0 -137
  227. package/dist/templates/droid/index.d.ts +0 -15
  228. package/dist/templates/droid/index.d.ts.map +0 -1
  229. package/dist/templates/droid/index.js +0 -15
  230. package/dist/templates/droid/index.js.map +0 -1
  231. package/dist/templates/droid/settings.json +0 -69
  232. package/dist/templates/dsh/DSH.md +0 -80
  233. package/dist/templates/dsh/agents/trellis-check.md +0 -99
  234. package/dist/templates/dsh/agents/trellis-implement.md +0 -106
  235. package/dist/templates/dsh/agents/trellis-research.md +0 -134
  236. package/dist/templates/dsh/index.d.ts +0 -22
  237. package/dist/templates/dsh/index.d.ts.map +0 -1
  238. package/dist/templates/dsh/index.js +0 -27
  239. package/dist/templates/dsh/index.js.map +0 -1
  240. package/dist/templates/gemini/agents/trellis-check.md +0 -107
  241. package/dist/templates/gemini/agents/trellis-implement.md +0 -107
  242. package/dist/templates/gemini/agents/trellis-research.md +0 -136
  243. package/dist/templates/gemini/index.d.ts +0 -13
  244. package/dist/templates/gemini/index.d.ts.map +0 -1
  245. package/dist/templates/gemini/index.js +0 -13
  246. package/dist/templates/gemini/index.js.map +0 -1
  247. package/dist/templates/gemini/settings.json +0 -40
  248. package/dist/templates/grok/agents/trellis-check.md +0 -106
  249. package/dist/templates/grok/agents/trellis-implement.md +0 -121
  250. package/dist/templates/grok/agents/trellis-research.md +0 -146
  251. package/dist/templates/grok/index.d.ts +0 -16
  252. package/dist/templates/grok/index.d.ts.map +0 -1
  253. package/dist/templates/grok/index.js +0 -19
  254. package/dist/templates/grok/index.js.map +0 -1
  255. package/dist/templates/kimi/agents/trellis-check.md +0 -104
  256. package/dist/templates/kimi/agents/trellis-implement.md +0 -120
  257. package/dist/templates/kimi/agents/trellis-research.md +0 -144
  258. package/dist/templates/kimi/index.d.ts +0 -20
  259. package/dist/templates/kimi/index.d.ts.map +0 -1
  260. package/dist/templates/kimi/index.js +0 -23
  261. package/dist/templates/kimi/index.js.map +0 -1
  262. package/dist/templates/kiro/agents/trellis-check.json +0 -26
  263. package/dist/templates/kiro/agents/trellis-implement.json +0 -26
  264. package/dist/templates/kiro/agents/trellis-research.json +0 -30
  265. package/dist/templates/kiro/agents/trellis.json +0 -34
  266. package/dist/templates/kiro/hooks/trellis-workflow-state.kiro.hook +0 -14
  267. package/dist/templates/kiro/index.d.ts +0 -32
  268. package/dist/templates/kiro/index.d.ts.map +0 -1
  269. package/dist/templates/kiro/index.js +0 -28
  270. package/dist/templates/kiro/index.js.map +0 -1
  271. package/dist/templates/omp/agents/trellis-check.md +0 -41
  272. package/dist/templates/omp/agents/trellis-implement.md +0 -55
  273. package/dist/templates/omp/agents/trellis-research.md +0 -30
  274. package/dist/templates/omp/extensions/trellis/index.ts.txt +0 -592
  275. package/dist/templates/omp/index.d.ts +0 -4
  276. package/dist/templates/omp/index.d.ts.map +0 -1
  277. package/dist/templates/omp/index.js +0 -9
  278. package/dist/templates/omp/index.js.map +0 -1
  279. package/dist/templates/opencode/agents/trellis-check.md +0 -122
  280. package/dist/templates/opencode/agents/trellis-implement.md +0 -123
  281. package/dist/templates/opencode/agents/trellis-research.md +0 -145
  282. package/dist/templates/opencode/lib/context-visibility.js +0 -86
  283. package/dist/templates/opencode/lib/session-utils.js +0 -526
  284. package/dist/templates/opencode/lib/trellis-context.js +0 -627
  285. package/dist/templates/opencode/package.json +0 -5
  286. package/dist/templates/opencode/plugins/inject-spec-context.js +0 -121
  287. package/dist/templates/opencode/plugins/inject-subagent-context.js +0 -569
  288. package/dist/templates/opencode/plugins/inject-workflow-state.js +0 -340
  289. package/dist/templates/opencode/plugins/session-start.js +0 -74
  290. package/dist/templates/pi/agents/trellis-check.md +0 -37
  291. package/dist/templates/pi/agents/trellis-implement.md +0 -52
  292. package/dist/templates/pi/agents/trellis-research.md +0 -25
  293. package/dist/templates/pi/extensions/trellis/index.ts.txt +0 -2033
  294. package/dist/templates/pi/index.d.ts +0 -5
  295. package/dist/templates/pi/index.d.ts.map +0 -1
  296. package/dist/templates/pi/index.js +0 -12
  297. package/dist/templates/pi/index.js.map +0 -1
  298. package/dist/templates/pi/settings.json +0 -9
  299. package/dist/templates/qoder/agents/trellis-check.md +0 -108
  300. package/dist/templates/qoder/agents/trellis-implement.md +0 -108
  301. package/dist/templates/qoder/agents/trellis-research.md +0 -137
  302. package/dist/templates/qoder/index.d.ts +0 -15
  303. package/dist/templates/qoder/index.d.ts.map +0 -1
  304. package/dist/templates/qoder/index.js +0 -15
  305. package/dist/templates/qoder/index.js.map +0 -1
  306. package/dist/templates/qoder/settings.json +0 -59
  307. package/dist/templates/reasonix/agents/trellis-check.md +0 -36
  308. package/dist/templates/reasonix/agents/trellis-implement.md +0 -51
  309. package/dist/templates/reasonix/index.d.ts +0 -13
  310. package/dist/templates/reasonix/index.d.ts.map +0 -1
  311. package/dist/templates/reasonix/index.js +0 -16
  312. package/dist/templates/reasonix/index.js.map +0 -1
  313. package/dist/templates/shared-hooks/inject-shell-session-context.py +0 -292
  314. package/dist/templates/snow/SNOW.md +0 -86
  315. package/dist/templates/snow/agents/trellis-check.md +0 -136
  316. package/dist/templates/snow/agents/trellis-implement.md +0 -158
  317. package/dist/templates/snow/agents/trellis-research.md +0 -114
  318. package/dist/templates/snow/hooks/beforeSubAgentStart.json +0 -15
  319. package/dist/templates/snow/hooks/onSessionStart.json +0 -15
  320. package/dist/templates/snow/hooks/onUserMessage.json +0 -15
  321. package/dist/templates/snow/hooks/write-trellis-context.py +0 -644
  322. package/dist/templates/snow/index.d.ts +0 -26
  323. package/dist/templates/snow/index.d.ts.map +0 -1
  324. package/dist/templates/snow/index.js +0 -36
  325. package/dist/templates/snow/index.js.map +0 -1
  326. package/dist/templates/trae/agents/trellis-check.md +0 -108
  327. package/dist/templates/trae/agents/trellis-implement.md +0 -108
  328. package/dist/templates/trae/agents/trellis-research.md +0 -137
  329. package/dist/templates/trae/hooks.json +0 -39
  330. package/dist/templates/trae/index.d.ts +0 -15
  331. package/dist/templates/trae/index.d.ts.map +0 -1
  332. package/dist/templates/trae/index.js +0 -15
  333. package/dist/templates/trae/index.js.map +0 -1
  334. package/dist/templates/trellis/gitattributes.txt +0 -9
  335. package/dist/templates/trellis/scripts/common/cli_adapter.py +0 -982
  336. package/dist/templates/zcode/agents/trellis-check.md +0 -110
  337. package/dist/templates/zcode/agents/trellis-implement.md +0 -116
  338. package/dist/templates/zcode/agents/trellis-research.md +0 -133
  339. package/dist/templates/zcode/config.json +0 -52
  340. package/dist/templates/zcode/index.d.ts +0 -25
  341. package/dist/templates/zcode/index.d.ts.map +0 -1
  342. package/dist/templates/zcode/index.js +0 -29
  343. package/dist/templates/zcode/index.js.map +0 -1
@@ -5,16 +5,6 @@
5
5
  "recommendMigrate": false,
6
6
  "changelog": "**Behavior Changes:**\n- feat(task): `task.py start/current/finish` read and write `.trellis/.runtime/sessions/<context-key>.json`. `.trellis/.current-task` is no longer used as the active-task fallback. `task.py start` exits with a clear error when no session identity is available. `task.py finish` deletes the resolved session file. `task.py archive` deletes session files that still point at the archived task before moving it.\n- feat(init): bootstrap and joiner onboarding tasks no longer write `.trellis/.current-task`; generated PRDs tell the AI to start the task from a session that provides Trellis session identity.\n- feat(workflow): `workflow.md` and hook fallback breadcrumbs now treat no-task trigger words as task-creation signals instead of mandatory creation. Task creation is not required for trivial turns when all three hold: zero file writes, one-reply answer, and no research beyond reading 1-2 repo files. Explicit current-turn phrases such as `skip trellis`, `no task`, `just do it`, `跳过 trellis`, `别走流程`, and `先别建任务` skip task creation for that turn.\n- feat(workflow): `in_progress` breadcrumbs keep `trellis-implement` / `trellis-check` as the default, but explicit current-turn requests such as `do it inline`, `main session 写就行`, and `不用 sub-agent` allow main-session implementation.\n\n**Platform Integration:**\n- feat(hooks): Claude Code writes `TRELLIS_CONTEXT_ID` through `CLAUDE_ENV_FILE`; Codex command environments are supported through `CODEX_SESSION_ID` / Codex Desktop `CODEX_THREAD_ID`; Cursor adds `beforeShellExecution` tickets under `.trellis/.runtime/cursor-shell/`; OpenCode prefixes Bash commands with `TRELLIS_CONTEXT_ID`; Pi injects the same value into Bash and nested `pi --mode json` runs.\n- docs(platforms): GitHub Copilot uses a platform-specific SessionStart hook; Gemini/Qoder/CodeBuddy/Droid/Kiro use shared hook input or platform env; Kilo/Antigravity/Windsurf have no hook integration; `.agents/skills` consumers rely on host-provided prelude/env. All groups share `.trellis/.runtime/sessions/`, while beta.15 adds shell-command handling for Claude Code, Codex, Cursor, OpenCode, and Pi.\n- feat(cursor): Cursor `hooks.json` matches `Task|Subagent`. `inject-subagent-context.py` parses native custom-agent payloads including `{ custom: { name } }` and `{ type: { case: \"custom\", value: { name } } }`.\n- feat(pi): Pi Agent resolves context keys from `TRELLIS_CONTEXT_ID`, `sessionManager.getSessionId()`, `PI_SESSION_ID` / `PI_SESSIONID`, transcript path, or process fallback, then reads active tasks from `.trellis/.runtime/sessions/`.\n- feat(workflow): `workflow-state` breadcrumbs use exact agent names (`trellis-implement`, `trellis-check`, `trellis-research`) and document explicit per-turn override phrases.\n\n**Bug Fixes:**\n- fix(registry): Template registry downloads support private Git-backed registries through local Git credentials. Self-hosted GitLab / GitHub Enterprise and SSH registry sources use Git to read `index.json` and copy template directories, and classify auth, missing-ref, missing-path, invalid-json, and network failures separately instead of falling through to direct-download mode.\n- fix(opencode): OpenCode recognizes `OPENCODE_RUN_ID` and strips the `trellis-` prefix before matching sub-agent names, preserving `implement.jsonl` / `check.jsonl` injection for renamed agents.\n- fix(claude): Claude Code statusLine is no longer installed by default for new projects. Existing `.claude/hooks/statusline.py` files are preserved on update, and an existing `.claude/settings.json` `statusLine` entry is carried forward instead of being forced out.\n- fix(cli): `writeSharedHooks` and `collectSharedHooks` use `SHARED_HOOKS_BY_PLATFORM`. The manifest removes 10 orphan shared-hook files through hash-verified `safe-file-delete` entries; locally modified files are preserved.\n\n**Docs:**\n- docs(beta): docs-site beta pages and `v0.5.0-beta.15` changelog document session-scoped task state, workflow policy relaxation, per-platform session identity behavior, Pi Agent, Cursor hook behavior, native Git worktrees, private Git-backed template registries, Claude Code statusLine defaults, existing statusLine preservation, and the current `continue` / `finish-work` command flow.",
7
7
  "migrations": [
8
- {
9
- "type": "safe-file-delete",
10
- "from": ".cursor/hooks/statusline.py",
11
- "description": "Removed: Cursor has no statusLine event; shared-hooks/statusline.py was never invoked.",
12
- "allowed_hashes": [
13
- "87c01ee786ca9e1f25b591f0ed67564cd430586d57516d5b6fc57c34b6e7a3ec",
14
- "c92c0020a0c60308437b66f024a244303e708519c97089cf654ceddc144f7435",
15
- "b9b0a39a486643f2b78ecb3c757459182a6326ea070ba34a49887e23adc40bbb"
16
- ]
17
- },
18
8
  {
19
9
  "type": "safe-file-delete",
20
10
  "from": ".codex/hooks/statusline.py",
@@ -24,92 +14,6 @@
24
14
  "c92c0020a0c60308437b66f024a244303e708519c97089cf654ceddc144f7435",
25
15
  "b9b0a39a486643f2b78ecb3c757459182a6326ea070ba34a49887e23adc40bbb"
26
16
  ]
27
- },
28
- {
29
- "type": "safe-file-delete",
30
- "from": ".gemini/hooks/statusline.py",
31
- "description": "Removed: Gemini CLI has no statusLine event; shared-hooks/statusline.py was never invoked.",
32
- "allowed_hashes": [
33
- "87c01ee786ca9e1f25b591f0ed67564cd430586d57516d5b6fc57c34b6e7a3ec",
34
- "c92c0020a0c60308437b66f024a244303e708519c97089cf654ceddc144f7435",
35
- "b9b0a39a486643f2b78ecb3c757459182a6326ea070ba34a49887e23adc40bbb"
36
- ]
37
- },
38
- {
39
- "type": "safe-file-delete",
40
- "from": ".qoder/hooks/statusline.py",
41
- "description": "Removed: Qoder has no statusLine event; shared-hooks/statusline.py was never invoked.",
42
- "allowed_hashes": [
43
- "87c01ee786ca9e1f25b591f0ed67564cd430586d57516d5b6fc57c34b6e7a3ec",
44
- "c92c0020a0c60308437b66f024a244303e708519c97089cf654ceddc144f7435",
45
- "b9b0a39a486643f2b78ecb3c757459182a6326ea070ba34a49887e23adc40bbb"
46
- ]
47
- },
48
- {
49
- "type": "safe-file-delete",
50
- "from": ".github/copilot/hooks/statusline.py",
51
- "description": "Removed: GitHub Copilot has no statusLine event; shared-hooks/statusline.py was never invoked.",
52
- "allowed_hashes": [
53
- "87c01ee786ca9e1f25b591f0ed67564cd430586d57516d5b6fc57c34b6e7a3ec",
54
- "c92c0020a0c60308437b66f024a244303e708519c97089cf654ceddc144f7435",
55
- "b9b0a39a486643f2b78ecb3c757459182a6326ea070ba34a49887e23adc40bbb"
56
- ]
57
- },
58
- {
59
- "type": "safe-file-delete",
60
- "from": ".codebuddy/hooks/statusline.py",
61
- "description": "Removed: CodeBuddy has no statusLine event; shared-hooks/statusline.py was never invoked.",
62
- "allowed_hashes": [
63
- "87c01ee786ca9e1f25b591f0ed67564cd430586d57516d5b6fc57c34b6e7a3ec",
64
- "c92c0020a0c60308437b66f024a244303e708519c97089cf654ceddc144f7435",
65
- "b9b0a39a486643f2b78ecb3c757459182a6326ea070ba34a49887e23adc40bbb"
66
- ]
67
- },
68
- {
69
- "type": "safe-file-delete",
70
- "from": ".factory/hooks/statusline.py",
71
- "description": "Removed: Factory Droid has no statusLine event; shared-hooks/statusline.py was never invoked.",
72
- "allowed_hashes": [
73
- "87c01ee786ca9e1f25b591f0ed67564cd430586d57516d5b6fc57c34b6e7a3ec",
74
- "c92c0020a0c60308437b66f024a244303e708519c97089cf654ceddc144f7435",
75
- "b9b0a39a486643f2b78ecb3c757459182a6326ea070ba34a49887e23adc40bbb"
76
- ]
77
- },
78
- {
79
- "type": "safe-file-delete",
80
- "from": ".kiro/hooks/statusline.py",
81
- "description": "Removed: Kiro has no statusLine event; shared-hooks/statusline.py was never invoked.",
82
- "allowed_hashes": [
83
- "87c01ee786ca9e1f25b591f0ed67564cd430586d57516d5b6fc57c34b6e7a3ec",
84
- "c92c0020a0c60308437b66f024a244303e708519c97089cf654ceddc144f7435",
85
- "b9b0a39a486643f2b78ecb3c757459182a6326ea070ba34a49887e23adc40bbb"
86
- ]
87
- },
88
- {
89
- "type": "safe-file-delete",
90
- "from": ".kiro/hooks/session-start.py",
91
- "description": "Removed: Kiro supports only `agentSpawn`; there is no SessionStart event to trigger this script.",
92
- "allowed_hashes": [
93
- "26b52ad72259316aa5adc8068d0df2a002273d5eda659ac3c71f3f5ecd9ebd08",
94
- "ddd59c6fc5e6fa8c8535d6ac375ecaad60f15b87abc6dfc279007e610c636dd8",
95
- "597409062bed8f9977750fa6262bb997facce7d8377d3482d4bcb2054e19c491",
96
- "6cf36cffba3cf4a3caff99606d9fc9dde07fa4f74b7227aeb08d3de00ced7ca2",
97
- "373f2f41c5506982cef1049f0203ca9e442c8074f54880aa021f037c0b9300b0",
98
- "bc2026f6b1c195432e1126e1388d11fccec2df7a72010d0daa9fb6af76f683dd",
99
- "cf355e44ace5e9b7c7d9a416462d4057a6cff9d5905b8db1839e6e4c892cfd13",
100
- "a1b0db7c264da8e7abeb378a16ba8132b99b9918c9546627137d69427108f4b6",
101
- "a0256292a2ade20728d71d2ea9a7ce866f6955efe034934eaecbf820244e9ad8"
102
- ]
103
- },
104
- {
105
- "type": "safe-file-delete",
106
- "from": ".kiro/hooks/inject-workflow-state.py",
107
- "description": "Removed: Kiro supports only `agentSpawn`; there is no UserPromptSubmit event to trigger this script.",
108
- "allowed_hashes": [
109
- "281939a51a62467a5dd73947fdec7143d0e936b4b64b5224ce0484186eb5b018",
110
- "4231e4e0d52c9b05d66a215c870db30a876201a51350e5191953418ca4ec4637",
111
- "50bd086d40654b9fe8cb902d2f321ce06e39b6d4020a6e9aa49154cc371bdb16"
112
- ]
113
17
  }
114
18
  ],
115
19
  "notes": "Behavior change: `.trellis/.current-task` is preserved but ignored by active-task resolution. Existing task directories and jsonl files remain valid. `task.py start` now requires session identity from the host or `TRELLIS_CONTEXT_ID`. Run `trellis update` to refresh hooks and templates. The 10 shared-hook cleanup migrations are hash-verified; locally modified hook files are preserved with a warning. Claude Code statusLine is not installed by default for new projects, and existing Claude Code statusLine files/settings are preserved on update."
@@ -28,48 +28,6 @@
28
28
  "description": "v0.5.0-beta.5: prefix claude sub-agent with trellis- to prevent accidental invocation",
29
29
  "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
30
30
  },
31
- {
32
- "type": "rename",
33
- "from": ".cursor/agents/implement.md",
34
- "to": ".cursor/agents/trellis-implement.md",
35
- "description": "v0.5.0-beta.5: prefix cursor sub-agent with trellis- to prevent accidental invocation",
36
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
37
- },
38
- {
39
- "type": "rename",
40
- "from": ".cursor/agents/check.md",
41
- "to": ".cursor/agents/trellis-check.md",
42
- "description": "v0.5.0-beta.5: prefix cursor sub-agent with trellis- to prevent accidental invocation",
43
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
44
- },
45
- {
46
- "type": "rename",
47
- "from": ".cursor/agents/research.md",
48
- "to": ".cursor/agents/trellis-research.md",
49
- "description": "v0.5.0-beta.5: prefix cursor sub-agent with trellis- to prevent accidental invocation",
50
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
51
- },
52
- {
53
- "type": "rename",
54
- "from": ".opencode/agents/implement.md",
55
- "to": ".opencode/agents/trellis-implement.md",
56
- "description": "v0.5.0-beta.5: prefix opencode sub-agent with trellis- to prevent accidental invocation",
57
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
58
- },
59
- {
60
- "type": "rename",
61
- "from": ".opencode/agents/check.md",
62
- "to": ".opencode/agents/trellis-check.md",
63
- "description": "v0.5.0-beta.5: prefix opencode sub-agent with trellis- to prevent accidental invocation",
64
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
65
- },
66
- {
67
- "type": "rename",
68
- "from": ".opencode/agents/research.md",
69
- "to": ".opencode/agents/trellis-research.md",
70
- "description": "v0.5.0-beta.5: prefix opencode sub-agent with trellis- to prevent accidental invocation",
71
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
72
- },
73
31
  {
74
32
  "type": "rename",
75
33
  "from": ".codex/agents/implement.toml",
@@ -90,132 +48,6 @@
90
48
  "to": ".codex/agents/trellis-research.toml",
91
49
  "description": "v0.5.0-beta.5: prefix codex sub-agent with trellis- to prevent accidental invocation",
92
50
  "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
93
- },
94
- {
95
- "type": "rename",
96
- "from": ".kiro/agents/implement.json",
97
- "to": ".kiro/agents/trellis-implement.json",
98
- "description": "v0.5.0-beta.5: prefix kiro sub-agent with trellis- to prevent accidental invocation",
99
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
100
- },
101
- {
102
- "type": "rename",
103
- "from": ".kiro/agents/check.json",
104
- "to": ".kiro/agents/trellis-check.json",
105
- "description": "v0.5.0-beta.5: prefix kiro sub-agent with trellis- to prevent accidental invocation",
106
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
107
- },
108
- {
109
- "type": "rename",
110
- "from": ".kiro/agents/research.json",
111
- "to": ".kiro/agents/trellis-research.json",
112
- "description": "v0.5.0-beta.5: prefix kiro sub-agent with trellis- to prevent accidental invocation",
113
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
114
- },
115
- {
116
- "type": "rename",
117
- "from": ".gemini/agents/implement.md",
118
- "to": ".gemini/agents/trellis-implement.md",
119
- "description": "v0.5.0-beta.5: prefix gemini sub-agent with trellis- to prevent accidental invocation",
120
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
121
- },
122
- {
123
- "type": "rename",
124
- "from": ".gemini/agents/check.md",
125
- "to": ".gemini/agents/trellis-check.md",
126
- "description": "v0.5.0-beta.5: prefix gemini sub-agent with trellis- to prevent accidental invocation",
127
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
128
- },
129
- {
130
- "type": "rename",
131
- "from": ".gemini/agents/research.md",
132
- "to": ".gemini/agents/trellis-research.md",
133
- "description": "v0.5.0-beta.5: prefix gemini sub-agent with trellis- to prevent accidental invocation",
134
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
135
- },
136
- {
137
- "type": "rename",
138
- "from": ".qoder/agents/implement.md",
139
- "to": ".qoder/agents/trellis-implement.md",
140
- "description": "v0.5.0-beta.5: prefix qoder sub-agent with trellis- to prevent accidental invocation",
141
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
142
- },
143
- {
144
- "type": "rename",
145
- "from": ".qoder/agents/check.md",
146
- "to": ".qoder/agents/trellis-check.md",
147
- "description": "v0.5.0-beta.5: prefix qoder sub-agent with trellis- to prevent accidental invocation",
148
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
149
- },
150
- {
151
- "type": "rename",
152
- "from": ".qoder/agents/research.md",
153
- "to": ".qoder/agents/trellis-research.md",
154
- "description": "v0.5.0-beta.5: prefix qoder sub-agent with trellis- to prevent accidental invocation",
155
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
156
- },
157
- {
158
- "type": "rename",
159
- "from": ".codebuddy/agents/implement.md",
160
- "to": ".codebuddy/agents/trellis-implement.md",
161
- "description": "v0.5.0-beta.5: prefix codebuddy sub-agent with trellis- to prevent accidental invocation",
162
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
163
- },
164
- {
165
- "type": "rename",
166
- "from": ".codebuddy/agents/check.md",
167
- "to": ".codebuddy/agents/trellis-check.md",
168
- "description": "v0.5.0-beta.5: prefix codebuddy sub-agent with trellis- to prevent accidental invocation",
169
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
170
- },
171
- {
172
- "type": "rename",
173
- "from": ".codebuddy/agents/research.md",
174
- "to": ".codebuddy/agents/trellis-research.md",
175
- "description": "v0.5.0-beta.5: prefix codebuddy sub-agent with trellis- to prevent accidental invocation",
176
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
177
- },
178
- {
179
- "type": "rename",
180
- "from": ".github/agents/implement.agent.md",
181
- "to": ".github/agents/trellis-implement.agent.md",
182
- "description": "v0.5.0-beta.5: prefix copilot sub-agent with trellis- to prevent accidental invocation",
183
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
184
- },
185
- {
186
- "type": "rename",
187
- "from": ".github/agents/check.agent.md",
188
- "to": ".github/agents/trellis-check.agent.md",
189
- "description": "v0.5.0-beta.5: prefix copilot sub-agent with trellis- to prevent accidental invocation",
190
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
191
- },
192
- {
193
- "type": "rename",
194
- "from": ".github/agents/research.agent.md",
195
- "to": ".github/agents/trellis-research.agent.md",
196
- "description": "v0.5.0-beta.5: prefix copilot sub-agent with trellis- to prevent accidental invocation",
197
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
198
- },
199
- {
200
- "type": "rename",
201
- "from": ".factory/droids/implement.md",
202
- "to": ".factory/droids/trellis-implement.md",
203
- "description": "v0.5.0-beta.5: prefix droid sub-agent with trellis- to prevent accidental invocation",
204
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
205
- },
206
- {
207
- "type": "rename",
208
- "from": ".factory/droids/check.md",
209
- "to": ".factory/droids/trellis-check.md",
210
- "description": "v0.5.0-beta.5: prefix droid sub-agent with trellis- to prevent accidental invocation",
211
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
212
- },
213
- {
214
- "type": "rename",
215
- "from": ".factory/droids/research.md",
216
- "to": ".factory/droids/trellis-research.md",
217
- "description": "v0.5.0-beta.5: prefix droid sub-agent with trellis- to prevent accidental invocation",
218
- "reason": "Generic names like 'implement'/'check'/'research' can collide with the user's own agent definitions or get picked up by the main agent's description heuristics. Prefixing with 'trellis-' makes them explicit Trellis agents."
219
51
  }
220
52
  ],
221
53
  "notes": "This is a breaking rename for sub-agent invocation. The migration is automatic for unmodified agent files (hash-matched via .trellis/.template-hashes.json). If you customized an agent, you'll see the usual `Modified by you` confirm prompt with diff — pick `[1] Overwrite` to adopt the new name, or `[3] Skip` if you've built your own workflow on the old names (in which case you must update `workflow.md`, any skill prompts, and hook constants yourself).\n\n`update.skip` is BYPASSED for this release (breaking + recommendMigrate both true, invoked with `--migrate`) to prevent a half-migrated state where workflow.md points to `trellis-implement` but your `.claude/agents/` still has `implement.md`.\n\nAction required: run `trellis update --migrate`."
@@ -22,26 +22,6 @@
22
22
  "ce1503c052dadf2470ddb1cade42f331c0fd70d34e895d8d07044ba27548e17e",
23
23
  "aa5dd1f39a77b2f4bb827fd14ce7a83fb51870e77f556fe508afce3f8eac0b4e"
24
24
  ]
25
- },
26
- {
27
- "type": "safe-file-delete",
28
- "from": ".qoder/skills/trellis-finish-work/SKILL.md",
29
- "description": "Qoder session-boundary skill → moved to .qoder/commands/trellis-finish-work.md",
30
- "reason": "In 0.5.0-beta.9, Qoder session-boundary commands move out of the skill matcher into native Custom Commands so users can invoke them deterministically as `/trellis-finish-work`.",
31
- "allowed_hashes": [
32
- "c0f3ffa74e1e9990f93e5d44d03bd088c8698da1db4750b74d3eee4809a84aea",
33
- "2027d8ea610e0a929a7ce147b29045406db8a8c9c2a767f98d779e5d53162f0c"
34
- ]
35
- },
36
- {
37
- "type": "safe-file-delete",
38
- "from": ".qoder/skills/trellis-continue/SKILL.md",
39
- "description": "Qoder session-boundary skill → moved to .qoder/commands/trellis-continue.md",
40
- "reason": "In 0.5.0-beta.9, Qoder session-boundary commands move out of the skill matcher into native Custom Commands so users can invoke them deterministically as `/trellis-continue`.",
41
- "allowed_hashes": [
42
- "914545dab290e508a4c6b84d0a9f8debe68bcf9117cebe0fa85be0ef709d8fc1",
43
- "3d2c83ad710b3b667851e28a473fb259a1330475e6b7417c769432f4a55a76f9"
44
- ]
45
25
  }
46
26
  ],
47
27
  "notes": "Code cleanup + additive features; no user task.json mutations. Python readers (`task.py`, `get_context.py`) treat missing canonical fields as null, so legacy tasks keep working. Newly-created bootstrap / migration tasks from this version onward produce the canonical shape. Qoder users who had the two session-boundary skills installed will see them auto-removed (pristine) or prompted for confirm (modified); the new `.qoder/commands/*.md` are written by the standard configure step on `trellis update`."
@@ -11,77 +11,11 @@
11
11
  "to": ".claude/skills/trellis-spec-bootstrap",
12
12
  "description": "Claude Code: rename installed bundled skill directory from typoed name to corrected name."
13
13
  },
14
- {
15
- "type": "rename-dir",
16
- "from": ".cursor/skills/trellis-spec-bootstarp",
17
- "to": ".cursor/skills/trellis-spec-bootstrap",
18
- "description": "Cursor: rename installed bundled skill directory from typoed name to corrected name."
19
- },
20
- {
21
- "type": "rename-dir",
22
- "from": ".opencode/skills/trellis-spec-bootstarp",
23
- "to": ".opencode/skills/trellis-spec-bootstrap",
24
- "description": "OpenCode: rename installed bundled skill directory from typoed name to corrected name."
25
- },
26
14
  {
27
15
  "type": "rename-dir",
28
16
  "from": ".agents/skills/trellis-spec-bootstarp",
29
17
  "to": ".agents/skills/trellis-spec-bootstrap",
30
18
  "description": "Codex / Gemini CLI (shared): rename installed bundled skill directory from typoed name to corrected name."
31
- },
32
- {
33
- "type": "rename-dir",
34
- "from": ".kiro/skills/trellis-spec-bootstarp",
35
- "to": ".kiro/skills/trellis-spec-bootstrap",
36
- "description": "Kiro: rename installed bundled skill directory from typoed name to corrected name."
37
- },
38
- {
39
- "type": "rename-dir",
40
- "from": ".qoder/skills/trellis-spec-bootstarp",
41
- "to": ".qoder/skills/trellis-spec-bootstrap",
42
- "description": "Qoder: rename installed bundled skill directory from typoed name to corrected name."
43
- },
44
- {
45
- "type": "rename-dir",
46
- "from": ".codebuddy/skills/trellis-spec-bootstarp",
47
- "to": ".codebuddy/skills/trellis-spec-bootstrap",
48
- "description": "CodeBuddy: rename installed bundled skill directory from typoed name to corrected name."
49
- },
50
- {
51
- "type": "rename-dir",
52
- "from": ".github/skills/trellis-spec-bootstarp",
53
- "to": ".github/skills/trellis-spec-bootstrap",
54
- "description": "GitHub Copilot: rename installed bundled skill directory from typoed name to corrected name."
55
- },
56
- {
57
- "type": "rename-dir",
58
- "from": ".factory/skills/trellis-spec-bootstarp",
59
- "to": ".factory/skills/trellis-spec-bootstrap",
60
- "description": "Droid: rename installed bundled skill directory from typoed name to corrected name."
61
- },
62
- {
63
- "type": "rename-dir",
64
- "from": ".pi/skills/trellis-spec-bootstarp",
65
- "to": ".pi/skills/trellis-spec-bootstrap",
66
- "description": "Pi Agent: rename installed bundled skill directory from typoed name to corrected name."
67
- },
68
- {
69
- "type": "rename-dir",
70
- "from": ".agent/skills/trellis-spec-bootstarp",
71
- "to": ".agent/skills/trellis-spec-bootstrap",
72
- "description": "Antigravity: rename installed bundled skill directory from typoed name to corrected name."
73
- },
74
- {
75
- "type": "rename-dir",
76
- "from": ".windsurf/skills/trellis-spec-bootstarp",
77
- "to": ".windsurf/skills/trellis-spec-bootstrap",
78
- "description": "Windsurf: rename installed bundled skill directory from typoed name to corrected name."
79
- },
80
- {
81
- "type": "rename-dir",
82
- "from": ".kilocode/skills/trellis-spec-bootstarp",
83
- "to": ".kilocode/skills/trellis-spec-bootstrap",
84
- "description": "Kilo: rename installed bundled skill directory from typoed name to corrected name."
85
19
  }
86
20
  ],
87
21
  "notes": "Beta patch on top of 0.6.0-beta.22. Run `trellis update --migrate` to rename installed `trellis-spec-bootstarp/` skill directories to `trellis-spec-bootstrap/` across every platform you have configured (silently skips ones you do not). Plain `trellis update` also installs the new `trellis-session-insight` bundled skill and the `.trellis/agents/{check,implement}.md` channel runtime files."
@@ -4,21 +4,6 @@
4
4
  "breaking": false,
5
5
  "recommendMigrate": true,
6
6
  "changelog": "**Enhancements:**\n- feat(platform): **ZCode (`--zcode`).** Added ZCode (智谱 / Z.ai) as a pull-based, agent-capable platform (no hooks). `trellis init --zcode` writes `.agents/skills/`, `.zcode/commands/trellis/`, and `.zcode/cli/agents/` (`trellis-implement` / `trellis-check`). Registry `AI_TOOLS.zcode`, configurator `configureZcode` in `src/configurators/zcode.ts`.\n- feat(init): **`trellis init --with-statusline`.** Opt-in Claude Code status bar (off by default; interactive prompt when the flag is omitted, skipped under `-y`). Writes `.claude/hooks/statusline.py` and a `statusLine` entry in `.claude/settings.json`. Not part of `collectTemplates`/shared-hooks, so `trellis update` never force-installs or removes it.\n- feat(mem): **Pi session adapter.** `trellis mem --platform pi` (and `all`) now reads persisted Pi Agent sessions via `packages/core/src/mem/adapters/pi.ts`. Discovers `~/.pi/agent/sessions/`, honors `PI_CODING_AGENT_DIR` / `PI_CODING_AGENT_SESSION_DIR`, and slices phases in `sliceMemPhase` like Claude/Codex.\n- feat(platform): **Windsurf is now Devin.** Cognition renamed Windsurf to Devin Desktop (2026-06-02 OTA) and moved the config dir from `.windsurf/` to `.devin/`. `trellis init --devin` writes `.devin/workflows/` + `.devin/skills/` and passes `--platform devin` (#325). `--windsurf` remains a deprecated alias for one version.\n- feat(skills): **Thinking frameworks.** `brainstorm` gains a First Principles Analysis framework (decompose to fundamentals during requirement discovery) and `break-loop` gains a Bayesian Reasoning framework (weight hypotheses by evidence during debugging), both in `common/skills/` so all platforms get them on update. Hardcoded \"5 skills\" comments replaced with count-free wording (#335).\n\n**Bug Fixes:**\n- fix(mem): **`--cwd` Claude filter on Windows (#300).** `trellis mem --cwd` returned 0 Claude sessions on Windows because `claudeProjectDirFromCwd` only sanitized `/` and `_`. The regex now covers all separators (`/[/\\\\:_.]/g`) and `claudeListSessions` falls back to scanning every project dir when the derived dir is missing.\n- fix(commit): **`.trellis` auto-commit staging scope (#303).** Scoped `.trellis/` auto-commit so it no longer sweeps unrelated parallel-window task dirs into session commits. `safe_trellis_paths_to_add()` takes a `task_name`; `_auto_commit_workspace()` resolves the current task via `get_current_task()`; `release.js` `git add -A` now excludes `':!.trellis'`.\n\n**Migration:** Only the Windsurf → Devin rename needs `trellis update --migrate` — and only if you initialized with `--windsurf`. It ships idempotent `rename-dir` migrations (`.windsurf/workflows/` → `.devin/workflows/`, `.windsurf/skills/` → `.devin/skills/`); projects without a `.windsurf/` directory are silently skipped.",
7
- "migrations": [
8
- {
9
- "type": "rename-dir",
10
- "from": ".windsurf/workflows",
11
- "to": ".devin/workflows",
12
- "description": "Devin (formerly Windsurf): move installed workflows from the old .windsurf/ config dir to .devin/ (Windsurf was renamed to Devin Desktop).",
13
- "reason": "Cognition renamed Windsurf to Devin Desktop and moved its config dir from .windsurf/ to .devin/. Trellis renamed the platform to match."
14
- },
15
- {
16
- "type": "rename-dir",
17
- "from": ".windsurf/skills",
18
- "to": ".devin/skills",
19
- "description": "Devin (formerly Windsurf): move installed skills from the old .windsurf/ config dir to .devin/ (Windsurf was renamed to Devin Desktop).",
20
- "reason": "Cognition renamed Windsurf to Devin Desktop and moved its config dir from .windsurf/ to .devin/. Trellis renamed the platform to match."
21
- }
22
- ],
7
+ "migrations": [],
23
8
  "notes": "Windsurf → Devin rename (#325). If you initialized Trellis with `--windsurf`, run `trellis update --migrate` to move your installed `.windsurf/workflows/` and `.windsurf/skills/` directories to `.devin/`. Projects without a `.windsurf/` directory are unaffected (the migration silently skips). `--windsurf` still works as a deprecated alias for `--devin` this release.\n\nInstall: `npm install -g @mindfoldhq/trellis`"
24
9
  }
@@ -4,14 +4,6 @@
4
4
  "breaking": false,
5
5
  "recommendMigrate": false,
6
6
  "changelog": "**Enhancements:**\n- feat(omp): add Oh My Pi platform support. `trellis init --omp` writes `.omp/agents/`, `.omp/commands/`, `.omp/skills/`, and `.omp/extensions/trellis/`, and registers OMP in `cli_adapter.py` / `task_store.py` so OMP projects receive Trellis workflow and sub-agent context.\n\n**Bug Fixes:**\n- fix(pi): keep Pi `systemPrompt` byte-stable across turns by memoizing startup/task context and delivering mutable workflow/session/task updates through persistent hidden messages, preserving provider prefix-cache eligibility.\n- fix(omp): add rich session-start, task, and sub-agent context injection in the OMP extension, use `pi/task` model hints for implement/research agents, include YAML frontmatter in generated command files, and avoid stale session identity fallback.\n- fix(zcode): write ZCode-managed skills to `.zcode/skills/`, complete `.zcode/agents/` with `trellis-research`, treat `.zcode` as sub-agent-capable for JSONL seed generation, and keep sub-agents under `.zcode/agents/` instead of legacy `.zcode/cli/agents/`.\n- fix(channel): resolve Windows npm `.cmd` / node-script shims before spawning Codex channel workers and serialize stdout event appends so concurrent channel output cannot corrupt event records.\n- fix(cli): ignore stale `task.json.branch` when stamping session journals, falling back to the live checkout branch when the recorded task branch no longer exists.\n- fix(task): guard explicit `task.py create --slug` values that already include an `MM-DD-` prefix, warn and normalize today's prefix, and reject other valid date prefixes before creating doubled task directory names.\n- fix(task): warn on blank `task.py create --description`, normalize whitespace-only descriptions to `\"\"`, make automatic session activation visible, and add `--no-start` for backlog creation without moving the session pointer.\n- fix(codex): make `.codex/` seed `implement.jsonl` / `check.jsonl` only when `codex.dispatch_mode: sub-agent` is explicitly configured; Codex inline mode now skips JSONL seed files.\n- fix(session): replace placeholder journal defaults with explicit fallback text and correct generated update hints to recommend `trellis update`.\n- fix(copilot): preserve repo-authored `.github/copilot-instructions.md` content while managing only the Trellis guidance block during init/update/uninstall.\n- fix(hooks): keep shared hook failure handling fail-open without catching `BaseException`.\n\n**Migration:** ZCode users who initialized with `--zcode` on 0.6.3-0.6.5 should run `trellis update --migrate` once to relocate `.zcode/cli/agents/` to `.zcode/agents/` if the legacy directory exists. New installs write the corrected `.zcode/skills/` and `.zcode/agents/` layout directly.",
7
- "migrations": [
8
- {
9
- "type": "rename-dir",
10
- "from": ".zcode/cli/agents",
11
- "to": ".zcode/agents",
12
- "description": "ZCode: move installed sub-agents from the legacy `.zcode/cli/agents/` directory to the new `.zcode/agents/` discovery path.",
13
- "reason": "ZCode dropped the intermediate `cli/` segment from its sub-agent discovery path. Trellis now writes to `.zcode/agents/`; this relocation keeps already-initialized projects consistent without leaving a stale directory behind."
14
- }
15
- ],
7
+ "migrations": [],
16
8
  "notes": "No `--migrate` required for new installs.\n\nRun `trellis update` after upgrading to refresh generated scripts, hooks, platform templates, and task workflow guidance.\n\nZCode users on 0.6.3-0.6.5 should run `trellis update --migrate` once if `.zcode/cli/agents/` exists; this moves legacy sub-agents to `.zcode/agents/`. `trellis update` will also add `.zcode/skills/` and `trellis-research` through normal template updates.\n\nOh My Pi users can run `trellis init --omp` in projects that do not yet have `.omp/`; existing OMP dogfood projects should run `trellis update`.\n\nPi users should run `trellis update` to receive the cache-stable extension runtime. Codex inline users should run `trellis update` so new tasks stop receiving seed-only JSONL files.\n\nInstall: `npm install -g @mindfoldhq/trellis`"
17
9
  }
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": "0.7.0",
3
+ "description": "Stable package rename to the @blulotus/trellis namespace.",
4
+ "breaking": false,
5
+ "recommendMigrate": false,
6
+ "changelog": "**Internal:**\n- chore(release): renamed the published CLI and core packages from `@mindfoldhq/trellis` / `@mindfoldhq/trellis-core` to `@blulotus/trellis` / `@blulotus/trellis-core` and promoted the 0.7 beta line to stable.",
7
+ "migrations": [],
8
+ "notes": "Install the renamed @blulotus packages when upgrading from the previous namespace. No project-file migration is required."
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": "0.7.1",
3
+ "description": "Patch release for the WCS Trellis distribution and release tooling.",
4
+ "breaking": false,
5
+ "recommendMigrate": false,
6
+ "changelog": "**Bug Fixes:**\n- fix(windows): improve cross-platform release and template test compatibility.\n- fix(workflow): keep explicit task creation and red-evidence routing consistent across generated platform assets.\n\n**Internal:**\n- chore(release): remove the obsolete marketplace submodule dependency from CI and release checks.",
7
+ "migrations": [],
8
+ "notes": "Run `trellis update`, then start a new session to pick up the workflow and release-tooling fixes."
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": "0.7.2",
3
+ "description": "Patch: Trellis stops managing the project-root .gitattributes, and session_auto_commit now defaults to false.",
4
+ "breaking": false,
5
+ "recommendMigrate": false,
6
+ "changelog": "**Default behavior change:**\n- feat(scripts): `session_auto_commit` now defaults to `false` and ships **uncommented** in `.trellis/config.yaml`. Trellis no longer writes git history on your behalf: `add_session.py` and `task.py archive` still write journal / archive files to disk, then leave git alone for you to `git add` / `git commit`. Set `session_auto_commit: true` to restore auto-stage + auto-commit. A project whose `.trellis/config.yaml` still matches the bundled template picks up the new default on `trellis update`; an edited config.yaml goes through the usual modified-file prompt.\n\n**Removals:**\n- feat(cli): `trellis init` / `trellis update` no longer create or append to the project-root `.gitattributes`. The `.trellis/workspace/*/journal-*.md merge=union` rule shipped in 0.6.9 (#415) is gone: writing outside `.trellis/` to change repo-wide git merge semantics — through a path that deliberately bypassed the update conflict prompt — was the wrong boundary for a workflow scaffold, and with auto-commit off by default the journal conflicts it papered over are rare. Existing `.gitattributes` files are left exactly as they are.",
7
+ "migrations": [],
8
+ "notes": "No files are renamed or deleted — `--migrate` is not needed.\n\nTwo things to check after `trellis update`:\n1. If you relied on journal / archive auto-commit, set `session_auto_commit: true` in `.trellis/config.yaml`.\n2. Your project-root `.gitattributes` is untouched; Trellis simply stops managing it. Keep the `journal-*.md merge=union` line if you like it, or delete that block by hand. Note it is only sound while journals stay append-only."
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": "0.8.0",
3
+ "description": "Trellis context injection becomes opt-in per session: both hooks stay silent until `trellis-start` / `trellis-continue` / `trellis-finish-work` runs `task.py engage`.",
4
+ "breaking": true,
5
+ "recommendMigrate": false,
6
+ "changelog": "**Breaking (behavior, not files):**\n- feat(hooks): context injection is opt-in per session. `session-start.py` and `inject-workflow-state.py` now emit nothing until the session runs `task.py engage`, which the three lifecycle entry points (`trellis-start`, `trellis-continue`, `trellis-finish-work`) do as their first step. A session that never invokes one pays zero tokens — no SessionStart payload (~2.6-3k tokens per startup/clear/compact) and no per-turn `<workflow-state>` breadcrumb. An in-flight task belonging to another window no longer speaks for a new session: only `trellis-continue` adopts it.\n\n**Features:**\n- feat(scripts): new `task.py engage` writes a per-session flag to `.trellis/.runtime/engaged/<context_key>.json`. It lives in its own runtime directory, not on the session file, because `task.py finish` and `task.py archive` delete session files and would silently un-engage a session mid-Phase-3. `is_session_engaged()` deliberately has no single-session fallback (unlike `resolve_active_task`) — inheriting engagement from another window's leftover file is the exact failure opt-in exists to prevent. Engage fails loudly (exit 1) when no session identity is available; there is no degraded mode, because a missing flag would leave both hooks quiet for the whole session with no diagnosis.\n- feat(commands): `start` now ships on every platform. `filterCommands()` in `configurators/shared.ts` (which stripped it on `agentCapable && hasHooks` platforms because SessionStart injected the overview) is deleted — with injection gated on engagement, the entry point is the only way in, hook or not. Claude Code gains `.claude/commands/trellis/start.md`; Kiro, CodeBuddy, Copilot, Gemini, Droid, Trae, ZCode, Snow, OMP and Pi gain their equivalents. `configurators/pi.ts`'s `resolvePiCommands()` hasHooks-spoofing fallback is deleted as orphaned.\n- feat(commands): `start.md` is rewritten from \"manually load session context\" to \"create a task for the request the user just made, then plan it\" — engage, load the workflow, `task.py create` with an explicit `meta.kind`, then load `trellis-brainstorm`. `continue.md` and `finish-work.md` gain the engage prelude.\n- feat(codex): `.codex/hooks/session-start.py` is now registered in `hooks.json` on the existing `^(?:clear|compact)$` matcher, so an engaged Codex session gets its workflow context back after compaction. Structurally safe with respect to #240: a sub-agent spawn does not match clear/compact, and the script carries no sub-agent dispatch directive.\n\n**Removals:**\n- The `<first-reply-notice>` block is gone from `shared-hooks/session-start.py` and `codex/hooks/session-start.py`. Its acknowledgment job died with opt-in engagement — the user invoked the entry point, so its output is the acknowledgment. Its second job, escalating a pending `trellis update` into the visible reply, moved to a `<trellis-maintenance-notice>` block that is emitted only when an update is actually pending.\n- The Codex `<trellis-bootstrap>` notice (\"read the `trellis-start` skill once\") is deleted from `inject-workflow-state.py`. It existed to compensate for Codex having no SessionStart hook; under opt-in it worked against the user's explicit choice.\n\n**Unchanged on purpose:**\n- `claude/settings.json` is byte-identical. The SessionStart registration stays: the hook still runs unconditionally to append `export TRELLIS_CONTEXT_ID=` to `$CLAUDE_ENV_FILE` before the opt-in gate. That is the only channel by which session identity reaches `task.py` in a Bash child on Claude Code, so gating it would leave `task.py engage` unable to write the flag the gate reads.\n- Path-scoped spec injection (`inject-spec-context.py`, PostToolUse/PreToolUse) is not gated. It carries coding conventions for files the agent touches, which is orthogonal to the task workflow.\n- OpenCode's JS plugins and Pi/OMP's TypeScript extension keep their own always-inject implementations; the opt-in gate lives in the shared Python hooks only.",
7
+ "migrations": [],
8
+ "notes": "Run `trellis update`, then start a new session.\n\nWhat changes for you: a new session gets no Trellis context at all. Invoke `trellis-start <description>` to create a task, `trellis-continue` to resume one, `trellis-finish-work` to wrap up. Ignoring all three keeps the session completely outside Trellis, even with a task in flight.\n\nNo `--migrate` needed: nothing is renamed or deleted, and the new `start` command / skill installs as a new file."
9
+ }
@@ -3,6 +3,10 @@
3
3
  """
4
4
  Codex Session Start Hook - Inject Trellis context into Codex sessions.
5
5
 
6
+ Registered on the clear/compact matcher only (see hooks.json): compaction drops
7
+ the workflow context an engaged session depends on, and this restores it. Emits
8
+ nothing until the session opts in via `task.py engage`.
9
+
6
10
  Output format follows Codex hook protocol:
7
11
  stdout JSON → { hookSpecificOutput: { hookEventName: "SessionStart", additionalContext: "..." } }
8
12
  """
@@ -91,17 +95,6 @@ def _normalize_windows_shell_path(path_str: str) -> str:
91
95
 
92
96
  warnings.filterwarnings("ignore")
93
97
 
94
- FIRST_REPLY_NOTICE = """<first-reply-notice>
95
- On the first visible assistant reply in this session, briefly acknowledge that Trellis SessionStart context loaded.
96
- Choose the acknowledgment language in this order:
97
- 1. Use the language of the user's current request (the user message that triggered this reply).
98
- 2. If that request has no clear natural language, use an explicitly established project communication language.
99
- 3. If neither provides a language, output the language-neutral fallback exactly: `Trellis SessionStart ✓`.
100
- Continue directly with the user's request after the acknowledgment.
101
- The acknowledgment must not alter the language used for the remainder of the response.
102
- This notice is one-shot: do not repeat it after the first visible assistant reply in this session.
103
- </first-reply-notice>"""
104
-
105
98
 
106
99
  def should_skip_injection() -> bool:
107
100
  if os.environ.get("TRELLIS_HOOKS") == "0":
@@ -166,6 +159,30 @@ def _resolve_context_key(project_dir: Path, hook_input: dict) -> str | None:
166
159
  return resolve_context_key(hook_input, platform="codex")
167
160
 
168
161
 
162
+ def _is_session_engaged(project_dir: Path, hook_input: dict) -> bool:
163
+ """Whether this Codex session opted into the Trellis workflow.
164
+
165
+ A project too old to have `is_session_engaged` (hooks updated, `.trellis/scripts`
166
+ not) raises ImportError. Reporting False then would make Trellis look
167
+ uninstalled with no way to diagnose it, so the stale-scripts case keeps the
168
+ old always-inject behavior and says why on stderr.
169
+ """
170
+ scripts_dir = project_dir / ".trellis" / "scripts"
171
+ if str(scripts_dir) not in sys.path:
172
+ sys.path.insert(0, str(scripts_dir))
173
+ try:
174
+ from common.active_task import is_session_engaged # type: ignore[import-not-found]
175
+ except ImportError:
176
+ print(
177
+ "trellis codex session-start: .trellis/scripts predates opt-in "
178
+ "engagement; injecting context unconditionally. Run `trellis update`.",
179
+ file=sys.stderr,
180
+ )
181
+ return True
182
+
183
+ return is_session_engaged(project_dir, hook_input, platform="codex")
184
+
185
+
169
186
  def _resolve_active_task(trellis_dir: Path, hook_input: dict):
170
187
  scripts_dir = trellis_dir / "scripts"
171
188
  if str(scripts_dir) not in sys.path:
@@ -505,6 +522,15 @@ def main() -> None:
505
522
  configure_project_encoding(project_dir)
506
523
 
507
524
  trellis_dir = project_dir / ".trellis"
525
+
526
+ # Context injection is opt-in: a session that never invoked `trellis-start` /
527
+ # `trellis-continue` / `trellis-finish-work` gets nothing. This hook is
528
+ # registered only on the clear/compact matcher, so reaching it in an engaged
529
+ # session means compaction dropped the workflow context and it is being
530
+ # restored.
531
+ if not _is_session_engaged(project_dir, hook_input):
532
+ sys.exit(0)
533
+
508
534
  spec_index_paths = _collect_spec_index_paths(trellis_dir)
509
535
 
510
536
  output = StringIO()
@@ -514,8 +540,6 @@ Trellis compact SessionStart context. Use it to orient the session; load details
514
540
  </session-context>
515
541
 
516
542
  """)
517
- output.write(FIRST_REPLY_NOTICE)
518
- output.write("\n\n")
519
543
 
520
544
  output.write("<current-state>\n")
521
545
  output.write(_build_compact_current_state(trellis_dir, hook_input, spec_index_paths))
@@ -4,6 +4,11 @@
4
4
  {
5
5
  "matcher": "^(?:clear|compact)$",
6
6
  "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "{{PYTHON_CMD}} -X utf8 .codex/hooks/session-start.py",
10
+ "timeout": 30
11
+ },
7
12
  {
8
13
  "type": "command",
9
14
  "command": "{{PYTHON_CMD}} -X utf8 .codex/hooks/inject-spec-context.py",