code-assessment
Detects and fixes code-quality issues in AEM as a Cloud Service Java projects using local static analysis.
Identity proven by GitHub's verified organisation badge (adobe)
- Agents
- Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode
- License
- Apache-2.0 (permissive)
- Pin
- 940b879pinned Oct 9, 2026
- Context cost
- about 2,600 tokenswhen the skill loads
- GitHub stars
- 197on adobe/skills
- Scripts
- 24 scripts
What it does
“Detect, review, and fix code-quality and correctness issues in an AEM as a Cloud Service project — locally, with no external services or network calls. Use whenever a user wants to check, review, assess, audit, scan, modernize, upgrade, or fix AEM Java, Sling Models, OSGi, or Maven code — for example: "check my Sling Models are implemented correctly", "review my @Inject usage", "are my Maven dependencies up to date", "scan this AEM project for issues", "modernize my Sling Models", or "fix code-quality problems". Name the files to assess, or ask it to scan the repo; it detects issues, plans, and — only when you ask — applies surgical edits on a branch or in place, then verifies with mvn compile. It recognises the intent and handles each issue type itself, reporting anything it cannot yet fix.”
Generated summary from the skill's own text
Detects and fixes code-quality issues in AEM as a Cloud Service Java projects using local static analysis. The skill runs deterministic detectors on workspace files to find problems with Sling Models, OSGi, Maven dependencies, and deprecated APIs, then applies surgical edits with mvn verification. All analysis is local; no external services or network calls are used.
When to use it
- User requests code review, audit, or scan of AEM project or specific files
- Modernize Sling Models, fix @Inject usage, or update Maven dependencies
- Check for unbounded queries, missing HTTP timeouts, or deprecated APIs
- Assess overall code health or compliance with AEM Cloud Service patterns
When not to
- User needs runtime diagnostics or live AEM instance telemetry
- Requires network access to Maven Central or external registries
- Large batch fixes across many files are better handled in resumable checkpoints
Install
These commands install from the publisher's repository and need no account.
skills CLI
npx skills add adobe/skills --skill code-assessmentInstalls from the repository's default branch, which may have changed since the commit we checked.
GitHub CLI 2.90 or later
gh skill install adobe/skills code-assessment@940b8795c0df3e25de68ce3881dc90855129b215Installs the commit we checked (940b879).
Copy by hand
Download the folder at 940b879 and put it in .claude/skills/code-assessment for Claude Code and in .agents/skills/code-assessment for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode.
Claude Code plugin
/plugin install adobe-for-creativity@claude-plugins-officialThe publisher's plugin in Claude's official marketplace. It may hold more than this skill, and we have not pinned it.
Copy for your agent
A prompt for any coding agent. It installs this skill from GitHub at the pinned commit, copies the files as they are, and runs nothing unless you ask.
Prompt
Install the agent skill "code-assessment" by Adobe, Inc.. Source, pinned to commit 940b8795c0df3e25de68ce3881dc90855129b215: https://github.com/adobe/skills/tree/940b8795c0df3e25de68ce3881dc90855129b215/plugins/aem/cloud-service/skills/code-assessment 1. Download that folder at exactly this commit. Do not use the default branch. 2. Copy every file unchanged, keeping the folder structure, into .claude/skills/code-assessment/ for Claude Code and .agents/skills/code-assessment/ for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode. Create the folders if they do not exist. 3. Do not edit the files, and do not run any script in the folder unless I ask you to. 4. When you are done, list the files you copied and where you put them. Listing and checks: https://www.agentnative.dev/skills/adobe-inc/code-assessment
SKILL.md at the pin
---
name: code-assessment
description: |
Detect, review, and fix code-quality and correctness issues in an AEM as a Cloud Service
project — locally, with no external services or network calls. Use whenever a user wants to
check, review, assess, audit, scan, modernize, upgrade, or fix AEM Java, Sling Models, OSGi,
or Maven code — for example: "check my Sling Models are implemented correctly", "review my
@Inject usage", "are my Maven dependencies up to date", "scan this AEM project for issues",
"modernize my Sling Models", or "fix code-quality problems". Name the files to assess, or ask
it to scan the repo; it detects issues, plans, and — only when you ask — applies surgical
edits on a branch or in place, then verifies with mvn compile. It recognises the intent and
handles each issue type itself, reporting anything it cannot yet fix.
license: Apache-2.0
---
# AEM as a Cloud Service — Code Assessment
Single skill for detecting and fixing AEM CS code-quality issues, **entirely against the local workspace** — no external services or network calls. Findings reach the runbook from one of two sources; everything downstream is identical.
## Findings sources
| Source | When | Target versions (deps) |
|---|---|---|
| **User-named** | the user names files or coordinates | user-supplied |
| **Discover** | the user asks to scan, or names no files | user-supplied (per the pattern's resolution contract) |
Discovery runs through the deterministic **analyzer** ([`scripts/analyze.sh`](scripts/README.md)):
it parses the workspace once and runs the enabled detectors, emitting the shared findings shape.
Every `ready` pattern has an analyzer detector. One detector — `remove-deprecated-api` — loads
its rules dynamically from a preflight-produced cache
([`remove-deprecated-api/scripts/detect.sh`](remove-deprecated-api/scripts/detect.sh) runs the
AEM Analyser Maven Plugin and writes the cache TSV before the analyzer is invoked); the
detector's shape and integration are otherwise identical. Patterns without a detector are
`planned` only — not yet detectable and not yet built; there is **no LLM-scan fallback** in this
version (see Scope & limitations) — the `scan` value on `planned` rows in
[`references/patterns.md`](references/patterns.md) marks the intended future detection method,
not an active code path.
## Routing
1. **User named files / coordinates** → run the runbook in `with_findings` mode against those paths.
2. **"Scan my repo" / no files named** → run the runbook in `discover` mode (per-pattern Discovery, workspace roots only).
Then follow the runbook: [`references/runbook.md`](references/runbook.md).
## Manual Pattern Hints (classification → expert skill)
Route the request to one expert skill. Two pattern families share this skill:
**Mechanical fixes** (analyzer-driven detection, deterministic edits — follow the runbook flow):
| User said / saw | Expert skill |
|---|---|
| "update aem sdk", "upgrade mockito", stale `<version>` or `${property}` in pom | [`outdated-dependencies/`](outdated-dependencies/SKILL.md) |
| "fix @Inject", "modernize Sling Models", `javax.inject.Inject` on `@Model` fields | [`inject-in-sling-model/`](inject-in-sling-model/SKILL.md) |
| "add HTTP timeouts", "outbound/external call has no timeout", `HttpClient` / `HttpClients` / `OkHttpClient` built without a timeout | [`outbound-call-timeouts/`](outbound-call-timeouts/SKILL.md) |
| "bound my query", "unbounded query", "query causing OOM", `p.limit=-1`, `setLimit(-1)` | [`unbounded-query/`](unbounded-query/SKILL.md) |
| "query is slow", "traversal warning", "is my query indexed", "tune oak index", index coverage of a JCR/Oak query | [`tuning-oak-query-indexes/`](tuning-oak-query-indexes/SKILL.md) |
| "remove deprecated API", "fix deprecated imports", "Cloud Manager deprecated API failure", `region-deprecated-api` / `api-regions-check` / `Import-Package not satisfied` pipeline failures, log4j migration, commons-lang/collections upgrades, deprecated Maven deps, unmodifiable OSGi configs | [`remove-deprecated-api/`](remove-deprecated-api/SKILL.md) _(analyzer detector with dynamic rules — preflight runs `aemanalyser-maven-plugin`; hint-driven fixes; see recipe.md)_ |
**Architectural migration patterns** (guided remediation — full before/after, troubleshooting, modern alternatives; invoked directly or via `migration` for BPA/CAM-driven discovery):
| User said / saw | Expert skill | BPA pattern ID |
|---|---|---|
| `org.apache.sling.commons.scheduler.Scheduler` or `scheduler.schedule(` with `Runnable` | [`scheduler/`](scheduler/SKILL.md) | `scheduler` |
| `implements ResourceChangeListener`, lightweight listener + JobConsumer | [`resource-change-listener/`](resource-change-listener/SKILL.md) | `resourceChangeListener` |
| `com.day.cq.replication.Replicator`, `org.apache.sling.replication.*`, "publish/preview activation" | [`replication/`](replication/SKILL.md) | `replication` |
| `javax.jcr.observation.EventListener`, `org.osgi.service.event.EventHandler` on non-resource topics (replication, workflow, custom) | [`event-migration/`](event-migration/SKILL.md) | `eventListener` / `eventHandler` |
| `com.day.cq.dam.api.AssetManager` create/upload/delete APIs, `createAssetForBinary`, `removeAssetForBinary` | [`asset-manager/`](asset-manager/SKILL.md) | `assetApi` |
| HTL build warning `data-sly-test: redundant constant value comparison` | [`references/data-sly-test-redundant-constant.md`](references/data-sly-test-redundant-constant.md) | `htlLint` (reference, no expert skill subdirectory) |
**Broad / correctness-review asks** ("check my Sling Models are implemented correctly", "review my code", "is my AEM project healthy", "assess this project") are not a single pattern: run the runbook in `discover` mode with intent `report` — the analyzer runs every detector and the report covers all built patterns, explicitly noting aspects not yet supported. Only narrow to one pattern when the user targets a specific fix.
If nothing matches, say the issue is not yet supported and offer to file a request for a new expert skill.
**Full catalog** (built + `planned` patterns, with severity / detection / fix): [`references/patterns.md`](references/patterns.md).
## Invocation from the `migration` skill
`migration` performs BPA/CAM/MCP discovery and handles batching + one-pattern-per-session workflow. After it has identified `(pattern, file)` pairs from BPA findings, it hands off here for the actual transformation. When invoked with `(pattern, file)` from `migration`:
- **Skip** HA/analyzer discovery (caller already identified the pattern + file)
- Open the pattern's expert skill directly (per the Manual Pattern Hints table above)
- Apply the steps in the expert skill against the named file(s)
- Return the result; `migration` continues with the next finding in its batch
The pattern guides themselves are agnostic about who invoked them — they apply identically whether reached from `migration` (BPA/CAM) or from the runbook in this skill (HA / analyzer).
## Runbook
All detection, planning, edits, verification, git/in-place handling, and the run log live in
[`references/runbook.md`](references/runbook.md). The runbook is the **sole owner** of repo-environment
detection (`edit_mode`, git snapshot) — this control plane does not duplicate it.
## One pattern per session
Report may span every pattern found; **apply touches one pattern per session** (atomic revert,
single-story diff). Refuse "fix everything" for the apply phase. Rationale:
[`references/shared-principles.md`](references/shared-principles.md#one-pattern-per-session).
## Critical rules
- **Local only** — no network calls or external services; operate solely on the workspace.
**Documented exception:** `remove-deprecated-api` is plugin-driven and needs Maven Central
(to resolve `aemanalyser-maven-plugin` and, transitively, the AEM SDK's api-regions data) plus
optionally Adobe Experience League as a fallback source for successor guidance. If offline,
that one pattern is skipped with a clear message; all other patterns remain local-only.
- **Requires a local JDK** (Java 11+) for detection — the analyzer compiles/runs in memory; no
install beyond the JDK, no network. If absent, detection stops with a clear message.
- **The analyzer is detection — never substitute external tooling.** Do not run
`mvn versions:display-dependency-updates` / `mvn versions:display-property-updates`,
`npm outdated`, or Maven Central / registry lookups in place of analyzer discovery. Those answer
"what is the latest on the network" — outside this skill's local-only contract. If the user
explicitly wants a live registry comparison, say it needs network and offer it as a separate step
**after** delivering the skill report. `remove-deprecated-api`'s preflight
(`remove-deprecated-api/scripts/detect.sh`) is the one documented exception: it invokes the AEM
Analyser Maven Plugin against the project to populate its rules cache, then hands off to the
shared analyzer.
- **Never commit, push, or open a PR** — branch (git) or in-place edits only; the developer reviews and commits.
- **Surgical edits** — no reformatting / re-serialization.
- **Skip with a reason** — record un-applicable findings as `skipped` with an exact reason; never silently drop.
- **One pattern per session** for apply.
Full rationale: [`references/shared-principles.md`](references/shared-principles.md).
## Scope & limitations
Local static detection and remediation only — no external services, no network, no live AEM instance. Issues that require runtime or live-repository state, telemetry, or history across runs are out of scope for this skill.
Detection requires a local JDK (Java 11+); there is no remote or LLM-scan fallback in this version.
A large apply (e.g. an `@Inject` migration across 100+ files) is processed in **resumable batches**: the run checkpoints each file to `.autofix/last-run.json` and pauses at a per-pass cap, so it survives context limits — reply **apply `<pattern>`** to continue (see [`references/git-workflow.md`](references/git-workflow.md)).
## Adding a new pattern
Full end-to-end procedure — detector → fixtures/tests → catalog + routing → expert skill → verify:
**[`references/adding-a-pattern.md`](references/adding-a-pattern.md)**. The `[wiring]` test keeps the
detector, catalog row, and expert-skill directory in sync.
**Triggering scales without touching the description.** The `description` above is intentionally
broad (intent verbs + AEM domain), so it already fires on "check / review / fix my <AEM thing>";
a new pattern is reached by its **Manual Pattern Hints + `patterns.md` rows**, not by editing the
description. Update the description **only** if the new pattern introduces a domain keyword it does
not already cover (a new subsystem or file type). The `[wiring]` test keeps the detector, catalog
row, and expert-skill directory in sync.
## Related skills
- **`migration`** — drives BPA/CAM/MCP-based legacy-AEM migration workflow. Discovers findings, batches them, enforces one-pattern-per-session, and hands off `(pattern, file)` pairs to this skill for transformation. See the "Invocation from the `migration` skill" section above.
From adobe/skills at 940b879, shown as plain text under its license: Apache-2.0 (permissive). The license text is in plugins/aem/cloud-service/skills/code-assessment/SKILL.md.
View SKILL.md on GitHub at 940b879Files
- SKILL.md11 KB · 0e13e4e0c07a
- README.md1.0 KB · 8aa6a1af682a
- references/
- _template.md3.5 KB · e26e0e92f779
- adding-a-pattern.md7.7 KB · 2610cd679443
- aem-cloud-service-pattern-prerequisites.md1.0 KB · 5fb7802aaca2
- data-sly-test-redundant-constant.md11 KB · 700d1f673a77
- git-workflow.md13 KB · 1b58d4f0d52b
- patterns.md5.6 KB · cf8914d126cc
- resource-resolver-logging.md6.8 KB · 5db990aad688
- runbook.md20 KB · 2724440f1d5c
- scr-to-osgi-ds.md5.5 KB · 22b20c6f0a26
- shared-principles.md3.9 KB · b4ba1c0afb2a
- troubleshooting.md2.5 KB · b770af3934f3
- scripts/
- README.md4.3 KB · d2eacbcb430d
- analyze.sh1.4 KB · 49898bdf3808
- analyzer/
- Analyze.java10 KB · 94c2de30312a
- Corpus.java549 B · 2709f244fb69
- Detector.java412 B · e3980c103407
- Finding.java748 B · 1c1ea483bfe4
- JavaUnit.java1.8 KB · 98fee34756d7
- OsgiUnit.java1.2 KB · 461d1de1b5ae
- PomUnit.java2.2 KB · df0d14a2f638
- Registry.java1.1 KB · 29d0f3815942
- detectors/
- AssetManager.java2.5 KB · 5f013f4b4b9c
- EventMigration.java2.2 KB · 14c389475438
- InjectInSlingModel.java1.8 KB · 15182882cab4
- OakQueryIndexCoverage.java5.0 KB · ce7bede55505
- OutboundCallTimeouts.java7.8 KB · 8045f6b5a855
- OutdatedDependencies.java2.4 KB · f074474b4a94
- RemoveDeprecatedApi.java5.7 KB · 183f961991e1
- Replication.java1.4 KB · 69a359fd1373
- ResourceChangeListener.java2.1 KB · 1787d0f19a93
- Scheduler.java6.2 KB · 3ee1aedb6a9e
- UnboundedQuery.java6.3 KB · 933ad9011609
- util/
- Annotations.java1.2 KB · e276b0e0726f
- Poms.java1.6 KB · 214a060389c0
- Types.java2.7 KB · 41ad63cfcf9e
37 files, 165 KB in total. Each file has a sha256 in the pin's manifest; the first 12 characters are shown.
Skill folder on GitHub at 940b879More from Adobe, Inc.
adobe
This skill provides an onboarding tour of the Adobe for creativity connector, displaying available capabilities, example workflows, and which Adobe product…
Claude Code, Codex, Cursor +4 · about 2.2K tokens · pinned 6 days ago
adobe-anydocx
This skill routes DOCX conversion tasks that have a PDF source to Adobe's pdf_export tool with the appropriate format setting.
Claude Code, Codex, Cursor +4 · about 680 tokens · pinned 6 days ago
adobe-anyexcel
This skill routes PDF-to-Excel conversion tasks to the Adobe pdf_export tool with xlsx target format.
Claude Code, Codex, Cursor +4 · about 690 tokens · pinned 6 days ago
adobe-anypdf
This skill routes PDF tasks to Adobe Acrobat tools for higher fidelity than local Python libraries.
Claude Code, Codex, Cursor +4 · about 2.1K tokens · pinned 6 days ago
adobe-anypptx
This skill routes PowerPoint conversion tasks that have a PDF source to Adobe's pdf_export tool with PPTX output format.
Claude Code, Codex, Cursor +4 · about 670 tokens · pinned 6 days ago
adobe-batch-edit-photos
This skill applies consistent visual adjustments to a set of photos so they appear edited together as a cohesive collection.
Claude Code · about 9.9K tokens · pinned 6 days ago
Related in Coding workflow
planning
This skill orchestrates multi-workflow projects with dependencies and shared data tables by creating a task graph in the orchestrator via the create-tasks tool.
by n8nOfficial publisher
Claude Code, Codex, Cursor +3 · about 2.4K tokens · pinned 6 days ago
progressive-building
This skill implements incremental workflow development for agents building or extending workflows.
by n8nOfficial publisher
Claude Code, Codex, Cursor +3 · about 1.4K tokens · pinned 6 days ago
workflow-builder
Builds and edits n8n workflows using the TypeScript SDK.
by n8nOfficial publisher
Claude Code, Codex, Cursor +3 · about 14.2K tokens · pinned 6 days ago
remotion-upgrade
This skill upgrades Remotion and its related packages to the latest stable version.
by RemotionOfficial publisher
Claude Code, Codex, Cursor +3 · about 460 tokens · pinned 6 days ago
remotion-upgrade
This skill upgrades Remotion and related packages across a project, automatically detecting the package manager and workspaces.
by RemotionOfficial publisher
Claude Code, Codex, Cursor +3 · about 460 tokens · pinned 6 days ago
final-release-review
Audits Python SDK release candidates or plans against the previous release, comparing diffs for regressions, API changes, and version compatibility.
by OpenAIOfficial publisher
Contains scripts
Claude Code, Codex, Cursor +3 · about 5.4K tokens · pinned 6 days ago