Extend Commands API
redis/jedis
Add or extend Redis commands in the Jedis client API — a new core command, a family of new commands, an extension to an existing command's options, or a module command (Search/TimeSeries/JSON/Bloom).
To build Solr plugins: SearchComponent, QParser, URP, DocTransformer.
$ npx skills add griddynamics/rosetta --skill solr-extending -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install griddynamics/rosetta solr-extending --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/griddynamics/rosetta.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/core-claude/skills/solr-extending .claude/skills/solr-extending && rm -rf skills-srcUse ~/.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/
Install the "solr-extending" agent skill from https://github.com/griddynamics/rosetta/tree/main/plugins/core-claude/skills/solr-extending into .claude/skills/solr-extending/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "solr-extending", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/griddynamics/rosetta/tree/main/plugins/core-claude/skills/solr-extendingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add griddynamics/rosetta --skill solr-extending -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install griddynamics/rosetta solr-extending --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/griddynamics/rosetta.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/core-claude/skills/solr-extending .agents/skills/solr-extending && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "solr-extending" agent skill from https://github.com/griddynamics/rosetta/tree/main/plugins/core-claude/skills/solr-extending into .agents/skills/solr-extending/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "solr-extending", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add griddynamics/rosetta --skill solr-extending -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install griddynamics/rosetta solr-extending --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/griddynamics/rosetta.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/core-claude/skills/solr-extending .cursor/skills/solr-extending && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "solr-extending" agent skill from https://github.com/griddynamics/rosetta/tree/main/plugins/core-claude/skills/solr-extending into .cursor/skills/solr-extending/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "solr-extending", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/griddynamics/rosetta.git --path plugins/core-claude/skills/solr-extending--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add griddynamics/rosetta --skill solr-extending -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install griddynamics/rosetta solr-extending --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/griddynamics/rosetta.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/core-claude/skills/solr-extending .gemini/skills/solr-extending && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "solr-extending" agent skill from https://github.com/griddynamics/rosetta/tree/main/plugins/core-claude/skills/solr-extending into .gemini/skills/solr-extending/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "solr-extending", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install griddynamics/rosetta solr-extendingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add griddynamics/rosetta --skill solr-extending -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/griddynamics/rosetta.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/core-claude/skills/solr-extending .github/skills/solr-extending && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "solr-extending" agent skill from https://github.com/griddynamics/rosetta/tree/main/plugins/core-claude/skills/solr-extending into .github/skills/solr-extending/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "solr-extending", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add griddynamics/rosetta --skill solr-extending -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install griddynamics/rosetta solr-extending --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/griddynamics/rosetta.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/core-claude/skills/solr-extending .opencode/skills/solr-extending && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "solr-extending" agent skill from https://github.com/griddynamics/rosetta/tree/main/plugins/core-claude/skills/solr-extending into .opencode/skills/solr-extending/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "solr-extending", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
solr-extendingTo build Solr plugins: SearchComponent, QParser, URP, DocTransformer.
Solr Extending is an agent skill from griddynamics/rosetta. To build Solr plugins: SearchComponent, QParser, URP, DocTransformer.
Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including reference files (for example `README.md`, `references/01-search-component.md` and `references/02-doc-transformer.md`).
The repository describes itself as: An instruction layer for AI coding agent. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 5441232. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are xml).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Solr Extending loads about 2k tokens when it runs, and up to ~22k if it reads all its reference files. Until then it costs about 21 tokens; SKILL.md has 807 words of instructions outside code blocks.
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.
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); files beside SKILL.md are not scanned.
The full file from griddynamics/rosetta at commit 5441232, republished under its Apache-2.0 licence (© griddynamics). 807 words, ~2,027 tokens.
.claude/skills/solr-extending/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.<solr-extending>
<role>
You are a senior Apache Solr engineer who builds production-grade custom plugins. You know the request and indexing lifecycles, distributed-mode (SolrCloud) correctness, registration in solrconfig.xml, and classloader/version traps. You target Solr 9.x and flag Solr 10 differences only when relevant.
</role>
<when_to_use_skill>
Custom Solr plugins: SearchComponent, DocTransformer/TransformerFactory, QParser/QParserPlugin, UpdateRequestProcessor (URP), ValueSourceParser/function queries, RequestHandlerBase subclasses, plugin jar packaging, solrconfig.xml wiring. Query construction (eDisMax, block join, JSON Facets) or relevancy tuning (BM25, boosts) → USE SKILL solr-query; custom analyzers/tokenizers/filters → USE SKILL solr-schema.
</when_to_use_skill>
<core_concepts>
A Solr request flows through pluggable layers; picking the right extension point depends on when in the lifecycle you need to act:
Most plugins come in factory + instance pairs: the factory is registered once in solrconfig.xml, configured via init params, and creates a fresh instance per request. Solr reuses instances across threads — instance state must be immutable after init, thread-local, or synchronized.
This SKILL.md is a router. For any non-trivial question, read the relevant references/ file before answering — references hold the full examples, lifecycle details, and decision tables and are not duplicated here.
</core_concepts>
<references>
| When the user asks about… | Read |
|---|---|
SearchComponent lifecycle (prepare/process), distributed mode, registration | READ SKILL FILE references/01-search-component.md |
DocTransformer / TransformerFactory — per-doc augmentation, examples | READ SKILL FILE references/02-doc-transformer.md |
QParser / QParserPlugin — custom query syntax | READ SKILL FILE references/03-query-parser.md |
UpdateRequestProcessor (URP) — indexing-time transformations | READ SKILL FILE references/04-update-processor.md |
ValueSourceParser — custom function queries for bf=/sort= | READ SKILL FILE references/05-value-source-parser.md |
solrconfig.xml wiring, jar packaging, classloading, version compat | READ SKILL FILE references/06-plugin-wiring.md |
</references>
<picking_the_extension_point>
| You want to... | Use |
|---|---|
| Add a request param that modifies how queries are processed | SearchComponent |
| Add per-document fields to results (computed, fetched, formatted) | DocTransformer |
Support a new query syntax ({!myparser ...}) | QParser |
Compute something from doc fields usable in bf= / sort= | ValueSourceParser |
| Modify documents during indexing (clean fields, derive values, dedupe) | UpdateRequestProcessor |
| Wholly new request endpoint with custom output | RequestHandlerBase subclass |
| Custom analyzer/tokenizer/filter | (USE SKILL solr-schema) |
The most common mistake is SearchComponent vs DocTransformer confusion:
</picking_the_extension_point>
<lifecycle_hooks>
| Method | Called when |
|---|---|
init(NamedList args) | Once at factory load; configure from solrconfig.xml params |
inform(SolrCore core) (if SolrCoreAware) | Once after core fully loaded; safe to access schema, other components |
prepare(...) | Per-request setup (SearchComponent only) |
process(...) | Main work (SearchComponent) |
transform(SolrDocument, int) | Per-doc work (DocTransformer) |
getQuery() / parse() | Build Lucene Query (QParser) |
processAdd/Delete/Commit | Per-doc indexing (URP) |
close() | Resource cleanup |
</lifecycle_hooks>
<anti_patterns>
Push back on these before answering the literal question:
transform() is per-doc; batching accumulates state across docs and breaks parallel response writers. Pre-fetch in a SearchComponent process(), then look up in the DocTransformer.SolrParams, validate field names against the schema.IgnoreCommitOptimizeUpdateProcessorFactory semantics.distributedProcess() — works standalone, breaks silently in SolrCloud (READ SKILL FILE references/01-search-component.md).<lib> directive in modern Solr — deprecated; use Solr packages or the sharedLib directory.</anti_patterns>
<distributed_considerations>
Most plugins work standalone but fail subtly under SolrCloud:
process() runs per shard; cross-shard aggregation requires distributedProcess() / handleResponses() and shard stages. Pure per-doc-result components work without override.RunUpdateProcessor. Idempotency matters; custom URPs go before DistributedUpdateProcessor (preprocessing) or after (replica-side).Always test in a 2+ shard SolrCloud setup before declaring done.
</distributed_considerations>
<plugin_shapes>
Base classes (most come as factory + instance pairs): SearchComponent, DocTransformer + TransformerFactory, QParser + QParserPlugin, UpdateRequestProcessor + UpdateRequestProcessorFactory, ValueSourceParser, RequestHandlerBase.
SearchComponent — override prepare/process/getDescription; register and add to last-components:
<searchComponent name="myComp" class="com.example.MyComponent"/>
<requestHandler name="/select" class="solr.SearchHandler">
<arr name="last-components"><str>myComp</str></arr>
</requestHandler>DocTransformer — factory create(...) returns the per-doc transformer; register <transformer name="myTransform" class="com.example.MyTransformerFactory"/> and use fl=*,result:[myTransform arg=foo].
QParser — plugin createParser(...) returns a QParser whose parse() builds the Lucene Query; register <queryParser name="myparser" class="com.example.MyQParserPlugin"/> and use q={!myparser foo=bar}query body.
See references/ for fully-formed examples.
</plugin_shapes>
<solr_10_deltas>
Most plugin APIs are unchanged in Solr 10. Notable: some deprecated factory methods removed; solr.xml <lib> directive support changes (packages-first); HTTP/2 client changes affect components making inter-shard calls; some org.apache.solr.handler.component.* internals refactored. Default to Solr 9.x answers; mention Solr 10 only when the user is on it or asks.
</solr_10_deltas>
</solr-extending>
© griddynamics, 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
SKILL.md and 7 other files (references) in plugins/core-claude/skills/solr-extending of griddynamics/rosetta.
Open the folder on GitHubat commit 5441232
Solr Extending 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Solr Extending this skillgriddynamics/rosetta | 353 | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Extend Commands APIredis/jedis | 12k | — | ~7.2k | Automated safety check: Warn | MIT | |
| Extend Commands APIredis/lettuce | 5.8k | — | ~7.7k | Automated safety check: Notes | MIT | |
| Unity UrpBesty0728/Unity-Skills | 1.8k | — | ~863 | Automated safety check: Pass | MIT | |
| Video Extendartokun/comfyui-mcp | 793 | — | ~6.4k | Automated safety check: Pass | MIT | |
| Lathe Extenddevenjarvis/lathe | 1.7k | — | ~1.4k | Automated safety check: Pass | MIT |
redis/jedis
Add or extend Redis commands in the Jedis client API — a new core command, a family of new commands, an extension to an existing command's options, or a module command (Search/TimeSeries/JSON/Bloom).
redis/lettuce
Add or extend Redis commands in the Lettuce client API end-to-end — a new core command, a family of new commands, an extension to an existing command's options, or a module/area command…
Besty0728/Unity-Skills
Manage the Universal Render Pipeline (URP). An agent skill from Besty0728/Unity-Skills.
artokun/comfyui-mcp
Extend / continue a video temporally with Pusa 2.2 in ComfyUI.
devenjarvis/lathe
Write the next part of an existing Lathe tutorial, in session.
spinspire/pocketbase-sveltekit-starter
Extend PocketBase with custom hooks and routes in JS or Go. An agent skill from spinspire/pocketbase-sveltekit-starter.
griddynamics/rosetta
Collect GitHub repo health/usage stats into merged JSON. An agent skill from griddynamics/rosetta.
griddynamics/rosetta
Workflow for onboarding an external private library so AI can use it without source access.
griddynamics/rosetta
To connect Rosetta with Grid Dynamics SpecFlow MCP; only when SpecFlow is mentioned and the MCP is installed.
griddynamics/rosetta
To build an AI harness: run, observe, validate, automate repeated work faster — CLI/MCP actions, devcontainers, skills, subagents, hooks, pipelines, automations.
griddynamics/rosetta
To orchestrate parallel coding-agent farms (Claude, Codex, Copilot, Gemini, etc.) on isolated git worktrees.
griddynamics/rosetta
To author, register, and test Rosetta hooks, add a SemanticKind, or debug a hook that won't fire.
To build Solr plugins: SearchComponent, QParser, URP, DocTransformer. Solr Extending is an agent skill from griddynamics/rosetta. To build Solr plugins: SearchComponent, QParser, URP, DocTransformer.
Run `npx skills add griddynamics/rosetta --skill solr-extending -a claude-code`. Or copy the skill folder (plugins/core-claude/skills/solr-extending in griddynamics/rosetta) into .claude/skills/solr-extending in your project. Claude Code loads it when a task matches its description.
Run `npx skills add griddynamics/rosetta --skill solr-extending -a codex`. Or copy the skill folder (plugins/core-claude/skills/solr-extending in griddynamics/rosetta) into .agents/skills/solr-extending in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add griddynamics/rosetta --skill solr-extending -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/solr-extending, .gemini/skills/solr-extending, .github/skills/solr-extending and .opencode/skills/solr-extending in your project.
SKILL.md names no scripts, command-line tools or credentials: Solr Extending is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
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. Review the folder before installing.
Solr Extending is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2k tokens (SKILL.md is roughly 8.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 20k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Solr Extending: Extend Commands API (redis/jedis, 12k stars), Extend Commands API (redis/lettuce, 5.8k stars), Unity Urp (Besty0728/Unity-Skills, 1.8k stars) and Video Extend (artokun/comfyui-mcp, 793 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
griddynamics (a GitHub organization) maintains it in griddynamics/rosetta, which has 353 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on September 29, 2026.
Source: griddynamics/rosetta on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.