fakenerd.ai

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.

Paper-friendly: diagrams stay, buttons go, sources spelled out.

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.

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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.

  1. Slack UXyou see this

    Mentions, DMs, threads, reactions, progress updates, approval cards

  2. Harnessthe product

    Routing, state, policy, memory scope, tools, concurrency, recovery, budgets, side effects, telemetry

  3. Models

    Triage, main reasoning, classifiers, salvage, entity resolution

  4. 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.

  1. 01

    Slack

    Sends a signed event: a message, mention, DM, reaction.
  2. 02

    Cloudflare Worker

    Verifies the signature, drops duplicates, replies to Slack fast, hands off.
  3. 03

    CompanyBrainAgent

    One Durable Object per org. Owns triage, the model loop, approvals, turn recovery and Slack calls.
  4. 04

    Reply in Slack

    A message, a reaction, a progress update, an approval card, or nothing.

The agent's own SQL, per org

Active turns, inboxes, approvals, bot threads, cooldowns, rollout cursors, traces. Checkpoints let a turn resume if the runtime disappears mid tool call.

What it calls out to

Model providers through AI Gateway · Company Brain memory on supermemory · MCP apps (Gmail, GitHub, Linear…) · a code sandbox · telemetry and billing.

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. 1

    Gate: cheap checks, no model

    Passes every drop filter. Eligible for triage.

  2. 2

    Triage: a small model scores it

    Reply
    66 · needs 72
    Investigate
    88 · needs 70
    React
    30 · needs 78

    Teal line = Balanced's threshold. Scores are illustrative.

  3. 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. 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

  1. Bot or its own message
  2. Unsupported message type
  3. Clearly addressed to someone else
  4. Membership or entitlement failure
  5. Emoji-only, not addressed to it
  6. Quiet channel, not explicit
  7. Proactive cooldown used up
  8. 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
ModeReplyInvestigateReact
Listenerasked onlyasked onlyoff
Investigator9082off
Balanced727078
Teammate555860

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.

  1. A

    Tool assembly

    Build the tool set. Decide which tools are visible right now.

  2. B

    Context loading

    Workspace prompt, company context, memory profile, thread history, who's asking, directory, attachments.

  3. C

    Model generation

    The main loop: streamed text, tool calls, live progress updates in the thread.

  4. D

    Progress check

    Is this a final answer, or just “working on it”?

  5. E

    Salvage

    Only progress text? One more pass with no tools, to force a real answer.

  6. F

    Approval handshake

    Consequential action? Checkpoint and suspend until a human decides.

  7. G

    Finalization

    New messages waiting? Keep going. Inbox empty? Claim this revision as the answer.

  8. H

    Completion

    Publish, write memory, charge, log, reflect.

The step budget: a finish it can't skip

  1. 1⚒
  2. 2⚒
  3. 3⚒
  4. 4⚒
  5. 5⚒
  6. 6⚒
  7. 7⚒
  8. 8⚒
  9. 9⚒
  10. 10⚒
  11. 11✎
  12. 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

Fewer schemas take up prompt space.

Better choices

Irrelevant tools don't compete for attention.

Policy control

Some powers only appear after an intentional step. And at wrap-up, every tool can be removed without rebuilding the context.

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

Every message is remembered in exactly one place: the room it happened in. Stored as supermemory container tags: sm_org_shared, slack_channel_…, user_….

Tools follow you

Reads use your personal connection if you have one, else the org's. Writes only ever run through your own account. Org-shared connections are read-only, even for admins.

Leasing, as a last resort

Need a tool only a teammate connected? It asks them with an approve/deny card. Grants last 10 minutes; unanswered asks expire after 15. Gmail can never be leased.

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

  1. 01

    Asks for a consequential tool

    Send an email, create an issue.
  2. 02

    Approval classifier

    Does this one need a human? If not, it just runs.
  3. 03

    Checkpoint

    Saves messages, tool state and revision. The turn is suspended.
  4. 04

    Approve / Deny card

    Posted in Slack for a real person.
  5. 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

Agent value =usefulness × correctness × timelinessnoise × risk × interruption cost

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

  1. 01Should I say anything?
  2. 02Should I check first?
  3. 03Is a reaction enough?
  4. 04Which information boundary applies?
  5. 05Has the request changed?
  6. 06Do I need permission?
  7. 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.
  1. 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.
  2. 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.
  3. 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.
  4. 04

    Install to Slack

    Owners and admins only. Approve Slack's consent screen and say hi.

Then it onboards itself

  1. #company-brain

    Creates its home channel, invites you, posts an intro.

  2. Research

    Works out your company from the Slack workspace and starts learning about it.

  3. Channels

    An admin card offers to join your public channels. One tap. It never joins silently.

  4. Your team

    Teammates get a welcome DM automatically. No seats, no email invites.

  5. 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 planFreeWorkers Paid · $5/mo
Long, multi-step answersCan get cut short (50 outbound calls per request)Room for the full tool loop
Code sandboxNeeds a Daytona keyBuilt 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.

  1. 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.

  2. 02article

    Investigate before you talk

    Background checks may end in a silent conclusion. Otherwise channels fill with “I checked and found nothing.”

  3. 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.

  4. 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.

  5. 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.

  6. 06article

    Approvals, but not too many

    Ask before consequential actions only. Every extra approval card is friction.

  7. 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.

  8. 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.

  9. 09article

    Post progress in the thread

    “I found X. Next I'll check Y.” so nobody thinks it's stuck.

  10. 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.

  11. 11repo guide

    Scheduled posts fail closed

    Digests use org-shared, read-only access and skip a run rather than post a guess.

  12. 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

↑↓ move enter openBrowse every card