ULW Plan Workflow
code-yeongyu/oh-my-openagent
Explore-first planning that turns a vague or large request into one decision-complete work plan, written only after your approval and executed by a separate worker.
Charts a foggy effort into a map of decision tickets on the repo's issue tracker and works through them one per session, producing decisions rather than deliverables.
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill ask-navigator -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Yeachan-Heo/oh-my-claudecode ask-navigator --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Yeachan-Heo/oh-my-claudecode.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ask-navigator .claude/skills/ask-navigator && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ask-navigator" agent skill from https://github.com/Yeachan-Heo/oh-my-claudecode/tree/main/skills/ask-navigator into .claude/skills/ask-navigator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ask-navigator", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Yeachan-Heo/oh-my-claudecode/tree/main/skills/ask-navigatorType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill ask-navigator -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Yeachan-Heo/oh-my-claudecode ask-navigator --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yeachan-Heo/oh-my-claudecode.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ask-navigator .agents/skills/ask-navigator && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ask-navigator" agent skill from https://github.com/Yeachan-Heo/oh-my-claudecode/tree/main/skills/ask-navigator into .agents/skills/ask-navigator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ask-navigator", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill ask-navigator -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Yeachan-Heo/oh-my-claudecode ask-navigator --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yeachan-Heo/oh-my-claudecode.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ask-navigator .cursor/skills/ask-navigator && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ask-navigator" agent skill from https://github.com/Yeachan-Heo/oh-my-claudecode/tree/main/skills/ask-navigator into .cursor/skills/ask-navigator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ask-navigator", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Yeachan-Heo/oh-my-claudecode.git --path skills/ask-navigator--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill ask-navigator -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Yeachan-Heo/oh-my-claudecode ask-navigator --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yeachan-Heo/oh-my-claudecode.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ask-navigator .gemini/skills/ask-navigator && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ask-navigator" agent skill from https://github.com/Yeachan-Heo/oh-my-claudecode/tree/main/skills/ask-navigator into .gemini/skills/ask-navigator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ask-navigator", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Yeachan-Heo/oh-my-claudecode ask-navigatorInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill ask-navigator -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Yeachan-Heo/oh-my-claudecode.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ask-navigator .github/skills/ask-navigator && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ask-navigator" agent skill from https://github.com/Yeachan-Heo/oh-my-claudecode/tree/main/skills/ask-navigator into .github/skills/ask-navigator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ask-navigator", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Yeachan-Heo/oh-my-claudecode --skill ask-navigator -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Yeachan-Heo/oh-my-claudecode ask-navigator --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yeachan-Heo/oh-my-claudecode.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ask-navigator .opencode/skills/ask-navigator && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ask-navigator" agent skill from https://github.com/Yeachan-Heo/oh-my-claudecode/tree/main/skills/ask-navigator into .opencode/skills/ask-navigator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ask-navigator", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ask-navigatorCharts a foggy effort into a map of decision tickets on the repo's issue tracker and works through them one per session, producing decisions rather than deliverables.
Efforts with fog around the destination are the target. A fog test asks whether the destination can be stated in one sentence and whether the first three decisions can be named; if either answer is no, the effort is charted as a single map issue labelled navigator:map, with each decision as a child ticket. If both are yes, the work goes straight to the launch skill instead.
Roles are fixed: the human captain signs off the destination and the chart, while the agent drafts everything else and never answers a question that belongs to the captain. Facts are the agent's job and decisions are the captain's. Maps live on GitHub, GitLab or a recorded tracker with native sub-issue and blocking links, or in local markdown files under .omc/wayfinder as a single-driver fallback. Collapsed decisions are handed to the launch skill as a mission brief.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 454bae0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
nodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ask Navigator loads about 4.1k tokens when it runs. Until then it costs about 93 tokens; SKILL.md has 2,294 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Yeachan-Heo/oh-my-claudecode at commit 454bae0, republished under its MIT licence (© Yeachan-Heo). 2,294 words, ~4,055 tokens.
.claude/skills/ask-navigator/SKILL.md (or your agent's skills folder).Ask-navigator is the shipyard's navigator: it takes an effort wrapped in fog — the way from here to the destination isn't visible yet — and charts it as a map of decision tickets on the repo's issue tracker, then works the frontier one ticket per session until the route is clear. It produces decisions, never deliverables: when the way is clear it hands off, it doesn't build. Delivery belongs to /oh-my-claudecode:launch.
The role contract. The captain (the human) signs the destination (W1) and the chart (W2); the navigator drafts everything else and never answers a question that belongs to the captain — a grilling session in which the agent answers its own questions has broken the role, not just the process. Facts are the navigator's job; decisions are the captain's.
Fog test. An effort has fog when either answer is no:
Both yes → no map is needed; run /oh-my-claudecode:launch (its fog gate sends efforts here only when an answer is no). Either no → chart first. ask-navigator is also reachable directly: invoke it with a loose idea, with residual questions handed over by launch's fog gate, or with no argument to continue the open map.
The map is a single issue labelled navigator:map on the repo's issue tracker; its decision tickets are child issues of the map. The tracker should have been recorded by /oh-my-claudecode:drydock; if none was recorded, ask once (GitHub / GitLab / local markdown) and remember the answer inside the map's Notes.
navigator:map label if the tracker doesn't have it yet; ticket types live in the ticket body, not in labels..omc/wayfinder/<map-slug>/map.md plus decisions/NN-<slug>.md, one file per ticket, numbered in dependency order. Local mode has no concurrent-claim guarantee: it is single-driver by convention, stated once in the map's Notes.The map is an index, not a store: a decision lives in exactly one place — its ticket. The map gists each resolution in one line and links; it never restates the detail.
Map and ticket prose follow the same document-language contract as /oh-my-claudecode:drydock: read documentLanguage from CONTEXT.md frontmatter when present; if the yard is not laid, ask the language question once during charting (W2) and record the resolved tag in the map's Notes so the later launch run inherits it. Paths, labels, slash commands, the navigator:map label, ticket-type names (research, loft, grilling, task), HITL/AFK, and blockedBy are stable tokens and stay byte-for-byte stable in every language.
Invoked with a loose idea (or launch's residual questions). Charting is one session's work; it hand-resolves nothing.
/oh-my-claudecode:drydock --check audit in report-only mode — the mechanical subset via node scripts/shipyard-audit.mjs, the heuristic classes via the drydock prose audit: findings never block charting (a map produces decisions, not slot landings), but they are recorded verbatim in the map's Notes — launch's yard gate will collect that debt when the effort finally enters delivery. If the yard is not laid at all (no CONTEXT.md, no docs/adr/), offer /oh-my-claudecode:drydock once; if the captain declines, proceed in tracker-only mode and defer all sediment (see Sediment).--frontier): fan out across the whole space rather than deep on any one thread — each round asks the whole frontier of decisions whose prerequisites are settled, then recomputes from the answers — surfacing the open decisions and the first steps takeable now. When charting against an existing map (residual questions or a redraw), read its Out of scope section before ticketing — ruled-out work never re-enters as a fresh ticket. If this surfaces no fog — the way to the destination is already clear and the journey fits one session — no map is needed: stop and recommend /oh-my-claudecode:launch.navigator:map; create child tickets; wire blocking edges in a second pass (issues need ids before they can reference each other). Everything not yet sharp enough to ticket stays in Not yet specified.research ticket just created, spawn a background subagent to resolve it in parallel (see Ticket types), capturing findings where the ticket can link them./oh-my-claudecode:ask-navigator to work the next decision."Invoked with a map (link or number) or with no argument (pick up the open map). A ticket is optional: without one, take the next frontier ticket, not one the captain must choose.
Claimed-by (local) first, so concurrent sessions skip it. An open, unclaimed ticket is unclaimed. If assignment isn't possible (permissions, no handle), record the claim in a ticket comment instead.[<ticket title>](link): <one-line gist>.When charting reveals an effort whose frontier no number of sessions is likely to clear quickly — decisions fanning out across several independent threads, a destination that keeps opening new fog — the map itself becomes long-lived rather than a short stop on the way to launch:
Long-lived is a property of the map, not a mode switch: the same map issue, the same child tickets, the same rules. When the fog finally clears, the exit is unchanged — collapse the decisions into the mission brief and hand off.
Every ticket is HITL (worked with the captain, who speaks for themselves) or AFK (driven by the navigator alone). A HITL ticket only resolves through live exchange; the agent never stands in for the captain's side.
| Type | Mode | Resolved by | Use when |
|---|---|---|---|
research | AFK | Background subagent: investigate against primary sources (official docs, source code, specs), leave a cited Markdown file at docs/research/<ticket-slug>.md (or the repo's existing notes convention when one exists), link it from the ticket | A decision waits on knowledge outside the current working directory |
loft | HITL | Call the Skill tool with "loft": a throwaway artifact answers the ticket's question — a pure logic module in a clickable shell, or structurally different UI variants behind one route; the captain reacts, the answer folds into the resolution, the artifact stays on a loft/<name> branch | The question is precise but prose cannot settle it — it needs to be seen or clicked, not described |
grilling | HITL | Call the Skill tool with "deep-interview"; the captain decides each round | Conversation is the resolution — the default case |
task | HITL or AFK | The navigator drives it alone where it can; otherwise hands the captain a precise checklist | Manual work that unblocks a decision (sign up for a service, provision access, move data so its shape can be seen) — it earns its place by unblocking a decision, not by delivering the destination |
The answer is never part of the ticket body; it is recorded on resolution. Assets created while resolving are linked from the ticket, not pasted in.
A research ticket whose knowledge lives in a person rather than a document resolves by asking that person directly: one tracker comment naming them (per the granted communication scope), carrying everything they need to answer in one read, and their reply is cited as the primary source — the same standard a document source would meet. No third party is cold-contacted; a person the evidence does not name gets no question. The resolution records who answered and where, so the map's index points at the reply, not at a paraphrase.
A research file speaks the yard's one evidence format: it opens by restating the question it answers, every claim links its source, and it closes with an Unverified section — what could not be confirmed, and why it matters.
## Destination
<what reaching the end of this map looks like: the spec, decision, or change this effort is finding its way to. One or two lines; every session orients to it before choosing a ticket.>
## Notes
<domain; skills every session should consult; standing preferences; deferred drydock --check findings (verbatim); resolved documentLanguage tag; tracker-mode caveats for local mode>
## Decisions so far
<!-- the index: one line per closed ticket, enough to judge relevance, then zoom the link for the detail the ticket holds -->
- [<closed ticket title>](link): <one-line gist of the answer>
## Not yet specified
<!-- in-scope fog you cannot ticket yet; graduates as the frontier advances -->
## Out of scope
<!-- work ruled beyond the destination; closed, never graduates -->Fog or ticket? The test is whether you can state the question precisely now, not whether you can answer it now. Ticket when the question is already sharp, even if it is blocked. Not-yet-specified when you cannot phrase it that sharply — do not pre-slice the fog into ticket-sized pieces; one patch may graduate into several tickets, or none. Out of scope is a scoping act, not a step on the route: scope, not sharpness, lands work there, and it returns only if the destination is redrawn.
Resolutions land in the shipyard's paper trail the moment they settle — the same slots launch's Phase 1 uses:
CONTEXT.md glossary (one entry: definition, boundary, resolved ambiguity)docs/adr/NNNN-<slug>.mddocs/business/ (one article per business question)When the yard is not laid (the captain declined drydock at charting time), defer, don't skip: record each pending landing as one line in the map's Notes under a Deferred sediment heading. The later /oh-my-claudecode:launch run's yard gate treats the un-laid surfaces as findings, and the deferred lines tell it exactly what to land first.
The map is done when no open tickets remain and Not yet specified is empty. Then:
.omc/wayfinder/<map-slug>/brief.md so the handoff passes a pointer, not content./oh-my-claudecode:launch with the brief at .omc/wayfinder/<map-slug>/brief.md." The map stays as the effort's logbook; launch's yard gate owns every check from there./oh-my-claudecode:harbor charts like any loose idea, with the original thread and any signed decision links as material.task ticket, which does only what unblocks a decision.A charting session ends with a captain-signed map and fired research tickets. A working session ends with exactly one resolution recorded, the frontier advanced, and the session-close pointer emitted. The effort ends when the way is clear and the mission brief is in the captain's hands with /oh-my-claudecode:launch recommended — every decision the navigator made on the captain's behalf answerable with one pointer to where it was recorded.
© Yeachan-Heo, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/ask-navigator of Yeachan-Heo/oh-my-claudecode.
Open the folder on GitHubat commit 454bae0
Ask Navigator next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ask Navigator this skillYeachan-Heo/oh-my-claudecode | 40k | — | ~4.1k | Automated safety check: Pass | MIT | |
| ULW Plan Workflowcode-yeongyu/oh-my-openagent | 70k | — | ~3.9k | Automated safety check: Pass | Custom licence | |
| Plannotator Goal Setupbacknotprop/plannotator | 9.3k | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Dev RequestFHIR/fhir-codegen | 155 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Blueprint Construction Planneraffaan-m/ECC | 277k | 5 repos | ~1.3k | Automated safety check: Pass | MIT | |
| GitHub Issue Readerjumppad-labs/jumppad | 263 | — | ~958 | Automated safety check: Pass | MPL-2.0 |
code-yeongyu/oh-my-openagent
Explore-first planning that turns a vague or large request into one decision-complete work plan, written only after your approval and executed by a separate worker.
backnotprop/plannotator
Guides the agent from a vague objective to a written goal package under goals/, using a confirmed restatement, a browser interview, a fact sheet and a codebase pass.
FHIR/fhir-codegen
Drafts and iterates on local-development feature requests in the role of a staff-level Product Manager.
affaan-m/ECC
Turns a one-line objective into a multi-step plan file with PR-sized steps, context briefs, a dependency graph, parallel-step detection and an adversarial review.
jumppad-labs/jumppad
Pulls a GitHub issue's description, comments, labels, assignees, milestone and linked pull requests into one markdown report so the agent can plan a fix.
addyosmani/agent-skills
Asks one question at a time, each with a best guess attached, until the agent is about 95 percent sure what you really want, before any plan, spec or code.
Yeachan-Heo/oh-my-claudecode
Sends a question or task to another locally installed agent CLI, such as Codex or Gemini, through omc ask and saves the answer as a file.
Yeachan-Heo/oh-my-claudecode
Runs an autonomous improvement loop on a repository: agents propose and execute plans, a tournament picks the winner by benchmark, and each round is recorded and plotted.
Yeachan-Heo/oh-my-claudecode
Takes a short product idea through requirements, design, planning, parallel implementation, QA cycles and multi-reviewer validation to produce working code.
Yeachan-Heo/oh-my-claudecode
Detects and gracefully cancels whichever OMC mode, autopilot, ralph, swarm, pipeline, or team, is currently active, then clears its state.
Yeachan-Heo/oh-my-claudecode
Maps a codebase directory by directory and writes linked AGENTS.md files, each pointing to its parent, to document what each area contains.
Yeachan-Heo/oh-my-claudecode
Picks the smallest visual that carries structure when prose alone would not: pseudocode, call tree, component or file tree, Mermaid or diff, and skips it when prose is enough.
Categories
Charts a foggy effort into a map of decision tickets on the repo's issue tracker and works through them one per session, producing decisions rather than deliverables. Efforts with fog around the destination are the target. A fog test asks whether the destination can be stated in one sentence and whether the first three decisions can be named; if either answer is no, the effort is charted as a single map issue labelled navigator:map, with each decision as a child ticket.
Ask Navigator fits situations like: starting an effort where the destination is not clear yet; breaking an open-ended investigation into decision tickets; continuing an open navigator map in a new session.
Run `npx skills add Yeachan-Heo/oh-my-claudecode --skill ask-navigator -a claude-code`. Or copy the skill folder (skills/ask-navigator in Yeachan-Heo/oh-my-claudecode) into .claude/skills/ask-navigator in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Yeachan-Heo/oh-my-claudecode --skill ask-navigator -a codex`. Or copy the skill folder (skills/ask-navigator in Yeachan-Heo/oh-my-claudecode) into .agents/skills/ask-navigator in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Yeachan-Heo/oh-my-claudecode --skill ask-navigator -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ask-navigator, .gemini/skills/ask-navigator, .github/skills/ask-navigator and .opencode/skills/ask-navigator in your project.
Going by SKILL.md and its folder, Ask Navigator needs the command-line tools its instructions call (node). Our summary lists: An issue tracker (GitHub, GitLab or local markdown) to hold the map.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Ask Navigator is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Ask Navigator: ULW Plan Workflow (code-yeongyu/oh-my-openagent, 70k stars), Plannotator Goal Setup (backnotprop/plannotator, 9.3k stars), Dev Request (FHIR/fhir-codegen, 155 stars) and Blueprint Construction Planner (affaan-m/ECC, 277k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Yeachan-Heo (a GitHub user) maintains it in Yeachan-Heo/oh-my-claudecode, which has 39,751 GitHub stars. The repository holds 47 skills in this directory. The repository was last updated on October 8, 2026.
Source: Yeachan-Heo/oh-my-claudecode on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.