parallel-executor
npx skills add https://github.com/davjdk/thermocalcbot --skill parallel-executor
Agent 安装分布
Skill 文档
Parallel Executor Skill
ÐазнаÑение: ÐÑполнÑÐµÑ Ð½ÐµÐ·Ð°Ð²Ð¸ÑимÑе ÑÑÐ°Ð¿Ñ Ð¢Ð Ð¿Ð°ÑаллелÑно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑбагенÑов.
ÐлÑÑÐµÐ²Ð°Ñ Ð¾ÑобенноÑÑÑ: Real-time incremental apply â Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿ÑименÑÑÑÑÑ Ð¼Ð³Ð½Ð¾Ð²ÐµÐ½Ð½Ð¾ по меÑе завеÑÑÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ агенÑа, обеÑпеÑÐ¸Ð²Ð°Ñ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½ÑÑ Ð¾Ð±ÑаÑнÑÑ ÑвÑзÑ.
Ðогда иÑполÑзоваÑÑ
- ÐолÑзоваÑÐµÐ»Ñ Ð·Ð°Ð¿ÑаÑиваеÑ: “ÑеализÑй ТРпаÑаллелÑно”, “implement spec in parallel”
- Spec-Ñайл ÑодеÑÐ¶Ð¸Ñ â¥2 ÑÑапов
- ÐÑÐ°Ð¿Ñ Ð½Ðµ конÑликÑÑÑÑ Ð¿Ð¾ Ñайлам
ÐлгоÑиÑм ÑабоÑÑ
1. ÐагÑÑзка ÑпеÑиÑикаÑии
ÐпÑеделиÑÑ ÑекÑÑÑÑ Ð²ÐµÑкÑ:
git branch --show-current
ÐагÑÑзиÑÑ spec-Ñайл:
.ai/specs/{branch-name}.md
2. Ðнализ завиÑимоÑÑей
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑÑапа ÑпеÑиÑикаÑии извлеÑÑ:
- СÑаÑÑÑ â ÑолÑко ⬠(не наÑаÑ) или ð (в ÑабоÑе)
- Ð¤Ð°Ð¹Ð»Ñ â ÑекÑÐ¸Ñ “Файлє в ÑÑапе
ÐоÑÑÑоиÑÑ Ð¼Ð°ÑÑиÑÑ ÐºÐ¾Ð½ÑликÑов:
| ÐÑап A | ÐÑап B | ÐонÑликÑ? |
|---|---|---|
| Stage1 | Stage2 | Ðа, еÑли пеÑеÑекаÑÑÑÑ ÑÐ°Ð¹Ð»Ñ |
| Stage1 | Stage3 | ÐеÑ, ÑÐ°Ð¹Ð»Ñ ÑазнÑе |
ÐÑавило: ÐÑÐ°Ð¿Ñ Ð¼Ð¾Ð³ÑÑ Ð²ÑполнÑÑÑÑÑ Ð¿Ð°ÑаллелÑно âï¸ Ð¸Ñ ÑÐ°Ð¹Ð»Ñ Ð½Ðµ пеÑеÑекаÑÑÑÑ.
3. ТопологиÑеÑÐºÐ°Ñ ÑоÑÑиÑовка
РазбиÑÑ ÑÑÐ°Ð¿Ñ Ð½Ð° ÑÑовни паÑаллелизма:
УÑÐ¾Ð²ÐµÐ½Ñ 0: [Stage1, Stage3] â могÑÑ Ð²ÑполнÑÑÑÑÑ Ð¿Ð°ÑаллелÑно
УÑÐ¾Ð²ÐµÐ½Ñ 1: [Stage2] â завиÑÐ¸Ñ Ð¾Ñ Stage1
УÑÐ¾Ð²ÐµÐ½Ñ 2: [Stage4] â завиÑÐ¸Ñ Ð¾Ñ Stage2
4. ÐапÑÑк паÑаллелÑнÑÑ Ð°Ð³ÐµÐ½Ñов
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑÑапа на ÑекÑÑем ÑÑовне ÑоздаÑÑ ÑÑбагенÑа:
# ЧеÑез Task tool
Task(
subagent_type="general-purpose",
prompt=f"""
ÐÑполни ÑÑап {stage_name} из ÑпеÑиÑикаÑии {spec_file}.
## ÐÑавила ÑÑеймвоÑка
1. РабоÑай в ÑамкаÑ
одного коммиÑа (â¤250 ÑÑÑок изменений)
2. ÐÑполÑзÑй conventional commits: feat:, fix:, refactor:, test:
3. ÐапÑÑкай ÑеÑÑÑ Ð¿ÐµÑед коммиÑом
4. ÐРобновлÑй CHANGELOG.md (обновлÑеÑÑÑ ÑолÑко пÑи merge)
5. ÐÑе пÑавила из CLAUDE.md обÑзаÑелÑÐ½Ñ Ðº иÑполнениÑ
## ÐÑап Ð´Ð»Ñ Ð²ÑполнениÑ
{stage_content}
## ТÑебÑемÑй ÑезÑлÑÑаÑ
1. РеализÑй вÑе задаÑи ÑÑапа
2. ÐапÑÑÑи ÑеÑÑÑ
3. Создай ÐºÐ¾Ð¼Ð¼Ð¸Ñ ÑеÑез commit-helper
4. Ðбнови ÑÑаÑÑÑ ÑÑапа в spec на â
""",
run_in_background=True # паÑаллелÑное вÑполнение
)
Ðажно: ÐеÑедаÑÑ Ð²Ñе агенÑÑ Ð² одном ÑообÑении Ð´Ð»Ñ Ð¸ÑÑинного паÑаллелизма:
[Task tool Ð´Ð»Ñ Ð°Ð³ÐµÐ½Ñа 1]
[Task tool Ð´Ð»Ñ Ð°Ð³ÐµÐ½Ñа 2]
[Task tool Ð´Ð»Ñ Ð°Ð³ÐµÐ½Ñа 3]
5. ÐониÑоÑинг и пÑименение изменений
Ð¡Ð¾Ñ ÑаниÑÑ task_id Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ агенÑа:
task_ids = [agent1.id, agent2.id, agent3.id]
Режим 1: Real-time Incremental Apply (ÑекомендÑеÑÑÑ)
ÐÑименÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð³Ð½Ð¾Ð²ÐµÐ½Ð½Ð¾ по меÑе завеÑÑÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ агенÑа:
import time
pending_tasks = {task_id: stage_name for task_id, stage_name in zip(task_ids, stage_names)}
applied_stages = []
while pending_tasks:
for task_id in list(pending_tasks.keys()):
result = TaskOutput(task_id=task_id, block=False)
if result.get("status") == "completed":
# ÐÐ³ÐµÐ½Ñ Ð·Ð°Ð²ÐµÑÑилÑÑ â пÑименÑем Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾
stage_name = pending_tasks[task_id]
# Ðзвлекаем ÑгенеÑиÑованнÑй код из ÑезÑлÑÑаÑа
generated_files = extract_code_from_result(result)
# ÐÑименÑем ÑеÑез Write/Edit
for file_path, content in generated_files.items():
if content.get("action") == "create":
Write(file_path=file_path, content=content["code"])
elif content.get("action") == "edit":
Edit(file_path=file_path, old_string=content["old"], new_string=content["new"])
applied_stages.append(stage_name)
del pending_tasks[task_id]
print(f"â
{stage_name} пÑименÑн ({len(applied_stages)}/{len(task_ids)})")
time.sleep(2) # Polling interval
ÐÑеимÑÑеÑÑва real-time apply:
- ÐÐ³Ð½Ð¾Ð²ÐµÐ½Ð½Ð°Ñ Ð¾Ð±ÑаÑÐ½Ð°Ñ ÑвÑÐ·Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ
- Раннее обнаÑÑжение конÑликÑов
- ÐозможноÑÑÑ Ð¿ÑодолжиÑÑ ÑабоÑÑ Ð´Ð°Ð¶Ðµ еÑли один Ð°Ð³ÐµÐ½Ñ Ñпал
- ÐолÑзоваÑÐµÐ»Ñ Ð²Ð¸Ð´Ð¸Ñ Ð¿ÑогÑеÑÑ Ð² ÑеалÑном вÑемени
Режим 2: Batch Apply (ÑÑадиÑионнÑй)
ÐдаÑÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð²ÑÐµÑ Ð°Ð³ÐµÐ½Ñов, заÑем пÑименÑÑÑ:
all_results = []
for task_id in task_ids:
result = TaskOutput(task_id=task_id, block=True)
all_results.append(result)
# ÐÑименÑем вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñазом
for result in all_results:
apply_changes_from_result(result)
6. Ð¡Ð±Ð¾Ñ ÑезÑлÑÑаÑов
ÐозможнÑе иÑÑ Ð¾Ð´Ñ:
- â ÐÑе ÑÑÐ°Ð¿Ñ ÑÑпеÑно â пеÑейÑи к ÑледÑÑÑÐµÐ¼Ñ ÑÑовнÑ
- â ï¸ Ð§Ð°ÑÑиÑнÑй ÑÑÐ¿ÐµÑ â заÑикÑиÑоваÑÑ Ð¾Ñибки, пÑедложиÑÑ Ð¿Ð¾Ð²ÑоÑ
- â ÐонÑÐ»Ð¸ÐºÑ Ð¿Ñи merge â иÑполÑзоваÑÑ git-merge ÑÑÑаÑегиÑ
7. ÐбÑабоÑка конÑликÑов
ÐÑли агенÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð¸ одни и Ñе же ÑайлÑ:
# ÐопÑÑка авÑо-merge
git merge agent1-branch --no-edit
# ÐÑли конÑÐ»Ð¸ÐºÑ â ÑведомиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ
echo "ÐбнаÑÑжен конÑÐ»Ð¸ÐºÑ Ð² {Ñайл}"
echo "ÐÐ³ÐµÐ½Ñ 1: {изменениÑ}"
echo "ÐÐ³ÐµÐ½Ñ 2: {изменениÑ}"
echo "ТÑебÑеÑÑÑ ÑÑÑное ÑазÑеÑение"
8. ÐеÑÐµÑ Ð¾Ð´ к ÑледÑÑÑÐµÐ¼Ñ ÑÑовнÑ
ÐовÑоÑиÑÑ Ñаги 4-7 Ð´Ð»Ñ ÑледÑÑÑего ÑÑÐ¾Ð²Ð½Ñ Ð¿Ð°Ñаллелизма.
ÐÑÐ¸Ð¼ÐµÑ ÑÑенаÑиÑ
Spec: feature-user-dashboard.md
ÐÑапÑ:
- Mock OAuth (ÑайлÑ:
src/api/routes/oauth_mock.py) - Dashboard Page (ÑайлÑ:
src/web/dashboard/,src/templates/dashboard.html) - Admin Panel (ÑайлÑ:
src/api/routes/admin.py)
Ðнализ:
- ÐÑап 1 и ÐÑап 2: â паÑаллелÑно (ÑазнÑе ÑайлÑ)
- ÐÑап 1 и ÐÑап 3: â паÑаллелÑно (ÑазнÑе ÑайлÑ)
- ÐÑап 2 и ÐÑап 3: â паÑаллелÑно (ÑазнÑе ÑайлÑ)
РезÑлÑÑаÑ: ÐÑе 3 ÑÑапа на УÑовне 0 â запÑÑÑиÑÑ 3 агенÑа паÑаллелÑно
ÐгÑаниÑениÑ
- ÐакÑимÑм 3 агенÑа одновÑеменно (наÑÑÑаиваеÑÑÑ Ð²
ai-settings.json) - Sandbox огÑаниÑениÑ: СÑбагенÑÑ Ð½Ðµ могÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð¿Ð¸ÑаÑÑ ÑÐ°Ð¹Ð»Ñ (Write/Edit) из-за безопаÑноÑÑи
- Workaround: ÐгенÑÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ ÐºÐ¾Ð´ как ÑекÑÑ, главнÑй Ð°Ð³ÐµÐ½Ñ Ð¿ÑименÑÐµÑ ÑеÑез Write/Edit
- Real-time apply ÑабоÑÐ°ÐµÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°ÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¼Ñ Ð°Ð³ÐµÐ½ÑÑ, коÑоÑÑй пÑименÑÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð³Ð½Ð¾Ð²ÐµÐ½Ð½Ð¾
- ÐаждÑй Ð°Ð³ÐµÐ½Ñ ÑабоÑÐ°ÐµÑ Ð² Ñвоей веÑке:
parallel/{stage-name}/{timestamp} - ÐаждÑй Ð°Ð³ÐµÐ½Ñ ÑоздаÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸ÑимÑй коммиÑ
- CHANGELOG обновлÑеÑÑÑ ÑолÑко пÑи merge вÑÐµÑ ÑÑапов
ÐонÑигÑÑаÑиÑ
.ai/ai-settings.json:
{
"parallel": {
"enabled": true,
"min_parallel_stages": 2,
"max_concurrent_agents": 3,
"conflict_resolution": "git-merge",
"commit_strategy": "independent",
"apply_mode": "realtime"
}
}
ÐаÑамеÑÑ apply_mode:
"realtime"â пÑименÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð³Ð½Ð¾Ð²ÐµÐ½Ð½Ð¾ по меÑе завеÑÑÐµÐ½Ð¸Ñ Ð°Ð³ÐµÐ½Ñов (ÑекомендÑеÑÑÑ)"batch"â пÑименÑÑÑ Ð²Ñе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле завеÑÑÐµÐ½Ð¸Ñ Ð²ÑÐµÑ Ð°Ð³ÐµÐ½Ñов
ÐÐ¾Ð´Ñ Ð²Ð¾Ð·Ð²ÑаÑа
| Ðод | ÐнаÑение | ÐейÑÑвие |
|---|---|---|
| 0 | УÑÐ¿ÐµÑ | СледÑÑÑий ÑÑÐ¾Ð²ÐµÐ½Ñ |
| 1 | ЧаÑÑиÑнÑй ÑÑÐ¿ÐµÑ | ÐовÑоÑиÑÑ Ð½ÐµÑдаÑнÑе ÑÑÐ°Ð¿Ñ |
| 2 | ÐонÑÐ»Ð¸ÐºÑ merge | ÐапÑоÑиÑÑ ÑазÑеÑение Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ |
| 3 | ÐÑибка агенÑа | Ðоги + пÑедложение алÑÑеÑнаÑÐ¸Ð²Ñ |
ÐнÑегÑаÑÐ¸Ñ Ñ Ð´ÑÑгими skills
- session-loader: ÐагÑÑÐ¶Ð°ÐµÑ spec пеÑед паÑаллелÑнÑм вÑполнением
- commit-helper: ÐÑзÑваеÑÑÑ ÐºÐ°Ð¶Ð´Ñм агенÑом Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¼Ð¸Ñа
- merge-helper: ФиналÑнÑй merge вÑÐµÑ Ð¿Ð°ÑаллелÑнÑÑ Ð²ÐµÑок
ÐиагноÑÑика
ÐÑи оÑÐ¸Ð±ÐºÐ°Ñ Ð¿ÑовеÑиÑÑ:
# СÑаÑÑÑ Ð²ÑеÑ
паÑаллелÑнÑÑ
веÑок
git branch | grep parallel
# ÐонÑликÑÑ Ð² ÑекÑÑей веÑке
git status
# Ðоги агенÑов
ls -la .claude/logs/parallel/
Post-Execution Consolidation (Auto-Triggered)
ÐоÑле завеÑÑÐµÐ½Ð¸Ñ Ð²ÑÐµÑ ÑÑапов авÑомаÑиÑеÑки запÑÑкаеÑÑÑ ÐºÐ¾Ð½ÑолидаÑÐ¸Ñ ÑеÑÑии:
# РконÑе parallel-executor, поÑле завеÑÑÐµÐ½Ð¸Ñ Ð²ÑеÑ
ÑÑапов
if all_stages_complete():
Skill(skill="session-consolidator")
ЧÑо Ð´ÐµÐ»Ð°ÐµÑ session-consolidator
- ÐапÑÑÐºÐ°ÐµÑ ÑÑбагенÑа в ÑиÑÑом конÑекÑÑе â анализ пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð±ÐµÐ· влиÑÐ½Ð¸Ñ Ð¸ÑÑоÑии ÑекÑÑей ÑеÑÑии
- СобиÑÐ°ÐµÑ Ð¸ÑÑоÑÐ¸Ñ ÑеÑÑии â spec, git log, Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñайлов
- ÐнализиÑÑÐµÑ ÑооÑвеÑÑÑвие Ð¿Ð°Ð¹Ð¿Ð»Ð°Ð¹Ð½Ñ â пÑовеÑка вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñавил из CLAUDE.md
- ÐÑÑвлÑÐµÑ Ð½ÐµÑÑноÑÑи â докÑменÑÑ ambiguities и ÑеÑениÑ
- СоздаÑÑ Ð¾ÑÑÑÑ â
.ai/specs/archive/{branch-name}-session-summary.md
РезÑлÑÑÐ°Ñ ÐºÐ¾Ð½ÑолидаÑии
â
Session consolidation complete
ð Report: .ai/specs/archive/{branch-name}-session-summary.md
ð¿ Branch: {branch-name}
ð Compliance Score: {X}/10
ÐонÑигÑÑаÑиÑ
ÐвÑо-запÑÑк конÑÑолиÑÑеÑÑÑ Ð½Ð°ÑÑÑойкой в .ai/ai-settings.json:
{
"framework": {
"session_consolidation": {
"enabled": true,
"auto_trigger_after_parallel": true
}
}
}
ÐÑли нÑжно оÑклÑÑиÑÑ Ð°Ð²Ñо-запÑÑк, ÑÑÑановиÑе auto_trigger_after_parallel: false.