Configuration
Configuration file
Sibyl reads its configuration from ~/.sibyl/config.json, created with sensible defaults on first run. It has two sections:
{
"plugins": {
"search": "builtin-searxng-search",
"fetch": "builtin-crawl4ai-fetch",
"parse": "builtin-parse-htmlToMd",
"ask": "builtin-ai-ask"
},
"variables": [
{
"name": "SIBYL_SHOW_SEARCH_DESCRIPTION",
"value": "true"
}
]
}The plugins section
Maps each plugin type (search / fetch / ask / parse) to the name of the plugin to use for it. Exactly one
plugin per type. The value must match a plugin's name (a built-in like builtin-exa-search, or one of your custom-written plugins).
The built-in plugins are:
- SearXNG Search -
builtin-searxng-search - Crawl4AI Fetch -
builtin-crawl4ai-fetch - Exa Search -
builtin-exa-search - Exa Fetch -
builtin-exa-fetch - Firecrawl Search -
builtin-firecrawl-search - Firecrawl Fetch -
builtin-firecrawl-fetch - AlterLab Search -
builtin-alterlab-search - AlterLab Fetch -
builtin-alterlab-fetch - Bright Data Search -
builtin-brightdata-search - Bright Data Fetch -
builtin-brightdata-fetch - AI Ask (Supports OpenAI, Anthropic, Ollama, OpenRouter) -
builtin-ai-ask - HTML to Markdown Parse -
builtin-parse-htmlToMd
The variables section
A list of { name, value } pairs injected into the process environment at startup. Use this to provide secrets and
settings (e.g., API keys) that plugins read via process.env.
Precedence: Variable in the configuration file wins over the environment. A variable defined here overrides any existing environment variable of
the same name; anything not listed here falls back to the real environment. For example, a plugin reading
process.env.EXA_API_KEY gets the configuration value if present, otherwise whatever was exported in your shell.
Plugin environment variables
Each built-in plugin reads the variables below (set them via variables or the real environment, per the precedence rule
above). A required variable causes the plugin to error if it is not set.
All search plugins also honor the following environment variables:
SIBYL_SEARCH_RESULTS_LIMIT(default10): Sibyl passes it to the search provider if it supports a result-count parameter, and always slices the returned results down to this limit.SIBYL_SHOW_SEARCH_DESCRIPTION(defaulttrue): When"true", includes result snippet/description in the output.
Here is a list of all the environment variables for the built-in plugins:
SearXNG Search
| Variable | Required | Default | Description |
|---|---|---|---|
SIBYL_SEARXNG_URL | No | http://localhost:8080 | Base URL of a running SearXNG instance. Sibyl uses /search endpoint with format=json. |
SIBYL_SEARXNG_ENGINES | No | (none) | Comma-separated SearXNG engines to query (e.g. google); omitted when unset. |
SIBYL_SHOW_SEARCH_DESCRIPTION | No | true | When "true", includes result content in the output. |
SIBYL_SEARCH_RESULTS_LIMIT | No | 10 | Maximum number of search results to return; passed to the when supported and always applied by slicing. |
Requires a SearXNG instance with the JSON output format enabled. See more at https://github.com/searxng/searxng/discussions/3542
Crawl4AI Fetch
| Variable | Required | Default | Description |
|---|---|---|---|
SIBYL_CRAWL4AI_URL | No | http://localhost:11235 | Base URL of a running Crawl4AI server. Sibyl uses the /crawl endpoint to fetch the data |
Requires a Crawl4AI server, e.g., via Docker. See more at https://hub.docker.com/r/unclecode/crawl4ai
Exa Search
| Variable | Required | Default | Description |
|---|---|---|---|
EXA_API_KEY | Yes | — | Exa API key. |
SIBYL_SHOW_SEARCH_DESCRIPTION | No | true | When "true", includes result highlights in the output. |
SIBYL_SEARCH_RESULTS_LIMIT | No | 10 | Maximum number of search results to return; passed to the when supported and always applied by slicing. |
Exa Fetch
| Variable | Required | Default | Description |
|---|---|---|---|
EXA_API_KEY | Yes | — | Exa API key. |
Firecrawl Search
| Variable | Required | Default | Description |
|---|---|---|---|
FIRECRAWL_API_KEY | Yes | — | Firecrawl API key (includes the fc- prefix). |
SIBYL_SHOW_SEARCH_DESCRIPTION | No | true | When "true", includes result descriptions in the output. |
SIBYL_SEARCH_RESULTS_LIMIT | No | 10 | Maximum number of search results to return; passed to the when supported and always applied by slicing. |
Firecrawl Fetch
| Variable | Required | Default | Description |
|---|---|---|---|
FIRECRAWL_API_KEY | Yes | — | Firecrawl API key (includes the fc- prefix). |
SIBYL_FIRECRAWL_FETCH_USE_HTML | No | false | When "true", fetches the raw HTML and runs it through the configured parse plugin; otherwise returns the markdown from Firecrawl with extra blank lines collapsed. |
AlterLab Search
| Variable | Required | Default | Description |
|---|---|---|---|
ALTERLAB_API_KEY | Yes | — | AlterLab API key. |
SIBYL_SHOW_SEARCH_DESCRIPTION | No | true | When "true", includes result snippets in the output. |
SIBYL_SEARCH_RESULTS_LIMIT | No | 10 | Maximum number of search results to return; passed to the when supported and always applied by slicing. |
AlterLab Fetch
| Variable | Required | Default | Description |
|---|---|---|---|
ALTERLAB_API_KEY | Yes | — | AlterLab API key. |
Bright Data Search
| Variable | Required | Default | Description |
|---|---|---|---|
BRIGHTDATA_API_KEY | Yes | — | Bright Data API key. |
BRIGHTDATA_SERP_API_ZONE | Yes | — | Bright Data SERP API zone. |
SIBYL_SHOW_SEARCH_DESCRIPTION | No | true | When "true", includes result descriptions in the output. |
BRIGHTDATA_SERP_API_LANGUAGE | No | en | Search language (Google hl). |
BRIGHTDATA_SERP_API_COUNTRY | No | (none) | Search country (Google gl); omitted when unset. |
SIBYL_SEARCH_RESULTS_LIMIT | No | 10 | Maximum number of search results to return; passed to the when supported and always applied by slicing. |
Bright Data Fetch
| Variable | Required | Default | Description |
|---|---|---|---|
BRIGHTDATA_API_KEY | Yes | — | Bright Data API key. |
BRIGHTDATA_WEB_UNLOCKER_API_ZONE | Yes | — | Bright Data Web Unlocker API zone. |
AI Ask
Reads a URL through the configured fetch plugin, then asks an LLM the question against that content. A working fetch plugin must also be configured (plugins.fetch).
| Variable | Required | Default | Description |
|---|---|---|---|
SIBYL_AI_PROVIDER | Yes | — | LLM: one of openai, anthropic, ollama, openrouter. |
SIBYL_MODEL_NAME | Yes | — | Model id passed to the (e.g. gpt-5.4-mini, claude-sonnet-4-6, llama3.1). |
OPENAI_API_KEY | Conditional | — | Required when SIBYL_AI_PROVIDER=openai. |
ANTHROPIC_API_KEY | Conditional | — | Required when SIBYL_AI_PROVIDER=anthropic. |
OPENROUTER_API_KEY | Conditional | — | Required when SIBYL_AI_PROVIDER=openrouter. |
OLLAMA_BASE_URL | No | http://localhost:11434/api | Base URL of a running Ollama server; used only when SIBYL_AI_PROVIDER=ollama (no API key). |
HTML to Markdown Parse
No environment variables.
