deniz.in

Markets

Weather

Loading weather

· via dev.to (home feed)

Forma Chat ships open-source self-hosted team chat with standup drafts and bring-your-own AI

A developer has released Forma Chat, an Apache-2.0 team chat that runs as a single Go binary with SQLite, auto-drafts standups from task events without an AI model, and supports bring-your-own Claude.

Forma Chat ships open-source self-hosted team chat with standup drafts and bring-your-own AI

A solo developer has released Forma Chat, an open-source team chat server built around two ideas: you run it yourself, and it drafts your team's daily standups for you. In an announcement on dev.to, the author describes an Apache-2.0 licensed project that ships as a single Go binary backed by a SQLite file — a deliberately compact alternative, the post argues, to paying per seat for chat, then paying again for a standup bot, and again for an AI add-on.

What's in the release

The messaging core covers public and private channels, direct and group messages, threads, reactions, edits with revision history, pins, mentions, and drafts that follow you between devices. Search runs on SQLite's FTS5 extension and is filtered by read permissions before any result, snippet or count is generated, so a query can't leak the existence of conversations a user can't access.

On top of chat sits a lightweight task system: any message can be turned into a task, and a "My work" view ranks your own tasks and explains the reasoning behind the ordering.

Standups built from events, not a model

The signature feature — self-drafting standups — involves no AI at all. Every task change (created, started, finished, blocked, commented) is recorded as an event, and at a configured time Forma assembles each person's draft from their own activity that day: completed or in-progress work under Done, the top open tasks by priority and due date under Next, and blocked tasks with their stated reasons under Blockers. Because no model runs, drafting is free, fast and fully explainable.

The author frames the privacy model as more important than the drafting itself. Drafts are visible only to their author until submitted. Work done in personal tasks or private channels the team can't see appears only as a private suggestion, never folded into the shared summary. One summary posts per day, and people who didn't submit are listed as having no update yet rather than guessed at. There are no keystroke logs, screenshots, activity scores, or rankings of individuals.

Bring your own Claude, or your own key

AI support is optional and key-agnostic. An admin creates an agent backed by the workspace's own Anthropic API key — or any OpenAI-compatible key — and adds it to channels. Mention the agent and it replies in a thread, streaming with a stop control. It can search messages and create or list tasks, always acting with the permissions of the person who asked.

One rule reportedly took the most design effort: an agent's answer may only draw on what the channel it's answering in can already see. Ask in a general channel, and the agent won't quote a private channel the asker happens to belong to.

Alternatively, teams can skip API keys entirely and connect an existing Claude Code installation over MCP. After creating an external agent and generating a token, a single claude mcp add command pointed at the server's MCP endpoint lets Claude Code list channels, read and post messages, search, and manage tasks — limited to the channels the agent was added to.

How it's built

According to the dev.to post, the server is a Go modular monolith with SQLite in WAL mode and embedded migrations; the React and TypeScript client, built with Vite, is embedded into the binary, so deployment amounts to copying one file.

Permission checks funnel through a single Authorize function, with a SQL set form used by search and other bulk paths; a test asserts the two implementations always agree, and denied and missing resources both return 404 so existence isn't leaked. Messages are persisted before being acknowledged, a transactional outbox drives realtime updates, and clients catch up using per-conversation change counters, so a reconnect replays missed events without duplicating them. Agent keys are sealed with AES-256-GCM, bound to the agent, and never displayed again, while message text and tool results are treated as data rather than instructions — a prompt-injection mitigation.

What's missing

The author is upfront that this is an early release: file sharing, huddles, and mobile apps aren't implemented yet, and the repository maintains a feature status page documenting exactly what works. Building from source requires Go 1.26 or later and Node.js 22 or later, and a demo script can populate a sample workspace.

Why it matters

Forma Chat bundles three things teams usually buy separately — chat, standup automation, and AI assistance — into one self-hosted binary, which matters for both cost and data control. Its most interesting choices are architectural: standups derived from an event log rather than a language model are free, fast and auditable, while strict permission inheritance for search and agents tackles the two biggest trust problems with putting AI inside internal communication. It is early and feature-incomplete, but the design decisions — one authorization path for everything, no surveillance, bring-your-own-model — are precisely the areas where mainstream chat vendors tend to stumble.

  • #open-source
  • #team-chat
  • #self-hosted
  • #ai-agents
  • #developer-tools

Related posts