The open-source startup operating system that turns conversations into structured knowledge and execution.
An open-source, self-hosted alternative to Otter.ai, Fireflies, and Gong — but instead of just transcribing meetings, Company OS builds a living knowledge base from every conversation your team has.
Every founding team makes their best decisions in conversation. Then loses them.
Code goes in GitHub. Tasks go in Linear. But the verbal decisions, customer insights, strategic pivots, advisor feedback — the stuff that actually shapes your company? There's no system of record for any of it.
Company OS is that system of record. A conversation intelligence platform that captures institutional knowledge, tracks decisions, and turns unstructured voice memos and meeting recordings into a searchable, structured second brain for your entire team.
BubbleLab — AI workflow engine for file sync, transcription routing, and processing pipelines
InsForge — AI-native backend: database, auth, storage, edge functions
Company OS supports two approaches for the AI agent that powers team chat and knowledge processing. Choose the one that fits your setup:
| OpenAgents Workspace | Claude Code + Telegram | |
|---|---|---|
| What it is | Cloud-hosted Claude Cowork agent on OpenAgents | Claude Code running on Ubuntu with the official Telegram channel plugin |
| How it connects | OpenAgents cloud → your dashboard | Telegram → Claude Code (long-running session on server) |
| Auth | OpenAgents account | claude.ai login + Telegram bot token |
| Best for | Teams wanting a managed, always-on cloud agent | Teams wanting full file access, local brain processing, and mobile chat via Telegram |
| Setup | Deploy workspace on OpenAgents | Run deploy.sh on Ubuntu, start Claude Code with --channels |
| Data sync | Manual | Automated — S3 sync every 5 minutes via cron |
You can switch between the two backends at any time in the dashboard Settings panel — no restart required.
Every company has an operating system. Most aren't conscious of it.
Your OS is how decisions get made, how priorities get shaped, how knowledge gets shared across your team. When it's working, people move fast without asking permission. When it's broken, you spend Monday re-interpreting what "the work" is.
Most startups run their OS on a mix of Slack threads, Google Docs nobody reads, and whatever the CEO remembers from last Tuesday's call. The important stuff lives in people's heads — until they forget it. 42% of institutional knowledge resides solely with individual employees — when they leave, nearly half of what they knew walks out the door.
I built Company OS because I got tired of my own team losing decisions. We're a 5-person founding team in Techstars. Six meetings a day — investors, customers, advisors, co-founder syncs. A week later, nobody remembers the details.
So I built a system where conversations become structured knowledge, and structured knowledge drives execution.
flowchart TD
A[Voice memo / Zoom / Recording] --> InputBot[Input Bot — Telegram]
InputBot --> C[BubbleLab AI Workflow]
C --> B[Transcription - speaker-labeled]
B --> S3A[S3: notesly-transcripts]
S3A -->|cron sync| S3B[S3: peakmojo-company-os]
S3B -->|cron pull| LOCAL[Local: ~/company-os/peakmojo/]
LOCAL --> D[Claude Code Agent]
D --> LOCAL
LOCAL -->|cron push| S3B
D --> E[InsForge - db/auth/storage]
F[Linear - tasks] --> E
subgraph Backends["Chat Backend (choose one)"]
G[OpenAgents Workspace — cloud agent]
K[Claude Code + Telegram — server agent]
end
G --> D
K --> D
AgentBot[Agent Bot — Telegram] --> K
subgraph UI["User Interfaces"]
H[Founder Dashboard]
I[Admin Operation]
end
H --> E
I --> G
Company OS uses two separate Telegram bots:
| Input Bot | Agent Bot | |
|---|---|---|
| Purpose | Send in recordings, voice memos, text notes, images | Chat with your knowledge base, trigger processing |
| Powered by | BubbleLab + AssemblyAI | Claude Code + Telegram channel plugin |
| Runs on | BubbleLab cloud workflow | Ubuntu server (long-lived Claude Code session) |
| Output | Transcripts → S3 (notesly-transcripts) |
Brain updates, answers, task management |
The Input Bot is your data capture layer. The Agent Bot is your intelligence layer.
Record — Send a voice memo to the Input Bot in Telegram, drop a Zoom meeting recording, or any audio file. Get a transcript back with speaker diarization (speaker labels) in under a minute. Works with any language — auto-detected.
Structure — AI processes transcripts into your company's knowledge dimensions. Not a fixed template — the dimensions emerge from your actual conversations. A healthcare startup ends up with market/, validation/, regulatory/. A fintech startup gets compliance/, partnerships/, unit-economics/. Your company, your structure.
Ask — Team members chat with the knowledge base through the Agent Bot in Telegram. No need to open a terminal or remember where things are — just ask "who did we talk to about X?" or "what did we decide about Y?" and get answers grounded in your actual conversations. Two backends are supported: OpenAgents Workspace (cloud-hosted agent with admin interface) or Claude Code + Telegram (Claude Code running on a server, accessible via the Agent Bot). Switch between them in Settings.
Execute — Tasks sync from Linear into the dashboard. Search across all tasks semantically to find what's relevant.
See — The UI doesn't matter — each team member vibe-codes their own dashboard. What matters are the primitives underneath: the structured dimensions, the timeline data, the task state. Think of it as an embedded Lovable — shared components built on shared data, but each person organizes and codes their own view. The CEO sees the vision map. The COO sees the operational tracker. Same data, different views, all AI-generated.
Unlike tools like Operately (goals and project tracking), Meetily (local meeting transcription), or Char (meeting notepad), Company OS doesn't stop at recording or task management. It connects the full loop: record → transcribe → structure → query → execute.
Decision tracking, not just transcription. The system doesn't just record meetings — it maintains a decision log that tracks who decided what, when, and why. Six months from now, you can trace any strategic decision back to the exact conversation. This is your company's institutional memory.
Conversations become a knowledge graph. Raw meeting transcripts get processed into structured, interconnected knowledge dimensions — not just flat notes. Think of it as a second brain for your startup, where every insight, customer quote, and strategic pivot is organized and queryable.
Your dimensions, not ours. No predefined schema. No "fill in these 12 boxes." The knowledge structure emerges from your conversations, the way your team actually thinks about your business.
Self-hosted, your API keys, your data. Your most sensitive recordings — investor negotiations, co-founder disagreements, customer deal terms — are processed with your own API keys. No data leaves your infrastructure. Privacy-first by design — GDPR and HIPAA friendly.
Ships as a native macOS desktop app + server agent. Not just a web tool — Company OS includes an Electron-based desktop app for the dashboard, plus a deployable server agent that runs Claude Code with Telegram integration. Chat with your knowledge base from your phone while the agent processes transcripts on your server.
| Layer | What it does | How |
|---|---|---|
| Input | Voice memos, Zoom meetings, recordings, documents | Telegram bot + BubbleLab |
| Transcription | Speaker-labeled transcripts with diarization | AssemblyAI (auto language detection) |
| File sync | All files centralized in one place | BubbleLab workflows → Google Drive + S3 |
| Knowledge processing | Conversations → structured knowledge dimensions; team Q&A | OpenAgents Workspace (cloud agent) or Claude Code + Telegram (server agent) |
| Backend | Database, auth, storage, API | InsForge — AI-native backend |
| Execution | Task sync + semantic search | Linear → InsForge (edge function) |
| Visualization | Per-user dashboards, vibe-coded by each team member | React primitives + shared components — help wanted |
Record conversations, get transcripts. This is your input layer.
git clone https://github.com/baryhuang/company-os.git
cd company-os
# Set environment variables (see API keys below)
uv run server/telegram_bot.pySend a voice memo to your Telegram bot. Get a speaker-labeled transcript back.
make install # install web + Electron deps
make dev # run Vite + Electron in dev mode
make dmg # build .dmg for distributionBackend settings (InsForge URL, keys) are configurable in Settings within the app.
Transcripts get processed into your company's dimension structure. Start with whatever makes sense — the system evolves as your company does.
Build your own view of your company's knowledge. Use the component library or start from scratch.
| Key | What it's for | Required? |
|---|---|---|
TELEGRAM_BOT_TOKEN |
Input Bot — receive voice memos, files, and text | Yes |
TELEGRAM_AGENT_BOT_TOKEN |
Agent Bot — Claude Code Telegram channel (configured via /telegram:configure) |
For Approach 2 |
ASSEMBLY_API_KEY |
Transcription with speaker labels | Yes |
OPENAI_API_KEY |
AI chat + summarization | Optional |
ANTHROPIC_API_KEY |
Knowledge processing | Optional |
S3_BUCKET |
Cloud storage sync | Optional |
Get started with just two free API keys: Telegram BotFather and AssemblyAI.
| Feature | Company OS | Otter.ai / Fireflies | Operately | Meetily / Char |
|---|---|---|---|---|
| Meeting transcription | Speaker-labeled, multi-language | Speaker-labeled | No | Speaker-labeled |
| Knowledge structuring | AI-generated dimensions | Flat summaries | No | Flat notes |
| Decision log & tracking | Full traceability | Basic action items | Goals only | No |
| Team knowledge base chat | Conversational Q&A | Search only | No | No |
| Task management integration | Linear sync + semantic search | Basic integrations | Built-in goals | No |
| Self-hosted / open source | MIT license | SaaS only | Open source | Open source |
| Your API keys, your data | Yes | No | N/A | Yes |
| Per-user customizable dashboards | Vibe-coded views | Fixed UI | Fixed UI | Fixed UI |
The default approach. OpenAgents hosts a Claude Cowork agent in the cloud, providing:
- Always-on cloud agent — no local process to manage
- Admin operation interface — manage your workspace, agent configuration, and context
- Team chat — any team member can query the knowledge base from the dashboard
To set up: create a workspace on OpenAgents, configure it with your Company Brain context and CLAUDE.md, and point your dashboard to it in Settings.
Claude Code runs as a long-lived session on an Ubuntu server, connected to Telegram via the official channel plugin. Team members chat with the bot directly from Telegram to trigger brain processing, ask questions, and manage tasks.
- Ubuntu server with SSH access
- Claude Code v2.1.80 or later
- AWS CLI configured with access to S3
- claude.ai account (login-based auth, no API key needed)
- Telegram bot token from BotFather
s3://peakmojo-company-os/
{org-slug}/ # e.g. "peakmojo"
brain/ # shared company brain (source of truth)
conversations/
customer_discovery/
market/
...
context/ # agent context
skills/ # org-specific Claude skills
by-dates/ # transcripts + recordings by date
2026-03-22/
transcribe-bot_..._transcript.txt
transcribe-bot_..._audio.mp3
users/ # per-user data
{email}/
notes/ # personal markdown
telegram/ # bot conversation history
# 1. Deploy on Ubuntu (installs deps, creates dirs, sets up cron)
chmod +x deploy.sh && ./deploy.sh
# 2. Configure AWS credentials
aws configure
# 3. Authenticate Claude Code
claude auth login
# 4. Install Telegram plugin
claude
/plugin marketplace add anthropics/claude-plugins-official
/plugin install telegram@claude-plugins-official
/reload-plugins
/telegram:configure <YOUR_BOT_TOKEN>
# Exit Claude Code
# 5. Start Claude Code with Telegram channel
cd ~/company-os/peakmojo
claude --channels plugin:telegram@claude-plugins-official --dangerously-skip-permissions
# 6. Pair your Telegram account
# Send any message to your bot in Telegram, get a pairing code
/telegram:access pair <code>
/telegram:access policy allowlistTelegram ──► Claude Code (long-running session on Ubuntu)
│
├── reads ~/company-os/peakmojo/by-dates/ (transcripts)
├── reads ~/company-os/peakmojo/brain/ (knowledge base)
├── updates brain files locally
└── replies via Telegram
Cron (every 5 min):
1. s3://notesly-transcripts/by-dates/ → s3://peakmojo-company-os/peakmojo/by-dates/
2. S3 → local (pull by-dates + context)
3. local → S3 (push brain updates)
- BubbleLab writes transcripts to
s3://notesly-transcripts/by-dates/ - Cron copies new transcripts into the consolidated
peakmojo-company-osbucket, then syncs to local - Users message the Telegram bot to trigger processing: "process today's recordings", "what did we decide about X?"
- Claude Code reads local transcript files, updates brain files, and replies via Telegram
- Cron pushes updated brain files back to S3
The Settings panel includes a Chat Backend toggle:
- OpenAgents (default) — uses the OpenAgents cloud agent (Approach 1)
- Telegram — uses the Claude Code Telegram agent (Approach 2)
- Research preview — channels require Claude Code v2.1.80+ and the
--channelsflag - Single session — one Claude Code session per Telegram bot
- Manual start — Claude Code must be started manually after server reboot (systemd service planned)
-
Company Brain must sync to a shared location.Done. Company Brain is stored ins3://peakmojo-company-os/peakmojo/brain/with automated cron sync every 5 minutes. Org-specific skills stored inpeakmojo/context/skills/. -
Done. Cron syncs transcripts fromby-dates/and Company Brain must auto-sync to local.s3://notesly-transcripts/by-dates/→s3://peakmojo-company-os/peakmojo/by-dates/→ local~/company-os/peakmojo/by-dates/every 5 minutes. -
Chat-initiated updates must trigger Claude Code to update the database. When a user requests changes through the Telegram bot (e.g., "mark task X as done", "process today's new recordings"), Claude Code should execute the actual operations — updating task status in the DB, running
upload_brain.pyfor new files, etc. The Telegram channel plugin enables this; the processing logic in CLAUDE.md and skills needs to be wired up. -
Replace skills with a context layer. The current agent uses a skill-based architecture (company-brain, social-media, etc.) where each skill has its own SKILL.md. This should be replaced with a context layer — a unified CLAUDE.md that includes the Company Brain structure, file locations, database schema, and available operations. The agent should always have the right context loaded, not need to "discover" it per-task.
-
Auto-deploy OpenAgents workspace. The OpenAgents workspace (Claude Cowork cloud agent) currently requires manual deployment. This should be automated — when the Company Brain, CLAUDE.md, or agent configuration changes, the workspace should redeploy automatically so the chat agent always reflects the latest context and capabilities.
-
Embeddable per-user visualization layer. The processing → backend → data pipeline works. What's missing is a UI framework where the primitives (dimension trees, timelines, task views, competitor landscapes) are shared components, but each team member assembles and customizes their own view using AI code generation. Not a fixed dashboard — a personal operating surface that each person vibe-codes to fit how they think.
If Company OS isn't the right fit, check out these projects in the space:
- Operately — Open-source startup operating system focused on goals and project execution
- Meetily — Privacy-first, self-hosted AI meeting transcription (Otter.ai alternative)
- Char — Open-source AI notepad for meetings with local transcription
- Khoj — Self-hostable AI second brain for personal knowledge management
- Logseq — Privacy-first, open-source knowledge base
- Outline — Team knowledge base and wiki
I'm a startup CTO building PeakMojo — AI for healthcare workforce, currently in Techstars 2026.
This is the actual system my team uses to run our company. We've processed 50+ days of meeting transcripts into 16 knowledge dimensions with 800+ structured nodes. Every strategic decision we've made traces back to a conversation.
I open-source it because founders should show their work, not just talk about AI.
MIT — use it, fork it, make it yours. That's what open source is for.
