/ops
Execute AEM Edge Delivery Services admin operations - list admins, add/remove users, preview, publish, unpublish content, clear cache, sync code, reindex, generate sitemap, manage snapshots, view logs, manage jobs, list sites, configure org/site settings, manage secrets and API
$ npx -y skills add adobe/skills --skill ops --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/ops
Context preview
The summary Claude sees to decide when to auto-load this skill.
Execute AEM Edge Delivery Services admin operations - list admins, add/remove users, preview, publish, unpublish content, clear cache, sync code, reindex, generate sitemap, manage snapshots, view logs, manage jobs, list sites, configure org/site settings, manage secrets and API
SKILL.md
ops.SKILL.mdname: ops
description: Execute AEM Edge Delivery Services admin operations - list admins, add/remove users, preview, publish, unpublish content, clear cache, sync code, reindex, generate sitemap, manage snapshots, view logs, manage jobs, list sites, configure org/site settings, manage secrets and API keys. Also supports Document Authoring (DA) operations via admin.da.live - list/get/put content, copy, move, delete, versioning, and DA-specific preview/publish. Use for any Edge Delivery Services administrative task.
license: Apache-2.0
allowed-tools: Read, Write, Edit, Bash, Skill
metadata:
version: "1.0.0"
Edge Delivery Services Admin Operations
Execute admin operations on AEM Edge Delivery Services projects using natural language commands.
Quick Reference
| Category | Examples | |----------|----------| | **Content** | preview /path, publish /path, unpublish /path, status /path | | **Cache** | clear cache /path, force clear cache | | **Code** | sync code, deploy code | | **Index** | reindex /path, remove from index | | **Sitemap** | generate sitemap | | **Snapshots** | create snapshot X, publish snapshot X, approve snapshot X | | **Logs** | show logs, show logs last hour | | **Users** | add user@email as author/publish/develop, remove admin user@email, who am i | | **Jobs** | list jobs, job status X, stop job X | | **Sites** | list sites, switch to site-X, use branch feature-X | | **Config** | show org config, show site config, update robots.txt | | **Secrets** | list secrets, create secret, delete secret | | **API Keys** | list API keys, create API key, revoke API key | | **Tokens** | list tokens, create token, revoke token | | **Profiles** | show profile config, create profile, delete profile | | **Index Config** | show index config, update index config (query.yaml) | | **Sitemap Config** | show sitemap config, update sitemap config (sitemap.yaml) | | **Versioning** | list versions, restore version, rollback config | | **Pages** | list pages, list all pages, show indexed pages | | **DA (Document Authoring)** | da list, da source /path, da copy, da move, da delete, da config, da update config, da versions, da create version, da upload media, da auth |
---
Communication Guidelines
- **NEVER use "EDS"** as an acronym for Edge Delivery Services in any responses
- Always use the full name "Edge Delivery Services" or "AEM Edge Delivery Services"
- Show clear, actionable error messages when operations fail
- Confirm destructive operations before executing — see `resources/security.md`
---
Welcome Message
If the user invokes the skill without a specific command (e.g., just `/ops` or "help me with ops"), show:
Edge Delivery Services Operations
Quick commands to try:
list pages - Show all indexed pages
who am i - Check your user profile
list sites - Show available sites
show site config - View site configuration
preview /path - Preview a content path
show logs - View recent activity
For the full command list: type help, /ops help, or what can you do?
---
Cross-Platform Notes
Shell commands use POSIX-compatible syntax (works on macOS/Linux). On Windows, Git Bash or WSL works as-is. The agent should adapt syntax to the user's environment.
---
Intent Router
Step 0: Get Organization and Site (REQUIRED FIRST)
Check `~/.aem/ops-config.json` for previously stored org and site:
eval $(node -e "
const fs = require('fs');
try {
const c = JSON.parse(fs.readFileSync(process.env.HOME + '/.aem/ops-config.json', 'utf8'));
console.log('ORG=' + JSON.stringify(c.org || ''));
console.log('SITE=' + JSON.stringify(c.site || ''));
} catch(e) {
console.log('ORG='); console.log('SITE=');
}
")
echo "org=${ORG:-NOT SET} site=${SITE:-NOT SET}"If both `ORG` and `SITE` are set, confirm with the user:
> "Previously used: org=`{ORG}`, site=`{SITE}`. Do you want to continue with these? If not, provide a different site URL (e.g., `https://main--mysite--myorg.aem.page/`)."
- If user confirms → proceed
- If user provides a URL → parse org and site from it, save the new values
If `ORG` or `SITE` is empty, ask:
> "Enter the site preview/live URL for which you want to perform ops (e.g., `https://main--mysite--myorg.aem.page/`)."
Parse org and site from the URL:
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}')
SITE=$(echo "$HOST_PART" | awk -F'--' '{print $(NF-1)}')
echo "Parsed from URL: org=$ORG site=$SITE"
fiIf the user provides something other than a valid `.aem.page` or `.aem.live` URL, ask again.
Save org and site:
mkdir -p "${HOME}/.aem"
node -e "
const fs = require('fs');
const p = process.env.HOME + '/.aem/ops-config.json';
let c = {};
try { c = JSON.parse(fs.readFileSync(p, 'utf8')); } catch(e) {}
c.org = '${ORG}';
c.site = '${SITE}';
fs.writeFileSync(p, JSON.stringify(c, null, 2));
"Only use org/site from `~/.aem/ops-config.json` or direct user input. Never infer from `git remote`, `fstab.yaml`, or folder/repo names.
Do NOT proceed until both org and site are confirmed.
Step 1: Authenticate (REQUIRED)
Before ANY API call, check if auth token exists:
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) {}
")
echo "auth=${AUTH_TOKEN:+set}"If `AUTH_TOKEN` is empty, invoke the auth skill before proceeding:
Skill({ skill: "aem-project-management:auth" })Use `-H "x-auth-token: ${AUTH_TOKEN}"` header for all `admin.hlx.page` API calls.
For sensitive endpoints and destructive operations, read `resources/security.md` and `resources/sens
Read more
name: ops description: Execute AEM Edge Delivery Services admin operations - list admins, add/remove users, preview, publish, unpublish content, clear cache, sync code, reindex, generate sitemap, manage snapshots, view logs, manage jobs, list sites, configure org/site settings, manage secrets and API keys. Also supports Document Authoring (DA) operations via admin.da.live - list/get/put content, copy, move, delete, versioning, and DA-specific preview/publish. Use for any Edge Delivery Services administrative task. license: Apache-2.0 allowed-tools: Read, Write, Edit, Bash, Skill metadata: version: "1.0.0"
Edge Delivery Services Admin Operations
Execute admin operations on AEM Edge Delivery Services projects using natural language commands.
Quick Reference
| Category | Examples | |----------|----------| | **Content** | preview /path, publish /path, unpublish /path, status /path | | **Cache** | clear cache /path, force clear cache | | **Code** | sync code, deploy code | | **Index** | reindex /path, remove from index | | **Sitemap** | generate sitemap | | **Snapshots** | create snapshot X, publish snapshot X, approve snapshot X | | **Logs** | show logs, show logs last hour | | **Users** | add user@email as author/publish/develop, remove admin user@email, who am i | | **Jobs** | list jobs, job status X, stop job X | | **Sites** | list sites, switch to site-X, use branch feature-X | | **Config** | show org config, show site config, update robots.txt | | **Secrets** | list secrets, create secret, delete secret | | **API Keys** | list API keys, create API key, revoke API key | | **Tokens** | list tokens, create token, revoke token | | **Profiles** | show profile config, create profile, delete profile | | **Index Config** | show index config, update index config (query.yaml) | | **Sitemap Config** | show sitemap config, update sitemap config (sitemap.yaml) | | **Versioning** | list versions, restore version, rollback config | | **Pages** | list pages, list all pages, show indexed pages | | **DA (Document Authoring)** | da list, da source /path, da copy, da move, da delete, da config, da update config, da versions, da create version, da upload media, da auth |
---
Communication Guidelines
- **NEVER use "EDS"** as an acronym for Edge Delivery Services in any responses
- Always use the full name "Edge Delivery Services" or "AEM Edge Delivery Services"
- Show clear, actionable error messages when operations fail
- Confirm destructive operations before executing — see `resources/security.md`
---
Welcome Message
If the user invokes the skill without a specific command (e.g., just `/ops` or "help me with ops"), show:
Edge Delivery Services Operations Quick commands to try: list pages - Show all indexed pages who am i - Check your user profile list sites - Show available sites show site config - View site configuration preview /path - Preview a content path show logs - View recent activity For the full command list: type help, /ops help, or what can you do?
---
Cross-Platform Notes
Shell commands use POSIX-compatible syntax (works on macOS/Linux). On Windows, Git Bash or WSL works as-is. The agent should adapt syntax to the user's environment.
---
Intent Router
Step 0: Get Organization and Site (REQUIRED FIRST)
Check `~/.aem/ops-config.json` for previously stored org and site:
eval $(node -e "
const fs = require('fs');
try {
const c = JSON.parse(fs.readFileSync(process.env.HOME + '/.aem/ops-config.json', 'utf8'));
console.log('ORG=' + JSON.stringify(c.org || ''));
console.log('SITE=' + JSON.stringify(c.site || ''));
} catch(e) {
console.log('ORG='); console.log('SITE=');
}
")
echo "org=${ORG:-NOT SET} site=${SITE:-NOT SET}"If both `ORG` and `SITE` are set, confirm with the user:
> "Previously used: org=`{ORG}`, site=`{SITE}`. Do you want to continue with these? If not, provide a different site URL (e.g., `https://main--mysite--myorg.aem.page/`)."
- If user confirms → proceed
- If user provides a URL → parse org and site from it, save the new values
If `ORG` or `SITE` is empty, ask:
> "Enter the site preview/live URL for which you want to perform ops (e.g., `https://main--mysite--myorg.aem.page/`)."
Parse org and site from the URL:
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}')
SITE=$(echo "$HOST_PART" | awk -F'--' '{print $(NF-1)}')
echo "Parsed from URL: org=$ORG site=$SITE"
fiIf the user provides something other than a valid `.aem.page` or `.aem.live` URL, ask again.
Save org and site:
mkdir -p "${HOME}/.aem"
node -e "
const fs = require('fs');
const p = process.env.HOME + '/.aem/ops-config.json';
let c = {};
try { c = JSON.parse(fs.readFileSync(p, 'utf8')); } catch(e) {}
c.org = '${ORG}';
c.site = '${SITE}';
fs.writeFileSync(p, JSON.stringify(c, null, 2));
"Only use org/site from `~/.aem/ops-config.json` or direct user input. Never infer from `git remote`, `fstab.yaml`, or folder/repo names.
Do NOT proceed until both org and site are confirmed.
Step 1: Authenticate (REQUIRED)
Before ANY API call, check if auth token exists:
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) {}
")
echo "auth=${AUTH_TOKEN:+set}"If `AUTH_TOKEN` is empty, invoke the auth skill before proceeding:
Skill({ skill: "aem-project-management:auth" })Use `-H "x-auth-token: ${AUTH_TOKEN}"` header for all `admin.hlx.page` API calls.
For sensitive endpoints and destructive operations, read `resources/security.md` and `resources/sens
Repo: adobe/skills
Other skills on adobe-skills.
- /aa-conversion-funnel-analysis
Analyzes a multi-step conversion funnel to find where visitors drop off and which steps have the worst leakage. Use this skill when someone describes a journey and asks about conversion rates, drop-off, fallout, or step completion. Trigger for "analyze our checkout funnel,"
Open skill - /aa-executive-briefing
Generates a concise, executive-ready performance summary covering key metrics, trends, and what's driving movement. Use this skill when someone needs to produce a briefing, executive summary, performance narrative, or stakeholder readout — for example, "write an exec summary of
Open skill - /aa-kpi-pulse
Produces a compact KPI digest showing how key metrics changed over a period and what's driving the movement. Use this skill when someone asks for a performance summary, a weekly recap, a morning briefing, a KPI update, or any variation of "how did we do this week/month." Also
Open skill - /aa-segment-performance-comparator
Compares the performance of two or more audience segments across key metrics side by side. Use this skill when someone wants to compare audiences or visitor groups — for example, "how do mobile visitors compare to desktop on conversion," "compare new vs. returning visitors,"
Open skill - /aa-top-movers-watchlist
Identifies which items (pages, campaigns, products, channels, regions) had the biggest increases or decreases for a key metric between two time periods. Use this skill when someone asks "what's up and what's down," "which campaigns moved the most," "top gainers and losers,"
Open skill - /cja-dimension-analysis
Comprehensive dimension analysis and reporting for CJA. Use this skill whenever the user wants to analyze one or more dimensions — including cardinality, distribution/skew, trends, anomalies, data quality errors, comparisons, and forecasting. Also trigger when someone asks "what
Open skill

