Agent skill

Manage Deprecations

by quarkusio in quarkusio/quarkus

Maintain @Deprecated code in the Quarkus codebase: remove code that has been deprecated for more than 12 months, add the @Deprecated annotations that were missed when a related element was…

Apache-2.0Auto-check passed

Install Manage Deprecations

skills CLI
$ npx skills add quarkusio/quarkus --skill manage-deprecations -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install quarkusio/quarkus manage-deprecations --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/quarkusio/quarkus.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/manage-deprecations .claude/skills/manage-deprecations && rm -rf skills-src

Use ~/.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/

Facts

Skill name
manage-deprecations
GitHub stars
16k
Token cost
~2.8k tokens
SKILL.md length
1,311 words
Files
2 (incl. scripts)
Skills in repo
12
Repo updated
First seen
Licence
Apache-2.0

At a glance

Maintain @Deprecated code in the Quarkus codebase: remove code that has been deprecated for more than 12 months, add the @Deprecated annotations that were missed when a related element was…

  • Works in 11 steps: Discover the removal candidates → Confirm each candidate is genuinely safe… → Remove, one class per change → …
  • The user asks to clean up deprecations
  • SKILL.md covers The discovery tool, Workflow A — Remove…, Workflow B — Complete missed… and Workflow C — Apply a new…, plus 3 more sections
  • Runs Shell scripts from its folder; calls git

What it does

Manage Deprecations is an agent skill from quarkusio/quarkus. Maintain @Deprecated code in the Quarkus codebase: remove code that has been deprecated for more than 12 months, add the @Deprecated annotations that were missed when a related element was deprecated (e.g. a field is deprecated but its getters/setters/constructors are not), and apply new @Deprecated annotations the user requests (e.g. "deprecate constructors of classes that have a builder"). Use this skill whenever the user asks to clean up deprecations, remove old/long-deprecated code, purge deprecated APIs…

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/find-deprecated.sh`).

It works with Java. The repository describes itself as: Quarkus: Supersonic Subatomic Java. The licence is Apache-2.0.

When your agent uses it

  • The user asks to clean up deprecations
  • Remove old/long-deprecated code
  • Purge deprecated APIs
  • Remove code deprecated for over a year

Example prompts

  • “deprecate constructors of classes that have a builder”
  • “remove code deprecated for over a year”
  • “/manage-deprecations”

Requirements

  • A Bash shell

Workflow steps

11 steps, taken from the step headings in SKILL.md.

  1. Discover the removal candidates
  2. Confirm each candidate is genuinely safe to remove
  3. Remove, one class per change
  4. Build the affected module
  5. Commit
  6. Find the gaps
  7. Add the annotation + javadoc
  8. Build and commit
  9. Find every matching element
  10. Annotate each element
  11. Build and commit

What it can do on your machine

Read from SKILL.md and the folder at commit 3c0afef. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships 1 file in scripts/ (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Manage Deprecations loads about 2.8k tokens when it runs. Until then it costs about 192 tokens; SKILL.md has 1,311 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~192
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

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.

Safety

Auto-check passed

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); the scripts in this folder are not scanned.

SKILL.md

The full file from quarkusio/quarkus at commit 3c0afef, republished under its Apache-2.0 licence (© quarkusio). 1,311 words, ~2,813 tokens.

Download SKILL.mdSave it as .claude/skills/manage-deprecations/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
manage-deprecations
description
Maintain @Deprecated code in the Quarkus codebase: remove code that has been deprecated for more than 12 months, add the @Deprecated annotations that were missed when a related element was deprecated (e.g. a field is deprecated but its getters/setters/constructors are not), and apply new @Deprecated annotations the user requests (e.g. "deprecate constructors of classes that have a builder"). Use this skill whenever the user asks to clean up deprecations, remove old/long-deprecated code, purge deprecated APIs, "remove code deprecated for over a year", audit @Deprecated usage, fix inconsistent/incomplete deprecation annotations, or deprecate any element (method, constructor, field, class) — even if they don't name a specific class or module.

Deprecation Cleanup

Quarkus accumulates @Deprecated code over time. This skill covers three workflows, sharing one discovery tool and the same commit/annotation conventions:

  • Removal — code deprecated for at least 12 months (the project's convention) is safe to delete; keeping it forever defeats the point of deprecating it.
  • Completion — when one element is deprecated, everything that only exists to serve it should be deprecated too. A common miss: a field is marked @Deprecated but its getter, setter, constructor parameter, or builder method is not, so callers using the accessors get no warning.
  • New deprecation — the user asks to deprecate some category of element outright, e.g. "deprecate constructors of classes with a builder". This is a fresh deprecation, not a gap-fill, but it uses the same annotation conventions as Completion (see below).

The discovery tool

scripts/find-deprecated.sh scans Java files for @Deprecated and prints each entry sorted by the date it was originally introduced. It uses git blame -w -M -C -C -C so a line's date reflects when it was first written, not when a later refactor moved it — so the 12-month clock runs from the real introduction date. Run it from the skill's scripts/ directory (or use the full path):

bash
scripts/find-deprecated.sh core/deployment --removable --csv          # Workflow A: only entries ≥12 months old
scripts/find-deprecated.sh core/deployment --csv                      # Workflow B: ALL deprecations (default)
scripts/find-deprecated.sh core/deployment --min-age-months=18 --csv  # custom threshold

--csv emits CSV (easier to sort/filter) instead of the formatted table; redirect to $TMPDIR to avoid re-scanning. Columns: File Location (path:line), Deprecated Entry (the declaration), Date (YYYY-MM-DD introduced), Commit (short hash).

Scan the narrowest path that covers the request — the whole repo is slow (one git blame per hit).

Workflow A — Remove long-deprecated code

The rule is age-based, but age alone is not sufficient to delete safely. Removal of a public API can break callers, so verify before you cut.

1. Discover the removal candidates

Run --removable (see above); the list it prints is already the candidate set. Entries dated unknown (blame couldn't resolve) are excluded because their age can't be confirmed — run without --removable to review those individually.

2. Confirm each candidate is genuinely safe to remove

For every candidate, before deleting:

  • Search the whole repo for remaining usages of the symbol (method name, constructor signature, field). Include tests, integration-tests, and docs. Deprecated does not mean unused.
  • If usages remain, they were supposed to migrate to the replacement named in the @deprecated javadoc. Migrate them first (in the same change), or, if migration is non-trivial or out of scope, leave that entry in place and move on — don't delete something the codebase still depends on.
  • Watch for overrides and API contracts: a deprecated method may implement an interface or be overridden elsewhere; removing it can break the hierarchy.

If in doubt about whether an external/public API can be dropped, surface it to the user rather than guessing — some deprecated items are kept intentionally for downstream compatibility.

3. Remove, one class per change

Delete the declaration and its javadoc/annotation block together. Preserve surrounding comments that are not about the removed element (see the repo's editing rules). Group all removals within a single class into one commit; keep different classes in separate commits so history stays reviewable.

4. Build the affected module

Removing code can break compilation elsewhere in the module (or its dependents). Build the module you touched — and rebuild its deployment module if you changed a runtime module (see the building-and-testing skill):

bash
./mvnw install -f <module-path> -DskipTests

Fix any fallout (usually leftover callers you can migrate to the replacement). Only consider the removal done once it compiles.

5. Commit

One commit per class. See Commit conventions below.

Workflow B — Complete missed deprecations

When you deprecate something, its satellites should be deprecated too. The classic gap is a deprecated field whose accessors (getter/setter), constructors, or builder methods were left un-annotated — so a caller using the getter gets no warning.

1. Find the gaps

Run the tool without an age filter (the default) so every deprecation shows up regardless of when it was introduced — the gaps you're hunting for are often recent:

bash
scripts/find-deprecated.sh <path> --csv

While reviewing a class (or when the user reports one), look for a deprecated element whose companions are not deprecated:

  • A @Deprecated field → is its getter/setter deprecated? Its constructor parameter? The builder method that sets it?
  • A @Deprecated constructor/method → do overloads that only forward to it, or builder entry points that only exist for it, still lack the annotation?

git blame the un-annotated companion to understand when it was introduced and whether it was meant to be deprecated alongside the element it serves. The commit that deprecated the primary element is your reference.

2. Add the annotation + javadoc

Add both an @Deprecated annotation and a javadoc @deprecated tag that tells the user what to use instead. The javadoc is what makes the deprecation actionable — without a replacement pointer it's just noise.

java
/**
 * @deprecated Use {@link GeneratedResourceBuildItem#GeneratedResourceBuildItem(String, byte[])} instead.
 *             If you want to serve static resources use
 *             {@link io.quarkus.vertx.http.deployment.spi.GeneratedStaticResourceBuildItem} instead.
 */
@Deprecated(since = "4.0")
public GeneratedResourceBuildItem(String name, byte[] data, boolean excludeFromDevCL) {
    ...
}
3. Build and commit

Build the module (Workflow A, step 4) and commit — message form "Code deprecation in X" (see below).

Show full SKILL.md (515 more words)Show less

Workflow C — Apply a new deprecation

Use this when the user asks to deprecate a category of element that isn't currently deprecated at all — e.g. "deprecate constructors of classes that have a builder", "deprecate the Foo class in favor of Bar", "deprecate the getX() method".

1. Find every matching element

Grep/search for the pattern the user described (e.g. classes with a builder: look for a builder() static method or nested Builder class, then check whether that class also exposes public constructors). Don't rely on find-deprecated.sh here — it only finds existing @Deprecated entries, not candidates for new ones. List every matching element before annotating so scope is clear up front; if the match criteria are ambiguous (e.g. does "classes with a builder" include package-private or test-only classes?), confirm scope with the user before proceeding rather than guessing.

2. Annotate each element

Same conventions as Workflow B step 2: @Deprecated(since = "<version>") plus a javadoc @deprecated tag naming the replacement. See Choosing since below for a brand-new deprecation.

3. Build and commit

Build the module (Workflow A, step 4) and commit — message form "Deprecate X", body explaining what to use instead, one class per commit (see Commit conventions).

@Deprecated annotation conventions

  • Prefer the form @Deprecated(since = "<version>") over a bare @Deprecated. since records when the deprecation started (which drives the 12-month removal clock and helps future cleanup)
  • Always pair the annotation with a javadoc @deprecated tag naming the replacement.
  • Choosing since:
    • For a companion that should have been deprecated alongside an existing element, match the intent of that element — but note the actual value is a judgement call, ask the user if in doubt.

    • For a brand-new deprecation, use the current in-development release version. The main branch carries 999-SNAPSHOT, so the real version isn't in pom.xml — determine it from the project's GitHub milestones: find the open milestone whose title ends in - main and use the version prefix (strip the suffix). For example, a milestone titled 4.0 - main means since = "4.0".

      bash
      gh api repos/quarkusio/quarkus/milestones --jq '.[].title' | grep -- '- main$'

      If no milestone matches, or more than one does, ask the user rather than guessing.

Commit conventions

One class per commit. The body cites the commit(s) that introduced the deprecation, so a reviewer can verify the 12-month age without re-running blame. Follow the repository's policies.

Removal — single introducing commit:

Remove deprecated code from `TransformedClassesBuildItem`

The removed code has been deprecated for at least 12 months in 469fd3ae

Removal — multiple introducing commits:

Remove deprecated code from `ReflectiveHierarchyBuildItem`

The removed code has been deprecated for at least 12 months in the
following commits:

* 498d936a
* aeeaa55d

Completing a missed deprecation:

Code deprecation in `GeneratedResourceBuildItem`

The removed code has been deprecated for at least 12 months in c76362ab.

The newly deprecated methods should have been deprecated as part of
41cd5830

Use backticks around the class name in the subject. Reference commits by their short hash (from the discovery tool's Commit column).

Common pitfalls

  • Don't trust @Deprecated as proof of disuse. Always grep for callers first; deprecated APIs are frequently still used internally.
  • Don't remove based on a move-date. The tool already uses -M -C to trace the true origin — but if you compute a date another way, a refactor can make old code look recent and vice-versa.
  • Don't skip the build. Compilation is the cheapest check that a removal didn't strand a caller.
  • Don't reorder or hand-sort imports after deletions — the formatter and impsort-maven-plugin handle that during compilation. Don't pass -Dno-format.
  • Keep unrelated comments. Only delete the javadoc/annotation attached to the element you're removing.

© quarkusio, 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

Files

SKILL.md and 1 other file (scripts) in .agents/skills/manage-deprecations of quarkusio/quarkus.

  • SKILL.md
  • scripts/find-deprecated.sh

Open the folder on GitHubat commit 3c0afef

Compare with similar skills

Manage Deprecations 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.

Manage Deprecations compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Manage Deprecations this skillquarkusio/quarkus16k—~2.8kAutomated safety check: PassApache-2.0
Brainstormingxpinjection/test-driven-spring-boot11253 repos~2.6kAutomated safety check: PassMIT
Android API Diffgkd-kit/gkd43k—~796Automated safety check: PassGPL-3.0
Video Cover Imageitwanger/toBeBetterJavaer18k—~3.3kAutomated safety check: PassNone
Lancedb Update Lance Dependencylancedb/lancedb12k—~1.1kAutomated safety check: PassApache-2.0
Java SDK E2E Test with Replay Snapshotgithub/copilot-sdk11k—~1.8kAutomated safety check: PassMIT

Similar skills

  • Brainstorming

    xpinjection/test-driven-spring-boot

    You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior.

    112 GitHub starsUsed in 53 repos~2.6k tokens
    Agent WorkflowsAuto-check passed
  • Android API Diff

    gkd-kit/gkd

    Looks up Android framework Java and AIDL APIs across versions with the android-api-diff CLI: signatures, availability, source files and hidden-API access code.

    43k GitHub stars~796 tokensUpdated today
    MobileAuto-check passed
  • Video Cover Image

    itwanger/toBeBetterJavaer

    Generate matched 3:4, 16:9, and 4:3 short-video cover images from toBeBetterJavaer video scripts or AI/Java technical topics.

    18k GitHub stars~3.3k tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • Update LanceDB to a specific Lance release or tag. An agent skill from lancedb/lancedb.

    12k GitHub stars~1.1k tokensUpdated today
    DatabasesAuto-check passed
  • Official

    Creates a Java SDK end-to-end test for the Copilot SDK that runs against a recorded YAML snapshot through a replay proxy, so CI needs no real authentication.

    11k GitHub stars~1.8k tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Fory Release

    apache/fory

    Prepare an Apache Fory release candidate from a clean release branch, including the version bump, RC tag, JVM staging, ASF source artifacts, SVN upload, and vote email.

    4.6k GitHub stars~2.9k tokensUpdated yesterday
    Auto-check passed

More from quarkusio/quarkus

All 12 skills in this repo
  • Building And Testing

    quarkusio/quarkus

    How to build and test Quarkus: Maven commands, build flags, incremental builds, justfile aliases, and important build rules.

    16k GitHub stars~615 tokensUpdated today
    Auto-check passed
  • Building Docs

    quarkusio/quarkus

    How to build, preview, and verify Quarkus documentation locally: root Maven build, docs rebuild, Roq dev server preview.

    16k GitHub stars~1.8k tokensUpdated today
    Auto-check passed
  • Quarkus split classloading model, runtime-dev module wiring, conditional dependencies, and common classloading mistakes.

    16k GitHub stars~635 tokensUpdated today
    Auto-check passed
  • Step-by-step guide for converting Quarkus extensions from the legacy @Record/@Recorder pattern to the ServiceRegistrar service system.

    16k GitHub stars~4.6k tokensUpdated today
    Auto-check passed
  • Creating Extensions

    quarkusio/quarkus

    How to create a new Quarkus extension: full module layout, package naming, artifact naming, dependency rules, and Dev UI setup.

    16k GitHub stars~929 tokensUpdated today
    Auto-check passed
  • Pull Requests

    quarkusio/quarkus

    Rules for preparing pull requests and commits in the Quarkus project: title conventions, description format, commit hygiene, labels, and contribution policies.

    16k GitHub stars~840 tokensUpdated today
    Auto-check passed

Works with

Questions about Manage Deprecations

What does Manage Deprecations do?

Maintain @Deprecated code in the Quarkus codebase: remove code that has been deprecated for more than 12 months, add the @Deprecated annotations that were missed when a related element was…. Manage Deprecations is an agent skill from quarkusio/quarkus.g.

When should I use Manage Deprecations?

Manage Deprecations fits situations like: the user asks to clean up deprecations; remove old/long-deprecated code; purge deprecated APIs; remove code deprecated for over a year.

How do I install Manage Deprecations in Claude Code?

Run `npx skills add quarkusio/quarkus --skill manage-deprecations -a claude-code`. Or copy the skill folder (.agents/skills/manage-deprecations in quarkusio/quarkus) into .claude/skills/manage-deprecations in your project. Claude Code loads it when a task matches its description.

How do I install Manage Deprecations in Codex?

Run `npx skills add quarkusio/quarkus --skill manage-deprecations -a codex`. Or copy the skill folder (.agents/skills/manage-deprecations in quarkusio/quarkus) into .agents/skills/manage-deprecations in your project. Codex loads it when a task matches its description.

Can I use Manage Deprecations in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add quarkusio/quarkus --skill manage-deprecations -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/manage-deprecations, .gemini/skills/manage-deprecations, .github/skills/manage-deprecations and .opencode/skills/manage-deprecations in your project.

What does Manage Deprecations need to run?

Going by SKILL.md and its folder, Manage Deprecations needs a shell for the scripts in its folder and the command-line tools its instructions call (git). Our summary lists: A Bash shell.

Does Manage Deprecations access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Manage Deprecations safe to install?

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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Manage Deprecations use?

Manage Deprecations is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Manage Deprecations use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Manage Deprecations?

Skills that share tags, products or a category with Manage Deprecations: Brainstorming (xpinjection/test-driven-spring-boot, 112 stars), Android API Diff (gkd-kit/gkd, 43k stars), Video Cover Image (itwanger/toBeBetterJavaer, 18k stars) and Lancedb Update Lance Dependency (lancedb/lancedb, 12k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Manage Deprecations?

quarkusio (a GitHub organization) maintains it in quarkusio/quarkus, which has 15,942 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on October 10, 2026.

Source: quarkusio/quarkus on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.