kotlin/searching_dependency_sources
>- Explores and searches source code of all external library dependencies, plugins, and Gradle internals via indexed symbol, full-text, and glob search; STRONGLY PREFERRED for understanding APIs, finding class/method definitions, and reading implementation logic. Do NOT use for project source code (use grep), Gradle documentation (use `researching_gradle_internals`), or Maven Central discovery (use `managing_gradle_dependencies`).
npx skills add https://github.com/Kotlin/kotlinx-rpc --skill searching_dependency_sources
Explores, navigates, and analyzes the internal logic, APIs, and symbol implementations of external libraries and plugins with absolute precision using high-performance, indexed searching.
search_dependency_sources as the primary discovery tool for external library and plugin code.projectRoot.dependency parameter to target a single library (e.g., dependency="org.mongodb:mongodb-driver-sync") when the target is known. This is significantly faster and more focused than searching the entire project graph.Note that when dependency is used in search_dependency_sources or read_dependency_sources, the path and all results are relative to the library root (omitting the <group>/<artifact>... prefix).
gradleSource: true in this skill; use researching_gradle_internals for Gradle's internal implementation.grep or find to *locate* dependency sources; they reside in remote caches whose paths are not predictable in advance.rg or ast-grep to *operate on* a sources root path explicitly returned by read_dependency_sources or search_dependency_sources in the Sources root: <path> header line. Dependency directories insidethe sources root are symlinks; always pass --follow to rg (e.g., rg --follow <pattern> <sources-root>).
:, =, +, -, *, /) in FULL_TEXT searches using a backslash (e.g., \:) or double quotes.read_dependency_sources once a specific file path has been identified via search.fresh: true if a search returns a SearchResponse with an error indicating a missing index; the tool will return an error message rather than throwing an exception if the index is not found.ZipException) are still propagated and will cause the tool to fail with a descriptive error.dependency filter targets ONLY the specific library version matched, NOT its transitive dependencies.class, interface, or fun. Supports exact names, exact FQNs, glob wildcards (e.g., *, **), and regular expressions. Partial package paths require wildcards (e.g., use *.MyClass to find com.example.MyClass). You can target
specific fields using name: (discovery) or fqn: (precision) prefixes.
searchType explicitly if the intent is not a general full-text search. This improves result accuracy and reduces noise.projectPath, configurationPath, or sourceSetPath to narrow the search and improve performance if the target library's context is known. To search a plugin, use configurationPath=":buildscript:classpath".dependency parameter to search or read from a single library. It supports group:name:version:variant, group:name:version, group:name, or just group. This bypasses project-level indexmerging and provides instantaneous results from the global extracted source cache. Note that results will be relative to the targeted library root.
dependency parameter fails or returns no matches, use inspect_dependencies first to verify the exact coordinates (group, name, version, variant) of the dependency asresolved by Gradle.
fresh: true if project dependencies have recently changed to ensure the index is up-to-date.read_dependency_sources and search_dependency_sources includes a Sources root: <absolute-path> header. Use this path with rg, ast-grep, or other shell tools for operations notcovered by the MCP tools (e.g., regex-heavy searches). Because dependency directories are symlinks, always pass --follow to rg: rg --follow <pattern> <sources-root>.
read_dependency_sources with a dot-separated package path (e.g., org.gradle.api) to list its direct symbols and sub-packages. This is backed by the symbol index and is more reliable thandirectory-based exploration for Kotlin projects.
read_dependency_sources to retrieve the implementation logic. If the file is large, use pagination to read specific sections. You can target plugins by passingconfigurationPath=":buildscript:classpath".
DECLARATION search to jump directly to its definition in the library. This is the only reliable way to understand exact behavior and available methods.build.gradle), or metadata (AndroidManifest.xml) packaged within library jars.JsonConfiguration) or fully qualified name from an import.search_dependency_sources(query="<SymbolName>", searchType="DECLARATION").read_dependency_sources(path="<path>") to analyze the implementation.DECLARATION or FULL_TEXT.read_dependency_sources to read its source.search_dependency_sources(query="\"<text>\"") (defaults to FULL_TEXT).inspect_dependencies or project files).search_dependency_sources(query="<query>", dependency="<group:artifact>").Path Relativity and Targeted Searching
When using the dependency parameter, all file paths and search results are relative to the library's root, omitting the <group>/<artifact>... prefix.
path = "org/mongodb/mongodb-driver-sync/4.11.1-sources/org/mongodb/client/MongoClient.kt"dependency="org.mongodb:mongodb-driver-sync"): path = "org/mongodb/client/MongoClient.kt"This approach is significantly faster and simplifies path handling when you are focused on a specific library.
{
"query": "MongoClient",
"searchType": "DECLARATION",
"dependency": "org.mongodb:mongodb-driver-sync"
}
// Reasoning: Using the 'dependency' parameter to target only the 'mongodb-driver-sync' library for a fast, focused search.
{
"dependency": "org.jetbrains.kotlinx:kotlinx-coroutines-core",
"path": "kotlinx/coroutines/Job.kt"
}
// Reasoning: Reading 'Job.kt' directly from the targeted 'kotlinx-coroutines-core' library. Note the 'group/artifact...' prefix is omitted.
{
"query": "JsonConfiguration",
"searchType": "DECLARATION"
}
// Reasoning: Using DECLARATION search to find a class named 'JsonConfiguration' across both name and FQN fields.
{
"query": "fqn:kotlinx.serialization.json.*",
"searchType": "DECLARATION"
}
// Reasoning: Using the 'fqn:' prefix with a wildcard to find all declarations within a specific package literal.
{
"query": "name:Configuration",
"searchType": "DECLARATION"
}
// Reasoning: Using the 'name:' prefix to find classes like 'JsonConfiguration' via CamelCase tokenization.
{
"query": "encodeTo*",
"searchType": "DECLARATION"
}
// Reasoning: Finding all definitions starting with 'encodeTo' across both name and FQN fields.
{
"query": "fqn:/.*\\.internal\\..*/",
"searchType": "DECLARATION"
}
// Reasoning: Using a regular expression on the 'fqn' field to find all internal declarations.
{
"query": "DEFAULT_TIMEOUT_MS \\: 5000"
}
// Reasoning: Using FULL_TEXT (default) with escaped colon to find a specific constant assignment.
{
"query": "**/AndroidManifest.xml",
"searchType": "GLOB"
}
// Reasoning: Using GLOB search to find a specific file by name across the dependency graph.
{
"path": "kotlinx/serialization/json/Json.kt"
}
// Reasoning: Reading the implementation of a known class path identified from previous search results.
{
"path": "org.gradle.api"
}
// Reasoning: Listing the direct symbols and sub-packages of 'org.gradle.api' using index-backed exploration.
search_dependency_sources for details on complex queries and escaping.dependency filter fails, run inspect_dependencies to confirm the exact coordinates.Take kotlin/searching_dependency_sources from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.