kenaz 0.3.17 → 0.3.19
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/core/.claude/commands/agent-worker.md +1 -1
- package/core/.claude/commands/architect.md +1 -2
- package/core/.claude/commands/spec.md +1 -1
- package/core/.claude/commands//347/224/242/345/223/201.md +1 -1
- package/core/.claude/hooks/__tests__/task-1977-dedupe-guard.test.js +8 -8
- package/core/.claude/hooks/synapse-first-investigation.js +15 -0
- package/core/.claude/skills/architect_agent/SKILL.md +11 -92
- package/core/.claude/skills/assessment_agent/SKILL.md +0 -1
- package/core/.claude/skills/backend_engineer/SKILL.md +3 -6
- package/core/.claude/skills/code_reviewer/SKILL.md +1 -1
- package/core/.claude/skills/code_reviewer/patterns.yaml +1 -1
- package/core/.claude/skills/designer/SKILL.md +3 -6
- package/core/.claude/skills/dev_agent/SKILL.md +30 -491
- package/core/.claude/skills/developer/SKILL.md +3 -6
- package/core/.claude/skills/feature_agent/SKILL.md +3 -17
- package/core/.claude/skills/product_manager/SKILL.md +29 -1064
- package/core/.claude/skills/qa_engineer/SKILL.md +12 -17
- package/core/.claude/skills/spec_optimizer/SKILL.md +25 -275
- package/core/.claude/skills/sre_agent/SKILL.md +3 -6
- package/core/.collaboration/README.md +2 -3
- package/core/.collaboration/core/task-api.js +5 -138
- package/core/.collaboration/docs/CLI.md +0 -2
- package/core/.failure/INDEX.yaml +6 -40
- package/core/.failure/agent-execution/FAIL-013-search-cwd-drift-and-case-mismatch.yaml +1 -1
- package/core/.failure/tools/README.md +9 -227
- package/core/.formation/bifrost/exec.js +29 -4
- package/core/.formation/bifrost/launch.js +1 -6
- package/core/.formation/bifrost/launch.test.js +1 -1
- package/core/.formation/bifrost/provider-launch.js +18 -11
- package/core/.formation/bifrost/provider-launch.test.js +26 -2
- package/core/.formation/bifrost/shared/ansuz-boot-policy.js +3 -3
- package/core/.formation/bifrost/shared/ansuz-boot-policy.test.js +1 -2
- package/core/.formation/tools/__tests__/dispatch-cwd-project.test.js +42 -0
- package/core/.formation/tools/__tests__/m1-hmap-convid.test.js +1 -124
- package/core/.formation/tools/__tests__/subagent-executor.test.js +3 -2
- package/core/.formation/tools/dispatch.js +15 -2
- package/core/.formation/tools/loader.js +17 -140
- package/core/.formation/tools/post-complete.js +0 -31
- package/core/.rule/INDEX.yaml +0 -18
- package/core/.rule/general/agent-workflow.yaml +14 -164
- package/core/.rule/general/project-self-containment.yaml +8 -19
- package/core/.rule/general/rust-verify-target.yaml +6 -5
- package/core/.rule/general/synapse-code-intelligence.yaml +3 -3
- package/core/.specialist/Amelia/capability.yaml +12 -12
- package/core/.specialist/Amelia/workflow.yaml +2 -2
- package/core/.specialist/Ansuz/SYSTEM_DOC.md +20 -578
- package/core/.specialist/Ansuz/cognitive_principles.yaml +2 -3
- package/core/.specialist/Ansuz/concepts/boot_rules_summary.yaml +0 -1
- package/core/.specialist/Ansuz/concepts/deep_knowledge_pointers.yaml +1 -2
- package/core/.specialist/Ansuz/core.yaml +6 -108
- package/core/.specialist/Ansuz/guards/lesson_guards.yaml +0 -3
- package/core/.specialist/Ansuz/identity_contract.yaml +0 -1
- package/core/.specialist/Ansuz/knowledge.yaml +0 -4
- package/core/.specialist/Ansuz/rule.yaml +0 -1
- package/core/.specialist/Ansuz/tools/handoff-session-identity.test.js +6 -150
- package/core/.specialist/tests/runtime-discovery/README.md +1 -1
- package/core/.specialist/tools/__tests__/task-2374-usage-counter.test.js +1 -12
- package/core/.specialist/tools/prompt-files.test.js +1 -0
- package/core/.specialist/tools/task-bridge.js +1 -66
- package/core/.system/README.md +11 -552
- package/core/.system/collaboration/README.md +10 -174
- package/core/CLAUDE.md +1 -6
- package/core/KENAZ_CORE_VERSION +1 -1
- package/core/dev/scripts/js-yaml-resolution.test.js +1 -1
- package/core/dev/scripts/run-rust-tests.js +30 -46
- package/core/dev/scripts/run-rust-tests.test.js +17 -0
- package/core/dev/scripts/rust-verify-worktree.js +4 -4
- package/core/dev/scripts/verify-target-dir.js +6 -6
- package/core/plugins/kenaz/INVENTORY.md +8 -8
- package/core/plugins/kenaz/commands/architect.md +1 -2
- package/core/plugins/kenaz/commands/spec.md +1 -1
- package/core/plugins/kenaz/commands//347/224/242/345/223/201.md +1 -1
- package/core/plugins/kenaz/guidance.md +1 -1
- package/core/plugins/kenaz/scripts/sync.js +1 -1
- package/core/plugins/kenaz/scripts/ygg.js +6 -0
- package/core/plugins/kenaz/skills/architect_agent/SKILL.md +11 -92
- package/core/plugins/kenaz/skills/assessment_agent/SKILL.md +0 -1
- package/core/plugins/kenaz/skills/backend_engineer/SKILL.md +3 -6
- package/core/plugins/kenaz/skills/code_reviewer/SKILL.md +1 -1
- package/core/plugins/kenaz/skills/code_reviewer/patterns.yaml +1 -1
- package/core/plugins/kenaz/skills/designer/SKILL.md +3 -6
- package/core/plugins/kenaz/skills/dev_agent/SKILL.md +30 -491
- package/core/plugins/kenaz/skills/developer/SKILL.md +3 -6
- package/core/plugins/kenaz/skills/feature_agent/SKILL.md +3 -17
- package/core/plugins/kenaz/skills/product_manager/SKILL.md +29 -1064
- package/core/plugins/kenaz/skills/qa_engineer/SKILL.md +12 -17
- package/core/plugins/kenaz/skills/spec_optimizer/SKILL.md +25 -275
- package/core/plugins/kenaz/skills/sre_agent/SKILL.md +3 -6
- package/package.json +6 -6
- package/core/.claude/commands/archive.md +0 -24
- package/core/.claude/commands/init.md +0 -112
- package/core/.claude/commands/legacy_dev.md +0 -18
- package/core/.claude/commands/product-review.md +0 -131
- package/core/.claude/commands/strategy.md +0 -141
- package/core/.claude/commands/sunny.md +0 -1
- package/core/.claude/commands//347/224/242/345/223/201/346/252/242/350/246/226.md +0 -129
- package/core/.claude/commands//351/200/262/345/272/246.md +0 -15
- package/core/.claude/hooks/__tests__/substrate.test.js +0 -122
- package/core/.claude/hooks/_substrate-paths.js +0 -95
- package/core/.claude/hooks/context-check.js +0 -51
- package/core/.claude/hooks/fatigue-check.js +0 -52
- package/core/.claude/hooks/handoff-snapshot-on-commit.js +0 -154
- package/core/.claude/hooks/handoff-snapshot-on-question.js +0 -158
- package/core/.claude/hooks/handoff-staleness.js +0 -197
- package/core/.claude/hooks/jev-thalamus-context.js +0 -17
- package/core/.claude/hooks/jev-thalamus-context.test.js +0 -41
- package/core/.claude/hooks/lease-release.js +0 -119
- package/core/.claude/hooks/lease-touch.js +0 -96
- package/core/.claude/hooks/reflex-feedback.js +0 -5
- package/core/.claude/hooks/session-init.ps1 +0 -49
- package/core/.claude/hooks/sound-event.js +0 -70
- package/core/.claude/hooks/sound-event.sh +0 -37
- package/core/.claude/hooks/stream-delta.js +0 -169
- package/core/.claude/no-hooks.settings.json +0 -3
- package/core/.claude/skills/legacy_dev/SKILL.md +0 -202
- package/core/.claude/skills/sunny/SKILL.md +0 -74
- package/core/.collaboration/cli/commands/assign.js +0 -39
- package/core/.collaboration/cli/commands/claim.js +0 -33
- package/core/.collaboration/cli/commands/complete.js +0 -44
- package/core/.collaboration/cli/commands/create.js +0 -110
- package/core/.collaboration/cli/commands/get.js +0 -83
- package/core/.collaboration/cli/commands/index.js +0 -52
- package/core/.collaboration/cli/commands/list.js +0 -51
- package/core/.collaboration/cli/commands/lock.js +0 -45
- package/core/.collaboration/cli/commands/rebuild.js +0 -39
- package/core/.collaboration/cli/commands/search.js +0 -61
- package/core/.collaboration/cli/commands/stats.js +0 -61
- package/core/.collaboration/cli/commands/transfer.js +0 -41
- package/core/.collaboration/cli/commands/unlock.js +0 -48
- package/core/.collaboration/cli/formatters/help-formatter.js +0 -70
- package/core/.collaboration/cli/formatters/index.js +0 -7
- package/core/.collaboration/cli/task-cli.js +0 -46
- package/core/.collaboration/cli/utils/arg-parser.js +0 -74
- package/core/.collaboration/cli/utils/git-user.js +0 -25
- package/core/.collaboration/cli/utils/index.js +0 -9
- package/core/.collaboration/cli/utils/output.js +0 -10
- package/core/.collaboration/config/default.yaml +0 -189
- package/core/.collaboration/core/conflict-resolver.js +0 -461
- package/core/.collaboration/core/conflict-resolver.test.js +0 -389
- package/core/.collaboration/core/migrate-legacy.js +0 -260
- package/core/.collaboration/docs/API.md +0 -787
- package/core/.collaboration/docs/ARCHITECTURE.md +0 -596
- package/core/.collaboration/docs/FAQ.md +0 -695
- package/core/.collaboration/docs/MIGRATION.md +0 -804
- package/core/.collaboration/docs/examples/README.md +0 -320
- package/core/.collaboration/docs/examples/advanced-queries.js +0 -261
- package/core/.collaboration/docs/examples/basic-usage.js +0 -184
- package/core/.collaboration/docs/examples/team-workflow.js +0 -352
- package/core/.failure/agent-execution/FAIL-001-agent-no-output.yaml +0 -391
- package/core/.failure/agent-execution/FAIL-007-pm-lead-wrong-team-invocation.yaml +0 -0
- package/core/.failure/agent-execution/FAIL-010-phase0-poem-format-skipped.yaml +0 -28
- package/core/.failure/agent-execution/FAIL-010-skipping-cognitive-checkpoint-after-verification.yaml +0 -59
- package/core/.failure/agent-execution/FAIL-012-grep-shortcut-during-investigation.yaml +0 -85
- package/core/.failure/architecture/FAIL-006-python-version-compatibility.yaml +0 -445
- package/core/.failure/pipeline/FAIL-003-queue-pollution.yaml +0 -335
- package/core/.failure/pipeline/README.md +0 -95
- package/core/.failure/retired/FAIL-009-skipping-synapse-pulse-before-code-change.yaml +0 -49
- package/core/.failure/tools/USAGE_GUIDE.md +0 -323
- package/core/.failure/tools/check_failures.ps1 +0 -387
- package/core/.failure/tools/log_failure.ps1 +0 -474
- package/core/.formation/.episode-input.json +0 -10
- package/core/.formation/.merge-lock +0 -1
- package/core/.formation/lead.yaml +0 -118
- package/core/.formation/legacy.bak/designer.yaml +0 -57
- package/core/.formation/legacy.bak/pm.yaml +0 -57
- package/core/.formation/legacy.bak/qa.yaml +0 -57
- package/core/.formation/legacy.bak/review.yaml +0 -62
- package/core/.formation/legacy.bak/scheduler.yaml +0 -129
- package/core/.formation/legacy.bak/sre.yaml +0 -57
- package/core/.formation/role-map.yaml +0 -274
- package/core/.formation/roles/_shared/modules/code_review.yaml +0 -98
- package/core/.formation/roles/_shared/modules/security.yaml +0 -103
- package/core/.formation/roles/_shared/modules/testing.yaml +0 -14
- package/core/.formation/roles/backend/role.yaml +0 -93
- package/core/.formation/roles/code_reviewer/role.yaml +0 -102
- package/core/.formation/roles/database_optimizer/role.yaml +0 -107
- package/core/.formation/roles/designer/role.yaml +0 -66
- package/core/.formation/roles/developer/role.yaml +0 -75
- package/core/.formation/roles/frontend/role.yaml +0 -134
- package/core/.formation/roles/incident_response/role.yaml +0 -89
- package/core/.formation/roles/qa/role.yaml +0 -89
- package/core/.formation/roles/security/role.yaml +0 -87
- package/core/.formation/roles/sre/role.yaml +0 -66
- package/core/.formation/skills/coordinator.yaml +0 -52
- package/core/.formation/solo/diagnosis.yaml +0 -78
- package/core/.formation/solo/strategy.yaml +0 -121
- package/core/.formation/tests/hello.txt +0 -2
- package/core/.formation/tools/coordinator.js +0 -350
- package/core/.formation/tools/jev-correction.js +0 -214
- package/core/.formation/tools/jev-correction.test.js +0 -178
- package/core/.formation/tools/log-reader.js +0 -232
- package/core/.formation/tools/revert-daemon-state.js +0 -162
- package/core/.formation/tools/test-drift.js +0 -148
- package/core/.formation/unit/heimdall.yaml +0 -96
- package/core/.formation/unit/plan.yaml +0 -67
- package/core/.formation/unit/think.yaml +0 -58
- package/core/.kenaz/MUNINN_SNAPSHOT9_EPISODE.json +0 -32
- package/core/.kenaz/MUNINN_SNAPSHOT9_RUNE.json +0 -23
- package/core/.kenaz/MUNINN_SNAPSHOT9_SUMMARY.md +0 -89
- package/core/.kenaz/ash_TASK_1428-20260507.json +0 -14
- package/core/.kenaz/muninn_episode_write.ps1 +0 -17
- package/core/.kenaz/muninn_snapshot11_rune_candidates.md +0 -63
- package/core/.kenaz/muninn_snapshot1_rune_candidates.md +0 -49
- package/core/.kenaz/runes_TASK_1428.json +0 -57
- package/core/.kenaz/tmp_heimdall_proposal_8d3e392.json +0 -13
- package/core/.kenaz/tmp_props.json +0 -1
- package/core/.kenaz/tmp_sounddrop_t1_prompt.txt +0 -371
- package/core/.rule/MECHANIZED.md +0 -61
- package/core/.rule/general/cortex-memory-recall.yaml +0 -446
- package/core/.rule/general/pipeline.yaml +0 -246
- package/core/.rule/general/sunny-access-control.yaml +0 -60
- package/core/.rule/general/system-invariants.yaml +0 -231
- package/core/.rule/pipeline/PPL-002-completed-task-archival.yaml +0 -528
- package/core/.rule/pipeline/auto-update.yaml +0 -282
- package/core/.rule/pipeline/task-execution.yaml +0 -365
- package/core/.specialist/Ansuz/concepts/phase_protocol.yaml +0 -65
- package/core/.specialist/Ansuz/experiments/boot_ablation_replay.js +0 -197
- package/core/.specialist/Ansuz/tools/bootstrap-anchors.js +0 -289
- package/core/.specialist/Ansuz/workflow.yaml +0 -1225
- package/core/.specialist/experiments/rg_benchmark.js +0 -523
- package/core/.specialist/experiments/rg_benchmark_results.json +0 -27
- package/core/.specialist/tools/jev-optional-context.js +0 -107
- package/core/.specialist/tools/jev-optional-context.test.js +0 -152
- package/core/.specialist/tools/memory-action-log.js +0 -839
- package/core/.specialist/tools/phase-gate.js +0 -3534
- package/core/.specialist/tools/phase-gate.test.js +0 -85
- package/core/.specialist/tools/precompute-runner.js +0 -444
- package/core/.specialist/tools/rule-engine.js +0 -621
- package/core/.specialist/tools/task-bridge-jev.test.js +0 -170
- package/core/.synapse/memory-shared.json.sync +0 -1
- package/core/.system/agent-skills/README.md +0 -724
- package/core/.system/cli-tools/README.md +0 -724
- package/core/.system/cortex/MODULES.md +0 -1046
- package/core/.system/dashboard/FRONTEND.md +0 -812
- package/core/.system/dashboard/README.md +0 -737
- package/core/.system/failure/README.md +0 -723
- package/core/.system/formation/LEGACY_SKILLS.md +0 -974
- package/core/.system/formation/POST_COMPLETE.md +0 -602
- package/core/.system/formation/README.md +0 -1094
- package/core/.system/formation/TOOLS_REFERENCE.md +0 -1145
- package/core/.system/kenaz/README.md +0 -787
- package/core/.system/memory/README.md +0 -719
- package/core/.system/pipeline/README.md +0 -712
- package/core/.system/rule/README.md +0 -794
- package/core/.system/sunny/README.md +0 -476
- package/core/.system/sunny/RULES.json +0 -89
- package/core/.system/sunny/knowledge/INDEX.md +0 -37
- package/core/.system/sunny/knowledge/agent-teams-api.md +0 -0
- package/core/.system/sunny/knowledge/ansuz-specialist.md +0 -500
- package/core/.system/sunny/knowledge/claude-cli-spawn.md +0 -177
- package/core/.system/sunny/knowledge/collaboration-api.md +0 -925
- package/core/.system/sunny/teammates/README.md +0 -107
- package/core/.system/sunny/teammates/how_to_use.yaml +0 -101
- package/core/.system/sunny/teammates/tools/headless/launcher.js +0 -318
- package/core/.system/sunny/teammates/tools/powershell/launcher.js +0 -241
- package/core/.system/sunny/teammates/tools/powershell/start.bat +0 -50
- package/core/.system/sunny/teammates/tools/utils/env.js +0 -96
- package/core/.system/sunny/teammates/tools/utils/format-output.js +0 -329
- package/core/.system/sunny/tools.json +0 -101
- package/core/dev/scripts/cleanup-queue.js +0 -184
- package/core/dev/scripts/cleanup_queue.js +0 -86
- package/core/dev/scripts/legacy/README.md +0 -39
- package/core/dev/scripts/legacy/dev_agent_scheduler.ps1.bak +0 -536
- package/core/dev/scripts/legacy/multi_agent_scheduler.ps1.bak +0 -1978
- package/core/dev/scripts/matrix/CLI_README.md +0 -214
- package/core/dev/scripts/matrix/README.md +0 -310
- package/core/dev/scripts/matrix/package-lock.json +0 -4266
- package/core/dev/scripts/matrix/package.json +0 -55
- package/core/dev/scripts/matrix/src/abbreviations.ts +0 -295
- package/core/dev/scripts/matrix/src/cli/commands/convert.ts +0 -211
- package/core/dev/scripts/matrix/src/cli/commands/create.ts +0 -95
- package/core/dev/scripts/matrix/src/cli/commands/delete.ts +0 -102
- package/core/dev/scripts/matrix/src/cli/commands/list-tags.ts.wip +0 -140
- package/core/dev/scripts/matrix/src/cli/commands/manage-tags.ts.wip +0 -173
- package/core/dev/scripts/matrix/src/cli/commands/query.ts +0 -261
- package/core/dev/scripts/matrix/src/cli/commands/read.ts +0 -77
- package/core/dev/scripts/matrix/src/cli/commands/stats.ts.wip +0 -168
- package/core/dev/scripts/matrix/src/cli/commands/tokens.ts.wip +0 -126
- package/core/dev/scripts/matrix/src/cli/commands/update.ts +0 -147
- package/core/dev/scripts/matrix/src/cli/commands/validate.ts +0 -275
- package/core/dev/scripts/matrix/src/cli/index.ts +0 -350
- package/core/dev/scripts/matrix/src/cli/utils/file-handler.ts +0 -72
- package/core/dev/scripts/matrix/src/cli/utils/logger.ts +0 -65
- package/core/dev/scripts/matrix/src/index.ts +0 -62
- package/core/dev/scripts/matrix/src/indexer/tag-indexer.ts +0 -165
- package/core/dev/scripts/matrix/src/parser.ts +0 -281
- package/core/dev/scripts/matrix/src/serializer.ts +0 -151
- package/core/dev/scripts/matrix/src/validator.ts +0 -301
- package/core/dev/scripts/matrix/tests/abbreviations.test.ts +0 -122
- package/core/dev/scripts/matrix/tests/cli.test.ts +0 -177
- package/core/dev/scripts/matrix/tests/convert.test.ts +0 -143
- package/core/dev/scripts/matrix/tests/parser.test.ts +0 -203
- package/core/dev/scripts/matrix/tests/query.test.ts +0 -85
- package/core/dev/scripts/matrix/tests/serializer.test.ts +0 -197
- package/core/dev/scripts/matrix/tests/validate.test.ts +0 -141
- package/core/dev/scripts/matrix/tests/validator.test.ts +0 -167
- package/core/dev/scripts/matrix/tsconfig.json +0 -20
- package/core/dev/scripts/matrix/types/index.d.ts +0 -111
- package/core/dev/scripts/matrix/types/index.d.ts.map +0 -1
- package/core/dev/scripts/matrix/types/index.js +0 -8
- package/core/dev/scripts/matrix/types/index.js.map +0 -1
- package/core/dev/scripts/matrix/types/index.ts +0 -124
- package/core/dev/scripts/memory-usage-report.js +0 -152
- package/core/dev/scripts/probe/ansuz-scaffold-ablation.js +0 -579
- package/core/dev/scripts/probe/ansuz-scaffold-ablation.test.js +0 -244
- package/core/dev/scripts/probe/hook-latency-probe.js +0 -315
- package/core/dev/scripts/probe/hook-latency-probe.test.js +0 -105
- package/core/dev/scripts/probe/prediction-signal-auc.js +0 -483
- package/core/dev/scripts/probe/prediction-signal-auc.test.js +0 -200
- package/core/dev/scripts/test-pty-ws-tunnel.js +0 -229
- package/core/dev/scripts/validate_pipeline.js +0 -197
- package/core/dev/spikes/task2145-evidence-20261004/backend-log-excerpt.txt +0 -56
- package/core/dev/spikes/task2145-evidence-20261004/graph.shadow +0 -0
- package/core/dev/spikes/task2145-evidence-20261004/graph.wal +0 -0
- package/core/dev/spikes/task2145-evidence-20261004/graph_corrupt_suspect.marker +0 -1
- package/core/plugins/kenaz/commands/strategy.md +0 -141
|
@@ -1,500 +0,0 @@
|
|
|
1
|
-
# Ansuz Specialist — 產品全生命週期引擎
|
|
2
|
-
|
|
3
|
-
> **ᚨ** — 神諭符文:理解意圖,傳遞給執行層
|
|
4
|
-
|
|
5
|
-
**版本**: 1.0.0
|
|
6
|
-
**定位**: Product Manager + Formation Lead 合一
|
|
7
|
-
**目標用戶**: Sunny 系統、其他 specialist、開發者
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## 快速導覽
|
|
12
|
-
|
|
13
|
-
| 主題 | 說明 | 詳細文檔 |
|
|
14
|
-
|------|------|---------|
|
|
15
|
-
| **身份與邊界** | Ansuz 是什麼、不是什麼 | [rule.yaml](../../../.specialist/Ansuz/rule.yaml) |
|
|
16
|
-
| **底層原則** | 7 條思維原則(最高優先級) | [principles.yaml](../../../.specialist/Ansuz/principles.yaml) |
|
|
17
|
-
| **能力定義** | 需求分析、任務設計、陣型判斷... | [capability.yaml](../../../.specialist/Ansuz/capability.yaml) |
|
|
18
|
-
| **執行模式** | 事件驅動 7 phases | [workflow.yaml](../../../.specialist/Ansuz/workflow.yaml) |
|
|
19
|
-
| **共享詞彙** | Formation、任務系統、Agent 類型 | [knowledge.yaml](../../../.specialist/Ansuz/knowledge.yaml) |
|
|
20
|
-
| **完整文檔** | 架構、對比、範例 | [SYSTEM_DOC.md](../../../.specialist/Ansuz/SYSTEM_DOC.md) |
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## 核心概念
|
|
25
|
-
|
|
26
|
-
### 1. Ansuz vs 舊系統
|
|
27
|
-
|
|
28
|
-
| 特性 | 舊 PM | 舊 Lead | **Ansuz** |
|
|
29
|
-
|------|-------|---------|-----------|
|
|
30
|
-
| **職責** | 需求 + 任務建立 | 陣型 + dispatch + 追蹤 | **全生命週期** |
|
|
31
|
-
| **交接次數** | 1 次(PM → 用戶 → Lead) | 0 次 | **0 次** |
|
|
32
|
-
| **工作流程** | 線性 9 階段 | 線性 7 階段 | **事件驅動 7 phases** |
|
|
33
|
-
| **需求理解** | ✅ | ❌ | **✅ + 意圖推導** |
|
|
34
|
-
| **結果驗證** | ❌ | ✅ | **✅ + 交叉比對原始碼** |
|
|
35
|
-
| **完成後處理** | ❌ | ⚠️ 部分 | **✅ Archive + Git + 回報** |
|
|
36
|
-
|
|
37
|
-
**關鍵優勢**:
|
|
38
|
-
- 舊系統:PM 建完任務 → 用戶手動 `/dev` → Lead 執行(**交接損失 context**)
|
|
39
|
-
- Ansuz:從需求到完成一氣呵成,**無斷裂交接**
|
|
40
|
-
|
|
41
|
-
### 2. 事件驅動 7 Phases
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
user_request → understand → design → create → dispatch
|
|
45
|
-
↓
|
|
46
|
-
result_arrived ← on_result ← post_complete ← report
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
| Phase | 輸入 | 輸出 | 關鍵工具 |
|
|
50
|
-
|-------|------|------|---------|
|
|
51
|
-
| **understand** | 用戶描述 / TASK_ID | 需求摘要 + 範圍 + 優先級 | PRODUCT_SPEC.md, .collaboration |
|
|
52
|
-
| **design** | 需求摘要 | 任務列表 + 依賴 + scope | - |
|
|
53
|
-
| **create** | 任務列表 | YAML 任務卡 | task-api.js |
|
|
54
|
-
| **dispatch** | YAML 任務卡 | Formation 執行 | headless.js |
|
|
55
|
-
| **on_result** | Agent 輸出 | 驗證結果 + 下一步 | Git log, 原始碼比對 |
|
|
56
|
-
| **post_complete** | 驗證通過 | Archive + Git 分支 | post-complete.js |
|
|
57
|
-
| **report** | 完成狀態 | 結構化回報 | - |
|
|
58
|
-
|
|
59
|
-
**與線性流程的差異**:
|
|
60
|
-
- 舊系統:每個階段完成才進下一階段
|
|
61
|
-
- Ansuz:事件驅動,多條任務線可交疊、並行、動態響應
|
|
62
|
-
|
|
63
|
-
### 3. 七條底層原則
|
|
64
|
-
|
|
65
|
-
> 遇到任何決策時,先查原則 → 從原則推導答案
|
|
66
|
-
|
|
67
|
-
| 原則 | 核心概念 | 測試問題 |
|
|
68
|
-
|------|---------|---------|
|
|
69
|
-
| **lifecycle_over_handoff** | 全生命週期 > 分段交接 | "這個流程有幾次交接?" |
|
|
70
|
-
| **minimal_formation** | 最輕量陣型 > 最大陣型 | "這個任務用更小的陣型能完成嗎?" |
|
|
71
|
-
| **structural_over_estimation** | 結構 > 估計 | "這個決策是基於可驗證的結構,還是猜測?" |
|
|
72
|
-
| **verifiable_over_explainable** | 可驗證 > 可解釋 | "這個結論有人能用一行命令驗證嗎?" |
|
|
73
|
-
| **real_dependency_over_perceived** | 依賴關係 > 感覺相關 | "如果 A 的結果完全不同,B 需要重做嗎?" |
|
|
74
|
-
| **intent_over_literal** | 意圖 > 字面 | "如果人類看到我的執行結果,會說「這就是我要的」嗎?" |
|
|
75
|
-
| **expose_over_hide** | 暴露 > 隱藏 | "我有沒有任何資訊是「先不說,等一下再說」的?" |
|
|
76
|
-
| **wire_over_rewrite** | 接線 > 重寫 | "這個問題能透過呼叫已存在的函數解決嗎?" |
|
|
77
|
-
|
|
78
|
-
**用法範例**:
|
|
79
|
-
```yaml
|
|
80
|
-
情境: "我應該先做 A 再做 B 嗎?"
|
|
81
|
-
錯誤做法: "A 是基礎,所以應該先做"
|
|
82
|
-
正確做法:
|
|
83
|
-
- 問:B 的輸入必須包含 A 的輸出嗎?(real_dependency_over_perceived)
|
|
84
|
-
- 是 → 序列執行
|
|
85
|
-
- 否 → 並行執行
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## Formation 調度
|
|
91
|
-
|
|
92
|
-
### 1. 陣型判斷
|
|
93
|
-
|
|
94
|
-
**原則**: "能 unit 不 solo,能 solo 不 squad,能 squad 不 legion"
|
|
95
|
-
|
|
96
|
-
| 陣型 | Agents | 通訊 | 適用場景 | CLI |
|
|
97
|
-
|------|--------|------|---------|-----|
|
|
98
|
-
| **unit** | 1 | 無 | 目標明確、單一 scope | `--skill=do --task=TASK_XXX` |
|
|
99
|
-
| **solo** | 1 | 自我對話 | 多角度動態分析 | `--formation=solo --skill=strategy` |
|
|
100
|
-
| **squad** | N | shared_context | 獨立子任務並行 | `--formation=squad --skill=blitz` |
|
|
101
|
-
| **legion** | N | 即時通訊 | 有依賴或回饋循環 | `--formation=legion --skill=forge` |
|
|
102
|
-
|
|
103
|
-
### 2. Dispatch 機制
|
|
104
|
-
|
|
105
|
-
**工具**: `.formation/tools/headless.js`
|
|
106
|
-
**方法**: Bash tool → `node headless.js` → 啟動獨立 Claude CLI 進程
|
|
107
|
-
|
|
108
|
-
**並行模式範例**:
|
|
109
|
-
|
|
110
|
-
```javascript
|
|
111
|
-
// 單任務
|
|
112
|
-
Bash(run_in_background: true):
|
|
113
|
-
node .formation/tools/headless.js --skill=do --task=TASK_148
|
|
114
|
-
|
|
115
|
-
// 並行多任務(無依賴)
|
|
116
|
-
Bash(run_in_background: true):
|
|
117
|
-
node .formation/tools/headless.js --skill=do --task=TASK_148
|
|
118
|
-
Bash(run_in_background: true):
|
|
119
|
-
node .formation/tools/headless.js --skill=do --task=TASK_149
|
|
120
|
-
Bash(run_in_background: true):
|
|
121
|
-
node .formation/tools/headless.js --skill=do --task=TASK_150
|
|
122
|
-
|
|
123
|
-
// 有依賴(順序執行)
|
|
124
|
-
Bash: node .formation/tools/headless.js --skill=do --task=TASK_147
|
|
125
|
-
// 等待完成後
|
|
126
|
-
Bash: node .formation/tools/headless.js --skill=do --task=TASK_148
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
**關鍵規則**:
|
|
130
|
-
- ✅ 所有調度必須經過 `.collaboration` 任務系統
|
|
131
|
-
- ✅ 用 Bash tool 呼叫 headless.js,`run_in_background=true` 實現並行
|
|
132
|
-
- ❌ 不用 Task tool 開 subagent 繞過 Formation(Formation 有 prompt 組裝、log、principles 注入)
|
|
133
|
-
|
|
134
|
-
### 3. Scope 安全
|
|
135
|
-
|
|
136
|
-
**原則**: "併發安全由 Ansuz 保證,agent 不感知"
|
|
137
|
-
|
|
138
|
-
```yaml
|
|
139
|
-
Scope 分配:
|
|
140
|
-
同檔案: "一個實例處理整個檔案"
|
|
141
|
-
跨檔案: "fan_out,按模組/目錄切"
|
|
142
|
-
派工前: "確認 scope 無重疊"
|
|
143
|
-
|
|
144
|
-
衝突檢測:
|
|
145
|
-
無衝突: scope_paths 無包含關係 → 可並行
|
|
146
|
-
有衝突: scope_paths 包含或被包含 → 順序執行
|
|
147
|
-
|
|
148
|
-
範例:
|
|
149
|
-
TASK_A: ["CLAUDE.md"]
|
|
150
|
-
TASK_B: [".formation/tools/runner.js"]
|
|
151
|
-
→ 無衝突,可並行
|
|
152
|
-
|
|
153
|
-
TASK_A: [".rule/pipeline/"]
|
|
154
|
-
TASK_B: [".rule/pipeline/task-execution.yaml"]
|
|
155
|
-
→ TASK_B 被 TASK_A 包含,衝突,順序執行
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## 任務系統整合
|
|
161
|
-
|
|
162
|
-
### 1. 任務生命週期
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
# 建立任務
|
|
166
|
-
node .collaboration/core/task-api.js create \
|
|
167
|
-
--title "任務標題" \
|
|
168
|
-
--priority P1 \
|
|
169
|
-
--role developer
|
|
170
|
-
|
|
171
|
-
# 認領任務
|
|
172
|
-
node .collaboration/core/task-api.js claim TASK_XXX
|
|
173
|
-
|
|
174
|
-
# 完成任務
|
|
175
|
-
node .collaboration/core/task-api.js complete TASK_XXX
|
|
176
|
-
|
|
177
|
-
# 阻塞任務
|
|
178
|
-
node .collaboration/core/task-api.js move TASK_XXX blocked
|
|
179
|
-
|
|
180
|
-
# 列出任務
|
|
181
|
-
node .collaboration/core/task-api.js list
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
### 2. 任務卡格式
|
|
185
|
-
|
|
186
|
-
```yaml
|
|
187
|
-
id: "TASK_XXX"
|
|
188
|
-
title: "任務標題"
|
|
189
|
-
description: "詳細描述"
|
|
190
|
-
priority: "P1" # P0 > P1 > P2 > P3
|
|
191
|
-
status: "in_progress"
|
|
192
|
-
role: "developer" # designer | frontend | backend | qa | sre
|
|
193
|
-
dependencies: ["TASK_147"] # 真依賴(B 的輸入 = A 的輸出)
|
|
194
|
-
scope_paths: # 修改的檔案/目錄(用於衝突檢測)
|
|
195
|
-
- "CLAUDE.md"
|
|
196
|
-
acceptance_criteria: # 驗收標準(必填)
|
|
197
|
-
- "CLAUDE.md 包含完整 12 步流程"
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
**必填字段**:
|
|
201
|
-
- `id`, `title`, `description`, `priority`, `status`, `role`, `acceptance_criteria`
|
|
202
|
-
|
|
203
|
-
### 3. 依賴分析
|
|
204
|
-
|
|
205
|
-
**真依賴定義**:B 的輸入必須包含 A 的輸出
|
|
206
|
-
|
|
207
|
-
```yaml
|
|
208
|
-
範例 1: 真依賴
|
|
209
|
-
TASK_A: 實作 API endpoint /api/search
|
|
210
|
-
TASK_B: 前端呼叫 /api/search
|
|
211
|
-
→ B depends on A(A 的輸出 = API,B 的輸入 = API)
|
|
212
|
-
|
|
213
|
-
範例 2: 假依賴
|
|
214
|
-
TASK_A: 修 src/api/auth.py
|
|
215
|
-
TASK_B: 修 src/api/search.py
|
|
216
|
-
→ 無依賴(同模組但無輸入輸出關係)→ 可並行
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
**判斷測試**:
|
|
220
|
-
> "如果 A 的結果完全不同,B 需要重做嗎?"
|
|
221
|
-
> - 需要 → 真依賴
|
|
222
|
-
> - 不需要 → 假依賴
|
|
223
|
-
|
|
224
|
-
---
|
|
225
|
-
|
|
226
|
-
## Post-Complete 自動化
|
|
227
|
-
|
|
228
|
-
### 1. 工具
|
|
229
|
-
|
|
230
|
-
**檔案**: `.formation/tools/post-complete.js`
|
|
231
|
-
**觸發**: 任務完成後自動執行
|
|
232
|
-
|
|
233
|
-
### 2. 流程
|
|
234
|
-
|
|
235
|
-
```yaml
|
|
236
|
-
Phase 1: Archive
|
|
237
|
-
action: "舊任務移至 archived/(保留最新 10 個)"
|
|
238
|
-
rule: "避免 .collaboration/tasks/{status}/ 堆積"
|
|
239
|
-
|
|
240
|
-
Phase 2: Git
|
|
241
|
-
- "建立 task/task_xxx 分支"
|
|
242
|
-
- "stage 所有變更"
|
|
243
|
-
- "commit: [TASK_XXX] 任務摘要"
|
|
244
|
-
- "merge 到用戶分支(如 {git_user})"
|
|
245
|
-
- "❌ 不自動 merge 到 main"
|
|
246
|
-
|
|
247
|
-
Phase 3: 回報
|
|
248
|
-
- "任務完成摘要"
|
|
249
|
-
- "變更檔案清單"
|
|
250
|
-
- "Archive 狀態"
|
|
251
|
-
- "Git 分支狀態"
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
### 3. CLI 使用
|
|
255
|
-
|
|
256
|
-
```bash
|
|
257
|
-
# 自動執行(由 Ansuz 調用)
|
|
258
|
-
node .formation/tools/post-complete.js --task=TASK_XXX
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
---
|
|
262
|
-
|
|
263
|
-
## 啟動與溝通
|
|
264
|
-
|
|
265
|
-
### 1. 啟動行為
|
|
266
|
-
|
|
267
|
-
當用戶執行 `/Ansuz` 時:
|
|
268
|
-
|
|
269
|
-
```yaml
|
|
270
|
-
Step 1: 先做事,再開口
|
|
271
|
-
- "讀 dev/PRODUCT_SPEC.md"
|
|
272
|
-
- "node .collaboration/core/task-api.js list"
|
|
273
|
-
- "讀 dev/pipeline/PROGRESS.md"
|
|
274
|
-
|
|
275
|
-
Step 2: 展示 Banner
|
|
276
|
-
output: |
|
|
277
|
-
ᚨ Ansuz 已就位
|
|
278
|
-
|
|
279
|
-
任務統計:
|
|
280
|
-
- 待處理:3 個(P0: 1, P1: 2)
|
|
281
|
-
- 進行中:2 個
|
|
282
|
-
- 已完成:47 個
|
|
283
|
-
|
|
284
|
-
🔴 P0 優先任務:TASK_224 修復 Formation 系統 Git 管理
|
|
285
|
-
|
|
286
|
-
請描述需求,或指定 TASK_ID
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
**重點**:
|
|
290
|
-
- 不展示內部實現(陣型、系統路徑)
|
|
291
|
-
- 用戶關心的是「專案現在怎樣」,不是「你能做什麼」
|
|
292
|
-
|
|
293
|
-
### 2. 溝通模式
|
|
294
|
-
|
|
295
|
-
**對 用戶**:
|
|
296
|
-
|
|
297
|
-
```yaml
|
|
298
|
-
規則:
|
|
299
|
-
- "結論在前,證據在後"
|
|
300
|
-
- "壞消息先說"
|
|
301
|
-
- "不確定時說不確定"
|
|
302
|
-
- "結構化表格 > 散文"
|
|
303
|
-
|
|
304
|
-
範例:
|
|
305
|
-
❌ TASK_XXX 阻塞
|
|
306
|
-
|
|
307
|
-
原因:API endpoint 不存在
|
|
308
|
-
建議:補實作 API 或調整前端呼叫路徑
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
**對 Agent**(透過 Formation):
|
|
312
|
-
|
|
313
|
-
```yaml
|
|
314
|
-
規則:
|
|
315
|
-
- "指令明確、結構化、無歧義"
|
|
316
|
-
- "提供充足 context — agent 無記憶"
|
|
317
|
-
- "定義清晰的完成條件"
|
|
318
|
-
|
|
319
|
-
範例:
|
|
320
|
-
task: TASK_148
|
|
321
|
-
description: "更新 CLAUDE.md 工作流程說明"
|
|
322
|
-
scope_paths: ["CLAUDE.md"]
|
|
323
|
-
acceptance_criteria:
|
|
324
|
-
- "CLAUDE.md 包含完整 12 步流程"
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
---
|
|
328
|
-
|
|
329
|
-
## Mindset 核心
|
|
330
|
-
|
|
331
|
-
```yaml
|
|
332
|
-
核心價值觀: "完美達成 > 一切"
|
|
333
|
-
行為準則:
|
|
334
|
-
- "不考慮成本(token、時間、API 費用)"
|
|
335
|
-
- "只關注:能不能完美達成目標"
|
|
336
|
-
- "❌ 禁止因成本考量進入保守狀態"
|
|
337
|
-
- "❌ 禁止走捷徑 — 遇到問題必須修根因"
|
|
338
|
-
- "❌ 「最快解法」≠ 正確解法 — 永遠選正確修復"
|
|
339
|
-
|
|
340
|
-
溝通風格:
|
|
341
|
-
核心: "簡潔 | 高效 | 透明"
|
|
342
|
-
目標: "80 tokens → 15 tokens"
|
|
343
|
-
符號:
|
|
344
|
-
✅: "允許"
|
|
345
|
-
❌: "禁止"
|
|
346
|
-
→: "導致/然後"
|
|
347
|
-
">": "優先於"
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
---
|
|
351
|
-
|
|
352
|
-
## 完整工作流範例
|
|
353
|
-
|
|
354
|
-
```yaml
|
|
355
|
-
場景: "實現搜尋功能改進"
|
|
356
|
-
|
|
357
|
-
Phase 1: understand
|
|
358
|
-
- 讀 PRODUCT_SPEC.md — Feature ID
|
|
359
|
-
- 詢問用戶:改進哪些方面?
|
|
360
|
-
- 輸出:需求摘要 + 範圍 + 優先級
|
|
361
|
-
|
|
362
|
-
Phase 2: design
|
|
363
|
-
- 拆分任務:
|
|
364
|
-
TASK_151: 後端 API 優化(scope: src/api/)
|
|
365
|
-
TASK_152: 前端 UI 改進(scope: src/ui/)
|
|
366
|
-
TASK_153: 測試覆蓋(scope: tests/)
|
|
367
|
-
- 分析依賴:無真依賴(可並行)
|
|
368
|
-
- 展示給用戶確認
|
|
369
|
-
|
|
370
|
-
Phase 3: create
|
|
371
|
-
- node task-api.js create ... (x3 任務)
|
|
372
|
-
|
|
373
|
-
Phase 4: dispatch
|
|
374
|
-
- 判斷:3 個獨立任務 → squad/blitz
|
|
375
|
-
- Dispatch 並行:
|
|
376
|
-
Bash(bg): node headless.js --formation=squad --skill=blitz --task=TASK_151
|
|
377
|
-
Bash(bg): node headless.js --formation=squad --skill=blitz --task=TASK_152
|
|
378
|
-
Bash(bg): node headless.js --formation=squad --skill=blitz --task=TASK_153
|
|
379
|
-
|
|
380
|
-
Phase 5: on_result
|
|
381
|
-
- 驗證:檔案變更 + Git commit + 驗收標準
|
|
382
|
-
- 失敗 → 分析根因 → 重派 | 換策略
|
|
383
|
-
|
|
384
|
-
Phase 6: post_complete
|
|
385
|
-
- node post-complete.js --task=TASK_151
|
|
386
|
-
- Archive 舊任務 + Git 分支管理
|
|
387
|
-
|
|
388
|
-
Phase 7: report
|
|
389
|
-
output: |
|
|
390
|
-
✅ 搜尋功能改進完成
|
|
391
|
-
|
|
392
|
-
陣型:squad/blitz
|
|
393
|
-
結果:3 個任務並行完成
|
|
394
|
-
變更:6 個檔案
|
|
395
|
-
📦 Archive: 5 個舊任務已封存
|
|
396
|
-
🔀 Git: task/task_151 → {git_user}
|
|
397
|
-
```
|
|
398
|
-
|
|
399
|
-
---
|
|
400
|
-
|
|
401
|
-
## 常見問題
|
|
402
|
-
|
|
403
|
-
### Q1: Ansuz vs Sunny,什麼時候用哪個?
|
|
404
|
-
|
|
405
|
-
| 場景 | 使用 |
|
|
406
|
-
|------|------|
|
|
407
|
-
| 正常產品開發(有規格、有流程) | **Ansuz** |
|
|
408
|
-
| 繞過限制、系統修復、緊急處理 | **Sunny** |
|
|
409
|
-
| 需要完整生命週期追蹤 | **Ansuz** |
|
|
410
|
-
| 需要快速修改、不在乎流程 | **Sunny** |
|
|
411
|
-
|
|
412
|
-
### Q2: 為什麼不用 Task tool 開 subagent?
|
|
413
|
-
|
|
414
|
-
**原因**:
|
|
415
|
-
- Task tool 開的 subagent 沒有 Formation 系統的 principles 注入
|
|
416
|
-
- 沒有日誌系統(.formation/logs/)
|
|
417
|
-
- 沒有 prompt 組裝層(.formation/tools/prompt.js)
|
|
418
|
-
- 缺少結構化 context 傳遞
|
|
419
|
-
|
|
420
|
-
**正確做法**:
|
|
421
|
-
- 透過 Bash tool 呼叫 `headless.js`
|
|
422
|
-
- Formation 系統會自動處理 principles、logging、prompt 組裝
|
|
423
|
-
|
|
424
|
-
### Q3: 如何確定是真依賴還是假依賴?
|
|
425
|
-
|
|
426
|
-
**測試問題**:
|
|
427
|
-
> "如果 A 的結果完全不同,B 需要重做嗎?"
|
|
428
|
-
|
|
429
|
-
**範例**:
|
|
430
|
-
```yaml
|
|
431
|
-
TASK_A: 設計 API 接口定義
|
|
432
|
-
TASK_B: 實作前端呼叫 API
|
|
433
|
-
|
|
434
|
-
測試: 如果 A 的 API 接口改了,B 需要重做嗎?
|
|
435
|
-
答案: 需要 → 真依賴
|
|
436
|
-
|
|
437
|
-
TASK_A: 修 auth.py
|
|
438
|
-
TASK_B: 修 search.py
|
|
439
|
-
|
|
440
|
-
測試: 如果 A 的修改內容完全不同,B 需要重做嗎?
|
|
441
|
-
答案: 不需要 → 假依賴(可並行)
|
|
442
|
-
```
|
|
443
|
-
|
|
444
|
-
### Q4: Scope 衝突檢測是如何運作的?
|
|
445
|
-
|
|
446
|
-
**規則**:路徑包含或被包含 = 衝突
|
|
447
|
-
|
|
448
|
-
```yaml
|
|
449
|
-
無衝突範例:
|
|
450
|
-
TASK_A: ["CLAUDE.md"]
|
|
451
|
-
TASK_B: [".formation/tools/runner.js"]
|
|
452
|
-
→ 無包含關係 → 可並行
|
|
453
|
-
|
|
454
|
-
有衝突範例:
|
|
455
|
-
TASK_A: [".rule/pipeline/"]
|
|
456
|
-
TASK_B: [".rule/pipeline/task-execution.yaml"]
|
|
457
|
-
→ TASK_B 被 TASK_A 包含 → 衝突 → 順序執行
|
|
458
|
-
```
|
|
459
|
-
|
|
460
|
-
---
|
|
461
|
-
|
|
462
|
-
## 檔案結構
|
|
463
|
-
|
|
464
|
-
```
|
|
465
|
-
.specialist/Ansuz/
|
|
466
|
-
├── rule.yaml # 身份、邊界、權限
|
|
467
|
-
├── principles.yaml # 7 條底層原則(最高優先級)
|
|
468
|
-
├── capability.yaml # 能力定義
|
|
469
|
-
├── workflow.yaml # 事件驅動 7 phases
|
|
470
|
-
├── knowledge.yaml # 共享詞彙表
|
|
471
|
-
└── SYSTEM_DOC.md # 完整文檔
|
|
472
|
-
|
|
473
|
-
.claude/commands/
|
|
474
|
-
└── Ansuz.md # 斜線指令觸發
|
|
475
|
-
|
|
476
|
-
.formation/tools/
|
|
477
|
-
├── headless.js # Formation 調度核心
|
|
478
|
-
├── prompt.js # Prompt 組裝
|
|
479
|
-
├── runner.js # 執行引擎
|
|
480
|
-
├── post-complete.js # 完成後自動化
|
|
481
|
-
└── logger.js # 日誌系統
|
|
482
|
-
|
|
483
|
-
.collaboration/
|
|
484
|
-
├── core/task-api.js # 任務系統 API
|
|
485
|
-
└── tasks/{status}/ # 任務卡目錄
|
|
486
|
-
```
|
|
487
|
-
|
|
488
|
-
---
|
|
489
|
-
|
|
490
|
-
## 版本歷史
|
|
491
|
-
|
|
492
|
-
| 版本 | 日期 | 變更 |
|
|
493
|
-
|------|------|------|
|
|
494
|
-
| 1.0.0 | 2026-02-20 | 初始文檔化 |
|
|
495
|
-
|
|
496
|
-
---
|
|
497
|
-
|
|
498
|
-
**最後更新**: 2026-02-20
|
|
499
|
-
**維護者**: Kenaz AI Development Team
|
|
500
|
-
**相關文檔**: [SYSTEM_DOC.md](../../../.specialist/Ansuz/SYSTEM_DOC.md)
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
# Claude CLI Spawn 知識庫
|
|
2
|
-
|
|
3
|
-
> 來源:2026-02-14 headless launcher 調試經驗
|
|
4
|
-
|
|
5
|
-
## Windows 環境下 Spawn Claude CLI
|
|
6
|
-
|
|
7
|
-
### 關鍵發現
|
|
8
|
-
|
|
9
|
-
1. **必須用 `claude.cmd`**(非 `claude`)
|
|
10
|
-
- Windows 上 Claude CLI 是 `.cmd` 批次檔
|
|
11
|
-
- Node.js spawn 找不到 `claude`,會報 `ENOENT`
|
|
12
|
-
|
|
13
|
-
2. **必須用 `shell: true`**
|
|
14
|
-
- Windows 執行 `.cmd` 檔案需要經過 shell(cmd.exe)
|
|
15
|
-
- 不加會報 spawn 錯誤
|
|
16
|
-
|
|
17
|
-
3. **Shell 參數解析問題**
|
|
18
|
-
- `shell: true` 時,參數會經過 cmd.exe 解析
|
|
19
|
-
- 長字串、特殊字符、引號會被截斷或破壞
|
|
20
|
-
- **解決方案**:用 stdin 傳遞 prompt
|
|
21
|
-
|
|
22
|
-
### 正確的 Spawn 模式
|
|
23
|
-
|
|
24
|
-
```javascript
|
|
25
|
-
const { spawn } = require('child_process');
|
|
26
|
-
|
|
27
|
-
// Windows 判斷
|
|
28
|
-
const claudeCmd = process.platform === 'win32' ? 'claude.cmd' : 'claude';
|
|
29
|
-
|
|
30
|
-
const args = [
|
|
31
|
-
'-p', '-', // 從 stdin 讀取 prompt
|
|
32
|
-
'--dangerously-skip-permissions',
|
|
33
|
-
'--teammate-mode', 'in-process',
|
|
34
|
-
'--output-format', 'stream-json',
|
|
35
|
-
'--verbose',
|
|
36
|
-
'--allowedTools', 'Bash,Read,Edit,Write,Glob,Grep,Task'
|
|
37
|
-
];
|
|
38
|
-
|
|
39
|
-
const child = spawn(claudeCmd, args, {
|
|
40
|
-
cwd: projectRoot,
|
|
41
|
-
env: cleanEnv,
|
|
42
|
-
stdio: ['pipe', 'pipe', 'pipe'], // stdin 必須是 pipe
|
|
43
|
-
windowsHide: true,
|
|
44
|
-
shell: true
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
// 透過 stdin 傳送 prompt(繞過 shell 參數解析)
|
|
48
|
-
child.stdin.write(promptContent);
|
|
49
|
-
child.stdin.end();
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### 錯誤的模式(避免)
|
|
53
|
-
|
|
54
|
-
```javascript
|
|
55
|
-
// ❌ 錯誤 1:直接傳 prompt 作為參數
|
|
56
|
-
const args = ['-p', longPromptString, ...]; // 會被 shell 截斷
|
|
57
|
-
|
|
58
|
-
// ❌ 錯誤 2:用 PowerShell 中介
|
|
59
|
-
spawn('powershell', ['-Command', `claude -p ...`]); // PowerShell 會吃掉 stream-json 輸出
|
|
60
|
-
|
|
61
|
-
// ❌ 錯誤 3:不加 shell: true
|
|
62
|
-
spawn('claude.cmd', args, { shell: false }); // Windows 無法執行 .cmd
|
|
63
|
-
|
|
64
|
-
// ❌ 錯誤 4:用 'claude' 而非 'claude.cmd'
|
|
65
|
-
spawn('claude', args, { shell: true }); // ENOENT
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
## Claude CLI 參數組合規則
|
|
71
|
-
|
|
72
|
-
### `--output-format stream-json` 限制
|
|
73
|
-
|
|
74
|
-
| 搭配參數 | 是否需要 `--verbose` |
|
|
75
|
-
|---------|---------------------|
|
|
76
|
-
| `-p` (print mode) | ✅ 必須加 `--verbose` |
|
|
77
|
-
| 互動模式 | ❌ 不需要 |
|
|
78
|
-
|
|
79
|
-
**錯誤訊息**:
|
|
80
|
-
```
|
|
81
|
-
Error: When using --print, --output-format=stream-json requires --verbose
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### `--teammate-mode` 選項
|
|
85
|
-
|
|
86
|
-
| 值 | 說明 |
|
|
87
|
-
|----|------|
|
|
88
|
-
| `in-process` | Agent 在同一 session 內執行,共享 context |
|
|
89
|
-
| `subprocess` | Agent 作為獨立 subprocess 執行 |
|
|
90
|
-
|
|
91
|
-
### `--dangerously-skip-permissions`
|
|
92
|
-
|
|
93
|
-
- 跳過所有權限確認
|
|
94
|
-
- **必須**搭配 `--allowedTools` 限制可用工具
|
|
95
|
-
- 適用於自動化場景
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## 環境變數處理
|
|
100
|
-
|
|
101
|
-
### 必須刪除的變數
|
|
102
|
-
|
|
103
|
-
```javascript
|
|
104
|
-
const env = { ...process.env };
|
|
105
|
-
delete env.CLAUDECODE; // 避免 "nested session" 錯誤
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
**錯誤訊息**:
|
|
109
|
-
```
|
|
110
|
-
Error: Claude Code cannot be launched inside another Claude Code session.
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### 建議設定的變數
|
|
114
|
-
|
|
115
|
-
```javascript
|
|
116
|
-
env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = '1'; // 啟用 agent teams
|
|
117
|
-
env.CLAUDE_CODE_GIT_BASH_PATH = '/path/to/bash.exe'; // Windows Git Bash
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## Agent Teams 功能
|
|
123
|
-
|
|
124
|
-
### 建立團隊
|
|
125
|
-
|
|
126
|
-
透過 `TeamCreate` 工具:
|
|
127
|
-
```json
|
|
128
|
-
{
|
|
129
|
-
"team_name": "my-team",
|
|
130
|
-
"description": "Team description",
|
|
131
|
-
"agent_type": "coordinator"
|
|
132
|
-
}
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### 建立 Teammate
|
|
136
|
-
|
|
137
|
-
透過 `Task` 工具 + `team_name` 參數:
|
|
138
|
-
```json
|
|
139
|
-
{
|
|
140
|
-
"subagent_type": "general-purpose",
|
|
141
|
-
"description": "Agent description",
|
|
142
|
-
"prompt": "Your task...",
|
|
143
|
-
"team_name": "my-team",
|
|
144
|
-
"name": "agent-name"
|
|
145
|
-
}
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
### Teammate 回傳格式
|
|
149
|
-
|
|
150
|
-
```json
|
|
151
|
-
{
|
|
152
|
-
"status": "teammate_spawned",
|
|
153
|
-
"agent_id": "agent-name@team-name",
|
|
154
|
-
"model": "claude-opus-4-6",
|
|
155
|
-
"color": "blue"
|
|
156
|
-
}
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## 常見錯誤診斷
|
|
162
|
-
|
|
163
|
-
| 錯誤 | 原因 | 解法 |
|
|
164
|
-
|------|------|------|
|
|
165
|
-
| `spawn claude ENOENT` | 找不到 claude 命令 | 用 `claude.cmd` + `shell: true` |
|
|
166
|
-
| `stream-json requires --verbose` | 參數組合錯誤 | 加 `--verbose` |
|
|
167
|
-
| `Nested session` | CLAUDECODE 環境變數 | `delete env.CLAUDECODE` |
|
|
168
|
-
| Prompt 被截斷 | Shell 參數解析 | 用 stdin 傳遞 prompt |
|
|
169
|
-
| 輸出為空 | PowerShell 緩衝 | 不要用 PowerShell 中介 |
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
## 參考
|
|
174
|
-
|
|
175
|
-
- 調試報告:`.system/sunny/teammates/report/headless_debug_report.md`
|
|
176
|
-
- 環境配置:`.system/sunny/teammates/tools/utils/env.js`
|
|
177
|
-
- Headless Launcher:`.system/sunny/teammates/tools/headless/launcher.js`
|