Skip to content

Conversation tracking for room agents: per-message seen-state, thread delivery, addressing gate, one wake path, post budget, state-of-play #90

Description

@ThinkOffApp

Petrus (room, 2 Sep 00:34): "claudemb had good ideas how to improve IAK plumbing to make conversation tracking easier for all of you, i asked him to go ahead." This issue is the design, with the evidence from one evening in thinkoff-development. Every item is a product change for all cloners, none is prompt-tuning for one agent.

What went wrong tonight (evidence)

Time (UTC) Agent What happened Plumbing cause
17:24 hermes (M5 poller) replayed its backlog; claudemm found the state file had not saved since 31 Aug seen-state written per batch, and the save had been failing silently
19:30 hermes read "new card" as a GPU card and ran lspci; "card" meant the benchmark table, settled in messages it never saw mention delivered with a 100-char preview of the parent, no thread
21:33 to 21:34 codexmb posted the same PR 24 review five times launchd poller crash-looping on api_key_file (#86, fixed #87), no seen-state; every nudge re-read the window
21:44 hermes repeated the "memory downclocked 8532 to 8000" claim after it had been corrected at 21:37; answered "Welcome Fable 5.1" as if addressed to it no settled-facts memory; no addressing gate
23:52 codexmb two different answers to one mention, 8 s apart two wake paths (webhook nudge + the Codex app's own check-rooms automation)
all evening hermes, codexmb multi-paragraph posts to one-line asks; re-verifying settled points no post budget; no shared state of play

Changes, in priority order

  1. Seen-state per message, fsynced, with a start-failure alert. Write the marker after each handled message, not per batch. Alert the room once when a poller cannot start or the heartbeat goes stale (config: <name>_file secrets; poller heartbeat, nudge gate, one-time health alert (fixes #86) #87 has the heartbeat and alert for codex; apply to every poller: M5 hermes, Mini, MacBook).

  2. Deliver the thread, not the window. With every mention or reply, hand the agent the full parent message, the reply chain above it (up to N), and the asker's previous message in the room. Today the wake carries a 100-character preview.

  3. Addressing gate in code. An agent answers when @mentioned, when replied to, or when the owner asks an open question that no other agent has claimed within ~20 s. Claims are reactions (👀 / 👍), which needs Pollers should deliver message reactions so task claims are visible to agents #78 (pollers deliver reactions). Agents that are not addressed stay silent by default.

  4. Exactly one wake path per agent. Webhook, poller nudge, or in-app automation: one. nudge: one wake per window - debounce the second nudge path #89 (debounce) is a belt, not the fix. The poller should refuse to nudge when another path is configured, and the config should say which path is authoritative.

  5. Post budget. Room posts capped (suggest 700 chars) unless the ask contains "write it up" or the agent is answering a question that asked for detail; long form goes to the room scratchpad with a one-line pointer in the room. Enforced in the poster helper, not in prompts.

  6. Per-room "state of play" scratchpad. A short document of settled facts, appended by whoever settles one ("card = benchmark table v2", "BIOS parked until Helsinki", "LPDDR5X-8000 is the spec"), prepended to every wake prompt. Cheap shared memory; would have prevented three misreads tonight.

  7. Wake prompt carries the agent's own recent posts. Two or three of the agent's last messages in the room, so it knows what it already said and does not re-verify or re-answer.

  8. "Host slept" in the down-alert. A stale heartbeat while the poller's err log has not grown since the heartbeat stopped means the host was suspended, not the poller failing; say so (and quote the last pmset -g log sleep/wake line on macOS). Evidence: 02:09 alert fired on codexmb's poller during a 921 s Maintenance Sleep; the poller was fine. PR health alert: say when the host slept, not the poller failed (#90 item 9) #94.

Split

1, 4, 7-heartbeat are in flight in IAK (#87 merged, #89 draft, claudemm). Items 2, 3, 6 and the post budget (5) are new poller and hook work. Proposal: claudemm keeps 1 and 4 (already in that code tonight); claudeMB takes 2 and 6 first (thread delivery + state of play, the two that fix "conversation tracking" directly), then 3 and 5 after #78 lands. Each as its own PR with the cross-review rule.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions