Updating Oort
oort update updates the copies of oort your agents and your shell run, and prints the command for any it cannot update itself. It migrates the memory store and restarts oort serve. Once a day, oort also tells you when a new release is out.
On this page
Update
oort updateIt lists each copy it found and what it will run, then asks once: "Update 2 copies of oort to 0.6.3 and restart oort serve? [y/N]". It ends with the link to the release notes, github.com/oortmem/oort/releases/tag/v0.6.3.
# only say what would change
oort update --check
# no question, oort.v1 JSON for scripts
oort update --yes --json
# a given release instead of the latest
oort update --version 0.6.3With --json, or when there is no terminal to ask in, it refuses without --yes. --check never asks and never installs.
Which copies it updates
You can have more than one oort: an npm global for each Node version, a copy for the Claude Code hooks, a copy from pip. oort update looks at these four:
- The hooks' copy, the one
~/.claude/settings.jsonruns. - The running copy, the one you ran
oort updatewith. - The first on PATH, what
oortruns in this shell. - The managed copy in
~/.oort/cli, when you have one.
It reads each copy's version from its files and never runs another copy to find out, so --check only reads files and asks npm. A copy whose files do not say is listed as "version unknown".
It runs npm itself only for an npm install older than the release. For the rest it prints the command:
| Where it lives | What oort update does |
|---|---|
| npm global, also under nvm, fnm, Volta or asdf | Runs npm i -g --prefix <prefix> oortmem@<version>. |
~/.oort/cli | Runs npm i -g --prefix ~/.oort/cli oortmem@<version>. |
| pnpm global | Prints pnpm add -g oortmem@<version>. It never runs pnpm: run it with the pnpm that installed the copy. |
| pip or pipx | Prints pipx upgrade oortmem or python -m pip install -U oortmem for you to run. It never runs pip. |
| A clone of the repository | Prints git pull && pnpm install && pnpm build. |
| npx, pnpm dlx or a temp directory | Nothing, and it says why. A temporary copy is never updated in place. |
Every other older copy on your PATH is listed with the command that updates it and the one that removes it. oort update never deletes anything.
It runs the first npm on your PATH by its absolute path, from your home folder, so no project's .npmrc or package.json applies. With no npm, it prints the command instead.
After it installs
- Checked, not trusted. An install counts only once the copy really is the new release. If the installer exits without error but the copy is unchanged, that copy is a ✗ and
oort updateexits 1. - npm's delay. For a minute or so after a release, npm may not have it yet.
oort updatetries again for up to 2 minutes, with a line each time. - The store. A checked new copy opens your memory store. When the release changes the store's format, it backs up the store first and prints where the backup is.
- oort serve. If the daemon runs, it is stopped and started again from the new copy.
With no checked copy, neither the store step nor the restart runs, and it says what to run once you have one.
Exit codes
| Code | Meaning |
|---|---|
0 | Updated, already up to date, you said no, or --check (read data.upToDate in the JSON). |
1 | An installer failed, an install did not take, or npm's registry could not be reached. |
2 | A --version that is not a version, or --yes missing where it cannot ask. |
The update notice
When a newer release is out, oort says so in these places:
- When a Claude Code or Codex session starts, as a message to you. It is not part of the model's context: the memory the model gets is the same as without it. Codex shows it as a warning in its UI. At most once a day for each new version.
- After a command you run in a terminal, one dim line:
Oort 0.6.4 is available (you have 0.6.3): oort update. - In oort doctor, as an
updatesline, and underoort serve status.
It never appears with --json, when the output goes to a pipe or a file, in CI, or in the MCP server your agent talks to. For scripts, oort update --check --json has the same answer.
What the check sends
- One request:
GET https://registry.npmjs.org/oortmem/latest, with the user agentoort-update-check. - No version, no id, no cookies. Nothing about you or your memories.
- At most once a day. The answer is kept in
~/.oort/update-check.json, and a failed check waits until the next day. - A hook never waits for it: when the file is a day old, the hook starts the check in the background.
- That background check gets only
PATH,HOME,OORT_HOME, the opt-outs below, and your proxy and certificate settings. Never an API key. It reads at most 1 MB of the answer. - When
~/.oortis a symlink, it is followed only to a folder of yours that others cannot write to. Otherwise the check is skipped, andoort doctorsays why.
oort update itself always asks npm when you run it. See also Privacy.
Turn the check off
Any one of these turns off both the check and the notice:
OORT_NO_UPDATE_CHECK=1in your environment.NO_UPDATE_NOTIFIERset to anything.CIset to anything butfalseor0. Most CI systems set it.updates.checkset tofalsein~/.oort/config.json:
{ "updates": { "check": false } }Only your home config counts. An updates key in a repository's oort.config.json is ignored, with a warning.
oort serve after an update
oort update restarts the daemon itself. If you update another way, the daemon gives way on its own: the first hook from a newer version stops it and starts one of its own version. An older or equal version never stops it.
A daemon from before 0.6.3 does not do this. Restart it once:
oort serve stop && oort serve --detachTroubleshooting
Two copies of oort
oort doctor warns when the hooks run another version than the oort you typed. This happens when the hooks run one npm global and your shell finds another, often under another Node version. oort update updates both.
"another copy of oort" of the same version
Under hooks, oort doctor can print an info line: the hooks run one copy, and you ran another copy of the same version. That is fine. Nothing to fix.
The hooks break when you switch Node versions
Hooks that run a copy under nvm, fnm, Volta or asdf stop working when that Node version goes away. Give the hooks a copy of their own in ~/.oort/cli:
npm i -g --prefix ~/.oort/cli oortmem
~/.oort/cli/bin/oort install claude-codeoort update keeps that copy current. For other problems, see Troubleshooting.