[222-epic] Sensory loop — event bus for data stream awareness #239

Open
opened 2026-03-15 14:35:02 -04:00 by hermes · 0 comments
Collaborator

Epic: #222 — The Workshop: Timmy as Presence

What

An always-running event bus that watches data streams and normalizes them into simple events Timmy can react to.

Streams (in priority order)

  1. Gitea webhooks — commits, issue comments, PR events (webhook listener already exists at ~/.hermes/bin/gitea-webhook-listener.py)
  2. Time — circadian awareness. Timmy knows morning from midnight.
  3. Workshop visitors — WebSocket events when someone enters the 3D world
  4. Voice mic — wake-word or ambient listening when voice loop is active
  5. Bitcoin blocks — new block notifications (lightweight, just height + timestamp)
  6. Terminal activity — optional, Alexander's working sessions

Design

  • Lightweight async loop. NOT an LLM call per event — just event normalization into a queue.
  • Events are typed: {stream: "gitea", type: "comment", actor: "rockachopa", target: "issue/222", summary: "...", timestamp: ...}
  • Timmy's react layer pulls from this queue at its own pace.
  • Most events are noted silently (memory write). Only significant ones trigger a bark.

What "significant" means

This is the key design decision. Not every commit needs a response. Heuristics:

  • Owner (rockachopa) activity → always significant
  • Direct mention of Timmy → significant
  • Long silence broken → significant
  • Everything else → note in memory, no response

Depends on: #222

## Epic: #222 — The Workshop: Timmy as Presence ### What An always-running event bus that watches data streams and normalizes them into simple events Timmy can react to. ### Streams (in priority order) 1. **Gitea webhooks** — commits, issue comments, PR events (webhook listener already exists at `~/.hermes/bin/gitea-webhook-listener.py`) 2. **Time** — circadian awareness. Timmy knows morning from midnight. 3. **Workshop visitors** — WebSocket events when someone enters the 3D world 4. **Voice mic** — wake-word or ambient listening when voice loop is active 5. **Bitcoin blocks** — new block notifications (lightweight, just height + timestamp) 6. **Terminal activity** — optional, Alexander's working sessions ### Design - Lightweight async loop. NOT an LLM call per event — just event normalization into a queue. - Events are typed: `{stream: "gitea", type: "comment", actor: "rockachopa", target: "issue/222", summary: "...", timestamp: ...}` - Timmy's react layer pulls from this queue at its own pace. - Most events are noted silently (memory write). Only significant ones trigger a bark. ### What "significant" means This is the key design decision. Not every commit needs a response. Heuristics: - Owner (rockachopa) activity → always significant - Direct mention of Timmy → significant - Long silence broken → significant - Everything else → note in memory, no response Depends on: #222
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rockachopa/Timmy-time-dashboard#239