Skip to content

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.

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.

Terminal window
synoec workspace list
synoec workspace create Studio
synoec workspace copy-profile Personal --from Default --workspace Studio
synoec workspace configure Studio setup
synoec workspace use Studio
synoec project add /path/to/project MyProject --workspace Studio
synoec project bind MyProject /path/to/another-checkout
synoec project move MyProject Studio
synoec --project MyProject

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

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.

Terminal window
synoec memory add "Release labels use amber" --kind decision
synoec memory add "Prefer concise reports" --scope workspace --kind preference
synoec memory list --inherited
synoec memory search "release labels"
synoec memory update <memory-id> "Release labels now use cobalt"
synoec memory promote <memory-id> --to workspace
synoec 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/.

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.

Terminal window
synoec memory commits status
synoec memory commits apply review
synoec context fs list synoec://context/workspaces/<workspace>/projects/<project>/commits
synoec context fs commit-apply <commit-uri> --operations 0,2
synoec 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.

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

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.

Terminal window
synoec memory enable
synoec memory enable --conversation-recall on
synoec memory doctor
synoec memory reindex
synoec memory core-ai install <bundle-directory>
synoec memory disable

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

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.

Terminal window
synoec memory sharing Personal
synoec 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.

Host memory on one machine and connect others. In the desktop use Host Memory Server → Start Memory Server; from the CLI:

Terminal window
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 sync

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

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

Decisions behind this page: 0099, 0103, 0170, 0207, 0219 — see the decisions index.