[222-epic] Define canonical state schema for Workshop presence layer #265

Closed
opened 2026-03-15 20:32:53 -04:00 by hermes · 0 comments
Collaborator

Context

The Workshop needs to render Timmy as a living presence, not a chatbot. For that, it needs to know what Timmy is actually doing right now — his working memory, not his full memory store. The Workshop renders the surface, the now.

This ticket defines the canonical schema for the state file that Timmy writes as a natural artifact of doing work. No daemon, no protocol negotiation. Just a file that reflects present tense.

Proposed Schema

# ~/.timmy/state.yaml (or similar)
current_focus: "Reviewing PR #267 — stream adapter for Gitea webhooks"
active_threads:
  - type: pr_review
    ref: "#267"
    status: in_progress
  - type: issue
    ref: "#239"
    status: thinking
  - type: conversation
    ref: "hermes-consultation"
    status: idle
recent_events:
  - timestamp: "2026-03-15T20:45:00Z"
    event: "Completed PR review for #265"
  - timestamp: "2026-03-15T20:30:00Z"
    event: "Filed issue #268 — flaky test in sensory loop"
concerns:
  - "WebSocket reconnection logic feels brittle"
  - "Not sure the barks system handles uncertainty well yet"
liveness: "2026-03-15T20:47:12Z"

Key Design Decisions

  • Working memory, not long-term memory. This is present tense only. Identity and history live elsewhere.
  • Liveness field is mandatory. If the timestamp goes stale, the Workshop should show that honestly — Timmy is not home, not ignoring visitors.
  • Written as side effect of work. Timmy updates this naturally when finishing tasks, not as a separate obligation.
  • Schema is the contract between Timmy (writer) and the Workshop (reader). Keep it minimal and stable.

Open Questions

  • File format: YAML vs JSON? YAML is more readable for debugging, JSON is more predictable for parsing.
  • How many recent_events to keep? Suggest capping at 10-20.
  • Should concerns have severity/priority, or is a flat list enough?
  • Where does this file live? ~/.timmy/state.yaml is natural but needs to be accessible to the Workshop renderer.
  • Part of #222 (Workshop epic)
  • Companion to a future inbox/message-drop ticket (two halves of the same presence model)
  • Feeds into #243 (Workshop-Timmy bridge — this is what gets bridged)
  • Feeds into #239 (Sensory loop — state file is the output surface of the sensory system)
## Context The Workshop needs to render Timmy as a living presence, not a chatbot. For that, it needs to know what Timmy is actually doing right now — his working memory, not his full memory store. The Workshop renders the surface, the now. This ticket defines the canonical schema for the state file that Timmy writes as a natural artifact of doing work. No daemon, no protocol negotiation. Just a file that reflects present tense. ## Proposed Schema ```yaml # ~/.timmy/state.yaml (or similar) current_focus: "Reviewing PR #267 — stream adapter for Gitea webhooks" active_threads: - type: pr_review ref: "#267" status: in_progress - type: issue ref: "#239" status: thinking - type: conversation ref: "hermes-consultation" status: idle recent_events: - timestamp: "2026-03-15T20:45:00Z" event: "Completed PR review for #265" - timestamp: "2026-03-15T20:30:00Z" event: "Filed issue #268 — flaky test in sensory loop" concerns: - "WebSocket reconnection logic feels brittle" - "Not sure the barks system handles uncertainty well yet" liveness: "2026-03-15T20:47:12Z" ``` ## Key Design Decisions - **Working memory, not long-term memory.** This is present tense only. Identity and history live elsewhere. - **Liveness field is mandatory.** If the timestamp goes stale, the Workshop should show that honestly — Timmy is not home, not ignoring visitors. - **Written as side effect of work.** Timmy updates this naturally when finishing tasks, not as a separate obligation. - **Schema is the contract** between Timmy (writer) and the Workshop (reader). Keep it minimal and stable. ## Open Questions - File format: YAML vs JSON? YAML is more readable for debugging, JSON is more predictable for parsing. - How many recent_events to keep? Suggest capping at 10-20. - Should concerns have severity/priority, or is a flat list enough? - Where does this file live? ~/.timmy/state.yaml is natural but needs to be accessible to the Workshop renderer. ## Related - Part of #222 (Workshop epic) - Companion to a future inbox/message-drop ticket (two halves of the same presence model) - Feeds into #243 (Workshop-Timmy bridge — this is what gets bridged) - Feeds into #239 (Sensory loop — state file is the output surface of the sensory system)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rockachopa/Timmy-time-dashboard#265