aa-conversion-funnel-a…
Analyzes a multi-step conversion funnel to find where visitors drop off and which steps have…
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".
$ npx -y skills add adobe/skills --skill handover --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/handoverContext preview
The summary Claude sees to decide when to auto-load this skill.
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".
name: handover description: 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". license: Apache-2.0 allowed-tools: Read, Write, Edit, Bash, AskUserQuestion, Skill, Agent metadata: version: "1.1.0"
Generate comprehensive handover documentation for Edge Delivery Services projects. Orchestrates the creation of guides for different audiences.
| Guide | Audience | Skill | |-------|----------|-------| | **Authoring Guide** | Content authors and content managers | `handover-author` | | **Developer Guide** | Developers and technical team | `handover-developer` | | **Admin Guide** | Site administrators and operations | `handover-admin` |
---
cd "$(git rev-parse --show-toplevel)" ls scripts/aem.js
If `scripts/aem.js` does not exist, tell the user this skill requires an AEM Edge Delivery Services project and stop.
All subsequent steps operate from project root. Guides are created at `project-guides/`.
---
rm -f .claude-plugin/project-config.json
---
Use `AskUserQuestion` with exactly these 4 options:
AskUserQuestion({
"questions": [{
"question": "Which type of handover documentation would you like me to generate?",
"header": "Guide Type",
"options": [
{"label": "All (Recommended)", "description": "Generate all three guides: Authoring, Developer, and Admin"},
{"label": "Authoring Guide", "description": "For content authors and managers - blocks, templates, publishing"},
{"label": "Developer Guide", "description": "For developers - codebase, implementations, design tokens"},
{"label": "Admin Guide", "description": "For site administrators - permissions, API operations, cache"}
],
"multiSelect": false
}]
})After the user selects guide type(s), ensure the organization name is available before invoking any sub-skills.
cat .claude-plugin/project-config.json 2>/dev/null | node -e "
const d = require('fs').readFileSync(0,'utf8');
try { const o = JSON.parse(d).org; if(o) console.log('org: ' + o); } catch(e) {}
"SITE=$(basename -s .git $(git remote get-url origin 2>/dev/null) 2>/dev/null)
echo "site=${SITE:-NOT SET}"If no org name is saved, ask the user:
> "What is your Config Service organization name? This is the `{org}` part of your Edge Delivery Services URLs (e.g., `https://main--site--{org}.aem.page`). The org name may differ from your GitHub organization. > > You can provide either the org name or a preview/live URL."
Ask as a plain text question — not `AskUserQuestion` with options. Organization name is mandatory.
If the user provides a URL, parse org from it:
URL="$USER_INPUT"
if echo "$URL" | grep -q '\.aem\.page\|\.aem\.live'; then
HOST_PART=$(echo "$URL" | cut -d'/' -f3 | cut -d'.' -f1)
ORG=$(echo "$HOST_PART" | awk -F'--' '{print $NF}')
echo "Parsed from URL: org=$ORG"
fimkdir -p .claude-plugin
grep -qxF '.claude-plugin/' .gitignore 2>/dev/null || echo '.claude-plugin/' >> .gitignore
# Include allGuides flag only when "All (Recommended)" was selected
echo '{"org": "{ORG_NAME}"}' > .claude-plugin/project-config.json
# OR for "All (Recommended)":
echo '{"org": "{ORG_NAME}", "allGuides": true}' > .claude-plugin/project-config.jsonReplace `{ORG_NAME}` with the actual organization name. Include `"allGuides": true` only when user selected "All (Recommended)" — this signals sub-skills to skip step 0 validation.
Check for a valid auth token:
AUTH_TOKEN=$(node -e "
const fs = require('fs');
try {
const t = JSON.parse(fs.readFileSync(process.env.HOME + '/.aem/ims-token.json', 'utf8'));
if (t.authToken && t.authTokenExpiry > Math.floor(Date.now()/1000) + 60) {
process.stdout.write(t.authToken);
}
} catch (e) {}
")
if [ -n "$AUTH_TOKEN" ]; then
echo "Token valid"
else
echo "Token missing or expired."
fiIf no valid token, invoke the auth skill:
Skill({ skill: "aem-project-management:auth" })Authenticating here means all sub-skills running in parallel can use the saved token without each prompting for login separately.
After authentication, verify the org name:
AUTH_TOKEN=$(node -e "
const fs = require('fs');
try {
const t = JSON.parse(fs.readFileSync(process.env.HOME + '/.aem/ims-token.json', 'utf8'));
process.stdout.write(t.authToken || '');
} catch (e) {}
")
ORG=$(cat .claude-plugin/project-config.json | node -e "
const d = require('fs').readFileSync(0,'utf8');
process.stdout.write(JSON.parse(d).org || '');
")
curl -s -w "\nHTTP: %{http_code}" -H "x-auth-token: ${AUTH_TOKEN}" \
"https://admin.hlx.page/config/${ORG}/sites.json"If HTTP 200: org is valid, proceed to Step 2.
If non-200: tell the user the org name appears incorrect and ask for the correct one. Update `.claude-plugin/project-config.json` and retry until HTTP 200.
| Selection | Action | |-----------|--------| | **All** | Invoke all three skills in parallel (see Step 3) | | **Authoring Guide** | `Skill({ skill: "aem-project-management:handover-author" })` | | **Developer Guide** | `Skill({ skill: "aem-project-management:handover-developer" })` | | **Admin Guide** | `Skill({ skill: "aem-project-management:handover-admin" })` |
For single-guide selections, i
Repo: adobe/skills
Analyzes a multi-step conversion funnel to find where visitors drop off and which steps have…
Generates a concise, executive-ready performance summary covering key metrics, trends, and…
Produces a compact KPI digest showing how key metrics changed over a period and what's…
Compares the performance of two or more audience segments across key metrics side by side.…
Identifies which items (pages, campaigns, products, channels, regions) had the biggest…
Comprehensive dimension analysis and reporting for CJA. Use this skill whenever the user…