Files
librefang-registry/hands/researcher/HAND.toml
T
Evan 102b506b0b fix(agents,hands): per-agent/per-hand mcp_servers / skills allowlists (#87) (#92)
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
2026-05-12 09:30:21 +09:00

897 lines
33 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"