brave/brave-search-skills · Official

answers

USE FOR AI-grounded answers via OpenAI-compatible /chat/completions. Two modes: single-search (fast) or deep research (enable_research=true, thorough multi-search). Streaming/blocking. Citations.

Hot #3513 First seen Feb 13, 2026

Installation

$ npx skills add brave/brave-search-skills --skill answers

Also in this package

Other skills from brave/brave-search-skills · top by installs.

npx skills add brave/brave-search-skills

Browse all from brave/brave-search-skills

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 174
License LICENSE
Default branch main
Open issues 3
Status Active

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 9,341 B
  • docs SUMMARY.md 3,897 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 964 installs

SKILL.md

Answers — AI Grounding

Requires API Key: Get one at https://api.search.brave.com

Plan: Included in the Answers plan. See https://api-dashboard.search.brave.com/app/subscriptions/subscribe

When to Use

| Use Case | Skill | Why | |--|--|--| | Quick factual answer (raw context) | llm-context | Single search, returns raw context for YOUR LLM | | Fast AI answer with citations | answers (single-search) | streaming, citations | | Thorough multi-search deep research | answers (research mode) | Iterative deep research, synthesized cited answer |

This endpoint (/res/v1/chat/completions) supports two modes:

  • Single-search (default): Fast AI-grounded answer from a single search. Supports enable_citations.
  • Research (enable_research=true): Multi-iteration deep research with progress events and synthesized cited answer.

Quick Start (cURL)

Blocking (Single-Search)

curl -X POST "https://api.search.brave.com/res/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -d '{
    "messages": [{"role": "user", "content": "How does the James Webb Space Telescope work?"}],
    "stream": false
  }'

Streaming with Citations (Single-Search)

curl -X POST "https://api.search.brave.com/res/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -d '{
    "messages": [{"role": "user", "content": "What are recent breakthroughs in fusion energy?"}],
    "stream": true,
    "enable_citations": true
  }'

Research Mode

curl -X POST "https://api.search.brave.com/res/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -d '{
    "messages": [{"role": "user", "content": "Compare quantum computing approaches"}],
    "stream": true,
    "enable_research": true,
    "research_maximum_number_of_iterations": 3,
    "research_maximum_number_of_seconds": 120
  }'

Endpoint

POST https://api.search.brave.com/res/v1/chat/completions

Authentication: X-Subscription-Token: <APIKEY> header (or Authorization: Bearer <APIKEY>)

SDK Compatible: Works with OpenAI SDK via base_url="https://api.search.brave.com/res/v1";

Two Modes

| Feature | Single-Search (default) | Research (enableresearch=true) | |--|--|--| | Speed | Fast | Slow | | Searches | 1 | Multiple (iterative) | | Streaming | Optional (stream=true/false) | Required (stream=true) | | Citations | enablecitations=true (streaming only) | Built-in (in <answer> tag) | | Progress events | No | Yes (<progress> tags) | | Blocking response | Yes (stream=false) | No |

Parameters

Standard Parameters

| Parameter | Type | Required | Default | Description | |--|--|--|--|--| | messages | array | Yes | - | Single user message (exactly 1 message) | | stream | bool | No | true | Enable SSE streaming | | country | string | No | "US" | Search country (2-letter country code or ALL) | | language | string | No | "en" | Response language | | safesearch | string | No | "moderate" | Search safety level (off, moderate, strict) | | maxcompletiontokens | int | No | null | Upper bound on completion tokens | | enablecitations | bool | No | false | Include inline citation tags (single-search streaming only) | | websearchoptions | object | No | null | OpenAI-compatible; searchcontext_size: low, medium, high |

Research Parameters

| Parameter | Type | Required | Default | Description | |--|--|--|--|--| | enableresearch | bool | No | false | Enable research mode | | researchallowthinking | bool | No | true | Enable extended thinking | | researchmaximumnumberoftokensperquery | int | No | 8192 | Max tokens per query (1024-16384) | | researchmaximumnumberofqueries | int | No | 20 | Max total search queries (1-50) | | researchmaximumnumberofiterations | int | No | 4 | Max research iterations (1-5) | | researchmaximumnumberofseconds | int | No | 180 | Time budget in seconds (1-300) | | researchmaximumnumberofresultsper_query | int | No | 60 | Results per search query (1-60) |

Constraints (IMPORTANT)

| Constraint | Error | |--|--| | enableresearch=true requires stream=true | "Blocking response doesn't support 'enableresearch' option" | | enableresearch=true incompatible with enablecitations=true | "Research mode doesn't support 'enablecitations' option" | | enablecitations=true requires stream=true | "Blocking response doesn't support 'enable_citations' option" |

OpenAI SDK Usage

Blocking (Single-Search)

from openai import OpenAI

client = OpenAI(
    base_url="https://api.search.brave.com/res/v1",
    api_key="your-brave-api-key",
)

response = client.chat.completions.create(
    model="brave",
    messages=[{"role": "user", "content": "How does the James Webb Space Telescope work?"}],
    stream=False,
)
print(response.choices[0].message.content)

Streaming with Citations (Single-Search)

from openai import OpenAI

client = OpenAI(
    base_url="https://api.search.brave.com/res/v1",
    api_key="your-brave-api-key",
)

stream = client.chat.completions.create(
    model="brave",
    messages=[{"role": "user", "content": "What are the current trends in renewable energy?"}],
    stream=True,
    extra_body={"enable_citations": True}
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

Research Mode

from openai import AsyncOpenAI

client = AsyncOpenAI(
    base_url="https://api.search.brave.com/res/v1",
    api_key="your-brave-api-key",
)

stream = await client.chat.completions.create(
    model="brave",
    messages=[{"role": "user", "content": "Compare quantum computing approaches"}],
    stream=True,
    extra_body={
        "enable_research": True,
        "research_maximum_number_of_iterations": 3,
        "research_maximum_number_of_seconds": 120
    }
)

async for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Response Format

Blocking Response (stream=false, single-search only)

Standard OpenAI-compatible JSON:

{
  "id": "chatcmpl-...",
  "object": "chat.completion",
  "choices": [{"message": {"role": "assistant", "content": "The James Webb Space Telescope works by..."}, "index": 0, "finish_reason": "stop"}],
  "usage": {"prompt_tokens": 10, "completion_tokens": 50, "total_tokens": 60}
}

Streaming Response

SSE response with OpenAI-compatible chunks:

data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"content":"Based on"},"index":0}]}

data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"content":" recent research"},"index":0}]}

data: [DONE]

Streaming Tags by Mode

Single-Search (with enable_citations=true)

| Tag | Purpose | |--|--| | <citation> | Inline citation references | | <usage> | JSON cost/billing data |

Research Mode

| Tag | Purpose | Keep? | |--|--|--| | <queries> | Generated search queries | Debug | | <analyzing> | URL counts (verbose) | Debug | | <thinking> | URL selection reasoning | Debug | | <progress> | Stats: time, iterations, queries, URLs analyzed, tokens | Monitor | | <blindspots> | Knowledge gaps identified | Yes | | <answer> | Final synthesized answer (only the final answer is emitted; intermediate drafts are dropped) | Yes | | <usage> | JSON cost/billing data (included at end of streaming response) | Yes |

Usage Tag Format

The <usage> tag contains JSON-stringified cost and token data:

<usage>{"X-Request-Requests":1,"X-Request-Queries":8,"X-Request-Tokens-In":15000,"X-Request-Tokens-Out":2000,"X-Request-Requests-Cost":0.005,"X-Request-Queries-Cost":0.032,"X-Request-Tokens-In-Cost":0.075,"X-Request-Tokens-Out-Cost":0.01,"X-Request-Total-Cost":0.122}</usage>

Use Cases

  • Chat interface integration: Drop-in OpenAI SDK replacement with web-grounded answers. Set base_url="https://api.search.brave.com/res/v1";.
  • Deep research / comprehensive topic research: Use research mode (enable_research=true) for complex questions needing multi-source synthesis (e.g., "Compare approaches to nuclear fusion").
  • OpenAI SDK drop-in: Same SDK, same streaming format — just change baseurl and apikey. Works with both sync and async clients.
  • Cited answers: Enable enable_citations=true in single-search mode for inline citation tags, or use research mode which automatically includes citations in its answer.

Notes

  • Timeout: Set client timeout to at least 30s for single-search, 300s (5 min) for research
  • Single message: The messages array must contain exactly 1 user message
  • Cost monitoring: Parse the <usage> tag from streaming responses to track costs