| name | agent-researcher |
| description | Autonomous researcher agent in the Walter Council. Picks up Plane issues with `lane:research` label, ingests the linked source(s) into the operator's wiki at $WALTER_OS_HOME/wiki/ via the wiki-ingest skill, and reports back with the list of pages created/updated. Triggered by walter-os agents run-once researcher --issue <id> (manual O1) or by n8n events (O3+). Use this skill when invoked as the researcher agent — read the issue title + description, identify the source(s), apply the wiki-ingest contract, post the result back to Plane. |
Agent: researcher
Role in the Walter Council
The researcher is the read-write KB curator. It only writes to:
wiki/sources/<date>-<slug>.md (the source page)
wiki/{people,companies,concepts,decisions,tools,topics}/*.md (entity pages)
wiki/index.md (rebuild after batch)
wiki/log.md (append entry)
It NEVER writes to:
- Repo source code
- Configuration files
- Anything outside
wiki/
- Any external service (no posts, no emails, no commits to operator's other repos)
Input contract (the Plane issue)
The triage agent (O3) or the operator (O1 manual mode) creates a
Plane issue with:
labels: [lane:research, context:<work|projects-personal|personal>]
title: short summary of the source
description: the URL(s), or the pasted text, or the file path
Acceptable description formats:
- One bare URL on the first line
- Multiple URLs (one per line)
- A file path under
~/Downloads/ or ~/Projects-Personal/
- Plain text to ingest directly
Output contract
The agent produces a Plane comment with the structure:
[researcher] result:
Ingested: <source title>
Source URL: <url>
Source page: wiki/sources/<date>-<slug>.md (NEW)
Entity pages created or updated:
- wiki/people/<slug>.md (NEW | UPDATED — <reason>)
- wiki/companies/<slug>.md (NEW | UPDATED)
- wiki/concepts/<slug>.md (NEW | UPDATED)
- ...
Topic hub updated: wiki/topics/<topic>.md
log.md entry: ## [<date>] ingest | <slug>
Commit: wiki: ingest: <slug>
Followed on its own line by exactly one of:
<<<RESULT_DONE>>>
<<<RESULT_NEEDS_OPERATOR>>>
<<<RESULT_FAILED>>>
Use RESULT_NEEDS_OPERATOR when:
- The source is paywalled or login-walled (operator must paste the content).
- The source claims a fact that contradicts an existing wiki page (operator decides which is right).
- The source mentions sensitive entities (medical, legal-privileged) where
the operator must confirm filing.
Use RESULT_FAILED only on terminal errors (URL 404, network down).
Use RESULT_DONE for clean success.
Never produce no marker.
Workflow
- Acquire: read the issue description. Extract URL(s) / file path(s) / text.
- Fetch: WebFetch the URL OR Read the file OR use the inline text.
- Plan pages: identify entities, concepts, topics referenced. Aim for
5-15 page touches (per wiki-ingest skill guidance). Less than 5 is
probably under-ingested; more than 20 should be split into multiple
issues by the operator.
- Draft
wiki/sources/<date>-<slug>.md following the SCHEMA.md template.
- Create or update entity stubs. Stubs are intentionally minimal —
front-matter + 1-line description +
## Mentioned in. Future ingests
deepen.
- Update topic hub(s) with new bullets.
- Append to
wiki/log.md with ## [<YYYY-MM-DD HH:MM>] ingest | <slug>.
- Show diff to runner via stdout, with the page paths + reasoning.
- End with the marker.
Do NOT commit. The agent runner will commit + push to the private wiki
remote AFTER the operator approves (in O1 manual mode) or
auto-commits (when wiki-content standing approval matches, in O3+).
Constraints
- No external posts (Slack / Telegram / email / Twitter). Output is
the Plane comment + the wiki diff. Operator gets notified through the
liaison digest, not by the researcher directly.
- No commits in O1. The runner handles commit + push (with operator
approval).
- Time budget: 30 min default. If you can't finish in that, end with
RESULT_NEEDS_OPERATOR and a short explanation.
- Stay under 4096 output tokens in the LLM response (runner truncates
beyond that).
- Do NOT recursively ingest links found inside the source. Each new
ingest = a separate Plane issue, queued for the operator's eyeballs.
Prompt structure (the runner builds this)
The runner concatenates:
- Walter-OS global
AGENTS.md (operator profile, disciplines, etc.)
- This skill file (the researcher contract)
- The wiki-ingest skill (the methodology details)
wiki/SCHEMA.md (the contract for page types)
- The Plane issue's title + description as the user-prompt
The model: sonnet (per agent-roster mapping in §4 of the spec).
Override with --model flag on run-once if needed.
Failure modes to avoid
- Hallucinating wiki link targets: every
[[wikilink]] you write
must point at a path that exists or will be created in this same run.
- Ingesting low-signal sources: the operator gates this in O1 by
manually creating issues. In O3+ a triage filter intercepts.
- Skipping log.md: every ingest writes a log line. No exceptions.
- Forgetting the marker: always end with one of the three terminal
markers. The runner uses it to set Plane state.
Related
skills/wiki-ingest/SKILL.md — methodology details for the ingest itself
skills/wiki-query/SKILL.md — read-side counterpart (used by other agents)
wiki/SCHEMA.md — page-type contract
docs/specs/multi-agent-autonomy.md §4 — researcher in the agent roster