docs(subagents): research now verifies; document Dolores
Canonical prompts had drifted from the deployed code. research gained a third
fan-out member (doc_lookup / mnemosyne) and its synthesizer was promoted from a
merge step into the researcher: it holds dolores and time, and escalates to a
real browser when a source comes back blocked, a URL looks guessed, or a
load-bearing claim needs a live check.
All three variants updated — personal, work, engineering — preserving each
team's memory framing and the personal variant's node-schema and Cypher
sections. The engineering variant was a near-stub; it now carries the same
structure as the others.
Dolores had no canonical prompt anywhere in koios despite running on all three
teams. Added prompts/{personal,work,engineering}/subagents/dolores.md from the
deployed instruction, unchanged — this closes a documentation gap rather than
altering her behaviour. Her prompt stays deliberately narrow: she is handed one
page and one question at a time, and browser tradecraft is what she is for.
docs/*/subagents.md gain a dolores entry with delegation guidance, including
the task-sizing rule that keeps callers from handing her multi-site errands.
Work's research Runtime line said "TBD, port to be assigned" — mentor's
research has been live on 24250 for some time.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -8,24 +8,26 @@ Subagents are runtime processes (defined under `kottos/agents/`), exposed as MCP
|
||||
|
||||
### research
|
||||
|
||||
**Purpose:** Answer a question by querying both the public web and Robert's personal Neo4j memory in parallel, then synthesizing one integrated response.
|
||||
**Purpose:** Answer a question by searching the public web, Robert's Neo4j memory, and the Mnemosyne document library in parallel — then judging what came back and verifying it against live pages where it matters.
|
||||
|
||||
**Composition:** `fast.parallel` of three sub-agents:
|
||||
- `web_search` — argos
|
||||
**Composition:** `fast.parallel` of four sub-agents:
|
||||
- `web_search` — argos; reports blocked/empty/JS-shell results rather than papering over them
|
||||
- `memory_lookup` — neo4j (read-only)
|
||||
- `synthesizer` — merges the two reports, flags conflicts, suggests memory updates
|
||||
- `doc_lookup` — mnemosyne (read-only); passes `library_type` when the domain is clear
|
||||
- `synthesizer` — the researcher: reads all three reports, escalates to **dolores** for a real browser when a source is blocked, a URL looks guessed, or a load-bearing claim needs a live check
|
||||
|
||||
**Tools:** argos, neo4j_cypher
|
||||
**Tools:** argos, neo4j_cypher, mnemosyne, dolores, time
|
||||
|
||||
**When to delegate:**
|
||||
- A user question where the answer might exist in Robert's notes AND on the public web
|
||||
- "What do I already know about X, and what's the current public information on it?"
|
||||
- When the lead wants memory-aware research without burning its own context on parallel queries
|
||||
- A question where being wrong has a cost — the answer gets verified, not just retrieved
|
||||
- "What do I already know about X, and what's actually true about it now?"
|
||||
- Anything whose answer goes stale: prices, availability, dates, current status
|
||||
- When the lead wants memory-aware research without burning its own context
|
||||
|
||||
**When NOT to delegate:**
|
||||
- Quick web lookups where memory isn't relevant — use Argos directly
|
||||
- Pure graph queries where the web isn't needed — query Neo4j directly
|
||||
- Technical library/API research — use `tech_research` instead
|
||||
- Operating a browser as the goal itself (a form, a flow, a screenshot) — use `dolores`
|
||||
|
||||
**Prompt:** [prompts/engineering/subagents/research.md](../../prompts/engineering/subagents/research.md)
|
||||
|
||||
@@ -33,6 +35,31 @@ Subagents are runtime processes (defined under `kottos/agents/`), exposed as MCP
|
||||
|
||||
---
|
||||
|
||||
### dolores
|
||||
|
||||
**Purpose:** Operate a real web browser. Dolores drives a headed Chromium on the RDP desktop host via Playwright — she reads live pages, fills forms, works through multi-step flows, and returns screenshots.
|
||||
|
||||
**Composition:** single `fast.agent`.
|
||||
|
||||
**Tools:** playwright
|
||||
|
||||
**When to delegate:**
|
||||
- A task that genuinely requires a browser: a form to fill, a login flow, a multi-step navigation
|
||||
- A page Argos can't render — JS-heavy, client-rendered, cookie-walled
|
||||
- When the *visual itself* is the deliverable ("what does this page look like")
|
||||
|
||||
**When NOT to delegate:**
|
||||
- Finding an answer — that's `research`, which will call Dolores itself when a source needs verifying
|
||||
- Anything the cached snippet already answers
|
||||
|
||||
**Sizing the task:** one page and one question at a time. She has no view of the caller's goal, so a task spanning several sites — or one whose later steps depend on what earlier ones turn up — comes back thin or wrong. Chain the steps from the calling side instead.
|
||||
|
||||
**Prompt:** [prompts/engineering/subagents/dolores.md](../../prompts/engineering/subagents/dolores.md)
|
||||
|
||||
**Runtime:** `kottos/agents/dolores.py` — port 24153
|
||||
|
||||
---
|
||||
|
||||
### tech_research
|
||||
|
||||
**Purpose:** Investigate technical questions — library comparisons, API docs, framework patterns, code examples. Returns structured analysis with options, trade-offs, code snippets, version notes, and cited recommendations.
|
||||
|
||||
@@ -10,27 +10,26 @@ Mikael has a stronger editorial voice than the other subagents (Scandinavian new
|
||||
|
||||
### research
|
||||
|
||||
**Purpose:** Answer a question by querying both the public web and Robert's personal Neo4j memory in parallel, then synthesizing one integrated response.
|
||||
**Purpose:** Answer a question by searching the public web, Robert's Neo4j memory, and the Mnemosyne document library in parallel — then judging what came back and verifying it against live pages where it matters.
|
||||
|
||||
**Composition:** `fast.parallel` of three sub-agents:
|
||||
- `web_search` — argos
|
||||
- `memory_lookup` — neo4j (read-only), scoped to the **full personal-domain schema** (10 agents, all node types)
|
||||
- `synthesizer` — merges the two reports, flags conflicts, suggests memory updates
|
||||
**Composition:** `fast.parallel` of four sub-agents:
|
||||
- `web_search` — argos; reports blocked/empty/JS-shell results rather than papering over them
|
||||
- `memory_lookup` — neo4j (read-only)
|
||||
- `doc_lookup` — mnemosyne (read-only); passes `library_type` when the domain is clear
|
||||
- `synthesizer` — the researcher: reads all three reports, escalates to **dolores** for a real browser when a source is blocked, a URL looks guessed, or a load-bearing claim needs a live check
|
||||
|
||||
**Tools:** argos, neo4j_cypher
|
||||
**Tools:** argos, neo4j_cypher, mnemosyne, dolores, time
|
||||
|
||||
**When to delegate:**
|
||||
- A question where the answer might exist in Robert's personal Neo4j *and* on the public web
|
||||
- "What do I already know about X, and what's the current public information on it?"
|
||||
- Travel research that should also check Robert's past trips and journal entries
|
||||
- Book/film/music recommendations that should consider what he's already engaged with
|
||||
- Investment or finance questions that should reference his existing accounts and goals
|
||||
- When the lead wants memory-aware research without burning its own context on parallel queries
|
||||
- A question where being wrong has a cost — the answer gets verified, not just retrieved
|
||||
- "What do I already know about X, and what's actually true about it now?"
|
||||
- Anything whose answer goes stale: prices, availability, dates, current status
|
||||
- When the lead wants memory-aware research without burning its own context
|
||||
|
||||
**When NOT to delegate:**
|
||||
- Quick web lookups where memory isn't relevant — use Argos directly
|
||||
- Pure graph queries where the web isn't needed — query Neo4j directly with read-only Cypher
|
||||
- Single-domain depth questions where the domain specialist is the right answer (don't delegate "what should I read about Stoicism" to research when Hypatia owns it)
|
||||
- Pure graph queries where the web isn't needed — query Neo4j directly
|
||||
- Operating a browser as the goal itself (a form, a flow, a screenshot) — use `dolores`
|
||||
|
||||
**Prompt:** [prompts/personal/subagents/research.md](../../prompts/personal/subagents/research.md)
|
||||
|
||||
@@ -38,6 +37,31 @@ Mikael has a stronger editorial voice than the other subagents (Scandinavian new
|
||||
|
||||
---
|
||||
|
||||
### dolores
|
||||
|
||||
**Purpose:** Operate a real web browser. Dolores drives a headed Chromium on the RDP desktop host via Playwright — she reads live pages, fills forms, works through multi-step flows, and returns screenshots.
|
||||
|
||||
**Composition:** single `fast.agent`.
|
||||
|
||||
**Tools:** playwright
|
||||
|
||||
**When to delegate:**
|
||||
- A task that genuinely requires a browser: a form to fill, a login flow, a multi-step navigation
|
||||
- A page Argos can't render — JS-heavy, client-rendered, cookie-walled
|
||||
- When the *visual itself* is the deliverable ("what does this page look like")
|
||||
|
||||
**When NOT to delegate:**
|
||||
- Finding an answer — that's `research`, which will call Dolores itself when a source needs verifying
|
||||
- Anything the cached snippet already answers
|
||||
|
||||
**Sizing the task:** one page and one question at a time. She has no view of the caller's goal, so a task spanning several sites — or one whose later steps depend on what earlier ones turn up — comes back thin or wrong. Chain the steps from the calling side instead.
|
||||
|
||||
**Prompt:** [prompts/personal/subagents/dolores.md](../../prompts/personal/subagents/dolores.md)
|
||||
|
||||
**Runtime:** `iolaus/agents/dolores.py` — port 24054
|
||||
|
||||
---
|
||||
|
||||
### mikael
|
||||
|
||||
**Purpose:** Produce topic-driven, source-verified news briefings. Reads from a curated topic list and applies a strict source policy (preferred sources seeded into queries; avoided sources excluded with `-site:` *and* post-filtered by hostname).
|
||||
|
||||
@@ -8,30 +8,55 @@ Subagents are runtime processes exposed as MCP tools. The canonical prompt text
|
||||
|
||||
### research
|
||||
|
||||
**Purpose:** Answer a question by querying both the public web and Robert's Neo4j memory in parallel, then synthesizing one integrated response with conflicts flagged and suggested memory updates surfaced.
|
||||
**Purpose:** Answer a question by searching the public web, Robert's Neo4j memory, and the Mnemosyne document library in parallel — then judging what came back and verifying it against live pages where it matters.
|
||||
|
||||
**Composition:** `fast.parallel` of three sub-agents:
|
||||
- `web_search` — argos
|
||||
- `memory_lookup` — neo4j (read-only); framed around work-team node types (clients, opportunities, engagements, decisions, technologies, contacts)
|
||||
- `synthesizer` — merges the two reports, flags conflicts, suggests which node type a memory update would belong on
|
||||
**Composition:** `fast.parallel` of four sub-agents:
|
||||
- `web_search` — argos; reports blocked/empty/JS-shell results rather than papering over them
|
||||
- `memory_lookup` — neo4j (read-only)
|
||||
- `doc_lookup` — mnemosyne (read-only); passes `library_type` when the domain is clear
|
||||
- `synthesizer` — the researcher: reads all three reports, escalates to **dolores** for a real browser when a source is blocked, a URL looks guessed, or a load-bearing claim needs a live check
|
||||
|
||||
**Tools:** argos, neo4j_cypher
|
||||
**Tools:** argos, neo4j_cypher, mnemosyne, dolores, time
|
||||
|
||||
**When to delegate:**
|
||||
- Pre-meeting prep on a client or contact — what's already in the graph, plus current public information (recent news, funding, leadership changes)
|
||||
- Opportunity qualification where the answer might exist in prior `Decision` or `Technology` nodes AND on the public web
|
||||
- "What do we already know about X, and what's the current public information on it?" against the work pipeline
|
||||
- When a lead wants memory-aware research without burning its own context on parallel queries
|
||||
- A question where being wrong has a cost — the answer gets verified, not just retrieved
|
||||
- "What do I already know about X, and what's actually true about it now?"
|
||||
- Anything whose answer goes stale: prices, availability, dates, current status
|
||||
- When the lead wants memory-aware research without burning its own context
|
||||
|
||||
**When NOT to delegate:**
|
||||
- Quick web lookups where memory isn't relevant — use argos directly
|
||||
- Pure graph queries on a known client or opportunity — query Neo4j directly
|
||||
- AWS architecture design questions — use `aws-sa`
|
||||
- Deep library/framework/API research — use the work-team `tech_research` subagent (below).
|
||||
- Quick web lookups where memory isn't relevant — use Argos directly
|
||||
- Pure graph queries where the web isn't needed — query Neo4j directly
|
||||
- Operating a browser as the goal itself (a form, a flow, a screenshot) — use `dolores`
|
||||
|
||||
**Prompt:** [prompts/work/subagents/research.md](../../prompts/work/subagents/research.md)
|
||||
|
||||
**Runtime:** TBD — copy of engineering's `kottos/agents/research.py` with the work-team memory framing applied. Port to be assigned when wired up.
|
||||
**Runtime:** `mentor/agents/research.py` — port 24250
|
||||
|
||||
---
|
||||
|
||||
### dolores
|
||||
|
||||
**Purpose:** Operate a real web browser. Dolores drives a headed Chromium on the RDP desktop host via Playwright — she reads live pages, fills forms, works through multi-step flows, and returns screenshots.
|
||||
|
||||
**Composition:** single `fast.agent`.
|
||||
|
||||
**Tools:** playwright
|
||||
|
||||
**When to delegate:**
|
||||
- A task that genuinely requires a browser: a form to fill, a login flow, a multi-step navigation
|
||||
- A page Argos can't render — JS-heavy, client-rendered, cookie-walled
|
||||
- When the *visual itself* is the deliverable ("what does this page look like")
|
||||
|
||||
**When NOT to delegate:**
|
||||
- Finding an answer — that's `research`, which will call Dolores itself when a source needs verifying
|
||||
- Anything the cached snippet already answers
|
||||
|
||||
**Sizing the task:** one page and one question at a time. She has no view of the caller's goal, so a task spanning several sites — or one whose later steps depend on what earlier ones turn up — comes back thin or wrong. Chain the steps from the calling side instead.
|
||||
|
||||
**Prompt:** [prompts/work/subagents/dolores.md](../../prompts/work/subagents/dolores.md)
|
||||
|
||||
**Runtime:** `mentor/agents/dolores.py` — port 24253
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user