一键导入
compose-plan
Use when you have a spec or requirements for a multi-step task, before touching code
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when you have a spec or requirements for a multi-step task, before touching code
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Search callers, dependents, and linked systems before changing code.
Autonomous research workflows with zero external dependencies (built-in tools + free APIs only). Use when the user asks to (1) survey literature on a topic and produce a cited research report ("调研X"、"文献综述"、"deep research"), (2) run an autonomous experiment loop to improve a metric ("自动实验"、"跑实验优化X"、"autoresearch"), (3) reproduce a paper as code ("复现这篇论文"、"paper to code"), or (4) write/polish an academic paper and verify its citations ("写论文"、"校验引用"、"citation check"). Covers paper search (arXiv/Semantic Scholar/OpenAlex/Crossref), cross-source fact checking, experiment verification, and bibliography auditing.
Deep research on any topic using parallel sub-agents and built-in tools only (WebSearch/WebFetch + free APIs, no keys). Use when the user asks for a thorough multi-source investigation with a cited report — "深度调研X"、"deep research"、"帮我全面研究一下"、"多方求证"、"写一份调研报告". NOT for simple lookups (single WebSearch suffices) and NOT for academic literature surveys (use auto-research skill instead).
Use this skill whenever a Microsoft Word (.docx) file is being produced, opened, transformed, or read. That includes: drafting reports, letters, contracts, RFPs, technical documents, or any long-form written deliverable; extracting text or structure from an existing Word file; filling a Word template with values; converting Word to PDF or plain text; splitting or merging documents; inspecting styles, headings, sections, tables, images, comments, or tracked changes. Trigger on mentions of 'Word doc', 'DOCX', 'Office document', a filename ending in .docx, or requests like 'turn this into a Word report'.
Use when you want to modify ANY aspect of yourself — your capabilities (new/overridden tools), your behavior (hooks that intercept every tool call, LLM request, session and subagent lifecycle), your knowledge (skills that persist across sessions), your orchestration (workflow scripts), or even your UI (TUI panels, commands, dialogs). Nothing about you is fixed: every layer from what tools you expose, to how you react to events, to what the user sees on screen is rewritable through files in .zethcode/. Use proactively — repeated manual sequence 3+ times, repeated user correction, durable project knowledge, or any "I wish I could..." moment is a trigger to evolve.
Modern Python project setup with uv, ruff, and pyright. Use when initializing a new Python project, configuring the Python environment, setting up linting/formatting, or when a project needs uv (the fast Python package manager). Trigger on: 'set up Python', 'new Python project', 'configure uv', 'install uv', 'ruff', 'pyright', 'Python linting', 'Python formatting', or when a task requires Python and no pyproject.toml exists yet.
| name | compose:plan |
| hidden | true |
| description | Use when you have a spec or requirements for a multi-step task, before touching code |
Write comprehensive implementation plans assuming the engineer has zero context for our codebase and questionable taste. Document everything they need to know: which files to touch for each task, code, testing, docs they might need to check, how to test it. Give them the whole plan as bite-sized tasks. DRY. YAGNI. TDD. Frequent commits.
Assume they are a skilled developer, but know almost nothing about our toolset or problem domain. Assume they don't know good test design very well.
Announce at start: "I'm using the compose:plan skill to create the implementation plan."
Context: If working in an isolated worktree, it should have been created via the compose:worktree skill at execution time.
Save plans to: the plans/ directory given in the <compose_docs_dir> block of your prompt, as YYYY-MM-DD-<feature-name>.md.
If the spec covers multiple independent subsystems, it should have been broken into sub-project specs during brainstorming. If it wasn't, suggest breaking this into separate plans — one per subsystem. Each plan should produce working, testable software on its own.
Before defining tasks, map out which files will be created or modified and what each one is responsible for. This is where decomposition decisions get locked in.
This structure informs the task decomposition. Each task should produce self-contained changes that make sense independently.
A task is the smallest unit that carries its own test cycle and is worth a fresh reviewer's gate. When drawing task boundaries:
Each step is one action (2-5 minutes):
Every plan MUST start with this header:
# [Feature Name] Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use compose:subagent (recommended) or compose:execute to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** [One sentence describing what this builds]
**Architecture:** [2-3 sentences about approach]
**Tech Stack:** [Key technologies/libraries]
## Global Constraints
[Project-wide requirements that bind EVERY task — version floors, dependency
limits, naming and copy rules, platform requirements, exact values. One line
each, copied verbatim from the spec. Implementers and reviewers downstream
implicitly inherit this section without being told individually.]
---
### Task N: [Component Name]
**Covers:** [S3, S7]
<!-- spec section anchors this task implements; every task that produces
spec-required behavior must list at least one. Omit only for pure
scaffolding tasks (e.g. project setup) that map to no spec section. -->
**Files:**
- Create: `exact/path/to/file.py`
- Modify: `exact/path/to/existing.py:123-145`
- Test: `tests/exact/path/to/test.py`
**Interfaces:**
- Consumes: [what this task uses from earlier tasks — exact signatures, types]
- Produces: [what later tasks rely on — exact function names, parameter and
return types. An implementer sees only its own task; this block is how it
learns the names and types neighboring tasks use.]
- [ ] **Step 1: Write the failing test**
```python
def test_specific_behavior():
result = function(input)
assert result == expected
```
- [ ] **Step 2: Run test to verify it fails**
Run: `pytest tests/path/test.py::test_name -v`
Expected: FAIL with "function not defined"
- [ ] **Step 3: Write minimal implementation**
```python
def function(input):
return expected
```
- [ ] **Step 4: Run test to verify it passes**
Run: `pytest tests/path/test.py::test_name -v`
Expected: PASS
- [ ] **Step 5: Commit**
```bash
git add tests/path/test.py src/path/file.py
git commit -m "feat: add specific feature"
```
Every step must contain the actual content an engineer needs. These are plan failures — never write them:
After writing the complete plan, look at the spec with fresh eyes and check the plan against it. This is a checklist you run yourself — not a subagent dispatch.
1. Spec coverage: Skim each [Sn] section in the spec. Can you point to a task whose Covers: lists it? Every spec section must be covered by at least one task. Conversely, every Covers: ID must resolve to a real spec section. List any gap in either direction and add or fix the task.
2. Placeholder scan: Search your plan for red flags — any of the patterns from the "No Placeholders" section above. Fix them.
3. Type consistency: Do the types, method signatures, and property names you used in later tasks match what you defined in earlier tasks? A function called clearLayers() in Task 3 but clearFullLayers() in Task 7 is a bug.
If you find issues, fix them inline. No need to re-review — just fix and move on. If you find a spec requirement with no task, add the task.
After saving the plan, determine execution approach:
Check memory for a saved execution-style preference in the compose-preferences memory file. If found (subagent or inline), use it and skip to the handler below.
If no saved preference, ask through compose:ask:
ExecutionPlan saved. How would you like to execute it?Subagent, always, description: Fresh subagent per task — remember for future sessionsSubagent, this time, description: Fresh subagent per task — just this onceInline, always, description: Execute in this session — remember for future sessionsInline, this time, description: Execute in this session — just this onceIf no user is available, default to Inline for ≤ 3 tasks or tightly coupled tasks, Subagent for > 3 independent tasks.
If "always" variant: Save to the compose-preferences memory file as execution-style: subagent or execution-style: inline.
If Subagent: Use compose:subagent — fresh subagent per task + two-stage review.
If Inline: Use compose:execute — batch execution with checkpoints