[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M736HT0NYHCJSME2K3Y80A4W":3,"skill-same:01M736HT0NYHCJSME2K3Y80A4W":63},{"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":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":14,"repositoryHtmlUrl":30,"repositoryHomepageUrl":6,"ownerHtmlUrl":31,"ownerBlogUrl":32,"ownerDescription":33,"updatedAt":34,"install":35,"resources":48},"01M736HT0NYHCJSME2K3Y80A4W","handover",null,"Generate project handover documentation for AEM Edge Delivery Services projects. Creates comprehensive guides for content authors, developers, and administrators. Use for \"handover docs\", \"project documentation\", \"generate handover\", \"create guides\".","kalash33\u002Fkstack","kalash33","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F90259149?v=4","01M7365X8Q0B73NYHA730SMZWN","Kalash Poddar","01M7365X9D0JK47C3Q0YCCK9Z2",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fkalash33\u002Fkstack\u002Fblob\u002Fmain\u002Fskills\u002Fadobe-handover\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: handover\ndescription: Generate project handover documentation for AEM Edge Delivery Services projects. Creates comprehensive guides for content authors, developers, and administrators. Use for \"handover docs\", \"project documentation\", \"generate handover\", \"create guides\".\nlicense: Apache-2.0\nallowed-tools: Read, Write, Edit, Bash, AskUserQuestion, Skill, Agent\nmetadata:\n  version: \"1.0.0\"\n---\n\n# Project Handover Documentation\n\nGenerate comprehensive handover documentation for Edge Delivery Services projects. This skill orchestrates the creation of guides for different audiences.\n\n## When to Use This Skill\n\n- \"Generate project handover docs\"\n- \"Create handover documentation\"\n- \"Generate project guides\"\n- \"Handover package\"\n- \"Project documentation\"\n\n---\n\n## Available Documentation Types\n\n| Guide | Audience | Skill |\n|-------|----------|-------|\n| **Authoring Guide** | Content authors and content managers | `authoring` |\n| **Developer Guide** | Developers and technical team | `development` |\n| **Admin Guide** | Site administrators and operations | `admin` |\n\n---\n\n## Execution Flow\n\n### Step 0: Navigate to Project Root and Verify Edge Delivery Services Project (MANDATORY FIRST STEP)\n\n**CRITICAL: You MUST execute this `cd` command before anything else. Do NOT use absolute paths — actually change directory.**\n\n```bash\n# Navigate to git project root (works from any subdirectory)\ncd \"$(git rev-parse --show-toplevel)\"\n\n# Verify it's an Edge Delivery Services project\nls scripts\u002Faem.js\n```\n\n**IMPORTANT:**\n- You MUST run the `cd` command above using the Bash tool\n- All subsequent steps operate from project root\n- Do NOT use absolute paths to verify — actually navigate\n- Guides will be created at `project-root\u002Fproject-guides\u002F`\n\n**If `scripts\u002Faem.js` does NOT exist**, respond:\n\n> \"This skill is designed for AEM Edge Delivery Services projects. The current directory does not appear to be an Edge Delivery Services project (`scripts\u002Faem.js` not found).\n>\n> Please navigate to an Edge Delivery Services project and try again.\"\n\n**STOP if check fails. Otherwise proceed — you are now at project root.**\n\n---\n\n### Step 0.5: Clean Up Stale Config\n\nRemove any existing config to ensure fresh org and authentication for this project:\n\n```bash\nrm -f .claude-plugin\u002Fproject-config.json\n```\n\n---\n\n### Step 1: Ask User for Documentation Type\n\n**MANDATORY:** Use the `AskUserQuestion` tool with EXACTLY these 4 options:\n\n```json\nAskUserQuestion({\n  \"questions\": [{\n    \"question\": \"Which type of handover documentation would you like me to generate?\",\n    \"header\": \"Guide Type\",\n    \"options\": [\n      {\"label\": \"All (Recommended)\", \"description\": \"Generate all three guides: Authoring, Developer, and Admin\"},\n      {\"label\": \"Authoring Guide\", \"description\": \"For content authors and managers - blocks, templates, publishing\"},\n      {\"label\": \"Developer Guide\", \"description\": \"For developers - codebase, implementations, design tokens\"},\n      {\"label\": \"Admin Guide\", \"description\": \"For site administrators - permissions, API operations, cache\"}\n    ],\n    \"multiSelect\": false\n  }]\n})\n```\n\n**DO NOT omit any option. All 4 options MUST be presented.**\n\n### Step 1.5: Get Organization Name (Required Before Generating Guides)\n\n**AFTER the user selects guide type(s), but BEFORE invoking any sub-skills**, ensure the organization name is available.\n\n#### 1.5.1 Check for Saved Organization\n\n```bash\n# Check if org name is already saved\ncat .claude-plugin\u002Fproject-config.json 2>\u002Fdev\u002Fnull | grep -o '\"org\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | head -1\n```\n\n#### 1.5.2 Prompt for Organization Name (If Not Saved)\n\n**If no org name is saved**, you MUST pause and ask the user directly:\n\n> \"What is your Config Service organization name? This is the `{org}` part of your Edge Delivery Services URLs (e.g., `https:\u002F\u002Fmain--site--{org}.aem.page`). The org name may differ from your GitHub organization.\"\n\n**IMPORTANT RULES:**\n- **DO NOT use `AskUserQuestion` with predefined options** — ask as a plain text question\n- **Organization name is MANDATORY** — do not offer a \"skip\" option\n- **Wait for user to type the org name** before proceeding\n- If user doesn't provide a valid org name, ask again\n\n#### 1.5.3 Save Organization Name\n\nOnce you have the org name, save it so sub-skills can use it:\n\n```bash\n# Create config directory if needed\nmkdir -p .claude-plugin\n# Ensure .claude-plugin is in .gitignore (contains auth tokens)\ngrep -qxF '.claude-plugin\u002F' .gitignore 2>\u002Fdev\u002Fnull || echo '.claude-plugin\u002F' >> .gitignore\n\n# Save org name to config file\n# If \"All\" was selected, include allGuides flag to skip step 0 in sub-skills\necho '{\"org\": \"{ORG_NAME}\"}' > .claude-plugin\u002Fproject-config.json\n# OR if \"All (Recommended)\" was selected:\necho '{\"org\": \"{ORG_NAME}\", \"allGuides\": true}' > .claude-plugin\u002Fproject-config.json\n```\n\n**Note:** Include `\"allGuides\": true` ONLY when user selected \"All (Recommended)\". This signals sub-skills to skip step 0 validation (orchestrator already validated).\n\nReplace `{ORG_NAME}` with the actual organization name provided by the user.\n\n**Why this matters:** The organization name is required by the Helix Admin API to determine if the project is repoless (multi-site). By gathering it once in the orchestrator, sub-skills running in parallel don't each need to prompt the user separately.\n\n### Step 1.6: Authenticate with Config Service (Browser Login)\n\n**AFTER saving the organization name, authenticate using Playwright browser automation.**\n\n#### 1.6.1 Check for Existing Auth Token\n\n```bash\nAUTH_TOKEN=$(cat .claude-plugin\u002Fproject-config.json 2>\u002Fdev\u002Fnull | grep -o '\"authToken\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | sed 's\u002F\"authToken\"[[:space:]]*:[[:space:]]*\"\u002F\u002F' | sed 's\u002F\"$\u002F\u002F')\n```\n\n#### 1.6.2 Open Browser for Login (If No Token)\n\nIf no auth token exists, use Playwright CLI:\n\n1. **Install Playwright (if needed)**:\n```bash\nnpx playwright --version 2>\u002Fdev\u002Fnull || npm install -g playwright\nnpx playwright install chromium 2>\u002Fdev\u002Fnull || true\n```\n\n2. **Get first site name** (unauthenticated):\n```bash\nORG=$(cat .claude-plugin\u002Fproject-config.json | grep -o '\"org\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | sed 's\u002F\"org\"[[:space:]]*:[[:space:]]*\"\u002F\u002F' | sed 's\u002F\"$\u002F\u002F')\nSITE=$(curl -s \"https:\u002F\u002Fadmin.hlx.page\u002Fconfig\u002F${ORG}\u002Fsites.json\" | grep -o '\"name\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | head -1 | sed 's\u002F\"name\"[[:space:]]*:[[:space:]]*\"\u002F\u002F' | sed 's\u002F\"$\u002F\u002F')\n```\n\n3. **Get user acknowledgment before opening browser**:\n\nUse `AskUserQuestion` to ensure user is ready:\n\n```json\nAskUserQuestion({\n  \"questions\": [{\n    \"question\": \"A browser window will open for authentication. After signing in, CLOSE THE BROWSER WINDOW to continue. Ready?\",\n    \"header\": \"Authentication Required\",\n    \"options\": [\n      {\"label\": \"Open Browser\", \"description\": \"I understand - open the browser for login\"}\n    ],\n    \"multiSelect\": false\n  }]\n})\n```\n\n**After user confirms**, run:\n```bash\nmkdir -p .claude-plugin && npx playwright open --save-storage=.claude-plugin\u002Fauth-storage.json \"https:\u002F\u002Fadmin.hlx.page\u002Flogin\u002F${ORG}\u002F${SITE}\u002Fmain\"\n```\n\n#### 1.6.3 Extract and Save Auth Token\n\nAfter browser is closed, extract token from storage file:\n\n```bash\necho \"Browser closed. Extracting auth token...\"\n\nAUTH_TOKEN=$(node -e \"\nconst fs = require('fs');\nconst data = JSON.parse(fs.readFileSync('.claude-plugin\u002Fauth-storage.json', 'utf8'));\nconst cookie = data.cookies.find(c => c.name === 'auth_token');\nconsole.log(cookie ? cookie.value : '');\n\")\n\nORG=$(cat .claude-plugin\u002Fproject-config.json | grep -o '\"org\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | sed 's\u002F\"org\"[[:space:]]*:[[:space:]]*\"\u002F\u002F' | sed 's\u002F\"$\u002F\u002F')\necho \"{\\\"org\\\": \\\"${ORG}\\\", \\\"authToken\\\": \\\"${AUTH_TOKEN}\\\"}\" > .claude-plugin\u002Fproject-config.json\n\nrm -f .claude-plugin\u002Fauth-storage.json\necho \"Auth token saved.\"\n```\n\n**Why authenticate in orchestrator:** By authenticating once here, all sub-skills running in parallel can use the saved token without each prompting for login separately.\n\n### Step 2: Invoke Appropriate Skill(s)\n\nBased on user selection:\n\n| Selection | Action |\n|-----------|--------|\n| **All** | Invoke all three skills **in parallel** (see Step 3) |\n| **Authoring Guide** | `Skill({ skill: \"project-management:authoring\" })` |\n| **Developer Guide** | `Skill({ skill: \"project-management:development\" })` |\n| **Admin Guide** | `Skill({ skill: \"project-management:admin\" })` |\n\n### Step 3: For \"All\" Selection\n\n**Execute all three guides in PARALLEL with streaming progress updates.**\n\n**IMPORTANT:** Provide immediate feedback to user before starting parallel execution:\n\n```\n\"Starting parallel generation of all 3 handover guides:\n  📄 Authoring Guide - analyzing blocks, templates, configurations...\n  📄 Developer Guide - analyzing code, patterns, architecture...\n  📄 Admin Guide - analyzing deployment, security, operations...\n\nYou'll see progress updates as each guide moves through its phases.\"\n```\n\n**Launch all three skills simultaneously using parallel Agent tool calls (foreground mode):**\n\nIn a SINGLE message, invoke three Agent tools in parallel. Foreground agents have full tool permissions and run concurrently:\n\n```javascript\n\u002F\u002F All three in ONE message - runs in parallel with full permissions\nAgent({\n  description: \"Generate authoring guide\",\n  prompt: \"Invoke skill project-management:authoring to generate the authoring guide PDF. Show progress as you complete each phase.\"\n})\n\nAgent({\n  description: \"Generate developer guide\",\n  prompt: \"Invoke skill project-management:development to generate the developer guide PDF. Show progress as you complete each phase.\"\n})\n\nAgent({\n  description: \"Generate admin guide\",\n  prompt: \"Invoke skill project-management:admin to generate the admin guide PDF. Show progress as you complete each phase.\"\n})\n```\n\n**Why foreground agents:**\n- Run all 3 in parallel (~3x faster than sequential)\n- Full tool permissions (Bash, Read, Write, Glob, Skill)\n- Progress updates stream as each agent works\n\n**When all three complete, report final summary:**\n\n```\n\"Handover documentation complete:\n\nproject-guides\u002F\n├── AUTHOR-GUIDE.pdf (full guide for content authors)\n├── DEVELOPER-GUIDE.pdf (full guide for developers)\n└── ADMIN-GUIDE.pdf (full guide for administrators)\n\nAll PDFs generated. Source files cleaned up.\"\n```\n\n**Benefits of parallel execution:**\n- ~3x faster than sequential execution\n- User sees continuous progress updates\n- Each guide generates independently\n\n---\n\n## Output Files\n\n| Selection | Output Files |\n|-----------|--------------|\n| All | `project-guides\u002FAUTHOR-GUIDE.pdf`, `project-guides\u002FDEVELOPER-GUIDE.pdf`, `project-guides\u002FADMIN-GUIDE.pdf` |\n| Authoring Guide | `project-guides\u002FAUTHOR-GUIDE.pdf` |\n| Developer Guide | `project-guides\u002FDEVELOPER-GUIDE.pdf` |\n| Admin Guide | `project-guides\u002FADMIN-GUIDE.pdf` |\n\n**Note:** Each sub-skill generates a PDF only. All source files (.md, .html, .plain.html) are cleaned up after PDF generation.\n\n---\n\n## ⚠️ CRITICAL PATH REQUIREMENT\n\n**ALL FILES MUST BE SAVED TO `project-guides\u002F` FOLDER:**\n\n```\nproject-guides\u002FAUTHOR-GUIDE.md\nproject-guides\u002FDEVELOPER-GUIDE.md\nproject-guides\u002FADMIN-GUIDE.md\n```\n\n**WHY THIS MATTERS:** Files must be in `project-guides\u002F` for proper organization and PDF conversion.\n\n**BEFORE WRITING ANY FILE:** Run `mkdir -p project-guides` first.\n\n---\n\n## MANDATORY RULES\n\n**STRICTLY FORBIDDEN:**\n- ❌ Do NOT read or analyze `fstab.yaml` — it does NOT exist in most projects and does NOT show all sites\n- ❌ Do NOT create `.plain.html` files\n- ❌ Do NOT use `convert_markdown_to_html` tool\n- ❌ Do NOT tell user to \"convert markdown to PDF manually\"\n- ❌ Do NOT say \"PDF will be generated later\" — each sub-skill generates PDF immediately\n- ❌ Do NOT save markdown to root directory or any path other than `project-guides\u002F`\n\n**REQUIRED:**\n- ✅ Run `mkdir -p project-guides` before writing any files\n- ✅ Each sub-skill MUST save markdown to `project-guides\u002F` folder (EXACT PATH)\n- ✅ Markdown files MUST have `title` and `date` fields in frontmatter\n- ✅ Each sub-skill MUST invoke `project-management:whitepaper` to generate PDF immediately after saving markdown\n- ✅ Each sub-skill MUST cleanup ALL source files (.md, .html, .plain.html) after PDF generation\n- ✅ Final output is `.pdf` files ONLY in `project-guides\u002F` folder\n\n---\n\n## Related Skills\n\nThis skill invokes:\n- `project-management:authoring` - Author\u002Fcontent manager guide (generates PDF immediately)\n- `project-management:development` - Developer technical guide (generates PDF immediately)\n- `project-management:admin` - Admin operations guide (generates PDF immediately)\n- `project-management:whitepaper` - PDF generation (invoked by each sub-skill after saving markdown)\n\n","# Project Handover Documentation\n\nGenerate comprehensive handover documentation for Edge Delivery Services projects. This skill orchestrates the creation of guides for different audiences.\n\n## When to Use This Skill\n\n- \"Generate project handover docs\"\n- \"Create handover documentation\"\n- \"Generate project guides\"\n- \"Handover package\"\n- \"Project documentation\"\n\n---\n\n## Available Documentation Types\n\n| Guide | Audience | Skill |\n|-------|----------|-------|\n| **Authoring Guide** | Content authors and content managers | `authoring` |\n| **Developer Guide** | Developers and technical team | `development` |\n| **Admin Guide** | Site administrators and operations | `admin` |\n\n---\n\n## Execution Flow\n\n### Step 0: Navigate to Project Root and Verify Edge Delivery Services Project (MANDATORY FIRST STEP)\n\n**CRITICAL: You MUST execute this `cd` command before anything else. Do NOT use absolute paths — actually change directory.**\n\n```bash\n# Navigate to git project root (works from any subdirectory)\ncd \"$(git rev-parse --show-toplevel)\"\n\n# Verify it's an Edge Delivery Services project\nls scripts\u002Faem.js\n```\n\n**IMPORTANT:**\n- You MUST run the `cd` command above using the Bash tool\n- All subsequent steps operate from project root\n- Do NOT use absolute paths to verify — actually navigate\n- Guides will be created at `project-root\u002Fproject-guides\u002F`\n\n**If `scripts\u002Faem.js` does NOT exist**, respond:\n\n> \"This skill is designed for AEM Edge Delivery Services projects. The current directory does not appear to be an Edge Delivery Services project (`scripts\u002Faem.js` not found).\n>\n> Please navigate to an Edge Delivery Services project and try again.\"\n\n**STOP if check fails. Otherwise proceed — you are now at project root.**\n\n---\n\n### Step 0.5: Clean Up Stale Config\n\nRemove any existing config to ensure fresh org and authentication for this project:\n\n```bash\nrm -f .claude-plugin\u002Fproject-config.json\n```\n\n---\n\n### Step 1: Ask User for Documentation Type\n\n**MANDATORY:** Use the `AskUserQuestion` tool with EXACTLY these 4 options:\n\n```json\nAskUserQuestion({\n  \"questions\": [{\n    \"question\": \"Which type of handover documentation would you like me to generate?\",\n    \"header\": \"Guide Type\",\n    \"options\": [\n      {\"label\": \"All (Recommended)\", \"description\": \"Generate all three guides: Authoring, Developer, and Admin\"},\n      {\"label\": \"Authoring Guide\", \"description\": \"For content authors and managers - blocks, templates, publishing\"},\n      {\"label\": \"Developer Guide\", \"description\": \"For developers - codebase, implementations, design tokens\"},\n      {\"label\": \"Admin Guide\", \"description\": \"For site administrators - permissions, API operations, cache\"}\n    ],\n    \"multiSelect\": false\n  }]\n})\n```\n\n**DO NOT omit any option. All 4 options MUST be presented.**\n\n### Step 1.5: Get Organization Name (Required Before Generating Guides)\n\n**AFTER the user selects guide type(s), but BEFORE invoking any sub-skills**, ensure the organization name is available.\n\n#### 1.5.1 Check for Saved Organization\n\n```bash\n# Check if org name is already saved\ncat .claude-plugin\u002Fproject-config.json 2>\u002Fdev\u002Fnull | grep -o '\"org\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | head -1\n```\n\n#### 1.5.2 Prompt for Organization Name (If Not Saved)\n\n**If no org name is saved**, you MUST pause and ask the user directly:\n\n> \"What is your Config Service organization name? This is the `{org}` part of your Edge Delivery Services URLs (e.g., `https:\u002F\u002Fmain--site--{org}.aem.page`). The org name may differ from your GitHub organization.\"\n\n**IMPORTANT RULES:**\n- **DO NOT use `AskUserQuestion` with predefined options** — ask as a plain text question\n- **Organization name is MANDATORY** — do not offer a \"skip\" option\n- **Wait for user to type the org name** before proceeding\n- If user doesn't provide a valid org name, ask again\n\n#### 1.5.3 Save Organization Name\n\nOnce you have the org name, save it so sub-skills can use it:\n\n```bash\n# Create config directory if needed\nmkdir -p .claude-plugin\n# Ensure .claude-plugin is in .gitignore (contains auth tokens)\ngrep -qxF '.claude-plugin\u002F' .gitignore 2>\u002Fdev\u002Fnull || echo '.claude-plugin\u002F' >> .gitignore\n\n# Save org name to config file\n# If \"All\" was selected, include allGuides flag to skip step 0 in sub-skills\necho '{\"org\": \"{ORG_NAME}\"}' > .claude-plugin\u002Fproject-config.json\n# OR if \"All (Recommended)\" was selected:\necho '{\"org\": \"{ORG_NAME}\", \"allGuides\": true}' > .claude-plugin\u002Fproject-config.json\n```\n\n**Note:** Include `\"allGuides\": true` ONLY when user selected \"All (Recommended)\". This signals sub-skills to skip step 0 validation (orchestrator already validated).\n\nReplace `{ORG_NAME}` with the actual organization name provided by the user.\n\n**Why this matters:** The organization name is required by the Helix Admin API to determine if the project is repoless (multi-site). By gathering it once in the orchestrator, sub-skills running in parallel don't each need to prompt the user separately.\n\n### Step 1.6: Authenticate with Config Service (Browser Login)\n\n**AFTER saving the organization name, authenticate using Playwright browser automation.**\n\n#### 1.6.1 Check for Existing Auth Token\n\n```bash\nAUTH_TOKEN=$(cat .claude-plugin\u002Fproject-config.json 2>\u002Fdev\u002Fnull | grep -o '\"authToken\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | sed 's\u002F\"authToken\"[[:space:]]*:[[:space:]]*\"\u002F\u002F' | sed 's\u002F\"$\u002F\u002F')\n```\n\n#### 1.6.2 Open Browser for Login (If No Token)\n\nIf no auth token exists, use Playwright CLI:\n\n1. **Install Playwright (if needed)**:\n```bash\nnpx playwright --version 2>\u002Fdev\u002Fnull || npm install -g playwright\nnpx playwright install chromium 2>\u002Fdev\u002Fnull || true\n```\n\n2. **Get first site name** (unauthenticated):\n```bash\nORG=$(cat .claude-plugin\u002Fproject-config.json | grep -o '\"org\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | sed 's\u002F\"org\"[[:space:]]*:[[:space:]]*\"\u002F\u002F' | sed 's\u002F\"$\u002F\u002F')\nSITE=$(curl -s \"https:\u002F\u002Fadmin.hlx.page\u002Fconfig\u002F${ORG}\u002Fsites.json\" | grep -o '\"name\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | head -1 | sed 's\u002F\"name\"[[:space:]]*:[[:space:]]*\"\u002F\u002F' | sed 's\u002F\"$\u002F\u002F')\n```\n\n3. **Get user acknowledgment before opening browser**:\n\nUse `AskUserQuestion` to ensure user is ready:\n\n```json\nAskUserQuestion({\n  \"questions\": [{\n    \"question\": \"A browser window will open for authentication. After signing in, CLOSE THE BROWSER WINDOW to continue. Ready?\",\n    \"header\": \"Authentication Required\",\n    \"options\": [\n      {\"label\": \"Open Browser\", \"description\": \"I understand - open the browser for login\"}\n    ],\n    \"multiSelect\": false\n  }]\n})\n```\n\n**After user confirms**, run:\n```bash\nmkdir -p .claude-plugin && npx playwright open --save-storage=.claude-plugin\u002Fauth-storage.json \"https:\u002F\u002Fadmin.hlx.page\u002Flogin\u002F${ORG}\u002F${SITE}\u002Fmain\"\n```\n\n#### 1.6.3 Extract and Save Auth Token\n\nAfter browser is closed, extract token from storage file:\n\n```bash\necho \"Browser closed. Extracting auth token...\"\n\nAUTH_TOKEN=$(node -e \"\nconst fs = require('fs');\nconst data = JSON.parse(fs.readFileSync('.claude-plugin\u002Fauth-storage.json', 'utf8'));\nconst cookie = data.cookies.find(c => c.name === 'auth_token');\nconsole.log(cookie ? cookie.value : '');\n\")\n\nORG=$(cat .claude-plugin\u002Fproject-config.json | grep -o '\"org\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | sed 's\u002F\"org\"[[:space:]]*:[[:space:]]*\"\u002F\u002F' | sed 's\u002F\"$\u002F\u002F')\necho \"{\\\"org\\\": \\\"${ORG}\\\", \\\"authToken\\\": \\\"${AUTH_TOKEN}\\\"}\" > .claude-plugin\u002Fproject-config.json\n\nrm -f .claude-plugin\u002Fauth-storage.json\necho \"Auth token saved.\"\n```\n\n**Why authenticate in orchestrator:** By authenticating once here, all sub-skills running in parallel can use the saved token without each prompting for login separately.\n\n### Step 2: Invoke Appropriate Skill(s)\n\nBased on user selection:\n\n| Selection | Action |\n|-----------|--------|\n| **All** | Invoke all three skills **in parallel** (see Step 3) |\n| **Authoring Guide** | `Skill({ skill: \"project-management:authoring\" })` |\n| **Developer Guide** | `Skill({ skill: \"project-management:development\" })` |\n| **Admin Guide** | `Skill({ skill: \"project-management:admin\" })` |\n\n### Step 3: For \"All\" Selection\n\n**Execute all three guides in PARALLEL with streaming progress updates.**\n\n**IMPORTANT:** Provide immediate feedback to user before starting parallel execution:\n\n```\n\"Starting parallel generation of all 3 handover guides:\n  📄 Authoring Guide - analyzing blocks, templates, configurations...\n  📄 Developer Guide - analyzing code, patterns, architecture...\n  📄 Admin Guide - analyzing deployment, security, operations...\n\nYou'll see progress updates as each guide moves through its phases.\"\n```\n\n**Launch all three skills simultaneously using parallel Agent tool calls (foreground mode):**\n\nIn a SINGLE message, invoke three Agent tools in parallel. Foreground agents have full tool permissions and run concurrently:\n\n```javascript\n\u002F\u002F All three in ONE message - runs in parallel with full permissions\nAgent({\n  description: \"Generate authoring guide\",\n  prompt: \"Invoke skill project-management:authoring to generate the authoring guide PDF. Show progress as you complete each phase.\"\n})\n\nAgent({\n  description: \"Generate developer guide\",\n  prompt: \"Invoke skill project-management:development to generate the developer guide PDF. Show progress as you complete each phase.\"\n})\n\nAgent({\n  description: \"Generate admin guide\",\n  prompt: \"Invoke skill project-management:admin to generate the admin guide PDF. Show progress as you complete each phase.\"\n})\n```\n\n**Why foreground agents:**\n- Run all 3 in parallel (~3x faster than sequential)\n- Full tool permissions (Bash, Read, Write, Glob, Skill)\n- Progress updates stream as each agent works\n\n**When all three complete, report final summary:**\n\n```\n\"Handover documentation complete:\n\nproject-guides\u002F\n├── AUTHOR-GUIDE.pdf (full guide for content authors)\n├── DEVELOPER-GUIDE.pdf (full guide for developers)\n└── ADMIN-GUIDE.pdf (full guide for administrators)\n\nAll PDFs generated. Source files cleaned up.\"\n```\n\n**Benefits of parallel execution:**\n- ~3x faster than sequential execution\n- User sees continuous progress updates\n- Each guide generates independently\n\n---\n\n## Output Files\n\n| Selection | Output Files |\n|-----------|--------------|\n| All | `project-guides\u002FAUTHOR-GUIDE.pdf`, `project-guides\u002FDEVELOPER-GUIDE.pdf`, `project-guides\u002FADMIN-GUIDE.pdf` |\n| Authoring Guide | `project-guides\u002FAUTHOR-GUIDE.pdf` |\n| Developer Guide | `project-guides\u002FDEVELOPER-GUIDE.pdf` |\n| Admin Guide | `project-guides\u002FADMIN-GUIDE.pdf` |\n\n**Note:** Each sub-skill generates a PDF only. All source files (.md, .html, .plain.html) are cleaned up after PDF generation.\n\n---\n\n## ⚠️ CRITICAL PATH REQUIREMENT\n\n**ALL FILES MUST BE SAVED TO `project-guides\u002F` FOLDER:**\n\n```\nproject-guides\u002FAUTHOR-GUIDE.md\nproject-guides\u002FDEVELOPER-GUIDE.md\nproject-guides\u002FADMIN-GUIDE.md\n```\n\n**WHY THIS MATTERS:** Files must be in `project-guides\u002F` for proper organization and PDF conversion.\n\n**BEFORE WRITING ANY FILE:** Run `mkdir -p project-guides` first.\n\n---\n\n## MANDATORY RULES\n\n**STRICTLY FORBIDDEN:**\n- ❌ Do NOT read or analyze `fstab.yaml` — it does NOT exist in most projects and does NOT show all sites\n- ❌ Do NOT create `.plain.html` files\n- ❌ Do NOT use `convert_markdown_to_html` tool\n- ❌ Do NOT tell user to \"convert markdown to PDF manually\"\n- ❌ Do NOT say \"PDF will be generated later\" — each sub-skill generates PDF immediately\n- ❌ Do NOT save markdown to root directory or any path other than `project-guides\u002F`\n\n**REQUIRED:**\n- ✅ Run `mkdir -p project-guides` before writing any files\n- ✅ Each sub-skill MUST save markdown to `project-guides\u002F` folder (EXACT PATH)\n- ✅ Markdown files MUST have `title` and `date` fields in frontmatter\n- ✅ Each sub-skill MUST invoke `project-management:whitepaper` to generate PDF immediately after saving markdown\n- ✅ Each sub-skill MUST cleanup ALL source files (.md, .html, .plain.html) after PDF generation\n- ✅ Final output is `.pdf` files ONLY in `project-guides\u002F` folder\n\n---\n\n## Related Skills\n\nThis skill invokes:\n- `project-management:authoring` - Author\u002Fcontent manager guide (generates PDF immediately)\n- `project-management:development` - Developer technical guide (generates PDF immediately)\n- `project-management:admin` - Admin operations guide (generates PDF immediately)\n- `project-management:whitepaper` - PDF generation (invoked by each sub-skill after saving markdown)\n\n",{"name":5,"license":15,"metadata":24,"description":7,"allowed-tools":26},{"version":25},"1.0.0","Read, Write, Edit, Bash, AskUserQuestion, Skill, Agent","main","b30820b3248f6676d5389f0ccabd4e5250c9c536","skills\u002Fadobe-handover","https:\u002F\u002Fgithub.com\u002Fkalash33\u002Fkstack","https:\u002F\u002Fgithub.com\u002Fkalash33","kalashpoddar.me","Tech-savvy Full Stack Developer 🚀 | Cybersecurity enthusiast 🔒 | Passionate about innovation and securing the digital world 🌐 | Let's code securely! 💻🔐","2026-05-20 04:11:22",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add kalash33\u002Fkstack --skill handover",{"tool":41,"command":42},"bunx","bunx skills add kalash33\u002Fkstack --skill handover",{"tool":44,"command":45},"pnpm","pnpm dlx skills add kalash33\u002Fkstack --skill handover","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkalash33\u002Fkstack\u002Fblob\u002Fmain\u002Fskills\u002Fadobe-handover\u002FSKILL.md",true,[49,55,59],{"path":50,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":53,"sourceHtmlUrl":54},".releaserc.json","REFERENCE","参考文档",49,"https:\u002F\u002Fgithub.com\u002Fkalash33\u002Fkstack\u002Fblob\u002Fmain\u002Fskills\u002Fadobe-handover\u002F.releaserc.json",{"path":56,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":57,"sourceHtmlUrl":58},"CHANGELOG.md",5882,"https:\u002F\u002Fgithub.com\u002Fkalash33\u002Fkstack\u002Fblob\u002Fmain\u002Fskills\u002Fadobe-handover\u002FCHANGELOG.md",{"path":60,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":61,"sourceHtmlUrl":62},"package.json",88,"https:\u002F\u002Fgithub.com\u002Fkalash33\u002Fkstack\u002Fblob\u002Fmain\u002Fskills\u002Fadobe-handover\u002Fpackage.json",[64,72,79,86,93,100],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M73CFERCR43JCAP606E41EFB","zustand-store-ts","Create Zustand stores with TypeScript, subscribeWithSelector middleware, and proper state\u002Faction separation. Use when building React state management, creating global stores, or implementing reacti...","MIT","https:\u002F\u002Fgithub.com\u002Fkalash33\u002Fkstack\u002Fblob\u002Fmain\u002Fskills\u002Fzustand-store-ts\u002FSKILL.md",[],[],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":19},"01M73CFCMFVTAQEMTZ5HR10X8V","zoom-automation","Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fkalash33\u002Fkstack\u002Fblob\u002Fmain\u002Fskills\u002Fzoom-automation\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":19},"01M73CFAA7EBWXJVXDQ1X555MB","zoho-crm-automation","Automate Zoho CRM tasks via Rube MCP (Composio): create\u002Fupdate records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fkalash33\u002Fkstack\u002Fblob\u002Fmain\u002Fskills\u002Fzoho-crm-automation\u002FSKILL.md",[],[],{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":19},"01M73CF80XCM9K81567MJ8QZFW","zod-validation-expert","Expert in Zod — TypeScript-first schema validation. Covers parsing, custom errors, refinements, type inference, and integration with React Hook Form, Next.js, and tRPC.","https:\u002F\u002Fgithub.com\u002Fkalash33\u002Fkstack\u002Fblob\u002Fmain\u002Fskills\u002Fzod-validation-expert\u002FSKILL.md",[],[],{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":19},"01M73CF4YPMF3RA8ZJDXZSMD93","zeroize-audit","Detects missing zeroization of sensitive data in source code and identifies zeroization removed by compiler optimizations, with assembly-level analysis, and control-flow verification. Use for auditing C\u002FC++\u002FRust code handling secrets, keys, passwords, or other sensitive data.","https:\u002F\u002Fgithub.com\u002Fkalash33\u002Fkstack\u002Fblob\u002Fmain\u002Fskills\u002Fzeroize-audit\u002FSKILL.md",[],[],{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":19},"01M73CF2S25EN3XNAMKY47XHPS","zendesk-automation","Automate Zendesk tasks via Rube MCP (Composio): tickets, users, organizations, replies. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fkalash33\u002Fkstack\u002Fblob\u002Fmain\u002Fskills\u002Fzendesk-automation\u002FSKILL.md",[],[]]