How latent-spaces/sottochat works
sottochat is a local, read-only companion for long-running Claude Code, Claude app, and Codex sessions. Its main workflow discovers sessions, tails and parses their transcripts, groups events into turns, then serves a live inbox and per-session Q&A where developers can prepare copyable replies. Separate branches provide background turn summaries, authentication guidance, settings, persisted chat state, and token accounting. The supplied source excerpts and index establish the server’s dependencies, but do not expose every route or runtime callback; uncertain links are omitted.
Main entry points: server.ts HTTP + WS server · tailer.ts Transcript tailer · registry.ts Session registry · claude-discovery.ts Claude discovery
Components 22
Session discovery
- Session registry
src/registry.ts - Claude discovery
src/claude-discovery.ts - Codex discovery
src/codex-discovery.ts - Process discovery
src/process-discovery.ts
Transcript processing
- Local transcripts
- Transcript tailer
src/tailer.ts - Claude JSONL parser
src/jsonl.ts - Codex JSONL parser
src/codex-jsonl.ts - Turn grouping
src/turns.ts
Developer experience
- Browser UI
public/assets/app.js - Settings UI
public/assets/settings.js - Reply card
public/assets/to-agent.js - Session Q&A
src/chat-agent.ts - Static asset serving
src/static-assets.ts
Runtime services
- HTTP + WS server
src/server.ts - Background summaries
src/observer.ts - Settings
src/settings.ts - Claude auth
src/auth-check.ts - Chat persistence
src/persistence.ts - Usage ledger
src/usage-ledger.ts
Other components
- Developer
- Anthropic SDK
Connections 28
- Developer → Browser UI: uses
README.md - Browser UI → HTTP + WS server: requests state
README.md - Settings UI → HTTP + WS server: updates settings
README.md - HTTP + WS server → Static asset serving: serves assets
src/server.ts - HTTP + WS server → Session registry: refreshes sessions
src/server.ts - Session registry → Claude discovery: queries
src/registry.ts - Session registry → Codex discovery: queries
src/registry.ts - Claude discovery → Process discovery: checks processes
src/claude-discovery.ts - Codex discovery → Process discovery: checks processes
src/codex-discovery.ts - Claude discovery → Local transcripts: finds sessions
README.md - Codex discovery → Local transcripts: finds sessions
README.md - HTTP + WS server → Transcript tailer: starts tailing
src/server.ts - Transcript tailer → Local transcripts: reads files
src/tailer.ts - Transcript tailer → Claude JSONL parser: parses records
src/tailer.ts - Transcript tailer → Codex JSONL parser: parses records
src/tailer.ts - HTTP + WS server → Turn grouping: groups events
src/server.ts - Turn grouping → Claude JSONL parser: uses event types
src/turns.ts - HTTP + WS server → Session Q&A: sends questions
src/server.ts - Session Q&A → Anthropic SDK: queries model
src/chat-agent.ts - HTTP + WS server → Background summaries: feeds summaries
src/server.ts - Background summaries → Anthropic SDK: queries model
src/observer.ts - Background summaries → Usage ledger: records usage
src/observer.ts - Session Q&A → Usage ledger: records usage
src/chat-agent.ts - HTTP + WS server → Settings: reads and saves
src/server.ts - HTTP + WS server → Chat persistence: loads sessions
src/server.ts - HTTP + WS server → Claude auth: checks credentials
src/server.ts - Browser UI → Reply card: prepares reply
README.md - Developer → Reply card: copies reply
README.md