Shared memory, private context, live sources, and the rules that keep a Team Bot useful after the first week
A personal AI assistant can remember how you like your reports
Team agent has a harder job
It has to learn how everyone works without turning one person's conversation into everyone else's memory
It has to know which decisions are shared, which preferences are private, and which facts must be checked again in the source system
That is the interesting part of Grok Bot's new Team Bots release
One Bot can now be set up with shared files, skills, plugins, and memory, then published for a team to use in the app or Slack
Team Bots launched in public beta for Teams and Enterprise plans
But "one Bot for everyone" is not the same as "one giant chat history for everyone"
In a 1:1 chat, each person has a private conversation with the Bot. Team memory is shared. Personal notes stay with that person. A plugin signed in through a person's account uses the requester's access, not the creator's. Shared Slack threads and Bot-level keys have different boundaries, which matter later
That is a real architecture, not a memory toggle
https://x.com/bot/status/2104661562715967548
And if you set it up badly, the Bot does not just forget things
It learns the wrong thing, remembers it in the wrong place, or applies an old decision to a new situation
This is how I would engineer the memory layer
One distinction before the design: the promotion gate, external ledger, review dates, and evals below are my proposed process. They are not Grok Bot features I have verified in the product
I publish practical breakdowns of AI agents, workflows, and production systems on Substack
Memory engineering, in plain English
Memory engineering is deciding what an agent should carry into the next job
Not "save everything"
Not "summarize the last 100 messages"
Not "put the whole company wiki in the system prompt"
It is a controlled path from a useful observation to a reusable piece of working context
1something happened2 โ3is it worth remembering?4 โ5who is allowed to reuse it?6 โ7when should it be checked again?
A good memory saves the next person from repeating a decision
A bad memory quietly replaces the actual source of truth
The difference is not how many tokens you store
It is the rule that decides what enters memory, who can read it, and when it stops being trusted
Team Bots change who benefits from a correction
Before Team Bots, teaching a personal Bot mostly improved \your\ future conversations
Now one shared correction can improve the next teammate's conversation too
That sounds obvious until you look at the edge cases
"Use shorter status updates for me" is personal
"The incident owner is the on-call engineer, not the PM" might be a team rule
"The conversion metric changed last Tuesday" is neither a timeless preference nor a permanent rule. It is a changing fact that belongs in an authoritative system
Grok Bot's Team Bots documentation makes the product boundary unusually clear: team memory is read by everyone's conversations, while each person has private notes. The Bot saves a fact to team memory when someone says the whole team should have it, and tells them when it does
That product behavior is the starting point
The engineering problem is deciding what people \should\ ask it to share
SpaceXAI's own Data Bot is a useful example. It uses read-only warehouse credentials and a skill library built around more than 45,000 tables. It does not need to memorize those tables. It needs the skills to find the right one, live access to query it, and memory of a correction that should improve the next teammate's answer
That is the distinction this article is about: reusable judgment in memory, changing data at the source
That product behavior is the starting point
The engineering problem is deciding what people should ask it to share
SpaceXAI's own Data Bot is a useful example. It uses read-only warehouse credentials and a skill library built around more than 45,000 tables. It does not need to memorize those tables. It needs the skills to find the right one, live access to query it, and memory of a correction that should improve the next teammate's answer
That is the distinction this article is about: reusable judgment in memory, changing data at the source
https://x.com/elonmusk/status/2104709783999729911
The announcement fits in one line. The boundary between shared learning and private context does not

Stop treating every kind of context as memory
I would split the Bot's context into five buckets
1LIVE SOURCE current facts in Linear, Datadog, CRM, docs, or code2TEAM SKILL repeatable process approved by the Bot owner3TEAM MEMORY shared decisions and stable definitions4PRIVATE NOTE one person's preferences and working context5TASK STATE what this specific run is doing right now
They are not interchangeable
A team's incident process belongs in a skill
The current incident severity belongs in the incident tool
The agreed meaning of "customer-impacting" may belong in team memory
Your preferred briefing format belongs in your private notes
The open questions for today's investigation belong in task state
Put a changing metric into team memory and it becomes stale
Put a team-wide rule into a private note and nobody else gets it
Put a personal preference into team memory and the Bot starts imposing it on everyone
The first job of memory engineering is routing context to the right bucket
Promote a fact, not a conversation
Imagine a teammate tells the Bot:
"The new launch checklist requires a security review before we publish an external API change"
There are at least four possibilities
- It is a proposed change, not approved yet
- It is an approved team process
- It applies only to one product
- It was true last month but the checklist changed again
If the Bot stores only the sentence, it loses the distinctions that matter
I would use a small external review card for anything I might promote to shared memory. This is a workflow example, not Grok Bot configuration syntax:
1claim: "External API launches need security review"2scope: team3source: "link to the approved launch checklist"4owner: "security-eng"5status: approved6review_after: "2026-11-01"
The important part is not the YAML syntax
They are the questions behind them
Who said this? Where can we verify it? Who owns the rule? Is it approved? When should it expire or be checked again?
If your team keeps these cards in its own repository, a tiny gate can reject incomplete or expired candidates before a human reviews them. It checks an external ledger, not Grok Bot's memory API, and it cannot prove that the claim is true:
1from datetime import date, timedelta23def eligible_for_review(card: dict) -> tuple[bool, str]:4 for field in ("claim", "source", "owner", "review_after"):5 if not card.get(field):6 return False, f"missing {field}"7 if card.get("scope") != "team":8 return False, "wrong scope"9 if card.get("status") != "approved":10 return False, "not approved"11 try:12 review_date = date.fromisoformat(card["review_after"])13 except (TypeError, ValueError):14 return False, "invalid review date"15 if review_date <= date.today():16 return False, "review date passed"17 return True, "inspect source before saving"1819if __name__ == "__main__":20 card = {21 "claim": "External API launches need security review",22 "scope": "team",23 "source": "https://intranet.example/launch-checklist",24 "owner": "security-eng",25 "status": "approved",26 "review_after": (date.today() + timedelta(days=30)).isoformat(),27 }28 print(eligible_for_review(card))
The output is a review queue, not permission to write to team memory. Someone still has to open the source and confirm that the claim, scope, and owner are right
Then ask the Bot to save the approved rule, not the discussion that produced it
1Save this for the whole team:2For external API launches, check the current launch checklist3and get the required security review before publishing.4The checklist remains the source of truth if the process changes.
That last line matters
The memory is a pointer and a working rule
It is not a copy of the company forever
Shared memory needs a write path
Once everyone can teach the same Bot, "remember this" becomes a write operation with consequences
So I would give that operation a simple contract:
1OBSERVE โ CLASSIFY โ VERIFY โ PROMOTE โ RECHECK
- Observe A teammate corrects the Bot, changes a process, or confirms a decision
- Classify Is it personal, team-wide, task-specific, or a live fact?
- Verify Can the Bot point to a decision, document, PR, ticket, or accountable owner?
- Promote Save only the useful conclusion in the right scope, after approval when the claim affects team policy
- Recheck Reopen the source before a consequential action or after the review date
This is a proposed operating pattern, not an automatic pipeline that Grok Bot claims to run for you
The product provides team and personal memory
You still have to decide what deserves each one

The source of truth must stay outside the memory
This is where many agent-memory demos fall apart
A Bot remembers that a customer is on the Enterprise plan
The customer downgrades
Two weeks later, the Bot uses its memory to approve a request the account no longer allows
The memory did its job perfectly
The architecture failed
Grok Bot's own guidance says memory is not a substitute for an authoritative source: changing facts should stay in the source system, and consequential decisions should reopen or cite current data.
That distinction is explicit in the Bot docs
I would split memory into two clocks
1SLOW CLOCK voice, definitions, ownership, stable process2FAST CLOCK status, balance, price, assignee, permission, metric
The slow clock can be remembered
The fast clock should be fetched
The rule is simple: if being wrong about it could change an action, check the live source before acting
For example, a Team Bot can remember how the team triages a bug
It should still reopen the current Linear issue, the latest Datadog trace, and the linked PR before claiming the bug is fixed
Team skill is not a team memory
This is the second distinction worth making explicit
A memory is something the Bot knows
A skill is something the Bot knows how to do
"For this team, P0 means customer-wide outage" is a definition
"When a P0 alert arrives, inspect these dashboards, open an incident, page this role, and post this update" is a process
The first could be team memory
The second should become a team skill
In Grok Bot, a regular teammate can teach a process in a private conversation, but that does not make it a team-wide skill. The owner maintains the shared setup, and a September 30 product update lets the creator appoint managers who can also change skills, plugins, secrets, and the Slack app
That maintainer gate is valuable
Without it, a one-off workaround can quietly turn into the Bot's default workflow for everyone
Lauren Tan, who builds Grok Bot, has a useful rule for repeated agent corrections: eliminate the underlying failure before you settle for another instruction
https://x.com/poteto/status/2089067865098113024
Her priority order is useful here: fix the architecture if you can, encode recurring failures in tests next, then add a skill or rule. My inference is that memory should not be the first patch for a system that keeps making the same mistake
I would make a rule for every new skill:
- It solves a repeatable job, not one ticket
- Its input and output are visible
- Its permission boundary is clear
- Someone on the team owns updates
- A failed run leaves evidence, not a silent retry loop
Shared knowledge does not mean shared identity
This is the most important security detail in the release
Team Bots can use shared context while acting as the person who asked
For a plugin that signs in with a user's account, the Bot uses that user's connection. It does not borrow the owner's account for everyone
But a plugin or secret configured with a shared key can be used across teammates' conversations, so that credential is effectively team-level access
Those are different trust models
1PERSONAL OAUTH action uses the requester's account2BOT SERVICE KEY action uses shared Bot-level access3PRIVATE CHAT private conversation and notes4SLACK CHANNEL shared thread and shared Bot computer
The distinction is in the credential, not the plugin's name. A shared plugin configured with OAuth still runs under the requester's account. A plugin configured with a Bot-level key uses the same credential for everyone, so the key should be scoped to the least access the team needs
Grok Bot asks before using a teammate's personal connector in a shared Slack thread or group conversation. That connector approval identifies the account it would use. A shared plugin already configured on the Bot does not trigger that particular prompt. A September 29 update also added a Slack action-review card that only the relevant person can answer
That is a useful reminder that "the Bot knows it" and "the Bot may do it" are separate questions
The Bot may know the process for issuing a refund
It should not infer that every teammate can authorize one
It may know where a confidential document lives
It should not paste that document into a public channel because someone mentioned it there
Memory decides what context is available
Permissions decide what action is allowed
The agent needs both checks
Slack creates a second memory boundary
A Team Bot in Slack feels like one coworker
Underneath, the context depends on where the conversation happens
In a one-to-one chat, the person gets their own conversation and private notes
In a Slack channel, the thread is shared, and Grok Bot uses a separate shared computer for that Bot. The product docs warn against placing material in a channel thread that should not be visible to everyone in that channel
This creates a subtle failure mode
Someone asks a harmless question in a channel and allows the Bot to use their personal connector
The connector belongs to the requester, so the account boundary is intact
But the answer could still include details that the rest of the channel should not see. Approving access to a source is not the same thing as approving every possible disclosure from that source
The fix is not "tell the model to be careful"
The fix is to treat destination as part of the retrieval and output policy
1Before answering in a shared channel:21. Identify the audience of this thread32. Identify the source and its access scope43. Summarize only what this audience may see54. Move private details to a 1:1 conversation
That four-line rule is an operational recommendation, not a built-in guarantee of Grok Bot behavior
The safer default is to keep sensitive investigation in a private chat and publish only the approved conclusion to the team

Design for contradictions, not just recall
Team memory gets harder when two people disagree
The sales lead says the renewal date is the 14th
The finance lead says it is the 30th
The CRM says the 28th
Naive agent picks the most recent sentence
Useful agent asks what kind of fact this is and where it lives
The renewal date is a live contract fact
The CRM may be wrong too, so the Bot should check the signed agreement or ask the accountable owner before acting
For each shared memory worth keeping, I would record the decision and its provenance somewhere the team can inspect
That can be a document, issue, or lightweight ledger outside the Bot
The Bot's memory can then point to it
When a contradiction appears, use this order:
- Stop the consequential action
- Identify the authoritative source
- Ask the owner to resolve the conflict
- Update the source first
- Correct or remove the Bot's memory second
This is memory maintenance, not prompt tuning
One practical Team Bot: release coordination
Imagine a Team Bot used by product, engineering, and support
It answers mentions in the release channel and helps prepare a launch brief. By default, a Team Bot does not respond to every top-level channel post. Watching the whole channel requires a separate listener routine, and that routine belongs to the person who set it up, not to the team as a single shared account
On Monday, product confirms that the launch is limited to paid teams
The Bot can remember that decision, with a pointer to the release plan
On Tuesday, engineering changes the rollout date
The Bot should read the current release ticket, not trust Monday's date
On Wednesday, support says their internal brief should use a shorter format
That might become a support-specific instruction in a maintained skill. It should not silently become a formatting rule for everyone who talks to the Bot
On Thursday, the security owner approves a new review step
The Bot's owner or a delegated manager updates the shared launch skill
On Friday, someone asks the Bot in Slack, "Are we ready to announce?"
The Bot should gather live evidence before answering:
1release ticket current date and rollout state2launch checklist required approvals3PR and CI build and verification status4team memory approved audience and decision history5private notes do not use for a shared-channel answer
Here is the kind of answer I would want in the shared thread:
1STATUS: Blocked, do not announce yet2CHECKED: Current release ticket, launch checklist, CI run3READY: Paid-team audience is approved in the release plan4MISSING: Security sign-off on the new external API change5NEXT: Ask the security owner to review, then recheck the checklist
If the requester wants a personalized brief based on private notes, the Bot can prepare that in a 1:1 conversation. The channel gets only the team-safe conclusion and the evidence behind it
That is a better outcome than a Bot that confidently remembers Monday
Test the memory layer before publishing the Bot
The first eval should not ask whether the Bot can recall a fact
It should ask whether the Bot uses the right fact in the right scope
I would test five cases before inviting the team:
- Private-to-team leak Person A gives a personal preference. Person B should not inherit it
- Explicit promotion Teammate asks the Bot to save an approved decision for the team. Another teammate should see the decision, not the original private chat
- Stale fact Team memory contains an old status. The source system has a newer one. The Bot should use the source
- Conflicting correction Two users give different claims. The Bot should not silently turn the latest claim into policy
- Shared-channel boundary A Slack thread asks for data from a personal connector. The Bot should follow the connector approval and audience boundary
Run the cases from two real team accounts, not twice from the owner's chat. Otherwise you have not tested the boundary that matters
For each case, keep the prompt, the expected behavior, the Bot's answer, and the source it used. A compact test record is enough:
1M01 private preference -> Person B never inherits it2M02 shared decision -> Person B sees the decision, not A's chat3M03 changed status -> current source beats saved memory4M04 conflicting claims -> no silent policy change5M05 private connector -> approval + channel-safe response
Track more than recall accuracy
1wrong-scope saves2stale-fact actions3unsupported team claims4approval bypasses5time to correct a bad memory
The last metric is underrated
Every shared memory system will eventually store something wrong
What matters is whether the team can find it, correct it, and know which outputs it affected
For my rollout, a private-to-team leak or an unauthorized action is a hard fail. A stale or unsupported answer needs a repair and a rerun of the relevant case before the Bot reaches more people. These are proposed release criteria, not a claim about Grok Bot's built-in evals
When the Bot learns the wrong thing
The important operational question is not whether a bad memory can happen
It can
The question is how long the mistake survives and who sees it before you fix it
Suppose the Bot saved "all enterprise renewals need VP approval" after one exception. A week later, it starts delaying ordinary renewals
I would handle that like a small data incident:
- Ask the Bot to show its team memory and find the exact claim. Grok Bot lets you ask what it saved, then tell it to correct or remove an item
- Identify the source conversation or decision, the owner, and the work that reused the claim. If you cannot trace the source, do not preserve the rule because it sounds plausible
- Correct the authoritative renewal policy first. Then remove or replace the Bot's bad memory. If the mistake came from a skill, file, or Bot description, fix that too
- Re-run the renewal case from another teammate's account. Check both the answer and whether an action was attempted
- Review downstream drafts or tickets created while the wrong memory was active
That last step is easy to miss. Deleting a memory changes future behavior, not the emails already drafted or decisions already made
The reusable lesson is to keep a lightweight record of important shared memories outside the Bot: claim, source, owner, scope, and review date. Grok Bot's memory is the working context; your ledger is the audit trail

The mistakes I would expect first
Copying a personal Bot into a Team Bot without reviewing its memories.\\ Grok Bot offers a team copy, including the option to start fresh or keep private items out. Treat that review as a security step, not setup friction
- Using team memory as the company database The Bot should remember stable context and reopen changing data
- Letting everyone rewrite process by conversation Shared skills have an owner for a reason
- Forgetting where Slack work runs Channel thread is a shared environment, not a private DM with a bigger audience
- Giving the Bot a broad service key because OAuth feels slow A shared key expands the Bot's effective authority for every teammate
- Measuring "answered" instead of "correctly scoped" A Bot can answer quickly and still leak a private detail or act on an outdated fact
- Assuming memory is a training event The practical issue is what context the Bot can reuse on future work, not whether its underlying model weights changed
The setup I would actually ship
- Create one Team Bot for one shared job, not a general company assistant
- Write its responsibility and approval boundary in the Bot description
- Add the minimum files and plugins it needs. Prefer personal OAuth for user-specific actions and read-only shared credentials for shared data
- Put the repeatable process in a skill maintained by the owner or a delegated manager
- Add only a few confirmed team memories, each with a clear source or owner
- Test private notes, stale facts, contradictions, and Slack audience boundaries from separate accounts
- Publish to a small team, inspect failures, and agree on how to correct a bad team memory before widening access
This is the part of "AI coworker" that the demo cannot show
The agent becomes useful when the team can teach it
It becomes reliable when the team can tell what it learned, where it learned it, and when it should forget
The real shift
Grok Bot's first story was persistence
Give a Bot a job, tools, a computer, and time to finish
Team Bots add a different question:
What happens when the Bot belongs to a team instead of one person?
The answer is not a bigger context window
It is a memory architecture
Private notes for personal context
Shared memory for explicit team knowledge
Maintained team skills for process
Live systems for changing facts
Permissions for what the Bot may actually do
Get those boundaries right, and one correction can make the next person's work better
Get them wrong, and the Bot scales a mistake across the whole team
That is why memory engineering matters
If u read this far
-> Subscribe to my Substack
-> Join my Telegram
-> Bookmark this article
-> Follow @0xwhrrari





