opensearch-skills — Claude Code skill: what it does, how to install
Top-level skill to build search applications, configure vector indexes, and query observability logs in OpenSearch.
npx skills add opensearch-project/opensearch-agent-skills --skill opensearch-skills -a claude-codeWhat opensearch-skills does
The skill routes developer requests across search architecture, ingestion, and log analytics. It triggers workflows for BM25, KNN vector search, document chunking from PDF or DOCX into JSONL, and querying log patterns using PPL. It also supports deployment steps for AWS and Aiven.
Under the hood, operations run through scripts/opensearch_ops.py, paired with a local Docker bootstrapper in scripts/start_opensearch.sh and a search UI on port 8765. The setup strictly requires Docker and uv. Without Docker and uv ready on the host, local cluster bootstrap commands will fail. Cloud operations targeting AWS require configured AWS credentials.
What it helps with
- configure hybrid and vector search pipelines in OpenSearch
- parse PDF and DOCX files into JSONL chunks for indexing
- query application logs and trace errors using PPL
- provision OpenSearch instances on AWS or Aiven
Example prompts for the agent
- Set up hybrid search with BM25 and dense vectors for our documentation index
- Query our OpenSearch service logs with PPL to spot recurring error patterns
- Process a folder of PDF reports into JSONL chunks for RAG embeddings
How to install opensearch-skills
1Skills CLI (Vercel)
npx skills add opensearch-project/opensearch-agent-skills --skill opensearch-skills -a claude-code2Manually: put the files in place
~/.claude/skills/opensearch-skills/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/opensearch-skills/
1Skills CLI (Vercel)
npx skills add opensearch-project/opensearch-agent-skills --skill opensearch-skills -a codex2Manually: put the files in place
.agents/skills/opensearch-skills/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add opensearch-project/opensearch-agent-skills --skill opensearch-skills -a cursor2Manually: put the files in place
.cursor/skills/opensearch-skills/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install opensearch-project/opensearch-agent-skills opensearch-skills2Manually: put the files in place
.github/skills/opensearch-skills/SKILL.md1Skills CLI (Vercel)
npx skills add opensearch-project/opensearch-agent-skills --skill opensearch-skills -a gemini-cli2Platform CLI
gemini skills install https://github.com/opensearch-project/opensearch-agent-skills --path skills/opensearch-skillsManually: put the files in place
.devin/skills/opensearch-skills/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add opensearch-project/opensearch-agent-skills --skill opensearch-skills -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about opensearch-skills
How to install opensearch-skills in Claude Code?
Run npx skills add opensearch-project/opensearch-agent-skills --skill opensearch-skills -a claude-code. The skill will be registered in your agent.
What does opensearch-skills do?
It acts as an umbrella skill that routes between search setup, trace debugging, log analytics, and cloud cluster deployment.
What prerequisites are needed to run the tools locally?
You must have Docker and uv installed. If you plan to provision or query clusters on AWS, valid AWS credentials are also required.
Source text
SKILL.md · Apache-2.0
---
name: opensearch-skills
description: >
Build search applications and query log analytics data with OpenSearch.
Use this skill when the user mentions OpenSearch, search app, index setup,
search architecture, semantic search, vector search, hybrid search, BM25,
dense vector, sparse vector, agentic search, RAG, embeddings, KNN, PDF
ingestion, document processing, or any related search topic. Also use for
log analytics and observability — when the user wants to set up log
ingestion, query logs with PPL, analyze error patterns, set up index
lifecycle policies, investigate traces, or check stack health. Activate
even if the user says log analysis, Fluent Bit, Fluentd, Logstash, syslog,
traceId, OpenTelemetry, or log analytics without mentioning OpenSearch.
compatibility: Requires Docker and uv. AWS deployment requires AWS credentials.
metadata:
author: opensearch-project
version: "2.0"
---
# OpenSearch Skills
This is the top-level skill for OpenSearch. It contains four category skills that can also be installed and used independently:
| Category | Skill | Install individually |
|---|---|---|
| [search](search/SKILL.md) | [opensearch-launchpad](search/opensearch-launchpad/SKILL.md) | `npx skills add opensearch-project/opensearch-agent-skills@opensearch-launchpad --full-depth` |
| [observability](observability/SKILL.md) | [log-analytics](observability/log-analytics/SKILL.md) | `npx skills add opensearch-project/opensearch-agent-skills@log-analytics --full-depth` |
| [observability](observability/SKILL.md) | [trace-analytics](observability/trace-analytics/SKILL.md) | `npx skills add opensearch-project/opensearch-agent-skills@trace-analytics --full-depth` |
| [cloud](cloud/SKILL.md) | [aws-setup](cloud/aws-setup/SKILL.md) | `npx skills add opensearch-project/opensearch-agent-skills@aws-setup --full-depth` |
| [cloud](cloud/SKILL.md) | [aiven-setup](cloud/aiven-setup/SKILL.md) | `npx skills add opensearch-project/opensearch-agent-skills@aiven-setup --full-depth` |
| [ingest](ingest/SKILL.md) | [document-processing](ingest/document-processing/SKILL.md) | `npx skills add opensearch-project/opensearch-agent-skills@document-processing --full-depth` |
| [cloud](cloud/SKILL.md) | [managed-ingestion-service](cloud/managed-ingestion-service/SKILL.md) | `npx skills add opensearch-project/opensearch-agent-skills@managed-ingestion-service --full-depth` |
## Routing
Route to the right skill based on user intent:
| User Intent | Skill |
|---|---|
| Build a search app, set up an index, choose a search strategy | [opensearch-launchpad](search/opensearch-launchpad/SKILL.md) |
| Analyze logs, query with PPL, discover error patterns | [log-analytics](observability/log-analytics/SKILL.md) |
| Investigate traces, debug spans, analyze service maps | [trace-analytics](observability/trace-analytics/SKILL.md) |
| Deploy to AWS, provision a domain or collection | [aws-setup](cloud/aws-setup/SKILL.md) |
| Deploy to Aiven, provision a managed OpenSearch service | [aiven-setup](cloud/aiven-setup/SKILL.md) |
| Process documents into chunks (PDF/DOCX → JSONL) | [document-processing](ingest/document-processing/SKILL.md) |
| Ingest chunks at scale via OSIS, S3 to AOS/AOSS | [managed-ingestion-service](cloud/managed-ingestion-service/SKILL.md) |
| General OpenSearch question | Search docs first, then route to the relevant skill |
If the user's intent spans multiple skills (e.g., "build a search app and deploy it to Aiven"), start with the appropriate skill and transition to the next when ready.
## Feedback Collection (Required Behavior)
**This applies to ALL skills in this collection** — opensearch-launchpad, log-analytics, trace-analytics, aws-setup, aiven-setup, document-processing, and managed-ingestion-service. Regardless of which skill is active, you MUST follow these rules.
You MUST proactively collect feedback during every interaction. This is not optional — treat it as a core part of the workflow, not an afterthought.
### Rules
1. **Monitor continuously** — watch for failures, confusion, and unmet needs throughout the conversation, not just at the end.
2. **Offer immediately on failure** — when any command errors or a step doesn't work, immediately offer to capture feedback before troubleshooting.
3. **Offer on uncertainty** — if you're unsure how to proceed or the skill doesn't cover the user's request, flag it as a potential gap and offer to submit.
4. **Ask at natural breakpoints** — after completing a major phase (not just at the very end), ask "Is this working as expected? Any friction so far?"
5. **Always ask at end** — when the user says they're done or the workflow completes, ask for a 1-5 rating.
6. **Never send without consent** — show the preview, get explicit "yes".
### Triggers
| When | What to do |
|------|------------|
| Command returns non-zero exit or error | → Immediately: "That failed. Can I capture this as feedback?" |
| User says "that's not what I wanted" / "this is confusing" / expresses frustration | → "Sounds like friction. Can I note what went wrong?" |
| User asks for something you can't do | → "This isn't supported yet. Can I flag this as a feature gap?" |
| A workaround is needed (something should be simpler) | → "That was more steps than it should be. Can I flag this as friction?" |
| Major phase completes | → "How's it going so far? Any issues?" |
| User says "done" or workflow ends | → "How was the overall experience? (1-5)" |
### How to Submit
Requires `uv` installed (for running Python scripts)
1. Compose the feedback (type + context).
2. Show preview to user.
3. Ask: "May I submit this anonymous feedback?"
4. On consent:
```bash
uv run python scripts/opensearch_ops.py submit-feedback \
--type <failure|gap|friction|success> \
--skill <skill-name> \
--context "<error message, command, what happened>" \
--comment "<user's words>" \
--rating "<1-5, for success only>"
```
### Feedback Types
- `failure` — A command or step produced an error
- `gap` — User needs something the skill doesn't support
- `friction` — Workflow was confusing, slow, or required workarounds
- `success` — Workflow completed, user satisfied
## Shared Resources
All skills share these resources:
- **Scripts**: `scripts/opensearch_ops.py` — CLI for all OpenSearch operations
- **Docker bootstrap**: `scripts/start_opensearch.sh` — Start a local OpenSearch cluster
- **CLI Reference**: [cli-reference.md](cli-reference.md) — Full command reference with examples
- **Search Builder UI**: `scripts/ui/` — React frontend served on port 8765
```bash
bash scripts/start_opensearch.sh
uv run python scripts/opensearch_ops.py <command> [options]
uv run python scripts/opensearch_ops.py --help
```
## Optional MCP Servers
```json
{
"mcpServers": {
"ddg-search": {
"command": "uvx",
"args": ["duckduckgo-mcp-server"]
},
"awslabs.aws-api-mcp-server": {
"command": "uvx",
"args": ["awslabs.aws-api-mcp-server@latest"],
"env": { "FASTMCP_LOG_LEVEL": "ERROR" }
},
"aws-knowledge-mcp-server": {
"command": "uvx",
"args": ["fastmcp", "run", "https://knowledge-mcp.global.api.aws"],
"env": { "FASTMCP_LOG_LEVEL": "ERROR" }
},
"opensearch-mcp-server": {
"command": "uvx",
"args": ["opensearch-mcp-server-py@latest"],
"env": { "FASTMCP_LOG_LEVEL": "ERROR" }
}
}
}
```
## Auto-Installing Missing MCP Servers
Before using any MCP tool, check if the server is available. If missing:
1. Locate the MCP config file:
- Kiro: `.kiro/settings/mcp.json`
- Cursor: `.cursor/mcp.json`
- Claude Code: `.mcp.json`
- VS Code (Copilot): `.vscode/mcp.json`
- Windsurf: `~/.codeium/windsurf/mcp_config.json`
2. Read the existing config (or start with `{"mcpServers": {}}`).
3. Merge in the missing server entry. Do not overwrite existing entries.
4. Save and inform the user to restart or reconnect MCP servers.
## Answering OpenSearch Knowledge Questions
```bash
uv run python scripts/opensearch_ops.py search-docs --query "<your query>"
uv run python scripts/opensearch_ops.py search-docs --query "<query>" --site docs.aws.amazon.com
```
© opensearch-project · Apache-2.0 · opensearch-project/opensearch-agent-skills