takt 0.11.1 → 0.12.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 (321) hide show
  1. package/README.md +76 -52
  2. package/builtins/en/piece-categories.yaml +12 -10
  3. package/builtins/en/pieces/coding.yaml +1 -1
  4. package/builtins/en/pieces/compound-eye.yaml +1 -1
  5. package/builtins/en/pieces/default.yaml +1 -1
  6. package/builtins/en/pieces/e2e-test.yaml +1 -1
  7. package/builtins/en/pieces/expert-cqrs.yaml +1 -5
  8. package/builtins/en/pieces/expert.yaml +1 -5
  9. package/builtins/en/pieces/frontend.yaml +282 -0
  10. package/builtins/en/pieces/magi.yaml +1 -1
  11. package/builtins/en/pieces/minimal.yaml +1 -1
  12. package/builtins/en/pieces/passthrough.yaml +1 -1
  13. package/builtins/en/pieces/research.yaml +4 -4
  14. package/builtins/en/pieces/review-fix-minimal.yaml +1 -1
  15. package/builtins/en/pieces/review-only.yaml +1 -1
  16. package/builtins/en/pieces/structural-reform.yaml +5 -5
  17. package/builtins/en/pieces/unit-test.yaml +1 -1
  18. package/builtins/ja/INSTRUCTION_STYLE_GUIDE.md +3 -3
  19. package/builtins/ja/PERSONA_STYLE_GUIDE.md +1 -1
  20. package/builtins/ja/POLICY_STYLE_GUIDE.md +1 -1
  21. package/builtins/ja/piece-categories.yaml +12 -10
  22. package/builtins/ja/pieces/coding.yaml +1 -1
  23. package/builtins/ja/pieces/compound-eye.yaml +1 -1
  24. package/builtins/ja/pieces/default.yaml +1 -1
  25. package/builtins/ja/pieces/e2e-test.yaml +1 -1
  26. package/builtins/ja/pieces/expert-cqrs.yaml +1 -5
  27. package/builtins/ja/pieces/expert.yaml +1 -5
  28. package/builtins/ja/pieces/frontend.yaml +282 -0
  29. package/builtins/ja/pieces/magi.yaml +1 -1
  30. package/builtins/ja/pieces/minimal.yaml +1 -1
  31. package/builtins/ja/pieces/passthrough.yaml +1 -1
  32. package/builtins/ja/pieces/research.yaml +4 -4
  33. package/builtins/ja/pieces/review-fix-minimal.yaml +1 -1
  34. package/builtins/ja/pieces/review-only.yaml +1 -1
  35. package/builtins/ja/pieces/structural-reform.yaml +5 -5
  36. package/builtins/ja/pieces/unit-test.yaml +1 -1
  37. package/builtins/project/dotgitignore +1 -1
  38. package/builtins/project/tasks/TASK-FORMAT +36 -25
  39. package/builtins/skill/SKILL.md +11 -3
  40. package/builtins/skill/references/engine.md +21 -11
  41. package/builtins/skill/references/yaml-schema.md +2 -2
  42. package/dist/agents/ai-judge.js +1 -1
  43. package/dist/agents/ai-judge.js.map +1 -1
  44. package/dist/agents/types.d.ts +1 -1
  45. package/dist/agents/types.d.ts.map +1 -1
  46. package/dist/app/cli/commands.js +2 -2
  47. package/dist/app/cli/commands.js.map +1 -1
  48. package/dist/app/cli/index.js +4 -0
  49. package/dist/app/cli/index.js.map +1 -1
  50. package/dist/app/cli/program.js +1 -1
  51. package/dist/app/cli/program.js.map +1 -1
  52. package/dist/app/cli/routing.d.ts.map +1 -1
  53. package/dist/app/cli/routing.js +30 -11
  54. package/dist/app/cli/routing.js.map +1 -1
  55. package/dist/core/models/global-config.d.ts +27 -4
  56. package/dist/core/models/global-config.d.ts.map +1 -1
  57. package/dist/core/models/index.d.ts +1 -1
  58. package/dist/core/models/index.d.ts.map +1 -1
  59. package/dist/core/models/index.js.map +1 -1
  60. package/dist/core/models/piece-types.d.ts +38 -2
  61. package/dist/core/models/piece-types.d.ts.map +1 -1
  62. package/dist/core/models/schemas.d.ts +93 -1
  63. package/dist/core/models/schemas.d.ts.map +1 -1
  64. package/dist/core/models/schemas.js +55 -7
  65. package/dist/core/models/schemas.js.map +1 -1
  66. package/dist/core/models/session.d.ts +1 -1
  67. package/dist/core/models/session.d.ts.map +1 -1
  68. package/dist/core/models/session.js +1 -1
  69. package/dist/core/models/session.js.map +1 -1
  70. package/dist/core/models/types.d.ts +2 -2
  71. package/dist/core/models/types.d.ts.map +1 -1
  72. package/dist/core/piece/arpeggio/csv-data-source.d.ts +15 -0
  73. package/dist/core/piece/arpeggio/csv-data-source.d.ts.map +1 -0
  74. package/dist/core/piece/arpeggio/csv-data-source.js +119 -0
  75. package/dist/core/piece/arpeggio/csv-data-source.js.map +1 -0
  76. package/dist/core/piece/arpeggio/data-source-factory.d.ts +15 -0
  77. package/dist/core/piece/arpeggio/data-source-factory.d.ts.map +1 -0
  78. package/dist/core/piece/arpeggio/data-source-factory.js +30 -0
  79. package/dist/core/piece/arpeggio/data-source-factory.js.map +1 -0
  80. package/dist/core/piece/arpeggio/merge.d.ts +18 -0
  81. package/dist/core/piece/arpeggio/merge.d.ts.map +1 -0
  82. package/dist/core/piece/arpeggio/merge.js +68 -0
  83. package/dist/core/piece/arpeggio/merge.js.map +1 -0
  84. package/dist/core/piece/arpeggio/template.d.ts +23 -0
  85. package/dist/core/piece/arpeggio/template.d.ts.map +1 -0
  86. package/dist/core/piece/arpeggio/template.js +58 -0
  87. package/dist/core/piece/arpeggio/template.js.map +1 -0
  88. package/dist/core/piece/arpeggio/types.d.ts +38 -0
  89. package/dist/core/piece/arpeggio/types.d.ts.map +1 -0
  90. package/dist/core/piece/arpeggio/types.js +9 -0
  91. package/dist/core/piece/arpeggio/types.js.map +1 -0
  92. package/dist/core/piece/constants.d.ts +1 -1
  93. package/dist/core/piece/constants.js +1 -1
  94. package/dist/core/piece/constants.js.map +1 -1
  95. package/dist/core/piece/engine/ArpeggioRunner.d.ts +41 -0
  96. package/dist/core/piece/engine/ArpeggioRunner.d.ts.map +1 -0
  97. package/dist/core/piece/engine/ArpeggioRunner.js +189 -0
  98. package/dist/core/piece/engine/ArpeggioRunner.js.map +1 -0
  99. package/dist/core/piece/engine/MovementExecutor.d.ts +9 -2
  100. package/dist/core/piece/engine/MovementExecutor.d.ts.map +1 -1
  101. package/dist/core/piece/engine/MovementExecutor.js +60 -8
  102. package/dist/core/piece/engine/MovementExecutor.js.map +1 -1
  103. package/dist/core/piece/engine/OptionsBuilder.d.ts.map +1 -1
  104. package/dist/core/piece/engine/OptionsBuilder.js +11 -4
  105. package/dist/core/piece/engine/OptionsBuilder.js.map +1 -1
  106. package/dist/core/piece/engine/ParallelRunner.d.ts +1 -1
  107. package/dist/core/piece/engine/ParallelRunner.d.ts.map +1 -1
  108. package/dist/core/piece/engine/ParallelRunner.js +6 -5
  109. package/dist/core/piece/engine/ParallelRunner.js.map +1 -1
  110. package/dist/core/piece/engine/PieceEngine.d.ts +5 -3
  111. package/dist/core/piece/engine/PieceEngine.d.ts.map +1 -1
  112. package/dist/core/piece/engine/PieceEngine.js +62 -25
  113. package/dist/core/piece/engine/PieceEngine.js.map +1 -1
  114. package/dist/core/piece/engine/index.d.ts +1 -0
  115. package/dist/core/piece/engine/index.d.ts.map +1 -1
  116. package/dist/core/piece/engine/index.js +1 -0
  117. package/dist/core/piece/engine/index.js.map +1 -1
  118. package/dist/core/piece/engine/parallel-logger.d.ts +7 -2
  119. package/dist/core/piece/engine/parallel-logger.d.ts.map +1 -1
  120. package/dist/core/piece/engine/parallel-logger.js +20 -7
  121. package/dist/core/piece/engine/parallel-logger.js.map +1 -1
  122. package/dist/core/piece/engine/state-manager.d.ts.map +1 -1
  123. package/dist/core/piece/engine/state-manager.js +1 -0
  124. package/dist/core/piece/engine/state-manager.js.map +1 -1
  125. package/dist/core/piece/index.d.ts +1 -1
  126. package/dist/core/piece/index.d.ts.map +1 -1
  127. package/dist/core/piece/index.js.map +1 -1
  128. package/dist/core/piece/instruction/InstructionBuilder.d.ts.map +1 -1
  129. package/dist/core/piece/instruction/InstructionBuilder.js +71 -10
  130. package/dist/core/piece/instruction/InstructionBuilder.js.map +1 -1
  131. package/dist/core/piece/instruction/ReportInstructionBuilder.js +1 -1
  132. package/dist/core/piece/instruction/ReportInstructionBuilder.js.map +1 -1
  133. package/dist/core/piece/instruction/escape.d.ts.map +1 -1
  134. package/dist/core/piece/instruction/escape.js +6 -3
  135. package/dist/core/piece/instruction/escape.js.map +1 -1
  136. package/dist/core/piece/instruction/instruction-context.d.ts +10 -2
  137. package/dist/core/piece/instruction/instruction-context.d.ts.map +1 -1
  138. package/dist/core/piece/instruction/instruction-context.js.map +1 -1
  139. package/dist/core/piece/judgment/FallbackStrategy.js +1 -1
  140. package/dist/core/piece/judgment/FallbackStrategy.js.map +1 -1
  141. package/dist/core/piece/phase-runner.d.ts +7 -2
  142. package/dist/core/piece/phase-runner.d.ts.map +1 -1
  143. package/dist/core/piece/phase-runner.js +38 -8
  144. package/dist/core/piece/phase-runner.js.map +1 -1
  145. package/dist/core/piece/provider-resolution.d.ts +14 -0
  146. package/dist/core/piece/provider-resolution.d.ts.map +1 -0
  147. package/dist/core/piece/provider-resolution.js +9 -0
  148. package/dist/core/piece/provider-resolution.js.map +1 -0
  149. package/dist/core/piece/run/run-paths.d.ts +21 -0
  150. package/dist/core/piece/run/run-paths.d.ts.map +1 -0
  151. package/dist/core/piece/run/run-paths.js +31 -0
  152. package/dist/core/piece/run/run-paths.js.map +1 -0
  153. package/dist/core/piece/types.d.ts +6 -4
  154. package/dist/core/piece/types.d.ts.map +1 -1
  155. package/dist/features/interactive/conversationLoop.d.ts.map +1 -1
  156. package/dist/features/interactive/conversationLoop.js +21 -0
  157. package/dist/features/interactive/conversationLoop.js.map +1 -1
  158. package/dist/features/interactive/index.d.ts +1 -0
  159. package/dist/features/interactive/index.d.ts.map +1 -1
  160. package/dist/features/interactive/index.js +1 -0
  161. package/dist/features/interactive/index.js.map +1 -1
  162. package/dist/features/interactive/interactive.d.ts +1 -1
  163. package/dist/features/interactive/interactive.d.ts.map +1 -1
  164. package/dist/features/interactive/interactive.js +3 -2
  165. package/dist/features/interactive/interactive.js.map +1 -1
  166. package/dist/features/interactive/sessionSelector.d.ts +15 -0
  167. package/dist/features/interactive/sessionSelector.d.ts.map +1 -0
  168. package/dist/features/interactive/sessionSelector.js +86 -0
  169. package/dist/features/interactive/sessionSelector.js.map +1 -0
  170. package/dist/features/prompt/preview.js +3 -3
  171. package/dist/features/prompt/preview.js.map +1 -1
  172. package/dist/features/tasks/add/index.d.ts +16 -6
  173. package/dist/features/tasks/add/index.d.ts.map +1 -1
  174. package/dist/features/tasks/add/index.js +89 -74
  175. package/dist/features/tasks/add/index.js.map +1 -1
  176. package/dist/features/tasks/execute/parallelExecution.d.ts +1 -1
  177. package/dist/features/tasks/execute/parallelExecution.js +1 -1
  178. package/dist/features/tasks/execute/pieceExecution.d.ts.map +1 -1
  179. package/dist/features/tasks/execute/pieceExecution.js +359 -277
  180. package/dist/features/tasks/execute/pieceExecution.js.map +1 -1
  181. package/dist/features/tasks/execute/resolveTask.d.ts +2 -0
  182. package/dist/features/tasks/execute/resolveTask.d.ts.map +1 -1
  183. package/dist/features/tasks/execute/resolveTask.js +53 -8
  184. package/dist/features/tasks/execute/resolveTask.js.map +1 -1
  185. package/dist/features/tasks/execute/selectAndExecute.d.ts.map +1 -1
  186. package/dist/features/tasks/execute/selectAndExecute.js +4 -7
  187. package/dist/features/tasks/execute/selectAndExecute.js.map +1 -1
  188. package/dist/features/tasks/execute/taskExecution.d.ts +1 -1
  189. package/dist/features/tasks/execute/taskExecution.d.ts.map +1 -1
  190. package/dist/features/tasks/execute/taskExecution.js +45 -13
  191. package/dist/features/tasks/execute/taskExecution.js.map +1 -1
  192. package/dist/features/tasks/execute/types.d.ts +4 -0
  193. package/dist/features/tasks/execute/types.d.ts.map +1 -1
  194. package/dist/features/tasks/index.d.ts +1 -1
  195. package/dist/features/tasks/index.d.ts.map +1 -1
  196. package/dist/features/tasks/index.js +1 -1
  197. package/dist/features/tasks/index.js.map +1 -1
  198. package/dist/features/tasks/list/index.d.ts +1 -1
  199. package/dist/features/tasks/list/index.js +1 -1
  200. package/dist/infra/claude/session-reader.d.ts +31 -0
  201. package/dist/infra/claude/session-reader.d.ts.map +1 -0
  202. package/dist/infra/claude/session-reader.js +75 -0
  203. package/dist/infra/claude/session-reader.js.map +1 -0
  204. package/dist/infra/config/global/globalConfig.d.ts +6 -1
  205. package/dist/infra/config/global/globalConfig.d.ts.map +1 -1
  206. package/dist/infra/config/global/globalConfig.js +68 -3
  207. package/dist/infra/config/global/globalConfig.js.map +1 -1
  208. package/dist/infra/config/global/index.d.ts +1 -1
  209. package/dist/infra/config/global/index.d.ts.map +1 -1
  210. package/dist/infra/config/global/index.js +1 -1
  211. package/dist/infra/config/global/index.js.map +1 -1
  212. package/dist/infra/config/global/initialization.d.ts +1 -1
  213. package/dist/infra/config/global/initialization.d.ts.map +1 -1
  214. package/dist/infra/config/global/initialization.js +2 -1
  215. package/dist/infra/config/global/initialization.js.map +1 -1
  216. package/dist/infra/config/loaders/pieceParser.d.ts.map +1 -1
  217. package/dist/infra/config/loaders/pieceParser.js +30 -2
  218. package/dist/infra/config/loaders/pieceParser.js.map +1 -1
  219. package/dist/infra/config/types.d.ts +1 -1
  220. package/dist/infra/config/types.d.ts.map +1 -1
  221. package/dist/infra/fs/index.d.ts +2 -2
  222. package/dist/infra/fs/index.d.ts.map +1 -1
  223. package/dist/infra/fs/index.js +1 -1
  224. package/dist/infra/fs/index.js.map +1 -1
  225. package/dist/infra/fs/session.d.ts +8 -11
  226. package/dist/infra/fs/session.d.ts.map +1 -1
  227. package/dist/infra/fs/session.js +7 -35
  228. package/dist/infra/fs/session.js.map +1 -1
  229. package/dist/infra/opencode/OpenCodeStreamHandler.d.ts +165 -0
  230. package/dist/infra/opencode/OpenCodeStreamHandler.d.ts.map +1 -0
  231. package/dist/infra/opencode/OpenCodeStreamHandler.js +116 -0
  232. package/dist/infra/opencode/OpenCodeStreamHandler.js.map +1 -0
  233. package/dist/infra/opencode/client.d.ts +26 -0
  234. package/dist/infra/opencode/client.d.ts.map +1 -0
  235. package/dist/infra/opencode/client.js +491 -0
  236. package/dist/infra/opencode/client.js.map +1 -0
  237. package/dist/infra/opencode/index.d.ts +7 -0
  238. package/dist/infra/opencode/index.d.ts.map +1 -0
  239. package/dist/infra/opencode/index.js +6 -0
  240. package/dist/infra/opencode/index.js.map +1 -0
  241. package/dist/infra/opencode/types.d.ts +39 -0
  242. package/dist/infra/opencode/types.d.ts.map +1 -0
  243. package/dist/infra/opencode/types.js +131 -0
  244. package/dist/infra/opencode/types.js.map +1 -0
  245. package/dist/infra/providers/index.d.ts +1 -1
  246. package/dist/infra/providers/index.d.ts.map +1 -1
  247. package/dist/infra/providers/index.js +3 -1
  248. package/dist/infra/providers/index.js.map +1 -1
  249. package/dist/infra/providers/opencode.d.ts +9 -0
  250. package/dist/infra/providers/opencode.d.ts.map +1 -0
  251. package/dist/infra/providers/opencode.js +46 -0
  252. package/dist/infra/providers/opencode.js.map +1 -0
  253. package/dist/infra/providers/types.d.ts +3 -1
  254. package/dist/infra/providers/types.d.ts.map +1 -1
  255. package/dist/infra/task/mapper.d.ts.map +1 -1
  256. package/dist/infra/task/mapper.js +26 -0
  257. package/dist/infra/task/mapper.js.map +1 -1
  258. package/dist/infra/task/runner.d.ts +4 -1
  259. package/dist/infra/task/runner.d.ts.map +1 -1
  260. package/dist/infra/task/runner.js +4 -11
  261. package/dist/infra/task/runner.js.map +1 -1
  262. package/dist/infra/task/schema.d.ts +2 -0
  263. package/dist/infra/task/schema.d.ts.map +1 -1
  264. package/dist/infra/task/schema.js +21 -4
  265. package/dist/infra/task/schema.js.map +1 -1
  266. package/dist/infra/task/summarize.d.ts.map +1 -1
  267. package/dist/infra/task/summarize.js +3 -2
  268. package/dist/infra/task/summarize.js.map +1 -1
  269. package/dist/infra/task/types.d.ts +1 -0
  270. package/dist/infra/task/types.d.ts.map +1 -1
  271. package/dist/shared/i18n/labels_en.yaml +12 -1
  272. package/dist/shared/i18n/labels_ja.yaml +12 -1
  273. package/dist/shared/prompt/confirm.d.ts.map +1 -1
  274. package/dist/shared/prompt/confirm.js +12 -0
  275. package/dist/shared/prompt/confirm.js.map +1 -1
  276. package/dist/shared/prompts/en/perform_phase1_message.md +2 -0
  277. package/dist/shared/prompts/en/score_slug_user_prompt.md +12 -0
  278. package/dist/shared/prompts/ja/perform_phase1_message.md +2 -0
  279. package/dist/shared/prompts/ja/score_slug_user_prompt.md +12 -0
  280. package/dist/shared/ui/Progress.d.ts +3 -0
  281. package/dist/shared/ui/Progress.d.ts.map +1 -0
  282. package/dist/shared/ui/Progress.js +11 -0
  283. package/dist/shared/ui/Progress.js.map +1 -0
  284. package/dist/shared/ui/StreamDisplay.d.ts +3 -3
  285. package/dist/shared/ui/StreamDisplay.d.ts.map +1 -1
  286. package/dist/shared/ui/StreamDisplay.js +3 -3
  287. package/dist/shared/ui/StreamDisplay.js.map +1 -1
  288. package/dist/shared/ui/TaskPrefixWriter.d.ts +1 -1
  289. package/dist/shared/ui/TaskPrefixWriter.d.ts.map +1 -1
  290. package/dist/shared/ui/TaskPrefixWriter.js +2 -2
  291. package/dist/shared/ui/TaskPrefixWriter.js.map +1 -1
  292. package/dist/shared/ui/index.d.ts +1 -0
  293. package/dist/shared/ui/index.d.ts.map +1 -1
  294. package/dist/shared/ui/index.js +1 -0
  295. package/dist/shared/ui/index.js.map +1 -1
  296. package/dist/shared/utils/debug.d.ts.map +1 -1
  297. package/dist/shared/utils/debug.js +2 -1
  298. package/dist/shared/utils/debug.js.map +1 -1
  299. package/dist/shared/utils/index.d.ts +3 -0
  300. package/dist/shared/utils/index.d.ts.map +1 -1
  301. package/dist/shared/utils/index.js +3 -0
  302. package/dist/shared/utils/index.js.map +1 -1
  303. package/dist/shared/utils/providerEventLogger.d.ts +22 -0
  304. package/dist/shared/utils/providerEventLogger.d.ts.map +1 -0
  305. package/dist/shared/utils/providerEventLogger.js +87 -0
  306. package/dist/shared/utils/providerEventLogger.js.map +1 -0
  307. package/dist/shared/utils/providerModel.d.ts +10 -0
  308. package/dist/shared/utils/providerModel.d.ts.map +1 -0
  309. package/dist/shared/utils/providerModel.js +20 -0
  310. package/dist/shared/utils/providerModel.js.map +1 -0
  311. package/dist/shared/utils/slackWebhook.d.ts +19 -0
  312. package/dist/shared/utils/slackWebhook.d.ts.map +1 -0
  313. package/dist/shared/utils/slackWebhook.js +39 -0
  314. package/dist/shared/utils/slackWebhook.js.map +1 -0
  315. package/dist/shared/utils/taskPaths.d.ts +4 -0
  316. package/dist/shared/utils/taskPaths.d.ts.map +1 -0
  317. package/dist/shared/utils/taskPaths.js +17 -0
  318. package/dist/shared/utils/taskPaths.js.map +1 -0
  319. package/dist/shared/utils/types.d.ts +0 -11
  320. package/dist/shared/utils/types.d.ts.map +1 -1
  321. package/package.json +4 -1
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  **T**ask **A**gent **K**oordination **T**ool - Define how AI agents coordinate, where humans intervene, and what gets recorded — in YAML
6
6
 
7
- TAKT runs multiple AI agents (Claude Code, Codex) through YAML-defined workflows. Each step — who runs, what they see, what's allowed, what happens on failure — is declared in a piece file, not left to the agent.
7
+ TAKT runs multiple AI agents (Claude Code, Codex, OpenCode) through YAML-defined workflows. Each step — who runs, what they see, what's allowed, what happens on failure — is declared in a piece file, not left to the agent.
8
8
 
9
9
  TAKT is built with TAKT itself (dogfooding).
10
10
 
@@ -49,14 +49,14 @@ Personas, policies, and knowledge are managed as independent files and freely co
49
49
 
50
50
  Choose one:
51
51
 
52
- - **Use provider CLIs**: [Claude Code](https://docs.anthropic.com/en/docs/claude-code) or [Codex](https://github.com/openai/codex) installed
53
- - **Use direct API**: **Anthropic API Key** or **OpenAI API Key** (no CLI required)
52
+ - **Use provider CLIs**: [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex](https://github.com/openai/codex), or [OpenCode](https://opencode.ai) installed
53
+ - **Use direct API**: **Anthropic API Key**, **OpenAI API Key**, or **OpenCode API Key** (no CLI required)
54
54
 
55
55
  Additionally required:
56
56
 
57
57
  - [GitHub CLI](https://cli.github.com/) (`gh`) — Only needed for `takt #N` (GitHub Issue execution)
58
58
 
59
- **Pricing Note**: When using API Keys, TAKT directly calls the Claude API (Anthropic) or OpenAI API. The pricing structure is the same as using Claude Code or Codex. Be mindful of costs, especially when running automated tasks in CI/CD environments, as API usage can accumulate.
59
+ **Pricing Note**: When using API Keys, TAKT directly calls the Claude API (Anthropic), OpenAI API, or OpenCode API. The pricing structure is the same as using the respective CLI tools. Be mindful of costs, especially when running automated tasks in CI/CD environments, as API usage can accumulate.
60
60
 
61
61
  ## Installation
62
62
 
@@ -186,7 +186,7 @@ takt #6 --auto-pr
186
186
 
187
187
  ### Task Management (add / run / watch / list)
188
188
 
189
- Batch processing using task files (`.takt/tasks/`). Useful for accumulating multiple tasks and executing them together later.
189
+ Batch processing using `.takt/tasks.yaml` with task directories under `.takt/tasks/{slug}/`. Useful for accumulating multiple tasks and executing them together later.
190
190
 
191
191
  #### Add Task (`takt add`)
192
192
 
@@ -201,14 +201,14 @@ takt add #28
201
201
  #### Execute Tasks (`takt run`)
202
202
 
203
203
  ```bash
204
- # Execute all pending tasks in .takt/tasks/
204
+ # Execute all pending tasks in .takt/tasks.yaml
205
205
  takt run
206
206
  ```
207
207
 
208
208
  #### Watch Tasks (`takt watch`)
209
209
 
210
210
  ```bash
211
- # Monitor .takt/tasks/ and auto-execute tasks (resident process)
211
+ # Monitor .takt/tasks.yaml and auto-execute tasks (resident process)
212
212
  takt watch
213
213
  ```
214
214
 
@@ -225,6 +225,13 @@ takt list --non-interactive --action delete --branch takt/my-branch --yes
225
225
  takt list --non-interactive --format json
226
226
  ```
227
227
 
228
+ #### Task Directory Workflow (Create / Run / Verify)
229
+
230
+ 1. Run `takt add` and confirm a pending record is created in `.takt/tasks.yaml`.
231
+ 2. Open the generated `.takt/tasks/{slug}/order.md` and add detailed specifications/references as needed.
232
+ 3. Run `takt run` (or `takt watch`) to execute pending tasks from `tasks.yaml`.
233
+ 4. Verify outputs in `.takt/runs/{slug}/reports/` using the same slug as `task_dir`.
234
+
228
235
  ### Pipeline Mode (for CI/Automation)
229
236
 
230
237
  Specifying `--pipeline` enables non-interactive pipeline mode. Automatically creates branch → runs piece → commits & pushes. Suitable for CI/CD automation.
@@ -315,7 +322,7 @@ takt reset categories
315
322
  | `--repo <owner/repo>` | Specify repository (for PR creation) |
316
323
  | `--create-worktree <yes\|no>` | Skip worktree confirmation prompt |
317
324
  | `-q, --quiet` | Minimal output mode: suppress AI output (for CI) |
318
- | `--provider <name>` | Override agent provider (claude\|codex\|mock) |
325
+ | `--provider <name>` | Override agent provider (claude\|codex\|opencode\|mock) |
319
326
  | `--model <name>` | Override agent model |
320
327
 
321
328
  ## Pieces
@@ -328,7 +335,7 @@ TAKT uses YAML-based piece definitions and rule-based routing. Builtin pieces ar
328
335
 
329
336
  ```yaml
330
337
  name: default
331
- max_iterations: 10
338
+ max_movements: 10
332
339
  initial_movement: plan
333
340
 
334
341
  # Section maps — key: file path (relative to this YAML)
@@ -466,6 +473,7 @@ TAKT includes multiple builtin pieces:
466
473
  | `structural-reform` | Full project review and structural reform: iterative codebase restructuring with staged file splits. |
467
474
  | `unit-test` | Unit test focused piece: test analysis → test implementation → review → fix. |
468
475
  | `e2e-test` | E2E test focused piece: E2E analysis → E2E implementation → review → fix (Vitest-based E2E flow). |
476
+ | `frontend` | Frontend-specialized development piece with React/Next.js focused reviews and knowledge injection. |
469
477
 
470
478
  **Per-persona provider overrides:** Use `persona_providers` in config to route specific personas to different providers (e.g., coder on Codex, reviewers on Claude) without duplicating pieces.
471
479
 
@@ -532,14 +540,14 @@ The model string is passed to the Codex SDK. If unspecified, defaults to `codex`
532
540
 
533
541
  .takt/ # Project-level configuration
534
542
  ├── config.yaml # Project config (current piece, etc.)
535
- ├── tasks/ # Pending task files (.yaml, .md)
536
- ├── completed/ # Completed tasks and reports
537
- ├── reports/ # Execution reports (auto-generated)
538
- └── {timestamp}-{slug}/
539
- └── logs/ # NDJSON format session logs
540
- ├── latest.json # Pointer to current/latest session
541
- ├── previous.json # Pointer to previous session
542
- └── {sessionId}.jsonl # NDJSON session log per piece execution
543
+ ├── tasks/ # Task input directories (.takt/tasks/{slug}/order.md, etc.)
544
+ ├── tasks.yaml # Pending tasks metadata (task_dir, piece, worktree, etc.)
545
+ └── runs/ # Run-scoped artifacts
546
+ └── {slug}/
547
+ ├── reports/ # Execution reports (auto-generated)
548
+ ├── context/ # knowledge/policy/previous_response snapshots
549
+ ├── logs/ # NDJSON session logs for this run
550
+ └── meta.json # Run metadata
543
551
  ```
544
552
 
545
553
  Builtin resources are embedded in the npm package (`builtins/`). User files in `~/.takt/` take priority.
@@ -553,11 +561,17 @@ Configure default provider and model in `~/.takt/config.yaml`:
553
561
  language: en
554
562
  default_piece: default
555
563
  log_level: info
556
- provider: claude # Default provider: claude or codex
564
+ provider: claude # Default provider: claude, codex, or opencode
557
565
  model: sonnet # Default model (optional)
558
566
  branch_name_strategy: romaji # Branch name generation: 'romaji' (fast) or 'ai' (slow)
559
567
  prevent_sleep: false # Prevent macOS idle sleep during execution (caffeinate)
560
568
  notification_sound: true # Enable/disable notification sounds
569
+ notification_sound_events: # Optional per-event toggles
570
+ iteration_limit: false
571
+ piece_complete: true
572
+ piece_abort: true
573
+ run_complete: true # Enabled by default; set false to disable
574
+ run_abort: true # Enabled by default; set false to disable
561
575
  concurrency: 1 # Parallel task count for takt run (1-10, default: 1 = sequential)
562
576
  task_poll_interval_ms: 500 # Polling interval for new tasks during takt run (100-5000, default: 500)
563
577
  interactive_preview_movements: 3 # Movement previews in interactive mode (0-10, default: 3)
@@ -569,9 +583,10 @@ interactive_preview_movements: 3 # Movement previews in interactive mode (0-10,
569
583
  # ai-antipattern-reviewer: claude # Keep reviewers on Claude
570
584
 
571
585
  # API Key configuration (optional)
572
- # Can be overridden by environment variables TAKT_ANTHROPIC_API_KEY / TAKT_OPENAI_API_KEY
586
+ # Can be overridden by environment variables TAKT_ANTHROPIC_API_KEY / TAKT_OPENAI_API_KEY / TAKT_OPENCODE_API_KEY
573
587
  anthropic_api_key: sk-ant-... # For Claude (Anthropic)
574
588
  # openai_api_key: sk-... # For Codex (OpenAI)
589
+ # opencode_api_key: ... # For OpenCode
575
590
 
576
591
  # Builtin piece filtering (optional)
577
592
  # builtin_pieces_enabled: true # Set false to disable all builtins
@@ -595,17 +610,17 @@ anthropic_api_key: sk-ant-... # For Claude (Anthropic)
595
610
  1. **Set via environment variables**:
596
611
  ```bash
597
612
  export TAKT_ANTHROPIC_API_KEY=sk-ant-... # For Claude
598
- # or
599
613
  export TAKT_OPENAI_API_KEY=sk-... # For Codex
614
+ export TAKT_OPENCODE_API_KEY=... # For OpenCode
600
615
  ```
601
616
 
602
617
  2. **Set in config file**:
603
- Write `anthropic_api_key` or `openai_api_key` in `~/.takt/config.yaml` as shown above
618
+ Write `anthropic_api_key`, `openai_api_key`, or `opencode_api_key` in `~/.takt/config.yaml` as shown above
604
619
 
605
620
  Priority: Environment variables > `config.yaml` settings
606
621
 
607
622
  **Notes:**
608
- - If you set an API Key, installing Claude Code or Codex is not necessary. TAKT directly calls the Anthropic API or OpenAI API.
623
+ - If you set an API Key, installing Claude Code, Codex, or OpenCode is not necessary. TAKT directly calls the respective API.
609
624
  - **Security**: If you write API Keys in `config.yaml`, be careful not to commit this file to Git. Consider using environment variables or adding `~/.takt/config.yaml` to `.gitignore`.
610
625
 
611
626
  **Pipeline Template Variables:**
@@ -621,37 +636,44 @@ Priority: Environment variables > `config.yaml` settings
621
636
  1. Piece movement `model` (highest priority)
622
637
  2. Custom agent `model`
623
638
  3. Global config `model`
624
- 4. Provider default (Claude: sonnet, Codex: codex)
639
+ 4. Provider default (Claude: sonnet, Codex: codex, OpenCode: provider default)
625
640
 
626
641
  ## Detailed Guides
627
642
 
628
- ### Task File Formats
643
+ ### Task Directory Format
629
644
 
630
- TAKT supports batch processing with task files in `.takt/tasks/`. Both `.yaml`/`.yml` and `.md` file formats are supported.
645
+ TAKT stores task metadata in `.takt/tasks.yaml`, and each task's long specification in `.takt/tasks/{slug}/`.
631
646
 
632
- **YAML format** (recommended, supports worktree/branch/piece options):
647
+ **Recommended layout**:
633
648
 
634
- ```yaml
635
- # .takt/tasks/add-auth.yaml
636
- task: "Add authentication feature"
637
- worktree: true # Execute in isolated shared clone
638
- branch: "feat/add-auth" # Branch name (auto-generated if omitted)
639
- piece: "default" # Piece specification (uses current if omitted)
649
+ ```text
650
+ .takt/
651
+ tasks/
652
+ 20260201-015714-foptng/
653
+ order.md
654
+ schema.sql
655
+ wireframe.png
656
+ tasks.yaml
657
+ runs/
658
+ 20260201-015714-foptng/
659
+ reports/
640
660
  ```
641
661
 
642
- **Markdown format** (simple, backward compatible):
643
-
644
- ```markdown
645
- # .takt/tasks/add-login-feature.md
646
-
647
- Add login feature to the application.
662
+ **tasks.yaml record**:
648
663
 
649
- Requirements:
650
- - Username and password fields
651
- - Form validation
652
- - Error handling on failure
664
+ ```yaml
665
+ tasks:
666
+ - name: add-auth-feature
667
+ status: pending
668
+ task_dir: .takt/tasks/20260201-015714-foptng
669
+ piece: default
670
+ created_at: "2026-02-01T01:57:14.000Z"
671
+ started_at: null
672
+ completed_at: null
653
673
  ```
654
674
 
675
+ `takt add` creates `.takt/tasks/{slug}/order.md` automatically and saves `task_dir` to `tasks.yaml`.
676
+
655
677
  #### Isolated Execution with Shared Clone
656
678
 
657
679
  Specifying `worktree` in YAML task files executes each task in an isolated clone created with `git clone --shared`, keeping your main working directory clean:
@@ -667,15 +689,14 @@ Clones are ephemeral. After task completion, they auto-commit + push, then delet
667
689
 
668
690
  ### Session Logs
669
691
 
670
- TAKT writes session logs in NDJSON (`.jsonl`) format to `.takt/logs/`. Each record is atomically appended, so partial logs are preserved even if the process crashes, and you can track in real-time with `tail -f`.
692
+ TAKT writes session logs in NDJSON (`.jsonl`) format to `.takt/runs/{slug}/logs/`. Each record is atomically appended, so partial logs are preserved even if the process crashes, and you can track in real-time with `tail -f`.
671
693
 
672
- - `.takt/logs/latest.json` - Pointer to current (or latest) session
673
- - `.takt/logs/previous.json` - Pointer to previous session
674
- - `.takt/logs/{sessionId}.jsonl` - NDJSON session log per piece execution
694
+ - `.takt/runs/{slug}/logs/{sessionId}.jsonl` - NDJSON session log per piece execution
695
+ - `.takt/runs/{slug}/meta.json` - Run metadata (`task`, `piece`, `start/end`, `status`, etc.)
675
696
 
676
697
  Record types: `piece_start`, `step_start`, `step_complete`, `piece_complete`, `piece_abort`
677
698
 
678
- Agents can read `previous.json` to inherit context from the previous execution. Session continuation is automatic just run `takt "task"` to continue from the previous session.
699
+ The latest previous response is stored at `.takt/runs/{slug}/context/previous_responses/latest.md` and inherited automatically.
679
700
 
680
701
  ### Adding Custom Pieces
681
702
 
@@ -690,7 +711,7 @@ takt eject default
690
711
  # ~/.takt/pieces/my-piece.yaml
691
712
  name: my-piece
692
713
  description: Custom piece
693
- max_iterations: 5
714
+ max_movements: 5
694
715
  initial_movement: analyze
695
716
 
696
717
  personas:
@@ -740,11 +761,11 @@ Variables available in `instruction_template`:
740
761
  |----------|-------------|
741
762
  | `{task}` | Original user request (auto-injected if not in template) |
742
763
  | `{iteration}` | Piece-wide turn count (total steps executed) |
743
- | `{max_iterations}` | Maximum iteration count |
764
+ | `{max_movements}` | Maximum iteration count |
744
765
  | `{movement_iteration}` | Per-movement iteration count (times this movement has been executed) |
745
766
  | `{previous_response}` | Output from previous movement (auto-injected if not in template) |
746
767
  | `{user_inputs}` | Additional user inputs during piece (auto-injected if not in template) |
747
- | `{report_dir}` | Report directory path (e.g., `.takt/reports/20250126-143052-task-summary`) |
768
+ | `{report_dir}` | Report directory path (e.g., `.takt/runs/20250126-143052-task-summary/reports`) |
748
769
  | `{report:filename}` | Expands to `{report_dir}/filename` (e.g., `{report:00-plan.md}`) |
749
770
 
750
771
  ### Piece Design
@@ -777,7 +798,7 @@ Special `next` values: `COMPLETE` (success), `ABORT` (failure)
777
798
  | `edit` | - | Whether movement can edit project files (`true`/`false`) |
778
799
  | `pass_previous_response` | `true` | Pass previous movement output to `{previous_response}` |
779
800
  | `allowed_tools` | - | List of tools agent can use (Read, Glob, Grep, Edit, Write, Bash, etc.) |
780
- | `provider` | - | Override provider for this movement (`claude` or `codex`) |
801
+ | `provider` | - | Override provider for this movement (`claude`, `codex`, or `opencode`) |
781
802
  | `model` | - | Override model for this movement |
782
803
  | `permission_mode` | - | Permission mode: `readonly`, `edit`, `full` (provider-independent) |
783
804
  | `output_contracts` | - | Output contract definitions for report files |
@@ -855,7 +876,7 @@ npm install -g takt
855
876
  takt --pipeline --task "Fix bug" --auto-pr --repo owner/repo
856
877
  ```
857
878
 
858
- For authentication, set `TAKT_ANTHROPIC_API_KEY` or `TAKT_OPENAI_API_KEY` environment variables (TAKT-specific prefix).
879
+ For authentication, set `TAKT_ANTHROPIC_API_KEY`, `TAKT_OPENAI_API_KEY`, or `TAKT_OPENCODE_API_KEY` environment variables (TAKT-specific prefix).
859
880
 
860
881
  ```bash
861
882
  # For Claude (Anthropic)
@@ -863,6 +884,9 @@ export TAKT_ANTHROPIC_API_KEY=sk-ant-...
863
884
 
864
885
  # For Codex (OpenAI)
865
886
  export TAKT_OPENAI_API_KEY=sk-...
887
+
888
+ # For OpenCode
889
+ export TAKT_OPENCODE_API_KEY=...
866
890
  ```
867
891
 
868
892
  ## Documentation
@@ -6,6 +6,18 @@ piece_categories:
6
6
  - coding
7
7
  - minimal
8
8
  - compound-eye
9
+ 🎨 Frontend:
10
+ pieces:
11
+ - frontend
12
+ ⚙️ Backend: {}
13
+ 🔧 Expert:
14
+ Full Stack:
15
+ pieces:
16
+ - expert
17
+ - expert-cqrs
18
+ 🛠️ Refactoring:
19
+ pieces:
20
+ - structural-reform
9
21
  🔍 Review:
10
22
  pieces:
11
23
  - review-fix-minimal
@@ -14,16 +26,6 @@ piece_categories:
14
26
  pieces:
15
27
  - unit-test
16
28
  - e2e-test
17
- 🎨 Frontend: {}
18
- ⚙️ Backend: {}
19
- 🔧 Expert:
20
- Full Stack:
21
- pieces:
22
- - expert
23
- - expert-cqrs
24
- Refactoring:
25
- pieces:
26
- - structural-reform
27
29
  Others:
28
30
  pieces:
29
31
  - research
@@ -1,6 +1,6 @@
1
1
  name: coding
2
2
  description: Lightweight development piece with planning and parallel reviews (plan -> implement -> parallel review -> complete)
3
- max_iterations: 20
3
+ max_movements: 20
4
4
  initial_movement: plan
5
5
  movements:
6
6
  - name: plan
@@ -1,6 +1,6 @@
1
1
  name: compound-eye
2
2
  description: Multi-model review - send the same instruction to Claude and Codex simultaneously, synthesize both responses
3
- max_iterations: 10
3
+ max_movements: 10
4
4
  initial_movement: evaluate
5
5
  movements:
6
6
  - name: evaluate
@@ -1,6 +1,6 @@
1
1
  name: default
2
2
  description: Standard development piece with planning and specialized reviews
3
- max_iterations: 30
3
+ max_movements: 30
4
4
  initial_movement: plan
5
5
  loop_monitors:
6
6
  - cycle:
@@ -1,6 +1,6 @@
1
1
  name: e2e-test
2
2
  description: E2E test focused piece (E2E analysis → E2E implementation → review → fix)
3
- max_iterations: 20
3
+ max_movements: 20
4
4
  initial_movement: plan_test
5
5
  loop_monitors:
6
6
  - cycle:
@@ -1,6 +1,6 @@
1
1
  name: expert-cqrs
2
2
  description: CQRS+ES, Frontend, Security, QA Expert Review
3
- max_iterations: 30
3
+ max_movements: 30
4
4
  initial_movement: plan
5
5
  movements:
6
6
  - name: plan
@@ -26,7 +26,6 @@ movements:
26
26
  - name: implement
27
27
  edit: true
28
28
  persona: coder
29
- pass_previous_response: false
30
29
  policy:
31
30
  - coding
32
31
  - testing
@@ -87,7 +86,6 @@ movements:
87
86
  - name: ai_fix
88
87
  edit: true
89
88
  persona: coder
90
- pass_previous_response: false
91
89
  policy:
92
90
  - coding
93
91
  - testing
@@ -218,7 +216,6 @@ movements:
218
216
  - name: fix
219
217
  edit: true
220
218
  persona: coder
221
- pass_previous_response: false
222
219
  policy:
223
220
  - coding
224
221
  - testing
@@ -267,7 +264,6 @@ movements:
267
264
  - name: fix_supervisor
268
265
  edit: true
269
266
  persona: coder
270
- pass_previous_response: false
271
267
  policy:
272
268
  - coding
273
269
  - testing
@@ -1,6 +1,6 @@
1
1
  name: expert
2
2
  description: Architecture, Frontend, Security, QA Expert Review
3
- max_iterations: 30
3
+ max_movements: 30
4
4
  initial_movement: plan
5
5
  movements:
6
6
  - name: plan
@@ -26,7 +26,6 @@ movements:
26
26
  - name: implement
27
27
  edit: true
28
28
  persona: coder
29
- pass_previous_response: false
30
29
  policy:
31
30
  - coding
32
31
  - testing
@@ -86,7 +85,6 @@ movements:
86
85
  - name: ai_fix
87
86
  edit: true
88
87
  persona: coder
89
- pass_previous_response: false
90
88
  policy:
91
89
  - coding
92
90
  - testing
@@ -216,7 +214,6 @@ movements:
216
214
  - name: fix
217
215
  edit: true
218
216
  persona: coder
219
- pass_previous_response: false
220
217
  policy:
221
218
  - coding
222
219
  - testing
@@ -264,7 +261,6 @@ movements:
264
261
  - name: fix_supervisor
265
262
  edit: true
266
263
  persona: coder
267
- pass_previous_response: false
268
264
  policy:
269
265
  - coding
270
266
  - testing