One word, one meaning, in every WireCat CLI: tg, max, memo, drive and zm. This page lists the words for commands, resources and JSON keys, the one meaning of each, the words it replaces, and where a CLI uses it differently today.
- STANDARD.md binds all five CLIs. The verb, resource and flag meanings live in cli-base's vocabulary and are shown in its tables; this page repeats a word only to show where it applies and where it is broken.
- Each CLI starts from its own lint baseline (
lint/baseline/), which only shrinks; each repository fixes its violations in its own change. - A rule changes in STANDARD first, in its own pull request, and the owner approves new wording. This page follows.
- "Current violations" were found on 2026-10-12 from
<cli> commands --json(tg 0.51.0, max 0.48.0, memo and drive at their installed builds) and by reading the source. Nothing was renamed. Renames come in later pull requests, one per decision.
The last word of a command. Columns: CLIs where the verb applies today; Not the synonyms it replaces; Violations the command paths that use another word for this meaning, or this word for another meaning.
| Verb | One meaning | CLIs | Not | Violations |
|---|---|---|---|---|
list |
show many | all | ls |
drive shared-drives (a list with no verb) |
show |
show one | all | get, view |
tg/max metadata get, max bot comments get, drive documents get, files get, comments get, permissions get, revisions get |
search |
find by text, under search <resource> |
all | find, query |
drive search (root leaf, no resource), memo/drive memories search (a resource's own search leaf), tg/max runs search |
create / delete |
make or destroy a thing | all | mkdir, trash, rm |
drive files mkdir, files trash (see NEED-991) |
add / remove |
put an existing thing into a set, or take it out | all | rm, attach |
tg/max contacts alias rm; memo folders attach |
update |
change a thing's fields | all | plan, edit for fields |
tg/max tasks plan (sets title, due date) |
set / unset |
one named key | all | configure |
drive models configure |
sync |
bring the local store up to date from the source: only what changed, or the whole list where the source cannot say; --all for every chat or source (owner, 2026-10-12) |
all | import for a catch-up, refresh, store fetch |
tg/max store fetch (to become messages sync), memo import and notes import (to become memo sync), memo mail <account> import, tg/max metadata refresh, stats messages counters refresh; tg/max contacts sync help says "forget where the last sync left off and take the whole list again" — its help still describes a full re-read of the list, not only what changed |
fetch |
one bounded pull of one named thing from the messenger, not a catch-up | tg, max | refresh, get |
tg/max store fetch (a catch-up, see sync); bot store fetch (STANDARD rule 10 wants the personal name, bot messages sync); --refresh options (contacts context, search conversations) |
import |
bring a file or list the user gives into the store or the messenger, once | all | — | memo import, notes import (a repeatable catch-up: sync) |
export |
write from the store to a file | all | — | none |
extract |
read the text inside files already on this machine into the store | tg, max | — | drive memories extract (sends text to a model and proposes memories: another meaning) |
link / unlink |
record that two identities are one person, or undo it | tg, max | — | tasks link (a task and what it concerns; with a task: target, task to task), memo projects meetings link, drive people link (a Google user to a person); tg/max messages link (a view: the permalink) |
confirm |
the owner accepts what an agent proposed | memo, drive | accept, approve |
memo facts accept, actions approve vs relationships confirm, memories confirm (three words, one meaning) |
reject |
the owner refuses what an agent proposed | memo | decline, deny |
none in memo; tg/max chats requests decline, replies consents deny are the messenger's own words |
start / stop |
a running process or a login session | all | on / off, enable |
tg/max replies on / off, memo auto on / off, tg topics enable |
pause / resume |
stop and restart what a running process does, without stopping it | tg, max | snooze for a process |
none |
check |
verify, change nothing | tg, max | audit, preflight |
tg/max chats members audit, memo vocabulary audit, vocabulary preflight |
cancel |
stop a job or a pending thing | all | — | none |
status |
how a thing stands right now | all | readiness |
memo tasks readiness |
info |
facts about a singular thing itself | tg, max | — | none |
move / copy |
a file in the source | drive | — | none; not in STANDARD (drive only) |
restore |
put a backup back, or take a thing out of the trash | tg, max, drive | — | drive files restore (out of the trash: a second meaning) |
rebuild |
compute again, from what the store holds, what the tool derives from it, keeping the owner's decisions | tg, max | — | none; tg/max store reindex is not in STANDARD's list |
Verbs used but not in STANDARD's list, by CLI. Each needs a row above or a rename.
- tg/max:
accept,allow,answer,audit,build,decline,decrypt,deny,enable,exec,get,grant,mute,unmute,next,off,on,order,plan,press,put,refresh,reindex,retry,revoke,rm,run,send-as. - memo:
about,accept,ack,approve,ask,assign,attach,audit,poll,preflight,propose,ready,readiness,reject,relations,resolve,reverse,schedule,snooze,stale,suggest,on,off. - drive:
configure,copy,get,mkdir,move,trash,stale,extract(another meaning).
| Term | One meaning | Not | Used wrongly |
|---|---|---|---|
| store (local store) | the one SQLite database tg, max, memo and drive share on this machine | archive, cache, message database, shared store | memo help says "shared store"; drive help says "cached sources"; max keeps a per-profile cache, a different thing (STANDARD rule 7) |
| message | one post in a messenger chat, or one email | item, post (except a channel post), hit | none |
| attachment | a file of a stored message | file, media | max chats media (the messenger's media list: allowed as the messenger's word) |
| file text | the text read from an attachment and kept in the store, found by content: |
extracted text, OCR text | attachments text set is the right place; no conflict found |
| transcript | the text of speech: a voice message or a meeting recording | — | tg/max store export --format markdown calls a day-by-day export "a transcript" |
| note | text the owner writes, or a file from a notes folder | memo, annotation, document | tg/max contacts notes are notes about a contact (same table, fine); drive help says "local shared memos about a source document" |
| document | a file imported from Google Drive or Docs | source, note | drive help says "imported sources" for documents; drive keeps documents as note: rows (drive-cli/src/store.ts:111), so one thing has two names |
| folder | open (NEED-988): three different things share the word | — | tg chats folders (Telegram chat folders), memo folders (notes folders), drive folders (Google Drive folders chosen to sync) |
| tag | a label the owner puts on a thing; a topic is a tag kind only the owner makes |
label | memo help says "labels" for tags; tg tags auto makes tags from rules |
| topic | open (NEED-989): two meanings | — | tg topics, search topics (forum topics in a group); memo vocabulary create (a kind of tag) |
| project | the owner's work unit with a task key | entity | entity: references still parse for old files |
| organization | a company, team, family or community | entity | none |
| person | one human, across every messenger and mail (person:<uid>) |
user, people | tg bot help: "user: for a person", "the person's user id"; drive people |
| contact | one identity in a messenger's contact list | user | none found beyond the above |
| identity | one way to reach a person or an organization: an account in a messenger or mailbox, an e-mail address, a phone (contact:<provider>/<id>) |
contact (when meaning the account), user | memo note <identity> takes <messenger>:<name> |
| key document | open (NEED-990): no CLI, help text or doc defines it today | — | — |
| fact | what happened: a statement, question, decision or promise, with evidence | memory | none |
| memory | what an agent concluded, with evidence and scope | fact, summary | none |
| relationship | a confirmed or suggested link between a person, organization or project | relation, link | memo tasks relations (task to task); drive links (links between references) |
| mention | a phone, e-mail address, link, document or known person's name found in one place of a stored text, normalized; found → linked or dismissed | extraction, entity, link (links joins two stored records) |
none |
| reference | the typed name of any stored thing: msg:, chat:, contact:, note:, document:, person:, task:, fact:, memory: (src/domain/references.ts) |
ref, id | see Output keys |
| locator | the reference of one message: msg:<provider>/<account>/<chat>/<message> only (src/domain/locator.ts) |
ref | memo search puts note: and task: references in locator (cli-memo/src/search/command.ts:82,123) |
| profile | the name of one login of this CLI on this machine; chosen, never assumed | account (for this meaning) | memo mail <account>, --account; drive help "account profiles"; tg/max contacts profile (a person's card: another meaning) |
| account | the messenger or mail account behind a profile; also provider/account in the store key |
profile | tg/max account list lists profiles |
| source | where stored data came from: a messenger, a mailbox, a notes folder, Google Drive | — | memo tags add "Put labels on one source" (means one stored thing); drive "imported sources" (means documents) |
| search hit | one result of a search | result, match, item | JSON key is items in some searches and hits in others; see below |
| context | open (NEED-987): two meanings | — | entity card: memo context, projects context, organizations context, drive documents context, tg/max contacts context; messages around one message: tg/max messages context |
Read from source, not run.
| Kind | Canonical key | Deviations |
|---|---|---|
| A list | { items, page, limit, hasMore } (STANDARD, Output rule 1) |
search notes answers { query, by, hits, hasMore, nextOffset, linked } (src/cli/messenger/search-command.ts:196, src/services/notes-search.ts:232); drive search the same (drive-cli/src/store.ts:109); drive lists answer { items } alone (drive-cli/src/program.ts:243,313); memo and drive commands --json add items beside commands (drive-cli/src/program.ts:527) |
| A message | locator (msg: only) |
none in tg/max |
| Any other stored thing | open (NEED-986): ref or reference |
ref: search notes hits, memo tasks list (cli-memo/src/tasks/command.ts:171), drive documents show (drive-cli/src/program.ts:326); reference: drive documents list (drive-cli/src/program.ts:315); locator holding a non-message: memo search |
| A command to run next | a field that names its purpose, such as next |
chats show and the members audit answer fetch: "<cli> store fetch <chat>" (src/services/chats.ts:269,310): the key is a verb |
| A page cursor | page and hasMore |
searches add nextOffset; MCP search_notes says it returns hits (src/mcp/tools/search-tools.ts:152) |
store fetchbecomesmessages sync.syncmeans "bring the local store up to date from the source, only what changed;--allfor every chat or source".memo importbecomesmemo sync. drivesyncalready has this meaning: it keeps a change cursor and reads everything only on the first run.fetchstays for a bounded pull of one named thing (chats members fetch). STANDARD's verb list says so. The renames come in their own pull requests; the violation rows above change when they merge.
- NEED-985 · May
store fetchandmemo importkeep working for three releases after the rename, against STANDARD rule 9 ("No aliases")? Proposed wording for rule 9: "store fetchandmemo importkeep working for three releases after their rename, hidden from help, print one line on stderr that names the new path, and then stop working. This is the only exception." Saved background jobs andschedule commandrecords do not need it: they are rewritten to the new path when they run. What needs it: memo's installed timer (it runsmemo import; without the old name it fails before it can rewrite its own unit, and with it the unit is rewritten tomemo syncon its first run), hand-written scripts, and agents' skills such as tg-cli'sskills/tg-cli/SKILL.md. - NEED-986 · A reference key:
reforreferencefor a non-message thing?refis shorter and used more;referencematches the domain type and the plain-word rule for options. - NEED-987 ·
context: keep it for the entity card (memo, drive,contacts context) and renamemessages context(for examplemessages around), or the reverse? - NEED-988 ·
folders: three meanings (Telegram chat folders, notes folders, Drive folders). Keepfoldersfor the messenger's and prefix the others (notes folders,drive folders), or accept one word per CLI? - NEED-989 ·
topic: Telegram forum topics and memo's topic tags. Rename memo's kind (for examplesubject), or keep both? - NEED-990 · key document: what does it mean, and which CLI has it?
- NEED-991 · drive file verbs: keep Google's
trash,mkdir,move,copy,get(they mirror the Drive API), or map them todelete,create,show? - NEED-992 · One permission for syncing:
messages sync(likestore fetchbefore it) is checked against the read keymessages, but--sync-firston a search is the write keymessages.sync-first. A read-only profile can sync directly but not through--sync-first. Make both reads, or both writes?