Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Threa is workplace chat where the reasoning behind a decision stays with the conversation, so you can find it when the question comes up again. Open source and self-hostable.
BusinessTypeScript · AstroGitHub @threahqOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A workspace chat application built for surfacing what's otherwise lost
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Threa is a workplace chat application (channels, threads, DMs, scratchpads) with
an automatic memory layer that extracts decisions and context from conversations
into searchable notes linked back to their source messages.
The memory layer is GAM (General Agentic Memory). As messages arrive, GAM
classifies them, extracts the ones that record a decision or its context, and
stores each as a memo: a short summary that links back to the messages it was
derived from. Memos are indexed for full-text and vector (semantic) search and
are retrieved automatically when a related topic comes up.Read the full README ↗Threa is a workplace chat application (channels, threads, DMs, scratchpads) with an automatic memory layer that extracts decisions and context from conversations into searchable notes linked back to their source messages.
The memory layer is GAM (General Agentic Memory). As messages arrive, GAM classifies them, extracts the ones that record a decision or its context, and stores each as a memo: a short summary that links back to the messages it was derived from. Memos are indexed for full-text and vector (semantic) search and are retrieved automatically when a related topic comes up.
Ariadne is the built-in conversational agent, available in any stream. It answers from memos and their source messages, citing links and timestamps. Its behavior is configurable per stream via personas.
Threa also exposes a read API over the workspace with scoped keys (memos as JSON, messages as markdown), so an external agent can read the same data Ariadne does. The developer docs cover authentication, the API reference, and recipes.
Threa is a Bun monorepo. The request path for the main app:
Browser ──→ Frontend (Cloudflare Pages)
──→ Workspace Router (Cloudflare Worker) ──→ Control Plane
──→ Regional Backend
──→ WebSocket (direct to Regional Backend)
apps/frontend). React 19 + Vite SPA on Cloudflare Pages.
Real-time updates over Socket.io; offline drafts in IndexedDB.apps/workspace-router). Cloudflare Worker that routes
/api/*: auth, GET/POST /api/workspaces, and /api/regions go to the
control plane, and /api/workspaces/:id/* to the right regional backend
(resolved from Cloudflare KV). It answers GET /api/workspaces/:id/config
directly with { region, wsUrl }, which the frontend uses to open its
WebSocket.apps/control-plane). Global service for authentication
(WorkOS), workspace creation, and region assignment. Runs on Railway with its
own PostgreSQL database.apps/backend). Regional application server for all domain logic:
messaging, streams, agents, memos, search, and files. PostgreSQL 17 with
pgvector, AWS S3 for files, OpenRouter as the model gateway. Event sourcing
with an outbox pattern drives real-time delivery.apps/enclave). Runs Ariadne for end-to-end encrypted
scratchpads. Holds no database credentials and never logs payload contents.apps/backoffice, apps/backoffice-router). Internal
platform-admin SPA and its edge router, gated to platform admins.Shared code lives in packages/: domain types and API contracts (types), the
ProseMirror editor wrapper (prosemirror), backend infrastructure
(backend-common), the agent runtime (agent-runtime), and encryption
primitives (crypto).
The design is multi-region: each region gets its own backend, database, and storage, though a single region is active today.
Threa uses Bun.
bun install
bun run db:start # PostgreSQL + MinIO via Docker
bun run dev # control-plane, workspace-router, backend, frontend, backoffice
The app comes up at http://localhost:3000. For device testing, use
bun run dev:mobile on the local network or bun run dev:remote for a temporary
HTTPS Tailscale Serve URL. bun run dev:regions adds a second region, local-2,
for work that crosses regions.
bun run test # unit/integration (backend)
bun run test:e2e # end-to-end
bun run typecheck # types across the monorepo
bun run lint
Architecture and conventions are documented in docs/. Start with
docs/system-overview.md and
docs/core-concepts.md. Code constraints live in
AGENTS.md.
Threa is available under the MIT License.