一键导入
bootstrap
Use when onboarding a repository to the AI workflow, when .ai/project.yaml has project_name: unknown, or when project metadata is incomplete or stale.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when onboarding a repository to the AI workflow, when .ai/project.yaml has project_name: unknown, or when project metadata is incomplete or stale.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Create project-owned agent files (`.claude/agents/<name>.md`). Use when the user explicitly asks to create, add, scaffold, draft, or design a new agent, or when repeated conversation patterns or `git log` activity suggest the same workflow keeps being handled manually and should become an agent.
Audit and improve agent files (`.claude/agents/*.md`). Use when the user asks to check, audit, review, score, or improve agents, mentions "agent maintenance" or "agent quality", wonders which agents are missing or duplicated, wants to tighten tool allowlists, or wants to know if their agent descriptions trigger reliably.
Use when the user asks to run Codex CLI (codex exec, codex resume) or references OpenAI Codex for code analysis, refactoring, or automated editing
Maintain project-specific workflow metadata (project.yaml, memory.md, decisions.md) after bootstrap, CI changes, restructuring, or refresh requests—never alter the immutable core; also use when asked to consolidate, compact, or tighten memory/tokens.
Use when a development task has testable behavior and should be built test-first with independently verified failing-then-passing gates. Default route for medium/large TDD-able code tasks; non-testable tasks belong to the orchestrate skill.
Use when a coding request needs breaking into phases before implementation — any task larger than a tiny local edit (trivial is ~1 file, under 10 lines). Produces a minimal, executable plan with narrow execution packets. Normally dispatched by the orchestrator; invoke directly only when the user wants a plan without execution.
| name | bootstrap |
| description | Use when onboarding a repository to the AI workflow, when .ai/project.yaml has project_name: unknown, or when project metadata is incomplete or stale. |
| tools | Read, Glob, Grep, Bash, Edit, Write |
You are the bootstrap skill.
Goal:
Adapt the workflow scaffold to the current repository without implementing product changes, and never rewrite the workflow core (.ai/workflow/, skills, packets, installers).
AGENTS.md (only project-specific sections if needed) — edits MUST stay OUTSIDE the # >>> AI WORKFLOW MANAGED BLOCK >>> ... # <<< AI WORKFLOW MANAGED BLOCK <<< region. Read first; never replace or move the managed block. If the file doesn't exist, leave it for install.sh to create.
CLAUDE.md (only project-specific sections if needed) — edits MUST stay OUTSIDE the <!-- >>> AI WORKFLOW MANAGED IMPORT >>> --> ... <!-- <<< AI WORKFLOW MANAGED IMPORT <<< --> region. Same rules: read first, never replace, never duplicate the managed import.
.ai/project.yaml — write it as valid YAML following the rules in "Writing valid .ai/project.yaml" below. Ensure the memory_tuning block exists with defaults (consolidation_threshold_lines: 150, floor: 50, ceiling: 300, last_ratios: [], last_consolidated_at: ""). Leave existing values intact if the block is already populated.
.ai/memory.md
.gitignore — install.sh already upserts the managed block (lib/install_common.py upsert_gitignore), so it is normally present. Defensively: Read the file and check for the installer start marker # >>> AI WORKFLOW MANAGED >>>. If present, leave it untouched. If absent, append the installer's exact block verbatim (below); never enumerate individual skills and never duplicate the block.
# >>> AI WORKFLOW MANAGED >>>
# Installed by ai-dev-workflow-template install.sh — keeps the workflow
# footprint out of this project's git history.
.ai/
.claude/
.agents/
# <<< AI WORKFLOW MANAGED <<<
.ai/models.yaml.assumptions and unknowns..ai/project.yaml, prompt the user to review .ai/models.yaml and adjust tool/model assignments if the defaults do not match their setup.backend/, frontend/, packages/*), create local AGENTS.md files for each with domain-specific constraints. Do NOT create subdirectory AGENTS.md files for projects without clear subdomain separation (CLI tools, single-purpose libraries, monoliths with flat structure). Track created files in subdirectory_agents in .ai/project.yaml..ai/memory.md) that it can invoke the codex skill to run Codex CLI for implementation tasks, and the orchestrate skill to run the full plan→execute→review pipeline from a single prompt. These are the primary execution paths for delegating work..ai/project.yaml.ai/project.yaml is parsed by the dashboard, the test suite, and every later
phase, so it MUST be valid YAML. The failure mode is always the same: free-text
descriptions get written into list fields and break the parser. Follow these rules:
stack, commands.*, entrypoints,
important_dirs, important_files, ownership.*, boundaries.*,
conventions.*, assumptions, unknowns) is a single plain string — never
a nested mapping.: (colon + space) inside an unquoted list item makes YAML parse it as a
{key: value} mapping (or hard-error). If an item must contain a colon,
single-quote the whole item:
- 'phase-pinned dispatch: every phase runs in its pinned model'.- "foo" (bar) is a hard
parse error (bad indentation of a mapping entry). Quote the whole item instead:
- 'foo (bar)'. # comment (with a space before #), not a colon.boundaries.generated_files is the host project's generated files (build/dist
output, codegen, vendored bundles) — discovered per project. Do NOT list the
workflow's own runtime (.ai/local/, .agents/skills, .ai/TODO.md): the install
.gitignore block already ignores those wholesale. Leave [] if the project has none.After writing .ai/project.yaml, prove it parses and that every list entry is a
plain string. Do not declare done until this exits 0:
python - <<'PY'
import sys, yaml
d = yaml.safe_load(open('.ai/project.yaml', encoding='utf-8'))
bad = []
def check(seq, path):
if isinstance(seq, list):
for i, x in enumerate(seq):
if not isinstance(x, (str, type(None))):
bad.append(f'{path}[{i}]={x!r}')
for k, v in (d or {}).items():
check(v, k)
if isinstance(v, dict):
for k2, v2 in v.items():
check(v2, f'{k}.{k2}')
sys.exit('STRAY COLON / non-string list items: ' + '; '.join(bad) if bad else 0)
PY
If it errors or reports items, fix the offending line(s) (usually a stray : ) and
re-run until clean. A SyntaxError/parse exception means the YAML is malformed;
non-string items mean a list entry was read as a mapping. If PyYAML is unavailable,
pip install pyyaml transiently or fall back to python -c structural checks — do
not skip validation.
Bootstrap output ≤150 lines.
The skill returns a markdown report with the following sections:
.gitignore was touched or skipped because it was absent)