Sanity Migration
sanity-io/agent-toolkit
Plans, implements, and reviews migrations from other CMSes and content systems into Sanity.
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…
$ npx skills add adobe/skills --skill ops -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install adobe/skills ops --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/aem/project-management/skills/ops .claude/skills/ops && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ops" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/project-management/skills/ops into .claude/skills/ops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/adobe/skills/tree/main/plugins/aem/project-management/skills/opsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add adobe/skills --skill ops -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install adobe/skills ops --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/aem/project-management/skills/ops .agents/skills/ops && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ops" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/project-management/skills/ops into .agents/skills/ops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add adobe/skills --skill ops -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install adobe/skills ops --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/aem/project-management/skills/ops .cursor/skills/ops && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ops" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/project-management/skills/ops into .cursor/skills/ops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/adobe/skills.git --path plugins/aem/project-management/skills/ops--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add adobe/skills --skill ops -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install adobe/skills ops --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/aem/project-management/skills/ops .gemini/skills/ops && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ops" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/project-management/skills/ops into .gemini/skills/ops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install adobe/skills opsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add adobe/skills --skill ops -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/aem/project-management/skills/ops .github/skills/ops && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ops" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/project-management/skills/ops into .github/skills/ops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add adobe/skills --skill ops -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install adobe/skills ops --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/aem/project-management/skills/ops .opencode/skills/ops && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ops" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/project-management/skills/ops into .opencode/skills/ops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ops", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
opsExecute 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…
Ops is an agent skill from adobe/skills. 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.
Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 29 other files (for example `.releaserc.json`, `CHANGELOG.md` and `README.md`).
It works with Adobe Experience Manager. The repository describes itself as: Adobe Skills for Agents. The licence is Apache-2.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit cbc9952. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadWriteEditBashSkillFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
nodecurlgitFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
main--mysite--myorg.aem.pageadmin.hlx.pageFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
AUTH_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ops loads about 4k tokens when it runs. Until then it costs about 125 tokens; SKILL.md has 1,017 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Read, Write, Edit, Bash, SkillAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from adobe/skills at commit cbc9952, republished under its Apache-2.0 licence (© adobe). 1,017 words, ~3,963 tokens.
.claude/skills/ops/SKILL.md (or your agent's skills folder). This skill also uses 28 other files; get the full folder from GitHub.Execute admin operations on AEM Edge Delivery Services projects using natural language commands.
| 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 |
resources/security.mdIf 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?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.
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 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.
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/sensitive.md before proceeding.
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 || ''));
console.log('REF=' + JSON.stringify(c.ref || 'main'));
} catch(e) {
console.log('ORG='); console.log('SITE='); console.log('REF=main');
}
")
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) {}
")
echo "Config: org=$ORG site=$SITE ref=$REF auth=${AUTH_TOKEN:+set}"Fetch profile to verify auth and record user identity:
PROFILE_RESPONSE=$(curl -s -w "\n%{http_code}" \
-H "x-auth-token: ${AUTH_TOKEN}" \
"https://admin.hlx.page/profile")
HTTP_CODE=$(echo "$PROFILE_RESPONSE" | tail -n1)
PROFILE=$(echo "$PROFILE_RESPONSE" | sed '$d')
if [ "$HTTP_CODE" = "401" ]; then
echo "Auth token expired. Need to re-authenticate..."
echo "REAUTH_REQUIRED"
exit 1
elif [ "$HTTP_CODE" != "200" ]; then
echo "Failed to fetch profile (HTTP $HTTP_CODE). Check network/API status."
exit 1
fi
eval $(echo "$PROFILE" | node -e "
const d = require('fs').readFileSync(0,'utf8');
try {
const p = JSON.parse(d).profile || {};
console.log('USER_EMAIL=' + JSON.stringify(p.email || ''));
console.log('USER_NAME=' + JSON.stringify(p.name || ''));
} catch(e) { console.log('USER_EMAIL=\"\"'); console.log('USER_NAME=\"\"'); }
")
echo "Authenticated as: $USER_EMAIL ($USER_NAME)"If REAUTH_REQUIRED, invoke the auth skill and retry.
To determine user role on the site, check the site access config:
curl -s -H "x-auth-token: ${AUTH_TOKEN}" \
"https://admin.hlx.page/config/${ORG}/sites/${SITE}.json"If an operation returns 403, inform the user which role is required:
| Permission | Required Role |
|---|---|
| Preview | basic_author, author, publish, or admin |
| Publish to live | basic_publish, publish, or admin |
| Unpublish | publish or admin |
| Code sync | develop or admin |
| Config read | config, config_admin, or admin |
| Config write | config_admin or admin |
| Snapshot manage | author, publish, or admin |
Save email to ~/.aem/ops-config.json for future use.
Read resources/config.md if site or other values are missing.
| User Intent | Resource Module |
|---|---|
| preview, publish, unpublish, status, delete preview | resources/content.md |
| cache, purge, clear cache, invalidate | resources/cache.md |
| sync code, deploy code, update code | resources/code.md |
| reindex, index, remove from index, search | resources/index.md |
| sitemap, generate sitemap | resources/sitemap.md |
| snapshot, staged release, bundle | resources/snapshots.md |
| logs, audit, activity | resources/logs.md |
| user, access, permission, who am i, add user, remove user | resources/users.md |
| job, bulk operation, stop job | resources/jobs.md |
| site, branch, switch, list sites | resources/sites.md |
| org config, site config, robots.txt | resources/config-api.md |
| secret, secrets, create secret, delete secret | resources/secrets.md |
| API key, apikey, create key, revoke key | resources/apikeys.md |
| token, tokens, access token | resources/tokens.md |
| profile config, profile settings | resources/profiles.md |
| index config, helix-index, search config | resources/index-config.md |
| sitemap config, helix-sitemap, sitemap rules | resources/sitemap-config.md |
| version, versions, history, rollback, restore | resources/versioning.md |
| pages, list pages, indexed pages, all pages | resources/pages.md |
| da, da list, da source, da copy, da move, da delete, da config, da versions | resources/da.md |
| destructive operation, confirmation required | resources/security.md |
| sensitive endpoint (emails, credentials, API keys) | resources/sensitive.md |
resources/code.md)resources/security.md and follow the Confirmation Protocol — no exceptions (state action, explain impact, ask "yes/no", only execute after "yes")| HTTP Response | Meaning | Required Action |
|---|---|---|
| 200/201 | Success | Display result with full URLs (https://{ref}--{site}--{org}.aem.page{path}) |
| 202 | Async job started | Report job name; instruct: check job status {jobName} to track progress |
| 204 | Success (no body) | Confirm: "{action} completed for {path}" |
| 4xx/5xx | Error | Show API error verbatim, then suggest fix per resources/errors.md |
Before reporting success:
If user provides an AEM URL instead of separate org/site/path values:
# Pattern: https://{ref}--{site}--{org}.aem.page{path}
URL="$USER_INPUT"
if echo "$URL" | grep -q '\.aem\.page\|\.aem\.live'; then
DOMAIN=$(echo "$URL" | cut -d'/' -f3)
HOST_PART=$(echo "$DOMAIN" | cut -d'.' -f1)
REF=$(echo "$HOST_PART" | awk -F'--' '{print $1}')
ORG=$(echo "$HOST_PART" | awk -F'--' '{print $NF}')
SITE=$(echo "$HOST_PART" | awk -F'--' '{
r=""; for(i=2;i<NF;i++) r=(r==""?"":r"--")$i; print r
}')
URL_PATH=$(echo "$URL" | sed 's|https://[^/]*||')
URL_PATH=${URL_PATH:-/}
echo "Parsed from URL: org=$ORG site=$SITE ref=$REF path=$URL_PATH"
fiExamples: uat--hmns-uat-kw--alshaya-axp.aem.page → ref=uat, site=hmns-uat-kw, org=alshaya-axp.
access.admin.role). Eight roles: admin, author, publish, develop, basic_author, basic_publish, config, config_admin. If the user lacks a role, the API returns 403.When the user wants the command list (triggers: help, what can you do?, /ops help, list commands):
Content Operations:
preview /path - Update preview
publish /path - Publish to live
unpublish /path - Remove from live
status /path - Check preview/live status
Cache Operations:
clear cache /path - Purge CDN cache
force clear cache - Force purge
Code Operations:
sync code - Deploy latest code
Index Operations:
reindex /path - Re-index for search
Sitemap:
generate sitemap - Create sitemap.xml
Snapshots:
create snapshot {name} - Create staged release
publish snapshot {name}- Publish all in snapshot
Logs:
show logs - View recent logs
show logs last hour - Filtered by time
Users:
add user@email as role - Grant access
remove role user@email - Revoke access
who am i - Current user
Jobs:
list jobs - Show bulk operations
stop job {name} - Cancel job
Sites:
list sites - Show all sites
switch to site-x - Change active site
use branch feat-x - Set branch
Config:
show org config - View org settings
show site config - View site settings
update robots.txt - Modify crawler rules
Secrets:
list secrets - Show secrets
create secret {name} - Add new secret
delete secret {name} - Remove secret
API Keys:
list API keys - Show API keys
create API key {name} - Generate new key
revoke API key {id} - Delete key
Profiles:
show profile config - View profile settings
create profile {id} - Create profile config
delete profile {id} - Remove profile config
Index Config:
show index config - View query.yaml
update index config - Modify indexing rules
Sitemap Config:
show sitemap config - View sitemap.yaml
update sitemap config - Modify sitemap rules
Versioning:
list versions - Show config history
restore version {id} - Rollback to version
Pages:
list pages - Show all indexed pages
list pages /blog - Filter by path prefix
Document Authoring (DA):
da auth - Authenticate with DA
da list - List DA organizations
da list /path - List files in DA path
da source /path - Get file content from DA
da copy /src to /dest - Copy file/folder in DA
da move /src to /dest - Move/rename in DA
da delete /path - Delete from DA
da upload /path - Upload content to DA
da upload media /path - Upload image/media to DA
da config - View DA site config
da update config - Update DA site config
da versions /path - List file versions
da create version - Create labeled version snapshot
da restore version X - Restore a previous version
da preview /path - Preview DA content
da publish /path - Publish DA content© adobe, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 28 other files in plugins/aem/project-management/skills/ops of adobe/skills.
Open the folder on GitHubat commit cbc9952
Ops next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Ops this skilladobe/skills | 195 | — | ~4k | Automated safety check: Notes | Apache-2.0 | |
| Sanity Migrationsanity-io/agent-toolkit | 187 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Content Management Systemsgithub/awesome-copilot | 40k | 1 repos | ~1.3k | Automated safety check: Pass | MIT | |
| App Builder UI ScaffolderNeverSight/learn-skills.dev | 216 | 1 repos | ~2.2k | Automated safety check: Pass | Apache-2.0 | |
| Authoring Analysismajiayu000/claude-skill-registry | 666 | 2 repos | ~3.1k | Automated safety check: Pass | MIT | |
| Block Inventorymajiayu000/claude-skill-registry | 666 | 1 repos | ~2.1k | Automated safety check: Pass | MIT |
sanity-io/agent-toolkit
Plans, implements, and reviews migrations from other CMSes and content systems into Sanity.
github/awesome-copilot
Workflow for building and modifying content management systems across WordPress, Shopify, Wix, Squarespace, Drupal, WooCommerce, Joomla, HubSpot CMS Hub, Webflow, Adobe Experience Manager, and…
NeverSight/learn-skills.dev
Generates React Spectrum UI code for Adobe Experience Cloud Shell apps and AEM UI Extensions from annotated patterns.
majiayu000/claude-skill-registry
Analyze content sequences and determine authoring approach (default content vs blocks).
majiayu000/claude-skill-registry
Survey available blocks from local AEM Edge Delivery Services project and Block Collection to understand the block palette available for authoring.
majiayu000/claude-skill-registry
Identify section boundaries and content sequences within a scraped webpage for AEM Edge Delivery Services import.
adobe/skills
Scaffolds, implements, deploys and debugs Adobe Runtime actions in App Builder projects, with templates for webhooks, events, database CRUD, sequences and Asset Compute workers.
adobe/skills
Launches Chrome with an unpacked extension over CDP, opens its sidepanel, popup or options page, and hands over to cdp-connect for clicks, typing and screenshots.
adobe/skills
Extracts icons, metadata, text, forms, videos and social links from any web page with playwright-cli, with SVG icon classification and cleanup.
adobe/skills
Detect all languages used on a webpage — both declared (html@lang, hreflang alternate links, nested lang= attributes, meta content-language) and actually present in the body text (Google CLD3 via…
adobe/skills
Prepare any webpage for clean interaction by detecting and removing disruptive overlays (cookie banners, GDPR consent, modals, popups, newsletter signups, paywalls, login walls).
adobe/skills
Reduce a webpage to a structural skeleton with semantic tokens.
Works with
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…. Ops is an agent skill from adobe/skills. 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.
Ops fits situations like: any Edge Delivery Services administrative task.
Run `npx skills add adobe/skills --skill ops -a claude-code`. Or copy the skill folder (plugins/aem/project-management/skills/ops in adobe/skills) into .claude/skills/ops in your project. Claude Code loads it when a task matches its description.
Run `npx skills add adobe/skills --skill ops -a codex`. Or copy the skill folder (plugins/aem/project-management/skills/ops in adobe/skills) into .agents/skills/ops in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add adobe/skills --skill ops -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ops, .gemini/skills/ops, .github/skills/ops and .opencode/skills/ops in your project.
Going by SKILL.md and its folder, Ops needs the command-line tools its instructions call (node, curl and git) and credentials named AUTH_TOKEN. Our summary lists: A credential in AUTH_TOKEN. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash, Skill.
SKILL.md names 2 domains. In commands or code: main--mysite--myorg.aem.page and admin.hlx.page; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Ops is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Ops: Sanity Migration (sanity-io/agent-toolkit, 187 stars), Content Management Systems (github/awesome-copilot, 40k stars), App Builder UI Scaffolder (NeverSight/learn-skills.dev, 216 stars) and Authoring Analysis (majiayu000/claude-skill-registry, 666 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
adobe (a GitHub organization) maintains it in adobe/skills, which has 195 GitHub stars. The repository holds 105 skills in this directory. The repository was last updated on October 6, 2026.
Source: adobe/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.