adobe/skills

handover

Generate project handover documentation for AEM Edge Delivery Services projects.

Ver código-fonte

Como usar

  1. Copie o comando e verifique o pacote antes de instalar no seu ambiente de agente.
  2. Consulte no original as ferramentas, credenciais e ambientes necessários.
  3. Descreva os dados de entrada e a entrega esperada; confira a saída com as fontes.
npx skills add https://github.com/adobe/skills --skill handover

Antes de começar

  • A instalação não inclui assinatura de modelo, franquia API ou acesso aos seus arquivos.
  • Estrelas e instalações indicam atividade, não um teste independente de qualidade ou segurança.
Documento original do Skill

Renderizado do repositório de origem, preservando títulos, exemplos, código, tabelas, links e imagens.

Project Handover Documentation

Generate comprehensive handover documentation for Edge Delivery Services projects. Orchestrates the creation of guides for different audiences.

Available Documentation Types

GuideAudienceSkill
Authoring GuideContent authors and content managershandover-author
Developer GuideDevelopers and technical teamhandover-developer
Admin GuideSite administrators and operationshandover-admin

Execution Flow

Step 0: Navigate to Project Root (MANDATORY)

bash
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/.


Step 0.5: Clean Up Stale Config

bash
rm -f .claude-plugin/project-config.json

Step 1: Ask User for Documentation Type

Use AskUserQuestion with exactly these 4 options:

json
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
  }]
})

Step 1.5: Get Organization Name

After the user selects guide type(s), ensure the organization name is available before invoking any sub-skills.

1.5.1 Check for Saved Organization

bash
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) {}
"

1.5.2 Resolve Site Name from Git

bash
SITE=$(basename -s .git $(git remote get-url origin 2>/dev/null) 2>/dev/null)
echo "site=${SITE:-NOT SET}"

1.5.3 Prompt for Organization Name (If Not Saved)

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:

bash
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"
fi

1.5.4 Save Organization Name

bash
mkdir -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.json

Replace {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.

Step 1.6: Authenticate

Check for a valid auth token:

bash
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."
fi

If 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.

Step 1.7: Validate Organization Name

After authentication, verify the org name:

bash
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.

Step 2: Invoke Appropriate Skill(s)

SelectionAction
AllInvoke all three skills in parallel (see Step 3)
Authoring GuideSkill({ skill: "aem-project-management:handover-author" })
Developer GuideSkill({ skill: "aem-project-management:handover-developer" })
Admin GuideSkill({ skill: "aem-project-management:handover-admin" })

For single-guide selections, invoke the skill directly from the main conversation (not via Agent) so permission prompts reach the user.

Step 3: For "All" Selection — Parallel Execution

Provide immediate feedback before starting:

"Starting parallel generation of all 3 handover guides:
  Authoring Guide - analyzing blocks, templates, configurations...
  Developer Guide - analyzing code, patterns, architecture...
  Admin Guide - analyzing deployment, security, operations..."

Launch all three agents simultaneously in a single message (foreground mode). Do NOT use run_in_background: true. Tell each agent to read the sub-skill SKILL.md and follow its instructions directly — do NOT tell agents to invoke the Skill tool.

javascript
Agent({
  description: "Generate authoring guide",
  prompt: "You are generating an authoring guide for an AEM Edge Delivery Services project at {PROJECT_ROOT}. Read the skill instructions at {PLUGIN_ROOT}/skills/handover-author/SKILL.md and follow them to generate the guide. The project config is at .claude-plugin/project-config.json (org, allGuides are already set — skip Phase 0 and authentication). Auth token is at ~/.aem/ims-token.json. Start from Phase 1. For PDF conversion, read {PLUGIN_ROOT}/skills/whitepaper/SKILL.md and follow its instructions. Do NOT use the Skill tool — execute all steps directly with Bash, Read, and Write tools."
})

Agent({
  description: "Generate developer guide",
  prompt: "You are generating a developer guide for an AEM Edge Delivery Services project at {PROJECT_ROOT}. Read the skill instructions at {PLUGIN_ROOT}/skills/handover-developer/SKILL.md and follow them to generate the guide. The project config is at .claude-plugin/project-config.json (org, allGuides are already set — skip Phase 0 and authentication). Auth token is at ~/.aem/ims-token.json. Start from Phase 1. For PDF conversion, read {PLUGIN_ROOT}/skills/whitepaper/SKILL.md and follow its instructions. Do NOT use the Skill tool — execute all steps directly with Bash, Read, and Write tools."
})

Agent({
  description: "Generate admin guide",
  prompt: "You are generating an admin guide for an AEM Edge Delivery Services project at {PROJECT_ROOT}. Read the skill instructions at {PLUGIN_ROOT}/skills/handover-admin/SKILL.md and follow them to generate the guide. The project config is at .claude-plugin/project-config.json (org, allGuides are already set — skip Phase 0 and authentication). Auth token is at ~/.aem/ims-token.json. Start from Phase 1. For PDF conversion, read {PLUGIN_ROOT}/skills/whitepaper/SKILL.md and follow its instructions. Do NOT use the Skill tool — execute all steps directly with Bash, Read, and Write tools."
})

Replace {PROJECT_ROOT} with the actual project root path (output of git rev-parse --show-toplevel).

Determine {PLUGIN_ROOT} with:

bash
PLUGIN_ROOT=$([ -d ".claude/plugins/aem-project-management" ] && echo ".claude/plugins/aem-project-management" || echo "$CLAUDE_PLUGIN_ROOT")

When all three complete, report the final summary:

"Handover documentation complete:

project-guides/
├── AUTHOR-GUIDE.pdf
├── DEVELOPER-GUIDE.pdf
└── ADMIN-GUIDE.pdf

All PDFs generated. Source files cleaned up."

Output Files

SelectionOutput Files
Allproject-guides/AUTHOR-GUIDE.pdf, project-guides/DEVELOPER-GUIDE.pdf, project-guides/ADMIN-GUIDE.pdf
Authoring Guideproject-guides/AUTHOR-GUIDE.pdf
Developer Guideproject-guides/DEVELOPER-GUIDE.pdf
Admin Guideproject-guides/ADMIN-GUIDE.pdf

Each sub-skill generates a PDF immediately after completing the guide. All source files (.md, .html, .plain.html) are cleaned up after PDF generation.


Related Skills

  • aem-project-management:handover-author — Author/content manager guide
  • aem-project-management:handover-developer — Developer technical guide
  • aem-project-management:handover-admin — Admin operations guide
  • aem-project-management:whitepaper — PDF generation (invoked by each sub-skill)

Relacionados por tarefa

do mesmo repositório

Mais Skills

Todos os Skills
adobe
Comunidade

adobe-edit-quick-cut

Create a punchy highlight cut from a video with Adobe Quick Cut — for requests like "make a sizzle reel", "make a highlight reel", "quick cut this", "cut the best parts", "shorten this video", "make a highlight clip", or "summarize this video visually". Works from the user's original request without follow-up questions and produces one highlight cut. Do NOT use it for exact-timestamp trims ("cut from 0:30 to 1:15") or other deterministic edits — Quick Cut selects moments by relevance, not exact

Instalações / 1h
1
GitHub Stars
306
Atualizado
24 de out.
adobe
Comunidade

appbuilder-project-init

Initialize an Adobe App Builder project end-to-end and prepare the machine to build one. Creates the Console project and workspace, subscribes APIs (including those needing a product profile), maps intent to the right template, runs non-interactive aio app init, and guides post-init customization. Use whenever the user mentions creating an App Builder app, scaffolding a project, aio app init, an Experience Cloud extension, adding actions or web assets, or creating a Console project/workspace — e

Instalações / 1h
2
GitHub Stars
268
Atualizado
20 de out.
adobe
Comunidade

commerce-app-admin-ui

Add or modify Adobe Commerce Admin UI extensions on the commerce/backend-ui/2 extension point: custom grid columns, mass actions, order view buttons, a custom Admin menu entry, and custom ACL resources. Use whenever the user wants to extend the Commerce Admin — add a column to the order, product, or customer grid, add a bulk/mass action to a grid, add a button to the order view page, add a custom menu item or page, or declare custom permissions the app checks itself — even when they don't name t

Instalações / 1h
2
GitHub Stars
268
Atualizado
20 de out.
adobe
Comunidade

commerce-app-business-config

Manage custom business configuration in an Adobe Commerce app. Use when the user wants to add, modify, or remove merchant-configurable settings (config fields, admin config, store configuration) exposed through Commerce Admin. Creates typed config fields (text, password, email, url, tel, boolean, list) in businessConfig.schema. Requires a base app initialized with commerce-app-init.

Instalações / 1h
2
GitHub Stars
268
Atualizado
20 de out.