| name | trae-orchestrator |
| description | Orchestrates TRAE IDE for automated software development with multi-agent collaboration. Invoke when user wants to develop software using TRAE or needs automated project management. |
TRAE Orchestrator
Automated software development controller that orchestrates TRAE IDE for fully autonomous project delivery.
When to Invoke
- User wants to develop software using TRAE
- User needs automated project management
- User provides software requirements and project directory
- User asks for multi-agent development workflow
- User wants to automate TRAE with Python scripts
Quick Start (Recommended)
One-Line Project Launch
from automation_helper import quick_start
quick_start(
project_dir='D:\\MyProject',
requirements={
'name': '我的项目',
'description': '项目描述...',
'features': ['功能1', '功能2'],
'tech_stack': 'Node.js + React'
}
)
This will:
- ✅ Create project structure
- ✅ Create requirements.md
- ✅ Create prompt for TRAE
- ✅ Launch TRAE IDE
- ✅ Send development task to TRAE
Automation Helper Module
A practical Python module (automation_helper.py) is provided for easy automation:
TRAEController - IDE Controller
from automation_helper import TRAEController
controller = TRAEController()
controller = TRAEController('E:\\software\\Trae CN\\Trae CN.exe')
controller.setup('E:\\software\\Trae CN\\Trae CN.exe')
controller.launch('D:\\MyProject')
controller.send_prompt("Create a web app...", delay=5)
ProjectManager - Project Setup
from automation_helper import ProjectManager
ProjectManager.create_project(
project_dir='D:\\MyProject',
requirements={
'name': '星空篝火游戏',
'description': '多人联机游戏',
'features': ['3D场景', '多人联机', '聊天系统'],
'tech_stack': 'Three.js + Node.js'
}
)
ProjectManager.create_prompt('D:\\MyProject')
ProgressMonitor - Monitor Progress
from automation_helper import ProgressMonitor
monitor = ProgressMonitor('D:\\MyProject')
if monitor.check_signal('project_done'):
print("Project complete!")
status = monitor.get_status()
print(status)
monitor.wait_for_completion(timeout=3600)
User Control Functions
from automation_helper import pause_project, resume_project, stop_project
pause_project('D:\\MyProject')
resume_project('D:\\MyProject')
stop_project('D:\\MyProject')
Token Optimization Strategy
CRITICAL: Minimize openclaw Token Usage
| openclaw Does | TRAE Does (Free) |
|---|
| Orchestrate workflow | All code generation |
| Read only: task_plan.md, progress.md | Read/write all source files |
| Send prompts | Execute prompts |
| Detect completion | Self-check quality |
| Intervene on loops | Auto-fix bugs (3 attempts) |
Event-Driven Completion Detection (No Polling!)
DO NOT poll every 30 seconds. Use these efficient methods:
Method 1: Signal File (Most Efficient)
TRAE creates a signal file when done - openclaw only checks if file exists:
# In prompt, instruct TRAE:
"When phase complete, create file: .trae-docs/.signal_{PHASE}_DONE"
# openclaw checks:
if os.path.exists('.trae-docs/.signal_planning_done'):
# Phase complete, read progress.md once
# Delete signal file after reading
Token cost: 0 (file existence check is free)
Method 2: File Modification Time
Only read when timestamp changes:
last_mtime = 0
def check_progress():
global last_mtime
current_mtime = os.path.getmtime('.trae-docs/progress.md')
if current_mtime > last_mtime:
last_mtime = current_mtime
return read_file('.trae-docs/progress.md')
return None
Token cost: 0 until file actually changes
Method 3: Watchdog File Monitor (Background)
Use filesystem events instead of polling:
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class ProgressHandler(FileSystemEventHandler):
def on_modified(self, event):
if 'progress.md' in event.src_path:
content = read_file(event.src_path)
process_status(content)
observer = Observer()
observer.schedule(ProgressHandler(), path='.trae-docs/')
observer.start()
Token cost: 0 until file changes, then only 1 read
Recommended: Signal File + Timestamp Combo
┌─────────────────────────────────────────────────────────┐
│ TRAE completes task │
│ ↓ │
│ TRAE creates .signal_done (empty file) │
│ ↓ │
│ openclaw detects signal file exists (0 tokens) │
│ ↓ │
│ openclaw reads progress.md once │
│ ↓ │
│ openclaw deletes signal file │
│ ↓ │
│ openclaw sends next prompt │
└─────────────────────────────────────────────────────────┘
First-Time Setup
Step 1: Get TRAE Installation Path
Ask user: "Please provide the TRAE installation directory path"
Example: "C:\Users\XXX\AppData\Local\Programs\Trae CN"
Step 2: Verify and Save
- Check if directory contains
Trae CN.exe
- Launch TRAE to verify it works
- Save to
config.json:
{
"trae_install_path": "USER_PROVIDED_PATH",
"trae_executable": "Trae CN.exe",
"window_identifier": "Trae CN",
"max_instances": 3,
"version": "1.0.0"
}
Project Structure
{project_dir}/
├── .trae-docs/
│ ├── requirements.md # User requirements
│ ├── architecture.md # System design
│ ├── task_plan.md # Development plan
│ ├── progress.md # Current status (openclaw reads this)
│ └── review_log.md # Review history
└── src/ # Generated code (TRAE manages)
Super-Efficient Workflow
Phase 1: Planning (One Prompt)
Send single comprehensive prompt:
Develop [SOFTWARE_TYPE] with these requirements:
[REQUIREMENTS]
Tech stack: [TECHNOLOGIES]
INSTRUCTIONS:
1. Create .trae-docs/architecture.md with system design
2. Create .trae-docs/task_plan.md with task breakdown
3. Create .trae-docs/progress.md with initial status
4. Each task must be completable within 200k tokens
5. Include acceptance criteria for each task
6. Mark task dependencies clearly
COMPLETION SIGNAL:
When done, create empty file: .trae-docs/.signal_planning_done
Also update progress.md with:
STATUS: PLANNING_COMPLETE
TASKS_TOTAL: N
ESTIMATED_TOKENS: N
Use SOLO mode. Work autonomously.
Detection: Check if .signal_planning_done exists (0 tokens), then read progress.md once.
Phase 2: Batch Implementation
Send tasks in batches (not one by one):
BATCH IMPLEMENTATION - Tasks [START_ID] to [END_ID]
Read .trae-docs/task_plan.md for task details.
For each task:
1. Implement following architecture.md
2. Write unit tests
3. Update progress.md with completion status
4. Mark task as [x] in task_plan.md
COMPLETION SIGNAL:
After ALL tasks in batch:
1. Create empty file: .trae-docs/.signal_batch_[N]_done
2. Update progress.md with:
STATUS: BATCH_[N]_COMPLETE
COMPLETED_TASKS: [IDs]
REMAINING_TASKS: [IDs]
Work autonomously in SOLO mode.
Detection: Check if .signal_batch_N_done exists (0 tokens), then read progress.md once.
Phase 3: Self-Review
Let TRAE review itself:
SELF-REVIEW PHASE
Review all implemented code:
1. Check against requirements.md
2. Run all tests
3. Check code quality
4. Document issues in review_log.md
If issues found:
- Fix them automatically
- Re-run tests
- Update review_log.md
COMPLETION SIGNAL:
When done, create empty file: .trae-docs/.signal_review_done
Also update progress.md with:
STATUS: REVIEW_COMPLETE
ISSUES_FOUND: N
ISSUES_FIXED: N
If blocked, create: .trae-docs/.signal_blocked
And update progress.md with:
STATUS: BLOCKED
BLOCKER: [description]
Detection: Check if .signal_review_done or .signal_blocked exists (0 tokens), then read progress.md once.
Minimal Intervention Protocol
Intervention Triggers (Signal-Based)
| Signal File | Action |
|---|
.signal_blocked | Read blocker description, provide guidance |
.signal_need_clarification | Ask user for input |
.signal_error_loop | Read error log, send new approach |
.signal_context_full | Start new conversation with checkpoint |
No Intervention Needed When
- No signal files present (TRAE is working)
.signal_batch_N_done exists (normal progress)
- Files are being modified (active development)
Timeout Fallback
Only if no signal file and no file changes for 10+ minutes:
if no_signal_files() and file_age('progress.md') > 600:
screenshot = capture_trae_window()
if "产物汇总" in screenshot:
create_signal_file('.signal_done')
elif is_idle(screenshot):
create_signal_file('.signal_blocked')
Error Handling
Bug-Fix Loop (3+ attempts detected via .signal_error_loop)
ALTERNATIVE APPROACH for [BUG_ID]
Previous attempts failed. Try:
1. [DIFFERENT_APPROACH]
2. Consider: [ALTERNATIVE_SOLUTION]
3. If still fails after 3 more attempts:
- Create .signal_blocked
- Update progress.md with BLOCKER description
Start fresh. Do not reference previous attempts.
COMPLETION SIGNAL:
- Success: Create .signal_fixed_[BUG_ID]
- Failed: Create .signal_blocked
Context Overflow (TRAE handles automatically)
Include in initial prompt:
CONTEXT MANAGEMENT:
- Monitor token usage
- When approaching 200k tokens:
1. Create checkpoint summary in progress.md
2. Create .signal_context_full
3. List remaining tasks
4. Note partial implementations
When openclaw detects .signal_context_full:
Start new TRAE conversation with:
"Continue from checkpoint. Read progress.md for context.
Remaining tasks: [LIST]
Resume from: [LAST_COMPLETED_TASK]"
Multi-Agent Strategy
When to Use Multiple TRAE Windows
| Project Size | Strategy |
|---|
| Small (<10 tasks) | Single TRAE instance |
| Medium (10-30 tasks) | 2 instances: Planner+Coder, Reviewer |
| Large (>30 tasks) | 3 instances: Planner, Coder, Reviewer |
Parallel Execution
For large projects, run Coder and Reviewer in parallel:
Window 1 (Coder): Implement tasks 1-5
Window 2 (Reviewer): Review completed tasks
Progress File Format
TRAE updates progress.md - openclaw only reads this file:
# Project Progress
## Status: [PLANNING|IMPLEMENTING|REVIEWING|COMPLETE|BLOCKED]
## Current Phase: [Phase Name]
## Completed Tasks: [ID1, ID2, ...]
## Remaining Tasks: [ID1, ID2, ...]
## Issues:
- [Issue 1]
- [Issue 2]
## Blockers:
- [Blocker description] (if STATUS: BLOCKED)
## Last Updated: [TIMESTAMP]
Quality Gates (TRAE Self-Check)
Include in implementation prompts:
SELF-CHECK before marking task complete:
- [ ] Code compiles without errors
- [ ] All tests pass
- [ ] No linting errors
- [ ] Documentation updated
- [ ] progress.md updated
Prompt Templates (Token-Efficient)
Planning
PLAN: [REQUIREMENTS]
STACK: [TECH]
OUTPUT: .trae-docs/{architecture.md, task_plan.md, progress.md}
SIGNAL: Create .trae-docs/.signal_planning_done when done
Implementation
IMPLEMENT: Tasks [IDS]
PLAN: .trae-docs/task_plan.md
ARCH: .trae-docs/architecture.md
UPDATE: .trae-docs/progress.md
SIGNAL: Create .trae-docs/.signal_batch_[N]_done when done
Review
REVIEW: All code
CHECK: .trae-docs/requirements.md
LOG: .trae-docs/review_log.md
STATUS: .trae-docs/progress.md
SIGNAL: Create .trae-docs/.signal_review_done when done
Bug Fix
FIX: [BUG_ID]
LOG: .trae-docs/review_log.md
ATTEMPTS: [N]
NEW_APPROACH: [APPROACH]
SIGNAL: Create .trae-docs/.signal_fixed_[BUG_ID] when done
OR: Create .trae-docs/.signal_blocked if still failing
Desktop Automation (Minimal)
Only needed for:
- Launching TRAE
- Sending initial prompt
- Emergency intervention (timeout fallback)
import os
import subprocess
import pyperclip
import pyautogui
def launch_trae(config):
subprocess.Popen(f"{config['trae_install_path']}\\Trae CN.exe")
def send_prompt(prompt_text):
pyperclip.copy(prompt_text)
pyautogui.hotkey('ctrl', 'v')
pyautogui.press('enter')
def check_signal(signal_type):
signal_path = f".trae-docs/.signal_{signal_type}"
return os.path.exists(signal_path)
def clear_signal(signal_type):
signal_path = f".trae-docs/.signal_{signal_type}"
if os.path.exists(signal_path):
os.remove(signal_path)
def orchestrate():
while True:
if check_signal('planning_done'):
progress = read_file('.trae-docs/progress.md')
clear_signal('planning_done')
send_prompt(implementation_prompt)
elif check_signal('blocked'):
blocker = read_file('.trae-docs/progress.md')
clear_signal('blocked')
send_prompt(guidance_prompt)
elif check_signal('project_done'):
break
time.sleep(1)
Self-Update
Log in execution_log.json:
{
"executions": [{
"timestamp": "ISO_DATE",
"project": "NAME",
"tasks": N,
"interventions": N,
"token_saved_estimate": N
}]
}
Quick Reference
| openclaw Action | Trigger |
|---|
| Check signal file | Continuous (0 tokens) |
| Read progress.md | Only when signal file exists |
| Read task_plan.md | Once per phase |
| Send prompt | Once per phase/batch |
| Intervene | Only on BLOCKED/loop |
| TRAE Action | Trigger |
|---|
| Generate code | Continuous |
| Create signal file | When phase done |
| Update progress.md | After each task |
| Self-check quality | After each task |
| Handle errors | Automatic (3 attempts) |
Signal File Naming Convention
| Phase | Signal File |
|---|
| Planning | .signal_planning_done |
| Batch N | .signal_batch_N_done |
| Review | .signal_review_done |
| Complete | .signal_project_done |
| Blocked | .signal_blocked |
User Control Mechanism
Control Signals (User-Initiated)
| User Action | Signal File | Effect |
|---|
| Pause | .signal_pause | Stop orchestration, keep TRAE running |
| Resume | .signal_resume | Continue from where paused |
| Stop | .signal_stop | Terminate project, archive progress |
| Skip Task | .signal_skip_[TASK_ID] | Skip specific task, continue next |
| Force Complete | .signal_force_done | Mark current phase as done |
How to Use Control Signals
Method 1: Command Line (Windows PowerShell)
# 暂停项目
New-Item -Path ".trae-docs\.signal_pause" -ItemType file
# 恢复项目
New-Item -Path ".trae-docs\.signal_resume" -ItemType file
# 停止项目
New-Item -Path ".trae-docs\.signal_stop" -ItemType file
# 跳过任务
New-Item -Path ".trae-docs\.signal_skip_task_3" -ItemType file
# 强制完成
New-Item -Path ".trae-docs\.signal_force_done" -ItemType file
Method 2: Control Script (Recommended)
Run the control script for easy interaction:
# In project directory
python .trae/skills/trae-orchestrator/control.py
This launches an interactive menu:
TRAE Orchestrator Control Panel
================================
Current Status: RUNNING
Phase: Implementation
Progress: 5/15 tasks
[1] Pause Project
[2] Resume Project
[3] Stop Project
[4] Skip Task
[5] Force Complete
[6] View Status
[7] Exit
Enter choice:
Method 3: Direct Python Call
from automation_helper import pause_project, resume_project, stop_project
pause_project("./my-project")
resume_project("./my-project")
stop_project("./my-project")
Method 4: File Manager
- Open project folder in file explorer
- Navigate to
.trae-docs/ folder
- Create new text file, rename to
.signal_pause (remove .txt extension)
- Confirm extension change
Orchestration Loop with Control
def orchestrate(project_dir=".", handlers=None):
while True:
if check_signal('stop', project_dir):
archive_progress(project_dir)
return False, "Project stopped by user"
if check_signal('pause', project_dir):
while not check_signal('resume', project_dir):
if check_signal('stop', project_dir):
return False, "Project stopped during pause"
time.sleep(5)
clear_signal('resume', project_dir)
clear_signal('pause', project_dir)
for skip_signal in get_skip_signals(project_dir):
task_id = skip_signal.replace('skip_', '')
mark_task_skipped(task_id, project_dir)
clear_signal(skip_signal, project_dir)
if check_signal('force_done', project_dir):
clear_signal('force_done', project_dir)
send_next_prompt()
signals = get_all_signals(project_dir)
Pause Behavior
When .signal_pause is detected:
┌─────────────────────────────────────────────────────────┐
│ openclaw detects .signal_pause │
│ ↓ │
│ Stop sending new prompts │
│ ↓ │
│ Keep TRAE running (finish current task) │
│ ↓ │
│ Wait for .signal_resume or .signal_stop │
│ ↓ │
│ Resume: Continue from last checkpoint │
│ Stop: Archive and terminate │
└─────────────────────────────────────────────────────────┘
Stop Behavior
When .signal_stop is detected:
┌─────────────────────────────────────────────────────────┐
│ openclaw detects .signal_stop │
│ ↓ │
│ Create final progress snapshot │
│ ↓ │
│ Archive .trae-docs/ to .trae-archive/[timestamp]/ │
│ ↓ │
│ Clear all signal files │
│ ↓ │
│ Return control to user │
└─────────────────────────────────────────────────────────┘
Status File for User Visibility
openclaw maintains .trae-docs/orchestrator_status.md:
# Orchestrator Status
## State: [RUNNING|PAUSED|STOPPED|WAITING]
## Last Action: [timestamp] - [action description]
## Next Action: [what will happen next]
## User Controls Available:
- Pause: Create .signal_pause
- Resume: Create .signal_resume (when paused)
- Stop: Create .signal_stop
## Current Progress:
- Phase: [phase name]
- Completed: N tasks
- Remaining: M tasks
Quick Commands for Users
# Check status
cat .trae-docs\orchestrator_status.md
# Or use control panel (recommended)
python .trae\skills\trae-orchestrator\control.py
# Quick commands
New-Item -Path ".trae-docs\.signal_pause" -ItemType file # Pause
New-Item -Path ".trae-docs\.signal_resume" -ItemType file # Resume
New-Item -Path ".trae-docs\.signal_stop" -ItemType file # Stop
New-Item -Path ".trae-docs\.signal_skip_task_3" -ItemType file # Skip task 3
New-Item -Path ".trae-docs\.signal_force_done" -ItemType file # Force complete
Complete Workflow Example
Here's a complete example of using the automation helper:
"""
完整示例:使用 TRAE 自动化开发一个项目
"""
from automation_helper import (
TRAEController,
ProjectManager,
ProgressMonitor,
quick_start,
pause_project,
stop_project
)
def method1_quick_start():
"""最简单的方式"""
quick_start(
project_dir='D:\\MyGame',
requirements={
'name': '星空篝火游戏',
'description': '一个多人联机的3D篝火游戏',
'features': [
'3D星空场景',
'多人联机',
'聊天系统',
'篝火效果'
],
'tech_stack': 'Three.js + Node.js + Socket.io'
},
trae_path='E:\\software\\Trae CN\\Trae CN.exe'
)
def method2_step_by_step():
"""更精细的控制"""
ProjectManager.create_project(
project_dir='D:\\MyGame',
requirements="""
# 星空篝火游戏
## 描述
创建一个多人联机的3D篝火游戏
## 功能
- 3D星空场景
- 多人联机
- 聊天系统
"""
)
custom_prompt = """
请开发一个星空篝火游戏。
要求:
1. 使用 Three.js 创建3D场景
2. 使用 Socket.io 实现多人联机
3. 包含星空、篝火、玩家角色
4. 实现移动、聊天、互动功能
完成后创建 .trae-docs/.signal_project_done
"""
ProjectManager.create_prompt('D:\\MyGame', custom_prompt)
controller = TRAEController('E:\\software\\Trae CN\\Trae CN.exe')
controller.launch('D:\\MyGame')
controller.send_prompt(custom_prompt, delay=5)
def method3_monitor():
"""监控开发进度"""
monitor = ProgressMonitor('D:\\MyGame')
status = monitor.get_status()
print(f"当前状态: {status}")
completed = monitor.wait_for_completion(timeout=3600)
if completed:
print("✅ 项目开发完成!")
else:
print("⚠️ 项目未完成或被阻塞")
if __name__ == '__main__':
method1_quick_start()
File Creation Strategy
How to Teach TRAE to Create Files
Method 1: Pre-create Requirements (Recommended)
Create requirements.md BEFORE starting TRAE:
from automation_helper import ProjectManager
ProjectManager.create_project(
project_dir='D:\\MyProject',
requirements={
'name': 'My App',
'description': 'An awesome application',
'features': ['Feature 1', 'Feature 2'],
'tech_stack': 'React + Node.js'
}
)
This creates:
.trae-docs/requirements.md - TRAE reads this
.trae-docs/prompt_to_trape.md - Instructions for TRAE
Then TRAE will:
- Read
requirements.md
- Create
architecture.md
- Create
task_plan.md
- Create actual code files
Method 2: Include File List in Prompt
Create the following files:
1. src/index.js - Entry point
2. src/components/App.js - Main component
3. src/styles.css - Styles
4. package.json - Dependencies
Use this structure:
my-app/
├── src/
│ ├── index.js
│ ├── components/
│ │ └── App.js
│ └── styles.css
└── package.json
Method 3: Phase-Based Creation
PHASE 1 - Setup:
- Create package.json
- Create folder structure
PHASE 2 - Core:
- Create src/index.js
- Create src/app.js
PHASE 3 - UI:
- Create src/components/
- Create src/styles/
Dependencies
Required
- Python 3.7+
- TRAE IDE installed
Optional (for auto-send)
pip install pyautogui pyperclip
Without these, you need to manually paste the prompt into TRAE.
Troubleshooting
TRAE Not Found
from automation_helper import TRAEController
controller = TRAEController()
controller.setup('E:\\software\\Trae CN\\Trae CN.exe')
Permission Denied
Run Python as Administrator or check TRAE path permissions.
Prompt Not Sent
Install pyautogui:
pip install pyautogui pyperclip
Or manually copy from .trae-docs/prompt_to_trape.md and paste into TRAE.
Core Principle: Event-driven orchestration. TRAE signals completion, openclaw responds. User controls via signal files. Zero polling, zero wasted tokens.
New in this version: Practical Python automation module (automation_helper.py) for one-line project launch and easy control.