Summary
omo:ulw-plan can get stuck repeatedly asking for explicit approval after the user has already provided a planning goal and the exploration/draft phase has completed. The loop burns context because each follow-up restates that the final .omo/plans/<slug>.md file cannot be created without the user replying with an exact approval phrase.
Environment
- LazyCodex version: observed in local OMO plugin cache
sisyphuslabs/omo/4.8.1
- Codex version: current Codex session with LazyCodex/OMO skills enabled
- OS: macOS
- Install method: LazyCodex/OMO plugin cache
- Relevant config:
omo:ulw-plan skill and omo:start-work bootstrap flow
Repository Decision
- Target repository:
code-yeongyu/lazycodex
- Why this belongs there: the failing behavior is in the OMO/LazyCodex
ulw-plan skill workflow and its approval-gate instructions, not in upstream Codex core.
- LazyCodex evidence:
skills/ulw-plan/SKILL.md requires explicit user approval before writing .omo/plans/<slug>.md.
skills/ulw-plan/references/full-workflow.md repeats the same approval gate and says no plan file or Metis gap analysis should happen until approval.
skills/start-work/SKILL.md has a narrow no-plan bootstrap exception where an explicit start work request counts as approval, but ordinary ulw-plan has no equivalent robust handling for common approval intent.
- Upstream Codex source evidence from
/tmp/openai-codex-source:
- Searching upstream Codex for
ulw-plan, No plan file, and the explicit planning-gate wording found no matching implementation. Upstream results were unrelated Codex approval/sandbox tests and comments.
Reproduction
- Start a planning workflow with
omo:ulw-plan for a large task, e.g. "Use ulw-plan to create a work plan for an example service subscription workflow."
- Let the skill finish repository exploration and draft the planning approach.
- Observe the assistant stop with a message equivalent to:
- investigation and draft are complete
- final plan creation is blocked by the
omo:ulw-plan approval gate
- the user must reply with a specific phrase such as "write the plan as-is"
- Continue the conversation after context has grown or compaction has happened.
- The assistant can repeat the same blocked approval-gate message instead of recognizing the user's intent or preserving a durable approval request state.
Expected Behavior
After ulw-plan reaches the approval gate, the workflow should handle approval intent robustly and avoid a token-burning loop. Acceptable outcomes would include:
- recognizing common explicit approval replies, not only a narrow phrase;
- persisting approval-gate state in a durable draft/checkpoint so the next turn knows exactly what is waiting;
- treating a clear follow-up such as "yes, write the plan" as approval;
- or, when blocked, emitting a concise single approval prompt without re-running or re-explaining the whole planning state.
Actual Behavior
The workflow repeatedly reports that it is blocked at the approval gate and asks the user to reply with an exact phrase before it can create .omo/plans/<slug>.md. When this repeats, it consumes context/tokens without creating the final plan file.
Evidence
- Local LazyCodex/OMO skill source:
skills/ulw-plan/SKILL.md: "Wait for the user's explicit okay before generating the plan. Never auto-transition from interview to plan generation."
skills/ulw-plan/references/full-workflow.md: approval gate says "No Metis, no plan file, no execution until the user approves."
skills/start-work/SKILL.md: bootstrap mode explicitly treats start work as approval only in the no-plan bootstrap path.
- Existing issue search:
gh issue list --repo code-yeongyu/lazycodex --search "ulw-plan approval gate" --state open
gh issue list --repo code-yeongyu/lazycodex --search "explicit approval plan" --state open
gh issue list --repo code-yeongyu/lazycodex --search "infinite loop approval" --state open
- These searches returned no matching open LazyCodex issue.
- Upstream comparison:
/tmp/openai-codex-source was cloned/fetched and searched. No upstream ulw-plan implementation or matching planning-gate wording was found.
Root Cause
The skill instructions enforce a hard approval gate but do not appear to define a durable, machine-checkable approval state or a broad approval-intent parser for subsequent turns. As a result, after context growth or turn transitions, the assistant can remain in "blocked until exact approval phrase" mode even when the user's intent is to proceed.
Proposed Fix
- Add explicit approval-intent handling to the
ulw-plan workflow:
- accept common approval forms such as "yes", "approve", "write the plan", "proceed", "create the plan", and localized equivalents when they directly follow the approval prompt;
- store the gate state in
.omo/drafts/<slug>.md or another durable checkpoint with the exact pending action and target plan path;
- on the next turn, check the durable gate state before restating the full planning status;
- keep the existing safety boundary for destructive/product-code edits, but do not require an exact magic phrase for plan-file creation.
- Add a regression check around
ulw-plan approval-gate continuation so a clear approval reply transitions to Phase 3 and writes .omo/plans/<slug>.md once.
Verification Plan
- Start an
omo:ulw-plan session, reach the approval gate, reply "yes, create the plan", and verify exactly one .omo/plans/<slug>.md is written.
- Repeat with "proceed" and a localized approval phrase to confirm intent parsing.
- Confirm a non-approval reply such as "change the scope first" does not create the plan and instead updates/re-presents the brief.
- Confirm
$start-work no-plan bootstrap behavior still treats start work as approval and continues into execution as documented.
This issue or PR was generated by LazyCodex.
Tag: lazycodex-generated
Summary
omo:ulw-plancan get stuck repeatedly asking for explicit approval after the user has already provided a planning goal and the exploration/draft phase has completed. The loop burns context because each follow-up restates that the final.omo/plans/<slug>.mdfile cannot be created without the user replying with an exact approval phrase.Environment
sisyphuslabs/omo/4.8.1omo:ulw-planskill andomo:start-workbootstrap flowRepository Decision
code-yeongyu/lazycodexulw-planskill workflow and its approval-gate instructions, not in upstream Codex core.skills/ulw-plan/SKILL.mdrequires explicit user approval before writing.omo/plans/<slug>.md.skills/ulw-plan/references/full-workflow.mdrepeats the same approval gate and says no plan file or Metis gap analysis should happen until approval.skills/start-work/SKILL.mdhas a narrow no-plan bootstrap exception where an explicitstart workrequest counts as approval, but ordinaryulw-planhas no equivalent robust handling for common approval intent./tmp/openai-codex-source:ulw-plan,No plan file, and the explicit planning-gate wording found no matching implementation. Upstream results were unrelated Codex approval/sandbox tests and comments.Reproduction
omo:ulw-planfor a large task, e.g. "Use ulw-plan to create a work plan for an example service subscription workflow."omo:ulw-planapproval gateExpected Behavior
After
ulw-planreaches the approval gate, the workflow should handle approval intent robustly and avoid a token-burning loop. Acceptable outcomes would include:Actual Behavior
The workflow repeatedly reports that it is blocked at the approval gate and asks the user to reply with an exact phrase before it can create
.omo/plans/<slug>.md. When this repeats, it consumes context/tokens without creating the final plan file.Evidence
skills/ulw-plan/SKILL.md: "Wait for the user's explicit okay before generating the plan. Never auto-transition from interview to plan generation."skills/ulw-plan/references/full-workflow.md: approval gate says "No Metis, no plan file, no execution until the user approves."skills/start-work/SKILL.md: bootstrap mode explicitly treatsstart workas approval only in the no-plan bootstrap path.gh issue list --repo code-yeongyu/lazycodex --search "ulw-plan approval gate" --state opengh issue list --repo code-yeongyu/lazycodex --search "explicit approval plan" --state opengh issue list --repo code-yeongyu/lazycodex --search "infinite loop approval" --state open/tmp/openai-codex-sourcewas cloned/fetched and searched. No upstreamulw-planimplementation or matching planning-gate wording was found.Root Cause
The skill instructions enforce a hard approval gate but do not appear to define a durable, machine-checkable approval state or a broad approval-intent parser for subsequent turns. As a result, after context growth or turn transitions, the assistant can remain in "blocked until exact approval phrase" mode even when the user's intent is to proceed.
Proposed Fix
ulw-planworkflow:.omo/drafts/<slug>.mdor another durable checkpoint with the exact pending action and target plan path;ulw-planapproval-gate continuation so a clear approval reply transitions to Phase 3 and writes.omo/plans/<slug>.mdonce.Verification Plan
omo:ulw-plansession, reach the approval gate, reply "yes, create the plan", and verify exactly one.omo/plans/<slug>.mdis written.$start-workno-plan bootstrap behavior still treatsstart workas approval and continues into execution as documented.This issue or PR was generated by LazyCodex.
Tag: lazycodex-generated