Heypi’s scope system controls who shares what. A scope determines whether two conversations in different threads, channels, or even adapters look at the same runtime workspace and the same long-lived memory file. Getting this right lets you build agents that share project files across a whole team channel, give each user a private sandbox, or maintain a single global knowledge base — without any special plumbing.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/hunvreus/heypi/llms.txt
Use this file to discover all available pages before exploring further.
The Four Scopes
channel
Default. One workspace per chat channel (Slack channel, Telegram chat, Discord channel, or webhook channel). Threads within the same channel share files and memory.
user
One workspace per chat actor. Each user gets their own isolated workspace and memory, even in the same channel.
adapter
One workspace for an entire adapter instance. Every accepted chat on that adapter shares files and memory.
agent
One workspace shared across all adapters for this configured agent. The broadest possible sharing.
What Scope Controls
The top-levelscope setting affects:
- Runtime workspace — the directory where
bash,read,write,edit,grep,find, andlsoperate. - Attachments — inbound files are stored in a scoped attachment tree; a file uploaded in one channel cannot be referenced by another channel under the default
channelscope.
Independent Overrides
runtime.scope and memory.scope can each be set independently from the top-level scope:
Common Configurations
Workspace Layout on Disk
Scoped runtime roots and attachment roots both live under the configuredruntime.root, but they are separate trees:
~ instead of % for readability). Runtime workspaces follow runtime.scope ?? scope. Memory follows memory.scope ?? scope. Attachments always follow the top-level scope; there is no separate attachments.scope.
Memory
Memory is optional small durable background context — not a transcript database, not a config file, and not a security boundary.What Belongs in Memory
Good memory
Good memory
Short, stable facts and standing rules:
Bad memory
Bad memory
These should never go in memory:
How It Works
When memory is enabled, heypi automatically:Validation is a hygiene check, not a security boundary. Do not store secrets, credentials, private data, or policy rules that must be trusted.
writePolicy
writePolicy controls who can mutate memory:
| Policy | Behavior |
|---|---|
auto | The agent can write, replace, and delete memory freely. |
approvers | Only turns initiated by approval.approvers can mutate memory. |
off | Memory is read and injected, but cannot be changed. |
| Scope | With approvers configured | Without approvers |
|---|---|---|
channel | approvers | auto |
user | approvers | auto |
adapter | approvers | off |
agent | approvers | off |
Full Memory Configuration
Approvals and Memory Writes
Approvals do not elevate actor identity. If a non-approver starts a turn and an approver later approves one of its tool calls, the continued turn still belongs to the original requester forwritePolicy checks.
For team memory where only leads should teach the bot, configure approval.approvers and leave writePolicy unset — it will default to approvers.