Workspaces and memory
Organize work into workspaces, projects and chats, and keep what matters.
A workspace is an organizational container. It owns its connections, Profiles, projects and chats; Specialists stay shared across workspaces. Default is created for you and cannot be removed. A project is registered work with one or more checkouts; its memory identity survives adding or moving checkouts. Chats are threads inside a project, or Quick Chats directly under the workspace. Workspaces are not filesystem roots: a chat sees source files only through a selected project.
Manage workspaces
Section titled “Manage workspaces”Open Settings → Workspaces:
| Control | Use |
|---|---|
| Workspace | Choose the active workspace; Rename workspace renames it |
| Remove Workspace… | Unregisters an empty workspace; projects must be moved or unregistered first. Files and stored data are not deleted |
| New workspace | Enter a Name and choose Create. New workspaces start empty; switch to one, then add connections and Profiles in Profiles & Providers |
| Copy a Profile here | Pick a Source workspace and Profile, then Copy Profile. Referenced connections and credentials are copied independently |
| Projects | The projects registered in this workspace |
Register a project with Open project folder. Right-click a project for Repository or Remove project…; removal keeps the folder and its memory, which reattach if you register the folder again.
Agents in a project chat know the names and folders of the other projects in the same workspace, and the folder names beside the current project. They do not get to read them. When you mention another project, the agent names it and asks for access through the usual approval instead of asking you for a path.
synoec workspace listsynoec workspace create Studiosynoec workspace copy-profile Personal --from Default --workspace Studiosynoec workspace configure Studio setupsynoec workspace use Studiosynoec project add /path/to/project MyProject --workspace Studiosynoec project bind MyProject /path/to/another-checkoutsynoec project move MyProject Studiosynoec --project MyProjectworkspace configure <workspace> <command> scopes configuration commands to
that workspace. project move carries local memory with membership and can be
rerun after an interruption. In the terminal, /workspace, /project and
/memory take the same arguments.
Memory scopes
Section titled “Memory scopes”| Scope | Holds |
|---|---|
| Workspace | Deliberate shared facts and preferences |
| Project notes | Durable knowledge across a project’s checkouts (the default) |
| Task / branch | Working context for one chat; private to it |
| Chat recall | Opt-in visible messages — searchable, never trusted facts |
Browse them in Repository → Memory (Project notes, Chat recall, Workspace) or in Context. Agents write through the ProjectMemory tool; uncertain entries stay candidates until you trust them. The Code Index is a separate store — see Repository.
synoec memory add "Release labels use amber" --kind decisionsynoec memory add "Prefer concise reports" --scope workspace --kind preferencesynoec memory list --inheritedsynoec memory search "release labels"synoec memory update <memory-id> "Release labels now use cobalt"synoec memory promote <memory-id> --to workspacesynoec memory forget <memory-id>A temporary chat (the desktop’s temporary chat, the CLI’s /clear or
print-mode --no-session-persistence) runs with organization memory on like
any other chat; its transcript lives in a disposable root. Use --scope task --task <chat-id> (with optional --branch) for working
memory; trust, pin, history and relate manage review and priority.
export --output <file> and import <file> move current entries, not history.
Records live under $SYNOEC_HOME/workspaces/<id>/memory/.
Session commits
Section titled “Session commits”Whenever memory is on, Synoec summarizes each chat after it goes quiet and proposes memory changes from what was said. There is nothing to switch on. A commit covers the turns since the chat’s last commit. It is cut when a turn compacts the chat’s context, when you archive the chat, when the chat’s engine closes (a few idle minutes after the last reply), after 15 idle minutes while the engine stays open, or on Commit this chat in Context. The chat’s own model reads the new turns and returns an abstract, an overview, and up to 16 proposed changes: create, update, supersede or relate, each with an exact quotation from the chat. A change resting only on the assistant’s words needs a later reply from you in the same commit; otherwise it is rejected. There is no delete; forgetting stays your action.
| Apply policy | What happens |
|---|---|
| Apply what I said myself; review the rest (default) | Changes quoting your own messages apply as trusted memory; the rest wait for review. A subthread’s brief, a Specialist notice or a message from another thread is not your message, so changes quoting it wait for review too |
| Review every change | Nothing is written until you apply it from the commit |
Review commits under Context › commits: Apply, Dismiss, or Revert
applied changes. Reverting deletes what the commit created and restores what
it updated; a memory it superseded comes back as a new record citing the revert.
Extraction sends the chat text to the chat’s model under the chat’s recall
disclosure, and counts as ordinary provider usage. The last turn a commit
covered shows what it noted, for example Jotted down 2 notes. Commits wait
for an engine of the same project and Profile; agents never see unreviewed
commits.
synoec memory commits statussynoec memory commits apply reviewsynoec context fs list synoec://context/workspaces/<workspace>/projects/<project>/commitssynoec context fs commit-apply <commit-uri> --operations 0,2synoec context fs commit-revert <commit-uri>Memory kinds include entity (a named person, project, service or component)
and event (a dated decision or milestone), alongside facts, preferences,
decisions and handoffs.
When the agent offers another model for a Task or subthread, your answers
are kept as one preference memory per kind of work, tallying picks per model
with the most-picked first. An “always” answer is kept on its own, since it
skips the question.
A subagent (Task) is a step of its chat’s work, so it recalls as that chat:
the chat’s working memory and handoffs as well as project and workspace
memory. A subthread is a chat of its own and recalls under its own thread.
Settings → Memory
Section titled “Settings → Memory”| Control | Use |
|---|---|
| Enable MemPalace | Turns on semantic retrieval over saved memory |
| Store memory | This computer or Remote Server (Server URL, Remote workspace ID, Private token file, optional Transfer existing memories) |
| Context embeddings | Local · MiniLM (default) or Embedding API… — an explicit endpoint, model and dimensions that receives memory text, Context items (lessons, Skills, documents, session summaries) and queries |
| Embedding engine | Automatic, Standard (CPU) or Core AI (supported Macs) |
| Recall conversations | Opt in to indexing visible user and assistant messages from successful tasks |
| Session commits | How proposed changes apply; see Session commits |
| Apply / Reset | Changes are a draft until setup succeeds |
| Stop and Save Progress / Resume Setup | Pause setup; completed downloads are verified and reused |
The memory library adds Inspect status, Rebuild search index, Sync memory, Import Memories, Export Memories and Clear scope….
MemPalace and Core AI
Section titled “MemPalace and Core AI”Saved memory always works with lexical retrieval. MemPalace adds semantic retrieval over governed records (not source code). Setup installs its own pinned Python runtime; Python and Docker are not prerequisites. Packaged builds include verified MiniLM assets. Automatic prefers the Core AI accelerator on supported Apple Silicon Macs and otherwise uses CPU MiniLM; if neither is available, retrieval stays lexical.
Each engine keeps one MemPalace worker with the embedding model loaded and
stops it after two quiet minutes. An index already at the current revision
starts no worker, and a recall-disclosure change re-checks which records belong
rather than re-embedding them. Rebuild search index (memory reindex)
still forces a full rebuild.
synoec memory enablesynoec memory enable --conversation-recall onsynoec memory doctorsynoec memory reindexsynoec memory core-ai install <bundle-directory>synoec memory disablememory doctor (the desktop’s Inspect status) checks the runtime, model
assets, index generation and last embedding fallback.
Workspace-wide commands for a named workspace (--workspace <id> --scope workspace, such as configure, doctor or reindex) need no project and do
not register the folder they run in. Desktop first-run setup uses this to turn
on memory before any project is added; project and task scopes still need a
registered project.
Sharing between Profiles
Section titled “Sharing between Profiles”Private memory and learning keep the Profile they came from. Starting a chat,
or continuing your own, never asks: another Profile’s private memories simply
stay out of recall. When you open a chat another Profile created, the composer
offers Allow sharing or Start a separate chat. Older memories with no
recorded Profile stay private until you allow them with memory sharing.
Shared workspace memory stays available to every Profile.
synoec memory sharing Personalsynoec memory sharing Personal --allow --expected-revision <revision>synoec memory sharing Personal --revoke --expected-revision <revision>Revoking stops future retrieval; it cannot retract earlier provider requests.
Remote memory
Section titled “Remote memory”Host memory on one machine and connect others. In the desktop use Host Memory Server → Start Memory Server; from the CLI:
synoec memory serve --token-file <private-file>synoec memory connect https://memory.example --workspace-id <id> --token-file <private-file>synoec project add /local/checkout MyProject --project-id <shared-project-id>synoec memory syncThe server listens on loopback port 7331 by default (--host, --port); put
HTTPS in front for remote access. The token must be at least 32 characters in a
private file. Use the same project ID on every device. connect --transfer
uploads existing local records. memory disconnect returns to local mode.
Limits
Section titled “Limits”- Remote memory is a personal service, not team access control.
- Tasks, checkouts and credentials do not synchronize.
- While offline, reads come from cache and writes queue; conflicts and authentication errors stay errors until you refresh.
- Forgetting cannot erase disconnected caches, exports or freed database pages.
Related
Section titled “Related”- Context · Repository · Learning
- Providers and models — Profiles
- Memory runtime notices · Licensing
Decisions behind this page: 0099, 0103, 0170, 0207, 0219 — see the decisions index.