All AEM as a Cloud Service skills: component development, Workflow model design, development, triggering, launchers, debugging, and triaging, Dispatcher config authoring, advisory, incident response, performance tuning, and security hardening, Rapid Development Environment (RDE) deployment, log inspection, snapshots, and troubleshooting via `aio aem rde`, Jackrabbit Oak query/index tuning (property, Lucene index definitions), and extracting/inventorying JCR queries (XPath, SQL2, QueryBuilder) across a codebase.
85%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
aio aem rde install can shipaio aem rde install accepts a single artifact, of one of eight types, deployed to one or both AEM instances. This file catalogues each type, when to use it, and the gotchas.
The full list (also available in aio aem rde install --help):
osgi-bundle | osgi-config | content-package | content-file | content-xml |
dispatcher-config | frontend | env-configWhen --type is omitted, the plugin guesses. See the table in commands.md for guess rules. The rest of this file goes deeper on each type.
osgi-bundleA standard OSGi .jar.
**/target/*.jar from a Maven OSGi-bundle module.--target author or --target publish.aio aem rde delete <bsn> removes it.aio aem rde inspect osgi-bundles (if enabled) to confirm Active state.Pitfalls:
Installed/Resolved. Check the failed update via history <id> and look at the bundle in inspect osgi-bundles.@Activate work that is fragile to refresh, native libs, etc.). Day-to-day bundle iteration is hot-reloadable.osgi-configJSON-formatted OSGi configuration consumed via Configuration Admin. Filename becomes the config PID — there's no separate --path flag.
*.json matching the OSGi config naming convention (e.g. com.example.MyService.json or com.example.MyFactory~instance.json)..json. aio aem rde delete <pid> removes it.Pitfalls:
aio aem rde inspect osgi-configurations to verify.content-packageA "regular" AEM content package zip with jcr_root/ and META-INF/vault/.
*.zip produced by content-package-maven-plugin / FileVault.jcr_root/ entry.--target author lets you push author-only packages.Pitfalls:
--restart if they replace OSGi bundles bundled inside the package.restore if it breaks state.deploy completed but JCR content never lands. Symptom is silent — bundles in the same deploy still apply, only the content-package extraction is a no-op. Verify by hitting /content/<site>.json (404) or by looking for LoginException … RDEProviderRepositoryAccess.handleContentPackages in aio aem rde logs -e "". See troubleshooting.md → "Content-package install reports success but JCR content never appears" for the workaround OSGi config.content-fileA single binary content file deployed under a specific JCR path. Requires --path.
--path: the full JCR path the file should land at, e.g. /content/dam/example/foo.png.…/jcr_root/…, the plugin derives --path from the substring after jcr_root/.Pitfalls:
--path and without a jcr_root/ ancestor, the install throws MISSING_CONTENT_PATH.--target author.content-xmlA single FileVault XML descriptor (*.xml, often .content.xml). Same --path semantics as content-file.
.content.xml, the auto-guessed path strips the .content.xml suffix (the file describes its parent node)..xml.Pitfalls:
dispatcher-configApache HTTPD + Dispatcher configuration tree. Shipped as a directory or zip; the directory form is built into a zip on the fly via dispatcherInputBuild.
conf.dispatcher.d/, or a zip with the same.conf.dispatcher.d/.publish makes sense for a dispatcher config — but install defaults to "both". The dispatcher tier handles it correctly; ignore the author "deploy" message unless something looks off.Pitfalls:
aio aem rde inspect request-logs (if enabled) is a good way to verify rules are matching as expected.frontendA frontend bundle for AEM's client-side asset pipeline.
package.json and a built dist/ folder, or a zip with the same.dist/ and package.json.frontendInputBuild zips the directory before upload.Pitfalls:
node_modules — frontendInputBuild zips the whole tree it's given. Build first, then point install at the build output's parent.env-configCloud Manager environment-level config (variables, secrets references, log forwarding, etc.) packaged as YAML.
*.yaml, or a zip with *.yaml entries..yaml.configInputBuild zips the directory before upload.Pitfalls:
--target)| Type | Sensible default | Notes |
|---|---|---|
osgi-bundle | both | Bundle target depends on the code. |
osgi-config | both | Same. |
content-package | both, or author | Mostly author, but query indexes may need both. |
content-file | both, or author | Author for editorial content. |
content-xml | as above | |
dispatcher-config | both (plugin handles it) | Logically publish-only. |
frontend | both | |
env-config | both | Targeting flag is accepted but env-config is global to the env. |
The plugin throws INVALID_GUESS_TYPE when it can't narrow the choice to one. Fix by passing --type explicitly. Common cases:
--type.--type and --path if it's content-file/content-xml..zip that fits multiple shapes (e.g. a content package that also has a stray dist/ folder) — pass --type.For URLs:
computeStats).For local files:
file:// prefix is stripped automatically.realpathSync resolves symlinks.For directories:
frontend, dispatcher-config, env-config. The plugin packages them inline. Other types throw a clear error..tessl-plugin
skills
aem-rde
aem-workflow
code-assessment
content-distribution
create-component
assets
references
dispatcher
incident-response
references
dispatcher-foundation
performance-tuning
references
dispatcher-foundation
security-hardening
references
dispatcher-foundation
technical-advisory
references
dispatcher-foundation
workflow-orchestrator
references
dispatcher-foundation
ensure-agents-md
references
migration
references
dispatcher
legacy-ui
template-modernization
validation
scripts
dispatcher-tool
validate-migration