mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-23 05:31:23 +00:00
docs: deep audit — fix stale config keys, missing commands, and registry drift (#22784)
* docs: deep audit — fix stale config keys, missing commands, and registry drift Cross-checked ~80 high-impact docs pages (getting-started, reference, top-level user-guide, user-guide/features) against the live registries: hermes_cli/commands.py COMMAND_REGISTRY (slash commands) hermes_cli/auth.py PROVIDER_REGISTRY (providers) hermes_cli/config.py DEFAULT_CONFIG (config keys) toolsets.py TOOLSETS (toolsets) tools/registry.py get_all_tool_names() (tools) python -m hermes_cli.main <subcmd> --help (CLI args) reference/ - cli-commands.md: drop duplicate hermes fallback row + duplicate section, add stepfun/lmstudio to --provider enum, expand auth/mcp/curator subcommand lists to match --help output (status/logout/spotify, login, archive/prune/ list-archived). - slash-commands.md: add missing /sessions and /reload-skills entries + correct the cross-platform Notes line. - tools-reference.md: drop bogus '68 tools' headline, drop fictional 'browser-cdp toolset' (these tools live in 'browser' and are runtime-gated), add missing 'kanban' and 'video' toolset sections, fix MCP example to use the real mcp_<server>_<tool> prefix. - toolsets-reference.md: list browser_cdp/browser_dialog inside the 'browser' row, add missing 'kanban' and 'video' toolset rows, drop the stale '38 tools' count for hermes-cli. - profile-commands.md: add missing install/update/info subcommands, document fish completion. - environment-variables.md: dedupe GMI_API_KEY/GMI_BASE_URL rows (kept the one with the correct gmi-serving.com default). - faq.md: Anthropic/Google/OpenAI examples — direct providers exist (not just via OpenRouter), refresh the OpenAI model list. getting-started/ - installation.md: PortableGit (not MinGit) is what the Windows installer fetches; document the 32-bit MinGit fallback. - installation.md / termux.md: installer prefers .[termux-all] then falls back to .[termux]. - nix-setup.md: Python 3.12 (not 3.11), Node.js 22 (not 20); fix invalid 'nix flake update --flake' invocation. - updating.md: 'hermes backup restore --state pre-update' doesn't exist — point at the snapshot/quick-snapshot flow; correct config key 'updates.pre_update_backup' (was 'update.backup'). user-guide/ - configuration.md: api_max_retries default 3 (not 2); display.runtime_footer is the real key (not display.runtime_metadata_footer); checkpoints defaults enabled=false / max_snapshots=20 (not true / 50). - configuring-models.md: 'hermes model list' / 'hermes model set ...' don't exist — hermes model is interactive only. - tui.md: busy_indicator -> tui_status_indicator with values kaomoji|emoji|unicode|ascii (not kawaii|minimal|dots|wings|none). - security.md: SSH backend keys (TERMINAL_SSH_HOST/USER/KEY) live in .env, not config.yaml. - windows-wsl-quickstart.md: there is no 'hermes api' subcommand — the OpenAI-compatible API server runs inside hermes gateway. user-guide/features/ - computer-use.md: approvals.mode (not security.approval_level); fix broken ./browser-use.md link to ./browser.md. - fallback-providers.md: top-level fallback_providers (not model.fallback_providers); the picker is subcommand-based, not modal. - api-server.md: API_SERVER_* are env vars — write to per-profile .env, not 'hermes config set' which targets YAML. - web-search.md: drop web_crawl as a registered tool (it isn't); deep-crawl modes are exposed through web_extract. - kanban.md: failure_limit default is 2, not '~5'. - plugins.md: drop hard-coded '33 providers' count. - honcho.md: fix unclosed quote in echo HONCHO_API_KEY snippet; document that 'hermes honcho' subcommand is gated on memory.provider=honcho; reconcile subcommand list with actual --help output. - memory-providers.md: legacy 'hermes honcho setup' redirect documented. Verified via 'npm run build' — site builds cleanly; broken-link count went from 149 to 146 (no regressions, fixed a few in passing). * docs: round 2 audit fixes + regenerate skill catalogs Follow-up to the previous commit on this branch: Round 2 manual fixes: - quickstart.md: KIMI_CODING_API_KEY mentioned alongside KIMI_API_KEY; voice-mode and ACP install commands rewritten — bare 'pip install ...' doesn't work for curl-installed setups (no pip on PATH, not in repo dir); replaced with 'cd ~/.hermes/hermes-agent && uv pip install -e ".[voice]"'. ACP already ships in [all] so the curl install includes it. - cli.md / configuration.md: 'auxiliary.compression.model' shown as 'google/gemini-3-flash-preview' (the doc's own claimed default); actual default is empty (= use main model). Reworded as 'leave empty (default) or pin a cheap model'. - built-in-plugins.md: added the bundled 'kanban/dashboard' plugin row that was missing from the table. Regenerated skill catalogs: - ran website/scripts/generate-skill-docs.py to refresh all 163 per-skill pages and both reference catalogs (skills-catalog.md, optional-skills-catalog.md). This adds the entries that were genuinely missing — productivity/teams-meeting-pipeline (bundled), optional/finance/* (entire category — 7 skills: 3-statement-model, comps-analysis, dcf-model, excel-author, lbo-model, merger-model, pptx-author), creative/hyperframes, creative/kanban-video-orchestrator, devops/watchers, productivity/shop-app, research/searxng-search, apple/macos-computer-use — and rewrites every other per-skill page from the current SKILL.md. Most diffs are tiny (one line of refreshed metadata). Validation: - 'npm run build' succeeded. - Broken-link count moved 146 -> 155 — the +9 are zh-Hans translation shells that lag every newly-added skill page (pre-existing pattern). No regressions on any en/ page.
This commit is contained in:
parent
ea2d66ddc0
commit
252d68fd45
181 changed files with 5498 additions and 122 deletions
|
|
@ -16,6 +16,7 @@ Passive domain reconnaissance using Python stdlib. Subdomain discovery, SSL cert
|
|||
|---|---|
|
||||
| Source | Optional — install with `hermes skills install official/research/domain-intel` |
|
||||
| Path | `optional-skills/research/domain-intel` |
|
||||
| Platforms | linux, macos, windows |
|
||||
|
||||
## Reference: full SKILL.md
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ Pharmaceutical research assistant for drug discovery workflows. Search bioactive
|
|||
| Version | `1.0.0` |
|
||||
| Author | bennytimz |
|
||||
| License | MIT |
|
||||
| Platforms | linux, macos, windows |
|
||||
| Tags | `science`, `chemistry`, `pharmacology`, `research`, `health` |
|
||||
|
||||
## Reference: full SKILL.md
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ Free web search via DuckDuckGo — text, news, images, videos. No API key needed
|
|||
| Version | `1.3.0` |
|
||||
| Author | gamedevCloudy |
|
||||
| License | MIT |
|
||||
| Platforms | linux, macos, windows |
|
||||
| Tags | `search`, `duckduckgo`, `web-search`, `free`, `fallback` |
|
||||
| Related skills | [`arxiv`](/docs/user-guide/skills/bundled/research/research-arxiv) |
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ Index a codebase with GitNexus and serve an interactive knowledge graph via web
|
|||
| Version | `1.0.0` |
|
||||
| Author | Hermes Agent + Teknium |
|
||||
| License | MIT |
|
||||
| Platforms | linux, macos, windows |
|
||||
| Tags | `gitnexus`, `code-intelligence`, `knowledge-graph`, `visualization` |
|
||||
| Related skills | [`native-mcp`](/docs/user-guide/skills/bundled/mcp/mcp-native-mcp), [`codebase-inspection`](/docs/user-guide/skills/bundled/github/github-codebase-inspection) |
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ Optional vendor skill for Parallel CLI — agent-native web search, extraction,
|
|||
| Version | `1.1.0` |
|
||||
| Author | Hermes Agent |
|
||||
| License | MIT |
|
||||
| Platforms | linux, macos, windows |
|
||||
| Tags | `Research`, `Web`, `Search`, `Deep-Research`, `Enrichment`, `CLI` |
|
||||
| Related skills | [`duckduckgo-search`](/docs/user-guide/skills/optional/research/research-duckduckgo-search), [`mcporter`](/docs/user-guide/skills/optional/mcp/mcp-mcporter) |
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ Web scraping with Scrapling - HTTP fetching, stealth browser automation, Cloudfl
|
|||
| Version | `1.0.0` |
|
||||
| Author | FEUAZUR |
|
||||
| License | MIT |
|
||||
| Platforms | linux, macos, windows |
|
||||
| Tags | `Web Scraping`, `Browser`, `Cloudflare`, `Stealth`, `Crawling`, `Spider` |
|
||||
| Related skills | [`duckduckgo-search`](/docs/user-guide/skills/optional/research/research-duckduckgo-search), [`domain-intel`](/docs/user-guide/skills/optional/research/research-domain-intel) |
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,229 @@
|
|||
---
|
||||
title: "Searxng Search — Free meta-search via SearXNG — aggregates results from 70+ search engines"
|
||||
sidebar_label: "Searxng Search"
|
||||
description: "Free meta-search via SearXNG — aggregates results from 70+ search engines"
|
||||
---
|
||||
|
||||
{/* This page is auto-generated from the skill's SKILL.md by website/scripts/generate-skill-docs.py. Edit the source SKILL.md, not this page. */}
|
||||
|
||||
# Searxng Search
|
||||
|
||||
Free meta-search via SearXNG — aggregates results from 70+ search engines. Self-hosted or use a public instance. No API key needed. Falls back automatically when the web search toolset is unavailable.
|
||||
|
||||
## Skill metadata
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| Source | Optional — install with `hermes skills install official/research/searxng-search` |
|
||||
| Path | `optional-skills/research/searxng-search` |
|
||||
| Version | `1.0.0` |
|
||||
| Author | hermes-agent |
|
||||
| License | MIT |
|
||||
| Platforms | linux, macos |
|
||||
| Tags | `search`, `searxng`, `meta-search`, `self-hosted`, `free`, `fallback` |
|
||||
| Related skills | [`duckduckgo-search`](/docs/user-guide/skills/optional/research/research-duckduckgo-search), [`domain-intel`](/docs/user-guide/skills/optional/research/research-domain-intel) |
|
||||
|
||||
## Reference: full SKILL.md
|
||||
|
||||
:::info
|
||||
The following is the complete skill definition that Hermes loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.
|
||||
:::
|
||||
|
||||
# SearXNG Search
|
||||
|
||||
Free meta-search using [SearXNG](https://searxng.org/) — a privacy-respecting, self-hosted search aggregator that queries 70+ search engines simultaneously.
|
||||
|
||||
**No API key required** when using a public instance. Can also be self-hosted for full control. Automatically appears as a fallback when the main web search toolset (`FIRECRAWL_API_KEY`) is not configured.
|
||||
|
||||
## Configuration
|
||||
|
||||
SearXNG requires a `SEARXNG_URL` environment variable pointing to your SearXNG instance:
|
||||
|
||||
```bash
|
||||
# Public instances (no setup required)
|
||||
SEARXNG_URL=https://searxng.example.com
|
||||
|
||||
# Self-hosted SearXNG
|
||||
SEARXNG_URL=http://localhost:8888
|
||||
```
|
||||
|
||||
If no instance is configured, this skill is unavailable and the agent falls back to other search options.
|
||||
|
||||
## Detection Flow
|
||||
|
||||
Check what is actually available before choosing an approach:
|
||||
|
||||
```bash
|
||||
# Check if SEARXNG_URL is set and the instance is reachable
|
||||
curl -s --max-time 5 "${SEARXNG_URL}/search?q=test&format=json" | head -c 200
|
||||
```
|
||||
|
||||
Decision tree:
|
||||
1. If `SEARXNG_URL` is set and the instance responds, use SearXNG
|
||||
2. If `SEARXNG_URL` is unset or unreachable, fall back to other available search tools
|
||||
3. If the user wants SearXNG specifically, help them set up an instance or find a public one
|
||||
|
||||
## Method 1: CLI via curl (Preferred)
|
||||
|
||||
Use `curl` via `terminal` to call the SearXNG JSON API. This avoids assuming any particular Python package is installed.
|
||||
|
||||
```bash
|
||||
# Text search (JSON output)
|
||||
curl -s --max-time 10 \
|
||||
"${SEARXNG_URL}/search?q=python+async+programming&format=json&engines=google,bing&limit=10"
|
||||
|
||||
# With Safesearch off
|
||||
curl -s --max-time 10 \
|
||||
"${SEARXNG_URL}/search?q=example&format=json&safesearch=0"
|
||||
|
||||
# Specific categories (general, news, science, etc.)
|
||||
curl -s --max-time 10 \
|
||||
"${SEARXNG_URL}/search?q=AI+news&format=json&categories=news"
|
||||
```
|
||||
|
||||
### Common CLI Flags
|
||||
|
||||
| Flag | Description | Example |
|
||||
|------|-------------|---------|
|
||||
| `q` | Query string (URL-encoded) | `q=python+async` |
|
||||
| `format` | Output format: `json`, `csv`, `rss` | `format=json` |
|
||||
| `engines` | Comma-separated engine names | `engines=google,bing,ddg` |
|
||||
| `limit` | Max results per engine (default 10) | `limit=5` |
|
||||
| `categories` | Filter by category | `categories=news,science` |
|
||||
| `safesearch` | 0=none, 1=moderate, 2=strict | `safesearch=0` |
|
||||
| `time_range` | Filter: `day`, `week`, `month`, `year` | `time_range=week` |
|
||||
|
||||
### Parsing JSON Results
|
||||
|
||||
```bash
|
||||
# Extract titles and URLs from JSON
|
||||
curl -s --max-time 10 "${SEARXNG_URL}/search?q=fastapi&format=json&limit=5" \
|
||||
| python3 -c "
|
||||
import json, sys
|
||||
data = json.load(sys.stdin)
|
||||
for r in data.get('results', []):
|
||||
print(r.get('title',''))
|
||||
print(r.get('url',''))
|
||||
print(r.get('content','')[:200])
|
||||
print()
|
||||
"
|
||||
```
|
||||
|
||||
Returns per result: `title`, `url`, `content` (snippet), `engine`, `parsed_url`, `img_src`, `thumbnail`, `author`, `published_date`
|
||||
|
||||
## Method 2: Python API via `requests`
|
||||
|
||||
Use the SearXNG REST API directly from Python with the `requests` library:
|
||||
|
||||
```python
|
||||
import os, requests, urllib.parse
|
||||
|
||||
base_url = os.environ.get("SEARXNG_URL", "")
|
||||
if not base_url:
|
||||
raise RuntimeError("SEARXNG_URL is not set")
|
||||
|
||||
query = "fastapi deployment guide"
|
||||
params = {
|
||||
"q": query,
|
||||
"format": "json",
|
||||
"limit": 5,
|
||||
"engines": "google,bing",
|
||||
}
|
||||
|
||||
resp = requests.get(f"{base_url}/search", params=params, timeout=10)
|
||||
resp.raise_for_status()
|
||||
data = resp.json()
|
||||
|
||||
for r in data.get("results", []):
|
||||
print(r["title"])
|
||||
print(r["url"])
|
||||
print(r.get("content", "")[:200])
|
||||
print()
|
||||
```
|
||||
|
||||
## Method 3: searxng-data Python Package
|
||||
|
||||
For more structured access, install the `searxng-data` package:
|
||||
|
||||
```bash
|
||||
pip install searxng-data
|
||||
```
|
||||
|
||||
```python
|
||||
from searxng_data import engines
|
||||
|
||||
# List available engines
|
||||
print(engines.list_engines())
|
||||
```
|
||||
|
||||
Note: This package only provides engine metadata, not the search API itself.
|
||||
|
||||
## Self-Hosting SearXNG
|
||||
|
||||
To run your own SearXNG instance:
|
||||
|
||||
```bash
|
||||
# Using Docker
|
||||
docker run -d -p 8888:8080 \
|
||||
-v $(pwd)/searxng:/etc/searxng \
|
||||
searxng/searxng:latest
|
||||
|
||||
# Then set
|
||||
SEARXNG_URL=http://localhost:8888
|
||||
```
|
||||
|
||||
Or install via pip:
|
||||
```bash
|
||||
pip install searxng
|
||||
# Edit /etc/searxng/settings.yml
|
||||
searxng-run
|
||||
```
|
||||
|
||||
Public SearXNG instances are available at:
|
||||
- `https://searxng.example.com` (replace with any public instance)
|
||||
|
||||
## Workflow: Search then Extract
|
||||
|
||||
SearXNG returns titles, URLs, and snippets — not full page content. To get full page content, search first and then extract the most relevant URL with `web_extract`, browser tools, or `curl`.
|
||||
|
||||
```bash
|
||||
# Search for relevant pages
|
||||
curl -s "${SEARXNG_URL}/search?q=fastapi+deployment&format=json&limit=3"
|
||||
# Output: list of results with titles and URLs
|
||||
|
||||
# Then extract the best URL with web_extract
|
||||
```
|
||||
|
||||
## Limitations
|
||||
|
||||
- **Instance availability**: If the SearXNG instance is down or unreachable, search fails. Always check `SEARXNG_URL` is set and the instance is reachable.
|
||||
- **No content extraction**: SearXNG returns snippets, not full page content. Use `web_extract`, browser tools, or `curl` for full articles.
|
||||
- **Rate limiting**: Some public instances limit requests. Self-hosting avoids this.
|
||||
- **Engine coverage**: Available engines depend on the SearXNG instance configuration. Some engines may be disabled.
|
||||
- **Results freshness**: Meta-search aggregates external engines — result freshness depends on those engines.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
| Problem | Likely Cause | What To Do |
|
||||
|---------|--------------|------------|
|
||||
| `SEARXNG_URL` not set | No instance configured | Use a public SearXNG instance or set up your own |
|
||||
| Connection refused | Instance not running or wrong URL | Check the URL is correct and the instance is running |
|
||||
| Empty results | Instance blocks the query | Try a different instance or self-host |
|
||||
| Slow responses | Public instance under load | Self-host or use a less-loaded public instance |
|
||||
| `json` format not supported | Old SearXNG version | Try `format=rss` or upgrade SearXNG |
|
||||
|
||||
## Pitfalls
|
||||
|
||||
- **Always set `SEARXNG_URL`**: Without it, the skill cannot function.
|
||||
- **URL-encode queries**: Spaces and special characters must be URL-encoded in curl, or use `urllib.parse.quote()` in Python.
|
||||
- **Use `format=json`**: The default format may not be machine-readable. Always request JSON explicitly.
|
||||
- **Set a timeout**: Always use `--max-time` or `timeout=` to avoid hanging on unreachable instances.
|
||||
- **Self-hosting is best**: Public instances may go down, rate-limit, or block. A self-hosted instance is reliable.
|
||||
|
||||
## Instance Discovery
|
||||
|
||||
If `SEARXNG_URL` is not set and the user asks about SearXNG, help them either:
|
||||
1. Find a public SearXNG instance (search for "public searxng instance")
|
||||
2. Set up their own with Docker or pip
|
||||
|
||||
Public instances are listed at: https://searxng.org/
|
||||
Loading…
Add table
Add a link
Reference in a new issue