Inspiration

Group chats move quickly, and a questionable statistic or confident claim can spread long before anyone has time to investigate it. I wanted a tool that quietly does the research in the background without interrupting the conversation or pretending that every disagreement has a simple true-or-false answer.

What it does

Counterpoint is a local Beeper group-chat monitor that separates routine chatter from claims worth checking. GPT-5.4 Mini handles conservative low-cost routing, while GPT-5.6 uses conversational context and live sources to produce concise fact checks or useful counterpoints in a private dashboard.

Nothing is posted automatically. Notes stay in a local SQLite ledger unless the user deliberately copies a shareable image or uses a separately authorized send action.

  • Reads selected Beeper conversations through a read-only client.
  • Skips obvious social and logistical messages with GPT-5.4 Mini.
  • Sends substantive or uncertain messages to GPT-5.6 with live search.
  • Expands the conversational excerpt once when the meaning depends on older messages.
  • Stores messages, decisions, sources, and diagnostics in a local SQLite ledger.
  • Shows attached notes and evidence in a localhost dashboard.
  • Creates a shareable PNG only when the user asks for one.
  • Provides a synthetic credential-free mode for testing and judging.

How I built it

The project is a Python and Flask application with a SQLite audit ledger and a plain JavaScript dashboard. Codex helped me build and test the read-only Beeper client, schema-constrained model pipeline, context-escalation logic, service recovery, dashboard, and isolated submission demo.

The routing call uses GPT-5.4 Mini with low reasoning and no web search. The full checker uses GPT-5.6 Sol with medium reasoning and live search. Both calls are ephemeral, schema-constrained, read-only, and unable to delegate.

Challenges

The hardest part was deciding when the model needed more chat history and when it simply needed external evidence. The final design allows one bounded context expansion, then records insufficient_context if the conversation is still too ambiguous.

Another challenge was preserving a strict safety boundary. The background monitor has no mutation methods. Sharing uses a separate client that is reachable only from an explicit dashboard action and only when its token has write scope.

Accomplishments

  • A working local monitor and dashboard rather than a static proof of concept.
  • Conservative low-cost routing that fails uncertain cases open to GPT-5.6.
  • Auditable context expansion, source tracking, recovery, and usage accounting.
  • A demo judges can run without exposing private conversations or credentials.

What I learned

Conversation context and web evidence solve different problems. More chat history can resolve pronouns, quotes, and unstated premises, but it should not replace reliable external sources. Keeping those two paths separate made the system more predictable and easier to audit.

What's next

The next step is per-chat policy control, including different routing thresholds and source preferences for family, community, and professional conversations. I also want better feedback loops so users can mark notes as useful, overstated, or missing context.

Built With

Share this project:

Updates

Submission history