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.
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.
$ npx skills add backnotprop/plannotator --skill plannotator-setup-goal -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install backnotprop/plannotator plannotator-setup-goal --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/backnotprop/plannotator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/apps/skills/extra/plannotator-setup-goal .claude/skills/plannotator-setup-goal && 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 "plannotator-setup-goal" agent skill from https://github.com/backnotprop/plannotator/tree/main/apps/skills/extra/plannotator-setup-goal into .claude/skills/plannotator-setup-goal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plannotator-setup-goal", 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/backnotprop/plannotator/tree/main/apps/skills/extra/plannotator-setup-goalType 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 backnotprop/plannotator --skill plannotator-setup-goal -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install backnotprop/plannotator plannotator-setup-goal --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/backnotprop/plannotator.git skills-src && mkdir -p .agents/skills && cp -r skills-src/apps/skills/extra/plannotator-setup-goal .agents/skills/plannotator-setup-goal && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "plannotator-setup-goal" agent skill from https://github.com/backnotprop/plannotator/tree/main/apps/skills/extra/plannotator-setup-goal into .agents/skills/plannotator-setup-goal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plannotator-setup-goal", 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 backnotprop/plannotator --skill plannotator-setup-goal -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install backnotprop/plannotator plannotator-setup-goal --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/backnotprop/plannotator.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/apps/skills/extra/plannotator-setup-goal .cursor/skills/plannotator-setup-goal && 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 "plannotator-setup-goal" agent skill from https://github.com/backnotprop/plannotator/tree/main/apps/skills/extra/plannotator-setup-goal into .cursor/skills/plannotator-setup-goal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plannotator-setup-goal", 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/backnotprop/plannotator.git --path apps/skills/extra/plannotator-setup-goal--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 backnotprop/plannotator --skill plannotator-setup-goal -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install backnotprop/plannotator plannotator-setup-goal --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/backnotprop/plannotator.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/apps/skills/extra/plannotator-setup-goal .gemini/skills/plannotator-setup-goal && 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 "plannotator-setup-goal" agent skill from https://github.com/backnotprop/plannotator/tree/main/apps/skills/extra/plannotator-setup-goal into .gemini/skills/plannotator-setup-goal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plannotator-setup-goal", 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 backnotprop/plannotator plannotator-setup-goalInstalls 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 backnotprop/plannotator --skill plannotator-setup-goal -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/backnotprop/plannotator.git skills-src && mkdir -p .github/skills && cp -r skills-src/apps/skills/extra/plannotator-setup-goal .github/skills/plannotator-setup-goal && 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 "plannotator-setup-goal" agent skill from https://github.com/backnotprop/plannotator/tree/main/apps/skills/extra/plannotator-setup-goal into .github/skills/plannotator-setup-goal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plannotator-setup-goal", 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 backnotprop/plannotator --skill plannotator-setup-goal -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install backnotprop/plannotator plannotator-setup-goal --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/backnotprop/plannotator.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/apps/skills/extra/plannotator-setup-goal .opencode/skills/plannotator-setup-goal && 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 "plannotator-setup-goal" agent skill from https://github.com/backnotprop/plannotator/tree/main/apps/skills/extra/plannotator-setup-goal into .opencode/skills/plannotator-setup-goal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "plannotator-setup-goal", 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.
plannotator-setup-goalGuides 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.
The agent starts by stating your objective back in two or three sentences and waits until you confirm or correct it. Once the goal has a short name, it creates a folder for it under goals/. That folder holds working JSON files, which keep provenance and iteration state, plus markdown files that make up the readable goal package.
Discovery runs as a browser session in Plannotator that you drive. The agent is told to keep waiting until you submit, dismiss or ask it to stop, and never to close, restart or duplicate the session just because it sits idle. When a goal is vague or has many linked decisions, the agent can offer an optional grilling round that asks one question at a time before building the interview bundle. Later phases turn the reviewed facts and a look at the codebase into an execution plan.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 47486cd. 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.
Ships script files (TypeScript), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom 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.
Plannotator Goal Setup loads about 2.4k tokens when it runs. Until then it costs about 51 tokens; SKILL.md has 1,164 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 backnotprop/plannotator at commit 47486cd, republished under its Apache-2.0 licence (© backnotprop). 1,164 words, ~2,400 tokens.
.claude/skills/plannotator-setup-goal/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Turn an idea into a goal package at goals/<slug>/ through structured discovery, user interview, and codebase exploration.
State back what the user wants in your own words. If the conversation already has rich context, summarize it. If the goal is bare or vague, do minimal shallow exploration of the codebase to ground your understanding. Keep it to 2-3 sentences. Wait for the user to confirm or correct before continuing.
Create the goal directory once the slug is clear:
mkdir -p goals/<slug>Use goals/<slug>/ for both working JSON files and final docs. The JSON files are provenance and iteration state; the markdown files are the human-readable authoritative goal package.
Browser session patience rule: Plannotator goal setup is a user-driven browser session. After launching an interview or facts command, be absolutely patient and keep waiting on the user until they submit, dismiss, or explicitly ask you to stop. Do not close, kill, restart, refresh, or open a second copy just because the UI is idle or the user is taking time. Never close and reopen the session as a way to update state; if a rerun is needed after the prior session ends, update the working JSON file and launch a new command from that file.
Optional: grill first (deep, one-at-a-time interview). Before building the compact interview bundle, suggest a grilling pass whenever the goal is vague or carries many interdependent decisions — and run one whenever the user asks for it ("grill me first"). This is opt-in: for a clear, well-scoped goal, skip it and go straight to the bundle, so grilling never fights the bundle's "fewer, higher-leverage questions" philosophy. When you grill, run the protocol below verbatim, then fold the resolved decisions forward into a higher-quality interview bundle (Phase 2) — or, if grilling fully resolves scope, straight into the fact sheet (Phase 3).
<!-- Grilling protocol below adapted verbatim from the /grill-me skill by Matt Pocock (MIT-licensed):
https://github.com/mattpocock/skills/blob/main/skills/productivity/grill-me/SKILL.md -->
Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.
Ask the questions one at a time.
If a question can be answered by exploring the codebase, explore the codebase instead.
Build a compact bundle of questions that can derive every "fact" this goal should produce. Package the questions together so the user can answer them quickly in the Plannotator goal setup UI. For each question, include your recommended answer and use options when they make answering faster.
Do not ask obvious confirmation questions. If the answer can be inferred from the user's request, from the conversation, or from shallow codebase exploration, infer it and move on. If an obvious area has meaningful nuance, present the inferred answer as a recommendation with options or a custom "add/correct this" path rather than asking the user to restate the obvious.
Question areas that usually matter:
If a question can be answered by exploring the codebase, explore the codebase instead of asking. Only include questions where the user's judgment is actually needed. Prefer fewer, higher-leverage questions over exhaustive obvious ones.
Write the interview bundle before showing it to the user:
goals/<slug>/interview.json
{
"stage": "interview",
"title": "Short human-readable title",
"goalSlug": "<slug>",
"questions": [
{
"id": "scope",
"prompt": "What should be in scope?",
"description": "Optional clarification.",
"answerMode": "multi-custom",
"recommendedAnswer": "Your recommended answer.",
"recommendedOptionIds": ["ui", "server"],
"options": [
{ "id": "ui", "label": "UI" },
{ "id": "server", "label": "Server" }
],
"required": true
}
]
}Supported answerMode values: text, single, multi, custom, single-custom, multi-custom.
Run this as a monitored foreground process and wait patiently for the browser session to finish. The command may appear idle while the user is reading, editing, or asking questions; leave it running:
plannotator setup-goal interview goals/<slug>/interview.json --jsonThe command returns JSON on stdout with the submitted answers. Write that exact result to goals/<slug>/interview-result.json before continuing. A convenient pattern is:
plannotator setup-goal interview goals/<slug>/interview.json --json | tee goals/<slug>/interview-result.jsonIf the user revises after the session finishes, update interview.json and rerun the command instead of reconstructing the whole bundle from memory. If the session is dismissed, stop and tell the user the goal setup was closed.
Before moving to facts, read every answer and note carefully:
A fact is a simple description of each outcome of a goal. It should be easily testable and verifiable. A fact may describe the function of a specific feature or aspect of a system. A fact may determine specific UI and UX. Again, a fact is literally anything that can be tested and verified in automated or manual testing. Keep fact language simple. In a way, a fact sheet is a design spec, but less verbose & using language the human user can easily visualize & rationalize.
Prepare a facts review bundle from goals/<slug>/interview-result.json. Each fact should include whether automated verification is recommended and preselected.
Write the facts review bundle before showing it to the user. If revising after a prior facts pass, start from facts-review.json and facts-result.json, include previously accepted facts with "accepted": true, and preserve their state.
goals/<slug>/facts-review.json
{
"stage": "facts",
"title": "Short human-readable title",
"goalSlug": "<slug>",
"facts": [
{
"id": "fact-1",
"text": "The accepted fact text.",
"accepted": false,
"removed": false,
"recommendedAutomatedVerification": true,
"automatedVerification": true
}
]
}Run this as a monitored foreground process and wait patiently for the browser session to finish. The command may appear idle while the user is reviewing, editing, or asking questions; leave it running:
plannotator setup-goal facts goals/<slug>/facts-review.json --jsonThe command returns JSON on stdout with accepted/edited/removed facts plus automated verification selections. Write that exact result to goals/<slug>/facts-result.json. A convenient pattern is:
plannotator setup-goal facts goals/<slug>/facts-review.json --json | tee goals/<slug>/facts-result.jsonWrite goals/<slug>/facts.md as a flat readable list of accepted facts. Each fact is one line; add a minimal note only when the fact cannot be stated clearly on its own. Also write goals/<slug>/facts.meta.json preserving each accepted fact's id, final text, comment, recommendedAutomatedVerification, and automatedVerification value.
If the user edits or removes facts in the UI, apply that result directly. If the session is dismissed, stop and tell the user the facts review was closed.
Explore the codebase. Discover and validate implementation paths toward each accepted fact. Treat facts with automatedVerification: true as requiring concrete automated checks unless you document a blocker. Trace through code, identify files and systems involved, surface risks and unknowns. Refine until you have a confident order of operations.
Write goals/<slug>/plan.md:
Gate the plan with Plannotator:
plannotator annotate goals/<slug>/plan.md --gateIf denied, revise from feedback and re-gate until approved.
Write goals/<slug>/goal.md:
facts.md as the shared understandingplan.md as the execution planTell the user:
Done! Launch a goal with `/goal goals/<slug>/goal.md`© backnotprop, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in apps/skills/extra/plannotator-setup-goal of backnotprop/plannotator.
Open the folder on GitHubat commit 47486cd
Plannotator Goal Setup 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 |
|---|---|---|---|---|---|---|
| Plannotator Goal Setup this skillbacknotprop/plannotator | 9.2k | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| ULW Plan Workflowcode-yeongyu/oh-my-openagent | 70k | — | ~3.9k | Automated safety check: Pass | Custom licence | |
| Ask NavigatorYeachan-Heo/oh-my-claudecode | 40k | — | ~4.1k | Automated safety check: Pass | MIT | |
| Interview Meaddyosmani/agent-skills | 103k | 6 repos | ~3.8k | Automated safety check: Pass | MIT | |
| Planning And Task Breakdownabashev/vfs-s3 | 106 | 8 repos | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Brainstorming Before BuildingjnMetaCode/superpowers-zh | 8.3k | — | ~1.8k | Automated safety check: Pass | MIT |
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.
Yeachan-Heo/oh-my-claudecode
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.
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.
abashev/vfs-s3
Breaks work into ordered tasks. An agent skill from abashev/vfs-s3.
jnMetaCode/superpowers-zh
Turns a rough idea into an approved design before any code is written, sorting the request into spike, bounded or architectural and enforcing an approval gate.
tailcallhq/forgecode
Writes a structured Markdown implementation plan with checkbox tasks, verification criteria and risks, then checks it with a validation script; no code changes.
backnotprop/plannotator
Builds self-contained HTML explainers for plans, pull requests and technical concepts in Plannotator's theme, then opens them in its annotation view.
backnotprop/plannotator
Drafts Plannotator release notes with full contributor credit, bumps versions in dependency order, builds, and starts the tag-driven release pipeline, in four reviewed phases.
backnotprop/plannotator
Mines a Plannotator archive of denied plans for feedback patterns and prompt improvements, then writes an HTML dashboard report, with a Claude Code fallback.
backnotprop/plannotator
Reviews Renovate pull requests that bump GitHub Actions by checking pinned SHAs against upstream tags, scanning changelogs and confirming workflows stay compatible.
backnotprop/plannotator
Audits outdated npm and Bun packages for supply chain integrity before bumping them, deferring risky ones and logging every decision.
backnotprop/plannotator
Opens Plannotator's browser annotation view for a markdown, config, HTML, URL or folder target and acts on the feedback you leave, with an optional approval gate.
Categories
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. The agent starts by stating your objective back in two or three sentences and waits until you confirm or correct it. Once the goal has a short name, it creates a folder for it under goals/.
Plannotator Goal Setup fits situations like: turning a loosely stated objective into a plan that the /goal command can run; scoping a large change with many interdependent decisions before writing code; capturing agreed facts about a task in a reviewable fact sheet.
Run `npx skills add backnotprop/plannotator --skill plannotator-setup-goal -a claude-code`. Or copy the skill folder (apps/skills/extra/plannotator-setup-goal in backnotprop/plannotator) into .claude/skills/plannotator-setup-goal in your project. Claude Code loads it when a task matches its description.
Run `npx skills add backnotprop/plannotator --skill plannotator-setup-goal -a codex`. Or copy the skill folder (apps/skills/extra/plannotator-setup-goal in backnotprop/plannotator) into .agents/skills/plannotator-setup-goal 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 backnotprop/plannotator --skill plannotator-setup-goal -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/plannotator-setup-goal, .gemini/skills/plannotator-setup-goal, .github/skills/plannotator-setup-goal and .opencode/skills/plannotator-setup-goal in your project.
Going by SKILL.md and its folder, Plannotator Goal Setup needs TypeScript for the scripts in its folder. Our summary lists: Plannotator; A browser for the interview and fact-sheet review.
SKILL.md names 1 domain. As links in the text: github.com. 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.
Plannotator Goal Setup is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.6k 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 Plannotator Goal Setup: ULW Plan Workflow (code-yeongyu/oh-my-openagent, 70k stars), Ask Navigator (Yeachan-Heo/oh-my-claudecode, 40k stars), Interview Me (addyosmani/agent-skills, 103k stars) and Planning And Task Breakdown (abashev/vfs-s3, 106 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
backnotprop (a GitHub user) maintains it in backnotprop/plannotator, which has 9,205 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 8, 2026.
Source: backnotprop/plannotator on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.