Executing Plans Inline
obra/superpowers
Has the agent carry out an implementation plan itself, task by task in the current session, keeping a ledger, proving each step with a test and ending with one whole-branch review.
Creates a concise engineering implementation plan based on user requirements and saves it to specs directory
$ npx skills add disler/planf3 --skill planf3 -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install disler/planf3 planf3 --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/disler/planf3.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/planf3 .claude/skills/planf3 && 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 "planf3" agent skill from https://github.com/disler/planf3/tree/main/.claude/skills/planf3 into .claude/skills/planf3/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "planf3", 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/disler/planf3/tree/main/.claude/skills/planf3Type 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 disler/planf3 --skill planf3 -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install disler/planf3 planf3 --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/disler/planf3.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/planf3 .agents/skills/planf3 && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "planf3" agent skill from https://github.com/disler/planf3/tree/main/.claude/skills/planf3 into .agents/skills/planf3/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "planf3", 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 disler/planf3 --skill planf3 -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install disler/planf3 planf3 --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/disler/planf3.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/planf3 .cursor/skills/planf3 && 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 "planf3" agent skill from https://github.com/disler/planf3/tree/main/.claude/skills/planf3 into .cursor/skills/planf3/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "planf3", 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/disler/planf3.git --path .claude/skills/planf3--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 disler/planf3 --skill planf3 -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install disler/planf3 planf3 --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/disler/planf3.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/planf3 .gemini/skills/planf3 && 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 "planf3" agent skill from https://github.com/disler/planf3/tree/main/.claude/skills/planf3 into .gemini/skills/planf3/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "planf3", 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 disler/planf3 planf3Installs 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 disler/planf3 --skill planf3 -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/disler/planf3.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/planf3 .github/skills/planf3 && 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 "planf3" agent skill from https://github.com/disler/planf3/tree/main/.claude/skills/planf3 into .github/skills/planf3/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "planf3", 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 disler/planf3 --skill planf3 -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install disler/planf3 planf3 --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/disler/planf3.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/planf3 .opencode/skills/planf3 && 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 "planf3" agent skill from https://github.com/disler/planf3/tree/main/.claude/skills/planf3 into .opencode/skills/planf3/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "planf3", 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.
planf3Creates a concise engineering implementation plan based on user requirements and saves it to specs directory
Planf3 is an agent skill from disler/planf3. Creates a concise engineering implementation plan based on user requirements and saves it to specs directory
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts (for example `scripts/edit_gpt_image.py`, `scripts/generate_gpt_image.py` and `workflows/build-plan.md`).
It sits in Agent Workflows, covering Planning. The licence is MIT.
Read from SKILL.md and the folder at commit f34b7ba. 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 2 files in scripts/ (Python), which the agent can run.
From 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.
Planf3 loads about 2.9k tokens when it runs. Until then it costs about 29 tokens; SKILL.md has 637 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); the scripts in this folder are not scanned.
The full file from disler/planf3 at commit f34b7ba, republished under its MIT licence (© disler). 637 words, ~2,863 tokens.
.claude/skills/planf3/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.Create a detailed, HTML-first implementation plan based on the USER_PROMPT variable. The plan is authored as a single self-contained .html page so it can be opened in a browser, embed focused images with a synced visual identity, and be created/updated/consumed by the agent trifecta (engineer, team, AI agents). Analyze the request, think through the implementation approach, follow the ## Instructions, and work through the ## Workflow to produce the plan from the ## Plan Template.
USER_PROMPT: $1
QUESTIONABLE: $2 - default false
PLAN_OUTPUT_DIRECTORY: specs/
PLAN_FILE: PLAN_OUTPUT_DIRECTORY/<descriptive-kebab-name>.html
IMAGES_OUTPUT_DIR: PLAN_OUTPUT_DIRECTORY/<plan-name>/
AI_DOCS: AI_DOCS/
APP_DOCS: APP_DOCS/
IDE: code
BROWSER: chrome
USER_PROMPT is provided, stop and ask the user to provide itUSER_PROMPT variable.html document from the ## Plan Template below{{PLACEHOLDER}} variables — replace EVERY {{...}} with real content. Do not leave any {{}} token in the final file<!-- repeat --> are repeatable: duplicate them as many times as the plan needs (e.g. one block per phase, task, file, or Q&A entry) and delete the comment markers<style> block; do not link external stylesheets or scriptsUSER_PROMPT that created the plan. The CSS custom properties in :root define the palette/typography. Any embedded image must be generated to match this same identity.{{...IMAGE}} slots. During Create, leave them as commented placeholders noting the intended subject; the Image Generation workflow fills them latercreated, modified, commits, agent, session, back/forward references) — these are updatable across the plan's lifecycle. Every metadata field except CREATED_ISO is a comma-separated list that must only ever be appended to — never overwrite or remove existing entriesQUESTIONABLE is true, actively surface open questions/assumptions in the toggleable Q&A section rather than silently decidingPLAN_FILE using a descriptive kebab-case filenameBased on the USER_PROMPT, select the single best-matching workflow below and read its file for the step-by-step instructions before acting.
| Workflow | When to call it | File to read |
|---|---|---|
| Create Plan | The prompt asks to plan, spec, or design new work and no existing plan is referenced | workflows/create-plan.md |
| Update Plan | The prompt asks to change, extend, or revise the content of an existing plan | workflows/update-plan.md |
| Update References | The prompt asks to refresh plan metadata or back/forward references (created, modified, commits, agent, session) | workflows/update-references.md |
| Build Plan | The prompt asks to implement, execute, or carry out the work described in an existing plan | workflows/build-plan.md |
Called by other workflows rather than selected directly from the USER_PROMPT.
| Subworkflow | When it's called | File to read |
|---|---|---|
| Image Generation | Invoked by other workflows (e.g. Create Plan) to generate, fill, or regenerate the embedded images in a plan | workflows/image-generation.md |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Plan: {{PLAN_TITLE}}</title>
</head>
<body>
<main>
<!-- ===== HEADER + UPDATABLE METADATA ===== -->
<header>
<h1>Plan: {{PLAN_TITLE}}</h1>
<details class="meta">
<summary>Metadata</summary>
<dl>
<dt>created</dt> <dd>{{CREATED_ISO}}</dd>
<dt>modified</dt> <dd>{{MODIFIED_ISO_LIST}}</dd>
<dt>commits</dt> <dd>{{COMMIT_SHA_LIST}}</dd>
<dt>agent name</dt> <dd>{{AGENT_NAME_LIST}}</dd>
<dt>session id</dt> <dd>{{SESSION_ID_LIST}}</dd>
<dt>back refs</dt> <dd>{{BACK_REFERENCES}}</dd>
<dt>forward refs</dt> <dd>{{FORWARD_REFERENCES}}</dd>
</dl>
</details>
</header>
<!-- Hero image — synced to the :root visual identity. Replace with <img> once generated. -->
<figure>
<!-- {{HERO_IMAGE: subject describing the plan at a glance}} -->
<figcaption>{{HERO_IMAGE_CAPTION}}</figcaption>
</figure>
<!-- ===== PURPOSE / PROBLEM / SOLUTION ===== -->
<section id="purpose">
<h2>Purpose</h2>
<p>{{PURPOSE}}</p>
</section>
<section id="problem">
<h2>Problem</h2>
<p>{{PROBLEM}}</p>
<figure>
<!-- {{PROBLEM_IMAGE: subject visualizing the problem this plan addresses}} -->
<figcaption>{{PROBLEM_IMAGE_CAPTION}}</figcaption>
</figure>
</section>
<section id="solution">
<h2>Solution</h2>
<p>{{SOLUTION}}</p>
<figure>
<!-- {{SOLUTION_IMAGE: subject visualizing the proposed solution}} -->
<figcaption>{{SOLUTION_IMAGE_CAPTION}}</figcaption>
</figure>
</section>
<!-- ===== RELEVANT FILES ===== -->
<section id="files" class="files">
<h2>Relevant Files</h2>
<h3>Existing Files</h3>
<ul>
<!-- repeat -->
<li><span class="tag existing">existing</span> <code>{{EXISTING_FILE_PATH}}</code> — {{WHY_RELEVANT}}</li>
</ul>
<h3>New Files</h3>
<ul>
<!-- repeat -->
<li><span class="tag new">new</span> <code>{{NEW_FILE_PATH}}</code> — {{WHY_NEEDED}}</li>
</ul>
</section>
<!-- ===== IMPLEMENTATION PHASES ===== -->
<section id="phases">
<h2>Implementation Phases</h2>
<p><strong>IMPORTANT:</strong> Execute every phase and task step by step, in order, top to bottom.</p>
<p>Status markers: <code>[]</code> idle · <code>[wip]</code> in progress · <code>[x]</code> complete · <code>[f]</code> failed. All start as <code>[]</code>; the Build Plan workflow updates them as it works.</p>
<!-- repeat: one .phase block per phase -->
<div class="phase">
<h3><code class="status">[]</code> Phase {{PHASE_NUMBER}}: {{PHASE_NAME}}</h3>
<p>{{PHASE_DESCRIPTION}}</p>
<!-- Optional focused image for this phase, synced to :root identity -->
<figure>
<!-- {{PHASE_IMAGE: subject describing this phase's architecture/flow}} -->
<figcaption>{{PHASE_IMAGE_CAPTION}}</figcaption>
</figure>
<!-- repeat: one <h4> + checklist per task -->
<h4>{{TASK_NUMBER}}. {{TASK_NAME}}</h4>
<ul class="checklist">
<!-- repeat -->
<li><code class="status">[]</code> {{SPECIFIC_ACTION}}</li>
</ul>
<!-- Final task of every phase: Testing Strategy + validation loop -->
<h4>{{LAST_TASK_NUMBER}}. Testing Strategy</h4>
<p>{{TESTING_APPROACH: technology used to test/validate, including edge cases}}</p>
<ul class="checklist">
<!-- repeat -->
<li><code class="status">[]</code> <code>{{VALIDATION_COMMAND}}</code> — {{WHAT_IT_PROVES}}</li>
</ul>
<div class="loop">
🔁 <strong>Do not exit this phase until every box above is checked.</strong>
If any command fails, fix the cause and re-run — loop until all pass.
</div>
</div>
</section>
<!-- ===== GLOBAL VALIDATION ===== -->
<section id="validation">
<h2>Validation Commands</h2>
<p>Execute these commands to validate the entire plan is complete:</p>
<ul class="checklist">
<!-- repeat -->
<li><code class="status">[]</code> <code>{{VALIDATION_COMMAND}}</code> — {{WHAT_IT_PROVES}}</li>
</ul>
<div class="loop">
🔁 <strong>The plan is not complete until every box is checked and every command passes. If for some reason a step is not possible to complete, mark it with [f] and move on if possible.</strong>
</div>
</section>
<!-- ===== QUESTIONABLES (only include this section if QUESTIONABLE is true) ===== -->
<section id="questionables">
<h2>Questionables</h2>
<!-- Optional image for this section, synced to :root identity -->
<figure>
<!-- {{QUESTIONABLES_IMAGE: subject visualizing the key open question/risk}} -->
<figcaption>{{QUESTIONABLES_IMAGE_CAPTION}}</figcaption>
</figure>
<!-- repeat: one <details> per questionable decision / assumption / risk -->
<details>
<summary>{{QUESTIONABLE}}</summary>
<p class="qa-answer">{{ASSUMPTION_OR_RATIONALE}}</p>
</details>
</section>
<!-- ===== NOTES ===== -->
<!-- Open canvas — the planning agent runs free here. There is no fixed shape:
use whatever HTML best serves the plan (prose, lists, tables, code blocks,
diagrams, callouts, decision logs, alternatives considered, open threads,
links, anything). Embed as many image slots as the plan benefits from. -->
<section id="notes">
<h2>Notes</h2>
{{NOTES: free-form. Capture anything that helps the trifecta understand, build,
or extend this plan — context, dependencies (new libraries via `uv add`),
tradeoffs, rejected approaches, risks, future work, references. Author rich,
bespoke HTML as needed.}}
<!-- repeat: add as many of these image slots as the notes warrant including the image block below -->
<figure>
<!-- {{NOTES_IMAGE: subject for a note worth visualizing}} -->
<figcaption>{{NOTES_IMAGE_CAPTION}}</figcaption>
</figure>
</section>
<!-- ===== AMENDMENTS ===== -->
<!-- Running history of changes made AFTER the plan was first executed. Append-only.
Populated by the Update Plan and Update References workflows — never edited during Create. -->
<section id="amendments">
<h2>Amendments</h2>
<!-- repeat: one entry per amendment, newest at the bottom -->
<details>
<summary>{{AMEND_ISO}} — {{AMEND_SUMMARY}}</summary>
<p>{{AMEND_DETAIL: what changed and why}}</p>
</details>
</section>
</main>
</body>
</html>© disler, MIT. 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 7 other files (scripts) in .claude/skills/planf3 of disler/planf3.
Open the folder on GitHubat commit f34b7ba
Planf3 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 |
|---|---|---|---|---|---|---|
| Planf3 this skilldisler/planf3 | 148 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Executing Plans Inlineobra/superpowers | 296k | 2 repos | ~5.1k | Automated safety check: Pass | MIT | |
| Interview Meaddyosmani/agent-skills | 103k | 6 repos | ~3.8k | Automated safety check: Pass | MIT | |
| OpenSpec Guided OnboardingFission-AI/OpenSpec | 71k | 1 repos | ~4.5k | Automated safety check: Pass | MIT | |
| Writing Plansgeeksblabla/stateofdev.ma | 163 | 57 repos | ~661 | Automated safety check: Pass | None | |
| Subagent Driven DevelopmentAsvarox/allkaraoke | 261 | 38 repos | ~1.2k | Automated safety check: Pass | None |
obra/superpowers
Has the agent carry out an implementation plan itself, task by task in the current session, keeping a ledger, proving each step with a test and ending with one whole-branch review.
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.
Fission-AI/OpenSpec
Walks you through a complete OpenSpec workflow cycle with narration while doing real work in your codebase.
geeksblabla/stateofdev.ma
A skill your agent uses when design is complete and you need detailed implementation tasks for engineers with zero codebase context - creates comprehensive implementation plans with exact file…
Asvarox/allkaraoke
A skill your agent uses when executing implementation plans with independent tasks in the current session
jd-opensource/JoySafeter
Implements Manus-style file-based planning for complex tasks.
Categories
Creates a concise engineering implementation plan based on user requirements and saves it to specs directory. Planf3 is an agent skill from disler/planf3.
Planf3 fits situations like: tasks that involve Planning.
Run `npx skills add disler/planf3 --skill planf3 -a claude-code`. Or copy the skill folder (.claude/skills/planf3 in disler/planf3) into .claude/skills/planf3 in your project. Claude Code loads it when a task matches its description.
Run `npx skills add disler/planf3 --skill planf3 -a codex`. Or copy the skill folder (.claude/skills/planf3 in disler/planf3) into .agents/skills/planf3 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 disler/planf3 --skill planf3 -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/planf3, .gemini/skills/planf3, .github/skills/planf3 and .opencode/skills/planf3 in your project.
Going by SKILL.md and its folder, Planf3 needs Python for the scripts in its folder. Our summary lists: Python 3.
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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Planf3 is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 11k 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 Planf3: Executing Plans Inline (obra/superpowers, 296k stars), Interview Me (addyosmani/agent-skills, 103k stars), OpenSpec Guided Onboarding (Fission-AI/OpenSpec, 71k stars) and Writing Plans (geeksblabla/stateofdev.ma, 163 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
disler (a GitHub user) maintains it in disler/planf3, which has 148 GitHub stars. The repository was last updated on June 21, 2026.
Source: disler/planf3 on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.