stock-search v1.0.0 (new) + stock-search-research v1.0.0 (new) + ltx-video-pipeline, better-search, better-search-research, deep-web-research, ai-brain-kb, ai-vid-stock updates (2026-07-22)
This commit is contained in:
+83
-33
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: deep-web-research
|
||||
description: Exhaustive deep web research — six-move flow, external findings ledger, mechanical saturation check, disconfirmation, condensation from disk. Domain-aware tool selection with adaptive re-strategizing. Opt-in skill for the research profile.
|
||||
version: 2.1.0
|
||||
version: 2.6.0
|
||||
author: Hermes Agent
|
||||
---
|
||||
|
||||
@@ -15,7 +15,7 @@ exhaustive research methodology.
|
||||
|
||||
These persist across all turns — they are in the skill, not in fading context:
|
||||
|
||||
- **Confined to /tmp.** All file writes go to `/tmp/`. Never write outside /tmp.
|
||||
- **Confined to /tmp.** All file writes go to `/tmp/`. Never write outside /tmp. **Exception:** The final condensed report (Move 5) and the abort report (Under-Specified Question Handling) go to `/home/n8n/workspace/research/results/` (absolute path, create the directory first with `mkdir -p`). Also, any file path the operator names explicitly in the prompt (e.g., Stage 3 fix pass editing a plan file in place). The ledger and gate files stay in /tmp.
|
||||
- **No self-provisioning.** Never install software. No pip, npm, apt, docker, or
|
||||
any package manager. Use only what's already configured.
|
||||
- **No repeat searches.** If you catch yourself searching the same thing twice,
|
||||
@@ -66,7 +66,7 @@ static reference, not generated per-question.
|
||||
|
||||
At 600 turns, early findings scroll out of context. The ledger is the fix.
|
||||
|
||||
**Path:** `/tmp/research-<session-id>.md`
|
||||
**Path:** `/tmp/research-<YYYY-MM-DD>-<slug>.md` (see Move 0 — the stem is picked once, not derived from session_id)
|
||||
|
||||
**Schema per finding:**
|
||||
```
|
||||
@@ -114,9 +114,21 @@ This skill runs headless — there is no operator to ask clarifying questions. I
|
||||
|
||||
**What to do instead of guessing:**
|
||||
1. Do NOT start Move 0. Do NOT begin the ledger.
|
||||
2. Write to stderr / final report:
|
||||
2. Write the abort report to the results path so the dispatcher can find it:
|
||||
|
||||
```
|
||||
mkdir -p /home/n8n/workspace/research/results
|
||||
```
|
||||
|
||||
Then write to `/home/n8n/workspace/research/results/<YYYY-MM-DD>-<slug>-ABORTED.md`:
|
||||
|
||||
```
|
||||
---
|
||||
question: "<original question>"
|
||||
date: <YYYY-MM-DD>
|
||||
status: ABORTED
|
||||
---
|
||||
|
||||
## Aborted: Under-Specified Question
|
||||
|
||||
The question "<original question>" has multiple plausible interpretations.
|
||||
@@ -140,6 +152,8 @@ This skill runs headless — there is no operator to ask clarifying questions. I
|
||||
|
||||
### Move 0: Analyze & Strategize
|
||||
|
||||
**Pick the ledger stem once:** `/tmp/research-<YYYY-MM-DD>-<slug>`. Use `<stem>.md` for the ledger and `<stem>-gate.md` for the gate. Substitute this stem into every grep below. (The session_id is not available to the agent under `-Q` — use the date+slug stem instead.)
|
||||
|
||||
1. Consult the `search-key` decision matrix — it's your tool reference, not a
|
||||
lookup you match against.
|
||||
|
||||
@@ -156,7 +170,9 @@ This skill runs headless — there is no operator to ask clarifying questions. I
|
||||
- Pivots: if I find <X>, add <tool Y>
|
||||
```
|
||||
|
||||
4. OSINT gate — only if the plan names maigret / holehe / theHarvester /
|
||||
4. Write the phase gate template (see Guardrails → Phase Gate) to `<stem>-gate.md` with all boxes unchecked. This is the starting state — update it as you progress.
|
||||
|
||||
5. OSINT gate — only if the plan names maigret / holehe / theHarvester /
|
||||
Spiderfoot AND the target is a private individual with no public role: log
|
||||
`## Ethics Note: <intent>` and confirm the scan is proportionate.
|
||||
|
||||
@@ -247,11 +263,37 @@ Disconfirmation actively hunts for disagreement.
|
||||
### Move 5: Condensation
|
||||
|
||||
Read the full ledger from disk. Read the phase gate file. If any box is
|
||||
unchecked, do NOT condense — go back and complete that item.
|
||||
unchecked, do NOT condense — go back and complete that item. (The `OR:` items
|
||||
in the gate are alternatives, not requirements — a normal run will have some
|
||||
unchecked; that's expected.) **Exception: the turn-ceiling ramp overrides the
|
||||
gate. At ≥450 turns (once the ramp has fired), condense regardless of unchecked
|
||||
boxes and list the unmet gate items under `## Uncertainty`.**
|
||||
|
||||
Synthesize using this template:
|
||||
Synthesize using this template, then **WRITE the report to disk**:
|
||||
|
||||
1. `mkdir -p /home/n8n/workspace/research/results`
|
||||
2. Write to `/home/n8n/workspace/research/results/<YYYY-MM-DD>-<slug>.md` (absolute path, derive slug from the question)
|
||||
|
||||
This is the single deliverable — the dispatcher expects it at this path. Do NOT just output to stdout and exit.
|
||||
|
||||
3. **Save to ai_brain_kb.** After writing the report, add it to the Qdrant knowledge base:
|
||||
```
|
||||
mcp__better_qdrant__add_documents(
|
||||
collection="ai_brain_kb",
|
||||
embeddingService="ollama",
|
||||
filePath="/home/n8n/workspace/research/results/<YYYY-MM-DD>-<slug>.md"
|
||||
)
|
||||
```
|
||||
This is mandatory — every deep research report goes into the brain. The `ai-brain-kb` skill and `better_qdrant` MCP server are configured on this profile. If the MCP call fails (network, Qdrant down), log the error to the report's Uncertainty section and continue — the report file on disk is the source of truth.
|
||||
|
||||
```
|
||||
---
|
||||
question: "<original question>"
|
||||
date: <YYYY-MM-DD>
|
||||
sources: <count>
|
||||
confidence: <high|medium|low>
|
||||
---
|
||||
|
||||
# <Answer in 1-3 sentences>
|
||||
|
||||
## Key Findings
|
||||
@@ -273,7 +315,7 @@ Synthesize using this template:
|
||||
|
||||
## Tools That Would Have Helped
|
||||
- <tool>: <what it would have enabled>
|
||||
None: all sources were accessible with available tools.
|
||||
(If nothing was missing, write exactly: "None: all sources were accessible with available tools.")
|
||||
```
|
||||
|
||||
## Guardrails
|
||||
@@ -282,22 +324,24 @@ None: all sources were accessible with available tools.
|
||||
|
||||
Every 3-4 searches, run this command — do not self-assess:
|
||||
```
|
||||
grep -c "^### Finding #.*\[SQ<N>\]" /tmp/research-<sid>.md
|
||||
grep -c "^### Finding #.*\[SQ<N>\]" /tmp/research-<YYYY-MM-DD>-<slug>.md
|
||||
```
|
||||
Compare to the previous count. If zero new findings in the last 3 searches,
|
||||
that sub-question is saturated. Move to the next. This is a measurable fact,
|
||||
not a vibe. The `[SQ<N>]` tag makes this immune to header ordering — it counts
|
||||
by tag, not by position.
|
||||
that sub-question is saturated. Move to the next. **Exception: if the count is
|
||||
0 (no findings at all), keep going to 5 searches, then document it with the
|
||||
information-void template.** This is a measurable fact, not a vibe. The `[SQ<N>]`
|
||||
tag makes this immune to header ordering — it counts by tag, not by position.
|
||||
|
||||
### Phase Gate File
|
||||
|
||||
The phase gate is a file at `/tmp/research-<sid>-gate.md`. Write it and read it
|
||||
The phase gate is a file at `/tmp/research-<YYYY-MM-DD>-<slug>-gate.md`. Write it and read it
|
||||
back — it is not a mental checklist. Before moving to Move 5, read the gate file.
|
||||
If any box is unchecked, do NOT condense. Go back and complete that item.
|
||||
(The `OR:` items are alternatives, not requirements — a normal run will have some
|
||||
unchecked; that's expected.)
|
||||
|
||||
```
|
||||
# Phase Gate
|
||||
- [ ] All sub-questions have findings in the ledger
|
||||
- [ ] All sub-questions have findings in the ledger or are documented as VOID
|
||||
- [ ] Disconfirmation pass completed for key claims
|
||||
- [ ] Source diversity: ≥5 unique domains across all findings
|
||||
- [ ] Source diversity: no single domain >30% of findings
|
||||
@@ -311,8 +355,9 @@ Update this file as you progress.
|
||||
|
||||
Mechanical domain diversity check:
|
||||
```
|
||||
grep -oP 'Source: \K[^ ]+' /tmp/research-<sid>.md | grep -oP 'https?://[^/]+' | sort -u | wc -l
|
||||
grep -oP 'Source: \K[^ ]+' /tmp/research-<YYYY-MM-DD>-<slug>.md | grep -oP 'https?://[^/]+' | sort | uniq -c | sort -rn
|
||||
```
|
||||
This shows both the unique domain count and the per-domain share — use it to verify the ≥5 domains and ≤30% per-domain requirements.
|
||||
|
||||
### Turn Ceiling
|
||||
|
||||
@@ -324,9 +369,26 @@ If the ceiling is hit, deliver partial findings with a note on what's missing.
|
||||
### SearXNG Failure Handling
|
||||
|
||||
If SearXNG returns errors or empty results for 3 consecutive searches (different
|
||||
queries), wait 10 seconds and retry once. If still failing, note the instance
|
||||
issue in the ledger and fall back to `web_search` (built-in) or
|
||||
`duckduckgo-search` (Python library) for the remainder of that sub-question.
|
||||
queries):
|
||||
|
||||
1. **First recovery: VPN reconnect.** Reconnect VPN to get a fresh IP, then
|
||||
retry the most recent search once. The VPN reconnect procedure is:
|
||||
```bash
|
||||
nordvpn disconnect && nordvpn connect us <different_city>
|
||||
```
|
||||
Use a different city from the current connection to avoid the same server.
|
||||
Verify with `nordvpn status`. This is authorized without asking — the
|
||||
nordvpn skill grants reconnect permission. Do NOT change any other VPN
|
||||
settings.
|
||||
2. **Second recovery:** Wait 10 seconds and retry once with a different
|
||||
framing.
|
||||
3. **Third recovery:** Fall back to `web_search` (built-in), or
|
||||
`duckduckgo-search` (Python library) if already installed.
|
||||
4. **If all fail:** Document the void per the information-void template and
|
||||
move on.
|
||||
|
||||
The VPN reconnect is a recovery step, not a search — it doesn't count against
|
||||
the turn budget or saturation tracking.
|
||||
|
||||
## Tool Policy
|
||||
|
||||
@@ -336,17 +398,5 @@ APIs with billing, no metered endpoints. You determine what fits — you are not
|
||||
given a list of allowed or disallowed tools.
|
||||
|
||||
**No self-provisioning.** Never install, pull, or spin up new tools at runtime.
|
||||
|
||||
### Tools That Would Have Helped
|
||||
|
||||
At the end of the response (after Sources), add a section if any limitations
|
||||
were hit:
|
||||
|
||||
```
|
||||
Tools that would have improved this research:
|
||||
- <tool name>: <what it would have enabled>
|
||||
None: all sources were accessible with available tools.
|
||||
```
|
||||
|
||||
This is informational only. Do your best with what's available and note what
|
||||
could have been better. Do not stop or block on tool gaps.
|
||||
(The "Tools That Would Have Helped" section in the Move 5 report template covers
|
||||
tool gaps — it's informational only; do not stop or block on them.)
|
||||
|
||||
Reference in New Issue
Block a user