takt 0.2.3 → 0.3.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.
- package/README.md +161 -133
- package/dist/agents/runner.d.ts +2 -4
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +6 -35
- package/dist/agents/runner.js.map +1 -1
- package/dist/claude/client.d.ts +31 -6
- package/dist/claude/client.d.ts.map +1 -1
- package/dist/claude/client.js +78 -30
- package/dist/claude/client.js.map +1 -1
- package/dist/claude/index.d.ts +1 -1
- package/dist/claude/index.d.ts.map +1 -1
- package/dist/claude/index.js +1 -1
- package/dist/claude/index.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +22 -6
- package/dist/cli.js.map +1 -1
- package/dist/codex/client.d.ts +0 -1
- package/dist/codex/client.d.ts.map +1 -1
- package/dist/codex/client.js +3 -6
- package/dist/codex/client.js.map +1 -1
- package/dist/commands/addTask.d.ts.map +1 -1
- package/dist/commands/addTask.js +17 -2
- package/dist/commands/addTask.js.map +1 -1
- package/dist/commands/eject.d.ts +13 -0
- package/dist/commands/eject.d.ts.map +1 -0
- package/dist/commands/eject.js +105 -0
- package/dist/commands/eject.js.map +1 -0
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +9 -2
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/refreshBuiltin.d.ts +4 -4
- package/dist/commands/refreshBuiltin.d.ts.map +1 -1
- package/dist/commands/refreshBuiltin.js +13 -29
- package/dist/commands/refreshBuiltin.js.map +1 -1
- package/dist/commands/workflowExecution.d.ts.map +1 -1
- package/dist/commands/workflowExecution.js +85 -18
- package/dist/commands/workflowExecution.js.map +1 -1
- package/dist/config/agentLoader.d.ts +3 -1
- package/dist/config/agentLoader.d.ts.map +1 -1
- package/dist/config/agentLoader.js +17 -24
- package/dist/config/agentLoader.js.map +1 -1
- package/dist/config/globalConfig.d.ts +2 -0
- package/dist/config/globalConfig.d.ts.map +1 -1
- package/dist/config/globalConfig.js +14 -0
- package/dist/config/globalConfig.js.map +1 -1
- package/dist/config/initialization.d.ts +7 -5
- package/dist/config/initialization.d.ts.map +1 -1
- package/dist/config/initialization.js +23 -21
- package/dist/config/initialization.js.map +1 -1
- package/dist/config/paths.d.ts +5 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +9 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/workflowLoader.d.ts +6 -4
- package/dist/config/workflowLoader.d.ts.map +1 -1
- package/dist/config/workflowLoader.js +190 -35
- package/dist/config/workflowLoader.js.map +1 -1
- package/dist/github/issue.d.ts +72 -0
- package/dist/github/issue.d.ts.map +1 -0
- package/dist/github/issue.js +143 -0
- package/dist/github/issue.js.map +1 -0
- package/dist/models/index.d.ts +1 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js.map +1 -1
- package/dist/models/schemas.d.ts +164 -90
- package/dist/models/schemas.d.ts.map +1 -1
- package/dist/models/schemas.js +77 -51
- package/dist/models/schemas.js.map +1 -1
- package/dist/models/types.d.ts +51 -20
- package/dist/models/types.d.ts.map +1 -1
- package/dist/providers/claude.js +2 -2
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/codex.d.ts.map +1 -1
- package/dist/providers/codex.js +0 -2
- package/dist/providers/codex.js.map +1 -1
- package/dist/providers/index.d.ts +2 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/resources/index.d.ts +3 -22
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +3 -73
- package/dist/resources/index.js.map +1 -1
- package/dist/utils/session.d.ts +74 -10
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +101 -51
- package/dist/utils/session.js.map +1 -1
- package/dist/workflow/engine.d.ts +34 -1
- package/dist/workflow/engine.d.ts.map +1 -1
- package/dist/workflow/engine.js +228 -36
- package/dist/workflow/engine.js.map +1 -1
- package/dist/workflow/index.d.ts +1 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +1 -1
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/instruction-builder.d.ts +87 -18
- package/dist/workflow/instruction-builder.d.ts.map +1 -1
- package/dist/workflow/instruction-builder.js +404 -57
- package/dist/workflow/instruction-builder.js.map +1 -1
- package/dist/workflow/parallel-logger.d.ts +76 -0
- package/dist/workflow/parallel-logger.d.ts.map +1 -0
- package/dist/workflow/parallel-logger.js +173 -0
- package/dist/workflow/parallel-logger.js.map +1 -0
- package/dist/workflow/phase-runner.d.ts +40 -0
- package/dist/workflow/phase-runner.d.ts.map +1 -0
- package/dist/workflow/phase-runner.js +69 -0
- package/dist/workflow/phase-runner.js.map +1 -0
- package/dist/workflow/rule-evaluator.d.ts +64 -0
- package/dist/workflow/rule-evaluator.d.ts.map +1 -0
- package/dist/workflow/rule-evaluator.js +178 -0
- package/dist/workflow/rule-evaluator.js.map +1 -0
- package/dist/workflow/rule-utils.d.ts +13 -0
- package/dist/workflow/rule-utils.d.ts.map +1 -0
- package/dist/workflow/rule-utils.js +17 -0
- package/dist/workflow/rule-utils.js.map +1 -0
- package/dist/workflow/transitions.d.ts +5 -13
- package/dist/workflow/transitions.d.ts.map +1 -1
- package/dist/workflow/transitions.js +8 -78
- package/dist/workflow/transitions.js.map +1 -1
- package/dist/workflow/types.d.ts +2 -1
- package/dist/workflow/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/resources/global/en/agents/default/ai-antipattern-reviewer.md +71 -15
- package/resources/global/en/agents/default/{architect.md → architecture-reviewer.md} +144 -44
- package/resources/global/en/agents/default/coder.md +4 -4
- package/resources/global/en/agents/default/planner.md +16 -9
- package/resources/global/en/agents/default/{security.md → security-reviewer.md} +23 -5
- package/resources/global/en/agents/default/supervisor.md +13 -2
- package/resources/global/en/agents/expert/frontend-reviewer.md +0 -17
- package/resources/global/en/agents/expert/qa-reviewer.md +0 -16
- package/resources/global/en/agents/expert/security-reviewer.md +0 -16
- package/resources/global/en/agents/expert-cqrs/cqrs-es-reviewer.md +0 -17
- package/resources/global/en/agents/templates/coder.md +128 -0
- package/resources/global/en/agents/templates/planner.md +44 -0
- package/resources/global/en/agents/templates/reviewer.md +57 -0
- package/resources/global/en/agents/templates/supervisor.md +64 -0
- package/resources/global/en/workflows/default.yaml +232 -772
- package/resources/global/en/workflows/expert-cqrs.yaml +319 -698
- package/resources/global/en/workflows/expert.yaml +348 -723
- package/resources/global/en/workflows/magi.yaml +45 -52
- package/resources/global/en/workflows/research.yaml +18 -99
- package/resources/global/en/workflows/simple.yaml +152 -421
- package/resources/global/ja/agents/default/ai-antipattern-reviewer.md +71 -15
- package/resources/global/ja/agents/default/{architect.md → architecture-reviewer.md} +148 -48
- package/resources/global/ja/agents/default/coder.md +4 -4
- package/resources/global/ja/agents/default/planner.md +16 -9
- package/resources/global/ja/agents/default/{security.md → security-reviewer.md} +23 -5
- package/resources/global/ja/agents/default/supervisor.md +13 -2
- package/resources/global/ja/agents/expert/frontend-reviewer.md +0 -18
- package/resources/global/ja/agents/expert/qa-reviewer.md +0 -16
- package/resources/global/ja/agents/expert/security-reviewer.md +0 -16
- package/resources/global/ja/agents/expert-cqrs/cqrs-es-reviewer.md +0 -18
- package/resources/global/ja/agents/templates/coder.md +128 -0
- package/resources/global/ja/agents/templates/planner.md +44 -0
- package/resources/global/ja/agents/templates/reviewer.md +57 -0
- package/resources/global/ja/agents/templates/supervisor.md +64 -0
- package/resources/global/ja/workflows/default.yaml +227 -773
- package/resources/global/ja/workflows/expert-cqrs.yaml +309 -833
- package/resources/global/ja/workflows/expert.yaml +325 -712
- package/resources/global/ja/workflows/magi.yaml +45 -52
- package/resources/global/ja/workflows/research.yaml +18 -99
- package/resources/global/ja/workflows/simple.yaml +145 -415
package/README.md
CHANGED
|
@@ -11,6 +11,7 @@ TAKT is built with TAKT (dogfooding).
|
|
|
11
11
|
## Requirements
|
|
12
12
|
|
|
13
13
|
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code) or Codex must be installed and configured
|
|
14
|
+
- [GitHub CLI](https://cli.github.com/) (`gh`) — required only for `takt "#N"` (GitHub Issue execution)
|
|
14
15
|
|
|
15
16
|
TAKT supports both Claude Code and Codex as providers; you can choose the provider during setup.
|
|
16
17
|
|
|
@@ -26,6 +27,9 @@ npm install -g takt
|
|
|
26
27
|
# Run a task (will prompt for workflow selection and optional isolated clone)
|
|
27
28
|
takt "Add a login feature"
|
|
28
29
|
|
|
30
|
+
# Run a GitHub issue as a task
|
|
31
|
+
takt "#6"
|
|
32
|
+
|
|
29
33
|
# Add a task to the queue
|
|
30
34
|
takt /add-task "Fix the login bug"
|
|
31
35
|
|
|
@@ -75,9 +79,9 @@ Choose `y` to run in a `git clone --shared` isolated environment, keeping your w
|
|
|
75
79
|
|
|
76
80
|
| Workflow | Best for |
|
|
77
81
|
|----------|----------|
|
|
78
|
-
| `default` | Full development tasks. Used for TAKT's own development. Multi-stage review with
|
|
82
|
+
| `default` | Full development tasks. Used for TAKT's own development. Multi-stage review with parallel architect + security review. |
|
|
79
83
|
| `simple` | Lightweight tasks like README updates or small fixes. Reviews without fix loops. |
|
|
80
|
-
| `expert
|
|
84
|
+
| `expert` / `expert-cqrs` | Web development projects. Sequential multi-expert review with fix loops (`expert`: Architecture, Frontend, Security, QA; `expert-cqrs`: CQRS+ES, Frontend, Security, QA). |
|
|
81
85
|
| `research` | Research and investigation. Autonomous research without asking questions. |
|
|
82
86
|
| `magi` | Fun deliberation. Three AI personas analyze and vote (Evangelion-inspired). |
|
|
83
87
|
|
|
@@ -86,83 +90,129 @@ Choose `y` to run in a `git clone --shared` isolated environment, keeping your w
|
|
|
86
90
|
| Command | Alias | Description |
|
|
87
91
|
|---------|-------|-------------|
|
|
88
92
|
| `takt "task"` | | Execute task with current workflow (session auto-continued) |
|
|
93
|
+
| `takt "#N"` | | Execute GitHub issue #N as a task |
|
|
89
94
|
| `takt /run-tasks` | `/run` | Run all pending tasks from `.takt/tasks/` |
|
|
90
95
|
| `takt /watch` | | Watch `.takt/tasks/` and auto-execute tasks (stays resident) |
|
|
91
96
|
| `takt /add-task` | `/add` | Add a new task interactively (YAML format, multiline supported) |
|
|
92
97
|
| `takt /list-tasks` | `/list` | List task branches (try merge, merge & cleanup, or delete) |
|
|
93
98
|
| `takt /switch` | `/sw` | Switch workflow interactively |
|
|
94
99
|
| `takt /clear` | | Clear agent conversation sessions |
|
|
100
|
+
| `takt /eject` | | Copy builtin workflow/agents to `~/.takt/` for customization |
|
|
95
101
|
| `takt /refresh-builtin` | | Update builtin agents/workflows to latest version |
|
|
96
102
|
| `takt /config` | | Configure permission mode |
|
|
97
103
|
| `takt /help` | | Show help |
|
|
98
104
|
|
|
99
105
|
## Workflows
|
|
100
106
|
|
|
101
|
-
TAKT uses YAML-based workflow definitions.
|
|
102
|
-
- `~/.takt/workflows/*.yaml`
|
|
107
|
+
TAKT uses YAML-based workflow definitions with rule-based routing. Builtin workflows are embedded in the package; user workflows in `~/.takt/workflows/` take priority. Use `/eject` to copy a builtin to `~/.takt/` for customization.
|
|
103
108
|
|
|
104
109
|
### Example Workflow
|
|
105
110
|
|
|
106
111
|
```yaml
|
|
107
112
|
name: default
|
|
108
113
|
max_iterations: 10
|
|
114
|
+
initial_step: plan
|
|
109
115
|
|
|
110
116
|
steps:
|
|
111
117
|
- name: plan
|
|
112
|
-
agent: planner
|
|
113
|
-
|
|
114
|
-
|
|
118
|
+
agent: ../agents/default/planner.md
|
|
119
|
+
model: opus
|
|
120
|
+
edit: false
|
|
121
|
+
rules:
|
|
122
|
+
- condition: Plan complete
|
|
123
|
+
next: implement
|
|
115
124
|
instruction_template: |
|
|
116
|
-
|
|
117
|
-
transitions:
|
|
118
|
-
- condition: done
|
|
119
|
-
next_step: implement
|
|
125
|
+
Analyze the request and create an implementation plan.
|
|
120
126
|
|
|
121
127
|
- name: implement
|
|
122
|
-
agent: coder
|
|
123
|
-
|
|
124
|
-
|
|
128
|
+
agent: ../agents/default/coder.md
|
|
129
|
+
edit: true
|
|
130
|
+
permission_mode: acceptEdits
|
|
131
|
+
rules:
|
|
132
|
+
- condition: Implementation complete
|
|
133
|
+
next: review
|
|
134
|
+
- condition: Cannot proceed
|
|
135
|
+
next: ABORT
|
|
125
136
|
instruction_template: |
|
|
126
|
-
|
|
127
|
-
transitions:
|
|
128
|
-
- condition: done
|
|
129
|
-
next_step: review
|
|
130
|
-
- condition: blocked
|
|
131
|
-
next_step: ABORT
|
|
137
|
+
Implement based on the plan.
|
|
132
138
|
|
|
133
139
|
- name: review
|
|
134
|
-
agent:
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
- condition:
|
|
138
|
-
|
|
139
|
-
- condition:
|
|
140
|
-
|
|
140
|
+
agent: ../agents/default/architecture-reviewer.md
|
|
141
|
+
edit: false
|
|
142
|
+
rules:
|
|
143
|
+
- condition: Approved
|
|
144
|
+
next: COMPLETE
|
|
145
|
+
- condition: Needs fix
|
|
146
|
+
next: implement
|
|
147
|
+
instruction_template: |
|
|
148
|
+
Review the implementation for architecture and code quality.
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Parallel Steps
|
|
152
|
+
|
|
153
|
+
Steps can execute sub-steps concurrently with aggregate evaluation:
|
|
154
|
+
|
|
155
|
+
```yaml
|
|
156
|
+
- name: reviewers
|
|
157
|
+
parallel:
|
|
158
|
+
- name: arch-review
|
|
159
|
+
agent: ../agents/default/architecture-reviewer.md
|
|
160
|
+
rules:
|
|
161
|
+
- condition: approved
|
|
162
|
+
- condition: needs_fix
|
|
163
|
+
instruction_template: |
|
|
164
|
+
Review architecture and code quality.
|
|
165
|
+
- name: security-review
|
|
166
|
+
agent: ../agents/default/security-reviewer.md
|
|
167
|
+
rules:
|
|
168
|
+
- condition: approved
|
|
169
|
+
- condition: needs_fix
|
|
170
|
+
instruction_template: |
|
|
171
|
+
Review for security vulnerabilities.
|
|
172
|
+
rules:
|
|
173
|
+
- condition: all("approved")
|
|
174
|
+
next: supervise
|
|
175
|
+
- condition: any("needs_fix")
|
|
176
|
+
next: fix
|
|
141
177
|
```
|
|
142
178
|
|
|
179
|
+
- `all("X")`: true if ALL sub-steps matched condition X
|
|
180
|
+
- `any("X")`: true if ANY sub-step matched condition X
|
|
181
|
+
- Sub-step `rules` define possible outcomes; `next` is optional (parent handles routing)
|
|
182
|
+
|
|
183
|
+
### Rule Condition Types
|
|
184
|
+
|
|
185
|
+
| Type | Syntax | Description |
|
|
186
|
+
|------|--------|-------------|
|
|
187
|
+
| Tag-based | `"condition text"` | Agent outputs `[STEP:N]` tag, matched by index |
|
|
188
|
+
| AI judge | `ai("condition text")` | AI evaluates the condition against agent output |
|
|
189
|
+
| Aggregate | `all("X")` / `any("X")` | Aggregates parallel sub-step results |
|
|
190
|
+
|
|
143
191
|
## Built-in Workflows
|
|
144
192
|
|
|
145
193
|
TAKT ships with several built-in workflows:
|
|
146
194
|
|
|
147
195
|
| Workflow | Description |
|
|
148
196
|
|----------|-------------|
|
|
149
|
-
| `default` | Full development workflow: plan → implement →
|
|
197
|
+
| `default` | Full development workflow: plan → implement → AI review → parallel reviewers (architect + security) → supervisor approval. Includes fix loops for each review stage. |
|
|
150
198
|
| `simple` | Simplified version of default: plan → implement → architect review → AI review → supervisor. No intermediate fix steps. |
|
|
151
199
|
| `research` | Research workflow: planner → digger → supervisor. Autonomously researches topics without asking questions. |
|
|
152
|
-
| `expert
|
|
153
|
-
| `expert-cqrs` |
|
|
200
|
+
| `expert` | Sequential review with domain experts: Architecture, Frontend, Security, QA reviews with fix loops. |
|
|
201
|
+
| `expert-cqrs` | Sequential review with domain experts: CQRS+ES, Frontend, Security, QA reviews with fix loops. |
|
|
154
202
|
| `magi` | Deliberation system inspired by Evangelion. Three AI personas (MELCHIOR, BALTHASAR, CASPER) analyze and vote. |
|
|
155
203
|
|
|
156
204
|
Switch between workflows with `takt /switch`.
|
|
157
205
|
|
|
158
206
|
## Built-in Agents
|
|
159
207
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
208
|
+
| Agent | Description |
|
|
209
|
+
|-------|-------------|
|
|
210
|
+
| **planner** | Task analysis, spec investigation, and implementation planning |
|
|
211
|
+
| **coder** | Implements features and fixes bugs |
|
|
212
|
+
| **ai-antipattern-reviewer** | Reviews for AI-specific anti-patterns (hallucinated APIs, incorrect assumptions, scope creep) |
|
|
213
|
+
| **architecture-reviewer** | Reviews architecture and code quality, verifies spec compliance |
|
|
214
|
+
| **security-reviewer** | Security vulnerability assessment |
|
|
215
|
+
| **supervisor** | Final verification, validation, and approval |
|
|
166
216
|
|
|
167
217
|
## Custom Agents
|
|
168
218
|
|
|
@@ -175,64 +225,54 @@ agents:
|
|
|
175
225
|
allowed_tools: [Read, Glob, Grep]
|
|
176
226
|
provider: claude # Optional: claude or codex
|
|
177
227
|
model: opus # Claude: opus/sonnet/haiku or full name (claude-opus-4-5-20251101)
|
|
178
|
-
status_patterns:
|
|
179
|
-
approved: "\\[APPROVE\\]"
|
|
180
|
-
rejected: "\\[REJECT\\]"
|
|
181
|
-
|
|
182
|
-
- name: my-codex-agent
|
|
183
|
-
prompt_file: .takt/prompts/analyzer.md
|
|
184
|
-
provider: codex
|
|
185
|
-
model: gpt-5.2-codex # Codex: gpt-5.2-codex, gpt-5.1-codex, etc.
|
|
186
228
|
```
|
|
187
229
|
|
|
188
|
-
|
|
230
|
+
Or create agent prompt files as Markdown:
|
|
231
|
+
|
|
232
|
+
```markdown
|
|
233
|
+
# ~/.takt/agents/my-agents/reviewer.md
|
|
189
234
|
|
|
190
|
-
|
|
235
|
+
You are a code reviewer focused on security.
|
|
191
236
|
|
|
192
|
-
|
|
237
|
+
## Your Role
|
|
238
|
+
- Check for security vulnerabilities
|
|
239
|
+
- Verify input validation
|
|
240
|
+
- Review authentication logic
|
|
241
|
+
```
|
|
193
242
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
- `default` - Recommended model for your account type
|
|
243
|
+
## Model Selection
|
|
244
|
+
|
|
245
|
+
The `model` field in workflow steps, agent configs, and global config is passed directly to the provider (Claude Code CLI or Codex SDK). TAKT does not resolve model aliases — the provider handles that.
|
|
246
|
+
|
|
247
|
+
### Claude Code
|
|
200
248
|
|
|
201
|
-
|
|
202
|
-
- `claude-opus-4-5-20251101`
|
|
203
|
-
- `claude-sonnet-4-5-20250929`
|
|
204
|
-
- `claude-haiku-4-5-20250101`
|
|
249
|
+
Claude Code supports aliases (`opus`, `sonnet`, `haiku`, `opusplan`, `default`) and full model names (e.g., `claude-sonnet-4-5-20250929`). See [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code) for available models.
|
|
205
250
|
|
|
206
|
-
### Codex
|
|
251
|
+
### Codex
|
|
207
252
|
|
|
208
|
-
|
|
209
|
-
- `gpt-5.2-codex` - Latest agentic coding model (default)
|
|
210
|
-
- `gpt-5.1-codex` - Previous generation
|
|
211
|
-
- `gpt-5.1-codex-max` - Optimized for long-running tasks
|
|
212
|
-
- `gpt-5.1-codex-mini` - Smaller, cost-effective version
|
|
213
|
-
- `codex-1` - Specialized model aligned with coding preferences
|
|
253
|
+
The model string is passed to the Codex SDK. Defaults to `codex` if not specified. See Codex documentation for available models.
|
|
214
254
|
|
|
215
255
|
## Project Structure
|
|
216
256
|
|
|
217
257
|
```
|
|
218
258
|
~/.takt/
|
|
219
259
|
├── config.yaml # Global config (provider, model, workflows, etc.)
|
|
220
|
-
├── workflows/ #
|
|
221
|
-
└── agents/ #
|
|
260
|
+
├── workflows/ # User workflow definitions (override builtins)
|
|
261
|
+
└── agents/ # User agent prompt files
|
|
222
262
|
|
|
223
263
|
.takt/ # Project-level config
|
|
224
264
|
├── agents.yaml # Custom agent definitions
|
|
225
265
|
├── tasks/ # Pending task files (.yaml, .md)
|
|
226
266
|
├── completed/ # Completed tasks with reports
|
|
227
|
-
├── worktree-meta/ # Metadata for task branches
|
|
228
|
-
├── worktree-sessions/ # Per-clone agent session storage
|
|
229
267
|
├── reports/ # Execution reports (auto-generated)
|
|
230
|
-
└── logs/ # Session logs
|
|
268
|
+
└── logs/ # Session logs in NDJSON format
|
|
231
269
|
├── latest.json # Pointer to current/latest session
|
|
232
270
|
├── previous.json # Pointer to previous session
|
|
233
|
-
└── {sessionId}.
|
|
271
|
+
└── {sessionId}.jsonl # NDJSON session log per workflow run
|
|
234
272
|
```
|
|
235
273
|
|
|
274
|
+
Builtin resources are embedded in the npm package (`dist/resources/`). User files in `~/.takt/` take priority.
|
|
275
|
+
|
|
236
276
|
### Global Configuration
|
|
237
277
|
|
|
238
278
|
Configure default provider and model in `~/.takt/config.yaml`:
|
|
@@ -268,67 +308,59 @@ This interactive flow ensures each task runs with the right workflow and isolati
|
|
|
268
308
|
|
|
269
309
|
### Adding Custom Workflows
|
|
270
310
|
|
|
271
|
-
Create your own workflow by adding YAML files to `~/.takt/workflows
|
|
311
|
+
Create your own workflow by adding YAML files to `~/.takt/workflows/`, or use `/eject` to customize a builtin:
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
# Copy the default workflow to ~/.takt/workflows/ for editing
|
|
315
|
+
takt /eject default
|
|
316
|
+
```
|
|
272
317
|
|
|
273
318
|
```yaml
|
|
274
319
|
# ~/.takt/workflows/my-workflow.yaml
|
|
275
320
|
name: my-workflow
|
|
276
321
|
description: My custom workflow
|
|
277
|
-
|
|
278
322
|
max_iterations: 5
|
|
323
|
+
initial_step: analyze
|
|
279
324
|
|
|
280
325
|
steps:
|
|
281
326
|
- name: analyze
|
|
282
327
|
agent: ~/.takt/agents/my-agents/analyzer.md
|
|
328
|
+
edit: false
|
|
329
|
+
rules:
|
|
330
|
+
- condition: Analysis complete
|
|
331
|
+
next: implement
|
|
283
332
|
instruction_template: |
|
|
284
|
-
Analyze this request
|
|
285
|
-
transitions:
|
|
286
|
-
- condition: done
|
|
287
|
-
next_step: implement
|
|
333
|
+
Analyze this request thoroughly.
|
|
288
334
|
|
|
289
335
|
- name: implement
|
|
290
336
|
agent: ~/.takt/agents/default/coder.md
|
|
291
|
-
|
|
292
|
-
|
|
337
|
+
edit: true
|
|
338
|
+
permission_mode: acceptEdits
|
|
293
339
|
pass_previous_response: true
|
|
294
|
-
|
|
295
|
-
- condition:
|
|
296
|
-
|
|
340
|
+
rules:
|
|
341
|
+
- condition: Done
|
|
342
|
+
next: COMPLETE
|
|
343
|
+
instruction_template: |
|
|
344
|
+
Implement based on the analysis.
|
|
297
345
|
```
|
|
298
346
|
|
|
347
|
+
> **Note**: `{task}`, `{previous_response}`, and `{user_inputs}` are auto-injected into instructions. You only need explicit placeholders if you want to control their position in the template.
|
|
348
|
+
|
|
299
349
|
### Specifying Agents by Path
|
|
300
350
|
|
|
301
351
|
Agents are specified using file paths in workflow definitions:
|
|
302
352
|
|
|
303
353
|
```yaml
|
|
304
|
-
#
|
|
305
|
-
agent:
|
|
306
|
-
agent: ~/.takt/agents/magi/melchior.md
|
|
354
|
+
# Relative to workflow file directory
|
|
355
|
+
agent: ../agents/default/coder.md
|
|
307
356
|
|
|
308
|
-
#
|
|
309
|
-
agent:
|
|
357
|
+
# Home directory
|
|
358
|
+
agent: ~/.takt/agents/default/coder.md
|
|
310
359
|
|
|
311
|
-
#
|
|
360
|
+
# Absolute paths
|
|
312
361
|
agent: /path/to/custom/agent.md
|
|
313
362
|
```
|
|
314
363
|
|
|
315
|
-
Create custom agent prompts as Markdown files:
|
|
316
|
-
|
|
317
|
-
```markdown
|
|
318
|
-
# ~/.takt/agents/my-agents/reviewer.md
|
|
319
|
-
|
|
320
|
-
You are a code reviewer focused on security.
|
|
321
|
-
|
|
322
|
-
## Your Role
|
|
323
|
-
- Check for security vulnerabilities
|
|
324
|
-
- Verify input validation
|
|
325
|
-
- Review authentication logic
|
|
326
|
-
|
|
327
|
-
## Output Format
|
|
328
|
-
- [REVIEWER:APPROVE] if code is secure
|
|
329
|
-
- [REVIEWER:REJECT] if issues found (list them)
|
|
330
|
-
```
|
|
331
|
-
|
|
332
364
|
### Task Management
|
|
333
365
|
|
|
334
366
|
TAKT supports batch task processing through task files in `.takt/tasks/`. Both `.yaml`/`.yml` and `.md` file formats are supported.
|
|
@@ -339,6 +371,9 @@ TAKT supports batch task processing through task files in `.takt/tasks/`. Both `
|
|
|
339
371
|
# Quick add (no isolation)
|
|
340
372
|
takt /add-task "Add authentication feature"
|
|
341
373
|
|
|
374
|
+
# Add a GitHub issue as a task
|
|
375
|
+
takt /add-task "#6"
|
|
376
|
+
|
|
342
377
|
# Interactive mode (prompts for isolation, branch, workflow options)
|
|
343
378
|
takt /add-task
|
|
344
379
|
```
|
|
@@ -416,11 +451,13 @@ Lists all `takt/`-prefixed branches with file change counts. For each branch you
|
|
|
416
451
|
|
|
417
452
|
### Session Logs
|
|
418
453
|
|
|
419
|
-
TAKT writes session logs
|
|
454
|
+
TAKT writes session logs in NDJSON (`.jsonl`) format to `.takt/logs/`. Each record is appended atomically, so even if the process crashes mid-execution, partial logs are preserved and logs can be tailed in real-time with `tail -f`.
|
|
420
455
|
|
|
421
456
|
- `.takt/logs/latest.json` - Pointer to the current (or most recent) session
|
|
422
457
|
- `.takt/logs/previous.json` - Pointer to the previous session
|
|
423
|
-
- `.takt/logs/{sessionId}.
|
|
458
|
+
- `.takt/logs/{sessionId}.jsonl` - NDJSON session log with step history
|
|
459
|
+
|
|
460
|
+
Record types: `workflow_start`, `step_start`, `step_complete`, `workflow_complete`, `workflow_abort`.
|
|
424
461
|
|
|
425
462
|
Agents can read `previous.json` to pick up context from a prior run. Session continuity is automatic — simply run `takt "task"` to continue where the previous session left off.
|
|
426
463
|
|
|
@@ -430,58 +467,49 @@ Available variables in `instruction_template`:
|
|
|
430
467
|
|
|
431
468
|
| Variable | Description |
|
|
432
469
|
|----------|-------------|
|
|
433
|
-
| `{task}` | Original user request |
|
|
470
|
+
| `{task}` | Original user request (auto-injected if not in template) |
|
|
434
471
|
| `{iteration}` | Workflow-wide turn count (total steps executed) |
|
|
435
472
|
| `{max_iterations}` | Maximum iterations allowed |
|
|
436
473
|
| `{step_iteration}` | Per-step iteration count (how many times THIS step has run) |
|
|
437
|
-
| `{previous_response}` | Previous step's output (
|
|
438
|
-
| `{user_inputs}` | Additional user inputs during workflow |
|
|
439
|
-
| `{
|
|
440
|
-
| `{
|
|
474
|
+
| `{previous_response}` | Previous step's output (auto-injected if not in template) |
|
|
475
|
+
| `{user_inputs}` | Additional user inputs during workflow (auto-injected if not in template) |
|
|
476
|
+
| `{report_dir}` | Report directory path (e.g., `.takt/reports/20250126-143052-task-summary`) |
|
|
477
|
+
| `{report:filename}` | Resolves to `{report_dir}/filename` (e.g., `{report:00-plan.md}`) |
|
|
441
478
|
|
|
442
479
|
### Designing Workflows
|
|
443
480
|
|
|
444
|
-
Each workflow step requires
|
|
481
|
+
Each workflow step requires:
|
|
445
482
|
|
|
446
483
|
**1. Agent** - A Markdown file containing the system prompt:
|
|
447
484
|
|
|
448
485
|
```yaml
|
|
449
|
-
agent:
|
|
450
|
-
agent_name: coder
|
|
451
|
-
```
|
|
452
|
-
|
|
453
|
-
**2. Status Rules** - Define how the agent signals completion. Agents output status markers like `[CODER:DONE]` or `[ARCHITECT:REJECT]` that TAKT detects to drive transitions:
|
|
454
|
-
|
|
455
|
-
```yaml
|
|
456
|
-
status_rules_prompt: |
|
|
457
|
-
Your final output MUST include a status tag:
|
|
458
|
-
- `[CODER:DONE]` if implementation is complete
|
|
459
|
-
- `[CODER:BLOCKED]` if you cannot proceed
|
|
486
|
+
agent: ../agents/default/coder.md # Path to agent prompt file
|
|
487
|
+
agent_name: coder # Display name (optional)
|
|
460
488
|
```
|
|
461
489
|
|
|
462
|
-
**
|
|
490
|
+
**2. Rules** - Define how the step routes to the next step. The instruction builder auto-injects status output rules so agents know what tags to output:
|
|
463
491
|
|
|
464
492
|
```yaml
|
|
465
|
-
|
|
466
|
-
- condition:
|
|
467
|
-
|
|
468
|
-
- condition:
|
|
469
|
-
|
|
493
|
+
rules:
|
|
494
|
+
- condition: "Implementation complete"
|
|
495
|
+
next: review
|
|
496
|
+
- condition: "Cannot proceed"
|
|
497
|
+
next: ABORT
|
|
470
498
|
```
|
|
471
499
|
|
|
472
|
-
|
|
473
|
-
Special next_step values: `COMPLETE` (success), `ABORT` (failure).
|
|
500
|
+
Special `next` values: `COMPLETE` (success), `ABORT` (failure).
|
|
474
501
|
|
|
475
|
-
**Step options:**
|
|
502
|
+
**3. Step options:**
|
|
476
503
|
|
|
477
504
|
| Option | Default | Description |
|
|
478
505
|
|--------|---------|-------------|
|
|
506
|
+
| `edit` | - | Whether the step can edit project files (`true`/`false`) |
|
|
479
507
|
| `pass_previous_response` | `true` | Pass previous step's output to `{previous_response}` |
|
|
480
|
-
| `on_no_status` | - | Behavior when no status is detected: `complete`, `continue`, `stay` |
|
|
481
508
|
| `allowed_tools` | - | List of tools the agent can use (Read, Glob, Grep, Edit, Write, Bash, etc.) |
|
|
482
509
|
| `provider` | - | Override provider for this step (`claude` or `codex`) |
|
|
483
510
|
| `model` | - | Override model for this step |
|
|
484
511
|
| `permission_mode` | `default` | Permission mode: `default`, `acceptEdits`, or `bypassPermissions` |
|
|
512
|
+
| `report` | - | Report file configuration (name, format) for auto-generated reports |
|
|
485
513
|
|
|
486
514
|
## API Usage
|
|
487
515
|
|
package/dist/agents/runner.d.ts
CHANGED
|
@@ -14,8 +14,8 @@ export interface RunAgentOptions {
|
|
|
14
14
|
agentPath?: string;
|
|
15
15
|
/** Allowed tools for this agent run */
|
|
16
16
|
allowedTools?: string[];
|
|
17
|
-
/**
|
|
18
|
-
|
|
17
|
+
/** Maximum number of agentic turns */
|
|
18
|
+
maxTurns?: number;
|
|
19
19
|
/** Permission mode for tool execution (from workflow step) */
|
|
20
20
|
permissionMode?: PermissionMode;
|
|
21
21
|
onStream?: StreamCallback;
|
|
@@ -24,8 +24,6 @@ export interface RunAgentOptions {
|
|
|
24
24
|
/** Bypass all permission checks (sacrifice-my-pc mode) */
|
|
25
25
|
bypassPermissions?: boolean;
|
|
26
26
|
}
|
|
27
|
-
/** Get git diff for review context */
|
|
28
|
-
export declare function getGitDiff(cwd: string): string;
|
|
29
27
|
/** Run a custom agent */
|
|
30
28
|
export declare function runCustomAgent(agentConfig: CustomAgentConfig, task: string, options: RunAgentOptions): Promise<AgentResponse>;
|
|
31
29
|
/** Run an agent by name or path */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agents/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agents/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAKhH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAK3F,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACvC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,mBAAmB,CAAC,EAAE,iBAAiB,CAAC;IACxC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AA8BD,yBAAyB;AACzB,wBAAsB,cAAc,CAClC,WAAW,EAAE,iBAAiB,EAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,aAAa,CAAC,CAyDxB;AAqCD,mCAAmC;AACnC,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,aAAa,CAAC,CAgDxB"}
|
package/dist/agents/runner.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agent execution runners
|
|
3
3
|
*/
|
|
4
|
-
import { execSync } from 'node:child_process';
|
|
5
4
|
import { existsSync, readFileSync } from 'node:fs';
|
|
6
5
|
import { basename, dirname } from 'node:path';
|
|
7
6
|
import { callClaudeAgent, callClaudeSkill, } from '../claude/client.js';
|
|
@@ -45,29 +44,6 @@ function resolveModel(cwd, options, agentConfig) {
|
|
|
45
44
|
}
|
|
46
45
|
return undefined;
|
|
47
46
|
}
|
|
48
|
-
/** Get git diff for review context */
|
|
49
|
-
export function getGitDiff(cwd) {
|
|
50
|
-
try {
|
|
51
|
-
// First check if HEAD exists (new repos may not have any commits)
|
|
52
|
-
try {
|
|
53
|
-
execSync('git rev-parse HEAD', { cwd, encoding: 'utf-8', stdio: 'pipe' });
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
// No commits yet, return empty diff
|
|
57
|
-
return '';
|
|
58
|
-
}
|
|
59
|
-
const diff = execSync('git diff HEAD', {
|
|
60
|
-
cwd,
|
|
61
|
-
encoding: 'utf-8',
|
|
62
|
-
maxBuffer: 1024 * 1024 * 10, // 10MB
|
|
63
|
-
stdio: 'pipe',
|
|
64
|
-
});
|
|
65
|
-
return diff.trim();
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
return '';
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
47
|
/** Run a custom agent */
|
|
72
48
|
export async function runCustomAgent(agentConfig, task, options) {
|
|
73
49
|
const allowedTools = options.allowedTools ?? agentConfig.allowedTools;
|
|
@@ -77,6 +53,7 @@ export async function runCustomAgent(agentConfig, task, options) {
|
|
|
77
53
|
cwd: options.cwd,
|
|
78
54
|
sessionId: options.sessionId,
|
|
79
55
|
allowedTools,
|
|
56
|
+
maxTurns: options.maxTurns,
|
|
80
57
|
model: resolveModel(options.cwd, options, agentConfig),
|
|
81
58
|
permissionMode: options.permissionMode,
|
|
82
59
|
onStream: options.onStream,
|
|
@@ -92,6 +69,7 @@ export async function runCustomAgent(agentConfig, task, options) {
|
|
|
92
69
|
cwd: options.cwd,
|
|
93
70
|
sessionId: options.sessionId,
|
|
94
71
|
allowedTools,
|
|
72
|
+
maxTurns: options.maxTurns,
|
|
95
73
|
model: resolveModel(options.cwd, options, agentConfig),
|
|
96
74
|
permissionMode: options.permissionMode,
|
|
97
75
|
onStream: options.onStream,
|
|
@@ -102,19 +80,15 @@ export async function runCustomAgent(agentConfig, task, options) {
|
|
|
102
80
|
return callClaudeSkill(agentConfig.claudeSkill, task, callOptions);
|
|
103
81
|
}
|
|
104
82
|
// Custom agent with prompt
|
|
105
|
-
|
|
106
|
-
// Inject status rules if provided
|
|
107
|
-
if (options.statusRulesPrompt) {
|
|
108
|
-
systemPrompt = `${systemPrompt}\n\n${options.statusRulesPrompt}`;
|
|
109
|
-
}
|
|
83
|
+
const systemPrompt = loadAgentPrompt(agentConfig);
|
|
110
84
|
const providerType = resolveProvider(options.cwd, options, agentConfig);
|
|
111
85
|
const provider = getProvider(providerType);
|
|
112
86
|
const callOptions = {
|
|
113
87
|
cwd: options.cwd,
|
|
114
88
|
sessionId: options.sessionId,
|
|
115
89
|
allowedTools,
|
|
90
|
+
maxTurns: options.maxTurns,
|
|
116
91
|
model: resolveModel(options.cwd, options, agentConfig),
|
|
117
|
-
statusPatterns: agentConfig.statusPatterns,
|
|
118
92
|
permissionMode: options.permissionMode,
|
|
119
93
|
onStream: options.onStream,
|
|
120
94
|
onPermissionRequest: options.onPermissionRequest,
|
|
@@ -170,17 +144,14 @@ export async function runAgent(agentSpec, task, options) {
|
|
|
170
144
|
if (!existsSync(options.agentPath)) {
|
|
171
145
|
throw new Error(`Agent file not found: ${options.agentPath}`);
|
|
172
146
|
}
|
|
173
|
-
|
|
174
|
-
// Inject status rules if provided
|
|
175
|
-
if (options.statusRulesPrompt) {
|
|
176
|
-
systemPrompt = `${systemPrompt}\n\n${options.statusRulesPrompt}`;
|
|
177
|
-
}
|
|
147
|
+
const systemPrompt = loadAgentPromptFromPath(options.agentPath);
|
|
178
148
|
const providerType = resolveProvider(options.cwd, options);
|
|
179
149
|
const provider = getProvider(providerType);
|
|
180
150
|
const callOptions = {
|
|
181
151
|
cwd: options.cwd,
|
|
182
152
|
sessionId: options.sessionId,
|
|
183
153
|
allowedTools: options.allowedTools,
|
|
154
|
+
maxTurns: options.maxTurns,
|
|
184
155
|
model: resolveModel(options.cwd, options),
|
|
185
156
|
systemPrompt,
|
|
186
157
|
permissionMode: options.permissionMode,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agents/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agents/runner.ts"],"names":[],"mappings":"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"}
|