Repository navigation
Releases: mrtheroi/memry-cli
Release list
v1.2.0
Added
- Opt-in usage metrics for Claude Code.
memry usage enablelets Claude Code send its
OpenTelemetry metrics to the memry server you are logged in to, so the dashboard can chart token
usage and cost. It is off by default, andmemry setupnever turns it on.- Before asking for a token, it explains where the metrics go and what memry can and cannot
check. Claude Code decides what it sends, as documented in its monitoring guide, including
identity attributes such as your email. The memry server keeps only the token and cost data
points and discards everything else. - It requests a usage token that can only send usage metrics, then adds memry's variables to the
envof Claude Code'ssettings.json, keeping every other setting. It sets every documented
OTEL_METRICS_INCLUDE_*attribute gate tofalse. The settings file, which now holds that
token, is made readable only by its owner. - It stops before requesting a token when other telemetry is configured anywhere memry can see:
the shell environment, the user settings or Claude Code's managed settings files. This covers
OTEL_*, the Claude Code telemetry and beta tracing variables,otelHeadersHelper, a managed
policyHelper, and managed settings files that cannot be read. This is an allowlist, so
variables added by later Claude Code versions also stop it.--forceonly replaces conflicting
values of memry's own variables in the user settings. Per-session--settings, MDM, registry
and server-managed policies are outside what memry can see. - It refuses a non-loopback
http://server unless--insecureis given.
- Before asking for a token, it explains where the metrics go and what memry can and cannot
memry usage statusreports whether metrics go to memry, as far as memry can see, and lists
anything missing or overridden. It never prints the token.memry usage disableremoves only the variables memry wrote and revokes this machine's usage
token.memry uninstallandmemry delete-accountturn usage metrics off too.
Changed
- The privacy policy (PRIVACY.md, PRIVACY.es.md) describes the
opt-in usage metrics: what Claude Code sends, what the memry server keeps, and how to turn it off. - Every write to Claude Code's
settings.json, including setup's SessionStart hook, now checks
that the file did not change since memry read it. On a change it writes nothing (usage
commands) or reads the file again and retries (the hook). Only another program writing at the
same instant can still win. - memry commands that change the memry config (
memry setup,memry usage,memry uninstall,
memry delete-account) now take a private per-user lock, so they never overwrite each other. A
lock is never taken over automatically. If a command crashed, the message names the lock file to
delete.
Security
- Usage tokens are revoked by exact id and only on the server that issued them, so other machines'
tokens are never touched. If enabling fails partway, the new token is revoked and the previous
setup keeps working. A failed revocation prints a warning; unused usage tokens stop working
after 30 days. - Unknown state fails closed. If the memry config or its usage record cannot be read or is
malformed, the usage commands,memry uninstallandmemry delete-accountstop without
changing anything. Before, uninstall could delete such a config. - Requires memry-server 0.20.0 or later for the usage-token endpoints.
v1.1.3
Security
memry setuprefuses a plainhttp://server URL unless its host is this machine (localhost,
any127.0.0.0/8address or::1). Before,--url http://<remote host>(orMEMRY_URL) sent
the token given with--tokenorMEMRY_TOKEN, the email login code and, later, the saved token
on everymemry mcprequest in clear text. Setup now prints "Refusing to send credentials over
plain HTTP to . Use an https:// URL, or pass --insecure to allow it (for example on a
trusted LAN)." and exits with code 1 before asking or sending anything. The host is compared as a
whole, solocalhost.evil.comand127.0.0.1.nip.ioare refused.- New
memry setup --insecureflag to allow a non-loopbackhttp://server on a network you
trust.https://URLs are unchanged. A config saved earlier with anhttp://remote URL keeps
working: onlysetupenforces the rule.
v1.1.2
Changed
- When the server rejects the token (401: expired after inactivity, revoked or invalid),
memry mcpanswers "memry: your login expired or was revoked; runmemry setupto log in
again." andmemry hook:session-startprints that line (still exit code 0) instead of nothing.
The hook stays silent for every other failure.
v1.1.1
Fixed
- The release publishes the
Memry.Memrypackage to WinGet. In 1.1.0 the WinGet step failed on
its token template after the GitHub release was published, so 1.1.0 is not on WinGet;
winget install Memry.Memrystarts at 1.1.1.
v1.1.0
memry now runs on Windows (amd64 and arm64). On macOS and Linux nothing changes except the home
directory behavior listed below.
Added
- Windows support:
memry setup,uninstall,delete-account,mcp,mcp-headersand
hook:session-startwork on Windows, with the config file at
%USERPROFILE%\.config\memry\config.json, readable only by your user. A file another process
holds busy is retried briefly when memry renames it. winget install Memry.Memry(andwinget upgrade Memry.Memry) install and update memry on
Windows. Releases also carrymemry_<version>_windows_<arch>.ziparchives for amd64 and arm64
with the same signedchecksums.txtand SBOMs;go installworks too. The binary is not
Authenticode-signed, so SmartScreen or an antivirus may warn about it.- The global
--config <path>(or--config=<path>) option onsetup,uninstall,
delete-account,mcp,mcp-headersandhook:session-startselects the config file for that
process. It wins overMEMRY_CONFIG, which wins over the default path. - Claude Code on Windows: setup registers memry as a stdio
memry mcpserver (no
headersHelper) and installs the SessionStart hook asmemry hook:session-start, somemry
must be on thePATH. Bothclaude.exeandclaude.cmdare supported. - On a legacy Windows console without color support, the agent question prints
Agents: <list> (pass --agents to choose).and keeps the defaults. memry uninstallandmemry delete-accountend withwinget uninstall memryon a WinGet
install, or the path of thememry.exeto delete, instead of the Homebrew hint on Windows.
Changed
- The home directory is
USERPROFILE, thenHOME, then two levels aboveLOCALAPPDATAon
Windows (HOME, thenUSERPROFILEon macOS and Linux). When none is set, memry fails with
"Could not find your home directory; set USERPROFILE or HOME." and exit code 1. On macOS and
Linux an unsetHOMEnow fails this way instead of writing to/.config. - On Windows,
MEMRY_EXECUTABLEmay only contain letters, digits and: / \ . _ -, and a
config path with",$, a backtick,%,!, a line break or a typographic quote is
refused for the hook, which is written with forward slashes.
Fixed
- Setup and uninstall no longer fail when Claude Code reports a server that is not registered as
No MCP server named "<name>" in user scope, as newer Claude Code versions do; it means the
same as "No MCP server found".
v1.1.0-rc.2
memry now runs on Windows (amd64 and arm64). On macOS and Linux nothing changes except the home
directory behavior listed below.
Added
- Windows support:
memry setup,uninstall,delete-account,mcp,mcp-headersand
hook:session-startwork on Windows, with the config file at
%USERPROFILE%\.config\memry\config.json, readable only by your user. A file another process
holds busy is retried briefly when memry renames it. winget install Memry.Memry(andwinget upgrade Memry.Memry) install and update memry on
Windows. Releases also carrymemry_<version>_windows_<arch>.ziparchives for amd64 and arm64
with the same signedchecksums.txtand SBOMs;go installworks too. The binary is not
Authenticode-signed, so SmartScreen or an antivirus may warn about it.- The global
--config <path>(or--config=<path>) option onsetup,uninstall,
delete-account,mcp,mcp-headersandhook:session-startselects the config file for that
process. It wins overMEMRY_CONFIG, which wins over the default path. - Claude Code on Windows: setup registers memry as a stdio
memry mcpserver (no
headersHelper) and installs the SessionStart hook asmemry hook:session-start, somemry
must be on thePATH. Bothclaude.exeandclaude.cmdare supported. - On a legacy Windows console without color support, the agent question prints
Agents: <list> (pass --agents to choose).and keeps the defaults. memry uninstallandmemry delete-accountend withwinget uninstall memryon a WinGet
install, or the path of thememry.exeto delete, instead of the Homebrew hint on Windows.
Changed
- The home directory is
USERPROFILE, thenHOME, then two levels aboveLOCALAPPDATAon
Windows (HOME, thenUSERPROFILEon macOS and Linux). When none is set, memry fails with
"Could not find your home directory; set USERPROFILE or HOME." and exit code 1. On macOS and
Linux an unsetHOMEnow fails this way instead of writing to/.config. - On Windows,
MEMRY_EXECUTABLEmay only contain letters, digits and: / \ . _ -, and a
config path with",$, a backtick,%,!, a line break or a typographic quote is
refused for the hook, which is written with forward slashes.
Fixed
- Setup and uninstall no longer fail when Claude Code reports a server that is not registered as
No MCP server named "<name>" in user scope, as newer Claude Code versions do; it means the
same as "No MCP server found".
v1.1.0-rc.1
memry now runs on Windows (amd64 and arm64). On macOS and Linux nothing changes except the home
directory behavior listed below.
Added
- Windows support:
memry setup,uninstall,delete-account,mcp,mcp-headersand
hook:session-startwork on Windows, with the config file at
%USERPROFILE%\.config\memry\config.json, readable only by your user. A file another process
holds busy is retried briefly when memry renames it. winget install Memry.Memry(andwinget upgrade Memry.Memry) install and update memry on
Windows. Releases also carrymemry_<version>_windows_<arch>.ziparchives for amd64 and arm64
with the same signedchecksums.txtand SBOMs;go installworks too. The binary is not
Authenticode-signed, so SmartScreen or an antivirus may warn about it.- The global
--config <path>(or--config=<path>) option onsetup,uninstall,
delete-account,mcp,mcp-headersandhook:session-startselects the config file for that
process. It wins overMEMRY_CONFIG, which wins over the default path. - Claude Code on Windows: setup registers memry as a stdio
memry mcpserver (no
headersHelper) and installs the SessionStart hook asmemry hook:session-start, somemry
must be on thePATH. Bothclaude.exeandclaude.cmdare supported. - On a legacy Windows console without color support, the agent question prints
Agents: <list> (pass --agents to choose).and keeps the defaults. memry uninstallandmemry delete-accountend withwinget uninstall memryon a WinGet
install, or the path of thememry.exeto delete, instead of the Homebrew hint on Windows.
Changed
- The home directory is
USERPROFILE, thenHOME, then two levels aboveLOCALAPPDATAon
Windows (HOME, thenUSERPROFILEon macOS and Linux). When none is set, memry fails with
"Could not find your home directory; set USERPROFILE or HOME." and exit code 1. On macOS and
Linux an unsetHOMEnow fails this way instead of writing to/.config. - On Windows,
MEMRY_EXECUTABLEmay only contain letters, digits and: / \ . _ -, and a
config path with",$, a backtick,%,!, a line break or a typographic quote is
refused for the hook, which is written with forward slashes.
v1.0.0
The CLI is rewritten in Go as a drop-in replacement for 0.7.0: the same config file
(~/.config/memry/config.json or MEMRY_CONFIG), environment variables, commands, flags,
messages and exit codes, and the same files written into your agents. brew upgrade memry is all
it takes; your login and agents keep working.
Changed
- memry is a single static binary for macOS and Linux (amd64 and arm64) with no PHP dependency.
Homebrew installs it without PHP, and it can also be installed with
go install github.com/mrtheroi/memry-cli/cmd/memry@latestor from the release archives, which
come withchecksums.txt(signed keyless with cosign) and an SBOM per archive. memry mcp, the local MCP server agents launch, starts more than ten times faster: about 6 ms
from process start to its first reply, against about 88 ms for 0.7.0 (on an Apple M2).- Responses are bounded:
memry mcpreads a server reply of at most 16 MiB and answers a longer
one with a-32603"The memry server returned a response that is too large." error, the Claude
Code SessionStart hook reads at most 1 MiB of context and prints nothing past it, and setup reads
responses of at most 1 MiB. - Removing memry's MCP servers from Claude Code follows a stricter rule: a
claude mcp remove
that fails without saying "No MCP server found" now fails that step ofmemry uninstall,
memry delete-accountandmemry setup(0.7.0 took every failure for "not registered"), so
memry never reports a removal that did not happen. Without theclaudeCLI
the removal is skipped with a warning instead of failing, since no Claude Code can run the
server; the SessionStart hook is still removed. memry setuprevokes the token of an email login when it stops without saving it (the agent
question is cancelled, or the config file cannot be read or written), so no valid token is left
behind. 0.7.0 left it valid. A token given with--tokenis never revoked.- The SessionStart hook prints the memry context as it is: 0.7.0 rendered or stripped
<info>-style tags and\<in memories. A hook input whosecwdis not a string prints
nothing, andgitgets 3 seconds (60 in 0.7.0) to find the repository root before the hook
falls back to thecwd. MEMRY_EXECUTABLEis used exactly as set: the Laravelenv()keywords (null,true,
(empty)) and quote stripping of 0.7.0 no longer apply to it.memry setupsaves each selected agent once, in display order; 0.7.0 saved duplicates.
Fixed
- A failed removal of memry from an agent is no longer forgotten.
memry setupkeeps a deselected
agent it could not be removed from in a newagents_to_removeconfig key and retries the
removal on every later setup until it succeeds (selecting the agent again installs it instead).
memry uninstallremoves memry from the agents first; when one fails, it keeps the login and
the agents still to clean up, with an emptyagentsselection, so running it again retries them,
instead of revoking the token and deleting the config anyway.memry delete-accountkeeps only
the agents still to clean up. memry setupunwires Claude Code from a login saved withoutagents(setups of 0.4.0 and
earlier, which only wired Claude Code) when it is not selected; 0.7.0 left it wired.- A config file that exists but cannot be read makes
memry setup,memry uninstalland
memry delete-accountfail with the reason, without overwriting or removing anything, where
0.7.0 stopped with an uncaught exception. memry mcpkeeps running where 0.7.0 stopped: with a saved URL it cannot request (-32603
"Could not reach the memry server."), a truncated reply (-32603), a request id too large for
a number (no error reply), or a config file that is valid JSON but not an object (not logged
in,-32000).- Agent config files are never overwritten with a lone newline: a JSON file holding a number too
large for a float (such as1e400) is left untouched and reported as one memry cannot edit
safely. An agent file that cannot be read or written fails that step with the system's error
instead of an uncaught exception.
Removed
- The PHP (PHAR) build and its PHP 8.3+ requirement.
v0.7.0
- Scripted self-hosted login:
MEMRY_TOKEN=<token> memry setup --url <your-server> --tokenlogs in without the hidden prompt, also with--no-interaction, so the token never shows up in the process list or your shell history. Setup removesMEMRY_TOKENfrom its environment right after reading it, so the agent CLIs it runs never see it. This is what the memry Community install script uses. - Fixed: requests that send your token or data (
memry mcp, the SessionStart hook, login, token revocation anddelete-account) no longer follow redirects; a redirect is treated as an error.
Upgrade with brew upgrade memry. See CHANGELOG.md.
v0.6.0
- Self-hosted login:
memry setup --url <your-server> --tokenlogs in with a token created by the admin of a self-hosted memry server, instead of the email login. The token is asked with a hidden prompt (--token=<value>is for scripts and lands in your shell history), checked against the server before it is saved, and only ever sent to the--urlyou give. - Fixed:
memry setupno longer ignores--url,--emailor--agentsgiven without a value, and rejects a--urlthat is not anhttp://orhttps://address.
Upgrade with brew upgrade memry. See CHANGELOG.md.