next level nerdingInside a company brain
Inside a company brain
An AI teammate that lives in Slack, remembers what your team says, and goes and does the work. supermemory sold it for months, shut it down, then open-sourced all of it. The interesting part isn't the model. It's the harness around it: when to talk, what it's allowed to remember, when to ask first, and how to stay quiet.
Requires Slack. Slack is the only place to ask it anything and the only thing it learns from on its own. No Teams, email or web chat. Not on Slack? The ideas on this page still apply; the repo doesn't.
Try a message's journey, see who can read what, or skip to setting it up.
fakenerd.ai/company-brain · Repo: github.com/supermemoryai/company-brain
Nine signals
The whole article and repo in nine boxes. Each links to the part of this page that explains it.
- 01
The harness does the work
The model isn't the interesting part. The code around it decides when to talk, what it may remember, which tools it sees and when it must ask first.
How - 02
Talk only when it helps
For a message nobody aimed at it, a small model scores seven signals and the mode's thresholds decide: answer, investigate, react or say nothing. An @mention always gets an answer.
How - 03
Check first, then speak
Investigate means it looks in memory and tools like Sentry before saying anything. If it finds nothing real, it stays quiet.
How - 04
A finish it can't skip
Each turn has a step budget. Near the end it is told how many steps are left, then its tools are taken away so it has to answer.
How - 05
Tools show up when needed
The sandbox and scheduler stay hidden until the model unlocks them. Fewer tools in view means less prompt space and better choices.
How - 06
Memory and live facts stay apart
Memory keeps decisions and who owns what. Connected apps like Linear or GitHub say where things stand right now.
How - 07
Write narrow, read with the asker's access
Each message is remembered in the room it happened in. An answer only uses what the person asking could see.
How - 08
People can steer mid-task
A new message in a running thread is ignored, added as context, replaces the request, or stops it. Sending an email or creating an issue pauses for an Approve or Deny card.
How - 09
Your own copy, if you use Slack
It deploys to your Cloudflare account in about five minutes with a supermemory key and one model key. Slack is the only place to ask it and the only thing it learns from.
How
Words on this page
Fourteen terms, in plain words. Skip this if you already build AI agents.
- Harness
- Everything wrapped around the AI model: the code that decides when it speaks, what it may remember, which tools it sees and when it must ask first. Your team never sees it, but it does most of the work.
- supermemory
- The company behind Company Brain. It sold Company Brain as a hosted product, shut it down to focus on its memory API, then open-sourced the code. Memory lives in your supermemory account.
- Proactive, Quiet
- Proactive means it can join a conversation nobody asked it into. In a Quiet channel it only answers when @mentioned, but it still reads and remembers.
- Cloudflare Worker
- A small program that runs on Cloudflare's servers instead of your own computer. Company Brain deploys as one to your own Cloudflare account, so you own the data.
- MCP
- A standard way to plug outside apps such as Gmail, GitHub and Linear into an AI agent. Company Brain can use hundreds of MCP servers.
- Triage
- The quick first check on a message nobody aimed at it. A small model scores seven signals from 0 to 100, and the scores decide: answer, investigate or pass, plus an emoji reaction or none.
- Deterministic
- Gives the same result every time for the same input. The deterministic evaluator is plain formulas, not an AI model, so a mode's thresholds are applied the same way every time.
- Turn
- One round of work on a request: load context, think, use tools, post the answer. A turn can pause for an approval and pick up where it left off.
- Tool schema
- The description of a tool that the model reads so it knows the tool exists and how to call it. Each one takes up prompt space, which is why some stay hidden until needed.
- Sandbox
- A walled-off place where the agent can run a shell, git or Python. It stays locked until the model unlocks it on purpose.
- Vector store
- A database built for searching by meaning, often used as AI memory. Dhravya's point: pour everything into one and it fills with stale facts.
- Memory container
- A labeled bucket in supermemory that holds one room's memories: the whole org, one channel, or one person. Each message is written to exactly one.
- API key
- A secret code that lets the app use a paid service on your account. Setup needs a supermemory key and one model key from Anthropic, OpenAI, Google or xAI. You pay the provider directly.
- YOLO
- Short for "you only live once": an agent that acts without asking first. Coding harnesses can get away with it. A teammate for a whole organization can't.
A teammate, not a bot
A normal bot: send a prompt, get a reply. This one decides whether to take part at all, gathers the right context, stays inside privacy lines, runs long jobs, and often picks the smallest useful move. Nobody @mentioned it below. It spoke because it knew.
# eng
Alex
is prod down? a couple of customers are pinging me
Company BrainAPP
Not fully down. api/search is elevated, 42 errors in the last 15 minutes, and Kush is already on it. Probably this morning's deploy.
Example from the repo README. Under the hood: triage said investigate, it checked Sentry and memory, found something real, then replied.
What a model doesn't know on its own
- Whether it's allowed to speak in this channel
- Whether a memory container is safe to search
- Which actions need approval (too many approvals is bad too)
- Whether a newer message replaced the request
- Whether “working on it” counts as a final answer
- How to recover if the runtime dies mid tool call
- When silence is the right outcome
The harness answers these. Dhravya: runtime, policy, memory boundary, tools and conversation protocol, wrapped around the models.
Four layers, and the harness does the work
Redrawn from the article's “Company Brain experience” diagram. Your team only ever sees the top layer.
Slack UXyou see this
Mentions, DMs, threads, reactions, progress updates, approval cards
Harnessthe product
Routing, state, policy, memory scope, tools, concurrency, recovery, budgets, side effects, telemetry
Models
Triage, main reasoning, classifiers, salvage, entity resolution
Infrastructure
Cloudflare, database, AI Gateway, model providers, connected apps
The request path
Everything runs on Cloudflare, built on the Agents SDK. The heart is one Durable Object per organization: a tiny always-there server with its own database.
- 01
Slack
Sends a signed event: a message, mention, DM, reaction. - 02
Cloudflare Worker
Verifies the signature, drops duplicates, replies to Slack fast, hands off. - 03
CompanyBrainAgent
One Durable Object per org. Owns triage, the model loop, approvals, turn recovery and Slack calls. - 04
Reply in Slack
A message, a reaction, a progress update, an approval card, or nothing.
The agent's own SQL, per org
What it calls out to
A message's journey: talking only when needed
Most proactive agents are annoying fast. So every passive message answers two questions: could I do something useful, and should I interrupt now? Pick a message and a mode. The thresholds are the article's real mode table; the message scores are FakeNerd's illustration.
How chatty? (proactivity mode)
Selectively answers, checks and acknowledges.
Pick a Slack message
- 1
Gate: cheap checks, no model
Passes every drop filter. Eligible for triage.
- 2
Triage: a small model scores it
Reply66 · needs 72Investigate88 · needs 70React30 · needs 78Teal line = Balanced's threshold. Scores are illustrative.
- 3
Decision
Investigate
Checks Sentry first. Finds elevated errors, so it replies: “Not fully down. api/search is elevated, and Kush is on it.” Had it found nothing, it would have stayed silent.
- 4
Memory write
Public channel memory (the whole org)
Written to the room it happened in, whether or not the brain spoke.
1 · Gate: drop filters, in order
- Bot or its own message
- Unsupported message type
- Clearly addressed to someone else
- Membership or entitlement failure
- Emoji-only, not addressed to it
- Quiet channel, not explicit
- Proactive cooldown used up
- A turn is already running → steering gate
2 · Triage: 0–100 on seven signals
- Usefulness
- Confidence
- Urgency
- Noise
- Interruption cost
- Investigation value
- Reaction fit
A small model scores; a deterministic evaluator applies formulas and the mode's thresholds. They started with yes/no and moved to scores because these calls aren't binary.
3 · Output: action + reaction
ANSWER · INVESTIGATE · PASS
+ allowlisted emoji or none
So four behaviors: reply, react, both, or nothing. Their emoji resolver even learns your org's custom emoji.
- Useful but low confidence Investigate instead of answering
- Socially right, nothing to add React
- Urgent but disruptive Investigate under a stricter mode
- Correct, but already answered Pass
- Explicit and lightweight Acknowledge instead of a full turn
| Mode | Reply | Investigate | React |
|---|---|---|---|
| Listener | asked only | asked only | off |
| Investigator | 90 | 82 | off |
| Balanced | 72 | 70 | 78 |
| Teammate | 55 | 58 | 60 |
A mode isn't a personality line in a prompt. It's enforceable thresholds. Plus Custom.
Admins set it per workspace: All channels (default) or Only its own channel, with per-channel Proactive or Quiet exceptions. Quiet channels are still read and remembered. An @mention always gets an answer.
Doing the work: one turn, eight phases
When triage says answer or investigate, a phased state machine runs the turn, aware of time and of what the humans expect.
- A
Tool assembly
Build the tool set. Decide which tools are visible right now.
- B
Context loading
Workspace prompt, company context, memory profile, thread history, who's asking, directory, attachments.
- C
Model generation
The main loop: streamed text, tool calls, live progress updates in the thread.
- D
Progress check
Is this a final answer, or just “working on it”?
- E
Salvage
Only progress text? One more pass with no tools, to force a real answer.
- F
Approval handshake
Consequential action? Checkpoint and suspend until a human decides.
- G
Finalization
New messages waiting? Keep going. Inbox empty? Claim this revision as the answer.
- H
Completion
Publish, write memory, charge, log, reflect.
The step budget: a finish it can't skip
- 1⚒
- 2⚒
- 3⚒
- 4⚒
- 5⚒
- 6⚒
- 7⚒
- 8⚒
- 9⚒
- 10⚒
- 11✎
- 12✎
⚒ Tools available: search, read, act.
limit − 3 The harness tells it how many steps are left.
limit − 1 ✎ Tools removed. It must answer from what it has.
Prevents the classic failure: spending the last step on one more search and never answering. Along the way it posts progress (“I found X. Next I'll check Y.”) so nobody thinks it's stuck. A 12-step budget is just for the picture.
Tools appear when they're needed
It can use many tool families, but not every schema is visible at once. Sandbox and scheduler stay hidden until the model explicitly unlocks them.
Memory
search · inspect · resolve
Discovery
people · entities · org tree
Live apps
Gmail · GitHub · Linear · Notion
Slack I/O
channel · search · progress
Effects
save · connect · forget
🔒 Sandbox
shell · git · Python
until enable_tools
🔒 Scheduler
digests · reminders
until enable_tools
Less context
Better choices
Policy control
Durable knowledge, live facts, and who can read what
Most company-brain startups pour everything into one vector store. Dhravya's view: that fills it with stale facts and confuses the model. So two separate sources, and a permissions graph.
Company Brain memory · durable
- Decisions
- Who owns what
- Project context
- Historical knowledge
one turn
uses both
Connected apps · live
- Current issue status
- Latest email
- Live deployment
- Recent Slack messages
Example: memory explains what “the migration” means; Linear or GitHub says where it stands right now. Mix them up and memory gets too volatile, or the live tools lack context.
The permissions graph: write narrow, read with the asker's access
You ask “what did we decide about the Acme deal?” from…
- ✓ can read
Public channel memory
The whole org
sm_org_shared
- ✓ can read
#acme-deal memory
That room's members (you're one)
slack_channel_…
- ✓ can read
Your employee memory
Only you
user_…
- ✕ out of scope
#board memory
A private room you're not in
slack_channel_…
- ✕ out of scope
Sam's employee memory
Only Sam
user_…
It answers from: Everything you could see yourself, stitched together: public channels, #acme-deal (you're in it) and what it knows about you. Never #board, never Sam's DMs.
- Public channel: reads public channel memory only.
- Private channel: that channel's memory plus public.
- DM: your memory, every private channel you're in, and public. Never rooms you're not in.
Writes go to one room
Tools follow you
Leasing, as a last resort
People keep talking while it works
Slack isn't a request-response form. Teammates add evidence, correct a premise, change the ask or say stop. New messages in an active thread skip normal triage and hit an active-turn gate.
“lunch at 1?”
Ignore
Unrelated to the running task.
“also check the EU region”
Append
Adds context. Goes to a durable inbox, read before the next step.
“actually it's staging, not prod”
Replace
Supersedes the request. The old one is dropped.
“nvm, Kush fixed it”
Stop
Cancels. An abort signal ends the turn.
Approval for consequential tools
- 01
Asks for a consequential tool
Send an email, create an issue. - 02
Approval classifier
Does this one need a human? If not, it just runs. - 03
Checkpoint
Saves messages, tool state and revision. The turn is suspended. - 04
Approve / Deny card
Posted in Slack for a real person. - 05
Resume the same turn
Same reasoning, same context, decision recorded. Deny ends it cleanly.
Approval isn't handed to a separate agent. The same turn pauses with a saved resume state and picks up where it left off. “The agent that proposed the action is the agent that sees the approval and completes the work.”
Why so much harness?
Coding harnesses like Pi, opencode or Codex can YOLO. A teammate for a whole organization can't: permissions, tool use and approvals have to be predictable, and adjustable per customer.
They optimized for value as an employee, not answer quality
A correct answer is still a bad intervention in the wrong channel, with private context, repeating a human, interrupting something sensitive, or ignoring a newer message.
So before speaking, it asks
- 01Should I say anything?
- 02Should I check first?
- 03Is a reaction enough?
- 04Which information boundary applies?
- 05Has the request changed?
- 06Do I need permission?
- 07Can I finish reliably?
“That is the difference between placing a model inside Slack and building an AI teammate.”
Set it up: about five minutes
It runs on your own Cloudflare account and you own the data. You need a Slack workspace where you can install apps, a supermemory API key, and one model key.
Requires Slack
- Asking: only in Slack channels and DMs. The web app (Home, Graph, Configure) is for viewing memory and settings, not questions.
- Learning: only from Slack conversations. GitHub, Linear, Notion, Gmail and others are read or acted on when asked from Slack, not synced into memory.
- Outside Slack: asking it from Claude Code, ChatGPT or Cursor was in the hosted product, not this build. Reading the supermemory account directly skips the permissions graph and sees every private channel and DM, so keep that admin-only.
- 01
Click Deploy to Cloudflare
It asks for two secrets: a supermemory API key (where memory lives) and one model key: Anthropic, OpenAI, Google or xAI. It detects the provider. Database, KV, Durable Objects and Workers AI are created for you. - 02
Open /setup on your worker
Checks the database, both keys and Slack. Click Create the Slack app: Slack opens with a manifest that already has your URLs. Paste the Client ID, Client secret and Signing secret back in. - 03
Sign in with Slack
The first person to sign in owns the deployment. Anyone else from the same workspace can sign in after; other workspaces are turned away. - 04
Install to Slack
Owners and admins only. Approve Slack's consent screen and say hi.
Then it onboards itself
#company-brain
Creates its home channel, invites you, posts an intro.
Research
Works out your company from the Slack workspace and starts learning about it.
Channels
An admin card offers to join your public channels. One tap. It never joins silently.
Your team
Teammates get a welcome DM automatically. No seats, no email invites.
Your DM
Buttons to connect your first tools.
First test: ask What does {your company} do? in #company-brain or a DM.
The app: sign in at your worker's root, open Configure
Integrations
GitHub, Linear, Notion, Sentry, Gmail, Granola and hundreds of MCP servers. Org-shared or personal.
Models
How fast or thorough. You pay the provider directly, no markup.
Workspace Prompt
How it behaves and talks everywhere, from buttoned-up to unhinged.
Proactivity
All channels (default) or only #company-brain, plus per-channel Proactive or Quiet.
Automations
Scheduled digests and reminders. Run now to test one.
Skills
Your processes, formats and voice.
| Cloudflare plan | Free | Workers Paid · $5/mo |
|---|---|---|
| Long, multi-step answers | Can get cut short (50 outbound calls per request) | Room for the full tool loop |
| Code sandbox | Needs a Daytona key | Built in, on a Cloudflare container |
Everything else is the same on both. Paid is worth it if your team leans on it. Pricing
Good to know before you start
- No Google Drive sync in this build. It learns from Slack and reads live tools when asked.
- To add docs: put them in your supermemory account under sm_org_shared. The whole org can read that.
- No admin-promotion screen yet: roles live in the database's member table.
Best practices for any AI teammate
From the article and the repo's guide, rewritten. They apply whether you deploy this repo or build your own agent.
- 01repo guide
Silence is a valid answer
If it isn't confident the answer is correct, it says nothing. A wrong guess is worse than silence; uncertainty resolves to silence, not a hedge.
- 02article
Investigate before you talk
Background checks may end in a silent conclusion. Otherwise channels fill with “I checked and found nothing.”
- 03article
Don't dump everything in a vector store
Keep durable knowledge (decisions, owners) apart from live state (ticket status, deploys). Memory says what “the migration” is; the live tool says where it stands.
- 04repo guide
Write narrow, read with the asker's access
Each message is remembered in the smallest room it happened in. Answers only use what the person asking could see.
- 05repo guide
Writes run as a real person
Org-shared connections are read-only for everyone. Creating an issue needs your own connection, so the action is yours.
- 06article
Approvals, but not too many
Ask before consequential actions only. Every extra approval card is friction.
- 07article
Budget the steps, force the finish
Warn the model near the end, then remove its tools so it has to answer. Stops the “one more search” that never answers.
- 08article
Show tools progressively
Hide sandbox and scheduler until they're needed: less context, better tool choice, and some powers only after an intentional unlock.
- 09article
Post progress in the thread
“I found X. Next I'll check Y.” so nobody thinks it's stuck.
- 10repo guide
Rate-limit chiming in
A few unprompted replies per hour at most, with a gap between them, and only in rooms it was invited to.
- 11repo guide
Scheduled posts fail closed
Digests use org-shared, read-only access and skip a run rather than post a guess.
- 12repo guide
Connect what people re-read
Specs, the handbook, the roadmap. Not everything at once.
“A silent conclusion lets the system optimize for useful outcomes rather than visible activity.”
FakeNerd's take
Steal the rules, not the repo
The best part works without deploying anything. Stay quiet when unsure, keep memory apart from live tools, answer only with what the asker could see, force a finish. Those fit any agent you build.
It's free, and it sells memory
supermemory shut the product down to focus on its memory API, then open-sourced the code. The repo needs a supermemory key and your memory lives in their account. A fair trade for free code, but that's the trade.
Slack or nothing
Slack is the only place to ask it and the only thing it learns from. No Teams, no Drive sync. If your team isn't on Slack, read this page as a design essay.
Five minutes to deploy, longer to trust
Setup is quick. The care goes into who can see what: reading the supermemory account directly skips the permissions graph, and admin roles live in a database table. This is for the person who already runs your Slack, not a first project.
Designed, not proven
The article explains how it decides when to talk. We found no numbers on how often it decides right, and the message scores in our journey are our own illustration. Start it in Listener or a Quiet channel and widen it once it earns trust.
Related on this site: GBrain, Garry Tan's open-source brain, built from pages that keep a summary and a timeline. Pi, one of the small coding harnesses the article says can YOLO where a company teammate can't.
Attribution
- Dhravya Shah · We're open sourcing the company brain. Here's how we designed the multi-player harness (X article, Sept 26, 2026). Diagrams on this page are redrawn from its ASCII flows; quotes are his. Harness work mainly by Mahesh.
- supermemoryai/company-brain (Apache 2.0): README and user guide, including the permissions graph and automations and proactiveness.
- Why supermemory shut the product down (Sept 11, 2026): to focus on their memory API.
- Dhravya Shah on X · supermemory
- The message-journey scores, sample messages and steering examples are FakeNerd's illustrations.