/inject-in-sling-model
AEM Cloud Service expert skill — migrate javax.inject.@Inject fields in Sling Model (@Model) classes to injector-specific annotations (@ValueMapValue / @OSGiService / @SlingObject). Self-discoverable (scan for @Model classes with field-level @Inject); the replacement is chosen
$ npx -y skills add adobe/skills --skill inject-in-sling-model --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
/inject-in-sling-model
Context preview
The summary Claude sees to decide when to auto-load this skill.
AEM Cloud Service expert skill — migrate javax.inject.@Inject fields in Sling Model (@Model) classes to injector-specific annotations (@ValueMapValue / @OSGiService / @SlingObject). Self-discoverable (scan for @Model classes with field-level @Inject); the replacement is chosen
SKILL.md
inject-in-sling-model.SKILL.mdname: inject-in-sling-model
description: |
AEM Cloud Service expert skill — migrate javax.inject.@Inject fields in Sling Model (@Model) classes to injector-specific annotations (@ValueMapValue / @OSGiService / @SlingObject). Self-discoverable (scan for @Model classes with field-level @Inject); the replacement is chosen deterministically from each field's declared type. Use for "fix @Inject in HeroModel.java", "modernize my Sling Models", or when scanning an AEM project for @Inject misuse. Detailed decision table, companion-annotation handling, import management, and file-level skip policy are in recipe.md.
license: Apache-2.0
@Inject in Sling Models — AEM as a Cloud Service
> This pattern is executed by the code-assessment runbook — follow [`../references/runbook.md`](../references/runbook.md) for the full flow (preflight → plan → apply → verify, run log). This skill supplies the detection + recipe the runbook applies.
Overview
`javax.inject.@Inject` on fields of `@Model` classes is discouraged by the Apache Sling Models documentation. Removing `@Inject` without a replacement breaks injection, so each field is migrated to an injector-specific annotation chosen from its declared type.
Classification — confirm this pattern applies
- A `*.java` file whose class is annotated `@Model`, with at least one **field** annotated `@Inject`.
- Constructor-parameter and setter-method `@Inject` are out of scope (trigger the file-level skip).
Discovery
Detection is performed by the analyzer ([`../scripts/analyze.sh`](../scripts/README.md)), run by the runbook:
bash ../scripts/analyze.sh <workspace-root> --pattern inject-in-sling-model
**Match criteria (what the detector flags):** a class annotated `@Model` (`org.apache.sling.models.annotations.Model`, confirmed import-aware) with at least one **field** annotated `@Inject` (`javax.inject.Inject` or `jakarta.inject.Inject`). One finding per matching field. Constructor/setter `@Inject` and non-`@Model` classes are not flagged. The replacement annotation is chosen from the field's declared type by the decision table in `recipe.md`.
Resolution contract
**self-evident** — the replacement annotation is fully determined by the field's declared Java type via the decision table in `recipe.md`. No external input is required.
Review checklist
- [ ] Each migrated field maps to exactly one injector-specific annotation per the decision table
- [ ] Sling objects (`Resource` / `ResourceResolver` / request / response) → `@SlingObject`, **not** `@Self`
- [ ] `@Named` merged into the new annotation's `name`; `@Default` / `@Via` preserved
- [ ] `@Optional` → per-field `injectionStrategy = InjectionStrategy.OPTIONAL` (**never** a class-level `defaultInjectionStrategy` change)
- [ ] Unused imports removed; new imports added and ordered per the file's convention
- [ ] File-level skip respected — no partial migration of a file with any ambiguous field
Recipe
Read [`recipe.md`](recipe.md) in full before editing: input contract, decision table, companion annotations, import management, unlocatable / skip-file policy, per-file procedure, before/after example, editing strategy.
Handoff
The skill never commits. See [`../references/git-workflow.md`](../references/git-workflow.md) for git vs in-place handoff and the suggested commit message.
Read more
name: inject-in-sling-model description: | AEM Cloud Service expert skill — migrate javax.inject.@Inject fields in Sling Model (@Model) classes to injector-specific annotations (@ValueMapValue / @OSGiService / @SlingObject). Self-discoverable (scan for @Model classes with field-level @Inject); the replacement is chosen deterministically from each field's declared type. Use for "fix @Inject in HeroModel.java", "modernize my Sling Models", or when scanning an AEM project for @Inject misuse. Detailed decision table, companion-annotation handling, import management, and file-level skip policy are in recipe.md. license: Apache-2.0
@Inject in Sling Models — AEM as a Cloud Service
> This pattern is executed by the code-assessment runbook — follow [`../references/runbook.md`](../references/runbook.md) for the full flow (preflight → plan → apply → verify, run log). This skill supplies the detection + recipe the runbook applies.
Overview
`javax.inject.@Inject` on fields of `@Model` classes is discouraged by the Apache Sling Models documentation. Removing `@Inject` without a replacement breaks injection, so each field is migrated to an injector-specific annotation chosen from its declared type.
Classification — confirm this pattern applies
- A `*.java` file whose class is annotated `@Model`, with at least one **field** annotated `@Inject`.
- Constructor-parameter and setter-method `@Inject` are out of scope (trigger the file-level skip).
Discovery
Detection is performed by the analyzer ([`../scripts/analyze.sh`](../scripts/README.md)), run by the runbook:
bash ../scripts/analyze.sh <workspace-root> --pattern inject-in-sling-model
**Match criteria (what the detector flags):** a class annotated `@Model` (`org.apache.sling.models.annotations.Model`, confirmed import-aware) with at least one **field** annotated `@Inject` (`javax.inject.Inject` or `jakarta.inject.Inject`). One finding per matching field. Constructor/setter `@Inject` and non-`@Model` classes are not flagged. The replacement annotation is chosen from the field's declared type by the decision table in `recipe.md`.
Resolution contract
**self-evident** — the replacement annotation is fully determined by the field's declared Java type via the decision table in `recipe.md`. No external input is required.
Review checklist
- [ ] Each migrated field maps to exactly one injector-specific annotation per the decision table
- [ ] Sling objects (`Resource` / `ResourceResolver` / request / response) → `@SlingObject`, **not** `@Self`
- [ ] `@Named` merged into the new annotation's `name`; `@Default` / `@Via` preserved
- [ ] `@Optional` → per-field `injectionStrategy = InjectionStrategy.OPTIONAL` (**never** a class-level `defaultInjectionStrategy` change)
- [ ] Unused imports removed; new imports added and ordered per the file's convention
- [ ] File-level skip respected — no partial migration of a file with any ambiguous field
Recipe
Read [`recipe.md`](recipe.md) in full before editing: input contract, decision table, companion annotations, import management, unlocatable / skip-file policy, per-file procedure, before/after example, editing strategy.
Handoff
The skill never commits. See [`../references/git-workflow.md`](../references/git-workflow.md) for git vs in-place handoff and the suggested commit message.
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

