jeo
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseJEO — Integrated Agent Orchestration
JEO — 集成式Agent编排
Keyword:·jeo·annotate·UI-review| Platforms: Claude Code · Codex CLI · Gemini CLI · OpenCodeagentui (deprecated)Planning (plannotator) → Development (team/bmad) → QA (agent-browser + agentation) → Cleanup (worktree) with a persistentproject ledger.jeo
关键词:·jeo·annotate·UI-review| 支持平台: Claude Code · Codex CLI · Gemini CLI · OpenCodeagentui (已弃用)规划(plannotator)→ 开发(team/bmad)→ QA(agent-browser + agentation)→ 清理(worktree),配套持久化的项目账本.jeo
When to use this skill
什么时候使用该技能
- Run an end-to-end multi-agent workflow with an explicit planning gate
- Add a browser-backed UI feedback loop with or
annotateui-review - Coordinate plan approval, execution, verification, and cleanup in one skill
- Keep long-term rules, short-term system/test plans, active work items, and history in
.jeo/
- 运行带有明确规划关卡的端到端多Agent工作流
- 通过或
annotate添加基于浏览器的UI反馈循环ui-review - 在单个技能中协调计划审批、执行、验证和清理全流程
- 将长期规则、短期系统/测试计划、活跃工作项和历史记录存储在目录下
.jeo/
Rules (always enforced)
规则(始终强制执行)
- Do not reopen the PLAN gate when the current plan hash already has a terminal result
- Only a revised plan resets to
plan_gate_statuspending - Do not process agentation annotations before explicit submit/onSubmit opens the submit gate
- NEVER enter EXECUTE without
plan_approved: true - NEVER run plannotator or agentation with (background)
& - NEVER reopen an unchanged plan after ,
approved,manual_approved, orfeedback_requiredinfrastructure_blocked
Authoritative state:
.omc/state/jeo-state.json- 当当前计划哈希已经有终态结果时,不要重新打开PLAN关卡
- 只有修订后的计划才能将重置为
plan_gate_statuspending - 在明确的submit/onSubmit打开提交关卡前,不要处理agentation标注
- 绝对不要在之前进入EXECUTE阶段
plan_approved: true - 绝对不要以后台模式()运行plannotator或agentation
& - 绝对不要在计划进入、
approved、manual_approved或feedback_required状态后重新打开未修改的计划infrastructure_blocked
权威状态存储:
.omc/state/jeo-state.jsonState Management
状态管理
All state operations use one script:
scripts/jeo-state-update.pybash
undefined所有状态操作统一使用一个脚本:
scripts/jeo-state-update.pybash
undefinedInitialize (or resume if state exists)
初始化(如果状态已存在则恢复)
python3 scripts/jeo-state-update.py init "<task>"
python3 scripts/jeo-state-update.py init "<task>"
Record checkpoint at each step
在每个步骤记录检查点
python3 scripts/jeo-state-update.py checkpoint <plan|execute|verify|verify_ui|cleanup>
python3 scripts/jeo-state-update.py checkpoint <plan|execute|verify|verify_ui|cleanup>
Record error (auto-increments retry_count; warns at >= 3)
记录错误(自动递增retry_count;>=3时发出警告)
python3 scripts/jeo-state-update.py error "<message>"
python3 scripts/jeo-state-update.py error "<message>"
Check resume point
检查恢复点
python3 scripts/jeo-state-update.py resume
python3 scripts/jeo-state-update.py resume
Set any field (supports dot notation for nested keys)
设置任意字段(支持嵌套键的点表示法)
python3 scripts/jeo-state-update.py set phase execute
python3 scripts/jeo-state-update.py set agentation.active true
---python3 scripts/jeo-state-update.py set phase execute
python3 scripts/jeo-state-update.py set agentation.active true
---.jeo Project Ledger
.jeo 项目账本
JEO keeps a human-readable project ledger in and a machine-readable state file in .
.jeo/.omc/state/jeo-state.json| Path | Purpose |
|---|---|
| Durable product intent, standing rules, validation contract |
| Current system slice, unit-test plan, flow-test plan, exit criteria |
| Planned queue and parking-lot items |
| Current delivery stage and timestamped updates |
| Append-only completion summaries |
| Queued work-item files |
| Single active work-item file (removed on completion after history is written) |
Use to keep the ledger in sync:
scripts/jeo-project-sync.pybash
python3 scripts/jeo-project-sync.py init "<task>"
python3 scripts/jeo-project-sync.py queue api-contract "Harden API contract validation"
python3 scripts/jeo-project-sync.py start-next
python3 scripts/jeo-project-sync.py stage <planning|development|qa|done>
python3 scripts/jeo-project-sync.py progress "<message>"
python3 scripts/jeo-project-sync.py complete <slug> "<summary>"
python3 scripts/jeo-project-sync.py statusJEO在目录下维护人类可读的项目账本,同时在存储机器可读的状态文件。
.jeo/.omc/state/jeo-state.json| 路径 | 用途 |
|---|---|
| 持久化产品意图、固定规则、验证契约 |
| 当前系统切片、单元测试计划、流程测试计划、退出标准 |
| 计划队列和待处理项 |
| 当前交付阶段和带时间戳的更新记录 |
| 仅追加的完成摘要记录 |
| 排队的工作项文件 |
| 单个活跃工作项文件(完成后写入历史,然后移除) |
使用保持账本同步:
scripts/jeo-project-sync.pybash
python3 scripts/jeo-project-sync.py init "<task>"
python3 scripts/jeo-project-sync.py queue api-contract "加固API契约验证"
python3 scripts/jeo-project-sync.py start-next
python3 scripts/jeo-project-sync.py stage <planning|development|qa|done>
python3 scripts/jeo-project-sync.py progress "<message>"
python3 scripts/jeo-project-sync.py complete <slug> "<summary>"
python3 scripts/jeo-project-sync.py statusPhase mapping
阶段映射
| JEO phase | Delivery stage | |
|---|---|---|
| | Review |
| | Update the active task checklist and append implementation notes to |
| | Record unit/flow/browser verification evidence in |
| | Append to |
Detailed ledger rules: references/DOT_JEO_LEDGER.md
| JEO阶段 | 交付阶段 | |
|---|---|---|
| | 审阅 |
| | 更新活跃任务检查清单,在 |
| | 在 |
| | 追加到 |
详细账本规则: references/DOT_JEO_LEDGER.md
Instructions
使用说明
Execute steps in order. Each step only proceeds after the previous one completes.
按顺序执行步骤,只有上一步完成后才能进入下一步。
STEP 0: Bootstrap
步骤0: 启动引导
bash
mkdir -p .omc/state .omc/plans .omc/logs
python3 scripts/jeo-state-update.py init "<detected task>"
python3 scripts/jeo-project-sync.py init "<detected task>"
python3 scripts/jeo-project-sync.py start-nextClaude Code only — hook self-check (run inline):
Verify the hook is using , not raw . If misconfigured, auto-repair:
ExitPlanModeclaude-plan-gate.pyplannotatorpython
import json, os, subprocess, sys
p = os.path.expanduser("~/.claude/settings.json")
if os.path.exists(p):
s = json.load(open(p))
for entry in s.get("hooks", {}).get("PermissionRequest", []):
if entry.get("matcher") == "ExitPlanMode":
for h in entry.get("hooks", []):
cmd = h.get("command", "")
if (cmd.strip() == "plannotator" or cmd.startswith("plannotator ")) and "claude-plan-gate" not in cmd:
print("[JEO][WARN] Hook uses raw plannotator — state tracking disabled. Auto-repairing...", file=sys.stderr)
for candidate in [
os.path.join(os.getcwd(), ".agent-skills/jeo/scripts/setup-claude.sh"),
os.path.expanduser("~/.claude/skills/jeo/scripts/setup-claude.sh"),
os.path.expanduser("~/.agent-skills/jeo/scripts/setup-claude.sh"),
]:
if os.path.exists(candidate):
subprocess.run(["bash", candidate], check=False)
print("[JEO] Hook repaired. Restart Claude Code to apply.", file=sys.stderr)
breakNotify the user:
"JEO activated. Delivery stage: planning.ledger initialized. Add the.jeokeyword if a UI feedback loop is needed."annotate
bash
mkdir -p .omc/state .omc/plans .omc/logs
python3 scripts/jeo-state-update.py init "<检测到的任务>"
python3 scripts/jeo-project-sync.py init "<检测到的任务>"
python3 scripts/jeo-project-sync.py start-next仅Claude Code — 钩子自检(内联运行):
验证钩子使用的是,而非原生。如果配置错误,自动修复:
ExitPlanModeclaude-plan-gate.pyplannotatorpython
import json, os, subprocess, sys
p = os.path.expanduser("~/.claude/settings.json")
if os.path.exists(p):
s = json.load(open(p))
for entry in s.get("hooks", {}).get("PermissionRequest", []):
if entry.get("matcher") == "ExitPlanMode":
for h in entry.get("hooks", []):
cmd = h.get("command", "")
if (cmd.strip() == "plannotator" or cmd.startswith("plannotator ")) and "claude-plan-gate" not in cmd:
print("[JEO][WARN] 钩子使用原生plannotator — 状态跟踪已禁用。正在自动修复...", file=sys.stderr)
for candidate in [
os.path.join(os.getcwd(), ".agent-skills/jeo/scripts/setup-claude.sh"),
os.path.expanduser("~/.claude/skills/jeo/scripts/setup-claude.sh"),
os.path.expanduser("~/.agent-skills/jeo/scripts/setup-claude.sh"),
]:
if os.path.exists(candidate):
subprocess.run(["bash", candidate], check=False)
print("[JEO] 钩子已修复。重启Claude Code生效。", file=sys.stderr)
break通知用户:
"JEO已激活。交付阶段: 规划。账本已初始化。如果需要UI反馈循环,请添加.jeo关键词。"annotate
STEP 1: PLAN / Planning (never skip)
步骤1: 规划(不可跳过)
bash
python3 scripts/jeo-state-update.py checkpoint plan
python3 scripts/jeo-project-sync.py stage planning
python3 scripts/jeo-project-sync.py progress "Entered planning gate."-
Review,
.jeo/long-term.md,.jeo/short-term.md,.jeo/planned.md, and.jeo/progress.mdbefore changing scope..jeo/history.md -
Write(include goal, steps, risks, completion criteria, and the current planning/development/QA expectations from
plan.md)..jeo/short-term.md -
Updatewith:
.jeo/short-term.md- the system slice for this run
- the unit-test plan
- the flow/browser verification plan
-
Invoke plannotator (per platform):Claude Code (hook mode — only supported method):
- Call → write plan content → call
EnterPlanModeExitPlanMode - The PermissionRequest hook fires plannotator automatically
ExitPlanMode - Wait for the hook result before proceeding
- NEVER call plannotator via MCP tool or CLI directly in Claude Code
Codex / Gemini / OpenCode (blocking CLI):bash# Skip if same plan hash already has terminal gate status # (check plan_gate_status and last_reviewed_plan_hash in jeo-state.json) # Resolve JEO scripts directory _JEO_SCRIPTS="" for _candidate in \ "${JEO_SKILL_DIR:-}/scripts" \ "$HOME/.agent-skills/jeo/scripts" \ "$HOME/.codex/skills/jeo/scripts" \ "$(pwd)/.agent-skills/jeo/scripts" \ "scripts"; do [ -f "${_candidate}/plannotator-plan-loop.sh" ] && _JEO_SCRIPTS="$_candidate" && break done # Auto-install plannotator if missing bash "${_JEO_SCRIPTS}/ensure-plannotator.sh" || exit 1 # Run blocking plan gate (no &) FEEDBACK_DIR=$(python3 -c "import hashlib,os; h=hashlib.md5(os.getcwd().encode()).hexdigest()[:8]; d=f'/tmp/jeo-{h}'; os.makedirs(d,exist_ok=True); print(d)") bash "${_JEO_SCRIPTS}/plannotator-plan-loop.sh" plan.md "${FEEDBACK_DIR}/plannotator_feedback.txt" 3 - Call
-
Check result:
- (exit 0) → set
approved,phase=execute→ STEP 2plan_approved=true - Feedback (exit 10) → read feedback, revise , repeat step 2
plan.md - Infrastructure blocked (exit 32) → Conversation Approval Mode: output plan.md to user, ask "approve" or provide feedback. WAIT for user response
- Session exited 3 times (exit 30/31) → ask user whether to abort
-
When the plan is approved, append a note todescribing what is ready to build and what QA must prove.
.jeo/progress.md
NEVER: enter EXECUTE without . NEVER: run with background.
approved: true&bash
python3 scripts/jeo-state-update.py checkpoint plan
python3 scripts/jeo-project-sync.py stage planning
python3 scripts/jeo-project-sync.py progress "进入规划关卡。"-
修改范围前先审阅、
.jeo/long-term.md、.jeo/short-term.md、.jeo/planned.md和.jeo/progress.md。.jeo/history.md -
编写(包含目标、步骤、风险、完成标准,以及
plan.md中当前规划/开发/QA的要求)。.jeo/short-term.md -
更新,补充:
.jeo/short-term.md- 本次运行的系统切片
- 单元测试计划
- 流程/浏览器验证计划
-
调用plannotator(按平台适配):Claude Code(钩子模式 — 唯一支持的方式):
- 调用→ 编写计划内容 → 调用
EnterPlanModeExitPlanMode - PermissionRequest钩子会自动触发plannotator
ExitPlanMode - 等待钩子返回结果后再继续
- 绝对不要在Claude Code中通过MCP工具或CLI直接调用plannotator
Codex / Gemini / OpenCode(阻塞式CLI):bash# 如果相同计划哈希已经有终态关卡状态则跳过 # (检查jeo-state.json中的plan_gate_status和last_reviewed_plan_hash) # 解析JEO脚本目录 _JEO_SCRIPTS="" for _candidate in \ "${JEO_SKILL_DIR:-}/scripts" \ "$HOME/.agent-skills/jeo/scripts" \ "$HOME/.codex/skills/jeo/scripts" \ "$(pwd)/.agent-skills/jeo/scripts" \ "scripts"; do [ -f "${_candidate}/plannotator-plan-loop.sh" ] && _JEO_SCRIPTS="$_candidate" && break done # 如果plannotator缺失则自动安装 bash "${_JEO_SCRIPTS}/ensure-plannotator.sh" || exit 1 # 运行阻塞式规划关卡(不要加&) FEEDBACK_DIR=$(python3 -c "import hashlib,os; h=hashlib.md5(os.getcwd().encode()).hexdigest()[:8]; d=f'/tmp/jeo-{h}'; os.makedirs(d,exist_ok=True); print(d)") bash "${_JEO_SCRIPTS}/plannotator-plan-loop.sh" plan.md "${FEEDBACK_DIR}/plannotator_feedback.txt" 3 - 调用
-
检查结果:
- (退出码0)→ 设置
approved、phase=execute→ 进入步骤2plan_approved=true - 需要反馈(退出码10)→ 读取反馈,修订,重复步骤2
plan.md - 基础设施阻塞(退出码32)→ 进入对话审批模式: 向用户输出plan.md,询问是否“approve”或提供反馈。等待用户响应
- 会话退出3次(退出码30/31)→ 询问用户是否终止
-
计划获批后,在追加说明,描述待构建内容和QA需要验证的内容。
.jeo/progress.md
绝对不要: 没有就进入执行阶段。绝对不要: 以后台模式()运行。
approved: true&STEP 2: EXECUTE / Development
步骤2: 执行 / 开发
bash
python3 scripts/jeo-state-update.py checkpoint execute
python3 scripts/jeo-state-update.py set phase execute
python3 scripts/jeo-project-sync.py stage development
python3 scripts/jeo-project-sync.py progress "Development started from the approved plan."Auto-detect team availability:
bash
TEAM_AVAILABLE=false
if [[ "${CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:-}" =~ ^(1|true|yes)$ ]]; then
TEAM_AVAILABLE=true
fi
python3 scripts/jeo-state-update.py set team_available $TEAM_AVAILABLECheck in state (set by on approval):
next_modeclaude-plan-gate.py| Condition | Action |
|---|---|
| |
| Claude Code + omc + team | |
| Claude Code without team | Error — run |
| Codex / Gemini / OpenCode | BMAD fallback: |
While executing, keep the active file current using:
.jeo/tasks/active/*.mdbash
undefinedbash
python3 scripts/jeo-state-update.py checkpoint execute
python3 scripts/jeo-state-update.py set phase execute
python3 scripts/jeo-project-sync.py stage development
python3 scripts/jeo-project-sync.py progress "已基于获批计划启动开发。"自动检测团队模式可用性:
bash
TEAM_AVAILABLE=false
if [[ "${CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS:-}" =~ ^(1|true|yes)$ ]]; then
TEAM_AVAILABLE=true
fi
python3 scripts/jeo-state-update.py set team_available $TEAM_AVAILABLE检查状态中的(获批时由设置):
next_modeclaude-plan-gate.py| 条件 | 操作 |
|---|---|
| |
| Claude Code + omc + 团队模式 | |
| 无团队模式的Claude Code | 错误 — 运行 |
| Codex / Gemini / OpenCode | BMAD降级方案: 运行 |
执行过程中,使用以下命令保持的活跃任务文件更新:
.jeo/tasks/active/*.mdbash
undefinedWhen plan and risks are locked
计划和风险锁定后运行
python3 scripts/jeo-project-sync.py update-checklist planning "Scope captured in plan.md" --done
python3 scripts/jeo-project-sync.py update-checklist planning "Risks and completion criteria written" --done
python3 scripts/jeo-project-sync.py update-checklist planning "范围已记录在plan.md" --done
python3 scripts/jeo-project-sync.py update-checklist planning "风险和完成标准已编写" --done
As code, docs, and tests are completed
代码、文档和测试完成后运行
python3 scripts/jeo-project-sync.py update-checklist development "System changes implemented" --done
python3 scripts/jeo-project-sync.py update-checklist development "Unit tests added or updated" --done
**NEVER** fall back to single-agent execution in Claude Code.
---python3 scripts/jeo-project-sync.py update-checklist development "系统变更已实现" --done
python3 scripts/jeo-project-sync.py update-checklist development "单元测试已新增或更新" --done
**绝对不要**在Claude Code中降级到单Agent执行。
---STEP 3: VERIFY / QA
步骤3: 验证 / QA
bash
python3 scripts/jeo-state-update.py checkpoint verify
python3 scripts/jeo-state-update.py set phase verify
python3 scripts/jeo-project-sync.py stage qa
python3 scripts/jeo-project-sync.py progress "Entered QA verification."-
Browser verification with agent-browser (when browser UI is present):bash
agent-browser snapshot http://localhost:3000 -
keyword detected → enter STEP 3.1
annotate -
Otherwise → enter STEP 4
-
Record QA evidence inusing:
.jeo/short-term.mdbashpython3 scripts/jeo-project-sync.py record-evidence "unit tests: X passing, Y added" python3 scripts/jeo-project-sync.py record-evidence "flow check: <description>" python3 scripts/jeo-project-sync.py record-evidence "browser verification: <outcome>" # Then mark QA checklist items complete python3 scripts/jeo-project-sync.py update-checklist qa "Flow or integration checks recorded" --done python3 scripts/jeo-project-sync.py update-checklist qa "Browser / annotation verification recorded when applicable" --done
bash
python3 scripts/jeo-state-update.py checkpoint verify
python3 scripts/jeo-state-update.py set phase verify
python3 scripts/jeo-project-sync.py stage qa
python3 scripts/jeo-project-sync.py progress "进入QA验证阶段。"-
使用agent-browser做浏览器验证(存在浏览器UI时):bash
agent-browser snapshot http://localhost:3000 -
检测到关键词 → 进入步骤3.1
annotate -
否则 → 进入步骤4
-
使用以下命令在记录QA证据:
.jeo/short-term.mdbashpython3 scripts/jeo-project-sync.py record-evidence "单元测试: X个通过,新增Y个" python3 scripts/jeo-project-sync.py record-evidence "流程检查: <描述>" python3 scripts/jeo-project-sync.py record-evidence "浏览器验证: <结果>" # 然后标记QA检查清单项为完成 python3 scripts/jeo-project-sync.py update-checklist qa "流程或集成检查已记录" --done python3 scripts/jeo-project-sync.py update-checklist qa "浏览器/标注验证(如适用)已记录" --done
STEP 3.1: VERIFY_UI (only when annotate
keyword is detected)
annotate步骤3.1: UI验证(仅检测到annotate
关键词时执行)
annotatePre-flight check (all platforms):
bash
if ! curl -sf --connect-timeout 2 http://localhost:4747/health >/dev/null 2>&1; then
echo "agentation-mcp not running — skipping VERIFY_UI, proceeding to CLEANUP"
python3 scripts/jeo-state-update.py error "agentation-mcp not running; VERIFY_UI skipped"
# Proceed to STEP 4 (graceful skip, no exit 1)
fiIf server is running:
-
Set state:,
phase=verify_ui,agentation.active=trueagentation.submit_gate_status=waiting_for_submit -
Wait for explicit human submit — do NOT readbefore submit
/pending- Claude Code: wait for hook
UserPromptSubmit - Others: wait until (or
ANNOTATE_READYalias)AGENTUI_READY
- Claude Code: wait for
-
After submit → set
agentation.submit_gate_status=submitted -
Process annotations:
- Claude Code (MCP): (blocking,
agentation_watch_annotations,batchWindowSeconds:10)timeoutSeconds:120 - Others (HTTP): poll with timeout
GET http://localhost:4747/pending
- Claude Code (MCP):
-
Per-annotation loop:
- → navigate code via
acknowledge(CSS selector) → apply fix →elementPathresolve - Dismissed annotations: skip code changes, increment
annotations.dismissed
-
or timeout → proceed to STEP 4
count=0 -
If QA discovers follow-up work, add it immediately:bash
python3 scripts/jeo-project-sync.py queue follow-up "<new work item>"
NEVER: process draft annotations before submit/onSubmit.
前置检查(全平台通用):
bash
if ! curl -sf --connect-timeout 2 http://localhost:4747/health >/dev/null 2>&1; then
echo "agentation-mcp未运行 — 跳过UI验证,进入清理阶段"
python3 scripts/jeo-state-update.py error "agentation-mcp未运行;跳过UI验证"
# 进入步骤4(优雅跳过,不返回退出码1)
fi如果服务正在运行:
-
设置状态:、
phase=verify_ui、agentation.active=trueagentation.submit_gate_status=waiting_for_submit -
等待明确的人工提交 — 提交前不要读取接口
/pending- Claude Code: 等待钩子
UserPromptSubmit - 其他平台: 等待(或别名
ANNOTATE_READY)AGENTUI_READY
- Claude Code: 等待
-
提交后 → 设置
agentation.submit_gate_status=submitted -
处理标注:
- Claude Code(MCP): (阻塞模式,
agentation_watch_annotations,batchWindowSeconds:10)timeoutSeconds:120 - 其他平台(HTTP): 轮询,带超时
GET http://localhost:4747/pending
- Claude Code(MCP):
-
逐标注处理循环:
- → 通过
acknowledge(CSS选择器)定位代码 → 应用修复 →elementPathresolve - 已驳回的标注: 跳过代码变更,递增
annotations.dismissed
-
或超时 → 进入步骤4
count=0 -
如果QA发现后续工作,立即添加:bash
python3 scripts/jeo-project-sync.py queue follow-up "<新工作项>"
绝对不要: 在submit/onSubmit之前处理草稿标注。
STEP 4: CLEANUP
步骤4: 清理
bash
python3 scripts/jeo-state-update.py checkpoint cleanup
python3 scripts/jeo-state-update.py set phase cleanup
python3 scripts/jeo-project-sync.py stage done- Check for uncommitted changes (warn if present)
- Complete the active task and write the permanent summary:
.jeobashpython3 scripts/jeo-project-sync.py complete <slug> "<what shipped, what QA proved, what follow-up remains>" - If more work is needed, queue it before leaving cleanup:
bash
python3 scripts/jeo-project-sync.py queue next-step "<follow-up work>" - Run worktree cleanup:
bash
bash scripts/worktree-cleanup.sh || git worktree prune - Set
phase=done
bash
python3 scripts/jeo-state-update.py checkpoint cleanup
python3 scripts/jeo-state-update.py set phase cleanup
python3 scripts/jeo-project-sync.py stage done- 检查未提交的变更(如有则发出警告)
- 完成活跃的任务,写入永久摘要:
.jeobashpython3 scripts/jeo-project-sync.py complete <slug> "<交付内容、QA验证结果、剩余后续工作>" - 如果有更多工作需要处理,在离开清理阶段前排队:
bash
python3 scripts/jeo-project-sync.py queue next-step "<后续工作>" - 运行工作树清理:
bash
bash scripts/worktree-cleanup.sh || git worktree prune - 设置
phase=done
Quick Start
快速开始
bash
undefinedbash
undefinedInstall JEO
安装JEO
npx skills add https://github.com/akillness/oh-my-skills --skill jeo
npx skills add https://github.com/akillness/oh-my-skills --skill jeo
Full install (all tools + components)
完整安装(所有工具+组件)
bash scripts/install.sh --all
bash scripts/install.sh --all
Check status
检查状态
bash scripts/check-status.sh
bash scripts/check-status.sh
Per-platform setup
按平台配置
bash scripts/setup-claude.sh # Claude Code hooks
bash scripts/setup-codex.sh # Codex CLI config
bash scripts/setup-gemini.sh # Gemini CLI hooks
bash scripts/setup-opencode.sh # OpenCode plugin
---bash scripts/setup-claude.sh # Claude Code钩子
bash scripts/setup-codex.sh # Codex CLI配置
bash scripts/setup-gemini.sh # Gemini CLI钩子
bash scripts/setup-opencode.sh # OpenCode插件
---Platform Configuration
平台配置
Claude Code
Claude Code
Hook config ():
~/.claude/settings.jsonjson
{
"hooks": {
"PermissionRequest": [{
"matcher": "ExitPlanMode",
"hooks": [{"type": "command", "command": "python3 ~/.claude/skills/jeo/scripts/claude-plan-gate.py", "timeout": 1800}]
}],
"UserPromptSubmit": [{
"matcher": "*",
"hooks": [{"type": "command", "command": "python3 ~/.claude/skills/jeo/scripts/claude-agentation-submit-hook.py", "timeout": 300}]
}]
},
"mcpServers": {
"agentation": {"command": "npx", "args": ["-y", "agentation-mcp", "server"]}
}
}钩子配置():
~/.claude/settings.jsonjson
{
"hooks": {
"PermissionRequest": [{
"matcher": "ExitPlanMode",
"hooks": [{"type": "command", "command": "python3 ~/.claude/skills/jeo/scripts/claude-plan-gate.py", "timeout": 1800}]
}],
"UserPromptSubmit": [{
"matcher": "*",
"hooks": [{"type": "command", "command": "python3 ~/.claude/skills/jeo/scripts/claude-agentation-submit-hook.py", "timeout": 300}]
}]
},
"mcpServers": {
"agentation": {"command": "npx", "args": ["-y", "agentation-mcp", "server"]}
}
}Codex CLI
Codex CLI
Config ():
~/.codex/config.tomltoml
notify = ["python3", "~/.codex/hooks/jeo-notify.py"]
[tui]
notifications = ["agent-turn-complete"]must be a top-level string (not adeveloper_instructions), or Codex fails with[table].invalid type: map, expected a string
配置():
~/.codex/config.tomltoml
notify = ["python3", "~/.codex/hooks/jeo-notify.py"]
[tui]
notifications = ["agent-turn-complete"]必须是顶层字符串(不是developer_instructions),否则Codex会报错[table]。invalid type: map, expected a string
Gemini CLI
Gemini CLI
Instructions in . AfterAgent hook as safety net in .
Agent must call plannotator directly in blocking mode to receive feedback in the same turn.
~/.gemini/GEMINI.md~/.gemini/settings.json说明存放在。AfterAgent钩子作为安全网存放在。
Agent必须直接以阻塞模式调用plannotator,才能在同一轮对话中接收反馈。
~/.gemini/GEMINI.md~/.gemini/settings.jsonOpenCode
OpenCode
Plugins in . Slash commands: , , , .
opencode.json/jeo-plan/jeo-exec/jeo-annotate/jeo-cleanup插件存放在。斜杠命令: 、、、。
opencode.json/jeo-plan/jeo-exec/jeo-annotate/jeo-cleanupState File Reference
状态文件参考
Path:
{worktree}/.omc/state/jeo-state.json| Field | Values | Description |
|---|---|---|
| | Current workflow phase |
| | Human-readable stage mirrored into |
| bool | Whether plan was approved |
| | Plan gate result |
| sha256 or null | Current plan.md hash |
| sha256 or null | Hash of last reviewed plan |
| | How plan was approved |
| bool | Whether team mode is available |
| int | Error retry count (ask user at >= 3) |
| string or null | Most recent error |
| string or null | Last entered phase (for resume) |
| path | Project-local planning ledger root |
| string or null | Active |
| ISO 8601 or null | Last |
| bool | Whether VERIFY_UI watch loop is running |
| | Submit gate state |
| | How watch loop ended |
路径:
{worktree}/.omc/state/jeo-state.json| 字段 | 可选值 | 描述 |
|---|---|---|
| | 当前工作流阶段 |
| | 人类可读的阶段,同步到 |
| 布尔值 | 计划是否获批 |
| | 规划关卡结果 |
| sha256或null | 当前plan.md的哈希 |
| sha256或null | 上一次审阅的计划哈希 |
| | 计划获批的方式 |
| 布尔值 | 团队模式是否可用 |
| 整数 | 错误重试次数(>=3时询问用户) |
| 字符串或null | 最近一次错误 |
| 字符串或null | 上一次进入的阶段(用于恢复) |
| 路径 | 项目本地规划账本根目录 |
| 字符串或null | 活跃 |
| ISO 8601或null | 上一次 |
| 布尔值 | UI验证监听循环是否运行中 |
| | 提交关卡状态 |
| | 监听循环的结束原因 |
Examples
示例
Example 1: New feature with .jeo
ledger
.jeo示例1: 基于.jeo
账本开发新功能
.jeobash
python3 scripts/jeo-project-sync.py init "Build exportable analytics dashboard"
python3 scripts/jeo-project-sync.py start-next
python3 scripts/jeo-project-sync.py stage planningThen run the normal JEO flow: plan approval → development → QA → cleanup. When done:
bash
python3 scripts/jeo-project-sync.py complete 000-primary "Dashboard shipped with unit tests, flow checks, and browser verification."bash
python3 scripts/jeo-project-sync.py init "构建可导出的分析仪表盘"
python3 scripts/jeo-project-sync.py start-next
python3 scripts/jeo-project-sync.py stage planning然后运行常规JEO流程: 计划审批 → 开发 → QA → 清理。完成后:
bash
python3 scripts/jeo-project-sync.py complete 000-primary "仪表盘已交付,包含单元测试、流程检查和浏览器验证。"Example 2: Add follow-up work discovered during QA
示例2: 添加QA阶段发现的后续工作
bash
python3 scripts/jeo-project-sync.py queue qa-follow-up "Fix chart legend overlap on small screens"
python3 scripts/jeo-project-sync.py progress "Queued QA follow-up from annotate review."bash
python3 scripts/jeo-project-sync.py queue qa-follow-up "修复小屏幕下图表图例重叠问题"
python3 scripts/jeo-project-sync.py progress "已排队annotate评审产生的QA后续工作。"Best practices
最佳实践
- Plan first: always review the plan with ralph+plannotator before executing (catches wrong approaches early)
- Team first: omc team mode is most efficient in Claude Code
- bmad fallback: use BMAD in environments without team (Codex, Gemini)
- Keep honest: long-term is durable, short-term is current, history is append-only
.jeo - One active task file: keep only one file under at a time
.jeo/tasks/active/ - Complete means summarize + delete task file: write history first, then remove the task file
- Worktree cleanup: run immediately after work completes (prevents branch pollution)
worktree-cleanup.sh - State persistence: use and
.omc/state/jeo-state.jsontogether across sessions.jeo/ - annotate: use the keyword to run the agentation watch loop for complex UI changes (precise code changes via CSS selector).
annotateis a backward-compatible alias.agentui
- 优先规划: 执行前始终通过ralph+plannotator审阅计划(提前识别错误方向)
- 优先团队模式: Claude Code中omc团队模式效率最高
- BMAD降级: 没有团队模式的环境(Codex、Gemini)使用BMAD
- 保证真实性: 长期规则持久化、短期计划对应当前迭代、历史记录仅追加
.jeo - 单活跃任务文件: 同一时间下仅保留一个文件
.jeo/tasks/active/ - 完成意味着摘要+删除任务文件: 先写入历史,再移除任务文件
- 工作树清理: 工作完成后立即运行(避免分支污染)
worktree-cleanup.sh - 状态持久化: 跨会话同时使用和
.omc/state/jeo-state.json存储.jeo/ - annotate: 复杂UI变更时使用关键词运行agentation监听循环(通过CSS选择器精准修改代码)。
annotate是向后兼容的别名。agentui
Troubleshooting
故障排查
| Issue | Solution |
|---|---|
| plannotator not running | JEO auto-runs |
| plannotator not opening (Claude Code) | It's hook-only. Use |
| Same plan re-reviewed (Codex) | Compare |
| Codex startup failure | Re-run |
| team mode not working | Run |
| agentation not opening | Check |
| annotation not in code | Include |
| Run |
| worktree conflict | |
| 问题 | 解决方案 |
|---|---|
| plannotator未运行 | JEO会自动运行 |
| plannotator未启动(Claude Code) | 仅支持钩子模式。使用 |
| 相同计划被重复审阅(Codex) | 对比 |
| Codex启动失败 | 重新运行 |
| 团队模式不工作 | 运行 |
| agentation未启动 | 检查 |
| 标注未应用到代码 | 调用 |
| 运行 |
| 工作树冲突 | 运行 |
References
参考资料
- oh-my-claudecode — Claude Code multi-agent
- plannotator — visual plan/diff review
- BMAD Method — structured AI development workflow
- Agent Skills Spec — skill format specification
- agentation — UI annotation → agent code fix (;
annotatebackward compatible)agentui - ledger reference — project-local planning, development, and QA ledger
.jeo
- oh-my-claudecode — Claude Code多Agent实现
- plannotator — 可视化计划/差异审阅工具
- BMAD Method — 结构化AI开发工作流
- Agent Skills Spec — 技能格式规范
- agentation — UI标注→Agent代码修复工具(;
annotate向后兼容)agentui - 账本参考 — 项目本地规划、开发和QA账本
.jeo