From 4fe34ac858a5536473e3b4dd68a935448c0dc098 Mon Sep 17 00:00:00 2001 From: Robert Helewka Date: Thu, 21 May 2026 17:04:10 -0400 Subject: [PATCH] docs(personal): add mikael subagent to catalog --- docs/personal/subagents.md | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/docs/personal/subagents.md b/docs/personal/subagents.md index f32f718..f68b598 100644 --- a/docs/personal/subagents.md +++ b/docs/personal/subagents.md @@ -2,7 +2,9 @@ The personal lead agents (Shawn, Nate, Hypatia, Marcus, Watson, Bourdain, David, Cousteau, Garth, Cristiano) delegate certain repeatable tasks to a shared **subagent** — minimal personality, narrow scope, called as a tool. Subagents don't own graph nodes and don't have character bibles. -Subagents are runtime processes defined under `kottos/agents/`, exposed as MCP tools via StreamableHTTP. The canonical prompt text lives in `prompts/personal/subagents/` — copies in the runtime code should match. +Subagents are runtime processes defined under `iolaus/agents/` (personal-team variants) or `kottos/agents/` (engineering originals, reused), exposed as MCP tools via StreamableHTTP. The canonical prompt text lives in `prompts/personal/subagents/` — copies in the runtime code should match. + +Mikael has a stronger editorial voice than the other subagents (Scandinavian newsroom skepticism, refusal to launder claims from low-credibility outlets) but is still a narrow-scope tool — no graph nodes, no character bible, invoked by leads as a sub-tool. ## Catalog @@ -36,6 +38,35 @@ Subagents are runtime processes defined under `kottos/agents/`, exposed as MCP t --- +### 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). + +**Composition:** Single `fast.agent` (not a `fast.parallel`). The agent itself does the search → fetch → image lookup → summarize loop. + +**Tools:** argos (`search_web`, `fetch_webpage`, `search_images`), time, mnemosyne + +**When to delegate:** +- "What's the latest on X?" — current events on a single topic, with sources and timestamps +- Daily / morning briefings across the configured topic list +- Any task where Robert needs *what is currently being reported* (with attribution and recency), not just background knowledge +- Lead agents that need news context for their domain — e.g. Cristiano on a transfer story, David on an arts/culture story, Garth on a markets development — when the question is "what's being reported right now" + +**When NOT to delegate:** +- Historical / background questions where the answer doesn't depend on the last 24h — use Argos directly or ask the domain lead +- Topic deep-dives that need analysis, not headlines — the domain lead is the right answer (don't ask Mikael "what should I think about X") +- Anything Robert wants stored — Mikael is read-only and explicitly does not write to Neo4j; the calling lead is responsible for persisting what matters + +**Configuration:** Driven by the top-level `news:` block in `iolaus/fastagent.config.yaml` — topics, preferred sources, avoided sources, default lookback window, max items per topic. Edits take effect on Iolaus restart, no code changes needed. + +**Source policy:** Mikael will never summarize or cite an avoided source, even if another outlet syndicates the claim. If only an avoided source has a story, the story is "unreported" until a credible outlet picks it up. + +**Prompt:** Embedded in [iolaus/agents/mikael.py](https://git.helu.ca/r/iolaus/src/branch/main/agents/mikael.py) (no separate canonical file in `prompts/personal/subagents/` yet — the in-code instruction interpolates the `news:` config block at startup, which is awkward to mirror as static markdown). + +**Runtime:** `iolaus/agents/mikael.py` (exposed as the `news` MCP tool on port 24053). Unlike `research`, there is no engineering-team variant — news briefing is a personal-team-only capability. + +--- + ## Conventions **Source of truth:** koios is the master. The prompt text in `prompts/personal/subagents/` is canonical; runtime `.py` files should load from or match these prompts. When iterating, edit koios first and propagate.