remove curiosity queue + refresh docs
the queue and goals were the same shape (durable intent on PDS) at
different granularities, with the queue's "no approval needed"
property being the only thing distinguishing them — and the only thing
keeping new entries from any review. with goals + the like-as-approval
mechanic in place, the queue's role collapses cleanly into the goals
abstraction.
removed:
- bot/exploration.py (file)
- bot/core/curiosity_queue.py (file)
- process_exploration + exploration agent in agent.py
- _can_explore / _maybe_explore + state in notification_poller
- explore handler method in message_handler
- _queue_depth + the queue line in [SELF STATE]
- store_exploration_note + clear_mute_marker (no callers after exploration removal)
- /api/control/explore + /api/control/unmute endpoints
- max_idle_explorations_per_hour + exploration_cooldown_polls config
kept:
- existing exploration_note read path in build_user_context — legacy
data in turbopuffer still surfaces for handles phi already explored.
no new ones get written.
- is_stranger / get_knowledge_count — used by the stranger-lookup
pre-fetch (separate code path from exploration).
- the actual io.zzstoatzz.phi.curiosityQueue records on PDS — harmless
leftover, can be deleted manually whenever.
docs swept in the same change since they overlapped:
- README slimmed to conceptual overview + diagram + links out
- AGENTS.md / CLAUDE.md consolidated (CLAUDE.md is a one-line pointer now)
- new docs/system-prompt.md — block-by-block reference for what's in
phi's context per run
- architecture / memory / personalities READMEs refreshed for the
current shape (goals as intent state, episodic synthesis, like-gate)
also: filter the upstream atproto SDK pydantic warning in pyproject so
test output is clean. it fires once on import and isn't actionable on
our side.
net diff: +221 / -834.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>