jeo

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

JEO — Integrated Agent Orchestration

JEO — 集成式Agent编排

Keyword:
jeo
·
annotate
·
UI-review
·
agentui (deprecated)
| Platforms: Claude Code · Codex CLI · Gemini CLI · OpenCode
Planning (plannotator) → Development (team/bmad) → QA (agent-browser + agentation) → Cleanup (worktree) with a persistent
.jeo
project ledger
关键词:
jeo
·
annotate
·
UI-review
·
agentui (已弃用)
| 支持平台: Claude Code · Codex CLI · Gemini CLI · OpenCode
规划(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
    annotate
    or
    ui-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-review
    添加基于浏览器的UI反馈循环
  • 在单个技能中协调计划审批、执行、验证和清理全流程
  • 将长期规则、短期系统/测试计划、活跃工作项和历史记录存储在
    .jeo/
    目录下

Rules (always enforced)

规则(始终强制执行)

  1. Do not reopen the PLAN gate when the current plan hash already has a terminal result
  2. Only a revised plan resets
    plan_gate_status
    to
    pending
  3. Do not process agentation annotations before explicit submit/onSubmit opens the submit gate
  4. NEVER enter EXECUTE without
    plan_approved: true
  5. NEVER run plannotator or agentation with
    &
    (background)
  6. NEVER reopen an unchanged plan after
    approved
    ,
    manual_approved
    ,
    feedback_required
    , or
    infrastructure_blocked
Authoritative state:
.omc/state/jeo-state.json

  1. 当当前计划哈希已经有终态结果时,不要重新打开PLAN关卡
  2. 只有修订后的计划才能将
    plan_gate_status
    重置为
    pending
  3. 在明确的submit/onSubmit打开提交关卡前,不要处理agentation标注
  4. 绝对不要
    plan_approved: true
    之前进入EXECUTE阶段
  5. 绝对不要以后台模式(
    &
    )运行plannotator或agentation
  6. 绝对不要在计划进入
    approved
    manual_approved
    feedback_required
    infrastructure_blocked
    状态后重新打开未修改的计划
权威状态存储:
.omc/state/jeo-state.json

State Management

状态管理

All state operations use one script:
scripts/jeo-state-update.py
bash
undefined
所有状态操作统一使用一个脚本:
scripts/jeo-state-update.py
bash
undefined

Initialize (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
.jeo/
and a machine-readable state file in
.omc/state/jeo-state.json
.
PathPurpose
.jeo/long-term.md
Durable product intent, standing rules, validation contract
.jeo/short-term.md
Current system slice, unit-test plan, flow-test plan, exit criteria
.jeo/planned.md
Planned queue and parking-lot items
.jeo/progress.md
Current delivery stage and timestamped updates
.jeo/history.md
Append-only completion summaries
.jeo/tasks/queued/*.md
Queued work-item files
.jeo/tasks/active/*.md
Single active work-item file (removed on completion after history is written)
Use
scripts/jeo-project-sync.py
to keep the ledger in sync:
bash
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 status
JEO在
.jeo/
目录下维护人类可读的项目账本,同时在
.omc/state/jeo-state.json
存储机器可读的状态文件。
路径用途
.jeo/long-term.md
持久化产品意图、固定规则、验证契约
.jeo/short-term.md
当前系统切片、单元测试计划、流程测试计划、退出标准
.jeo/planned.md
计划队列和待处理项
.jeo/progress.md
当前交付阶段和带时间戳的更新记录
.jeo/history.md
仅追加的完成摘要记录
.jeo/tasks/queued/*.md
排队的工作项文件
.jeo/tasks/active/*.md
单个活跃工作项文件(完成后写入历史,然后移除)
使用
scripts/jeo-project-sync.py
保持账本同步:
bash
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 status

Phase mapping

阶段映射

JEO phaseDelivery stage
.jeo
expectation
plan
planning
Review
long-term.md
, refine
short-term.md
, confirm the active work item
execute
development
Update the active task checklist and append implementation notes to
progress.md
verify
/
verify_ui
qa
Record unit/flow/browser verification evidence in
short-term.md
and
progress.md
cleanup
/
done
done
Append to
history.md
, check off
planned.md
, remove the task file, queue follow-up work if needed
Detailed ledger rules: references/DOT_JEO_LEDGER.md

JEO阶段交付阶段
.jeo
要求
plan
planning
审阅
long-term.md
,优化
short-term.md
,确认活跃工作项
execute
development
更新活跃任务检查清单,在
progress.md
追加实现说明
verify
/
verify_ui
qa
short-term.md
progress.md
记录单元/流程/浏览器验证证据
cleanup
/
done
done
追加到
history.md
,勾选
planned.md
中的完成项,移除任务文件,如有需要排队后续工作
详细账本规则: 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-next
Claude Code only — hook self-check (run inline):
Verify the
ExitPlanMode
hook is using
claude-plan-gate.py
, not raw
plannotator
. If misconfigured, auto-repair:
python
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)
                            break
Notify the user:
"JEO activated. Delivery stage: planning.
.jeo
ledger initialized. Add the
annotate
keyword if a UI feedback loop is needed."

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 — 钩子自检(内联运行):
验证
ExitPlanMode
钩子使用的是
claude-plan-gate.py
,而非原生
plannotator
。如果配置错误,自动修复:
python
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已激活。交付阶段: 规划。
.jeo
账本已初始化。如果需要UI反馈循环,请添加
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."
  1. Review
    .jeo/long-term.md
    ,
    .jeo/short-term.md
    ,
    .jeo/planned.md
    ,
    .jeo/progress.md
    , and
    .jeo/history.md
    before changing scope.
  2. Write
    plan.md
    (include goal, steps, risks, completion criteria, and the current planning/development/QA expectations from
    .jeo/short-term.md
    ).
  3. Update
    .jeo/short-term.md
    with:
    • the system slice for this run
    • the unit-test plan
    • the flow/browser verification plan
  4. Invoke plannotator (per platform):
    Claude Code (hook mode — only supported method):
    • Call
      EnterPlanMode
      → write plan content → call
      ExitPlanMode
    • The
      ExitPlanMode
      PermissionRequest hook fires plannotator automatically
    • 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
  5. Check result:
    • approved
      (exit 0) → set
      phase=execute
      ,
      plan_approved=true
      STEP 2
    • Feedback (exit 10) → read feedback, revise
      plan.md
      , repeat step 2
    • 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
  6. When the plan is approved, append a note to
    .jeo/progress.md
    describing what is ready to build and what QA must prove.
NEVER: enter EXECUTE without
approved: true
. NEVER: run with
&
background.

bash
python3 scripts/jeo-state-update.py checkpoint plan
python3 scripts/jeo-project-sync.py stage planning
python3 scripts/jeo-project-sync.py progress "进入规划关卡。"
  1. 修改范围前先审阅
    .jeo/long-term.md
    .jeo/short-term.md
    .jeo/planned.md
    .jeo/progress.md
    .jeo/history.md
  2. 编写
    plan.md
    (包含目标、步骤、风险、完成标准,以及
    .jeo/short-term.md
    中当前规划/开发/QA的要求)。
  3. 更新
    .jeo/short-term.md
    ,补充:
    • 本次运行的系统切片
    • 单元测试计划
    • 流程/浏览器验证计划
  4. 调用plannotator(按平台适配):
    Claude Code(钩子模式 — 唯一支持的方式):
    • 调用
      EnterPlanMode
      → 编写计划内容 → 调用
      ExitPlanMode
    • ExitPlanMode
      PermissionRequest钩子会自动触发plannotator
    • 等待钩子返回结果后再继续
    • 绝对不要在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
  5. 检查结果:
    • approved
      (退出码0)→ 设置
      phase=execute
      plan_approved=true
      → 进入步骤2
    • 需要反馈(退出码10)→ 读取反馈,修订
      plan.md
      ,重复步骤2
    • 基础设施阻塞(退出码32)→ 进入对话审批模式: 向用户输出plan.md,询问是否“approve”或提供反馈。等待用户响应
    • 会话退出3次(退出码30/31)→ 询问用户是否终止
  6. 计划获批后,在
    .jeo/progress.md
    追加说明,描述待构建内容和QA需要验证的内容。
绝对不要: 没有
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_AVAILABLE
Check
next_mode
in state
(set by
claude-plan-gate.py
on approval):
ConditionAction
next_mode == "ralphmode"
/omc:ralphmode "<task>"
Claude Code + omc + team
/omc:team 3:executor "<task>"
Claude Code without teamError — run
bash scripts/setup-claude.sh
, enable
AGENT_TEAMS=1
, restart
Codex / Gemini / OpenCodeBMAD fallback:
/workflow-init
then
/workflow-status
While executing, keep the active
.jeo/tasks/active/*.md
file current using:
bash
undefined
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 "已基于获批计划启动开发。"
自动检测团队模式可用性:
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_mode
(获批时由
claude-plan-gate.py
设置):
条件操作
next_mode == "ralphmode"
/omc:ralphmode "<task>"
Claude Code + omc + 团队模式
/omc:team 3:executor "<task>"
无团队模式的Claude Code错误 — 运行
bash scripts/setup-claude.sh
,开启
AGENT_TEAMS=1
,重启
Codex / Gemini / OpenCodeBMAD降级方案: 运行
/workflow-init
然后
/workflow-status
执行过程中,使用以下命令保持
.jeo/tasks/active/*.md
的活跃任务文件更新:
bash
undefined

When 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."
  1. Browser verification with agent-browser (when browser UI is present):
    bash
    agent-browser snapshot http://localhost:3000
  2. annotate
    keyword detected → enter STEP 3.1
  3. Otherwise → enter STEP 4
  4. Record QA evidence in
    .jeo/short-term.md
    using:
    bash
    python3 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验证阶段。"
  1. 使用agent-browser做浏览器验证(存在浏览器UI时):
    bash
    agent-browser snapshot http://localhost:3000
  2. 检测到
    annotate
    关键词 → 进入步骤3.1
  3. 否则 → 进入步骤4
  4. 使用以下命令在
    .jeo/short-term.md
    记录QA证据:
    bash
    python3 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)

步骤3.1: UI验证(仅检测到
annotate
关键词时执行)

Pre-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)
fi
If server is running:
  1. Set state:
    phase=verify_ui
    ,
    agentation.active=true
    ,
    agentation.submit_gate_status=waiting_for_submit
  2. Wait for explicit human submit — do NOT read
    /pending
    before submit
    • Claude Code: wait for
      UserPromptSubmit
      hook
    • Others: wait until
      ANNOTATE_READY
      (or
      AGENTUI_READY
      alias)
  3. After submit → set
    agentation.submit_gate_status=submitted
  4. Process annotations:
    • Claude Code (MCP):
      agentation_watch_annotations
      (blocking,
      batchWindowSeconds:10
      ,
      timeoutSeconds:120
      )
    • Others (HTTP): poll
      GET http://localhost:4747/pending
      with timeout
  5. Per-annotation loop:
    • acknowledge
      → navigate code via
      elementPath
      (CSS selector) → apply fix →
      resolve
    • Dismissed annotations: skip code changes, increment
      annotations.dismissed
  6. count=0
    or timeout → proceed to STEP 4
  7. 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
如果服务正在运行:
  1. 设置状态:
    phase=verify_ui
    agentation.active=true
    agentation.submit_gate_status=waiting_for_submit
  2. 等待明确的人工提交 — 提交前不要读取
    /pending
    接口
    • Claude Code: 等待
      UserPromptSubmit
      钩子
    • 其他平台: 等待
      ANNOTATE_READY
      (或别名
      AGENTUI_READY
  3. 提交后 → 设置
    agentation.submit_gate_status=submitted
  4. 处理标注:
    • Claude Code(MCP):
      agentation_watch_annotations
      (阻塞模式,
      batchWindowSeconds:10
      timeoutSeconds:120
    • 其他平台(HTTP): 轮询
      GET http://localhost:4747/pending
      ,带超时
  5. 逐标注处理循环:
    • acknowledge
      → 通过
      elementPath
      (CSS选择器)定位代码 → 应用修复 →
      resolve
    • 已驳回的标注: 跳过代码变更,递增
      annotations.dismissed
  6. count=0
    或超时 → 进入步骤4
  7. 如果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
  1. Check for uncommitted changes (warn if present)
  2. Complete the active
    .jeo
    task and write the permanent summary:
    bash
    python3 scripts/jeo-project-sync.py complete <slug> "<what shipped, what QA proved, what follow-up remains>"
  3. If more work is needed, queue it before leaving cleanup:
    bash
    python3 scripts/jeo-project-sync.py queue next-step "<follow-up work>"
  4. Run worktree cleanup:
    bash
    bash scripts/worktree-cleanup.sh || git worktree prune
  5. 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
  1. 检查未提交的变更(如有则发出警告)
  2. 完成活跃的
    .jeo
    任务,写入永久摘要:
    bash
    python3 scripts/jeo-project-sync.py complete <slug> "<交付内容、QA验证结果、剩余后续工作>"
  3. 如果有更多工作需要处理,在离开清理阶段前排队:
    bash
    python3 scripts/jeo-project-sync.py queue next-step "<后续工作>"
  4. 运行工作树清理:
    bash
    bash scripts/worktree-cleanup.sh || git worktree prune
  5. 设置
    phase=done

Quick Start

快速开始

bash
undefined
bash
undefined

Install JEO

安装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.json
):
json
{
  "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.json
):
json
{
  "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.toml
):
toml
notify = ["python3", "~/.codex/hooks/jeo-notify.py"]
[tui]
notifications = ["agent-turn-complete"]
developer_instructions
must be a top-level string (not a
[table]
), or Codex fails with
invalid type: map, expected a string
.
配置(
~/.codex/config.toml
):
toml
notify = ["python3", "~/.codex/hooks/jeo-notify.py"]
[tui]
notifications = ["agent-turn-complete"]
developer_instructions
必须是顶层字符串(不是
[table]
),否则Codex会报错
invalid type: map, expected a string

Gemini CLI

Gemini CLI

Instructions in
~/.gemini/GEMINI.md
. AfterAgent hook as safety net in
~/.gemini/settings.json
. Agent must call plannotator directly in blocking mode to receive feedback in the same turn.
说明存放在
~/.gemini/GEMINI.md
。AfterAgent钩子作为安全网存放在
~/.gemini/settings.json
。 Agent必须直接以阻塞模式调用plannotator,才能在同一轮对话中接收反馈。

OpenCode

OpenCode

Plugins in
opencode.json
. Slash commands:
/jeo-plan
,
/jeo-exec
,
/jeo-annotate
,
/jeo-cleanup
.

插件存放在
opencode.json
。斜杠命令:
/jeo-plan
/jeo-exec
/jeo-annotate
/jeo-cleanup

State File Reference

状态文件参考

Path:
{worktree}/.omc/state/jeo-state.json
FieldValuesDescription
phase
plan|execute|verify|verify_ui|cleanup|done
Current workflow phase
delivery_stage
planning|development|qa|done
Human-readable stage mirrored into
.jeo/progress.md
plan_approved
boolWhether plan was approved
plan_gate_status
pending|approved|feedback_required|infrastructure_blocked|manual_approved
Plan gate result
plan_current_hash
sha256 or nullCurrent plan.md hash
last_reviewed_plan_hash
sha256 or nullHash of last reviewed plan
plan_review_method
plannotator|manual|null
How plan was approved
team_available
boolWhether team mode is available
retry_count
intError retry count (ask user at >= 3)
last_error
string or nullMost recent error
checkpoint
string or nullLast entered phase (for resume)
jeo.root
pathProject-local planning ledger root
jeo.active_task
string or nullActive
.jeo
work item slug
jeo.last_sync_at
ISO 8601 or nullLast
.jeo
sync timestamp
agentation.active
boolWhether VERIFY_UI watch loop is running
agentation.submit_gate_status
idle|waiting_for_submit|submitted
Submit gate state
agentation.exit_reason
all_resolved|timeout|user_cancelled|error|null
How watch loop ended

路径:
{worktree}/.omc/state/jeo-state.json
字段可选值描述
phase
plan|execute|verify|verify_ui|cleanup|done
当前工作流阶段
delivery_stage
planning|development|qa|done
人类可读的阶段,同步到
.jeo/progress.md
plan_approved
布尔值计划是否获批
plan_gate_status
pending|approved|feedback_required|infrastructure_blocked|manual_approved
规划关卡结果
plan_current_hash
sha256或null当前plan.md的哈希
last_reviewed_plan_hash
sha256或null上一次审阅的计划哈希
plan_review_method
plannotator|manual|null
计划获批的方式
team_available
布尔值团队模式是否可用
retry_count
整数错误重试次数(>=3时询问用户)
last_error
字符串或null最近一次错误
checkpoint
字符串或null上一次进入的阶段(用于恢复)
jeo.root
路径项目本地规划账本根目录
jeo.active_task
字符串或null活跃
.jeo
工作项的slug
jeo.last_sync_at
ISO 8601或null上一次
.jeo
同步的时间戳
agentation.active
布尔值UI验证监听循环是否运行中
agentation.submit_gate_status
idle|waiting_for_submit|submitted
提交关卡状态
agentation.exit_reason
all_resolved|timeout|user_cancelled|error|null
监听循环的结束原因

Examples

示例

Example 1: New feature with
.jeo
ledger

示例1: 基于
.jeo
账本开发新功能

bash
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 planning
Then 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

最佳实践

  1. Plan first: always review the plan with ralph+plannotator before executing (catches wrong approaches early)
  2. Team first: omc team mode is most efficient in Claude Code
  3. bmad fallback: use BMAD in environments without team (Codex, Gemini)
  4. Keep
    .jeo
    honest
    : long-term is durable, short-term is current, history is append-only
  5. One active task file: keep only one file under
    .jeo/tasks/active/
    at a time
  6. Complete means summarize + delete task file: write history first, then remove the task file
  7. Worktree cleanup: run
    worktree-cleanup.sh
    immediately after work completes (prevents branch pollution)
  8. State persistence: use
    .omc/state/jeo-state.json
    and
    .jeo/
    together across sessions
  9. annotate: use the
    annotate
    keyword to run the agentation watch loop for complex UI changes (precise code changes via CSS selector).
    agentui
    is a backward-compatible alias.

  1. 优先规划: 执行前始终通过ralph+plannotator审阅计划(提前识别错误方向)
  2. 优先团队模式: Claude Code中omc团队模式效率最高
  3. BMAD降级: 没有团队模式的环境(Codex、Gemini)使用BMAD
  4. 保证
    .jeo
    真实性
    : 长期规则持久化、短期计划对应当前迭代、历史记录仅追加
  5. 单活跃任务文件: 同一时间
    .jeo/tasks/active/
    下仅保留一个文件
  6. 完成意味着摘要+删除任务文件: 先写入历史,再移除任务文件
  7. 工作树清理: 工作完成后立即运行
    worktree-cleanup.sh
    (避免分支污染)
  8. 状态持久化: 跨会话同时使用
    .omc/state/jeo-state.json
    .jeo/
    存储
  9. annotate: 复杂UI变更时使用
    annotate
    关键词运行agentation监听循环(通过CSS选择器精准修改代码)。
    agentui
    是向后兼容的别名。

Troubleshooting

故障排查

IssueSolution
plannotator not runningJEO auto-runs
ensure-plannotator.sh
; if it fails:
bash scripts/check-status.sh
plannotator not opening (Claude Code)It's hook-only. Use
EnterPlanMode
ExitPlanMode
. Check:
cat ~/.claude/settings.json
Same plan re-reviewed (Codex)Compare
last_reviewed_plan_hash
with current plan.md hash — skip if match + terminal status
Codex startup failureRe-run
bash scripts/setup-codex.sh
developer_instructions
must be a top-level string
team mode not workingRun
bash scripts/setup-claude.sh
, restart Claude Code, verify
AGENT_TEAMS=1
agentation not openingCheck
curl http://localhost:4747/health
and
/sessions
annotation not in codeInclude
summary
field when calling
agentation_resolve_annotation
.jeo
not updating
Run
python3 scripts/jeo-project-sync.py status
and ensure
.jeo/
exists at the git root
worktree conflict
git worktree prune && git worktree list

问题解决方案
plannotator未运行JEO会自动运行
ensure-plannotator.sh
;如果失败: 运行
bash scripts/check-status.sh
plannotator未启动(Claude Code)仅支持钩子模式。使用
EnterPlanMode
ExitPlanMode
。检查配置:
cat ~/.claude/settings.json
相同计划被重复审阅(Codex)对比
last_reviewed_plan_hash
和当前plan.md哈希 — 如果匹配且为终态则跳过
Codex启动失败重新运行
bash scripts/setup-codex.sh
developer_instructions
必须是顶层字符串
团队模式不工作运行
bash scripts/setup-claude.sh
,重启Claude Code,确认
AGENT_TEAMS=1
已开启
agentation未启动检查
curl http://localhost:4747/health
/sessions
接口
标注未应用到代码调用
agentation_resolve_annotation
时包含
summary
字段
.jeo
未更新
运行
python3 scripts/jeo-project-sync.py status
,确认
.jeo/
目录存在于git根目录
工作树冲突运行
git worktree prune && git worktree list

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 (
    annotate
    ;
    agentui
    backward compatible)
  • .jeo
    ledger reference
    — project-local planning, development, and QA ledger
  • oh-my-claudecode — Claude Code多Agent实现
  • plannotator — 可视化计划/差异审阅工具
  • BMAD Method — 结构化AI开发工作流
  • Agent Skills Spec — 技能格式规范
  • agentation — UI标注→Agent代码修复工具(
    annotate
    agentui
    向后兼容)
  • .jeo
    账本参考
    — 项目本地规划、开发和QA账本