| name | cognee-switch-datasets |
| description | Use when the user wants to switch this Codex session to another Cognee dataset, see which datasets are available, or move memory capture to a different dataset. Syncs the current session first, then starts a fresh Cognee session bound to the chosen dataset. |
Switch Datasets
Move this Codex session to a different Cognee dataset. A Cognee session never
spans two datasets, so the switch retires the current session (after syncing
it into the graph) and starts a new one on the chosen dataset. All later saves
and recalls target the new dataset; the in-context status line shows it.
Rules
- Never guess a dataset name: list first unless the user named one.
- Only offer datasets the listing returns — read-only ones are already filtered out.
- Do not pass
--force unless the user explicitly accepts that unsynced entries of the current session are retried at session end instead.
Instructions
1. If the user named a dataset, switch directly
python3 "${CODEX_PLUGIN_ROOT}/scripts/switch-dataset.py" "<name>" --json
2. Otherwise, list and let the user choose
python3 "${CODEX_PLUGIN_ROOT}/scripts/switch-dataset.py" --list --json
The JSON has current, datasets ([{name, id, writable, current}]),
hidden_readonly (datasets you can read but not write — never offered) and
filtered (true when write access was verified for every row).
Codex has no interactive picker outside plan mode, so present a numbered
list of the dataset names (mark the current one) and ask the user to reply
with a number or a name. If filtered is false, say that write access could
not be verified. When the user answers, run the switch with the chosen name:
python3 "${CODEX_PLUGIN_ROOT}/scripts/switch-dataset.py" "<chosen name>" --json
A name that is not in the list is created for the user on switch.
3. Report the result
On success the JSON is
{"switched": true, "dataset", "session_id", "previous": {"dataset", "session_id", "synced": true|false}}.
Tell the user in one line which dataset and Cognee session are now active and
that the previous session was synced. The status line updates on the next
prompt. If "switched": false with "reason": "already_active", say the
session is already on that dataset.
On failure the JSON is {"error", "code"}:
| code | meaning | what to do |
|---|
| 2 | launch record not found | the plugin did not initialise this session; run cognee-cli.sh doctor. If several Codex sessions share this directory, rerun with --session-key <host session id> |
| 3 | syncing the current session failed | nothing was changed; show the error and ask before retrying with --force |
| 4 | registering the new session failed | nothing was changed; the server rejected the registration — check the connection |
| 5 | dataset not writable | the name is readable but owned by another principal; pick from the list |
What the switch does
- Syncs the current session into its dataset (
sync-session-to-graph.py --strict) — aborts if this fails.
- Ensures the target dataset exists for this principal.
- Registers a new Cognee session on the target dataset under a fresh connection handle, then releases the old handle (register-then-unregister, so a local agent-mode server never sees zero connections).
- Repoints this launch's record: every hook, the shell wrappers, the idle/exit watchers and the status line follow it.
- Retired sessions stay in the record's
touched list; the session-end sync covers them again as a safety net.
Notes
COGNEE_PLUGIN_DATASET only seeds the dataset at launch; a switch overrides it for the rest of the session and survives a resume.
- Recall is scoped to the active dataset, so after a switch earlier context from the previous dataset is no longer injected — switch back to see it again.