Task agents are good at *doing*. Bad at *knowing you* unless you repeat the same biography in every thread. I fixed that with Ivy — a dedicated interviewer inside Hive whose only job is to pull high-level context out of me and save it somewhere every other agent can read.

What "scan" means

Not background monitoring. A scan is a deliberate session: Ivy asks what I haven't answered recently — goals, how projects relate, what I'm optimizing for — and I answer once. When something lands it gets written to memory so the next run doesn't start from zero. Those saves split across Hive's two memory layersmemory_remember for atomic facts, obsidian_vault_write when it needs structure or a graph.

Why a separate agent

Dumping life story into a coding session makes the thread noisy, and the worker optimizes for the diff — not for building a durable profile. Ivy's only success metric is whether the memory store is richer after we talk. That single constraint changes everything about how she asks.

The Hive cast is split accordingly — pixel portraits from public/sprites/head-*.png in agent-talk-v2:

Hive cast — agent-talk-v2 sprites

  • PriyaHead of synthesis & convergence
  • MarcusHead of execution & diagnosis
  • AikoHead of rigor & edges
  • ArthurHead of ambient session memory
  • Iv
    IvyHead of context extraction

Priya, Marcus, Aiko: packages/web/public/sprites/head-*.png in agent-talk-v2. Arthur: ambient agent — no head portrait in that folder; Hive icon from logo-hive-system-icon.svg. Ivy: interview UI uses an initial chip; no head-ivy.png yet — styled to match the app.

None of the first four own "building Bagus's durable profile." That's Ivy's lane alone — so the others stay fast and argumentative.

What actually gets captured

Portable facts: how Fikri Studio client work sits next to personal builds, what Hive is for, what "good" looks like when I delegate. Not transcripts — the sentences I'd want pasted at the top of a briefing. The lead image shows the loop: chat left, Ivy extraction log right, memory cards accumulating as we talk.

Ivy in agent-talk-v2

Engineering slice — how config/agents/interviewer.md behavior is enforced in code.

Thread, mode, membership

Route /interview, thread id interview — server-side interviewMode: true, membership locked to only interviewer. Toggle via set_interview_mode on the socket: on → snapshots prior roster, replaces with Ivy; off → restores. In normal group chat Ivy speaks only if added or @Ivy'd.

MCP bundle — extraction-only, by construction

When agent.id === "interviewer", groupchat.ts filters MCPs to a hard allowlist: bagus_memory, problem_cards, roadmap_store, obsidian_vault, obsidian_rag, obsidian_graph, perplexity, firecrawl. Coding worker, browser, scheduling, Telegram, app_ui — all stripped. Ivy is not "prompted to behave" — she cannot invoke heavy machinery even if she tries.

System prompt shape

No full thread-rules.md wall. Stack: interviewer.md personality → datetime → compiled wiki → active Problem Cards → Roadmap → goals → daily state → buildInterviewerCapabilitiesSection. She walks in already anchored on what's on file, then interviews on top.

Cognition — what `interviewer.md` adds beyond tools

SCAN vs DRILL, a domain wheel (work, projects, learning, health, relationships, money, habits, values), session modes (daily check-in, problem excavation, roadmap review, reflection), one-question-at-a-time discipline. Server enforces *capability*; markdown enforces *conduct*.

Extraction sidebar

UiInterviewView: category chips (Memory / Problems / Roadmap / Obsidian), cards with preview + tool name + relative timestamps (30s tick), Open … to jump to each module. Only four tool patterns emit sidebar cards — memory_remember, problem_create, roadmap_create/roadmap_update, obsidian_vault_write. Reads and research tools don't. Preview pulls from the tool input string; memory_remember also surfaces addedAt / confirmedAt from the result when present. The Memory and Obsidian chips are the live face of the two-layer model — facts vs vault writes, side by side.

Persistence and merge

Browser: localStorage agent-talk-v2:ivy-extractions. Server: KV agent-talk-v2:ivy-interview-extractions, max 200, deduped by tool id, disk-persisted. On reconnect: server sends ivyInterviewExtractions, client merges with local by id (server wins), caps at 200, pushes back via restore_ivy_extractions.

Where to edit what

LayerPath
Voice, scan/drill rules, tool-use etiquetteconfig/agents/interviewer.md
Thread semanticsconfig/rules/thread-rules.mdInterview module
MCP allowlist + prompt assemblypackages/server/src/groupchat.ts
Sidebar enrichment + KV persistencepackages/server/src/debate-server.ts
Sidebar UIpackages/web/components/custom/UiInterviewView.tsx
Merge + socket handlerspackages/web/lib/useAgentChat.tsx

Memory card in the extraction log

When memory_remember completes, the sidebar shows a Memory row: brain icon, fact text (from tool input), tool name, added … ago, Open Memory. The temporal layer made visible — one atomic deposit without scrolling through the thread.

Ivy extraction log: Memory card — fact text, memory_remember, added time, Open Memory
Ivy extraction log: Memory card — fact text, memory_remember, added time, Open Memory

Ivy extraction log: Memory card — fact text, memory_remember, added time, Open Memory

Same card pattern for Problem, Roadmap, Obsidian. This is what "saved to memory" looks like in the UI.

Ivy crawling bagusfikri.me for ground truth

When the public site is the source of truth, Ivy calls Firecrawl (firecrawl_scrape) to read the URL as markdown before summarizing or storing. Research tools sparingly — for a concrete page, not to fill silence.

Ivy: firecrawl done on bagusfikri.me, summary of published posts from the crawl
Ivy: firecrawl done on bagusfikri.me, summary of published posts from the crawl

Ivy: firecrawl done on bagusfikri.me, summary of published posts from the crawl

Tool line reads firecrawl done on https://bagusfikri.me; she comes back with post titles, dates, tone — so the next question sits on facts from the crawl, not guesswork.

Payoff

Every other agent pulls from the same memory layer. They stop re-deriving basics, pick better defaults, argue less with how I want things done. The interviewer is cheap compared to the cost of *being misunderstood* across dozens of sessions.

Design rule

One interviewer, many workers. Ivy stays in her lane — scan, clarify, save — so the rest of the system stays fast and narrow.

Hive is the umbrella: a Jarvis-shaped assistant that learns how I think, not a single-purpose chatbot.