CinvanaAI
← All projects

Library · Conversations & archives

Agent Chatroom Ledger

Give a local agent room a durable record, with separate reading positions for each consumer.

Repository: CinvanaAI/agent-chatroom-ledger

Recorded synthetic example. Source with a complete offline example.

See the idea in action.

After restart: Analyst has 0 unread, Reviewer has 2; excluding message 1 leaves canonical IDs [1, 2] and visible ID [2].

Example input
Two synthetic messages, read independently by Analyst and Reviewer.
Captured result
{
  "unread_before": {
    "Analyst": 2,
    "Reviewer": 2
  },
  "unread_after_restart": {
    "Analyst": 0,
    "Reviewer": 2
  },
  "canonical_ids": [
    1,
    2
  ],
  "visible_ids_after_exclusion": [
    2
  ],
  "canonical_lens_survived_broken_view": true,
  "rebuilt_visible_ids": [
    2
  ],
  "reviewer_unread_after_explicit_acknowledgement": 0,
  "verification": {
    "ok": true,
    "error_count": 0,
    "issues": []
  }
}

Try the example.

From the repository root, follow the dependency requirements in the README. This example uses supplied synthetic material.

python -m pip install -e .
python -m examples.walkthrough

After restart: Analyst has 0 unread, Reviewer has 2; excluding message 1 leaves canonical IDs [1, 2] and visible ID [2].

Complete setup and instructions ↗

The interesting part.

Canonical messages survive changes to compiled context views and per-consumer cursors.

Focused extraction

Where it came from.

Chatroom backend from the historical Python Agent Foundry workbench.

June 2026 — Historical chatroom backend creation. Source ↗

Removes host registry coupling, model connectors and private rooms; retains durable storage and governance.

A durable room backend, with no implied current model connector.

Source ↗

Follow the family: Builder, Factory and the Python Foundry

  • Extracted fromPython Agent Foundry Workbench

    See the integrated setting from which this independently useful mechanism was separated. The standalone boundary has documented public adaptations; this is not a promise of current drop-in interchangeability.

    Source ↗