Loading...
Loading...
Integrated AI agent orchestration skill that combines plannotator, ralphmode, team or bmad execution, agent-browser verification, and agentation feedback loops, while maintaining a project-local `.jeo` ledger for planning, development, and QA. Use when the user wants an end-to-end multi-agent workflow with plan approval, implementation, UI review, cleanup, and durable task history. Triggers on: jeo, annotate, ui-review, multi-agent orchestration.
npx skill4agent add akillness/oh-my-skills jeoKeyword:·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
annotateui-review.jeo/plan_gate_statuspendingplan_approved: true&approvedmanual_approvedfeedback_requiredinfrastructure_blocked.omc/state/jeo-state.jsonscripts/jeo-state-update.py# Initialize (or resume if state exists)
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>
# Record error (auto-increments retry_count; warns at >= 3)
python3 scripts/jeo-state-update.py error "<message>"
# Check resume point
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.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) |
scripts/jeo-project-sync.pypython3 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 phase | Delivery stage | |
|---|---|---|
| | Review |
| | Update the active task checklist and append implementation notes to |
| | Record unit/flow/browser verification evidence in |
| | Append to |
Execute steps in order. Each step only proceeds after the previous one completes.
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-nextExitPlanModeclaude-plan-gate.pyplannotatorimport 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"JEO activated. Delivery stage: planning.ledger initialized. Add the.jeokeyword if a UI feedback loop is needed."annotate
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.".jeo/long-term.md.jeo/short-term.md.jeo/planned.md.jeo/progress.md.jeo/history.mdplan.md.jeo/short-term.md.jeo/short-term.mdEnterPlanModeExitPlanModeExitPlanMode# 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" 3approvedphase=executeplan_approved=trueplan.md.jeo/progress.mdapproved: true&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."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_AVAILABLEnext_modeclaude-plan-gate.py| Condition | Action |
|---|---|
| |
| Claude Code + omc + team | |
| Claude Code without team | Error — run |
| Codex / Gemini / OpenCode | BMAD fallback: |
.jeo/tasks/active/*.md# 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
# 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" --donepython3 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."agent-browser snapshot http://localhost:3000annotate.jeo/short-term.mdpython3 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" --doneannotateif ! 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)
fiphase=verify_uiagentation.active=trueagentation.submit_gate_status=waiting_for_submit/pendingUserPromptSubmitANNOTATE_READYAGENTUI_READYagentation.submit_gate_status=submittedagentation_watch_annotationsbatchWindowSeconds:10timeoutSeconds:120GET http://localhost:4747/pendingacknowledgeelementPathresolveannotations.dismissedcount=0python3 scripts/jeo-project-sync.py queue follow-up "<new work item>"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.jeopython3 scripts/jeo-project-sync.py complete <slug> "<what shipped, what QA proved, what follow-up remains>"python3 scripts/jeo-project-sync.py queue next-step "<follow-up work>"bash scripts/worktree-cleanup.sh || git worktree prunephase=done# Install JEO
npx skills add https://github.com/akillness/oh-my-skills --skill jeo
# Full install (all tools + components)
bash scripts/install.sh --all
# Check status
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~/.claude/settings.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/config.tomlnotify = ["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
~/.gemini/GEMINI.md~/.gemini/settings.jsonopencode.json/jeo-plan/jeo-exec/jeo-annotate/jeo-cleanup{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 |
.jeopython3 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 planningpython3 scripts/jeo-project-sync.py complete 000-primary "Dashboard shipped with unit tests, flow checks, and browser verification."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.".jeo.jeo/tasks/active/worktree-cleanup.sh.omc/state/jeo-state.json.jeo/annotateagentui| 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 | |
annotateagentui.jeo