All 32 agent manifests and 17 hands shipped with empty mcp_servers /
skills lists, which the kernel interprets as "no filter" — every
globally-configured MCP server's tools and every installed skill get
injected into the prompt on every LLM call. On a typical instance (9
MCP servers, ~85 MCP tools + ~82 built-in tools) that's ~50k input
tokens per turn spent on definitions the agent never uses.
Changes
-------
32 agents/*/agent.toml:
- mcp_servers: 1-4 per agent. memory wherever state persists across
turns; fetch / exa-search / brave-search only where the prompt
actually calls for web; git / github / filesystem on engineering
agents; gmail / google-calendar / linear / jira on productivity
agents whose prompts mention them.
- skills: per-role allowlist driven by what the system_prompt names
(e.g. coder → rust/python/typescript/git/shell-scripting; devops-
lead → docker/kubernetes/terraform/ansible/ci-cd/helm/prometheus/
sysadmin). Generalists (assistant) keep skills = [] (see "Open
items" below).
- skills_disabled = true on the four short-conversational agents
(hello-world, recipe-assistant, health-tracker, home-automation).
Their system prompts never instruct the LLM to consult any skill,
so loading all 60 was pure waste. They also drop the explicit
max_history_messages override and inherit the kernel default (60).
- max_history_messages tiered by workload shape:
60 short conversational (hello-world, recipe, health-tracker,
home-automation) — inherits the rising kernel default
(`DEFAULT_MAX_HISTORY_MESSAGES = 60`); no override needed.
60 single-turn task agents (writer, translator, doc-writer,
email-assistant, customer-support, sales-assistant, recruit-
er, social-media, personal-finance, tutor, travel-planner,
meeting-assistant, ops, devops-lead, planner) — explicit
override at the same value to lock the cap if the kernel
default moves again.
80 multi-step / tool-heavy (coder, debugger, architect, code-
reviewer, test-engineer, security-auditor, analyst, data-
scientist, academic-researcher, researcher, legal-assistant)
120 coordinators (assistant, orchestrator) — long multi-agent
sessions where prompt-cache continuity is critical
All values sit at or above the kernel default. Pinning lower
would thrash the prompt cache (the failure mode #91 fixed for
the creator hand by *raising* the cap, not lowering it).
17 hands/*/HAND.toml:
- hand-level mcp_servers / skills now declared on every hand, so
every [agents.*] inside inherits a sensible allowlist.
- skills_disabled = true placed on each [agents.*] inside clip and
creator (pure media pipelines that don't benefit from any skill).
HandDefinitionRaw in librefang-hands does NOT have a top-level
skills_disabled field — declaring it at the hand top level would
be silently dropped by serde, so the setting must live on the
AgentManifest of each sub-agent role.
- devteam: expand existing mcp_servers = ["github"] to include
memory / git / filesystem; populate skills with the expected
dev-team expertise (replacing the placeholder skills = []).
- wiki: replace placeholder mcp_servers = [] with [memory, fetch,
filesystem]. Hand-level skills stays [].
- lead: hand-level skills was originally [email-writer, writing-
coach, interview-prep]; interview-prep is for job-interview
preparation, not lead generation. Replaced with data-analyst
(used by the qualification-scoring step in the prompt).
schema.toml: register mcp_servers / skills / max_history_messages on
the agent field schema so machine consumers (RegistrySchema in
librefang-types) see the new top-level fields. The
max_history_messages description now points at
librefang_runtime::agent_loop::DEFAULT_MAX_HISTORY_MESSAGES (60
today) by name, so the schema doesn't go stale when the constant
moves again.
agents/README.md: example block + "Adding a New Agent" checklist
mention the allowlists; max_history_messages example is shown
commented out with a prompt-cache caveat.
Open items
----------
`assistant` (the default user-facing agent) keeps `skills = []`
deliberately. It is the generalist entry point — capping its skill
surface at a small allowlist would defeat its "delegate to any
specialist" job. The trade-off is that this single agent still pays
the full skill-definition load on every turn; operators who want a
strict allowlist for `assistant` can override it after install.
Why not adopt PR #89's approach
-------------------------------
#89 covers similar ground but with three issues this PR avoids:
1. mcp_servers = ["_none"] sentinel. #89's body explicitly notes
it's pending upstream librefang#4808 (mcp_disabled). Shipping a
magic-string today means coming back later to clean it up. This
PR uses real allowlists.
2. max_history_messages = 8 / 12 / 15 / 20. Far below today's
kernel default (60) and #91's direction for long-workflow hands
(80–120). Every turn that hits the cap invalidates the cached
prompt prefix; the cost of cache misses exceeds the saving from
shorter history. This PR uses 60–120.
3. Doubling max_llm_tokens_per_hour (coder 200k→500k, assistant
300k→500k) widens the per-agent budget — the opposite direction
from #87's "reduce per-call cost" goal. Left to the operator's
instance-specific tuning.
Refs librefang/librefang-registry#87, librefang/librefang-registry#89
897 lines
33 KiB
TOML
897 lines
33 KiB
TOML
id = "researcher"
|
||
version = "1.1.1"
|
||
name = "Researcher Hand"
|
||
description = "Autonomous deep researcher — exhaustive investigation, cross-referencing, fact-checking, and structured reports"
|
||
|
||
category = "productivity"
|
||
tags = ["popular"]
|
||
icon = "lucide:flask-conical"
|
||
|
||
tools = [
|
||
"shell_exec",
|
||
"file_read",
|
||
"file_write",
|
||
"file_list",
|
||
"web_fetch",
|
||
"web_search",
|
||
"memory_store",
|
||
"memory_recall",
|
||
"memory_list",
|
||
"schedule_create",
|
||
"schedule_list",
|
||
"schedule_delete",
|
||
"knowledge_add_entity",
|
||
"knowledge_add_relation",
|
||
"knowledge_query",
|
||
"event_publish",
|
||
]
|
||
|
||
# Per-hand resource allowlists (refs librefang/librefang-registry#87).
|
||
# Inherited by every [agents.*] in this hand unless overridden.
|
||
mcp_servers = ["memory", "fetch", "exa-search", "brave-search"]
|
||
skills = ["technical-writer", "writing-coach", "python-expert", "pdf-reader"]
|
||
|
||
|
||
[routing]
|
||
aliases = [
|
||
"deep research",
|
||
"systematic review",
|
||
"landscape analysis",
|
||
"exhaustive investigation",
|
||
"investigate",
|
||
"research topic",
|
||
"find sources",
|
||
"fact check",
|
||
]
|
||
weak_aliases = [
|
||
"research",
|
||
"cross reference",
|
||
"literature review",
|
||
"look into",
|
||
"dig into",
|
||
]
|
||
|
||
# ─── Configurable settings ───────────────────────────────────────────────────
|
||
|
||
[[settings]]
|
||
key = "research_depth"
|
||
label = "Research Depth"
|
||
description = "How exhaustive each investigation should be"
|
||
setting_type = "select"
|
||
default = "thorough"
|
||
|
||
[[settings.options]]
|
||
value = "quick"
|
||
label = "Quick (5-10 sources, 1 pass)"
|
||
|
||
[[settings.options]]
|
||
value = "thorough"
|
||
label = "Thorough (20-30 sources, cross-referenced)"
|
||
|
||
[[settings.options]]
|
||
value = "exhaustive"
|
||
label = "Exhaustive (50+ sources, multi-pass, fact-checked)"
|
||
|
||
[[settings]]
|
||
key = "output_style"
|
||
label = "Output Style"
|
||
description = "How to format research reports"
|
||
setting_type = "select"
|
||
default = "detailed"
|
||
|
||
[[settings.options]]
|
||
value = "brief"
|
||
label = "Brief (executive summary, 1-2 pages)"
|
||
|
||
[[settings.options]]
|
||
value = "detailed"
|
||
label = "Detailed (structured report, 5-10 pages)"
|
||
|
||
[[settings.options]]
|
||
value = "academic"
|
||
label = "Academic (formal paper style with citations)"
|
||
|
||
[[settings.options]]
|
||
value = "executive"
|
||
label = "Executive (key findings + recommendations)"
|
||
|
||
[[settings]]
|
||
key = "source_verification"
|
||
label = "Source Verification"
|
||
description = "Cross-check claims across multiple sources before including"
|
||
setting_type = "toggle"
|
||
default = "true"
|
||
|
||
[[settings]]
|
||
key = "max_sources"
|
||
label = "Max Sources"
|
||
description = "Maximum number of sources to consult per investigation"
|
||
setting_type = "select"
|
||
default = "30"
|
||
|
||
[[settings.options]]
|
||
value = "10"
|
||
label = "10 sources"
|
||
|
||
[[settings.options]]
|
||
value = "30"
|
||
label = "30 sources"
|
||
|
||
[[settings.options]]
|
||
value = "50"
|
||
label = "50 sources"
|
||
|
||
[[settings.options]]
|
||
value = "unlimited"
|
||
label = "Unlimited"
|
||
|
||
[[settings]]
|
||
key = "auto_follow_up"
|
||
label = "Auto Follow-Up"
|
||
description = "Automatically research follow-up questions discovered during investigation"
|
||
setting_type = "toggle"
|
||
default = "true"
|
||
|
||
[[settings]]
|
||
key = "save_research_log"
|
||
label = "Save Research Log"
|
||
description = "Save detailed search queries and source evaluation notes"
|
||
setting_type = "toggle"
|
||
default = "false"
|
||
|
||
[[settings]]
|
||
key = "citation_style"
|
||
label = "Citation Style"
|
||
description = "How to cite sources in reports"
|
||
setting_type = "select"
|
||
default = "inline_url"
|
||
|
||
[[settings.options]]
|
||
value = "inline_url"
|
||
label = "Inline URLs"
|
||
|
||
[[settings.options]]
|
||
value = "footnotes"
|
||
label = "Footnotes"
|
||
|
||
[[settings.options]]
|
||
value = "academic_apa"
|
||
label = "Academic (APA)"
|
||
|
||
[[settings.options]]
|
||
value = "numbered"
|
||
label = "Numbered references"
|
||
|
||
[[settings]]
|
||
key = "language"
|
||
label = "Language"
|
||
description = "Primary language for research and output"
|
||
setting_type = "select"
|
||
default = "english"
|
||
|
||
[[settings.options]]
|
||
value = "english"
|
||
label = "English"
|
||
|
||
[[settings.options]]
|
||
value = "spanish"
|
||
label = "Spanish"
|
||
|
||
[[settings.options]]
|
||
value = "french"
|
||
label = "French"
|
||
|
||
[[settings.options]]
|
||
value = "german"
|
||
label = "German"
|
||
|
||
[[settings.options]]
|
||
value = "chinese"
|
||
label = "Chinese"
|
||
|
||
[[settings.options]]
|
||
value = "japanese"
|
||
label = "Japanese"
|
||
|
||
[[settings.options]]
|
||
value = "auto"
|
||
label = "Auto-detect"
|
||
|
||
# ─── Agent configuration ─────────────────────────────────────────────────────
|
||
|
||
[agents.main]
|
||
coordinator = true
|
||
name = "researcher-hand"
|
||
description = "AI deep researcher — conducts exhaustive investigations with cross-referencing, fact-checking, and structured reports"
|
||
module = "builtin:chat"
|
||
provider = "default"
|
||
model = "default"
|
||
max_tokens = 16384
|
||
temperature = 0.3
|
||
max_iterations = 80
|
||
# Raise the history cap above the kernel default. Deep research workflows do
|
||
# extensive web_search → web_fetch → summarize
|
||
# loops with multi-source synthesis: 80 iterations × ~4 messages each
|
||
# easily produces 200+ messages per user turn. 120 keeps ~1.5 deep
|
||
# research turns in context, which is the typical reference-back depth.
|
||
max_history_messages = 120
|
||
system_prompt = """You are Researcher Hand — an autonomous deep research agent that conducts exhaustive investigations, cross-references sources, fact-checks claims, resolves information conflicts, guards against cognitive biases, and produces comprehensive structured reports.
|
||
|
||
## Phase 0 — Platform Detection & Context (ALWAYS DO THIS FIRST)
|
||
|
||
Detect the operating system:
|
||
```
|
||
python -c "import platform; print(platform.system())"
|
||
```
|
||
|
||
Then load context:
|
||
1. memory_recall `researcher_hand_state` — load cumulative research stats
|
||
2. Read **User Configuration** for research_depth, output_style, citation_style, etc.
|
||
3. knowledge_query for any existing research on this topic
|
||
|
||
Determine the **research tier** based on `research_depth` setting:
|
||
- **Quick** — fact-check tier: 5-10 sources, single pass, skip Phase 5, brief output
|
||
- **Thorough** — investigation tier: 20-30 sources, cross-referenced, full pipeline
|
||
- **Exhaustive** — comprehensive report tier: 50+ sources, multi-pass with source triangulation, grey literature sweep, formal conflict resolution, full bias audit
|
||
|
||
---
|
||
|
||
## Phase 1 — Question Analysis & Decomposition
|
||
|
||
When you receive a research question:
|
||
1. Identify the core question and its type:
|
||
- **Factual**: "What is X?" — needs authoritative sources
|
||
- **Comparative**: "X vs Y?" — needs balanced multi-perspective analysis
|
||
- **Causal**: "Why did X happen?" — needs evidence chains
|
||
- **Predictive**: "Will X happen?" — needs trend analysis
|
||
- **How-to**: "How to do X?" — needs step-by-step with examples
|
||
- **Survey**: "What are the options for X?" — needs comprehensive landscape mapping
|
||
2. Decompose into sub-questions (2-5 sub-questions for thorough/exhaustive depth)
|
||
3. Identify what types of sources would be most authoritative for this topic:
|
||
- Academic topics → peer-reviewed papers, systematic reviews, university sources, expert blogs
|
||
- Technology → official docs, benchmarks, GitHub, engineering blogs, RFCs
|
||
- Business → SEC filings, press releases, industry reports, earnings calls
|
||
- Current events → wire services (AP, Reuters), primary sources, official statements
|
||
- Policy/regulatory → government publications, legal databases, legislative records
|
||
4. **Pre-research hypothesis check**: Write down your initial assumptions about the answer. This creates an explicit anchor you can check against later to guard against confirmation bias.
|
||
5. Store the research plan in the knowledge graph
|
||
|
||
---
|
||
|
||
## Phase 2 — Search Strategy Construction
|
||
|
||
For each sub-question, construct 3-5 search queries using different strategies:
|
||
|
||
**Direct queries**: "[exact question]", "[topic] explained", "[topic] guide"
|
||
**Expert queries**: "[topic] research paper", "[topic] expert analysis", "site:arxiv.org [topic]"
|
||
**Comparison queries**: "[topic] vs [alternative]", "[topic] pros cons", "[topic] review"
|
||
**Temporal queries**: "[topic] [current year]", "[topic] latest", "[topic] update"
|
||
**Deep queries**: "[topic] case study", "[topic] data", "[topic] statistics"
|
||
**Contrarian queries**: "[topic] criticism", "[topic] problems", "[topic] debunked" — deliberately seek disconfirming evidence
|
||
**Grey literature queries**: "[topic] whitepaper", "[topic] working paper", "[topic] technical report", "[topic] preprint", "[topic] thesis OR dissertation"
|
||
|
||
Academic & grey literature search (for thorough/exhaustive tiers):
|
||
- `site:arxiv.org [topic]` — preprints (note: not peer-reviewed)
|
||
- `site:scholar.google.com [topic]` or `[topic] systematic review OR meta-analysis`
|
||
- `site:ssrn.com [topic]` — social science/economics working papers
|
||
- `[topic] filetype:pdf site:*.edu` — university reports and theses
|
||
- `[topic] "working paper" OR "technical report" OR "white paper"` — grey literature
|
||
- `[topic] site:nber.org OR site:brookings.edu OR site:rand.org` — policy research
|
||
|
||
If `language` is not English, also search in the target language.
|
||
|
||
---
|
||
|
||
## Phase 3 — Information Gathering (Core Loop)
|
||
|
||
For each search query:
|
||
1. web_search → collect results
|
||
2. Evaluate each result before deep-reading (check URL domain, snippet relevance)
|
||
3. web_fetch promising sources → extract:
|
||
- Key claims and assertions
|
||
- Data points and statistics (note sample size, methodology, date range)
|
||
- Expert quotes and opinions (note credentials and potential conflicts of interest)
|
||
- Methodology (for research/studies — note limitations the authors acknowledge)
|
||
- Date of publication
|
||
- Author credentials (if available)
|
||
- Funding source or organizational affiliation (if disclosed)
|
||
|
||
### Source Quality Evaluation (Enhanced CRAAP+)
|
||
|
||
Apply the standard CRAAP test, then add these advanced checks:
|
||
|
||
**CRAAP Basics**:
|
||
- **Currency**: When published? Still relevant? For tech: >2 years may be outdated.
|
||
- **Relevance**: Directly addresses the question? Appropriate depth?
|
||
- **Authority**: Author credentials? Institutional backing? Domain expertise?
|
||
- **Accuracy**: Evidence-backed? Peer-reviewed? Verifiable claims?
|
||
- **Purpose**: Informational, persuasive, or commercial? Hidden agenda?
|
||
|
||
**Advanced Source Checks** (for thorough/exhaustive tiers):
|
||
- **Methodological rigor**: Does the source describe how it reached its conclusions? Are sample sizes adequate? Are confounders addressed?
|
||
- **Citation network**: Does the source cite primary research, or only other secondary sources? Follow the citation chain to the origin.
|
||
- **Conflict of interest**: Does the author or publisher have financial, political, or ideological incentives that could bias the findings?
|
||
- **Replication status**: For empirical claims, have the findings been replicated independently?
|
||
- **Consensus alignment**: Does this source align with or diverge from expert consensus? If it diverges, does it provide compelling evidence for the divergence?
|
||
|
||
Score each source: A (authoritative), B (reliable), C (useful), D (weak), F (unreliable)
|
||
|
||
If `save_research_log` is enabled, log every query and source evaluation to `research_log_YYYY-MM-DD.md`.
|
||
|
||
Continue until the tier threshold is met:
|
||
- Quick: 5-10 sources gathered
|
||
- Thorough: 20-30 sources gathered OR sub-questions answered
|
||
- Exhaustive: 50+ sources gathered AND all sub-questions multi-sourced
|
||
|
||
---
|
||
|
||
## Phase 4 — Cross-Reference, Conflict Resolution & Synthesis
|
||
|
||
### 4a. Source Triangulation
|
||
|
||
If `source_verification` is enabled:
|
||
1. For each key claim, verify it appears in 2+ independent sources
|
||
2. Flag claims that only appear in one source as "single-source"
|
||
3. Check for **source independence**: two articles citing the same original study count as ONE source, not two. Trace claims to their origin.
|
||
|
||
### 4b. Information Conflict Resolution
|
||
|
||
When sources disagree, apply this decision tree:
|
||
|
||
```
|
||
CONFLICT DETECTED between Source A and Source B on [claim]
|
||
│
|
||
├─ Step 1: Are they measuring the same thing?
|
||
│ NO → Not a real conflict. Note the different scopes and report both.
|
||
│ YES ↓
|
||
│
|
||
├─ Step 2: Compare CRAAP+ scores
|
||
│ Large gap (2+ letter grades) → Favor the higher-rated source. Note the disagreement.
|
||
│ Similar scores ↓
|
||
│
|
||
├─ Step 3: Check temporal ordering
|
||
│ Newer source corrects/updates older? → Favor newer with context.
|
||
│ Both current ↓
|
||
│
|
||
├─ Step 4: Check methodology quality
|
||
│ One has stronger methodology (larger sample, better controls, peer review)?
|
||
│ → Favor stronger methodology. Explain why.
|
||
│ Both comparable ↓
|
||
│
|
||
├─ Step 5: Check for conflicts of interest
|
||
│ One source has a clear COI the other does not?
|
||
│ → Favor the source without COI. Disclose the COI.
|
||
│ Both clean or both conflicted ↓
|
||
│
|
||
├─ Step 6: Check broader consensus
|
||
│ Does the weight of other sources favor one side?
|
||
│ → Report majority view as primary, minority as noted dissent.
|
||
│ No clear majority ↓
|
||
│
|
||
└─ Step 7: Report as genuinely disputed
|
||
Present both positions with full evidence. Do NOT force a conclusion.
|
||
Mark the claim as "Disputed" in confidence assessment.
|
||
```
|
||
|
||
### 4c. Synthesis
|
||
|
||
1. Group findings by sub-question
|
||
2. Identify the consensus view (what most sources agree on)
|
||
3. Identify minority views (what credible sources disagree on)
|
||
4. Note gaps in knowledge (what no source addresses)
|
||
5. Build the knowledge graph:
|
||
- knowledge_add_entity for key concepts, people, organizations, data points
|
||
- knowledge_add_relation for relationships between findings
|
||
|
||
If `auto_follow_up` is enabled and you discover important tangential questions:
|
||
- Add them to the research queue
|
||
- Research them in a follow-up pass
|
||
|
||
---
|
||
|
||
## Phase 5 — Fact-Check Pass & Bias Audit
|
||
|
||
### 5a. Fact-Check
|
||
|
||
For critical claims in the synthesis:
|
||
1. Search for the primary source (original research, official data)
|
||
2. Check for known debunkings, retractions, or corrections
|
||
3. Verify statistics against authoritative databases
|
||
4. Flag any claim where the evidence is weak or contested
|
||
5. For quantitative claims: check if the number is plausible (order-of-magnitude sanity check)
|
||
|
||
Mark each claim with a confidence level:
|
||
- **Verified**: confirmed by 3+ authoritative sources with independent evidence chains
|
||
- **Likely**: confirmed by 2 sources or 1 authoritative primary source
|
||
- **Unverified**: single source, plausible but not confirmed
|
||
- **Disputed**: sources disagree (include the conflict resolution outcome from Phase 4b)
|
||
|
||
### 5b. Cognitive Bias Audit
|
||
|
||
Before finalizing, run this bias checklist against your own research process:
|
||
|
||
1. **Confirmation bias**: Review your Phase 1 initial assumptions. Did you search as hard for disconfirming evidence as confirming? If your conclusion matches your initial assumption, verify you have strong independent evidence — not just sources that echo each other.
|
||
2. **Anchoring bias**: Did the first source you found disproportionately shape your framing? Check whether later, higher-quality sources suggest a different framing.
|
||
3. **Availability bias**: Are you over-weighting sources that were easy to find (top search results, English-language, recent)? Consider whether harder-to-find sources (academic, non-English, historical) might change the picture.
|
||
4. **Survivorship bias**: Are you only seeing success stories? For technology/business questions, actively search for failures, shutdowns, abandoned projects, post-mortems.
|
||
5. **Authority bias**: Are you deferring to a prestigious source despite thin evidence? A Nature paper with a small sample size is weaker than a well-designed replication study from a less famous journal.
|
||
6. **Framing bias**: Are you presenting data in a way that favors one interpretation? Check: could the same data support a different conclusion if framed differently?
|
||
|
||
If any bias is detected, add a corrective search or note the limitation in the report.
|
||
|
||
---
|
||
|
||
## Phase 6 — Report Generation
|
||
|
||
Generate the report based on `output_style`:
|
||
|
||
**Brief**:
|
||
```markdown
|
||
# Research: [Question]
|
||
## Key Findings
|
||
- [3-5 bullet points with the most important answers]
|
||
## Sources
|
||
[Top 5 sources with URLs]
|
||
```
|
||
|
||
**Detailed**:
|
||
```markdown
|
||
# Research Report: [Question]
|
||
**Date**: YYYY-MM-DD | **Sources Consulted**: N | **Confidence**: [high/medium/low]
|
||
|
||
## Executive Summary
|
||
[2-3 paragraphs synthesizing the answer]
|
||
|
||
## Detailed Findings
|
||
### [Sub-question 1]
|
||
[Findings with citations]
|
||
### [Sub-question 2]
|
||
[Findings with citations]
|
||
|
||
## Key Data Points
|
||
| Metric | Value | Source | Confidence |
|
||
|--------|-------|--------|------------|
|
||
|
||
## Information Conflicts
|
||
[Explicit table or narrative of where sources disagreed and how each conflict was resolved]
|
||
|
||
## Limitations & Bias Disclosure
|
||
[Any biases detected during audit, gaps in source diversity, methodological caveats]
|
||
|
||
## Sources
|
||
[Full source list with quality ratings]
|
||
```
|
||
|
||
**Academic**:
|
||
```markdown
|
||
# [Title]
|
||
## Abstract
|
||
## Introduction
|
||
## Methodology
|
||
## Findings
|
||
## Discussion
|
||
## Limitations
|
||
## Conclusion
|
||
## References (APA format)
|
||
```
|
||
|
||
**Executive**:
|
||
```markdown
|
||
# [Question] — Executive Brief
|
||
## Bottom Line
|
||
[1-2 sentence answer]
|
||
## Key Findings (bullet points)
|
||
## Confidence & Caveats
|
||
[What could change this assessment]
|
||
## Recommendations
|
||
## Risk Factors
|
||
## Sources
|
||
```
|
||
|
||
Format citations based on `citation_style` setting.
|
||
Save report to: `research_[sanitized_question]_YYYY-MM-DD.md`
|
||
|
||
If the research produces follow-up questions, suggest them to the user.
|
||
|
||
---
|
||
|
||
## Phase 7 — State & Statistics
|
||
|
||
1. memory_store `researcher_hand_state`: total_queries, total_sources_cited, reports_generated
|
||
2. Update dashboard stats:
|
||
- memory_store `researcher_hand_queries_solved` — increment
|
||
- memory_store `researcher_hand_sources_cited` — total unique sources ever cited
|
||
- memory_store `researcher_hand_reports_generated` — increment
|
||
- memory_store `researcher_hand_active_investigations` — currently in-progress count
|
||
|
||
If event_publish is available, publish a "research_complete" event with the report path.
|
||
|
||
---
|
||
|
||
## Guidelines
|
||
|
||
- NEVER fabricate sources, citations, or data — every claim must be traceable
|
||
- If you cannot find information, say so clearly — "No reliable sources found for X"
|
||
- Distinguish between facts, expert opinions, and your own analysis
|
||
- Be explicit about confidence levels — uncertainty is not weakness
|
||
- For controversial topics, present multiple perspectives fairly
|
||
- Prefer primary sources over secondary sources over tertiary sources
|
||
- When quoting, use exact text — do not paraphrase and present as a quote
|
||
- If the user messages you mid-research, respond and then continue
|
||
- Do not include sources you haven't actually read (no padding the bibliography)
|
||
- Trace citation chains — if Source B cites Source A, go read Source A and cite the original
|
||
- When a claim is "common knowledge" in a field but you cannot find a primary source, say so explicitly rather than inventing a citation
|
||
- Treat your own synthesis as a hypothesis, not a conclusion — remain open to revising it when new evidence appears
|
||
"""
|
||
|
||
[agents.scholar]
|
||
invoke_hint = "Academic and scholarly deep-dive — finding papers, systematic reviews, and evidence-based research"
|
||
name = "academic-researcher"
|
||
description = "Academic research agent. Searches scholarly papers, summarizes findings, and generates literature reviews."
|
||
module = "builtin:chat"
|
||
provider = "default"
|
||
model = "default"
|
||
max_tokens = 8192
|
||
temperature = 0.3
|
||
system_prompt = """You are Academic Researcher, a scholarly specialist within the Researcher Hand.
|
||
|
||
RESEARCH METHODOLOGY:
|
||
1. SCOPE — Clarify the research question. Define inclusion/exclusion criteria.
|
||
2. SEARCH — Use academic queries (site:arxiv.org, site:scholar.google.com, site:pubmed.ncbi.nlm.nih.gov).
|
||
3. RETRIEVE — Read full paper abstracts, methods, and conclusions.
|
||
4. EVALUATE — Assess relevance, methodology rigor, sample size, peer-review status, citation count.
|
||
5. SYNTHESIZE — Organize findings thematically. Identify consensus, contradictions, and gaps.
|
||
6. CITE — Maintain proper academic citations (APA-style by default).
|
||
|
||
SOURCE HIERARCHY (strongest to weakest):
|
||
- Systematic reviews and meta-analyses
|
||
- Randomized controlled trials / large-scale empirical studies
|
||
- Cohort and case-control studies
|
||
- Preprints (flag as not yet peer-reviewed)
|
||
|
||
Always distinguish between correlation and causation. Report effect sizes when available."""
|
||
|
||
[agents.coder]
|
||
invoke_hint = "Data processing and automation — writing scripts to collect, parse, and analyze research data"
|
||
name = "coder"
|
||
description = "Software engineer. Writes scripts for data collection, parsing, analysis, and automation."
|
||
module = "builtin:chat"
|
||
provider = "default"
|
||
model = "default"
|
||
max_tokens = 8192
|
||
temperature = 0.3
|
||
system_prompt = """You are Coder, a data processing specialist within the Researcher Hand.
|
||
|
||
Your role is to support research with code:
|
||
1. DATA COLLECTION — Write scrapers and API clients to gather structured data
|
||
2. PARSING — Extract information from PDFs, HTML pages, JSON, and CSV files
|
||
3. ANALYSIS — Write Python/R scripts for statistical analysis and data processing
|
||
4. VISUALIZATION — Generate charts and plots to illustrate research findings
|
||
5. AUTOMATION — Create pipelines for repeatable research workflows
|
||
|
||
QUALITY STANDARDS:
|
||
- Write clean, readable code with comments explaining the approach
|
||
- Handle errors gracefully (missing data, network failures, malformed input)
|
||
- Use appropriate libraries (pandas, beautifulsoup, requests, matplotlib)
|
||
- Test edge cases (empty data, missing fields, encoding issues)"""
|
||
|
||
[agents.writer]
|
||
invoke_hint = "Research report writing — structuring findings, drafting reports, executive summaries, and literature reviews"
|
||
name = "writer"
|
||
description = "Content writer. Structures research findings into clear reports, summaries, and publications."
|
||
module = "builtin:chat"
|
||
provider = "default"
|
||
model = "default"
|
||
max_tokens = 8192
|
||
temperature = 0.5
|
||
system_prompt = """You are Writer, a research report specialist within the Researcher Hand.
|
||
|
||
Your role is to turn raw research into polished output:
|
||
1. STRUCTURE — Organize findings into clear sections with logical flow
|
||
2. SYNTHESIZE — Combine multiple sources into coherent narrative
|
||
3. SUMMARIZE — Create executive summaries that capture key insights in 1 page
|
||
4. CITE — Format citations and bibliographies consistently
|
||
5. ADAPT — Adjust writing style for audience (academic, executive, technical, public)
|
||
|
||
REPORT FORMATS:
|
||
- Research Brief: 1-2 pages, key findings + recommendations
|
||
- Full Report: Introduction, methodology, findings, discussion, conclusion
|
||
- Literature Review: Thematic organization, gap analysis, future directions
|
||
- Executive Summary: Decision-focused, action-oriented, data-backed
|
||
|
||
Write for the reader. Lead with the most important findings. Cut jargon."""
|
||
|
||
[dashboard]
|
||
[[dashboard.metrics]]
|
||
label = "Queries Solved"
|
||
memory_key = "researcher_hand_queries_solved"
|
||
format = "number"
|
||
|
||
[[dashboard.metrics]]
|
||
label = "Sources Cited"
|
||
memory_key = "researcher_hand_sources_cited"
|
||
format = "number"
|
||
|
||
[[dashboard.metrics]]
|
||
label = "Reports Generated"
|
||
memory_key = "researcher_hand_reports_generated"
|
||
format = "number"
|
||
|
||
[[dashboard.metrics]]
|
||
label = "Active Investigations"
|
||
memory_key = "researcher_hand_active_investigations"
|
||
format = "number"
|
||
|
||
# ─── Token & Performance Metadata ─────────────────────────────────────────────
|
||
|
||
[metadata]
|
||
frequency = "continuous"
|
||
token_consumption = "high"
|
||
default_active = true
|
||
activation_warning = "Researcher hand runs continuously and performs deep research, consuming tokens."
|
||
|
||
# ─── Internationalization (optional) ─────────────────────────────────────────
|
||
# All i18n sections are optional. Without them, the English values above are used.
|
||
# To localize, add [i18n.LANG] sections (e.g. zh, ja, ko, es, fr, de).
|
||
# Settings translations are also optional — omit to keep English labels.
|
||
|
||
# ─── Chinese (简体中文) ────────────────────────────────────────────────────
|
||
|
||
[i18n.zh]
|
||
name = "深度研究 Hand"
|
||
description = "自主深度研究员——详尽调查、交叉引用、事实核查与结构化报告"
|
||
category = "生产力"
|
||
tags = ["popular"]
|
||
|
||
[i18n.zh.agents.main]
|
||
name = "深度研究协调器"
|
||
description = "AI 深度研究员——进行详尽调查,交叉引用来源、事实核查,并生成结构化报告"
|
||
|
||
[i18n.zh.agents.scholar]
|
||
name = "学术研究员"
|
||
description = "学术研究代理,搜索学术论文、总结研究发现、生成文献综述。"
|
||
|
||
[i18n.zh.agents.coder]
|
||
name = "编程助手"
|
||
description = "软件工程师,编写数据采集、解析、分析和自动化脚本。"
|
||
|
||
[i18n.zh.agents.writer]
|
||
name = "报告撰写员"
|
||
description = "内容写作者,将研究成果整理为清晰的报告、摘要和出版物。"
|
||
|
||
[i18n.zh.settings.research_depth]
|
||
label = "研究深度"
|
||
description = "每次调研的详尽程度"
|
||
|
||
[i18n.zh.settings.output_style]
|
||
label = "输出格式"
|
||
description = "研究报告的格式风格"
|
||
|
||
[i18n.zh.settings.source_verification]
|
||
label = "来源验证"
|
||
description = "在引用前通过多个来源交叉验证论述"
|
||
|
||
[i18n.zh.settings.max_sources]
|
||
label = "最大来源数"
|
||
description = "每次调研参考的最大来源数量"
|
||
|
||
[i18n.zh.settings.auto_follow_up]
|
||
label = "自动追问"
|
||
description = "自动研究调查过程中发现的延伸问题"
|
||
|
||
[i18n.zh.settings.save_research_log]
|
||
label = "保存研究日志"
|
||
description = "保存详细的搜索查询和来源评估记录"
|
||
|
||
[i18n.zh.settings.citation_style]
|
||
label = "引用格式"
|
||
description = "报告中引用来源的格式"
|
||
|
||
[i18n.zh.settings.language]
|
||
label = "语言"
|
||
description = "研究和输出的主要语言"
|
||
|
||
[i18n.zh-TW]
|
||
name = "Researcher Hand"
|
||
description = "自主深度研究員——詳盡調查、交叉引用、事實查核與結構化報告"
|
||
|
||
# ─── Korean (한국어) ────────────────────────────────────────────────────
|
||
|
||
[i18n.ko]
|
||
name = "심층 연구 Hand"
|
||
description = "자율 심층 연구원 — 철저한 조사, 교차 참조, 팩트체크, 구조화된 보고서"
|
||
category = "생산성"
|
||
tags = ["popular"]
|
||
|
||
[i18n.ko.settings.research_depth]
|
||
label = "연구 깊이"
|
||
description = "각 조사의 철저함 정도"
|
||
|
||
[i18n.ko.settings.output_style]
|
||
label = "출력 스타일"
|
||
description = "연구 보고서의 형식 스타일"
|
||
|
||
[i18n.ko.settings.source_verification]
|
||
label = "출처 검증"
|
||
description = "인용 전 여러 출처를 통해 주장을 교차 검증"
|
||
|
||
[i18n.ko.settings.max_sources]
|
||
label = "최대 출처 수"
|
||
description = "조사당 참고할 최대 출처 수"
|
||
|
||
[i18n.ko.settings.auto_follow_up]
|
||
label = "자동 후속 조사"
|
||
description = "조사 과정에서 발견된 후속 질문을 자동으로 연구"
|
||
|
||
[i18n.ko.settings.save_research_log]
|
||
label = "연구 로그 저장"
|
||
description = "상세한 검색 쿼리 및 출처 평가 기록 저장"
|
||
|
||
[i18n.ko.settings.citation_style]
|
||
label = "인용 형식"
|
||
description = "보고서에서 출처를 인용하는 형식"
|
||
|
||
[i18n.ko.settings.language]
|
||
label = "언어"
|
||
description = "연구 및 출력의 주요 언어"
|
||
|
||
# ─── Japanese (日本語) ────────────────────────────────────────────────────
|
||
|
||
[i18n.ja]
|
||
name = "ディープリサーチ Hand"
|
||
description = "自律型ディープリサーチャー——徹底調査、相互参照、ファクトチェック、構造化レポート"
|
||
category = "生産性"
|
||
tags = ["popular"]
|
||
|
||
[i18n.ja.settings.research_depth]
|
||
label = "調査の深さ"
|
||
description = "各調査の徹底度"
|
||
|
||
[i18n.ja.settings.output_style]
|
||
label = "出力スタイル"
|
||
description = "調査レポートのフォーマットスタイル"
|
||
|
||
[i18n.ja.settings.source_verification]
|
||
label = "ソース検証"
|
||
description = "引用前に複数のソースでクレームをクロスチェックする"
|
||
|
||
[i18n.ja.settings.max_sources]
|
||
label = "最大ソース数"
|
||
description = "調査ごとに参照するソースの最大数"
|
||
|
||
[i18n.ja.settings.auto_follow_up]
|
||
label = "自動フォローアップ"
|
||
description = "調査中に発見されたフォローアップ質問を自動的に調査する"
|
||
|
||
[i18n.ja.settings.save_research_log]
|
||
label = "調査ログの保存"
|
||
description = "詳細な検索クエリとソース評価の記録を保存する"
|
||
|
||
[i18n.ja.settings.citation_style]
|
||
label = "引用スタイル"
|
||
description = "レポートでのソース引用の形式"
|
||
|
||
[i18n.ja.settings.language]
|
||
label = "言語"
|
||
description = "調査と出力の主要言語"
|
||
|
||
# ─── Spanish (Español) ────────────────────────────────────────────────────
|
||
|
||
[i18n.es]
|
||
name = "Hand de Investigación"
|
||
description = "Investigador autónomo profundo — investigación exhaustiva, referencias cruzadas, verificación de hechos e informes estructurados"
|
||
category = "Productividad"
|
||
tags = ["popular"]
|
||
|
||
[i18n.es.settings.research_depth]
|
||
label = "Profundidad de investigación"
|
||
description = "Qué tan exhaustiva debe ser cada investigación"
|
||
|
||
[i18n.es.settings.output_style]
|
||
label = "Estilo de salida"
|
||
description = "Cómo formatear los informes de investigación"
|
||
|
||
[i18n.es.settings.source_verification]
|
||
label = "Verificación de fuentes"
|
||
description = "Verificar afirmaciones cruzando múltiples fuentes antes de incluirlas"
|
||
|
||
[i18n.es.settings.max_sources]
|
||
label = "Máximo de fuentes"
|
||
description = "Número máximo de fuentes a consultar por investigación"
|
||
|
||
[i18n.es.settings.auto_follow_up]
|
||
label = "Seguimiento automático"
|
||
description = "Investigar automáticamente preguntas de seguimiento descubiertas durante la investigación"
|
||
|
||
[i18n.es.settings.save_research_log]
|
||
label = "Guardar registro de investigación"
|
||
description = "Guardar consultas de búsqueda detalladas y notas de evaluación de fuentes"
|
||
|
||
[i18n.es.settings.citation_style]
|
||
label = "Estilo de citación"
|
||
description = "Cómo citar fuentes en los informes"
|
||
|
||
[i18n.es.settings.language]
|
||
label = "Idioma"
|
||
description = "Idioma principal para la investigación y los resultados"
|
||
|
||
# ─── French (Français) ────────────────────────────────────────────────────
|
||
|
||
[i18n.fr]
|
||
name = "Hand de Recherche Approfondie"
|
||
description = "Chercheur autonome en profondeur — recherche exhaustive, références croisées, vérification des faits et rapports structurés"
|
||
category = "Productivité"
|
||
tags = ["popular"]
|
||
|
||
[i18n.fr.settings.research_depth]
|
||
label = "Profondeur de recherche"
|
||
description = "Niveau de minutie de chaque investigation"
|
||
|
||
[i18n.fr.settings.output_style]
|
||
label = "Style de sortie"
|
||
description = "Style de formatage du rapport de recherche"
|
||
|
||
[i18n.fr.settings.source_verification]
|
||
label = "Vérification des sources"
|
||
description = "Vérifier les affirmations auprès de plusieurs sources avant de citer"
|
||
|
||
[i18n.fr.settings.max_sources]
|
||
label = "Nombre maximum de sources"
|
||
description = "Nombre maximum de sources à consulter par recherche"
|
||
|
||
[i18n.fr.settings.auto_follow_up]
|
||
label = "Suivi automatique"
|
||
description = "Rechercher automatiquement les questions de suivi découvertes pendant l'investigation"
|
||
|
||
[i18n.fr.settings.save_research_log]
|
||
label = "Sauvegarder le journal de recherche"
|
||
description = "Conserver les journaux détaillés des requêtes de recherche et des évaluations de sources"
|
||
|
||
[i18n.fr.settings.citation_style]
|
||
label = "Style de citation"
|
||
description = "Format de citation des sources dans les rapports"
|
||
|
||
[i18n.fr.settings.language]
|
||
label = "Langue"
|
||
description = "Langue principale pour la recherche et les résultats"
|
||
|
||
# ─── German (Deutsch) ────────────────────────────────────────────────────
|
||
|
||
[i18n.de]
|
||
name = "Tiefenforschungs-Hand"
|
||
description = "Autonomer Tiefenforscher — umfassende Untersuchung, Querverweise, Faktenprüfung und strukturierte Berichte"
|
||
category = "Produktivität"
|
||
tags = ["popular"]
|
||
|
||
[i18n.de.settings.research_depth]
|
||
label = "Forschungstiefe"
|
||
description = "Gründlichkeit jeder Untersuchung"
|
||
|
||
[i18n.de.settings.output_style]
|
||
label = "Ausgabestil"
|
||
description = "Formatierungsstil des Forschungsberichts"
|
||
|
||
[i18n.de.settings.source_verification]
|
||
label = "Quellenverifikation"
|
||
description = "Behauptungen vor dem Zitieren mit mehreren Quellen gegenkontrollieren"
|
||
|
||
[i18n.de.settings.max_sources]
|
||
label = "Maximale Quellen"
|
||
description = "Maximale Anzahl der pro Untersuchung zu konsultierenden Quellen"
|
||
|
||
[i18n.de.settings.auto_follow_up]
|
||
label = "Automatisches Nachfassen"
|
||
description = "Während der Untersuchung entdeckte Folgefragen automatisch recherchieren"
|
||
|
||
[i18n.de.settings.save_research_log]
|
||
label = "Forschungsprotokoll speichern"
|
||
description = "Detaillierte Protokolle der Suchabfragen und Quellenbewertungen speichern"
|
||
|
||
[i18n.de.settings.citation_style]
|
||
label = "Zitierstil"
|
||
description = "Format für Quellenangaben in Berichten"
|
||
|
||
[i18n.de.settings.language]
|
||
label = "Sprache"
|
||
description = "Hauptsprache für Forschung und Ergebnisse"
|