project-orchestrator
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseProject Orchestrator
项目协调器
Đây là skill điều phối duy nhất mà agent load ĐẦU TIÊN cho mọi yêu cầu liên quan đến app Flutter trong project. Nó không viết code, chỉ quyết định bước tiếp theo và load đúng 1 skill con tương ứng.
这是代理针对项目中所有Flutter应用相关请求首先加载的唯一协调技能。它不编写代码,仅决定下一步操作并加载对应的子技能。
Nguyên tắc
原则
- Một Agent CLI duy nhất, không spawn agent con, không mô phỏng multi-agent.
- Mỗi bước chỉ load đúng 1 skill con cần thiết, không load tất cả cùng lúc (tránh loãng context).
- OpenSpec (CLI thật của Fission-AI, không phải 1 file .md đơn) là nguồn sự thật duy nhất:
- — hành vi hiện tại của hệ thống (source of truth).
openspec/specs/<domain>/spec.md - — đề xuất thay đổi đang làm dở (delta spec).
openspec/changes/<change-name>/{proposal.md, design.md, tasks.md, specs/<domain>/spec.md} - — context/tech stack cố định (Flutter, Riverpod, GoRouter, Feature-First) và rules, được tự động inject vào mọi artifact, KHÔNG cần agent tự nhắc lại các rule này mỗi lần.
openspec/config.yaml
- QUAN TRỌNG - phân định trách nhiệm: KHÔNG được tự ý đọc/ghi trực tiếp vào
flutter-skillhayopenspec/specs/bằng cách tự bịa thao tác file, và KHÔNG tự chạy rawopenspec/changes/CLI qua bash để thay thế vòng đời spec. Toàn bộ vòng đời change (tạo, sinh artifact, thực thi, validate, merge) PHẢI đi qua slash commandopenspecđã cấu hình (profile mở rộng:/opsx:*,new,continue,ff,propose,explore,apply,verify,sync,archive,bulk-archive).onboardlà kỹ thuật Flutter cụ thể được dùng BÊN TRONG các bước đó (đặc biệt là trongflutter-skill), không phải lớp thay thế chúng./opsx:apply - Không hỏi lại user những thứ có thể suy ra từ /
config.yamlhiện có hoặc dùng mặc định hợp lý (xem phần "Quy tắc mặc định" bên dưới), NHƯNG luôn hỏi user ở bước UI-checkpoint (trong bước 4, mỗi khi task có UI) - đây là điểm dừng có chủ đích, không phải điểm dừng do thiếu thông tin.specs/
- 仅使用一个Agent CLI,不生成子代理,不模拟多代理模式。
- 每个步骤仅加载所需的一个子技能,不同时加载所有技能(避免上下文分散)。
- OpenSpec(Fission-AI的真实CLI,而非单一.md文件)是唯一的事实来源:
- — 系统当前行为(事实来源)。
openspec/specs/<domain>/spec.md - — 正在进行的变更提案(增量规范)。
openspec/changes/<change-name>/{proposal.md, design.md, tasks.md, specs/<domain>/spec.md} - — 固定上下文/技术栈(Flutter、Riverpod、GoRouter、Feature-First)及规则,会自动注入到所有工件中,无需代理每次重复提及这些规则。
openspec/config.yaml
- 重要 - 职责划分:不得擅自通过伪造文件操作直接读写
flutter-skill或openspec/specs/,也不得通过bash直接运行原始openspec/changes/CLI来替代规范生命周期。整个变更生命周期(创建、生成工件、执行、验证、合并)必须通过已配置的斜杠命令openspec完成(扩展配置:/opsx:*,new,continue,ff,propose,explore,apply,verify,sync,archive,bulk-archive)。onboard是在这些步骤中(尤其是flutter-skill内)使用的特定Flutter技术,而非它们的替代层。/opsx:apply - 对于可从现有/
config.yaml推导或使用合理默认值的信息,无需再次询问用户(见下文“默认规则”部分),但在UI检查点步骤(步骤4中,只要任务涉及UI)必须询问用户——这是有意设置的暂停点,而非因信息缺失导致的暂停。specs/
Quy trình (checklist tuần tự, map đúng vào vòng đời opsx thật)
流程(顺序清单,与真实opsx生命周期对应)
Giai đoạn Planning (opsx tự lo, flutter-skill chỉ đọc kết quả)
规划阶段(opsx自动处理,flutter-skill仅读取结果)
-
Nếu chưa rõ hướng đi →để bàn trước (không tạo file). Nếu đã rõ →
/opsx:exploređể tạo scaffold, rồi/opsx:new <ten-change>(nhanh, sinh hết artifact 1 lần) hoặc/opsx:ff(từng bước, review kỹ hơn) để có đủ/opsx:continue+proposal.md(delta) +specs/+design.md. Nếu muốn gộp 2 bước làm 1: dùngtasks.mdthay cho/opsx:propose <ten-change>+new.ff- KHÔNG tự viết
flutter-skill/proposal.mdthay cho opsx.tasks.md
-
Đọc kết quả:(danh sách việc cần làm) + delta
tasks.md(yêu cầu/data model mới) trongspecs/<domain>/spec.md.changes/<change-name>/
1.5. Load phần "Branch theo từng change" — tạo/chuyển sang branch NGAY trước khi đụng vào code, không code thẳng trên .
git-checkpoint/SKILL.mdchange/<change-name>main-
So sánh Data Model giữa delta spec (bước 1) và spec đã archive ().
openspec/specs/<domain>/spec.md- Nếu có thay đổi field/bảng → load TRƯỚC KHI vào giai đoạn Implementation.
schema-migration/SKILL.md - Nếu không đổi model → bỏ qua, sang bước 3.
- Nếu có thay đổi field/bảng → load
-
Load+
architecture/SKILL.mdđể xác nhận blueprint/token trước khi code (không tự quyết định lại nếu đã khóa trongdesign-system/SKILL.md).config.yaml
-
若方向不明确 → 使用先进行讨论(不创建文件)。若方向明确 → 使用
/opsx:explore创建脚手架,然后使用/opsx:new <变更名称>(快速模式,一次性生成所有工件)或/opsx:ff(分步模式,更细致审核)生成完整的/opsx:continue+proposal.md(增量) +specs/+design.md。若想合并两步操作:使用tasks.md替代/opsx:propose <变更名称>+new。ff- 不得替代opsx编写
flutter-skill/proposal.md。tasks.md
-
读取结果:下的
changes/<变更名称>/(待办任务列表) + 增量tasks.md(新需求/数据模型)。specs/<domain>/spec.md
1.5. 加载中“按变更创建分支”部分 — 在接触代码前立即创建/切换到分支,不得直接在分支上编码。
git-checkpoint/SKILL.mdchange/<变更名称>main-
对比数据模型:将增量规范(步骤1)与已归档的规范()进行对比。
openspec/specs/<domain>/spec.md- 若字段/表有变更 → 在进入实施阶段前加载。
schema-migration/SKILL.md - 若模型无变更 → 跳过此步骤,进入步骤3。
- 若字段/表有变更 → 在进入实施阶段前加载
-
加载+
architecture/SKILL.md,在编码前确认蓝图/令牌(若已在design-system/SKILL.md中锁定,则不得自行重新决定)。config.yaml
Giai đoạn Implementation — chạy BÊN TRONG /opsx:apply
/opsx:apply实施阶段 — 在/opsx:apply
内运行
/opsx:apply- Gọi để bắt đầu thực thi
/opsx:apply. Với MỖI task trong danh sách:tasks.md- Nếu task cần logic phía server (tính toán tiền, phân quyền phức tạp, webhook, cron - xem điều kiện chi tiết trong ) → load
backend-coding/SKILL.mdTRƯỚC, viết schema/RLS/Edge Function xong mới sang bước code Flutter. Nếu task chỉ là CRUD đơn giản → bỏ qua bước này,backend-coding/SKILL.mdtự gọi Supabase client SDK trực tiếp.flutter-coding - Load để sinh code Flutter cho task đó (dựa trên
flutter-coding/SKILL.md, tuân theo architecture/design-system, gọi đúng RPC/Edge Function/table vừa tạo nếu có).agent-plugins - Load để build/chạy/tự sửa lỗi ngay sau khi code xong task đó (tối đa 5 lần lặp) - test cả luồng client gọi backend thật, không chỉ UI.
mcp-loop/SKILL.md - Nếu lỗi lặp do API/package deprecated → , thử tối đa 2 lần nữa.
rag-fallback/SKILL.md - Đánh dấu task hoàn thành trong (theo đúng cơ chế
tasks.mdđang track), rồi sang task tiếp theo./opsx:apply - Nếu 1 task có phần UI đáng kể → load ngay sau khi task đó pass MCP, hỏi user xác nhận trước khi coi task này là "done".
ui-checkpoint/SKILL.md
- Nếu task cần logic phía server (tính toán tiền, phân quyền phức tạp, webhook, cron - xem điều kiện chi tiết trong
- 调用开始执行
/opsx:apply。对于列表中的每个任务:tasks.md- 若任务涉及服务端逻辑(金额计算、复杂权限、webhook、定时任务 - 详见中的条件)→ 先加载
backend-coding/SKILL.md,完成schema/RLS/Edge Function编写后再进入Flutter编码步骤。若任务仅为简单CRUD → 跳过此步骤,backend-coding/SKILL.md直接调用Supabase客户端SDK。flutter-coding - 加载为该任务生成Flutter代码(基于
flutter-coding/SKILL.md,遵循架构/设计系统,若已创建则调用正确的RPC/Edge Function/表)。agent-plugins - 加载在任务编码完成后立即构建/运行/自动修复错误(最多循环5次) - 测试客户端调用真实服务端的完整流程,而非仅测试UI。
mcp-loop/SKILL.md - 若因API/包弃用导致重复错误 → 使用,最多再尝试2次。
rag-fallback/SKILL.md - 在中标记任务完成(遵循
tasks.md的跟踪机制),然后进入下一个任务。/opsx:apply - 若某任务包含大量UI内容 → 在该任务通过MCP后立即加载,询问用户确认后再将该任务标记为“完成”。
ui-checkpoint/SKILL.md
- 若任务涉及服务端逻辑(金额计算、复杂权限、webhook、定时任务 - 详见
Giai đoạn Đóng gói (opsx tự lo, flutter-skill chỉ trigger đúng lúc)
打包阶段(opsx自动处理,flutter-skill仅在正确时机触发)
-
Sau khi TẤT CẢ task trongpass (mcp-loop + ui-checkpoint đều OK) → gọi
tasks.mdđể chạy validation gate cuối cùng của OpenSpec./opsx:verify -
Nếupass → load
/opsx:verifyđể commit code, sau đó gọigit-checkpoint/SKILL.md(merge delta spec vào spec chính, dùng cho checkpoint) rồi/opsx:sync(hoàn tất change, chuyển vào/opsx:archive). Sau khi archive xong,changes/archive/merge branchgit-checkpointvàochange/<change-name>và xóa branch.main- Có thể gọi sớm hơn (giữa chừng, sau vài task) nếu muốn checkpoint nhỏ hơn - không bắt buộc chờ đến cuối.
/opsx:sync
- Có thể gọi
-
Chỉ khi user yêu cầu rõ ràng ("build apk", "đóng gói") → load. Không tự động build mỗi lần archive xong.
release/SKILL.md
-
当中所有任务通过(mcp-loop + ui-checkpoint均通过)→ 调用
tasks.md运行OpenSpec的最终验证关卡。/opsx:verify -
若通过 → 加载
/opsx:verify提交代码,然后调用git-checkpoint/SKILL.md(将增量规范合并到主规范,用于检查点)再调用/opsx:sync(完成变更,移至/opsx:archive)。归档完成后,changes/archive/将git-checkpoint分支合并到change/<变更名称>并删除该分支。main- 若需要更小的检查点,可提前调用(中途完成几个任务后),无需等到最后。
/opsx:sync
- 若需要更小的检查点,可提前调用
-
仅当用户明确要求(如“构建apk”、“打包”)→ 加载。不得在每次归档完成后自动构建。
release/SKILL.md
Quy tắc mặc định (Fallback Rules) - dùng khi config.yaml
/specs/
chưa nói rõ
config.yamlspecs/默认规则(回退规则)- 当config.yaml
/specs/
未明确说明时使用
config.yamlspecs/Nên khai báo sẵn các mặc định này trong (mục /) để không phải lặp lại mỗi lần:
openspec/config.yamlcontextrules- Chưa chỉ định backend → mặc định Firebase (đơn giản nhất cho MVP).
- Chưa chỉ định state management → Riverpod (đã khóa trong architecture.md, không đổi giữa chừng).
- Chưa chỉ định style → Material 3, theo .
design-system/SKILL.md - Chưa chỉ định nền tảng build → mặc định APK (iOS cần máy Mac, hỏi lại nếu user yêu cầu iOS mà đang không phải Mac).
建议在的/部分预先声明这些默认值,避免每次重复:
openspec/config.yamlcontextrules- 未指定服务端 → 默认使用Firebase(MVP最简方案)。
- 未指定状态管理 → 使用Riverpod(已在architecture.md中锁定,中途不得更改)。
- 未指定样式 → 使用Material 3,遵循。
design-system/SKILL.md - 未指定构建平台 → 默认构建APK(iOS需要Mac设备,若用户要求iOS但当前非Mac环境则需询问)。
3 trường hợp PHẢI dừng và hỏi user (không tự động hóa)
必须暂停并询问用户的3种情况
- Thiếu API key/credentials (Firebase, Google Maps...).
- Lỗi compile lặp lại sau khi đã thử +
mcp-loop.rag-fallback - Yêu cầu vượt khả năng môi trường hiện tại (build iOS trên Windows/Linux).
Ngoài 3 trường hợp trên và bước UI-checkpoint (trong bước 4, mỗi khi task có UI), agent chạy hết một lượt mà không dừng hỏi lặt vặt.
- 缺少API密钥/凭证(Firebase、Google Maps等)。
- 在尝试+
mcp-loop后仍重复出现编译错误。rag-fallback - 请求超出当前环境能力(如在Windows/Linux上构建iOS)。
除上述3种情况及UI检查点(步骤4中,只要任务涉及UI)外,代理应一次性运行完成,无需中途反复询问。