[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K7RGSXEKKJQ74HMEE9ANS1":3,"skill-same:01M6K7RGSXEKKJQ74HMEE9ANS1":95},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":56,"install":57,"resources":70},"01M6K7RGSXEKKJQ74HMEE9ANS1","init",null,"Initialize a new project with a standard directory structure, template files, and a git repository. Use this skill whenever the user starts a new project, types \u002Finit, asks to \"set up a new project\", \"initialize a repo\", \"scaffold a project\", or wants to create the standard folder layout. Run once per project at the start of the work. Even if the user only mentions creating a repo or setting up folders, trigger this skill — it handles all of it in one shot.","tbeack\u002Ffsad_playbook","tbeack","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F206807984?v=4","01M6K7Q3C3VRTCVC55T71A1SY9","Theo Beack","01M6K7Q3GDY8TXRQEH984SEE5W",8,"MIT","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Finit\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"new","directory","at","folder","with","types","trigger","layout","project","structure","files","up","only","use","initialize","repo","work","template","new project","SET","start","repository","git","run","create","2026-11-10 10:12:30",false,"---\ndescription: >\n  Initialize a new project with a standard directory structure, template files, and a git repository.\n  Use this skill whenever the user starts a new project, types \u002Finit, asks to \"set up a new project\",\n  \"initialize a repo\", \"scaffold a project\", or wants to create the standard folder layout. Run once\n  per project at the start of the work. Even if the user only mentions creating a repo or setting up\n  folders, trigger this skill — it handles all of it in one shot.\n---\n\n# Project Init Skill\n\nSets up a new project in the current working directory: creates the standard folder structure, writes\ntemplate files for any that are missing, and initializes a local + remote git repository.\n\n**Project name** is always taken from the current directory name — never ask for it.\n\n---\n\n## Asking the user\n\nThis rule covers every question this skill asks the user: a confirmation, a choice, a missing value, a numbered decision list, or a stop-and-ask. It applies even where a later step says \"ask the user\" or \"ask exactly once\". The user may watch the decisions pane rather than the chat, so a question that only goes to chat can go unanswered.\n\n- **When `mcp__decision-tracker__decision` is in your tool list** (loaded, or named as a deferred tool; load a deferred one with `ToolSearch` first), log each question before you ask it:\n  1. Call it with `action: \"open\"`, the question (ending in `?`), and `options` when the answers are a closed set. Set `required: false` when the work can go on without an answer. A numbered list of questions opens one decision per item. Keep each returned `id`.\n  2. Ask the question in chat as this skill says. The open call does not replace the chat question.\n  3. When the user answers, in chat or as a `Decision Dn: \u003Canswer>` message from the plugin, call the tool with `action: \"close\"`, the `id` and the answer.\n  4. When the change the answer asked for is in place, call it with `action: \"implement\"`, the `id` and a `path:line`.\n- **When the tool is absent**, ask in chat only.\n- An `AskUserQuestion` call is logged on its own. Do not open it again.\n- This rule changes where a question is logged. It does not change when this skill asks, or how many times.\n\n\n## Step 1 — Establish project name\n\nUse the Bash tool to run `pwd`, then take the last path segment (everything after the final `\u002F`) as the project name. Store this as `PROJECT_NAME`. Use it to personalize template content where indicated below.\n\n---\n\n## Step 2 — Determine task prefix\n\nThe task prefix is a short uppercase identifier used to tag tasks in `todo.md` (e.g., `FSAD-001`,\n`MNA-042`). Each project gets a unique prefix so tasks are globally unambiguous across repos.\n\n### 2a — Derive a suggestion from the directory name\n\nApply these rules to `PROJECT_NAME` to produce a 3–4 character uppercase suggestion:\n\n- Split on `_`, `-`, spaces, and camelCase word boundaries to get a list of words\n- **Multi-word name**: take the first letter of each word, uppercase. If that gives fewer than 3\n  characters, append the next letters of the longest word until you reach 3.\n  - `fsad_playbook` → `FP` → pad to `FPL` (3 chars from \"playbook\")\n  - `my_new_app` → `MNA`\n  - `data_pipeline` → `DP` → pad to `DPI`\n- **Single-word name**: take the first 3–4 consonant-dominant characters, uppercase.\n  - `recall` → `RCL`\n  - `dashboard` → `DASH`\n- Cap at 4 characters.\n\n### 2b — Check for conflicts\n\nSweep two independent sources for prefixes already in use, and treat a hit in either as a conflict:\n\n1. **Sibling `todo.md` files** — use the Bash tool to grep across `..\u002F*\u002Fplanning\u002Fto do\u002Ftodo.md` for\n   lines matching a task identifier pattern (backtick, 2–5 uppercase letters, hyphen, digit), extract\n   just the prefix, and sort for uniqueness.\n2. **Registered config** — read `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fadd-task\u002Fadd-task-projects.yaml` and collect every `prefix:`\n   value present. A prefix can be reserved in config before any task file using it exists, so this\n   catches conflicts the todo-file grep alone would miss.\n\nIf the suggested prefix appears in either source, note the conflict and adjust: append a digit or\nswap one letter to make it unique (e.g., `MNA` → `MNA2`).\n\n### 2c — Confirm with the user\n\nPresent your suggestion and the conflict check result, then ask the user to confirm or override:\n\n> Suggested task prefix: **`MNA`** (from `my_new_app`) — no conflicts found in sibling projects.\n> Use this prefix, or type a different one?\n\nWait for the user's response before continuing. Store the confirmed value as `TASK_PREFIX`.\n\n---\n\n## Step 3 — Create directory structure\n\nCreate each of the following directories if they don't already exist. Never delete or modify\ndirectories that already exist.\n\n```\nplanning\u002F\nplanning\u002Fdesign\u002F\nplanning\u002Fresearch\u002F\nplanning\u002Fplan\u002F\nplanning\u002Fto do\u002F\nplanning\u002Fto do\u002Fcompleted\u002F\n```\n\nOn macOS\u002FLinux, `mkdir -p` is idempotent — safe to run even if the directory exists.\n\n---\n\n## Step 4 — Write template files\n\nFor each file below, check whether it already exists in the project root. If it does, **skip it\nentirely** — never overwrite existing files. If it doesn't exist, copy the corresponding template\nfrom this skill's `templates\u002F` directory.\n\n| File to create | Template source |\n|---|---|\n| `README.md` | `templates\u002FREADME.md` |\n| `CHANGELOG.md` | `templates\u002FCHANGELOG.md` |\n| `CLAUDE.md` | `templates\u002FCLAUDE.md` |\n| `planning\u002Fto do\u002Ftodo.md` | `templates\u002Ftodo.md` |\n| `.gitignore` | `templates\u002F.gitignore` |\n\nRead each template with the Read tool. Before writing, substitute these placeholders:\n\n| Placeholder | Replace with |\n|---|---|\n| `{{PROJECT_NAME}}` | The directory name from Step 1 |\n| `{{TASK_PREFIX}}` | The confirmed prefix from Step 2 |\n| `{{DATE}}` | Today's date in `YYYY-MM-DD` format |\n\nThen write the result to the destination with the Write tool.\n\n---\n\n## Step 5 — Initialize git repository\n\n**Confirmation gate:** Steps 5 and 6 create durable artifacts — a local git commit and a remote\nGitHub repository. Before proceeding, ask the user once, covering both together:\n\n> Ready to `git init` + commit and create a private GitHub repo for **PROJECT_NAME**? (yes\u002Fno)\n\nWait for an affirmative response before running anything in Step 5 or Step 6. If the user declines,\nskip both steps and note it in the Step 8 output.\n\nCheck whether `.git\u002F` already exists in the project root.\n\n**If it does not exist:**\n```bash\ngit init\ngit add .\ngit commit -m \"Initial commit\"\n```\n\n**If it already exists:** skip git init and the initial commit. The repo is already set up.\n\n---\n\n## Step 6 — Create GitHub remote\n\nCheck whether a remote named `origin` already exists:\n```bash\ngit remote -v\n```\n\n**If no `origin` remote exists:**\n```bash\ngh repo create PROJECT_NAME --private --source=. --remote=origin --push\n```\n\nReplace `PROJECT_NAME` with the actual directory name. Use `--private` by default.\n\n**If `origin` already exists:** skip this step.\n\n---\n\n## Step 7 — Detect project type and register in `add-task-projects.yaml`\n\n### 7a — Detect project type\n\nBefore registering, inspect the project root to pick a `version_scheme`\u002F`version_files` pair instead\nof assuming every project is Node-based:\n\n- `package.json` present → `version_scheme: semver`, `version_files: [package.json]`\n- A different recognized manifest present (`plugin\u002F.claude-plugin\u002Fplugin.json`, `pyproject.toml`,\n  `Cargo.toml`, etc.) → `version_scheme: semver`, `version_files: [\u003Cthat manifest>]`\n- No manifest found (docs \u002F plain-markdown project) → default to `version_scheme: semver`,\n  `version_files: [README.md]` (the pattern already used for markdown-only projects in\n  `add-task-projects.yaml`), or ask the user if the project's shape is ambiguous — never guess silently.\n\nStore the resolved values as `VERSION_SCHEME` and `VERSION_FILES`.\n\n### 7b — Write the registration entry\n\n`${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fadd-task\u002Fadd-task-projects.yaml` is the **single** registry every `fsad-harness:` skill reads — task\nconventions (`fsad-harness:add-task`, `fsad-harness:do-task`, `fsad-harness:next`) and release\u002Fsync conventions (`fsad-harness:sync`,\n`fsad-harness:ship-it`) all resolve from this one file. There is no second config file to keep in step.\n\nRead `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fadd-task\u002Fadd-task-projects.yaml`. Check whether an entry for this project already exists\nby scanning for the resolved `match_paths` value (see below).\n\n**If already present:** skip and note in the output checklist.\n\n**If absent:** construct and insert the following entry immediately before the `# Fallback` comment\nblock (the line that begins `# Fallback when no project matches`). If the file has no fallback\nblock, read it first and use its last existing entry as the unique anchor, inserting the new block\nimmediately after it:\n\n```yaml\n  PROJECT_NAME:\n    match_paths:\n      - ~\u002FRELATIVE_PATH\n    prefix: TASK_PREFIX\n    number_digits: 3\n    todo_file: planning\u002Fto do\u002Ftodo.md\n    task_dir: planning\u002Fto do\n    task_filename_template: task-{prefix_lower}-{nnn}.md\n    todo_entry_template: \"- [ ] `{ID}` — {title} → [task-{prefix_lower}-{nnn}.md](task-{prefix_lower}-{nnn}.md)\"\n    use_full_template: true\n    changelog_file: CHANGELOG.md\n    version_scheme: VERSION_SCHEME\n    version_files:\n      - VERSION_FILES\n    release_branch_pattern: \"release\u002F{version}\"\n```\n\nResolve the placeholders as follows:\n\n- `PROJECT_NAME` — the directory name from Step 1.\n- `RELATIVE_PATH` — derive from `pwd`: replace the home directory prefix with `~`. For example\n  `\u003Chome>\u002Frepo\u002Fmy_project` → `~\u002Frepo\u002Fmy_project`.\n- `TASK_PREFIX` — the confirmed prefix from Step 2.\n- `VERSION_SCHEME` \u002F `VERSION_FILES` — resolved in 7a.\n\nUse the `Edit` tool to insert the block, not a full file rewrite. Use the `# Fallback` comment line\n(or the last existing entry) as the unique anchor for the `old_string`.\n\n---\n\n## Step 8 — Verify and report\n\nDo not report from memory of which steps ran. Re-check every artifact on disk (and in config) and\nprint ✓\u002F✗ from that live check.\n\nFor each item below, perform the stated check and record the result:\n\n- **Directories** — for each of the six paths from Step 3, confirm the directory exists (`ls -d`).\n- **Files** — for each of the five files from Step 4, confirm the file exists, then grep it for `{{`\n  to confirm no leftover template placeholders remain unsubstituted. A file that exists but still\n  contains `{{` is a ✗, not a ✓.\n- **Git** — confirm `.git\u002F` exists on disk. If Steps 5\u002F6 were confirmed and run, confirm\n  `git remote -v` lists `origin`, and optionally run `gh repo view` to confirm the remote resolves.\n  If the user declined the Step 5\u002F6 confirmation gate, report both as skipped-by-choice, not as ✗.\n- **Task tracking** — re-read `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fadd-task\u002Fadd-task-projects.yaml` fresh and confirm the project's\n  entry is present (not from memory of having written it in Step 7).\n\nPrint the checklist using this format:\n\n```\nProject initialized: PROJECT_NAME\n─────────────────────────────────────\nDirectories\n  ✓ planning\u002F\n  ✓ planning\u002Fdesign\u002F\n  ✓ planning\u002Fresearch\u002F\n  ✓ planning\u002Fplan\u002F\n  ✓ planning\u002Fto do\u002F\n  ✓ planning\u002Fto do\u002Fcompleted\u002F\n  — planning\u002F             (already existed, skipped)   ← example of a skip\n\nFiles\n  ✓ README.md             (verified: exists, no leftover placeholders)\n  ✓ CHANGELOG.md\n  ✓ CLAUDE.md\n  ✓ planning\u002Fto do\u002Ftodo.md\n  ✓ .gitignore\n  ✗ CLAUDE.md             (exists but still contains {{PLACEHOLDER}})  ← example of a failed verify\n  — CLAUDE.md             (already existed, skipped)                  ← example of a skip\n\nGit\n  ✓ git init + initial commit (verified: .git\u002F present)\n  ✓ GitHub remote created (private): github.com\u002FUSERNAME\u002FPROJECT_NAME (verified: origin in git remote -v)\n  — git already initialized, skipped\n  — remote origin already exists, skipped\n  — git\u002FGitHub steps skipped by user choice at the Step 5\u002F6 confirmation gate\n\nTask tracking\n  ✓ PROJECT_NAME registered in add-task-projects.yaml (verified on re-read)\n  — PROJECT_NAME already registered in add-task-projects.yaml, skipped\n```\n\nShow only the items that are relevant — don't show both the \"created\" and \"skipped\" lines for the\nsame item. A `✓` means the check passed against live state; a `✗` means the check failed (surface\nthis prominently, don't bury it); a `—` means the action was skipped because it already existed or\nthe user declined it.\n","# Project Init Skill\n\nSets up a new project in the current working directory: creates the standard folder structure, writes\ntemplate files for any that are missing, and initializes a local + remote git repository.\n\n**Project name** is always taken from the current directory name — never ask for it.\n\n---\n\n## Asking the user\n\nThis rule covers every question this skill asks the user: a confirmation, a choice, a missing value, a numbered decision list, or a stop-and-ask. It applies even where a later step says \"ask the user\" or \"ask exactly once\". The user may watch the decisions pane rather than the chat, so a question that only goes to chat can go unanswered.\n\n- **When `mcp__decision-tracker__decision` is in your tool list** (loaded, or named as a deferred tool; load a deferred one with `ToolSearch` first), log each question before you ask it:\n  1. Call it with `action: \"open\"`, the question (ending in `?`), and `options` when the answers are a closed set. Set `required: false` when the work can go on without an answer. A numbered list of questions opens one decision per item. Keep each returned `id`.\n  2. Ask the question in chat as this skill says. The open call does not replace the chat question.\n  3. When the user answers, in chat or as a `Decision Dn: \u003Canswer>` message from the plugin, call the tool with `action: \"close\"`, the `id` and the answer.\n  4. When the change the answer asked for is in place, call it with `action: \"implement\"`, the `id` and a `path:line`.\n- **When the tool is absent**, ask in chat only.\n- An `AskUserQuestion` call is logged on its own. Do not open it again.\n- This rule changes where a question is logged. It does not change when this skill asks, or how many times.\n\n\n## Step 1 — Establish project name\n\nUse the Bash tool to run `pwd`, then take the last path segment (everything after the final `\u002F`) as the project name. Store this as `PROJECT_NAME`. Use it to personalize template content where indicated below.\n\n---\n\n## Step 2 — Determine task prefix\n\nThe task prefix is a short uppercase identifier used to tag tasks in `todo.md` (e.g., `FSAD-001`,\n`MNA-042`). Each project gets a unique prefix so tasks are globally unambiguous across repos.\n\n### 2a — Derive a suggestion from the directory name\n\nApply these rules to `PROJECT_NAME` to produce a 3–4 character uppercase suggestion:\n\n- Split on `_`, `-`, spaces, and camelCase word boundaries to get a list of words\n- **Multi-word name**: take the first letter of each word, uppercase. If that gives fewer than 3\n  characters, append the next letters of the longest word until you reach 3.\n  - `fsad_playbook` → `FP` → pad to `FPL` (3 chars from \"playbook\")\n  - `my_new_app` → `MNA`\n  - `data_pipeline` → `DP` → pad to `DPI`\n- **Single-word name**: take the first 3–4 consonant-dominant characters, uppercase.\n  - `recall` → `RCL`\n  - `dashboard` → `DASH`\n- Cap at 4 characters.\n\n### 2b — Check for conflicts\n\nSweep two independent sources for prefixes already in use, and treat a hit in either as a conflict:\n\n1. **Sibling `todo.md` files** — use the Bash tool to grep across `..\u002F*\u002Fplanning\u002Fto do\u002Ftodo.md` for\n   lines matching a task identifier pattern (backtick, 2–5 uppercase letters, hyphen, digit), extract\n   just the prefix, and sort for uniqueness.\n2. **Registered config** — read `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fadd-task\u002Fadd-task-projects.yaml` and collect every `prefix:`\n   value present. A prefix can be reserved in config before any task file using it exists, so this\n   catches conflicts the todo-file grep alone would miss.\n\nIf the suggested prefix appears in either source, note the conflict and adjust: append a digit or\nswap one letter to make it unique (e.g., `MNA` → `MNA2`).\n\n### 2c — Confirm with the user\n\nPresent your suggestion and the conflict check result, then ask the user to confirm or override:\n\n> Suggested task prefix: **`MNA`** (from `my_new_app`) — no conflicts found in sibling projects.\n> Use this prefix, or type a different one?\n\nWait for the user's response before continuing. Store the confirmed value as `TASK_PREFIX`.\n\n---\n\n## Step 3 — Create directory structure\n\nCreate each of the following directories if they don't already exist. Never delete or modify\ndirectories that already exist.\n\n```\nplanning\u002F\nplanning\u002Fdesign\u002F\nplanning\u002Fresearch\u002F\nplanning\u002Fplan\u002F\nplanning\u002Fto do\u002F\nplanning\u002Fto do\u002Fcompleted\u002F\n```\n\nOn macOS\u002FLinux, `mkdir -p` is idempotent — safe to run even if the directory exists.\n\n---\n\n## Step 4 — Write template files\n\nFor each file below, check whether it already exists in the project root. If it does, **skip it\nentirely** — never overwrite existing files. If it doesn't exist, copy the corresponding template\nfrom this skill's `templates\u002F` directory.\n\n| File to create | Template source |\n|---|---|\n| `README.md` | `templates\u002FREADME.md` |\n| `CHANGELOG.md` | `templates\u002FCHANGELOG.md` |\n| `CLAUDE.md` | `templates\u002FCLAUDE.md` |\n| `planning\u002Fto do\u002Ftodo.md` | `templates\u002Ftodo.md` |\n| `.gitignore` | `templates\u002F.gitignore` |\n\nRead each template with the Read tool. Before writing, substitute these placeholders:\n\n| Placeholder | Replace with |\n|---|---|\n| `{{PROJECT_NAME}}` | The directory name from Step 1 |\n| `{{TASK_PREFIX}}` | The confirmed prefix from Step 2 |\n| `{{DATE}}` | Today's date in `YYYY-MM-DD` format |\n\nThen write the result to the destination with the Write tool.\n\n---\n\n## Step 5 — Initialize git repository\n\n**Confirmation gate:** Steps 5 and 6 create durable artifacts — a local git commit and a remote\nGitHub repository. Before proceeding, ask the user once, covering both together:\n\n> Ready to `git init` + commit and create a private GitHub repo for **PROJECT_NAME**? (yes\u002Fno)\n\nWait for an affirmative response before running anything in Step 5 or Step 6. If the user declines,\nskip both steps and note it in the Step 8 output.\n\nCheck whether `.git\u002F` already exists in the project root.\n\n**If it does not exist:**\n```bash\ngit init\ngit add .\ngit commit -m \"Initial commit\"\n```\n\n**If it already exists:** skip git init and the initial commit. The repo is already set up.\n\n---\n\n## Step 6 — Create GitHub remote\n\nCheck whether a remote named `origin` already exists:\n```bash\ngit remote -v\n```\n\n**If no `origin` remote exists:**\n```bash\ngh repo create PROJECT_NAME --private --source=. --remote=origin --push\n```\n\nReplace `PROJECT_NAME` with the actual directory name. Use `--private` by default.\n\n**If `origin` already exists:** skip this step.\n\n---\n\n## Step 7 — Detect project type and register in `add-task-projects.yaml`\n\n### 7a — Detect project type\n\nBefore registering, inspect the project root to pick a `version_scheme`\u002F`version_files` pair instead\nof assuming every project is Node-based:\n\n- `package.json` present → `version_scheme: semver`, `version_files: [package.json]`\n- A different recognized manifest present (`plugin\u002F.claude-plugin\u002Fplugin.json`, `pyproject.toml`,\n  `Cargo.toml`, etc.) → `version_scheme: semver`, `version_files: [\u003Cthat manifest>]`\n- No manifest found (docs \u002F plain-markdown project) → default to `version_scheme: semver`,\n  `version_files: [README.md]` (the pattern already used for markdown-only projects in\n  `add-task-projects.yaml`), or ask the user if the project's shape is ambiguous — never guess silently.\n\nStore the resolved values as `VERSION_SCHEME` and `VERSION_FILES`.\n\n### 7b — Write the registration entry\n\n`${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fadd-task\u002Fadd-task-projects.yaml` is the **single** registry every `fsad-harness:` skill reads — task\nconventions (`fsad-harness:add-task`, `fsad-harness:do-task`, `fsad-harness:next`) and release\u002Fsync conventions (`fsad-harness:sync`,\n`fsad-harness:ship-it`) all resolve from this one file. There is no second config file to keep in step.\n\nRead `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fadd-task\u002Fadd-task-projects.yaml`. Check whether an entry for this project already exists\nby scanning for the resolved `match_paths` value (see below).\n\n**If already present:** skip and note in the output checklist.\n\n**If absent:** construct and insert the following entry immediately before the `# Fallback` comment\nblock (the line that begins `# Fallback when no project matches`). If the file has no fallback\nblock, read it first and use its last existing entry as the unique anchor, inserting the new block\nimmediately after it:\n\n```yaml\n  PROJECT_NAME:\n    match_paths:\n      - ~\u002FRELATIVE_PATH\n    prefix: TASK_PREFIX\n    number_digits: 3\n    todo_file: planning\u002Fto do\u002Ftodo.md\n    task_dir: planning\u002Fto do\n    task_filename_template: task-{prefix_lower}-{nnn}.md\n    todo_entry_template: \"- [ ] `{ID}` — {title} → [task-{prefix_lower}-{nnn}.md](task-{prefix_lower}-{nnn}.md)\"\n    use_full_template: true\n    changelog_file: CHANGELOG.md\n    version_scheme: VERSION_SCHEME\n    version_files:\n      - VERSION_FILES\n    release_branch_pattern: \"release\u002F{version}\"\n```\n\nResolve the placeholders as follows:\n\n- `PROJECT_NAME` — the directory name from Step 1.\n- `RELATIVE_PATH` — derive from `pwd`: replace the home directory prefix with `~`. For example\n  `\u003Chome>\u002Frepo\u002Fmy_project` → `~\u002Frepo\u002Fmy_project`.\n- `TASK_PREFIX` — the confirmed prefix from Step 2.\n- `VERSION_SCHEME` \u002F `VERSION_FILES` — resolved in 7a.\n\nUse the `Edit` tool to insert the block, not a full file rewrite. Use the `# Fallback` comment line\n(or the last existing entry) as the unique anchor for the `old_string`.\n\n---\n\n## Step 8 — Verify and report\n\nDo not report from memory of which steps ran. Re-check every artifact on disk (and in config) and\nprint ✓\u002F✗ from that live check.\n\nFor each item below, perform the stated check and record the result:\n\n- **Directories** — for each of the six paths from Step 3, confirm the directory exists (`ls -d`).\n- **Files** — for each of the five files from Step 4, confirm the file exists, then grep it for `{{`\n  to confirm no leftover template placeholders remain unsubstituted. A file that exists but still\n  contains `{{` is a ✗, not a ✓.\n- **Git** — confirm `.git\u002F` exists on disk. If Steps 5\u002F6 were confirmed and run, confirm\n  `git remote -v` lists `origin`, and optionally run `gh repo view` to confirm the remote resolves.\n  If the user declined the Step 5\u002F6 confirmation gate, report both as skipped-by-choice, not as ✗.\n- **Task tracking** — re-read `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fadd-task\u002Fadd-task-projects.yaml` fresh and confirm the project's\n  entry is present (not from memory of having written it in Step 7).\n\nPrint the checklist using this format:\n\n```\nProject initialized: PROJECT_NAME\n─────────────────────────────────────\nDirectories\n  ✓ planning\u002F\n  ✓ planning\u002Fdesign\u002F\n  ✓ planning\u002Fresearch\u002F\n  ✓ planning\u002Fplan\u002F\n  ✓ planning\u002Fto do\u002F\n  ✓ planning\u002Fto do\u002Fcompleted\u002F\n  — planning\u002F             (already existed, skipped)   ← example of a skip\n\nFiles\n  ✓ README.md             (verified: exists, no leftover placeholders)\n  ✓ CHANGELOG.md\n  ✓ CLAUDE.md\n  ✓ planning\u002Fto do\u002Ftodo.md\n  ✓ .gitignore\n  ✗ CLAUDE.md             (exists but still contains {{PLACEHOLDER}})  ← example of a failed verify\n  — CLAUDE.md             (already existed, skipped)                  ← example of a skip\n\nGit\n  ✓ git init + initial commit (verified: .git\u002F present)\n  ✓ GitHub remote created (private): github.com\u002FUSERNAME\u002FPROJECT_NAME (verified: origin in git remote -v)\n  — git already initialized, skipped\n  — remote origin already exists, skipped\n  — git\u002FGitHub steps skipped by user choice at the Step 5\u002F6 confirmation gate\n\nTask tracking\n  ✓ PROJECT_NAME registered in add-task-projects.yaml (verified on re-read)\n  — PROJECT_NAME already registered in add-task-projects.yaml, skipped\n```\n\nShow only the items that are relevant — don't show both the \"created\" and \"skipped\" lines for the\nsame item. A `✓` means the check passed against live state; a `✗` means the check failed (surface\nthis prominently, don't bury it); a `—` means the action was skipped because it already existed or\nthe user declined it.\n",{"description":7},"main","bf3a412c985273327682c956ca35341c64ce9f8c","skills\u002Finit",4,"https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook","https:\u002F\u002Ffsad-playbook.vercel.app","https:\u002F\u002Fgithub.com\u002Ftbeack","2026-11-11 21:04:33",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add tbeack\u002Ffsad_playbook --skill init",{"tool":63,"command":64},"bunx","bunx skills add tbeack\u002Ffsad_playbook --skill init",{"tool":66,"command":67},"pnpm","pnpm dlx skills add tbeack\u002Ffsad_playbook --skill init","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Finit\u002FSKILL.md",true,[71,77,83,87,91],{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"templates\u002F.gitignore","OTHER","其他",331,"https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Finit\u002Ftemplates\u002F.gitignore",{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"templates\u002FCHANGELOG.md","REFERENCE","参考文档",159,"https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Finit\u002Ftemplates\u002FCHANGELOG.md",{"path":84,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":85,"sourceHtmlUrl":86},"templates\u002FCLAUDE.md",1800,"https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Finit\u002Ftemplates\u002FCLAUDE.md",{"path":88,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":89,"sourceHtmlUrl":90},"templates\u002FREADME.md",431,"https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Finit\u002Ftemplates\u002FREADME.md",{"path":92,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":93,"sourceHtmlUrl":94},"templates\u002Ftodo.md",29,"https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Finit\u002Ftemplates\u002Ftodo.md",[96,116,147,165,184,210],{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":44},"01M6K7W5RTRMRQMWAGXNSX8DM6","sync","Pre-flight sync check for registered projects. Fetches from remote, reports uncommitted changes, and handles four states — up-to-date, ahead, behind (warns + pulls), or diverged (warns, no pull). Supports single-project (cwd detection), named-project (fsad-harness:sync key1 key2), and full-sync (fsad-harness:sync ALL) modes.","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Fsync\u002FSKILL.md",[],[98,103,104,105,106,107,30,108,27,109,110,111,112,113,114,115],"pull","harness","detection","projects","check","reports","full","remote","states","for","changes","modes","single",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":127,"publishedAt":44},"01M6K7VY55SWBDD379T9JZVF16","spec-review","Run a detailed, adversarial multi-agent review of a written proposal or specification (spec.md, PRD, RFC, design doc, architecture proposal, business case) — reviews the document, not code. Runs a steelman\u002Finventory pass, then up to 10 specialist lenses (logic, assumptions, evidence, completeness, feasibility, alternatives, consistency, stakeholders, testability, risk), then adversarial validation that defaults to refuting each finding unless it survives, then a loop-until-dry completeness pass. Writes a single severity-ranked SPEC-REVIEW.md next to the document. Use when the user says \"review this spec\", \"adversarial review\", \"poke holes in this proposal\", \"red team this PRD\", \"critique this design doc\", \"what's wrong with this RFC\", \"stress test this plan\", or similar. Review-only — never edits the document.","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Fspec-review\u002FSKILL.md",[122],{"categoryNo":123,"categoryName":124,"taxonomyType":125,"taxonomyTypeDesc":126},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[128,129,130,131,132,133,134,135,136,137,31,30,138,139,140,141,142,143,144,145,146],"review","spec","spec review","design","architecture","code","inventory","team","loop","never","specification","poke","deep","dry","proposal","lens","quick","reviews","when",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":153,"publishedAt":44},"01M6K7VVD3B0SM3VKJ5W26QPPV","ship","Short alias for \u002Ffsad-harness:ship-it. Wrap up finished work, cut a version, commit, push, and open a PR.","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Fship\u002FSKILL.md",[],[149,154,155,104,156,157,158,35,159,160,30,161,162,163,164,112],"commit","pr","push","open","wrap up","short","version","wrap","alias","cut","it",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":44},"01M6K7VP2QDRNX57KP2RH10FAW","ship-it","Wrap up a finished round of work — verify README and CHANGELOG are current, cut a version if warranted, move completed task files into the completed\u002F folder, then create a feature branch if needed, commit, push, and open a PR. Run after `\u002Ffsad-harness:do-task` has marked one or more tasks done. Takes no arguments.","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Fship-it\u002FSKILL.md",[],[149,172,164,154,173,43,157,174,175,35,176,177,30,178,29,179,180,181,110,182,183],"ship it","tasks","Bash","gh pr","branch","fetch","log","done","checkout","move","ls","parse",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":190,"publishedAt":44},"01M6K7VEK1C0MK5BNDHV8S6HCA","set-context","Gather codebase and initiative context before planning starts — runs a graphify build or query when graphify is available locally, falls back to a manual repo sweep otherwise, then asks targeted questions and writes a single context.md. Invocable standalone or as fsad-harness:plan's mandatory Phase 0. Use when the user says \"set context\", \"gather context\", or as the first step of fsad-harness:plan.","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Fset-context\u002FSKILL.md",[],[38,191,192,193,104,194,195,196,197,34,198,32,199,200,201,202,203,204,205,206,207,115,208,209,146],"context","set context","planning","first","graphify","plan","sweep","user","build","back","query","as","questions","manual","standalone","path","codebase","phase","gather",{"skillNo":211,"name":212,"nameZh":6,"description":213,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":214,"categories":215,"keywords":220,"publishedAt":44},"01M6K7V17M3MQ92QZ99G294RYM","sec-review-team","Run a multi-agent security review TEAM over a codebase or recent diff. Picks a specialist roster based on detected stack signals (webapp \u002F desktop \u002F iac \u002F llm-agent \u002F container \u002F backend \u002F mobile \u002F etc.) from a library of 13 specialists. Each specialist writes structured JSONL + prose findings in parallel; input-validation-auditor and auth-authz-auditor run a loop-until-dry consensus fan-out (2-8 passes); every deduped finding is adversarially verified by a dedicated validator agent before it can appear in the report. Orchestrator consolidates into a single severity-ranked REPORT.md with deduped root issues, archived per-run under a known-findings.jsonl ledger that drives auto re-review. Distinct from the built-in `\u002Fsecurity-review` (which is a single-pass branch review). Use when the user says \"multi-agent security review\", \"security review team\", \"sec-review team\", \"audit this branch with a team\", \"pre-release hardening team pass\", or similar. Review-only — no fixes.","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_playbook\u002Fblob\u002Fmain\u002Fskills\u002Fsec-review-team\u002FSKILL.md",[216,219],{"categoryNo":217,"categoryName":218,"taxonomyType":125,"taxonomyTypeDesc":126},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":123,"categoryName":124,"taxonomyType":125,"taxonomyTypeDesc":126},[128,135,221,222,223,224,42,225,226,136,227,176,228,229,230,141,231,232,233,234,235],"sec review team","review team","agent security","security review","release","security-review","stack","consensus","auto","mobile","input","re","jsonl","which","verified"]