{"repo":"NousResearch/hermes-agent","public_id":"983","display_label":"Add Parallel CLI research skill feature","summary":"These issues and pull requests all concern adding a new skill for web search, extraction, and deep research via parallel-cli. The members appear to be duplicates or closely related submissions of the same feature request and implementation.","subsystem":"optional-skills/research","counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":2,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":1301},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"stale","last_verified_at":"2026-03-14T13:24:16+00:00","is_stale":true},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.3933333333333333},"fix_edges":[{"issue_number":984,"pr_number":1301,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":983,"title":"Feature: Parallel CLI Skill — Web Search, Extraction, Deep Research & Enrichment via parallel-cli","url":null,"state":"closed"},{"kind":"issue","number":984,"title":"Feature: Parallel CLI Skill — Web Search, Extraction, Deep Research & Enrichment via parallel-cli","url":null,"state":"closed"},{"kind":"pr","number":985,"title":"feat: add Parallel CLI research skill","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#1301","number":1301}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":1301,"title":"feat: add Parallel CLI research skill","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["skills/research/parallel-cli/SKILL.md"],"fix_hunks":[{"file":"skills/research/parallel-cli/SKILL.md","hunks":["@@ -0,0 +1,390 @@\n+---\n+name: parallel-cli\n+description: Optional vendor skill for Parallel CLI — agent-native web search, extraction, deep research, enrichment, FindAll, and monitoring. Prefer JSON output and non-interactive flows.\n+version: 1.1.0\n+author: Hermes Agent\n+license: MIT\n+metadata:\n+  hermes:\n+    tags: [Research, Web, Search, Deep-Research, Enrichment, CLI]\n+    related_skills: [duckduckgo-search, mcporter]\n+---\n+\n+# Parallel CLI\n+\n+Use `parallel-cli` when the user explicitly wants Parallel, or when a terminal-native workflow would benefit from Parallel's vendor-specific stack for web search, extraction, deep research, enrichment, entity discovery, or monitoring.\n+\n+This is an optional third-party workflow, not a Hermes core capability.\n+\n+Important expectations:\n+- Parallel is a paid service with a free tier, not a fully free local tool.\n+- It overlaps with Hermes native `web_search` / `web_extract`, so do not prefer it by default for ordinary lookups.\n+- Prefer this skill when the user mentions Parallel specifically or needs capabilities like Parallel's enrichment, FindAll, or monitor workflows.\n+\n+`parallel-cli` is designed for agents:\n+- JSON output via `--json`\n+- Non-interactive command execution\n+- Async long-running jobs with `--no-wait`, `status`, and `poll`\n+- Context chaining with `--previous-interaction-id`\n+- Search, extract, research, enrichment, entity discovery, and monitoring in one CLI\n+\n+## When to use it\n+\n+Prefer this skill when:\n+- The user explicitly mentions Parallel or `parallel-cli`\n+- The task needs richer workflows than a simple one-shot search/extract pass\n+- You need async deep research jobs that can be launched and polled later\n+- You need structured enrichment, FindAll entity discovery, or monitoring\n+\n+Prefer Hermes native `web_search` / `web_extract` for quick one-off lookups when Parallel is not specifically requested.\n+\n+## Installation\n+\n+Try the least invasive install path available for the environment.\n+\n+### Homebrew\n+\n+```bash\n+brew install parallel-web/tap/parallel-cli\n+```\n+\n+### npm\n+\n+```bash\n+npm install -g parallel-web-cli\n+```\n+\n+### Python package\n+\n+```bash\n+pip install \"parallel-web-tools[cli]\"\n+```\n+\n+### Standalone installer\n+\n+```bash\n+curl -fsSL https://parallel.ai/install.sh | bash\n+```\n+\n+If you want an isolated Python install, `pipx` can also work:\n+\n+```bash\n+pipx install \"parallel-web-tools[cli]\"\n+pipx ensurepath\n+```\n+\n+## Authentication\n+\n+Interactive login:\n+\n+```bash\n+parallel-cli login\n+```\n+\n+Headless / SSH / CI:\n+\n+```bash\n+parallel-cli login --device\n+```\n+\n+API key environment variable:\n+\n+```bash\n+export PARALLEL_API_KEY=\"***\"\n+```\n+\n+Verify current auth status:\n+\n+```bash\n+parallel-cli auth\n+```\n+\n+If auth requires browser interaction, run with `pty=true`.\n+\n+## Core rule set\n+\n+1. Always prefer `--json` when you need machine-readable output.\n+2. Prefer explicit arguments and non-interactive flows.\n+3. For long-running jobs, use `--no-wait` and then `status` / `poll`.\n+4. Cite only URLs returned by the CLI output.\n+5. Save large JSON outputs to a temp file when follow-up questions are likely.\n+6. Use background processes only for genuinely long-running workflows; otherwise run in foreground.\n+7. Prefer Hermes native tools unless the user wants Parallel specifically or needs Parallel-only workflows.\n+\n+## Quick reference\n+\n+```text\n+parallel-cli\n+├── auth\n+├── login\n+├── logout\n+├── search\n+├── extract / fetch\n+├── research run|status|poll|processors\n+├── enrich run|status|poll|plan|suggest|deploy\n+├── findall run|ingest|status|poll|result|enrich|extend|schema|cancel\n+└── monitor create|list|get|update|delete|events|event-group|simulate\n+```\n+\n+## Common flags and patterns\n+\n+Commonly useful flags:\n+- `--json` for structured output\n+- `--no-wait` for async jobs\n+- `--previous-interaction-id <id>` for follow-up tasks that reuse earlier context\n+- `--max-results <n>` for search result count\n+- `--mode one-shot|agentic` for search behavior\n+- `--include-domains domain1.com,domain2.com`\n+- `--exclude-domains domain1.com,domain2.com`\n+- `--after-date YYYY-MM-DD`\n+\n+Read from stdin when convenient:\n+\n+```bash\n+echo \"What is the latest funding for Anthropic?\" | parallel-cli search - --json\n+echo \"Research question\" | parallel-cli research run - --json\n+```\n+\n+## Search\n+\n+Use for current web lookups with structured results.\n+\n+```bash\n+parallel-cli search \"What is Anthropic's latest AI model?\" --json\n+parallel-cli search \"SEC filings for Apple\" --include-domains sec.gov --json\n+parallel-cli search \"bitcoin price\" --after-date 2026-01-01 --max-results 10 --json\n+parallel-cli search \"latest browser benchmarks\" --mode one-shot --json\n+parallel-cli search \"AI coding agent enterprise reviews\" --mode agentic --json\n+```\n+\n+Useful constraints:\n+- `--include-domains` to narrow trusted sources\n+- `--exclude-domains` to strip noisy domains\n+- `--after-date` for recency filtering\n+- `--max-results` when you need broader coverage\n+\n+If you expect follow-up questions, save output:\n+\n+```bash\n+parallel-cli search \"latest React 19 changes\" --json -o /tmp/react-19-search.json\n+```\n+\n+When summarizing results:\n+- lead with the answer\n+- include dates, names, and concrete facts\n+- cite only returned sources\n+- avoid inventing URLs or source titles\n+\n+## Extraction\n+\n+Use to pull clean content or markdown from a URL.\n+\n+```bash\n+parallel-cli extract https://example.com --json\n+parallel-cli extract https://company.com --objective \"Find pricing info\" --json\n+parallel-cli extract https://example.com --full-content --json\n+parallel-cli fetch https://example.com --json\n+```\n+\n+Use `--objective` when the page is broad and you only need one slice of information.\n+\n+## Deep research\n+\n+Use for deeper multi-step research tasks that may take time.\n+\n+Common processor tiers:\n+- `lite` / `base` for faster, cheaper passes\n+- `core` / `pro` for more thorough synthesis\n+- `ultra` for the heaviest research jobs\n+\n+### Synchronous\n+\n+```bash\n+parallel-cli research run \\\n+  \"Compare the leading AI coding agents by pricing, model support, and enterprise controls\" \\\n+  --processor core \\\n+  --json\n+```\n+\n+### Async launch + poll\n+\n+```bash\n+parallel-cli research run \\\n+  \"Compare the leading AI coding agents by pricing, model support, and enterprise controls\" \\\n+  --processor ultra \\\n+  --no-wait \\\n+  --json\n+\n+parallel-cli research status trun_xxx --json\n+parallel-cli research poll trun_xxx --json\n+parallel-cli research processors --json\n+```\n+\n+### Context chaining / follow-up\n+\n+```bash\n+parallel-cli research run \"What are the top AI coding agents?\" --json\n+parallel-cli research run \\\n+  \"What enterprise controls does the top-ranked one offer?\" \\\n+  --previous-interaction-id trun_xxx \\\n+  --json\n+```\n+\n+Recommended Hermes workflow:\n+1. launch with `--no-wait --json`\n+2. capture the returned run/task ID\n+3. if the user wants to continue other work, keep moving\n+4. later call `status` or `poll`\n+5. summarize the final report with citations from the returned sources\n+\n+## Enrichment\n+\n+Use when the user has CSV/JSON/tabular inputs and wants additional columns inferred from web research.\n+\n+### Suggest columns\n+\n+```bash\n+parallel-cli enrich suggest \"Find the CEO and annual revenue\" --json\n+```\n+\n+### Plan a config\n+\n+```bash\n+parallel-cli enrich plan -o config.yaml\n+```\n+\n+### Inline data\n+\n+```bash\n+parallel-cli enrich run \\\n+  --data '[{\"company\": \"Anthropic\"}, {\"company\": \"Mistral\"}]' \\\n+  --intent \"Find headquarters and employee count\" \\\n+  --json\n+```\n+\n+### Non-interactive file run\n+\n+```bash\n+parallel-cli enrich run \\\n+  --source-type csv \\\n+  --source companies.csv \\\n+  --target enriched.csv \\\n+  --source-columns '[{\"name\": \"company\", \"description\": \"Company name\"}]' \\\n+  --intent \"Find the CEO and annual revenue\"\n+```\n+\n+### YAML config run\n+\n+```bash\n+parallel-cli enrich run config.yaml\n+```\n+\n+### Status / polling\n+\n+```bash\n+parallel-cli enrich status <task_group_id> --json\n+parallel-cli enrich poll <task_group_id> --json\n+```\n+\n+Use explicit JSON arrays for column definitions when operating non-interactively.\n+Validate the output file before reporting success.\n+\n+## FindAll\n+\n+Use for web-scale entity discovery when the user wants a discovered dataset rather than a short answer.\n+\n+```bash\n+parallel-cli findall run \"Find AI coding agent startups with enterprise offerings\" --json\n+parallel-cli findall run \"AI startups in healthcare\" -n 25 --json\n+parallel-cli findall status <run_id> --json\n+parallel-cli findall poll <run_id> --json\n+parallel-cli findall result <run_id> --json\n+parallel-cli findall schema <run_id> --json\n+```\n+\n+This is a better fit than ordinary search when the user wants a discovered set of entities that can be reviewed, filtered, or enriched later.\n+\n+## Monitor\n+\n+Use for ongoing change detection over time.\n+\n+```bash\n+parallel-cli monitor list --json\n+parallel-cli monitor get <monitor_id> --json\n+parallel-cli monitor events <monitor_id> --json\n+parallel-cli monitor delete <monitor_id> --json\n+```\n+\n+Creation is usually the sensitive part because cadence and delivery matter:\n+\n+```bash\n+parallel-cli monitor create --help\n+```\n+\n+Use this when the user wants recurring tracking of a page or source rather than a one-time fetch.\n+\n+## Recommended Hermes usage patterns\n+\n+### Fast answer with citations\n+1. Run `parallel-cli search ... --json`\n+2. Parse titles, URLs, dates, excerpts\n+3. Summarize with inline citations from the returned URLs only\n+\n+### URL investigation\n+1. Run `parallel-cli extract URL --json`\n+2. If needed, rerun with `--objective` or `--full-content`\n+3. Quote or summarize the extracted markdown\n+\n+### Long research workflow\n+1. Run `parallel-cli research run ... --no-wait --json`\n+2. Store the returned ID\n+3. Continue other work or periodically poll\n+4. Summarize the final report with citations\n+\n+### Structured enrichment workflow\n+1. Inspect the input file and columns\n+2. Use `enrich suggest` or provide explicit enriched columns\n+3. Run `enrich run`\n+4. Poll for completion if needed\n+5. Validate the output file before reporting success\n+\n+## Error handling and exit codes\n+\n+The CLI documents these exit codes:\n+- `0` success\n+- `2` bad input\n+- `3` auth error\n+- `4` API error\n+- `5` timeout\n+\n+If you hit auth errors:\n+1. check `parallel-cli auth`\n+2. confirm `PARALLEL_API_KEY` or run `parallel-cli login` / `parallel-cli login --device`\n+3. verify `parallel-cli` is on `PATH`\n+\n+## Maintenance\n+\n+Check current auth / install state:\n+\n+```bash\n+parallel-cli auth\n+parallel-cli --help\n+```\n+\n+Update commands:\n+\n+```bash\n+parallel-cli update\n+pip install --upgrade parallel-web-tools\n+parallel-cli config auto-update-check off\n+```\n+\n+## Pitfalls\n+\n+- Do not omit `--json` unless the user explicitly wants human-formatted output.\n+- Do not cite sources not present in the CLI output.\n+- `login` may require PTY/browser interaction.\n+- Prefer foreground execution for short tasks; do not overuse background processes.\n+- For large result sets, save JSON to `/tmp/*.json` instead of stuffing everything into context.\n+- Do not silently choose Parallel when Hermes native tools are already sufficient.\n+- Remember this is a vendor workflow that usually requires account auth and paid usage beyond the free tier.\n"]}]}],"trust":{"default_tier":"verified","includes_suggested":false}}