XLSX
zzhonglei/GeoCode-Release
Create, edit, analyze, or convert Excel spreadsheets (.xlsx, .xlsm) where the workbook file is the primary deliverable.
Audit and update metadata across multiple AEM Edge Delivery Services pages.
$ npx skills add adobe/skills --skill bulk-metadata -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install adobe/skills bulk-metadata --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/edge-delivery-services-content-ops/skills/bulk-metadata .claude/skills/bulk-metadata && 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 "bulk-metadata" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/bulk-metadata into .claude/skills/bulk-metadata/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bulk-metadata", 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/edge-delivery-services-content-ops/skills/bulk-metadataType 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 bulk-metadata -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install adobe/skills bulk-metadata --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/edge-delivery-services-content-ops/skills/bulk-metadata .agents/skills/bulk-metadata && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "bulk-metadata" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/bulk-metadata into .agents/skills/bulk-metadata/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bulk-metadata", 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 bulk-metadata -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install adobe/skills bulk-metadata --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/edge-delivery-services-content-ops/skills/bulk-metadata .cursor/skills/bulk-metadata && 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 "bulk-metadata" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/bulk-metadata into .cursor/skills/bulk-metadata/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bulk-metadata", 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/edge-delivery-services-content-ops/skills/bulk-metadata--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 bulk-metadata -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install adobe/skills bulk-metadata --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/edge-delivery-services-content-ops/skills/bulk-metadata .gemini/skills/bulk-metadata && 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 "bulk-metadata" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/bulk-metadata into .gemini/skills/bulk-metadata/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bulk-metadata", 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 bulk-metadataInstalls 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 bulk-metadata -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/edge-delivery-services-content-ops/skills/bulk-metadata .github/skills/bulk-metadata && 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 "bulk-metadata" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/bulk-metadata into .github/skills/bulk-metadata/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bulk-metadata", 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 bulk-metadata -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 bulk-metadata --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/edge-delivery-services-content-ops/skills/bulk-metadata .opencode/skills/bulk-metadata && 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 "bulk-metadata" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/bulk-metadata into .opencode/skills/bulk-metadata/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bulk-metadata", 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.
bulk-metadataAudit and update metadata across multiple AEM Edge Delivery Services pages.
Bulk Metadata is an agent skill from adobe/skills. Audit and update metadata across multiple AEM Edge Delivery Services pages. Scans pages via the query index, identifies missing or inconsistent metadata (titles, descriptions, og tags, robots), and generates a corrected bulk metadata spreadsheet. Use when standardizing metadata across a site, preparing for launch, or fixing SEO issues at scale.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `.releaserc.json`, `CHANGELOG.md` and `package.json`).
It sits in Documents & Office, covering Excel spreadsheets. It works with Adobe Experience Manager, Google Sheets and Microsoft Excel. The repository describes itself as: Adobe Skills for Agents. The licence is Apache-2.0.
7 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 nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Bulk Metadata loads about 3.3k tokens when it runs. Until then it costs about 90 tokens; SKILL.md has 1,797 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 found no risky patterns in SKILL.md.
Automated 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,797 words, ~3,303 tokens.
.claude/skills/bulk-metadata/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Audit metadata across an entire AEM Edge Delivery Services site using the query index, identify gaps and inconsistencies, and produce a corrected bulk metadata spreadsheet ready to paste into Google Sheets or Excel.
This skill fetches external web pages and JSON endpoints for analysis. When fetching:
EDS metadata is managed at three levels, with a clear precedence order:
<meta> tags in the page <head>. Page-level always wins.metadata.xlsx (or metadata Google Sheet) placed in a subdirectory. Applies to all pages in that folder and below.metadata.xlsx (or metadata Google Sheet) in the site root. Uses URL pattern matching to set defaults across the entire site.Precedence: page > folder > bulk. Bulk metadata sets defaults; page-level metadata always overrides.
The bulk metadata spreadsheet uses URL patterns in the first column:
/** — matches all pages site-wide (deepest wildcard)/blog/** — matches all pages under /blog/ at any depth/blog/* — matches only direct children of /blog/ (one level)/about — matches a single specific pageThe spreadsheet is evaluated top-to-bottom. Put broad patterns first, specific overrides later.
noindex robots directives to draft or staging content.Before starting, create a checklist of all steps to track progress:
Fetch the site's query index to get a listing of all indexed pages:
https://<branch>--<repo>--<owner>.aem.live/query-index.json?limit=1000If the user provides a production URL instead, derive the AEM URL or ask for the owner, repo, and branch values.
The query index returns an object with a data array. Each entry contains:
path — the page path (e.g., /blog/my-post)title — the page title from metadatadescription — the page description from metadataimage — the page's OG image pathlastModified — Unix timestamp of last modificationThere may also be custom properties defined in the site's helix-query.yaml configuration.
If the index returns exactly the limit number of results, warn the user that there may be more pages. Suggest increasing the limit or paginating with the offset parameter.
If the query index returns a 404 (no helix-query.yaml configured), use this fallback chain:
https://<branch>--<repo>--<owner>.aem.live/sitemap.xml. Parse <url><loc> entries to build a page list.For each page returned by the query index, check:
/ or be a full URL.robots meta tag. Most published pages should not have noindex — flag any production page with noindex as a critical issue./drafts/ or test paths should have noindex if they appear in the query index.For a deeper audit, optionally fetch individual pages' HTML to check their full <meta> tags (og:title, og:description, robots, canonical). Only do this if the user requests a deep audit or the site has fewer than 50 pages.
If a bulk metadata spreadsheet already exists, fetch it:
https://<branch>--<repo>--<owner>.aem.live/metadata.jsonThis returns the spreadsheet as JSON with a data array. Each entry has properties matching the spreadsheet column headers (URL, Title, Description, Image, etc.).
If this returns a 404, there is no bulk metadata spreadsheet yet — note this and proceed.
If it exists, analyze the current rules:
Present a summary table of all pages with their metadata status:
| # | Path | Title | Title Len | Title OK? | Description | Desc Len | Desc OK? | Image | Issues |
|---|---|---|---|---|---|---|---|---|---|
| 1 | /about | About Us | 8 | Short | Our company... | 142 | OK | /media/hero.jpg | Title too short |
| 2 | /blog/post-1 | — | Missing | — | Missing | No title, no description, no image |
Produce a metadata spreadsheet table that the user can paste directly into a Google Sheet or Excel file. This is the corrected/improved version of the bulk metadata.
Format:
| URL | Title | Description | Image | Robots | Template |
|---|---|---|---|---|---|
| /** | [site default title suffix] | [site default description] | [default og:image path] | ||
| /blog/** | /media/blog-default.jpg | article | |||
| /drafts/** | noindex | ||||
| /events/* | /media/events-hero.jpg | event |
/**) go first. These set the baseline defaults."" (empty string) to explicitly clear a value inherited from a broader pattern if needed.Robots value, omit that column.* (single path level) and ** (deep path).Based on the audit findings:
/blog/**, /products/**) and set section-level defaults.noindex rules for draft, staging, or test content paths.Tell the user exactly how to implement the bulk metadata spreadsheet:
nav and footer documents), create a new Google Sheet named metadata.After publishing, verify the metadata is applied:
https://<branch>--<repo>--<owner>.aem.live/metadata.json and confirm your rules appear.<meta> tags in the page source.| Problem | Cause | Solution |
|---|---|---|
| Query index returns empty or 404 | Site may not have a query index configured, or the URL is wrong | Verify the owner, repo, and branch values; check that helix-query.yaml exists in the repo |
| Metadata changes not appearing on pages | Page-level metadata is overriding bulk metadata | This is expected behavior — page-level always wins |
| Metadata.json returns 404 | No bulk metadata spreadsheet exists yet | This is fine — the user will create one using the generated spreadsheet |
| Patterns not matching expected pages | Pattern syntax may be wrong | Use /** for deep paths, /* for single-level; patterns must start with / |
| Spreadsheet changes not taking effect | Spreadsheet may not be published | Open Sidekick on the spreadsheet and click Publish |
| Too many pages in the index | Query index has a default limit | Use ?limit=1000 or paginate with ?offset=1000&limit=1000 |
© 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 3 other files in plugins/aem/edge-delivery-services-content-ops/skills/bulk-metadata of adobe/skills.
Open the folder on GitHubat commit cbc9952
Bulk Metadata 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 |
|---|---|---|---|---|---|---|
| Bulk Metadata this skilladobe/skills | 195 | — | ~3.3k | Automated safety check: Pass | Apache-2.0 | |
| XLSXzzhonglei/GeoCode-Release | 186 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Spreadsheet Agentmastra-ai/mastra | 29k | — | ~2.1k | Automated safety check: Pass | Custom licence | |
| Sheets Artifactasgeirtj/system_prompts_leaks | 69k | — | ~1.2k | Automated safety check: Pass | CC0-1.0 | |
| XLSXflonat/flonat-research | 145 | — | ~2.7k | Automated safety check: Pass | Proprietary | |
| Spreadsheet Formula Helpercomposio-community/awesome-codex-skills | 17k | — | ~328 | Automated safety check: Pass | None |
zzhonglei/GeoCode-Release
Create, edit, analyze, or convert Excel spreadsheets (.xlsx, .xlsm) where the workbook file is the primary deliverable.
mastra-ai/mastra
Authoring playbook for building agents that read or write tabular data — Google Sheets, Microsoft Excel, CSV, Airtable, Notion databases, or any spreadsheet.
asgeirtj/system_prompts_leaks
A skill your agent uses when creating, editing, or inspecting a spreadsheet or workbook (Excel, Google Sheets, or CSV), or when the task calls for a reusable budget, model, tracker, or structured…
flonat/flonat-research
Create, read, edit, clean, format, chart, or convert spreadsheet files while preserving spreadsheet-native deliverables.
composio-community/awesome-codex-skills
Write and debug spreadsheet formulas (Excel/Google Sheets), pivot tables, and array formulas; translate between dialects; use when users need working formulas with examples and edge-case checks.
yaklang/hack-skills
CSV/spreadsheet formula injection (DDE, Excel/LibreOffice, Google Sheets 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.
Categories
Audit and update metadata across multiple AEM Edge Delivery Services pages. Bulk Metadata is an agent skill from adobe/skills. Audit and update metadata across multiple AEM Edge Delivery Services pages.
Bulk Metadata fits situations like: standardizing metadata across a site; preparing for launch; fixing SEO issues at scale.
Run `npx skills add adobe/skills --skill bulk-metadata -a claude-code`. Or copy the skill folder (plugins/aem/edge-delivery-services-content-ops/skills/bulk-metadata in adobe/skills) into .claude/skills/bulk-metadata in your project. Claude Code loads it when a task matches its description.
Run `npx skills add adobe/skills --skill bulk-metadata -a codex`. Or copy the skill folder (plugins/aem/edge-delivery-services-content-ops/skills/bulk-metadata in adobe/skills) into .agents/skills/bulk-metadata 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 bulk-metadata -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bulk-metadata, .gemini/skills/bulk-metadata, .github/skills/bulk-metadata and .opencode/skills/bulk-metadata in your project.
SKILL.md names no scripts, command-line tools or credentials: Bulk Metadata is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Bulk Metadata 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 3.3k tokens (SKILL.md is roughly 13k 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 Bulk Metadata: XLSX (zzhonglei/GeoCode-Release, 186 stars), Spreadsheet Agent (mastra-ai/mastra, 29k stars), Sheets Artifact (asgeirtj/system_prompts_leaks, 69k stars) and XLSX (flonat/flonat-research, 145 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.