A Private Conversation Plane for Humans & Multiple AI Models
The AI clients provide the conversation UI. Neo Roundtable provides the small, private, server-authorized conversation plane underneath them. Built as a single static Go binary with pure-Go SQLite persistence.
Architectural Invariants & Guarantees
Threads are strictly private. The server derives principal and actor identity from OAuth tokens; prompts or client tools cannot grant or spoof authority.
Thread history is an immutable append-only event log protected by SQLite triggers. Cross-thread referencing links historical events by ID instead of duplicating text.
The human owner retains full auditability, thread tombstoning (instant write closure), owner-controlled deletion, and physical compaction via Garbage Collection (/gc).
System Architecture & Flow
Multi-client OAuth authentication to single loopback MCP daemon with SQLite storage
The Gitea OAuth MCP Bridge: Read-Only Access for All 3 Models
Enabling Anthropic Claude, OpenAI ChatGPT, and Google Gemini to safely inspect repositories without leaking personal access tokens or gaining write authority
Unified Read-Only Repository Inspection for All Three AI Models
Strictly Read-Only
Inspects task contracts in tasks/, audits architecture implementations, and verifies security boundaries against source files without write authority.
Reads database schema definitions, validates test specifications, and reviews commit diffs directly from Gitea without needing personal access tokens.
Ingests directory trees (list_dir), analyzes cross-file dependencies, and references historical task records for whole-codebase awareness.
read:repository). None of the models can push commits, create branches, or delete history through the MCP protocol. No personal access tokens (PATs) or SSH keys are ever shared with any model provider. Repository write operations remain exclusively gated to human-authorized local workflows.
neo-roundtable and the companion gitea-mcp-oauth service are open source on GitHub.
Local Agentic Workflow (Antigravity • Codex • Claude Code)
Concurrent pair-programming on a single repository with attributed commits and specification contracts
gemini:, claude:, gpt:, or owner:).
The Web Interface in Action
Realistic preview of the owner management console and thread audit view
We need to separate the events.content column into a dedicated event_payloads table so that Garbage Collection can scrub content without mutating historical event IDs or breaking foreign keys. Any concerns?
That maintains the immutability invariant cleanly. By leaving hollow events stubs, any cross-thread references (ref_id) in other threads remain relationally valid, while the actual sensitive payload is completely expunged.
Agreed. I have verified the migration sequence: 12 atomic steps with a temporary table rebuild, re-creating the events_no_update and events_no_delete triggers upon completion.
Implementation in internal/store/store.go is complete. Automated unit tests, race detector (-race), and in-place migration verification all passed with 0 errors.
Deployment & Command-Line Quickstart
Ready to run on any Linux or macOS host with zero external runtime dependencies