>- 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.Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
Next.js best practices - file conventions, RSC boundaries, data patterns, async APIs, metadata, error handling, route handlers, image/font optimization, bundling
Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification
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.