跳到主要内容
知仓学习社ZHICANG

writing-plans

Use after design approval to create a dated executable workflow file with bite-sized tasks, exact file paths, and loop/gate definitions.

不碰外部(只输出文字)无严重或高危命中hashgraph-online/awesome-codex-plugins

它会碰到什么

扫了多少1 个文本文件,12 KB
它会碰到什么不碰外部(只输出文字)
命中总数0 处
命中统计严重 0 · 高 0 · 中 0 · 低 0

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

Writing HOTL Plans

Overview

Produce a dated workflow file that loop-execution can execute. The canonical filename is YYYY-MM-DD-<slug>-workflow.md, where <slug> is a short kebab-case identity derived from the intent (e.g., 2026-04-22-add-rate-limiting-workflow.md). Each step should be 2-5 minutes of work. Include loop conditions and gates from the design's governance contract.

When the accepted design defines execution limits, include only the relevant optional portable budget fields (max_total_attempts, max_agents, max_cost_usd, max_elapsed_minutes) in workflow frontmatter. Do not invent numeric budgets. policy_profile is descriptive and never grants host permissions.

Announce: "I'm using the writing-plans skill to create the executable workflow."

Output Filename

Save as YYYY-MM-DD-<slug>-workflow.md, where:

  • YYYY-MM-DD is the current local date
  • <slug> is a short kebab-case semantic identity derived from the intent (e.g., add-user-auth, refactor-api)

Examples:

  • 2026-04-22-add-user-auth-workflow.md
  • 2026-04-22-refactor-api-workflow.md

The date makes workflow revisions easy to sort chronologically. The semantic identity remains <slug>, not the date-prefixed filename.

Semantic Identity

The canonical workflow filename is human-friendly, but the stable execution identity is still <slug>.

  • Filename: YYYY-MM-DD-<slug>-workflow.md
  • Semantic identity: <slug>
  • Default branch derivation: hotl/<slug>

When a later workflow revision is created for the same feature, it should use a new dated filename while keeping the same semantic identity.

Output Directory

Default: docs/plans. Opt-in override via .hotl/config.yml: workflows_dir: <path>. Resolution procedure:

  1. Resolve the install path of hotl-config-resolve.sh using the same six-location rule documented for document-lint.sh and hotl-config.sh (see skills/document-review/SKILL.md):
  2. In-repo: scripts/hotl-config-resolve.sh
  3. Codex native-skills install: ~/.codex/hotl/scripts/hotl-config-resolve.sh
  4. Codex plugin install: ~/.codex/plugins/hotl-source/scripts/hotl-config-resolve.sh
  5. Codex plugin cache fallback: ~/.codex/plugins/cache/codex-plugins/hotl/*/scripts/hotl-config-resolve.sh
  6. Cline install fallback: ~/.cline/hotl/scripts/hotl-config-resolve.sh
  7. Claude Code plugin fallback: ~/.claude/plugins/hotl/scripts/hotl-config-resolve.sh
  1. Invoke the resolver as a command proxy — it forwards argv to hotl-config.sh, no intermediate path-locator step:
   bash <resolved-hotl-config-resolve.sh> get workflows_dir --default=docs/plans
  1. Use the returned directory as the output location. docs/plans is the canonical default. Any other value is an opt-in override — write YYYY-MM-DD-<slug>-workflow.md inside that directory, creating it if needed.

Projects with no .hotl/config.yml receive docs/plans from the --default=docs/plans fallback.

Format:

---
intent: [from design's intent contract]
success_criteria: [from design's intent contract]
risk_level: low | medium | high
auto_approve: true | false
# branch: custom/branch-name   # optional — execution derives hotl/<slug> if absent
# worktree: host                # optional: only when a host tool already put this task on a feature-branch worktree
# dirty_worktree: allow         # optional — proceed even if non-HOTL files are uncommitted
---

## Steps

- [ ] **Step N: [Step name]**
action: [what to do]
loop: false | until [condition]
max_iterations: [number, default 3]
verify: [scalar command OR typed block]
gate: human | auto   # optional

CRITICAL — field indentation: action:, loop:, verify:, max_iterations:, and gate: MUST start at column 0 (no leading spaces). The document linter matches ^action:, ^loop:, etc. — any indentation (even 2 spaces under the list item) will fail validation. Only the sub-fields of structured verify: blocks (like type:, path:, assert:) are indented.

Typed Verification

Choose the appropriate verify type for each step:

  • shell — for test suites, linters, build commands (default; scalar shorthand accepted)
  • browser — for UI work requiring visual inspection (capability-gated; falls back to human-review)
  • human-review — for subjective quality checks with no automated signal
  • artifact — for verifying files/outputs exist and meet criteria
# Scalar shorthand (type: shell)
verify: pytest tests/ -v

# Structured
verify:
  type: browser
  url: http://localhost:3000/dashboard
  check: priority badge renders with correct color

# Artifact with structured assert
verify:
  type: artifact
  path: migrations
  assert:
    kind: matches-glob
    value: "*.sql"

# Greenfield scaffold check
verify:
  type: artifact
  path: src
  assert:
    kind: exists

# Multiple checks per step
verify:
  - type: shell
    command: npm test
  - type: artifact
    path: coverage/lcov.info
    assert:
      kind: exists

Step Granularity

Break work into atomic steps:

  • "Write failing test for X" (loop: false, verify: pytest)
  • "Implement X" (loop: until tests pass, verify: pytest)
  • "Fix lint errors" (loop: until clean, verify: ruff check .)
  • "Verify UI renders correctly" (loop: false, verify: type: browser)
  • "Human review of security logic" (loop: false, gate: human — REQUIRED for risk_level: high)

No Placeholders

Every workflow step must contain enough concrete information for an agent to execute it without guessing. These are plan failures:

  • TBD, TODO, later, fill in, or empty sections
  • Vague instructions such as "add validation", "handle edge cases", "improve error handling", or "update docs" without exact files and success signals
  • "Similar to Step N", "repeat the pattern", or references that require reading another step to know what to do
  • Functions, files, commands, artifacts, or config keys referenced before they are defined
  • Verification that does not prove the step's action worked
  • Human-review checks where an automated shell, browser, or artifact check would provide a deterministic signal

If a step cannot be made concrete yet, stop and ask for clarification instead of saving the workflow.

Branch And Worktree Authoring Guidance

  • Default execution branch is hotl/<slug> unless the workflow frontmatter sets branch: ...
  • Default execution mode is an isolated worktree; HOTL copies the workflow into that worktree at the same relative path before execution
  • Use branch: only when downstream tooling or verify logic truly depends on a specific branch name
  • Use worktree: false only when execution must stay in the current checkout rather than a separate worktree
  • To keep execution on the exact current branch, set both branch: <current-branch> and worktree: false
  • Use worktree: host when Codex or another host tool already created the execution worktree and HOTL should use the current feature branch exactly as-is
  • Avoid brittle verify steps such as git branch --show-current | grep '^feature/' unless the workflow pins branch: to match that exact convention
  • If a step must confirm the workflow file exists, use its repo-relative path; HOTL preserves that relative path inside the isolated worktree
  • If the workflow is authored on a non-main/master branch and does not pin branch: or worktree:, execution should pause and ask whether to continue on the current branch or use HOTL's isolated execution branch/worktree

Example:

  • If verify expects pv6-ui/..., set branch: pv6-ui/plan-amendments
  • If branch name does not matter, let HOTL derive hotl/<slug> and do not assert a custom prefix
  • If you want to keep using pv6-ui/plan-amendments itself, set branch: pv6-ui/plan-amendments and worktree: false
  • If Codex already opened the task in a worktree on pv6-ui/plan-amendments, set worktree: host and omit branch:

Artifact Verification Rules

  • Prefer kind: exists when the step creates a new file or directory from scratch
  • Use kind: matches-glob only when path is an existing directory and value is a filename glob such as .tsx or .md
  • Do not put directory segments in value; write path: src with value: ".tsx", not path: . with value: "src/.tsx"
  • For greenfield frontend scaffolds, Step 1 should usually verify src or package.json with kind: exists, not matches-glob

risk_level Guidelines

  • low: UI changes, new endpoints, non-critical features
  • medium: Schema changes, refactors, performance work
  • high: Auth/authz, encryption, privacy logic, billing, multi-tenant isolation

risk_level: high always generates gate: human on security-sensitive steps, regardless of auto_approve.

Self-Check Loop

After saving the workflow file, run a self-check before offering execution options. Review the workflow for:

  • Step sizing — each step should be 2-5 minutes of atomic work
  • No placeholders — no TBD/TODO text, vague instructions, undefined references, or "similar to Step N" shortcuts
  • Verify coverage — every looped step has a verify command that tests what the step claims
  • Gate placement — risky steps (auth, encryption, billing, secrets) have gate: human
  • Loop safetymax_iterations is reasonable (typically 3-5)
  • Ordering — logical dependencies between steps are respected

If issues are found, fix them in the workflow file and re-check until clean. Do not ask the user to review — this is an internal quality pass.

After Saving

Once the self-check passes, offer execution options:

"Workflow saved to <resolved-workflows-dir>/YYYY-MM-DD-<slug>-workflow.md. How would you like to execute?"

Present the three execution modes using the current host tool's native invocation style. Never show Claude Code slash commands in Codex or any other skill-based agent.

Use these mappings:

  1. Loop execution (this session) — runs steps autonomously with auto-approve
  • Codex: ask me to use $hotl:loop-execution on <resolved-workflows-dir>/YYYY-MM-DD-<slug>-workflow.md
  • Claude Code: /hotl:loop <resolved-workflows-dir>/YYYY-MM-DD-<slug>-workflow.md
  1. Manual execution — linear execution with explicit checkpoints
  • Codex: ask me to use $hotl:executing-plans on <resolved-workflows-dir>/YYYY-MM-DD-<slug>-workflow.md
  • Claude Code: /hotl:execute-plan <resolved-workflows-dir>/YYYY-MM-DD-<slug>-workflow.md
  1. Subagent execution (this session) — delegates implementation-friendly steps to fresh subagents while the controller keeps gates and verification
  • Codex: ask me to use $hotl:subagent-execution on <resolved-workflows-dir>/YYYY-MM-DD-<slug>-workflow.md
  • Claude Code: /hotl:subagent-execute <resolved-workflows-dir>/YYYY-MM-DD-<slug>-workflow.md

If a previous run was interrupted, point the user to the host tool's native resume entry point.

  • Codex: ask me to use $hotl:resuming on <resolved-workflows-dir>/YYYY-MM-DD-<slug>-workflow.md
  • Claude Code: /hotl:resume <resolved-workflows-dir>/YYYY-MM-DD-<slug>-workflow.md
  • Other agents: use that agent's native skill/command invocation instead of inventing Claude-style slash commands

(Always tell the user the exact workflow filename so they can pass it to the execution request if multiple workflow files exist.)

If execution starts from a non-main/master branch and the workflow does not already pin branch: or worktree:, tell the user HOTL will ask one more continuity question at execution time:

  • continue on the current branch in this checkout
  • use HOTL's isolated execution branch/worktree (recommended)
  • choose a custom execution branch

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。

同名技能的其他版本

有 2 个不同仓库或目录里都有叫 writing-plans 的技能。它们内容并不相同,别混用: