feat: add takt-default pieces and TAKT knowledge facet for self-development

- Add takt-default piece (5-parallel review, takt knowledge)
- Add takt-default-team-leader piece (team_leader implement variant)
- Add takt.md knowledge facet (EN/JA) covering TAKT architecture
- Add team-leader-implement instruction facet (EN/JA)
- Add TAKT Development category to piece-categories
This commit is contained in:
nrslib 2026-02-28 12:04:22 +09:00
parent c7389a5b24
commit 4e9c02091a
10 changed files with 1848 additions and 0 deletions

View File

@ -0,0 +1,27 @@
Decompose the implementation task into subtasks by file ownership and execute them in parallel. Assign files exclusively to each part to prevent conflicts.
**Important:** Reference the plan report: {report:plan.md}
**Steps:**
1. Identify files to create/modify
- Reference the plan report and test scope to list all files to change
- Review the actual codebase to fill in any missing information
2. Group files by layer/module
- Create groups based on high cohesion (e.g., Domain layer / Infrastructure layer / API layer)
- If there are type or interface dependencies, keep both sides in the same group
- Never assign the same file to multiple parts
3. Assign file ownership exclusively to each part
- Each part's instruction must clearly state:
- **Responsible files** (list of files to create/modify)
- **Reference-only files** (read-only, modification prohibited)
- **Implementation task** (what and how to implement)
- **Completion criteria** (implementation of responsible files is complete)
- If tests are already written, instruct parts to implement so existing tests pass
- Do not include build checks (all parts complete first, then build is verified together)
**Constraints:**
- Parts do not run tests (handled by subsequent movements)
- Do not modify files outside your responsibility (causes conflicts)

View File

@ -0,0 +1,151 @@
# TAKT Architecture Knowledge
## Core Structure
PieceEngine is a state machine. It manages movement transitions via EventEmitter.
```
CLI → PieceEngine → Runner (4 types) → RuleEvaluator → next movement
```
| Runner | Purpose | When to Use |
|--------|---------|-------------|
| MovementExecutor | Standard 3-phase execution | Default |
| ParallelRunner | Concurrent sub-movements | parallel block |
| ArpeggioRunner | Data-driven batch processing | arpeggio block |
| TeamLeaderRunner | Task decomposition → parallel sub-agents | team_leader block |
Runners are mutually exclusive. Do not specify multiple runner types on a single movement.
### 3-Phase Execution Model
Normal movements execute in up to 3 phases. Sessions persist across phases.
| Phase | Purpose | Tools | Condition |
|-------|---------|-------|-----------|
| Phase 1 | Main work | Movement's allowed_tools | Always |
| Phase 2 | Report output | Write only | When output_contracts defined |
| Phase 3 | Status judgment | None (judgment only) | When tag-based rules exist |
## Rule Evaluation
RuleEvaluator determines the next movement via 5-stage fallback. Earlier match takes priority.
| Priority | Method | Target |
|----------|--------|--------|
| 1 | aggregate | parallel parent (all/any) |
| 2 | Phase 3 tag | `[STEP:N]` output |
| 3 | Phase 1 tag | `[STEP:N]` output (fallback) |
| 4 | ai() judge | ai("condition") rules |
| 5 | AI fallback | AI evaluates all conditions |
When multiple tags appear in output, the **last match** wins.
### Condition Syntax
| Syntax | Parsing | Regex |
|--------|---------|-------|
| `ai("...")` | AI condition evaluation | `AI_CONDITION_REGEX` |
| `all("...")` / `any("...")` | Aggregate condition | `AGGREGATE_CONDITION_REGEX` |
| Plain string | Tag or AI fallback | — |
Adding new special syntax requires updating both pieceParser.ts regex and RuleEvaluator.
## Provider Integration
Abstracted through the Provider interface. SDK-specific details are encapsulated within each provider.
```
Provider.setup(AgentSetup) → ProviderAgent
ProviderAgent.call(prompt, options) → AgentResponse
```
| Criteria | Judgment |
|----------|----------|
| SDK-specific error handling leaking outside Provider | REJECT |
| Errors not propagated to AgentResponse.error | REJECT |
| Session key collision between providers | REJECT |
| Session key format `{persona}:{provider}` | OK |
### Model Resolution
Models resolve through 5-level priority. Higher takes precedence.
1. persona_providers model specification
2. Movement model field
3. CLI `--model` override
4. config.yaml (when resolved provider matches)
5. Provider default
## Facet Assembly
The faceted-prompting module is independent from TAKT core.
```
compose(facets, options) → ComposedPrompt { systemPrompt, userMessage }
```
| Criteria | Judgment |
|----------|----------|
| Import from faceted-prompting to TAKT core | REJECT |
| TAKT core depending on faceted-prompting | OK |
| Facet path resolution logic outside faceted-prompting | Warning |
### 3-Layer Facet Resolution Priority
Project `.takt/` → User `~/.takt/` → Builtin `builtins/{lang}/`
Same-named facets are overridden by higher-priority layers. Customize builtins by overriding in upper layers.
## Testing Patterns
Uses vitest. Test file naming conventions distinguish test types.
| Prefix | Type | Content |
|--------|------|---------|
| None | Unit test | Individual function/class verification |
| `it-` | Integration test | Piece execution simulation |
| `engine-` | Engine test | PieceEngine scenario verification |
### Mock Provider
`--provider mock` returns deterministic responses. Scenario queues compose multi-turn tests.
```typescript
// NG - Calling real API in tests
const response = await callClaude(prompt)
// OK - Set up scenario with mock provider
setMockScenario([
{ persona: 'coder', status: 'done', content: '[STEP:1]\nDone.' },
{ persona: 'reviewer', status: 'done', content: '[STEP:1]\napproved' },
])
```
### Test Isolation
| Criteria | Judgment |
|----------|----------|
| Tests sharing global state | REJECT |
| Environment variables not cleared in test setup | Warning |
| E2E tests assuming real API | Isolate via `provider` config |
## Error Propagation
Provider errors propagate through: `AgentResponse.error` → session log → console output.
| Criteria | Judgment |
|----------|----------|
| SDK error results in empty `blocked` status | REJECT |
| Error details not recorded in session log | REJECT |
| No ABORT transition defined for error cases | Warning |
## Session Management
Agent sessions are stored per-cwd. Session resume is skipped during worktree/clone execution.
| Criteria | Judgment |
|----------|----------|
| Session resuming when `cwd !== projectCwd` | REJECT (cross-project contamination) |
| Session key missing provider identifier | REJECT (cross-provider contamination) |
| Session broken between phases | REJECT (context loss) |

View File

@ -47,6 +47,10 @@ piece_categories:
✅ Test First: ✅ Test First:
pieces: pieces:
- default-test-first-mini - default-test-first-mini
🎵 TAKT Development:
pieces:
- takt-default
- takt-default-team-leader
Others: Others:
pieces: pieces:
- research - research

View File

@ -0,0 +1,378 @@
name: takt-default-team-leader
description: TAKT development piece with team leader (plan → write tests → team-leader implement → AI review → 5-parallel review → fix → supervise → complete)
piece_config:
provider_options:
codex:
network_access: true
opencode:
network_access: true
max_movements: 30
initial_movement: plan
loop_monitors:
- cycle:
- ai_review
- ai_fix
threshold: 3
judge:
persona: supervisor
instruction_template: |
The ai_review ↔ ai_fix loop has repeated {cycle_count} times.
Review the reports from each cycle and determine whether this loop
is healthy (making progress) or unproductive (repeating the same issues).
**Reports to reference:**
- AI Review results: {report:ai-review.md}
**Judgment criteria:**
- Are new issues being found/fixed in each cycle?
- Are the same findings being repeated?
- Are fixes actually being applied?
rules:
- condition: Healthy (making progress)
next: ai_review
- condition: Unproductive (no improvement)
next: reviewers
movements:
- name: plan
edit: false
persona: planner
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: Requirements are clear and implementable
next: write_tests
- condition: User is asking a question (not an implementation task)
next: COMPLETE
- condition: Requirements unclear, insufficient info
next: ABORT
appendix: |
Clarifications needed:
- {Question 1}
- {Question 2}
instruction: plan
output_contracts:
report:
- name: plan.md
format: plan
- name: write_tests
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
instruction: write-tests-first
rules:
- condition: Tests written successfully
next: implement
- condition: Cannot proceed because the test target is not implemented yet, so skip test writing
next: implement
- condition: Cannot proceed with test writing
next: ABORT
- condition: User input needed for clarification
next: write_tests
requires_user_input: true
interactive_only: true
output_contracts:
report:
- name: test-scope.md
format: coder-scope
- name: test-decisions.md
format: coder-decisions
- name: implement
edit: true
persona: coder
policy:
- coding
- testing
session: refresh
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
team_leader:
max_parts: 2
part_persona: coder
part_edit: true
part_permission_mode: edit
part_allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
instruction: team-leader-implement
rules:
- condition: Implementation complete
next: ai_review
- condition: No implementation (report only)
next: ai_review
- condition: Cannot proceed, insufficient info
next: ai_review
- condition: User input required
next: implement
requires_user_input: true
interactive_only: true
output_contracts:
report:
- name: coder-scope.md
format: coder-scope
- name: coder-decisions.md
format: coder-decisions
- name: ai_review
edit: false
persona: ai-antipattern-reviewer
policy:
- review
- ai-antipattern
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
rules:
- condition: No AI-specific issues
next: reviewers
- condition: AI-specific issues found
next: ai_fix
instruction: ai-review
output_contracts:
report:
- name: ai-review.md
format: ai-review
- name: ai_fix
edit: true
persona: coder
policy:
- coding
- testing
session: refresh
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: AI issues fixed
next: ai_review
- condition: No fix needed (verified target files/spec)
next: ai_no_fix
- condition: Cannot proceed, insufficient info
next: ai_no_fix
instruction: ai-fix
- name: ai_no_fix
edit: false
persona: architecture-reviewer
policy: review
allowed_tools:
- Read
- Glob
- Grep
rules:
- condition: ai_review's findings are valid (fix required)
next: ai_fix
- condition: ai_fix's judgment is valid (no fix needed)
next: reviewers
instruction: arbitrate
- name: reviewers
parallel:
- name: arch-review
edit: false
persona: architecture-reviewer
policy: review
knowledge:
- architecture
- takt
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-arch
output_contracts:
report:
- name: architect-review.md
format: architecture-review
- name: security-review
edit: false
persona: security-reviewer
policy: review
knowledge: security
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-security
output_contracts:
report:
- name: security-review.md
format: security-review
- name: qa-review
edit: false
persona: qa-reviewer
policy:
- review
- qa
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-qa
output_contracts:
report:
- name: qa-review.md
format: qa-review
- name: testing-review
edit: false
persona: testing-reviewer
policy:
- review
- testing
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-test
output_contracts:
report:
- name: testing-review.md
format: testing-review
- name: requirements-review
edit: false
persona: requirements-reviewer
policy: review
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-requirements
output_contracts:
report:
- name: requirements-review.md
format: requirements-review
rules:
- condition: all("approved")
next: supervise
- condition: any("needs_fix")
next: fix
- name: fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: Fix complete
next: reviewers
- condition: Cannot proceed, insufficient info
next: plan
instruction: fix
- name: supervise
edit: false
persona: supervisor
policy: review
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
pass_previous_response: false
rules:
- condition: All checks passed
next: COMPLETE
- condition: Requirements unmet, tests failing, build errors
next: plan
instruction: supervise
output_contracts:
report:
- name: supervisor-validation.md
format: supervisor-validation
- name: summary.md
format: summary
use_judge: false

View File

@ -0,0 +1,364 @@
name: takt-default
description: TAKT development piece (plan → write tests → implement → AI review → 5-parallel review → fix → supervise → complete)
piece_config:
provider_options:
codex:
network_access: true
opencode:
network_access: true
max_movements: 30
initial_movement: plan
loop_monitors:
- cycle:
- ai_review
- ai_fix
threshold: 3
judge:
persona: supervisor
instruction_template: |
The ai_review ↔ ai_fix loop has repeated {cycle_count} times.
Review the reports from each cycle and determine whether this loop
is healthy (making progress) or unproductive (repeating the same issues).
**Reports to reference:**
- AI Review results: {report:ai-review.md}
**Judgment criteria:**
- Are new issues being found/fixed in each cycle?
- Are the same findings being repeated?
- Are fixes actually being applied?
rules:
- condition: Healthy (making progress)
next: ai_review
- condition: Unproductive (no improvement)
next: reviewers
movements:
- name: plan
edit: false
persona: planner
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: Requirements are clear and implementable
next: write_tests
- condition: User is asking a question (not an implementation task)
next: COMPLETE
- condition: Requirements unclear, insufficient info
next: ABORT
appendix: |
Clarifications needed:
- {Question 1}
- {Question 2}
instruction: plan
output_contracts:
report:
- name: plan.md
format: plan
- name: write_tests
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
instruction: write-tests-first
rules:
- condition: Tests written successfully
next: implement
- condition: Cannot proceed because the test target is not implemented yet, so skip test writing
next: implement
- condition: Cannot proceed with test writing
next: ABORT
- condition: User input needed for clarification
next: write_tests
requires_user_input: true
interactive_only: true
output_contracts:
report:
- name: test-scope.md
format: coder-scope
- name: test-decisions.md
format: coder-decisions
- name: implement
edit: true
persona: coder
policy:
- coding
- testing
session: refresh
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: Implementation complete
next: ai_review
- condition: No implementation (report only)
next: ai_review
- condition: Cannot proceed, insufficient info
next: ai_review
- condition: User input required
next: implement
requires_user_input: true
interactive_only: true
instruction: implement-after-tests
output_contracts:
report:
- name: coder-scope.md
format: coder-scope
- name: coder-decisions.md
format: coder-decisions
- name: ai_review
edit: false
persona: ai-antipattern-reviewer
policy:
- review
- ai-antipattern
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
rules:
- condition: No AI-specific issues
next: reviewers
- condition: AI-specific issues found
next: ai_fix
instruction: ai-review
output_contracts:
report:
- name: ai-review.md
format: ai-review
- name: ai_fix
edit: true
persona: coder
policy:
- coding
- testing
session: refresh
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: AI issues fixed
next: ai_review
- condition: No fix needed (verified target files/spec)
next: ai_no_fix
- condition: Cannot proceed, insufficient info
next: ai_no_fix
instruction: ai-fix
- name: ai_no_fix
edit: false
persona: architecture-reviewer
policy: review
allowed_tools:
- Read
- Glob
- Grep
rules:
- condition: ai_review's findings are valid (fix required)
next: ai_fix
- condition: ai_fix's judgment is valid (no fix needed)
next: reviewers
instruction: arbitrate
- name: reviewers
parallel:
- name: arch-review
edit: false
persona: architecture-reviewer
policy: review
knowledge:
- architecture
- takt
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-arch
output_contracts:
report:
- name: architect-review.md
format: architecture-review
- name: security-review
edit: false
persona: security-reviewer
policy: review
knowledge: security
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-security
output_contracts:
report:
- name: security-review.md
format: security-review
- name: qa-review
edit: false
persona: qa-reviewer
policy:
- review
- qa
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-qa
output_contracts:
report:
- name: qa-review.md
format: qa-review
- name: testing-review
edit: false
persona: testing-reviewer
policy:
- review
- testing
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-test
output_contracts:
report:
- name: testing-review.md
format: testing-review
- name: requirements-review
edit: false
persona: requirements-reviewer
policy: review
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-requirements
output_contracts:
report:
- name: requirements-review.md
format: requirements-review
rules:
- condition: all("approved")
next: supervise
- condition: any("needs_fix")
next: fix
- name: fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: Fix complete
next: reviewers
- condition: Cannot proceed, insufficient info
next: plan
instruction: fix
- name: supervise
edit: false
persona: supervisor
policy: review
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
pass_previous_response: false
rules:
- condition: All checks passed
next: COMPLETE
- condition: Requirements unmet, tests failing, build errors
next: plan
instruction: supervise
output_contracts:
report:
- name: supervisor-validation.md
format: supervisor-validation
- name: summary.md
format: summary
use_judge: false

View File

@ -0,0 +1,27 @@
実装タスクをファイル担当単位でサブタスクに分解し、並列実行してください。各パートが担当するファイルが重複しないよう排他的に割り当てます。
**重要:** 計画レポートを参照してください: {report:plan.md}
**やること:**
1. 変更対象ファイルを特定する
- 計画レポートとテストスコープを参照して変更・作成するファイルを洗い出す
- 実際のコードベースを確認して不明点を補完する
2. ファイルをレイヤー/モジュール単位でグループ化する
- 凝集度の高い単位でグループを作る(例: ドメイン層 / インフラ層 / API層
- 型・インターフェースの依存がある場合は、依存元と依存先を同じグループにまとめる
- 1つのファイルを複数のパートに割り当てない
3. 各パートに排他的なファイル担当を割り当てる
- 各パートの instruction に以下を必ず明記する:
- **担当ファイル**(作成・変更する対象ファイルのパス一覧)
- **参照専用ファイル**(変更禁止、読み取りのみ可)
- **実装内容**(何をどのように実装するか)
- **完了基準**(担当ファイルの実装が完了したこと)
- テスト済みの場合は「既存テストがパスするよう実装する」と明記する
- ビルドチェックは指示しない(他パートのファイルが揃ってから全体でまとめて確認するため)
**制約:**
- 各パートはテスト実行を行わない(後続ムーブメントで実施する)
- 担当外のファイルを変更しない(コンフリクトの原因になる)

View File

@ -0,0 +1,151 @@
# TAKT アーキテクチャ知識
## コア構造
PieceEngine は状態機械。movement 間の遷移を EventEmitter ベースで管理する。
```
CLI → PieceEngine → Runner4種 → RuleEvaluator → 次の movement
```
| Runner | 用途 | 使い分け |
|--------|------|---------|
| MovementExecutor | 通常の3フェーズ実行 | デフォルト |
| ParallelRunner | 並列サブムーブメント | parallel ブロック |
| ArpeggioRunner | データ駆動バッチ処理 | arpeggio ブロック |
| TeamLeaderRunner | タスク分解 → サブエージェント並列 | team_leader ブロック |
各 Runner は排他。1つの movement に複数の Runner タイプを指定しない。
### 3フェーズ実行モデル
通常 movement は最大3フェーズで実行される。セッションはフェーズ間で維持される。
| フェーズ | 目的 | ツール | 条件 |
|---------|------|--------|------|
| Phase 1 | メイン作業 | movement の allowed_tools | 常に |
| Phase 2 | レポート出力 | Write のみ | output_contracts 定義時 |
| Phase 3 | ステータス判定 | なし(判定のみ) | タグベースルール時 |
## ルール評価
RuleEvaluator は5段階フォールバックで遷移先を決定する。先にマッチした方法が優先される。
| 優先度 | 方法 | 対象 |
|--------|------|------|
| 1 | aggregate | parallel 親all/any |
| 2 | Phase 3 タグ | `[STEP:N]` 出力 |
| 3 | Phase 1 タグ | `[STEP:N]` 出力(フォールバック) |
| 4 | ai() judge | ai("条件") ルール |
| 5 | AI fallback | 全条件を AI が判定 |
タグが複数出現した場合は**最後のマッチ**が採用される。
### Condition の記法
| 記法 | パース | 正規表現 |
|------|--------|---------|
| `ai("...")` | AI 条件評価 | `AI_CONDITION_REGEX` |
| `all("...")` / `any("...")` | 集約条件 | `AGGREGATE_CONDITION_REGEX` |
| 文字列 | タグまたは AI フォールバック | — |
新しい特殊構文を追加する場合は pieceParser.ts の正規表現と RuleEvaluator の両方を更新する。
## プロバイダー統合
Provider インターフェースで抽象化。具体的な SDK の差異は各プロバイダー内に閉じ込める。
```
Provider.setup(AgentSetup) → ProviderAgent
ProviderAgent.call(prompt, options) → AgentResponse
```
| 基準 | 判定 |
|------|------|
| SDK 固有のエラーハンドリングが Provider 外に漏れている | REJECT |
| AgentResponse.error にエラーを伝播していない | REJECT |
| プロバイダー間でセッションキーが衝突する | REJECT |
| セッションキー形式 `{persona}:{provider}` | OK |
### モデル解決
5段階の優先順位でモデルを解決する。上位が優先。
1. persona_providers のモデル指定
2. movement の model フィールド
3. CLI `--model` オーバーライド
4. config.yamlプロバイダー一致時
5. プロバイダーデフォルト
## ファセット組み立て
faceted-prompting モジュールは TAKT 本体に依存しない独立モジュール。
```
compose(facets, options) → ComposedPrompt { systemPrompt, userMessage }
```
| 基準 | 判定 |
|------|------|
| faceted-prompting から TAKT コアへの import | REJECT |
| TAKT コアから faceted-prompting への依存 | OK |
| ファセットパス解決のロジックが faceted-prompting 外にある | 警告 |
### ファセット解決の3層優先順位
プロジェクト `.takt/` → ユーザー `~/.takt/` → ビルトイン `builtins/{lang}/`
同名ファセットは上位が優先。ビルトインのカスタマイズは上位層でオーバーライドする。
## テストパターン
vitest を使用。テストファイルの命名規約で種別を区別する。
| プレフィックス | 種別 | 内容 |
|--------------|------|------|
| なし | ユニットテスト | 個別関数・クラスの検証 |
| `it-` | 統合テスト | ピース実行のシミュレーション |
| `engine-` | エンジンテスト | PieceEngine シナリオ検証 |
### Mock プロバイダー
`--provider mock` でテスト用の決定論的レスポンスを返す。シナリオキューで複数ターンのテストを構成する。
```typescript
// NG - テストでリアル API を呼ぶ
const response = await callClaude(prompt)
// OK - Mock プロバイダーでシナリオを設定
setMockScenario([
{ persona: 'coder', status: 'done', content: '[STEP:1]\nDone.' },
{ persona: 'reviewer', status: 'done', content: '[STEP:1]\napproved' },
])
```
### テストの分離
| 基準 | 判定 |
|------|------|
| テスト間でグローバル状態を共有 | REJECT |
| 環境変数をテストセットアップでクリアしていない | 警告 |
| E2E テストで実 API を前提としている | `provider` 指定の config で分離 |
## エラー伝播
プロバイダーエラーは `AgentResponse.error` → セッションログ → コンソール出力の経路で伝播する。
| 基準 | 判定 |
|------|------|
| SDK エラーが空の `blocked` ステータスになる | REJECT |
| エラー詳細がセッションログに記録されない | REJECT |
| エラー時に ABORT 遷移が定義されていない | 警告 |
## セッション管理
エージェントセッションは cwd ごとに保存される。worktree/clone 実行時はセッション再開をスキップする。
| 基準 | 判定 |
|------|------|
| `cwd !== projectCwd` でセッション再開している | REJECT |
| セッションキーにプロバイダーが含まれない | REJECTクロスプロバイダー汚染 |
| Phase 間でセッションが切れている | REJECTコンテキスト喪失 |

View File

@ -47,6 +47,10 @@ piece_categories:
✅ テストファースト: ✅ テストファースト:
pieces: pieces:
- default-test-first-mini - default-test-first-mini
🎵 TAKT開発:
pieces:
- takt-default
- takt-default-team-leader
その他: その他:
pieces: pieces:
- research - research

View File

@ -0,0 +1,378 @@
name: takt-default-team-leader
description: TAKT開発ピースチームリーダー版計画 → テスト作成 → チームリーダー実装 → AIレビュー → 5並列レビュー → 修正 → 監督 → 完了)
piece_config:
provider_options:
codex:
network_access: true
opencode:
network_access: true
max_movements: 30
initial_movement: plan
loop_monitors:
- cycle:
- ai_review
- ai_fix
threshold: 3
judge:
persona: supervisor
instruction_template: |
ai_review と ai_fix のループが {cycle_count} 回繰り返されました。
各サイクルのレポートを確認し、このループが健全(進捗がある)か、
非生産的(同じ問題を繰り返している)かを判断してください。
**参照するレポート:**
- AIレビュー結果: {report:ai-review.md}
**判断基準:**
- 各サイクルで新しい問題が発見・修正されているか
- 同じ指摘が繰り返されていないか
- 修正が実際に反映されているか
rules:
- condition: 健全(進捗あり)
next: ai_review
- condition: 非生産的(改善なし)
next: reviewers
movements:
- name: plan
edit: false
persona: planner
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: 要件が明確で実装可能
next: write_tests
- condition: ユーザーが質問をしている(実装タスクではない)
next: COMPLETE
- condition: 要件が不明確、情報不足
next: ABORT
appendix: |
確認事項:
- {質問1}
- {質問2}
instruction: plan
output_contracts:
report:
- name: plan.md
format: plan
- name: write_tests
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
instruction: write-tests-first
rules:
- condition: テスト作成が完了した
next: implement
- condition: テスト対象が未実装のためテスト作成をスキップする
next: implement
- condition: テスト作成を進行できない
next: ABORT
- condition: ユーザーへの確認事項があるためユーザー入力が必要
next: write_tests
requires_user_input: true
interactive_only: true
output_contracts:
report:
- name: test-scope.md
format: coder-scope
- name: test-decisions.md
format: coder-decisions
- name: implement
edit: true
persona: coder
policy:
- coding
- testing
session: refresh
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
team_leader:
max_parts: 2
part_persona: coder
part_edit: true
part_permission_mode: edit
part_allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
instruction: team-leader-implement
rules:
- condition: 実装完了
next: ai_review
- condition: 実装未着手(レポートのみ)
next: ai_review
- condition: 判断できない、情報不足
next: ai_review
- condition: ユーザー入力が必要
next: implement
requires_user_input: true
interactive_only: true
output_contracts:
report:
- name: coder-scope.md
format: coder-scope
- name: coder-decisions.md
format: coder-decisions
- name: ai_review
edit: false
persona: ai-antipattern-reviewer
policy:
- review
- ai-antipattern
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
rules:
- condition: AI特有の問題なし
next: reviewers
- condition: AI特有の問題あり
next: ai_fix
instruction: ai-review
output_contracts:
report:
- name: ai-review.md
format: ai-review
- name: ai_fix
edit: true
persona: coder
policy:
- coding
- testing
session: refresh
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: AI問題の修正完了
next: ai_review
- condition: 修正不要(指摘対象ファイル/仕様の確認済み)
next: ai_no_fix
- condition: 判断できない、情報不足
next: ai_no_fix
instruction: ai-fix
- name: ai_no_fix
edit: false
persona: architecture-reviewer
policy: review
allowed_tools:
- Read
- Glob
- Grep
rules:
- condition: ai_reviewの指摘が妥当修正すべき
next: ai_fix
- condition: ai_fixの判断が妥当修正不要
next: reviewers
instruction: arbitrate
- name: reviewers
parallel:
- name: arch-review
edit: false
persona: architecture-reviewer
policy: review
knowledge:
- architecture
- takt
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-arch
output_contracts:
report:
- name: architect-review.md
format: architecture-review
- name: security-review
edit: false
persona: security-reviewer
policy: review
knowledge: security
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-security
output_contracts:
report:
- name: security-review.md
format: security-review
- name: qa-review
edit: false
persona: qa-reviewer
policy:
- review
- qa
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-qa
output_contracts:
report:
- name: qa-review.md
format: qa-review
- name: testing-review
edit: false
persona: testing-reviewer
policy:
- review
- testing
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-test
output_contracts:
report:
- name: testing-review.md
format: testing-review
- name: requirements-review
edit: false
persona: requirements-reviewer
policy: review
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-requirements
output_contracts:
report:
- name: requirements-review.md
format: requirements-review
rules:
- condition: all("approved")
next: supervise
- condition: any("needs_fix")
next: fix
- name: fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: 修正完了
next: reviewers
- condition: 判断できない、情報不足
next: plan
instruction: fix
- name: supervise
edit: false
persona: supervisor
policy: review
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
pass_previous_response: false
rules:
- condition: すべて問題なし
next: COMPLETE
- condition: 要求未達成、テスト失敗、ビルドエラー
next: plan
instruction: supervise
output_contracts:
report:
- name: supervisor-validation.md
format: supervisor-validation
- name: summary.md
format: summary
use_judge: false

View File

@ -0,0 +1,364 @@
name: takt-default
description: TAKT開発ピース計画 → テスト作成 → 実装 → AIレビュー → 5並列レビュー → 修正 → 監督 → 完了)
piece_config:
provider_options:
codex:
network_access: true
opencode:
network_access: true
max_movements: 30
initial_movement: plan
loop_monitors:
- cycle:
- ai_review
- ai_fix
threshold: 3
judge:
persona: supervisor
instruction_template: |
ai_review と ai_fix のループが {cycle_count} 回繰り返されました。
各サイクルのレポートを確認し、このループが健全(進捗がある)か、
非生産的(同じ問題を繰り返している)かを判断してください。
**参照するレポート:**
- AIレビュー結果: {report:ai-review.md}
**判断基準:**
- 各サイクルで新しい問題が発見・修正されているか
- 同じ指摘が繰り返されていないか
- 修正が実際に反映されているか
rules:
- condition: 健全(進捗あり)
next: ai_review
- condition: 非生産的(改善なし)
next: reviewers
movements:
- name: plan
edit: false
persona: planner
knowledge: architecture
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: 要件が明確で実装可能
next: write_tests
- condition: ユーザーが質問をしている(実装タスクではない)
next: COMPLETE
- condition: 要件が不明確、情報不足
next: ABORT
appendix: |
確認事項:
- {質問1}
- {質問2}
instruction: plan
output_contracts:
report:
- name: plan.md
format: plan
- name: write_tests
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
instruction: write-tests-first
rules:
- condition: テスト作成が完了した
next: implement
- condition: テスト対象が未実装のためテスト作成をスキップする
next: implement
- condition: テスト作成を進行できない
next: ABORT
- condition: ユーザーへの確認事項があるためユーザー入力が必要
next: write_tests
requires_user_input: true
interactive_only: true
output_contracts:
report:
- name: test-scope.md
format: coder-scope
- name: test-decisions.md
format: coder-decisions
- name: implement
edit: true
persona: coder
policy:
- coding
- testing
session: refresh
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
rules:
- condition: 実装完了
next: ai_review
- condition: 実装未着手(レポートのみ)
next: ai_review
- condition: 判断できない、情報不足
next: ai_review
- condition: ユーザー入力が必要
next: implement
requires_user_input: true
interactive_only: true
instruction: implement-after-tests
output_contracts:
report:
- name: coder-scope.md
format: coder-scope
- name: coder-decisions.md
format: coder-decisions
- name: ai_review
edit: false
persona: ai-antipattern-reviewer
policy:
- review
- ai-antipattern
allowed_tools:
- Read
- Glob
- Grep
- WebSearch
- WebFetch
rules:
- condition: AI特有の問題なし
next: reviewers
- condition: AI特有の問題あり
next: ai_fix
instruction: ai-review
output_contracts:
report:
- name: ai-review.md
format: ai-review
- name: ai_fix
edit: true
persona: coder
policy:
- coding
- testing
session: refresh
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: AI問題の修正完了
next: ai_review
- condition: 修正不要(指摘対象ファイル/仕様の確認済み)
next: ai_no_fix
- condition: 判断できない、情報不足
next: ai_no_fix
instruction: ai-fix
- name: ai_no_fix
edit: false
persona: architecture-reviewer
policy: review
allowed_tools:
- Read
- Glob
- Grep
rules:
- condition: ai_reviewの指摘が妥当修正すべき
next: ai_fix
- condition: ai_fixの判断が妥当修正不要
next: reviewers
instruction: arbitrate
- name: reviewers
parallel:
- name: arch-review
edit: false
persona: architecture-reviewer
policy: review
knowledge:
- architecture
- takt
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-arch
output_contracts:
report:
- name: architect-review.md
format: architecture-review
- name: security-review
edit: false
persona: security-reviewer
policy: review
knowledge: security
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-security
output_contracts:
report:
- name: security-review.md
format: security-review
- name: qa-review
edit: false
persona: qa-reviewer
policy:
- review
- qa
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-qa
output_contracts:
report:
- name: qa-review.md
format: qa-review
- name: testing-review
edit: false
persona: testing-reviewer
policy:
- review
- testing
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-test
output_contracts:
report:
- name: testing-review.md
format: testing-review
- name: requirements-review
edit: false
persona: requirements-reviewer
policy: review
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
rules:
- condition: approved
- condition: needs_fix
instruction: review-requirements
output_contracts:
report:
- name: requirements-review.md
format: requirements-review
rules:
- condition: all("approved")
next: supervise
- condition: any("needs_fix")
next: fix
- name: fix
edit: true
persona: coder
policy:
- coding
- testing
knowledge:
- takt
- architecture
allowed_tools:
- Read
- Glob
- Grep
- Edit
- Write
- Bash
- WebSearch
- WebFetch
required_permission_mode: edit
pass_previous_response: false
rules:
- condition: 修正完了
next: reviewers
- condition: 判断できない、情報不足
next: plan
instruction: fix
- name: supervise
edit: false
persona: supervisor
policy: review
allowed_tools:
- Read
- Glob
- Grep
- Bash
- WebSearch
- WebFetch
pass_previous_response: false
rules:
- condition: すべて問題なし
next: COMPLETE
- condition: 要求未達成、テスト失敗、ビルドエラー
next: plan
instruction: supervise
output_contracts:
report:
- name: supervisor-validation.md
format: supervisor-validation
- name: summary.md
format: summary
use_judge: false