Changelog
Read Memo release notes: new capabilities, changes and fixes.
Notable changes to @wirecat/cli-memo, one section per version, newest
first. Versions follow semantic versioning; before 1.0.0 a minor release may change
the API.
0.21.0 — 11.10.2026
Fixed
- The hint after a search without the meaning model names the command that downloads it,
tg models text download e5-small; it named amemo modelscommand that does not exist. memo projects contextfinds a project by its key (HRB) orproject:<id>as well as its id; a key gave an empty answer.
Changed — may break scripts
memo search mailandmemo search messagesshow each hit as a reference, then who and when, then an excerpt. For an email the second line names To, Cc and its Gmail labels, and the third its subject; the whole body comes back with--full.--jsongives each emailemail(from, to, cc, bcc and reply-to with theirperson:references, labels, thread, read and starred) and anexcerptinstead of the wholetext;--briefkeeps only reference, title, time, sender, excerpt and score. Mail search no longer answerscoverage. Built on the shared library 0.251.0.
Fixed
- Mail import no longer files Cc addresses under To. Mail imported before keeps them in both; search shows them in Cc only.
0.20.0 — 11.10.2026
Added
- The guides in
docs/follow the wirecat.dev tool layout: an overview, daily use, how memo works, recipes, troubleshooting, memories and a generated command reference (pnpm generate), written for readers who do not use a terminal every day. memo commands [path] --jsonlists the command tree and its options, as tg, max and drive do, so documentation and agents can check a command before running it.- Every command has a description in
--help, including organizations, projects, relationships, reminders and task listing.
0.19.0 — 11.10.2026
Added
memo mcptells a connecting agent when to save: what happened is a fact (facts_add), what it concluded is a memory (memories_add), something to do isactions_propose, each with evidence, and only what will matter later.memo search …andmemo notes showend their--helpwith the same hint formemo facts addandmemo memories add.
Changed
- Mail meaning search finds the email that holds the answer. Mail is cut into pieces email by email again, with re-quoted text, greetings and signatures still left out; before, a piece spanned several emails of a thread and a hit named the newest of them. The first index run after the upgrade cuts stored mail again once and embeds it again. Built on the shared library 0.249.0.
Fixed
- Release preparation stops if another session advances main while its version PR or local checks are running. Review the new main before retrying; stale preparation cannot merge a redundant version heading or dispatch an unverified source.
0.18.0 — 11.10.2026
Fixed
- The source changelog has one 0.17.0 heading after release preparation raced with its feature merge. Vocabulary commands and the shared-store pin remain the same as 0.17.0.
0.17.0 — 11.10.2026
Added
-
Owner-reviewed label creation:
memo vocabulary createrequires the current preflight creation fingerprint. Similar labels are checked in the shared store, including implicit tagging; stale approvals fail. Exact aliases continue to reuse their canonical label.vocabulary auditdiscovers existing lexical synonyms with explicit work/output budgets and incomplete-scan reporting; it never accepts or merges them. -
Mail search filters by read and starred state, and takes
label:.memo search mailacceptsis:unread,is:read,is:starredandlabel:(the same asmailbox:), anddate:>=2026-01-01as well asdate>=2026-01-01. Built on the shared library 0.246.0.
0.16.0 — 11.10.2026
Added
-
Project meetings and task dependencies.
projects meetings list|linkrequires the exact meeting provider/account and accepts a canonical project key or explicit alias.tasks link|unlinkmanages reviewed blocked-by/follow-up-of/related-to edges;relations,readinessandreadyexpose the shared task graph. Ready discovery claims nothing. MCPtask_relations,task_readinessandtasks_readyare read-only. Built on the actual published shared library 0.242.0; new project keys use 3–4 characters and existing keys remain valid. -
Canonical vocabulary discovery and reviewed aliases.
vocabulary list|resolve|preflightshows stable project/tag/topic IDs, explicit aliases and likely lexical label duplicates. Ownervocabulary aliases add|removerequires the current preview fingerprint. Read-only MCP toolsvocabulary_list,vocabulary_resolveandvocabulary_preflightlet an agent reuse the catalog; they cannot accept or change aliases.facts_addcan attach its proposed fact to a canonical project.
0.15.0 — 11.10.2026
Changed — may break scripts
memo mail <account> importreplacesmemo mail import --account <name>; the old form is gone.<account>is the name inmail.accountsand is required even when one account is configured: memo no longer falls back to the first. A missing or unknown name is an error that lists the configured ones. A mail import now takes the lockmemo importand the timer take, so the two never run at once.memo importstill imports every account.bin/mail-password <account>requires the account; without it the script prints its usage and the configured names instead of assuminggmail.
Added
memo search mail --account <address>searches one mail account; without it, every mail account. An address the store does not hold isnot_foundand lists the ones it does.
0.14.1 — 11.10.2026
Fixed
- npm installs the packages side by side again. Built on
@wirecat/cli-messaging0.241.0, whose@wirecat/cli-meetings0.4.2 accepts cli-core 0.20.0. With 0.240.0, npm put cli-messaging in a nested folder with a second copy of cli-core.
0.14.0 — 11.10.2026
Changed — may break scripts
- On macOS memo keeps its files where it does on Linux:
~/.config/cli-memo,~/.local/share/cli-memoand~/.cache/cli-memoinstead of~/Library/…. The first run moves the old folders there, with the shared store. While a messengerserveor an MCP server is running it prints one warning, keeps using the old folders for that run and tries again next time. Linux and Windows are unchanged. Built on@wirecat/cli-messaging0.240.0.
0.13.0 — 11.10.2026
Added
mail.maxBodyCharsandmail.maxAttachmentCharsin the config set how much of an email body (default 1,000,000 characters) and of one attachment's text (default 200,000)memo mail importkeeps.memo facts add|list|show|accept|reverse: what happened, with its evidence. A fact is a fact, statement, question, decision or promise. Yours is accepted at once; an agent's waits as proposed. A decision with--supersedesends the one it replaces once accepted;reverseends an accepted decision.memo mcpoffersfacts_add,facts_listandfacts_show.- Tasks of your own in a project.
memo tasks add --project <key> --title <title> --type bug|feature|choremakes one with no source.--priority,--parent,--descriptionand--assigneework on any task;memo tasks update <id>changes them,memo tasks list --project <key>lists a project's tasks andmemo tasks closecloses one.
Changed — may break scripts
- memo runs on
@wirecat/cli-messaging0.238.0, store version 2: upgrading a store moves its kind-fact memories into facts and copies task assignments; older memo builds still open it. - Mail is searched by meaning thread by thread, without re-quoted text: the first
memo mail importafter the upgrade cuts every thread again and embeds the mail once more. Search by words is unchanged. - A memory's kind
factis gone: what happened is a fact now (memo facts). The store moved existing kind-fact memories into facts, evidence and links included. memo tasks assigntakes--role(assignee, reviewer or watcher) and no--provider/--account. It writes the task's assignees, whichmemo contextreads, instead of anassigned-torelation.
0.12.0 — 11.10.2026
Added
memo notes add --meeting <id> --provider <provider> --account <account>writes a note about a meeting. It takes the meeting's store id, asmemo tags add --meetingdoes, and adds the samemeeting:<account id>/<meeting id>subject beside any--about. A meeting the account does not hold isnot_found.
Changed — may break scripts
- memo runs on
@wirecat/cli-messaging0.235.0. - Read and starred stay current.
memo mail importupdates read and starred on mail it stored earlier, as the mailbox shows them now, without reading the mail again. - Generic IMAP accounts get flags. Their messages record read and flagged, and a flagged one carries the
Starredlabel, as a starred Gmail message does, sosearch mail mailbox:starredfinds both. - Long emails are kept whole. A body was cut at 20,000 characters; it is now kept up to 1,000,000, and the store cuts it into pieces for search.
0.11.0 — 11.10.2026
Changed — may break scripts
- memo runs on
@wirecat/cli-messaging0.233.0. An imported email's attachments are now found by meaning too: their text is cut into pieces and embedded after import, and tg/maxsearch conversationsanswer a match in an attachment with its email.
0.10.0 — 11.10.2026
Added
- Gmail labels and stars reach the store.
memo mail importreads each message's labels (X-GM-LABELS) and flags: every label, Inbox, Important and Sent included, becomes a label mailbox with a plain name, a starred message also getsStarred, and new mail records read and starred.search mail mailbox:importantfinds them. Labels are replaced on every run, as Gmail's list is whole; folders keep the per-scan rule, and only folders decide whether missing mail was deleted. A label line the import cannot read leaves that message's labels as they were.
0.9.0 — 11.10.2026
Added
- A meeting can be tagged and written about.
memo tags add|remove --meeting <id>with--providerand--accountlabels a stored meeting,memo tags list --type meetinglists them, andmemo notes add --about meeting:<account id>/<meeting id>writes a note about one. memo memories—add,list,show,search,confirmandstalefor what you and agents concluded, each with its evidence and apersonalorworkscope. Yours are confirmed at once; an agent's wait as proposed.memo actions—propose,list,show,approveandreject. Approving makes the action a task in the account that would act; nothing is sent.memo agents log— what agents did through the MCP servers, by tool and agent, never the arguments.memo mcp— an MCP server on stdio withmemories_add|list|show|search,actions_propose|list|showandagents_log. What an agent writes is authored bymemo-mcpand waits for you; every call is logged.
Changed — may break scripts
- memo runs on
@wirecat/cli-messaging0.232.0.search mailtakesto:,cc:,bcc:(a person, asfrom:),subject:(words of the subject alone) andmailbox:(a folder or Gmail label). searchandsearch allhelp say whatsearch alldoes not read — people, memories, projects, organizations and decisions — and send a kind you know to its own search.
0.8.0 — 11.10.2026
Changed — may break scripts
- Mail goes into the store's mail tables.
memo mail importsaves each email through cli-messaging'sstore.mail(0.231.0): threads, emails, To/CC/BCC, folders as mailboxes, and attachment text on its email. Ids stay the same, so amsg:email/…reference, tag or note made before still resolves. Mail saved as messages by earlier imports stays searchable and keeps its old deletion rule; it is read again into the mail tables as the window covers it. While both exist,deletedcounts stored rows: a mail deleted at the source counts its email, its older message and any older attachment entry. An attachment is no longer its own entry: the import report dropsattachments[].locatorId, and a note on an attachment entry stays on that older entry. - Tags, tasks and person context read the mail tables.
tags listkeeps a tag on an email,tasks addtakes an email'smsg:email/…source, and a person's tasks and context include their mail. - Mail is embedded from the mail tables. After saving,
memo mail importembeds new mail's chunks (cli-messaging'sembedMail), so tg and maxsearch conversationskeep finding mail by meaning.--no-embedand a missing model behave as before.
0.7.1 — 11.10.2026
Fixed
- Mail search, evidence bundles and person context also read email stored in dedicated mail tables. Older mail imports remain supported; search results list each email locator once.
0.7.0 — 11.10.2026
Changed
- memo runs on
@wirecat/cli-messaging0.226.0. The store prunes its growing logs on open, at most once a day: agent tool calls older than 90 days are deleted, and a handled bot update older than 30 days loses its payload. Upgrade tg-cli and max-cli first, as all three share the store. organizations add --kind,projects add --typeand--scopetake their allowed values from the store and refuse any other value before the store is opened, naming the allowed ones.
Fixed
memo --versionprints the package's version. It printed 0.4.0 since 0.5.0: the number lived in a file the release did not update. A test now fails when that file andpackage.jsondisagree.- Package references, documentation and fixtures use the WireCat namespace throughout.
Security
- The old
messages.dbis deleted when the store opens at its default path: the unencrypted file used beforewirecat.db, with its-waland-shm. One line on stderr names it. It is kept whenMESSAGING_STOREis set, and while another process still has it open.
0.6.0 — 10.10.2026
Changed — may break callers
- memo runs on
@wirecat/cli-messaging0.218.0 and@wirecat/cli-core0.19.3, the store inwirecat.db. The oldmessages.dbis left as it is and not read: import notes and mail again, and runmemo folders add <path>for each folder, since a folder id from the old store is not in the new one. memo entitiesis replaced bymemo organizationsandmemo projects(add,list,context), as the store now keeps them apart;tags --entityis--organizationor--project, andentity:references are not found. An organization is a company, team, family or community; a project has a key.- A file in a notes folder is
document:<id>, a note written in memonote:<id>.notes show,tags --note,tasks addand--abouttake either; a bare id is a written note's. Search evidence and links name a file's note bydocument:.
Security
- Fast secret checks remain on PRs; source, production dependency and workflow security checks run before publication. Automatic Socket checks are disabled.
0.5.1 — 10.10.2026
Changed
- The project is now licensed under Apache License 2.0. See
LICENSEfor the terms.
0.5.0 — 10.10.2026
Changed — may break callers
- The package is
@wirecat/cli-memoand its repository belongs to WireCatLabs. Use this package for installations and updates.
0.4.0 — 09.10.2026
Changed — may break scripts
- The shared store drops the copies kept for older versions (store version 28, cli-messaging 0.212.0). Notes, relations and entities written before the notes refactor are copied into their new tables once, during the upgrade. After it, an older tg, max or memo refuses the store with "upgrade this tool" — update all three together.
0.3.0 — 09.10.2026
Changed — may break scripts
-
Search commands now live under
search all|messages|mail|notes, using the shared services and ranking.search allreturns typed source hits and a separatetaskslist for linked open work. The oldmemo search <query>andmemo notes searchpaths are removed without aliases. Usesearch notes --typeinstead ofnotes search --source;--alland--note-textare no longer needed. -
Pin shared SDK 0.211.0 alongside Telegram/MAX. Legacy copied note task sources move to native note IDs without changing task IDs, account scope or closed states. Upgrade the coordinated tools together before opening the shared owner store.
Fixed
search allfinds messages on a store that has not yet recorded the account it runs as, and asks the messenger's server the waysearch messagesdoes.search mailwith no mail imported answers an empty result with a note. Notes found by meaning must be as similar as conversations already have to be, so a rare word no longer returns every note.
Added
tasks add note:<id> --provider <provider> --account <account>creates tasks from native file or internal notes. Lists resolve the current note preview; deleted notes leave tasks intact. Confirmed note-about-person links and explicit assignments contribute to person context. Unified search includes tasks whose note matches. Repeated creation reuses the existing task of the same kind, including closed tasks.
0.2.1 — 08.10.2026
- Pin cli-messaging 0.205.0 to match the coordinated Telegram/MAX release. Native notes, links and source references retain the same schema and behavior.
0.2.0 — 08.10.2026
Notes are their own records in the shared store (cli-messaging 0.202.0, store versions 25–27), no longer
messages of a notes provider.
-
memo folders add|attach|list: a folder of notes gets its id from the store, and each computer's config binds it to that computer's path and format (obsidianormarkdown).listshows folders the store has from another computer. A folder imported before store version 25 moves its path into the config on the first run. Import refuses a folder with no id instead of inventing one. -
Import writes notes, their links and their file tags. A link to a note the folder has once is stored by the note's id; a name no note has stays as written and resolves to a person as soon as one by that name, alias or username exists. A moved file keeps its id, links and tags. A tag you added stays when the file stops stating it. What a computer last saw of each file is kept in memo's state folder, and only a changed file is opened — also to look for
memo-id, which marks a file memo exported and keeps it out of the import. -
memo notes add|edit|remove|list|show|exportfor notes written here about messages, chats, contacts, people, entities, tasks and other notes;--export [dir]andnotes.exportwrite them as files that carrymemo-idand are never overwritten once edited. -
memo notes about,memo contextandmemo noteread saved links: notes about a person, notes linking them, notes linking a note about them. A full name found in a note's plain text is no longer listed as a guess. The oldpeople-notes.jsonmoves into the store asaboutlinks, once. -
memo notes searchruns on the shared notes index: words and stems, the messages' query language,--exact,--source,--folderby path or id, and by meaning when e5-small is downloaded —memo importandmemo notes importembed the notes (--no-embed,notes.embed: false). Each hit says what found it (foundBy), and a person a found note links is named.memo search --allcovers notes;--note-textalso retrieves authored note text. -
Entities and relationships are the owner's:
entitiesandrelationships add|list|remove|confirmno longer take--provider/--account.memo tags add --note <id>labels a note;--person,--entityand--taskneed no account.--folder <id> [--path <subfolder>]labels every note under a folder or subfolder, replacing--chatwith--provider notes.tags listsays whether a note's tag came from its file. -
Notes are read through a format:
obsidianadds inline#tagsand reads[label](path.md)links besides[[wiki links]];markdownreads plain Markdown links. Links toperson:,msg:,note:,entity:,task:,chat:andcontact:references are recognised in both. -
Open tasks and explicit document-task assignments in person context; tasks add/list/close reuse the shared task service. Multiple matching accounts require explicit selection.
-
CSV/TSV, PDF, DOCX, XLSX, ODT/ODS, PPTX and EPUB ingestion through shared extraction, with optional-engine and unsupported format reporting, file/text bounds, content hashes and page/row/cell provenance.
-
Configurable Gmail/IMAP folder coverage, stable Message-ID identities, attachment text sources and bounded resumable email indexing. Partial listings never prove deletion; changed folder scopes skip deletion.
-
Canonical-person/task/entity labels, manual organization/family/project relationships, selected-source unified retrieval, and cited evidence bundles/model proposals with explicit remote consent.
-
Durable local task reminders with lease receipts, acknowledgement, stale-edit checks, snooze/cancel and automatic cancellation when a task closes. No outbound delivery or source-system mutation.
-
memo tags add|remove|list: local labels on imported notes, emails, messages and folders/threads, addressed by note/folder IDs, message locators or an exact provider/account/chat. Labels are case-insensitive, shared with tg/MAX and preserve source files and mailboxes; deleted sources are hidden from listing. -
memo notes search --tag <tag>filters word and semantic results using shared tag eligibility, including labels on the note's folder.
0.1.2 — 07.10.2026
- cli-messaging 0.166.0, matching the final tg and max release pins, including protected conversation preparation during search and history fetch.
0.1.1 — 07.10.2026
-
cli-messaging 0.164.0, matching tg and max source: person context now finds private dialogs with no recorded members, restoring the last message each way and direct messages in existing Telegram stores.
-
The release workflow can dry-run a version already on npm, so packaging can be checked between releases. Publishing still refuses an existing version.
0.1.0 — 06.10.2026
- The
memocommand, with--versionand--help. memo notes about <name>(wasmemo notes <name>): notes about a person, notes that link them, and weak plain-name mentions, from Markdown folders given with--folderornotes.foldersin the config.memo mail import: a Gmail account's All Mail into the shared message store through Himalaya, read only; Gmail thread and message ids, resumable with--max, and deletions at the source drop the stored text.memo note: the note about a person, kept per person of the shared store. Linking identities istg|max contacts link, not a memo command.memo notes import: Markdown and text notes into the shared store as providernotes; edits kept as revisions, deleted notes lose their text.memo notes search <text>: notes by their words, with the people they link and the known people whose full name they mention (a guess).notes.ignorein the config and--ignore: files, folders or globs never read or stored.memo import: notes and mail in one run, incremental — notes keep a manifest of size, change time and content hash in the store, so unchanged files are not read and identical ones not saved. A lock stops two runs at once; a failing source does not stop the others.memo auto on [--every 5m] | off | status: a systemd user timer formemo import. The config'sauto: { enabled, every }is the source; the timer follows a hand edit at its next run.memo context <messenger>:<person>: one answer about a person — cli-messaging's person context across every linked identity (mail included), the note about them and the notes naming them, with what was not read and why. Needs cli-messaging 0.150.0, which tg and max pin.- Notes are embedded for search by meaning:
memo importandmemo notes importbuild each changed folder and embed new chunks with the local e5-small model, at most 600 a run, resuming next run;--no-embedandnotes.embed: falseskip it.memo notes searchranks by meaning and words together (byon each hit) and falls back to words when the model is missing. - cli-messaging 0.153.0, as tg and max pin: a long note or mail is embedded in overlapping pieces, whole.