nrslib 4e9c02091a 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
2026-02-28 12:04:22 +09:00

4.9 KiB

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.

// 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)