Skip to content
cccskills
FreePublished on GitHub

plugin-model-analyzer

Explore IntelliJ Product DSL models by querying modules, products, and plugin relationships. Use focused filters to inspect dependencies, trace paths, compare products, check loading rules, and find validation issues or refactoring candidates; results are returned as structured JSON.

OriginalShow the original description

Query IntelliJ Product DSL modules, products, and plugin graphs.

JetBrains/intellij-community20,664 stars(GitHub 20,664 + cccskills 0)

Run score Not tested

See how to install

Good for

  • Inspect a module’s dependencies and owners
  • Trace how a module reaches a product
  • Validate Product DSL placement or loading rules
  • Compare product contents or find refactoring candidates

Files included (1)

  • SKILL.md9.4 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

<!-- Generated by community/.ai/render-guides.mjs; edit community/.agents/skills/plugin-model-analyzer/SKILL.md -->

Plugin Model Analyzer

Use the Product DSL analyzer directly through Bazel. Do not call the retired PluginModelAnalyzer MCP server.

Command Shape

Run from the repository root:

bazel run --ui_event_filters=-info --noshow_progress //platform/buildScripts:plugin-model-tool -- --json='<request-json>'

The output is JSON with a timestamp plus one result property named after the requested filter.

Prefer small, typed JSON requests. Avoid unfiltered --json: it emits the full model and is usually too large for agent context. Use JSON fields, not extra CLI flags, to describe the query. Treat the single top-level result property as the answer.

Transport options:

  • Short request: --json='{"filter":"summary","limit":5}'
  • Stdin request: --json=-
  • File request: --json=@/private/tmp/plugin-model-query.json

Common Requests

Module overview:

{"filter":"moduleInfo","module":"intellij.platform.vcs.impl","limit":20}

Module dependencies:

{"filter":"moduleDependencies","module":"intellij.platform.vcs.impl","includeTransitive":false,"includeTestDependencies":false}

Dependency path:

{"filter":"dependencyPath","fromModule":"intellij.platform.vcs.impl","toModule":"intellij.platform.projectModel.impl","includeTestDependencies":true,"includeScopes":true}

Module owners:

{"filter":"moduleOwners","module":"intellij.platform.vcs.impl","includeTestSources":true}

Module-set details or search:

{"filter":"moduleSetQuery","moduleSet":"ide.common","details":false,"limit":50}
{"filter":"moduleSetQuery","name":"vcs","location":"COMMUNITY","minModuleCount":3,"limit":20}

Product details or search:

{"filter":"productQuery","product":"idea","details":false,"limit":50}
{"filter":"productQuery","usesModuleSet":"ide.common","limit":30}

Product comparison and trace path:

{"filter":"productCompare","product":"idea","product2":"Idea","limit":50}
{"filter":"productTracePath","product":"idea","moduleSet":"ide.common","limit":20}

Embedded dependency closure:

{"filter":"embeddedDependencyClosure","value":"idea","moduleSet":"ide.common","pluginSourceOnly":true}

Merge or inline impact:

{"filter":"mergeImpact","source":"some.module.set","target":"target.module.set","operation":"merge"}
{"filter":"mergeImpact","source":"some.module.set","operation":"inline"}

Validation and loading-rule checks:

{"filter":"validation","check":"community_products"}
{"filter":"validation","check":"module_set_locations"}
{"filter":"validation","check":"loading_inconsistencies"}
{"filter":"validation","check":"embedded_dependency_closure","product":"idea","pluginSourceOnly":true}
{"filter":"moduleLoading","loading":"EMBEDDED","limit":100}

Refactoring candidates:

{"filter":"moduleSetOverlap","minOverlapPercent":70,"limit":20}
{"filter":"productSimilarity","threshold":0.8,"limit":20}
{"filter":"unificationSuggestions","strategy":"merge","limit":10}
{"filter":"redundantModuleSetRefs","product":"idea","limit":50}
{"filter":"suggestModuleSetsForModules","modules":["intellij.platform.vcs.impl","intellij.platform.vcs.log.impl"],"limit":20}

Deprecated xi:include usage:

{"filter":"deprecatedIncludes","product":"idea","limit":100}

Old MCP Operation Map

Use this map when a prompt or older instruction mentions the retired PluginModelAnalyzer MCP operation names.

Old operationJSON request
analyze_module_structure{"filter":"summary"}
module info{"filter":"moduleInfo","module":"<module>"}
module dependencies{"filter":"moduleDependencies","module":"<module>"}
module paths{"filter":"modulePaths","module":"<module>"}
module reachability{"filter":"moduleReachability","module":"<module>","moduleSet":"<set>"}
module find_by_loading{"filter":"moduleLoading","loading":"EMBEDDED","details":true}
module dependency_path{"filter":"dependencyPath","fromModule":"<from>","toModule":"<to>","includeScopes":true}
module-set info{"filter":"moduleSetQuery","moduleSet":"<set>"}
module-set search{"filter":"moduleSetQuery","name":"<name>","location":"COMMUNITY","limit":20}
module-set hierarchy{"filter":"moduleSetQuery","moduleSet":"<set>","details":true}
module-set overlap{"filter":"moduleSetOverlap","minOverlapPercent":70,"limit":20}
module-set graphNo ASCII graph output; use moduleSetQuery plus productTracePath or productUsage for structured edges.
module-set suggest_for_modules{"filter":"suggestModuleSetsForModules","modules":["<module>"]}
product info{"filter":"productQuery","product":"<product>"}
product search{"filter":"productQuery","name":"<name>","limit":20}
product compare{"filter":"productCompare","product":"<product1>","product2":"<product2>"}
product similar{"filter":"productSimilarity","threshold":0.8,"limit":20}
product composition{"filter":"composition"} for all products; use productQuery for one product.
product trace_path{"filter":"productTracePath","product":"<product>","moduleSet":"<set>"}
product deprecated_includes{"filter":"deprecatedIncludes","product":"<product>"}
product full_analysisAvoid unless explicitly needed; omit the filter only when the full raw model is required.
validation community_products{"filter":"validation","check":"community_products"}
validation module_set_locations{"filter":"validation","check":"module_set_locations"}
validation loading_inconsistencies{"filter":"validation","check":"loading_inconsistencies"}

Fast Recipes

Where is a module included?

{"filter":"moduleInfo","module":"<module>","limit":50}
{"filter":"modulePaths","module":"<module>"}

What depends on what, and why?

{"filter":"moduleDependencies","module":"<module>","includeTransitive":false,"includeTestDependencies":false}
{"filter":"dependencyPath","fromModule":"<from>","toModule":"<to>","includeTestDependencies":true,"includeScopes":true}

Who owns a module?

{"filter":"moduleOwners","module":"<module>","includeTestSources":true}

Which products or module sets use something?

{"filter":"moduleInfo","module":"<module>","limit":50}
{"filter":"productQuery","usesModuleSet":"<module-set>","limit":50}
{"filter":"productUsage","moduleSet":"<module-set>"}

Can a module stop being embedded?

{"filter":"moduleInfo","module":"<module>","limit":50}
{"filter":"moduleLoading","loading":"EMBEDDED","details":true,"limit":200}
{"filter":"validation","check":"embedded_dependency_closure","module":"<module>","pluginSourceOnly":true}

For the loading query, inspect moduleLoading.result.entries.items for the target module; moduleLoading filters by loading rule, not by module name. The embedded closure check answers whether an embedded source module has dependencies that are not also supplied by embedded sources in affected products.

Did a Product DSL edit introduce placement or loading problems?

{"filter":"validation","check":"community_products"}
{"filter":"validation","check":"module_set_locations"}
{"filter":"validation","check":"loading_inconsistencies"}
{"filter":"validation","check":"embedded_dependency_closure","pluginSourceOnly":true}

Which module set should contain these modules?

{"filter":"suggestModuleSetsForModules","modules":["<module1>","<module2>"],"limit":20}

Reading Output

  • Compact list fields use count, items, and truncated; increase limit or set details:true only when needed.
  • Some focused filters return an error field in JSON for missing selectors or unknown names; a successful process exit does not always mean the query matched.
  • For direct embeddedDependencyClosure, use value for the product selector. The validation wrapper accepts product or value.
  • location values are COMMUNITY or ULTIMATE. loading values are EMBEDDED, REQUIRED, OPTIONAL, ON_DEMAND, or UNSPECIFIED.

Request Fields

Use only fields relevant to the filter. Omit false, null, and default values unless they are semantically important.

Core selectors: filter, value, module, moduleSet, product, product2, name, location, usesModuleSet, modules, fromModule, toModule, source, target.

Options: operation, graph, check, loading, strategy, limit, minModuleCount, details, threshold, minOverlapPercent, includeTransitive, includeTestDependencies, includeTestSources, includeScopes, pluginSourceOnly.

Practical Rules

  • Start with summary, moduleInfo, moduleSetQuery, or productQuery when exploring.
  • Use details:false and a small limit until you know the exact module set or product.
  • Use the legacy precise filters (moduleDependencies, dependencyPath, moduleOwners, moduleReachability, productUsage, embeddedDependencyClosure, mergeImpact) when you need the full typed analysis for one target.
  • Use --json=- or --json=@file for complex requests instead of adding more CLI flags.
  • If the command fails before producing JSON, treat stderr as the source of truth; invalid JSON requests exit nonzero.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

actions

FreeSummary

Implement or update IntelliJ `AnAction` classes and their `plugin.xml` registrations. Keep labels and descriptions in message bundles, configure optional icons, and launch suspending work through the event coroutine scope so synchronous action handling does not freeze the IDE.

  • Adding a new IntelliJ action
  • Updating an action's registration or icon
  • Moving action labels into a message bundle
JetBrains/intellij-community20.7KUpdated Oct 26, 2026

Move IntelliJ JPS test modules to Bazel and diagnose failures that occur only under Bazel. The guide helps trace missing dependencies, plugins, test data, and runfiles, then verify the generated target and migrated tests.

  • Migrating a JPS test module to Bazel
  • Diagnosing a test failure that occurs only in Bazel
  • Checking Bazel dependencies and test data wiring
JetBrains/intellij-community20.7KUpdated Oct 26, 2026

code-style

FreeSummary

Write or review Kotlin and Java code in line with IntelliJ project conventions. The guidance covers language choice, formatting, sealed types, threading annotations, and safe handling of control flow exceptions so changes fit the surrounding codebase.

  • Writing a new Kotlin file that follows IntelliJ conventions
  • Reviewing Java code and checking its style guidance
  • Checking formatting, sealed-type handling, or exception handling
JetBrains/intellij-community20.7KUpdated Oct 26, 2026

commits

FreeSummary

Create, amend, or rename IntelliJ commits with messages that follow the project’s ticket and label formats. Keep each commit focused, explain the reason and decision in the body when needed, and pass the message safely through the shell or PowerShell.

  • Writing a message for a change linked to a YouTrack ticket
  • Preparing a commit message for tests, cleanup, or documentation
  • Amending or renaming an existing IntelliJ commit
JetBrains/intellij-community20.7KUpdated Oct 26, 2026

Compare how Python type checkers interpret a code snippet or file. The script runs selected tools, including ty, pyrefly, basedpyright, mypy, and zuban, then produces a Markdown report with verdicts, timings, and each checker's diagnostic output.

  • Comparing type inference for a Python snippet
  • Checking whether a Python expression should be a type error
  • Reviewing differences among Python type checkers
JetBrains/intellij-community20.7KUpdated Oct 26, 2026

Shape Compose Desktop UI code by keeping composables focused on rendering and placing application decisions in presenters or coordinators. Get guidance on state ownership, effects, reusable component APIs, lazy-list keys, animation, and performance for individual UI changes.

  • Separating screen rendering from application decisions
  • Choosing which UI state belongs in composition
  • Structuring effects and coroutine work
JetBrains/intellij-community20.7KUpdated Oct 26, 2026

See all skills by JetBrains

Report a problem with this skill