@k0t0vich/meta-agents-template 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +127 -0
  2. package/agents.md +141 -0
  3. package/bin/meta-agents.js +7 -0
  4. package/package.json +35 -0
  5. package/src/cli.mjs +266 -0
  6. package/src/init.mjs +197 -0
  7. package/src/sync.mjs +46 -0
  8. package/template/.meta-agents/config/roles.yaml +21 -0
  9. package/template/.meta-agents/config/system.yaml +48 -0
  10. package/template/.meta-agents/config/trackers.yaml +16 -0
  11. package/template/.meta-agents/prompts/agile-manager.md +3 -0
  12. package/template/.meta-agents/prompts/architect.md +3 -0
  13. package/template/.meta-agents/prompts/clarifier.md +3 -0
  14. package/template/.meta-agents/prompts/decomposer.md +3 -0
  15. package/template/.meta-agents/prompts/reviewer-judge.md +3 -0
  16. package/template/.meta-agents/prompts/verifier-designer.md +3 -0
  17. package/template/.meta-agents/scripts/generate-prd-step.mjs +1 -0
  18. package/template/.meta-agents/scripts/init.mjs +1 -0
  19. package/template/.meta-agents/scripts/sync-status.mjs +1 -0
  20. package/template/.meta-agents/scripts/tracker/custom.mjs +4 -0
  21. package/template/.meta-agents/scripts/tracker/github.mjs +4 -0
  22. package/template/.meta-agents/scripts/tracker/local.mjs +4 -0
  23. package/template/.meta-agents/scripts/tracker/mcp.mjs +4 -0
  24. package/template/.meta-agents/templates/agent-work-contract.md +12 -0
  25. package/template/.meta-agents/templates/evidence-pack.md +9 -0
  26. package/template/.meta-agents/templates/prd-step.md +15 -0
  27. package/template/.meta-agents/templates/sprint-template.md +12 -0
  28. package/template/.meta-agents/templates/task-template.md +26 -0
  29. package/template/.meta-agents/templates/verification-plan.md +15 -0
  30. package/template/README.md +23 -0
  31. package/template/agents.md +141 -0
  32. package/template/package.json +8 -0
  33. package/template/tasks/backlog.md +4 -0
  34. package/template/tasks/sprint-1.md +12 -0
  35. package/template/tasks/task-status-log.md +3 -0
  36. package/template/tracker-command-template.md +138 -0
  37. package/tracker-command-template.md +138 -0
package/src/init.mjs ADDED
@@ -0,0 +1,197 @@
1
+ import { spawn } from "node:child_process";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+
5
+ const TEXT_EXTENSIONS = new Set([
6
+ ".md",
7
+ ".txt",
8
+ ".json",
9
+ ".yaml",
10
+ ".yml",
11
+ ".mjs",
12
+ ".js",
13
+ ]);
14
+
15
+ function resolveTargetDir(cwd, target) {
16
+ return path.resolve(cwd, target);
17
+ }
18
+
19
+ async function runCommand(command, args, cwd, allowFailure = false) {
20
+ return new Promise((resolve, reject) => {
21
+ const child = spawn(command, args, { cwd, stdio: ["ignore", "pipe", "pipe"] });
22
+ let stdout = "";
23
+ let stderr = "";
24
+
25
+ child.stdout.on("data", (chunk) => {
26
+ stdout += String(chunk);
27
+ });
28
+ child.stderr.on("data", (chunk) => {
29
+ stderr += String(chunk);
30
+ });
31
+
32
+ child.on("error", (error) => {
33
+ if (allowFailure) {
34
+ resolve({ code: 1, stdout: "", stderr: error.message });
35
+ return;
36
+ }
37
+ reject(error);
38
+ });
39
+
40
+ child.on("close", (code) => {
41
+ if (code === 0 || allowFailure) {
42
+ resolve({ code: code ?? 1, stdout, stderr });
43
+ return;
44
+ }
45
+ reject(
46
+ new Error(
47
+ `${command} ${args.join(" ")} failed with code ${code}: ${(stderr || stdout).trim()}`,
48
+ ),
49
+ );
50
+ });
51
+ });
52
+ }
53
+
54
+ async function directoryExists(dir) {
55
+ try {
56
+ const stat = await fs.stat(dir);
57
+ return stat.isDirectory();
58
+ } catch {
59
+ return false;
60
+ }
61
+ }
62
+
63
+ async function isDirectoryEmpty(dir) {
64
+ const entries = await fs.readdir(dir);
65
+ return entries.length === 0;
66
+ }
67
+
68
+ async function walkFiles(dir, list = []) {
69
+ const entries = await fs.readdir(dir, { withFileTypes: true });
70
+ for (const entry of entries) {
71
+ const entryPath = path.join(dir, entry.name);
72
+ if (entry.isDirectory()) {
73
+ await walkFiles(entryPath, list);
74
+ } else {
75
+ list.push(entryPath);
76
+ }
77
+ }
78
+ return list;
79
+ }
80
+
81
+ function shouldReplacePlaceholders(filePath) {
82
+ return TEXT_EXTENSIONS.has(path.extname(filePath));
83
+ }
84
+
85
+ async function replacePlaceholders(rootDir, values) {
86
+ const files = await walkFiles(rootDir);
87
+
88
+ for (const file of files) {
89
+ if (!shouldReplacePlaceholders(file)) {
90
+ continue;
91
+ }
92
+
93
+ const input = await fs.readFile(file, "utf8");
94
+ let output = input;
95
+
96
+ for (const [key, value] of Object.entries(values)) {
97
+ output = output.replaceAll(`__${key}__`, value);
98
+ }
99
+
100
+ if (output !== input) {
101
+ await fs.writeFile(file, output, "utf8");
102
+ }
103
+ }
104
+ }
105
+
106
+ async function setupGit(targetDir, gitSetup) {
107
+ const setup = gitSetup ?? {
108
+ mode: "skip",
109
+ createGithubRepo: false,
110
+ githubRepo: "",
111
+ githubVisibility: "private",
112
+ };
113
+ const actions = [];
114
+ const warnings = [];
115
+
116
+ if (setup.mode === "skip") {
117
+ return { mode: "skip", actions, warnings };
118
+ }
119
+
120
+ const gitDir = path.join(targetDir, ".git");
121
+ const hasGit = await directoryExists(gitDir);
122
+ if (!hasGit) {
123
+ await runCommand("git", ["init"], targetDir);
124
+ actions.push("initialized local git repository");
125
+ await runCommand("git", ["symbolic-ref", "HEAD", "refs/heads/main"], targetDir, true);
126
+ } else {
127
+ actions.push("local git repository already exists");
128
+ }
129
+
130
+ if (setup.mode !== "github" || !setup.createGithubRepo) {
131
+ return { mode: setup.mode, actions, warnings };
132
+ }
133
+
134
+ const ghInstalled = await runCommand("gh", ["--version"], targetDir, true);
135
+ if (ghInstalled.code !== 0) {
136
+ warnings.push("GitHub CLI is not installed, skipped GitHub repository creation");
137
+ return { mode: setup.mode, actions, warnings };
138
+ }
139
+
140
+ const ghAuth = await runCommand("gh", ["auth", "status"], targetDir, true);
141
+ if (ghAuth.code !== 0) {
142
+ warnings.push("GitHub CLI is not authenticated, skipped GitHub repository creation");
143
+ return { mode: setup.mode, actions, warnings };
144
+ }
145
+
146
+ const repoName = (setup.githubRepo || path.basename(targetDir)).trim();
147
+ const visibility =
148
+ setup.githubVisibility && setup.githubVisibility.toLowerCase() === "public"
149
+ ? "--public"
150
+ : "--private";
151
+
152
+ const createRepo = await runCommand(
153
+ "gh",
154
+ ["repo", "create", repoName, visibility, "--source", targetDir, "--remote", "origin"],
155
+ targetDir,
156
+ true,
157
+ );
158
+
159
+ if (createRepo.code === 0) {
160
+ actions.push(`created GitHub repository '${repoName}'`);
161
+ } else {
162
+ warnings.push(
163
+ `failed to create GitHub repository '${repoName}': ${(createRepo.stderr || createRepo.stdout).trim()}`,
164
+ );
165
+ }
166
+
167
+ return { mode: setup.mode, actions, warnings };
168
+ }
169
+
170
+ export async function initProject({ cwd, templateRoot, target, tracker, force, gitSetup }) {
171
+ const targetDir = resolveTargetDir(cwd, target);
172
+ const exists = await directoryExists(targetDir);
173
+
174
+ if (exists) {
175
+ const empty = await isDirectoryEmpty(targetDir);
176
+ if (!empty && !force) {
177
+ throw new Error(`target directory is not empty: ${targetDir}. Use --force to overwrite.`);
178
+ }
179
+ } else {
180
+ await fs.mkdir(targetDir, { recursive: true });
181
+ }
182
+
183
+ await fs.cp(templateRoot, targetDir, {
184
+ recursive: true,
185
+ force,
186
+ errorOnExist: !force,
187
+ });
188
+
189
+ const projectName = path.basename(targetDir);
190
+ await replacePlaceholders(targetDir, {
191
+ PROJECT_NAME: projectName,
192
+ DEFAULT_TRACKER: tracker,
193
+ });
194
+
195
+ const git = await setupGit(targetDir, gitSetup);
196
+ return { targetDir, git };
197
+ }
package/src/sync.mjs ADDED
@@ -0,0 +1,46 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+
4
+ const MANAGED_PATHS = [
5
+ "agents.md",
6
+ "tracker-command-template.md",
7
+ ".meta-agents",
8
+ "tasks/backlog.md",
9
+ "tasks/sprint-1.md",
10
+ "tasks/task-status-log.md",
11
+ ];
12
+
13
+ async function exists(p) {
14
+ try {
15
+ await fs.access(p);
16
+ return true;
17
+ } catch {
18
+ return false;
19
+ }
20
+ }
21
+
22
+ export async function syncTemplate({ cwd, templateRoot, target, force }) {
23
+ const targetDir = path.resolve(cwd, target);
24
+ const updated = [];
25
+ const skipped = [];
26
+
27
+ for (const managedPath of MANAGED_PATHS) {
28
+ const source = path.join(templateRoot, managedPath);
29
+ const destination = path.join(targetDir, managedPath);
30
+ const destinationExists = await exists(destination);
31
+
32
+ if (destinationExists && !force) {
33
+ skipped.push(managedPath);
34
+ continue;
35
+ }
36
+
37
+ await fs.mkdir(path.dirname(destination), { recursive: true });
38
+ await fs.cp(source, destination, {
39
+ recursive: true,
40
+ force: true,
41
+ });
42
+ updated.push(managedPath);
43
+ }
44
+
45
+ return { targetDir, updated, skipped };
46
+ }
@@ -0,0 +1,21 @@
1
+ roles:
2
+ - name: "Chief of Staff Agent"
3
+ responsibility: "Оркестрация, блокеры, эскалации"
4
+ - name: "Agile Manager Agent"
5
+ responsibility: "CREATE_TASK/SET_STATUS/COMMIT_BY_NAME/ASSIGN_SPRINT"
6
+ - name: "Product Manager Agent"
7
+ responsibility: "PRD и acceptance criteria"
8
+ - name: "Solution Architect Agent"
9
+ responsibility: "Архитектура и контракты"
10
+ - name: "Verifier Designer Agent"
11
+ responsibility: "Модель проверки и evidence-план"
12
+ - name: "Decomposer Agent"
13
+ responsibility: "Декомпозиция на проверяемые компоненты"
14
+ - name: "Engineering Agent"
15
+ responsibility: "Реализация по контрактам"
16
+ - name: "QA Agent"
17
+ responsibility: "Верификация и тестирование"
18
+ - name: "Reviewer/Judge Agent"
19
+ responsibility: "Независимая приёмка"
20
+ - name: "Documentation Agent"
21
+ responsibility: "Синхронизация документации"
@@ -0,0 +1,48 @@
1
+ system:
2
+ name: "Meta Agents Verified Delivery"
3
+ process:
4
+ - clarify
5
+ - prd_step
6
+ - verification_design
7
+ - decomposition
8
+ - execution
9
+ - evidence
10
+ - acceptance
11
+ mandatory_prd_sections:
12
+ - description
13
+ - verifiability
14
+ - done
15
+ init_dialog:
16
+ required: true
17
+ ask_git_mode: true
18
+ ask_tracker_provider: true
19
+ git_modes:
20
+ - github
21
+ - local
22
+ - skip
23
+ offer_create_github_repo: true
24
+ governance:
25
+ user_confirmation_required_for:
26
+ - commit
27
+ - task_close_done
28
+ max_status_without_user_confirmation: READY
29
+ acceptance:
30
+ hard_criteria:
31
+ - prd_sections_complete
32
+ - auto_select_prefix_present
33
+ - strict_checks_passed
34
+ - statistical_thresholds_met
35
+ - human_approvals_passed
36
+ - evidence_pack_complete
37
+ - tracker_sync_complete
38
+ auto_select:
39
+ required: true
40
+ before_each_task: true
41
+ require_agent_name_prefix: true
42
+ prefix_order:
43
+ - agent_auto_select
44
+ - task_agent_name
45
+ prefix_format:
46
+ agent_auto_select: "[Agent Auto-Select] Selected: <agent role>; Reason: <short reason>"
47
+ task_agent_name: "[Task Agent] Name: <agent role>"
48
+ default_tracker: "__DEFAULT_TRACKER__"
@@ -0,0 +1,16 @@
1
+ tracker_gateway:
2
+ default: "__DEFAULT_TRACKER__"
3
+ providers:
4
+ github:
5
+ mode: "issues_projects"
6
+ enabled: true
7
+ mcp:
8
+ mode: "external_tracker_via_mcp"
9
+ enabled: true
10
+ aliases: ["mpc"]
11
+ custom:
12
+ mode: "custom_api_adapter"
13
+ enabled: true
14
+ local:
15
+ mode: "file_based"
16
+ enabled: true
@@ -0,0 +1,3 @@
1
+ Role: Agile Manager Agent
2
+ Goal: управлять задачами и статусами через TrackerGateway.
3
+ Commands: CREATE_TASK, SET_STATUS, COMMIT_BY_NAME, ASSIGN_SPRINT.
@@ -0,0 +1,3 @@
1
+ Role: Solution Architect Agent
2
+ Goal: предложить архитектуру и контракты компонентов.
3
+ Output: Architecture rationale + verification impact.
@@ -0,0 +1,3 @@
1
+ Role: Clarifier Agent
2
+ Goal: выявить цель, ограничения, неоднозначности и критерии успеха.
3
+ Output: PRD Step с заполненными "Описание" и "Проверяемость".
@@ -0,0 +1,3 @@
1
+ Role: Decomposer Agent
2
+ Goal: разбить систему на Verified Components.
3
+ Output: contracts + dependency graph.
@@ -0,0 +1,3 @@
1
+ Role: Reviewer/Judge Agent
2
+ Goal: независимая приёмка по критериям.
3
+ Output: accepted/rejected + findings.
@@ -0,0 +1,3 @@
1
+ Role: Verifier Designer Agent
2
+ Goal: определить strict/statistical/human проверки.
3
+ Output: verification plan и evidence mapping.
@@ -0,0 +1 @@
1
+ console.log("generate-prd-step placeholder: render PRD Step template for current stage.");
@@ -0,0 +1 @@
1
+ console.log("Project initialized with Meta Agents templates.");
@@ -0,0 +1 @@
1
+ console.log("sync-status placeholder: connect to tracker and refresh local status views.");
@@ -0,0 +1,4 @@
1
+ export async function createTask() { throw new Error("custom adapter: not implemented"); }
2
+ export async function setStatus() { throw new Error("custom adapter: not implemented"); }
3
+ export async function commitByName() { throw new Error("custom adapter: not implemented"); }
4
+ export async function assignSprint() { throw new Error("custom adapter: not implemented"); }
@@ -0,0 +1,4 @@
1
+ export async function createTask() { throw new Error("github adapter: not implemented"); }
2
+ export async function setStatus() { throw new Error("github adapter: not implemented"); }
3
+ export async function commitByName() { throw new Error("github adapter: not implemented"); }
4
+ export async function assignSprint() { throw new Error("github adapter: not implemented"); }
@@ -0,0 +1,4 @@
1
+ export async function createTask() { throw new Error("local adapter: not implemented"); }
2
+ export async function setStatus() { throw new Error("local adapter: not implemented"); }
3
+ export async function commitByName() { throw new Error("local adapter: not implemented"); }
4
+ export async function assignSprint() { throw new Error("local adapter: not implemented"); }
@@ -0,0 +1,4 @@
1
+ export async function createTask() { throw new Error("mcp adapter: not implemented"); }
2
+ export async function setStatus() { throw new Error("mcp adapter: not implemented"); }
3
+ export async function commitByName() { throw new Error("mcp adapter: not implemented"); }
4
+ export async function assignSprint() { throw new Error("mcp adapter: not implemented"); }
@@ -0,0 +1,12 @@
1
+ # Agent Work Contract
2
+
3
+ - Task ID:
4
+ - Component:
5
+ - Owner Role:
6
+ - Scope:
7
+ - Allowed Design Freedom:
8
+ - Required Outputs:
9
+ - Required Evidence:
10
+ - Acceptance Criteria:
11
+ - Failure/Escalation Rules:
12
+ - Tracker Binding (task/status/sprint):
@@ -0,0 +1,9 @@
1
+ # Evidence Pack
2
+
3
+ - Task ID:
4
+ - Build/Test artifacts:
5
+ - Eval metrics:
6
+ - Trace/Logs:
7
+ - Commit refs:
8
+ - Tracker refs:
9
+ - Residual risks:
@@ -0,0 +1,15 @@
1
+ ## PRD Step: <stage-name>
2
+
3
+ ### Описание
4
+ - Что и зачем делаем на этапе.
5
+
6
+ ### Проверяемость
7
+ - strict:
8
+ - statistical:
9
+ - human:
10
+ - evidence:
11
+
12
+ ### Что сделано
13
+ - [ ] Не начато
14
+ - Артефакты:
15
+ - Проверки:
@@ -0,0 +1,12 @@
1
+ # Sprint
2
+
3
+ - Sprint ID:
4
+ - Status: PLANNED
5
+ - Goal:
6
+
7
+ ## Tasks
8
+ | Task ID | Short Name | Owner | Status | Notes |
9
+ |---|---|---|---|---|
10
+
11
+ ## Progress Log
12
+ - YYYY-MM-DD: Sprint created
@@ -0,0 +1,26 @@
1
+ # Task
2
+
3
+ - Task ID:
4
+ - Short Name:
5
+ - Owner Role:
6
+ - Status: TODO
7
+ - Sprint:
8
+
9
+ ## PRD Step
10
+ ### Описание
11
+ -
12
+ ### Проверяемость
13
+ - strict:
14
+ - statistical:
15
+ - human:
16
+ ### Что сделано
17
+ - [ ] Не начато
18
+
19
+ ## Dependencies
20
+ -
21
+
22
+ ## Evidence
23
+ -
24
+
25
+ ## Progress Log
26
+ - YYYY-MM-DD: created
@@ -0,0 +1,15 @@
1
+ # Verification Plan
2
+
3
+ ## Scope
4
+ -
5
+
6
+ ## Checks
7
+ - strict:
8
+ - statistical:
9
+ - human:
10
+
11
+ ## Metrics & Thresholds
12
+ -
13
+
14
+ ## Evidence Mapping
15
+ - criterion -> proof artifact
@@ -0,0 +1,23 @@
1
+ # __PROJECT_NAME__
2
+
3
+ Проект инициализирован шаблоном `meta-agents-template`.
4
+
5
+ ## Что уже подключено
6
+ - `agents.md`: роли, правила и жёсткие критерии приёмки;
7
+ - `tracker-command-template.md`: команды управления задачами и спринтами;
8
+ - `.meta-agents/`: конфигурация системы и шаблоны PRD/verification;
9
+ - `tasks/`: backlog/sprint/status-log.
10
+
11
+ ## Что спросит init
12
+ 1. Git режим: `github`, `local` или `skip`.
13
+ 2. Нужно ли создать GitHub-репозиторий сразу.
14
+ 3. Какой трекер выбрать по умолчанию.
15
+
16
+ ## Обязательные правила
17
+ 1. Каждый шаг содержит: `Описание -> Проверяемость -> Что сделано`.
18
+ 2. Перед каждой задачей обязателен вывод `[Agent Auto-Select]` и `[Task Agent]`.
19
+ 3. Коммиты и закрытие задачи в `DONE` только после явного подтверждения пользователя.
20
+ 4. Без подтверждения пользователя максимум статуса: `READY`.
21
+
22
+ ## Команды
23
+ Смотри `tracker-command-template.md`.
@@ -0,0 +1,141 @@
1
+ # agents.md
2
+
3
+ ## 1) Назначение системы
4
+ Система работает как мета-оркестрация разработки: сначала формализуем задачу и проверяемость, потом делаем реализацию.
5
+
6
+ Базовый поток:
7
+ `clarify -> PRD step -> verification design -> decomposition -> execution -> evidence -> acceptance`
8
+
9
+ Главный принцип:
10
+ `acceptance-first` и `verification-first`.
11
+
12
+ ## 2) Обязательный PRD на каждом шаге
13
+ Каждый этап (уточнение, архитектура, декомпозиция, реализация, ревью) обязан иметь PRD-запись в строгом порядке:
14
+
15
+ 1. `Описание`.
16
+ 2. `Проверяемость`.
17
+ 3. `Что сделано`.
18
+
19
+ Правило запуска этапа:
20
+ - если не заполнены `Описание` и `Проверяемость`, этап не стартует.
21
+
22
+ ## 3) Роли агентов
23
+ - `Chief of Staff Agent`: оркестрация цепочки, приоритеты, блокеры, эскалации.
24
+ - `Agile Manager Agent`: операции по задачам/спринтам/статусам/коммитам через трекер.
25
+ - `Product Manager Agent`: формулирует PRD и критерии приёмки.
26
+ - `Solution Architect Agent`: проектирует архитектуру и контракты компонентов.
27
+ - `Verifier Designer Agent`: проектирует модель валидации и evidence-план.
28
+ - `Decomposer Agent`: режет систему на проверяемые компоненты.
29
+ - `Engineering Agent`: реализация по контракту.
30
+ - `QA Agent`: проверка выполнения критериев и качество тестового покрытия.
31
+ - `Reviewer/Judge Agent`: независимая приёмка по заранее согласованным правилам.
32
+ - `Documentation Agent`: поддержка и синхронизация артефактов.
33
+
34
+ ## 4) Жёсткий Auto-Select и показ имени агента
35
+ Автовыбор агента обязателен перед каждой задачей и перед каждой командой (`CREATE_TASK`, `SET_STATUS`, `COMMIT_BY_NAME`, `ASSIGN_SPRINT`).
36
+
37
+ Обязательный префикс:
38
+ ```text
39
+ [Agent Auto-Select]
40
+ Selected: <agent role>
41
+ Reason: <short reason>
42
+
43
+ [Task Agent]
44
+ Name: <agent role>
45
+ ```
46
+
47
+ Правило исполнения:
48
+ - если префикс не выведен, задача/команда не выполняется;
49
+ - если пользователь явно указал роль, она используется, но блок `Task Agent` обязателен.
50
+
51
+ ## 5) Единица работы: Verified Component
52
+ Каждый компонент обязан иметь:
53
+ - цель;
54
+ - входы/выходы;
55
+ - ограничения и инварианты;
56
+ - критерии приёмки;
57
+ - стратегию проверки;
58
+ - required evidence;
59
+ - владельца компонента;
60
+ - ссылку на PRD-этап.
61
+
62
+ ## 6) Типы валидации
63
+ - `strict`: схемы, типы, правила, инварианты, policy, state transitions.
64
+ - `statistical`: benchmark/метрики/judge score/пороговые значения.
65
+ - `human`: review/approval в рискованных и неоднозначных точках.
66
+
67
+ ## 7) AgentWorkContract
68
+ Перед передачей задачи Executor-агенту фиксируется контракт:
69
+ - scope;
70
+ - допустимая свобода решений;
71
+ - required outputs;
72
+ - required evidence;
73
+ - acceptance criteria;
74
+ - failure/escalation правила;
75
+ - трекерная привязка (`task_id`, `tracker_provider`, `sprint`).
76
+
77
+ Без контракта делегирование запрещено.
78
+
79
+ ## 8) TrackerGateway
80
+ Трекер выделяется в отдельный адаптерный слой, независимый от ролей агентов.
81
+
82
+ `TrackerGateway` поддерживает провайдеры:
83
+ - `local`;
84
+ - `github`;
85
+ - `mcp` (alias `mpc`);
86
+ - `custom`.
87
+
88
+ Режим по умолчанию для командной работы: `__DEFAULT_TRACKER__` (или другой внешний трекер). `local` используется как fallback.
89
+
90
+ ## 9) Канонические команды
91
+ Все рабочие операции проходят через `Agile Manager Agent` + `TrackerGateway`.
92
+ Операционные шаблоны команд: [tracker-command-template.md](./tracker-command-template.md).
93
+
94
+ 1. `CREATE_TASK`
95
+ 2. `SET_STATUS`
96
+ 3. `COMMIT_BY_NAME`
97
+ 4. `ASSIGN_SPRINT`
98
+
99
+ ## 10) Коммиты и закрытие задач: только по подтверждению пользователя
100
+ Запрещено выполнять автоматически:
101
+ - `COMMIT_BY_NAME`;
102
+ - перевод задачи в `DONE`.
103
+
104
+ Обязательное правило:
105
+ - `COMMIT_BY_NAME` выполняется только после явного подтверждения пользователя в текущем диалоге;
106
+ - `SET_STATUS -> DONE` выполняется только после явного подтверждения пользователя в текущем диалоге;
107
+ - без подтверждения пользователя максимум допустимого статуса: `READY`.
108
+
109
+ ## 11) Жёсткие критерии приёмки (все обязательны)
110
+ Задача принимается только если одновременно выполнены все условия:
111
+ 1. Заполнены все PRD-блоки этапа: `Описание`, `Проверяемость`, `Что сделано`.
112
+ 2. Выполнен обязательный префикс `Agent Auto-Select` + `Task Agent`.
113
+ 3. Пройдены все обязательные `strict` проверки.
114
+ 4. `statistical` метрики не ниже зафиксированных порогов.
115
+ 5. Пройдены обязательные `human` approvals.
116
+ 6. Собран полный evidence-пакет (артефакты, логи, ссылки на проверки).
117
+ 7. Синхронизированы `task/status/sprint` в трекере.
118
+ 8. Если был коммит, есть явное подтверждение пользователя на коммит.
119
+ 9. Если задача закрыта в `DONE`, есть явное подтверждение пользователя на закрытие.
120
+
121
+ Если хотя бы один критерий не выполнен, задача не принимается.
122
+
123
+ ## 12) Verification-first gate
124
+ Реализация не начинается, пока не определены:
125
+ - acceptance criteria;
126
+ - метрики и пороги;
127
+ - инварианты и ограничения;
128
+ - процедуры проверки;
129
+ - зоны неопределённости и правила эскалации;
130
+ - способ фиксации в трекере.
131
+
132
+ ## 13) Реакция на провал проверки
133
+ Допустимые сценарии:
134
+ - `retry` с корректировками;
135
+ - пересмотр архитектуры;
136
+ - уточнение критериев;
137
+ - эскалация пользователю/founder;
138
+ - возврат статуса задачи в `IN_PROGRESS` или `BLOCKED`.
139
+
140
+ ## 14) Главный инвариант
141
+ Нельзя делегировать работу и нельзя закрывать задачу без формализованных критериев приёмки, PRD-блока `Проверяемость` и требуемых доказательств в трекере.
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "__PROJECT_NAME__",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "meta:status": "node .meta-agents/scripts/sync-status.mjs"
7
+ }
8
+ }
@@ -0,0 +1,4 @@
1
+ # Backlog
2
+
3
+ | Task ID | Short Name | Owner | Status | Notes |
4
+ |---|---|---|---|---|