{"slug": "i-built-an-open-source-team-chat-that-writes-your-daily-standup-and-lets-you-own", "title": "I built an open-source team chat that writes your daily standup (and lets you bring your own Claude)", "summary": "A developer released Forma Chat, an Apache-2.0 open-source team chat server written as a single Go binary backed by a SQLite file, that generates daily standup drafts from each person's own task events without involving a model. Forma Chat also supports optional AI agents using the workspace's own Anthropic API key or any OpenAI-compatible key, or a user's existing Claude Code connected over MCP via `claude mcp add --transport http forma`, with agent answers restricted to what the channel they are asked in can already see. The early release lacks files, huddles and mobile apps, and requires Go 1.26+ and Node.js 22+ to build.", "body_md": "# I built an open-source team chat that writes your daily standup (and lets you bring your own Claude)\n\nMost teams pay per seat for chat. Then they pay again for a standup bot. Then again for an AI add-on. I wanted one thing I could run myself that did all three, so I built Forma Chat: open-source (Apache-2.0) team chat that runs on your own server, as one Go binary with a SQLite file. 📺 Watch the 74\n\n-second video · 💻 Code on GitHub Public and private channels, DMs and group DMs, threads, reactions, edits with history, pins, mentions, drafts that follow you across devices Full-text search (SQLite FTS5), filtered by what you can read before any result, snippet or count exists Turn any message into a task; My work ranks your own tasks and shows why each one is near the top Daily standups that draft themselves Optional AI agents with your own key, or your own Claude Code connected over MCP It's an early release. Files, huddles and mobile apps aren't there yet, and the repo keeps a feature status page that says exactly what works. Every task change is recorded as an event: created, started, finished, blocked, commented. At the time you choose, Forma builds each person's draft from their own events that day: Done: what they finished, started or worked on Next: their top open tasks by priority and due date Blockers: blocked tasks, with the reason they wrote No model is involved, so it's free, fast and explainable.\n\nThe privacy rules mattered more to me than the drafting: A draft is visible only to its author until they submit it. Work in personal tasks or private channels the team channel can't see shows up only as a private suggestion (\"Only you can see this\"). It is never put in the summary automatically. One summary posts per day.\n\nPeople who didn't submit are listed as \"No update yet\", never guessed at. No keystrokes, no screenshots, no activity scores, no ranking of people. An admin creates an agent, gives it the workspace's own Anthropic API key (or any OpenAI-compatible key) and adds it to channels. Mention it and it answers live in a thread, streaming, with a Stop button.\n\nIt can search messages and create or list tasks, always with the asking person's permissions. The rule I spent the most time on: an answer may only use what the channel it's answering in can already see. If you ask in #general, it won't quote a private channel you happen to be in. Or skip the API key and connect the Claude you already use.\n\nCreate an external agent, add it to channels, make a token, then: claude mcp add --transport http forma \\ https://chat.example.com/api/v1/mcp \\ --header \"Authorization: Bearer fma_...\" Claude Code can then list its channels, read and post messages, search, and list or create tasks, only where that agent was added. Go modular monolith + SQLite in WAL mode, with embedded migrations. The React/TypeScript client is built by Vite and embedded in the binary, so deploying is copying one file. One read policy.\n\nA single Authorize function decides whether a person can read a conversation. Search, threads, realtime and agents all go through it, or through its SQL set form, and a test checks the two always agree. Denied and missing look the same (404). Messages are never silently lost.\n\nA message is stored before it is acknowledged. A transactional outbox feeds realtime, and WebSocket events are only wake-ups. Clients catch up from a per-conversation change counter, so a reconnect replays what was missed and retries never duplicate. Agent keys are sealed with AES-256-GCM, bound to the agent, and never shown again.\n\nMessage text and tool results are treated as data for the model, never as instructions. You need Go 1.26+ and Node.js 22+: git clone https://github.com/pandeyvishwas51-oss/forma-chat && cd forma-chat make setup build ./bin/forma serve The server prints a one-time link to create the owner account. For a populated demo workspace, run node scripts/demo.mjs. I'd love feedback, especially on the standup privacy model and the agent audience rule.\n\nIssues and PRs are welcome: https://github.com/pandeyvishwas51-oss/forma-chat\n\n## Key Takeaways\n\n- •Files, huddles and mobile apps aren't there yet, and the repo keeps a feature status page that says exactly what works.\n- •This story was reported by **Dev.to** , covering developments in the**dev** space.\n- •AI advancements continue to reshape industries — read the full article on Dev.to for complete coverage.\n\n📖 Continue reading the full article:\n\n[Read Full Article on Dev.to →](https://dev.to/pandeyvishwas51oss/i-built-an-open-source-team-chat-that-writes-your-daily-standup-and-lets-you-bring-your-own-claude-56p5)", "url": "https://wpnews.pro/news/i-built-an-open-source-team-chat-that-writes-your-daily-standup-and-lets-you-own", "canonical_source": "https://ainexusdaily.vercel.app/article/2026-10-21-i-built-an-open-source-team-chat-that-writes-your-daily-standup-and-lets-you-bri", "published_at": "2026-10-21 10:50:43+00:00", "updated_at": "2026-10-21 11:29:30.613511+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "agent-protocols", "artificial-intelligence"], "entities": ["Forma Chat", "Claude Code", "Anthropic", "MCP", "Go", "SQLite", "GitHub", "Apache-2.0"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-built-an-open-source-team-chat-that-writes-your-daily-standup-and-lets-you-own", "markdown": "https://wpnews.pro/news/i-built-an-open-source-team-chat-that-writes-your-daily-standup-and-lets-you-own.md", "text": "https://wpnews.pro/news/i-built-an-open-source-team-chat-that-writes-your-daily-standup-and-lets-you-own.txt", "jsonld": "https://wpnews.pro/news/i-built-an-open-source-team-chat-that-writes-your-daily-standup-and-lets-you-own.jsonld"}}