WhatsAppCommands

Personal account

Your WhatsApp chats, messages, contacts, search, files, polls and explicit sends.

Your WhatsApp chats, messages, contacts, search, files, polls and explicit sends.

Options for every command

OptionWhat it does
-V, --versionoutput the version number.
-v, --verbosemore detail in what is shown: -v ids, -vv everything we know. Default: 0.
--jsonmachine-readable output: one JSON value on stdout; --json=id,text keeps only those fields.
--jsonlmachine-readable output: one JSON object per line, for streaming and jq.
--quietdiagnostics off; a failure is still said.
--tracethe connection's own log lines on stderr — never message content.
--debugon a failure, its whole record — cause and stack — in place of the short line.
--timeout <duration>give up on the whole command after this — 30s, 2m, 500ms.
--offlineanswer from what was recorded and never connect; fails if nothing was.
--no-inputnever prompt or open interactive login; piped input remains available.
--max-input-bytes <bytes>maximum buffered input bytes (default: 16777216).
--max-output-bytes <bytes>maximum machine output bytes (default: 4194304; 0 disables).
--brieffound messages as reference, title, time, sender and excerpt only.
--fullfound messages with their whole text and every provider field.
--dry-runpreview parsed arguments and permissions before running the action.
--yesgo ahead without the question an ask level puts before a write.
--recordkeep this run — ids and timings, never message content.
--no-recorddo not keep it, whatever the configuration says.

Commands

wa chats

the account's chats

wa chats list

chats, newest first, archived ones included; the query is answered from the local store, so online, where the messenger filters nothing, it needs --offline

wa chats list [query] [options]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>how many to show.
--page <n>which page, starting at 1.
--allevery row, no paging.

wa chats events

who joined, left, was added or removed, and by whom — from the chat's service messages; the last 7 days unless the query names time

wa chats events <chat> [query]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
queryoptionalfield:value terms that narrow the list — the fields are below.

wa chats inspect

what an invite or public link leads to, without joining it

wa chats inspect <link>
ArgumentRequirementWhat it is
linkrequiredan invite link or a public one.

wa chats show

one chat: its kind, unread count, last message time and who is in it

wa chats show <chat>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa chats documents

the Google Docs and Drive documents linked in a chat's stored messages

wa chats documents list

every document link in the chat, newest first, and whether the store has it

wa chats documents list <chat> [query] [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>how many to show.
--page <n>which page, starting at 1.

wa chats mark-read

mark a chat read; the other side sees that you read it

Changes something in WhatsApp.

wa chats mark-read <chat> [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
OptionWhat it does
--until-id <id>only up to this message id; the newest by default.

wa chats tracking

the chats whose member lists serve fetches daily into the local store — chats members fetch --track adds one

wa chats tracking list

every tracked chat: since when, and its last member count

wa chats tracking list [query]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.

wa chats tracking show

one chat: whether it is tracked, and its member count per day for the last 30 days

wa chats tracking show <chat>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa chats tracking add

fetch this chat's member list daily while serve runs, from its next run

Changes something on this computer only.

wa chats tracking add <chat>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa chats tracking remove

stop fetching it daily; the history already kept stays

Changes something on this computer only.

wa chats tracking remove <chat>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa chats join

join a group or channel by its link; the others in it see that you joined

Changes something in WhatsApp.

wa chats join <link>
ArgumentRequirementWhat it is
linkrequiredan invite link, or a public one.

wa chats leave

leave a group or channel; the others in it see that you left

Changes something in WhatsApp.

wa chats leave <chat>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa chats folders

your chat folders

wa chats folders list

your chat folders, in the order the app shows them

wa chats folders list [query]
ArgumentRequirementWhat it is
queryoptionalfield:value terms; this list filters by none yet.

wa chats folders show

one chat folder, with the names of the chats in it

wa chats folders show <folder>
ArgumentRequirementWhat it is
folderrequiredthe folder's id, or its title exactly.

wa chats folders create

create a chat folder

Changes something in WhatsApp.

wa chats folders create <title> [options]
ArgumentRequirementWhat it is
titlerequiredthe folder's name; the app may refuse a long one.
OptionWhat it does
--chat <chat>a chat to put in it, by id or name; repeat it for more.

wa chats folders update

rename a folder, or change which chats are in it

Changes something in WhatsApp.

wa chats folders update <folder> [options]
ArgumentRequirementWhat it is
folderrequiredfolder id, or its title exactly.
OptionWhat it does
--title <title>a new name.
--add <chat>put a chat in it; repeat it for more.
--remove <chat>take a chat out of it, and off its excluded and pinned lists; repeat it for more.

wa chats folders delete

delete a folder; the chats in it stay

Changes something in WhatsApp.

wa chats folders delete <folder>
ArgumentRequirementWhat it is
folderrequiredfolder id, or its title exactly.

wa chats rules

what chats moderate judges a group by, kept in a file of this profile

wa chats rules show

the group's rules; the defaults, marked not saved, if it has none yet

wa chats rules show <chat>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa chats rules set

change one rule; the group's first change writes every rule with its default

Changes something on this computer only.

wa chats rules set <chat> <key> <value>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
keyrequiredone of: trusted, blocked, blockedNames, links, invites, forwards, blockedPeople, flood.messages, flood.minutes, flood.action, newAccount.days, newAccount.action, consent.delete, consent.remove.
valuerequiredthe new value; a list is comma-separated.

wa chats rules unset

put one rule back to its default

Changes something on this computer only.

wa chats rules unset <chat> <key>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
keyrequiredone of: trusted, blocked, blockedNames, links, invites, forwards, blockedPeople, flood.messages, flood.minutes, flood.action, newAccount.days, newAccount.action, consent.delete, consent.remove.

wa chats mute

stop notifications from a chat, for good or until a time; nobody in it is told

Changes something in WhatsApp.

wa chats mute <chat> [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
OptionWhat it does
--until <time>only until then: 2026-09-25T09:00 (local time), or 30m, 2h, 7d from now.

wa chats unmute

hear a muted chat again

Changes something in WhatsApp.

wa chats unmute <chat>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa chats archive

move a chat into the archive; nobody in it is told

Changes something in WhatsApp.

wa chats archive <chat>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa chats unarchive

bring an archived chat back to the chat list

Changes something in WhatsApp.

wa chats unarchive <chat>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa chats mark-unread

mark a chat unread on your own devices; nobody in it is told

Changes something in WhatsApp.

wa chats mark-unread <chat>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa chats clear

delete every message in a chat for this account; the others in it keep theirs

Changes something in WhatsApp.

wa chats clear <chat> [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
OptionWhat it does
--allow-dangerousgo ahead without the question an ask level puts before a deletion.

wa contacts

people this account has a one-to-one chat with

wa contacts list

people you have a one-to-one chat with; name: matches the name, your local alias or the @username, notes: your private notes about them

wa contacts list [query] [options]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>how many to show.
--page <n>which page, starting at 1.
--allevery row, no paging.
--order <recent|name>newest conversation first, or alphabetical. Default: recent.

wa contacts show

one person and the chats you share with them

wa contacts show <person> [options]
ArgumentRequirementWhat it is
personrequiredtheir id, @username, or part of their name.
OptionWhat it does
--with-notesinclude your private notes, subject to contacts.notes.list permission.

wa contacts info

everything the messenger says about one person — handles, flags, last seen, when they registered — and how many of their messages the store holds in each chat you share, the first and the last, and the earlier names and usernames the store saw them with

wa contacts info <person> [options]
ArgumentRequirementWhat it is
personrequiredtheir id, @username, or part of their name.
OptionWhat it does
--show-phoneprint the whole phone number.

wa contacts context

what the store holds about one person, in every messenger linked to them: shared chats, the last messages each way, their recent messages, where others mentioned them — never connects

wa contacts context <person> [options]
ArgumentRequirementWhat it is
personrequiredtheir id, @username, or part of their name.
OptionWhat it does
--limit <n>at most this many messages in each list; 10 if not given.
--since-time <time>nothing older than this ISO 8601 time, or 2h / 1d ago.
--chat <chat>a chat, by id or name; repeat it for more — then their newest messages in each, 20 unless --limit, short unless -v.

wa contacts prepare

before you talk to someone: what contacts context gives, plus the one-to-one chats where they wrote last, open tasks, accepted facts, your notes and their recent meetings, each with its reference; never connects

wa contacts prepare <person> [options]
ArgumentRequirementWhat it is
personrequiredtheir id, @username, or part of their name.
OptionWhat it does
--limit <n>at most this many messages, and items in each section; 10 if not given.
--since-time <time>no message or meeting older than this ISO 8601 time, or 2h / 1d ago.

wa contacts events

everything one person took part in, in every messenger linked to them — messages they wrote or were mentioned in, chats, mail, meetings, tasks — newest first, from the store; never connects

wa contacts events <person> [query] [options]
ArgumentRequirementWhat it is
personrequiredtheir id, @username, or part of their name.
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>at most this many; 50 if not given.
--cursor <cursor>go on from where the last page stopped; page.next gives it, with the same filters.

wa contacts check

whether one person looks like a bot, a fake or a spammer: their profile and what they wrote in the store — a hint, never a verdict; the public ban lists cover Telegram only, so nothing is sent

wa contacts check <person> [options]
ArgumentRequirementWhat it is
personrequiredtheir id, @username, or part of their name.
OptionWhat it does
--no-registriesdo not ask the public ban lists; nothing about them leaves this machine.

record that two people in the store are one person — the same name is never enough

Changes something on this computer only.

wa contacts link <person> <other>
ArgumentRequirementWhat it is
personrequiredtheir id, @username, or part of their name.
otherrequiredthe same in another messenger of the store, as : — max:Ana; me: it is you, as zoom: me.

undo contacts link for one identity: it is a person of its own again

Changes something on this computer only.

wa contacts unlink <person>
ArgumentRequirementWhat it is
personrequiredtheir id, @username, or part of their name; : for another messenger.

wa contacts lookup

who has this phone number — asks for it, or reads it from stdin; never an argument

wa contacts lookup

wa contacts sync

take the whole contact list from the messenger into the local store

Changes something on this computer only.

wa contacts sync

wa contacts aliases

a private local display name in the selected account

wa contacts aliases set

your own name for a person in this account; kept on this machine, never sent

Changes something on this computer only.

wa contacts aliases set <person> <alias>
ArgumentRequirementWhat it is
personrequiredthe person's id, reference or known name.
aliasrequiredthe private name to use for this person.

wa contacts aliases remove

drop your local name for a person; their own name shows again

Changes something on this computer only.

wa contacts aliases remove <person>
ArgumentRequirementWhat it is
personrequiredthe person's id, reference or known name.

wa contacts notes

your private notes on a stored contact, the same in every account that sees them

wa contacts notes list

every private note you keep on a person, oldest first

wa contacts notes list <person> [query]
ArgumentRequirementWhat it is
personrequiredthe person's id, reference or known name.
queryoptionalfield:value terms; this list filters by none yet.

wa contacts notes show

one private note on a person, with its revision for edit

wa contacts notes show <person> <id>
ArgumentRequirementWhat it is
personrequiredthe person's id, reference or known name.
idrequiredthe note id from contacts notes list.

wa contacts notes add

add a private note on a person from stdin or --text-file; never sent

Changes something on this computer only.

wa contacts notes add <person> [options]
ArgumentRequirementWhat it is
personrequiredthe person's id, reference or known name.
OptionWhat it does
--text-file <path>read note text from a file; omitted or - reads stdin.

wa contacts notes edit

replace a note's text; --revision must match the one you read

Changes something on this computer only.

wa contacts notes edit <person> <id> [options]
ArgumentRequirementWhat it is
personrequiredthe person's id, reference or known name.
idrequiredthe note id from contacts notes list.
OptionWhat it does
--text-file <path>read note text from a file; omitted or - reads stdin.
--revision <n>the revision you read before editing.

wa contacts notes remove

delete one private note on a person

Changes something on this computer only.

wa contacts notes remove <person> <id>
ArgumentRequirementWhat it is
personrequiredthe person's id, reference or known name.
idrequiredthe note id from contacts notes list.

wa contacts add

add a person to your contacts — contacts list still shows only people you have a dialog with

Changes something in WhatsApp.

wa contacts add <person>
ArgumentRequirementWhat it is
personrequiredperson id — contacts lookup finds one — or part of a known name.

wa contacts block

stop a person from writing to you — they need not be a contact

Changes something in WhatsApp.

wa contacts block <person>
ArgumentRequirementWhat it is
personrequiredperson id — contacts lookup finds one — or part of a known name.

wa contacts unblock

let a blocked person write to you again

Changes something in WhatsApp.

wa contacts unblock <person>
ArgumentRequirementWhat it is
personrequiredperson id — contacts lookup finds one — or part of a known name.

wa contacts rename

rename the contact in the messenger address book; use contacts alias for a private local name

Changes something in WhatsApp.

wa contacts rename <person> <first-name> [last-name]
ArgumentRequirementWhat it is
personrequiredperson id — contacts lookup finds one — or part of a known name.
first-namerequiredthe name you want to see for them.
last-nameoptionalthe last name you want to see for them.

wa contacts import

upload phone numbers and add the people the messenger has under them

Changes something in WhatsApp.

wa contacts import <file>
ArgumentRequirementWhat it is
filerequiredone person per line: number, then a comma, a tab or a semicolon, then the name.

wa messages

read and send messages

wa messages evidence

general chat context, newest first, with references, coverage and fingerprints for verification

wa messages evidence <chat> [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
OptionWhat it does
--limit <n>how many, 1–100.
--cursor <cursor>go on from where page.next says the last packet stopped.

wa messages list

a chat's messages, oldest to newest

wa messages list <chat> [query] [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
queryoptionalwhere to start: id<42, date>2026-10-01; starred:true keeps the ones you starred.
OptionWhat it does
--limit <n>how many.
--cursor <cursor>go on from where the last page stopped; page.next gives it.
--transcribeturn voice messages not heard yet into text — by the messenger where it can, else by a model on this machine; can take minutes.
--model <model>which downloaded speech model hears them, with --transcribe; models list shows them.

wa messages send

send a text message; without [text], the text is read from stdin

Changes something in WhatsApp.

wa messages send <chat> [text] [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
textoptionalthe message.
OptionWhat it does
--reply-to <message>answer this message, by its id in the same chat.
--operation-id <id>repeat a send whose outcome was unknown, without risking a second copy.
--no-previewno preview card for a link in the text.
--mdread this messenger's Markdown; see its formatting guide for supported syntax.
--file <file>attach a file; the text becomes its caption; repeat it for an album. Default: ``.
--photo <file>attach a .jpg, .png or .webp as a photo; the text becomes its caption; repeat it for an album. Default: ``.
--as-filesend each --file as a file to download, a video included.
--voice <file>send an Ogg Opus file as a voice message, alone, with no text.
--allow-any-filesend a file even from credential folders or this CLI's own folders.
--filename <name>the name others see for the --file, instead of its name on disk.
--sticker-file <file>send a .webp file as a sticker, alone, with no text.

wa messages show

one message, by its chat and id or by its msg: locator

wa messages show <chat> [message]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter); or a msg: locator, with no message id after it.
messageoptionalthe message id.

wa messages context

a message and what came either side of it, oldest first

wa messages context <chat> [message] [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter); or a msg: locator, with no message id after it.
messageoptionalthe message id.
OptionWhat it does
--threadthe stored reply chain and replies instead of time neighbours; falls back when no graph exists.
--thread-hops <n>at most this many links from the hit (default: 8).
--thread-messages <n>at most this many messages in each thread context (default: 50).
--thread-bytes <n>at most this many bytes of whole messages and links in each context (default: 65536).
--thread-within <duration>messages within this long either side of the hit (default: 1d).
--before-n <n>how many before it. Default: 5.
--after-n <n>how many after it. Default: 5.

wa messages download

save a message's photos, files, videos and voice notes to a folder — or a whole chat's with --all

Changes something on this computer only.

wa messages download <chat> [message] [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messageoptionalthe message id; left out with --all.
OptionWhat it does
--output-dir <dir>where to save them; created if missing. Default: ..
--allevery file of the chat, newest first; run it again to continue where it stopped.
--pause <duration>with --all, a pause between pages, to stay under the provider's limits. Default: 2s.
--extractread text layers from the files this download maps into the local content index.

wa messages transcribe

a voice message as text — by WhatsApp where it can, else by a model on this machine

wa messages transcribe <chat> <message> [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe id of a voice message.
OptionWhat it does
--localuse the model on this machine, never the messenger.
--model <model>which downloaded model; implies --local (models list).

wa messages edit

change the text of your own message; the other side may have read it already

Changes something in WhatsApp.

wa messages edit <chat> <message> [text] [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe id of your own message.
textoptionalthe new text; without it, read from stdin.
OptionWhat it does
--mdread this messenger's Markdown; see its formatting guide for supported syntax.

wa messages delete

delete messages for you only; with --for-everyone, for everyone in the chat

Changes something in WhatsApp.

wa messages delete <chat> <message> [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe message ids, by spaces or commas, at most 10.
OptionWhat it does
--for-everyonedelete for everyone in the chat, not only for you — they cannot get it back.
--allow-dangerousgo ahead without the question an ask level puts before a deletion.

wa messages forward

forward one message to another chat

Changes something in WhatsApp.

wa messages forward <chat> <message> [options]
ArgumentRequirementWhat it is
chatrequiredthe chat the message is in: a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe message id.
OptionWhat it does
--to <chat>where it goes: a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--operation-id <id>repeat a forward whose outcome was unknown, without risking a second copy.

wa messages pin

pin a message in a chat; its members are told

Changes something in WhatsApp.

wa messages pin <chat> <message> [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe message id.
OptionWhat it does
--expire-time <time>how long the pin lasts: 24h, 7d or 30d; 7d by default.

wa messages unpin

unpin a message in a chat

Changes something in WhatsApp.

wa messages unpin <chat> <message>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe message id.

wa messages star

star a message, so it is easy to find again; only you see the star

Changes something in WhatsApp.

wa messages star <chat> <message>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe message id.

wa messages unstar

take the star off a message

Changes something in WhatsApp.

wa messages unstar <chat> <message>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe message id.

a message permalink when supported, and its account-scoped locator

wa messages link <chat> [message]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter); or a msg: locator, with no message id after it.
messageoptionalthe message id.

wa messages comments

the comments received under a post, oldest to newest

wa messages comments <chat> <post> [query] [options]
ArgumentRequirementWhat it is
chatrequiredthe chat: a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
postrequiredthe post's message id in the chat.
queryoptionalwhere to start: id<42.
OptionWhat it does
--limit <n>how many.
--cursor <cursor>go on from where the last page stopped; page.next gives it.

why a message is in its conversation: each link it has, and the chain of answers back to the start

wa messages links <chat> <message>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe message id.

wa messages sync

bring a chat's history in the local store up to date, newest first; run it again to continue; --all syncs every chat

Changes something on this computer only.

wa messages sync [chat] [options]
ArgumentRequirementWhat it is
chatoptionala chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
OptionWhat it does
--allevery chat, most recently active first — what search needs; the last 90d unless --since-time or --last.
--limit <n>at most this many messages in this run, per chat with --all; 1000 if not given.
--page-size <n>how many messages one request asks for; 50 if not given.
--pause <duration>the least pause between pages, to stay under the provider's limits; each is up to twice that. Default: 2s.
--since-time <time>stop once it reaches messages older than this: ISO 8601, or 2h / 1d ago.
--last <n>stop once the newest n messages are held.
--catch-upprepare local search after this run; overrides search_catch_up.
--no-catch-upskip local preparation after this run.
--catch-up-chunks <n>at most this many local vector chunks.
--catch-up-messages <n>skip a graph rebuild larger than this many messages.
--catch-up-time <duration>local preparation time budget, 30s by default.
--backgroundrun as a job that outlives this command; store jobs show follows it.
--dry-runonly estimate how many messages, requests and minutes a full fetch would still take — from the store, no request.

wa reactions

react to messages

wa reactions add

put your reaction on a message; it replaces the one you had

Changes something in WhatsApp.

wa reactions add <chat> <message> <emoji>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe message id.
emojirequiredone emoji, for example 👍.

wa reactions remove

take your reaction off a message

Changes something in WhatsApp.

wa reactions remove <chat> <message>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe message id.

wa polls

read a poll, vote in it, create one

wa polls show

a poll and its answer ids, as the message carries it now

wa polls show <chat> <message>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe id of the message that carries the poll.

wa polls voters

who voted for what, newest first

wa polls voters <chat> <message> [query] [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe id of the message that carries the poll.
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>how many to show.
--page <n>which page, starting at 1.

wa polls vote

vote in a poll, or take your vote back; the others see it

Changes something in WhatsApp.

wa polls vote <chat> <message> [answers] [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequiredthe id of the message that carries the poll.
answersoptionalanswer ids, as polls show prints them.
OptionWhat it does
--retracttake your vote back.

wa polls create

send a poll to a chat, as a message of its own; everyone sees who voted for what

Changes something in WhatsApp.

wa polls create <chat> <question> <answers> [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
questionrequiredthe question.
answersrequiredtwo answers or more.
OptionWhat it does
--multiplepeople may pick several answers.
--operation-id <id>repeat a create whose outcome was unknown, without risking a second poll.

wa inbox

other people's unread messages in every chat; --new for what arrived since the last check

wa inbox [query] [options]
ArgumentRequirementWhat it is
queryoptionalfrom when: date>2h, date>2026-10-01; the saved point stays put.
OptionWhat it does
--newwhat arrived since the last check, each message once — for scheduled runs.
--limit <n>at most this many per chat, the newest.
--allmuted and archived chats too — left out unless they mention you or reply to you.
--transcribeturn voice messages not heard yet into text — by the messenger where it can, else by a model on this machine; can take minutes.
--model <model>which downloaded speech model hears them, with --transcribe; models list shows them.

wa review

every message, yours too, in chats that changed since a point — for reviewing who owes what

wa review [query] [options]
ArgumentRequirementWhat it is
queryoptionalwhere the last review ended and which chat: date>2h, chat:"Book club"; 3 days ago if no date.
OptionWhat it does
--unanswered [duration]only questions to you or a group's admins that nobody answered, asked at least this long ago — 4h, 1d; 24h if not given.
--allmuted and archived chats too — left out unless they mention you or reply to you.
--transcribeturn voice messages not heard yet into text — by the messenger where it can, else by a model on this machine; can take minutes.
--model <model>which downloaded speech model hears them, with --transcribe; models list shows them.
--newwhat changed since the last review --new, a point per chat — for scheduled runs.

wa conversations

the conversations inside a chat, found in the stored messages by replies, mentions and who wrote next

wa conversations list

a chat's conversations, the newest first: when, how many messages, how many people

wa conversations list <chat> [query] [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>how many.

wa conversations show

one conversation's messages, oldest first — by its id, or the one a message is in

wa conversations show <conversation> [message]
ArgumentRequirementWhat it is
conversationrequireda conversation id from conversations list; or a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter), with a message.
messageoptionala message id in that chat: show the conversation it is in.

the conversations nearest in meaning to the one a message is in, in every built chat, best first — from the vectors conversations embed stored; runs no model

wa conversations related <chat> <message> [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
messagerequireda message id in that chat.
OptionWhat it does
--limit <n>how many.
--model <model>local: a model id from models list (default: e5-small); remote: the provider's model.
--embedding-provider <provider>embedding provider: local or openai; flags override profile settings.
--base-url <url>a server with OpenAI's /v1/embeddings: Gemini, Jina, or Ollama and LM Studio on this machine.
--dims <n>remote: the vector size — needed with --base-url; shortens an OpenAI model's.

wa conversations status

how fresh each built chat's conversations and vectors are: messages the build has not seen, chunks with a current, stale or missing vector

wa conversations status [options]
OptionWhat it does
--chat <chat>only this chat: a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--model <model>local: a model id from models list (default: e5-small); remote: the provider's model.
--embedding-provider <provider>embedding provider: local or openai; flags override profile settings.
--base-url <url>a server with OpenAI's /v1/embeddings: Gemini, Jina, or Ollama and LM Studio on this machine.
--dims <n>remote: the vector size — needed with --base-url; shortens an OpenAI model's.

wa conversations batches

windows of a chat for your own AI agent to link: which earlier message each one answers

wa conversations batches status

how many messages still wait for an answer, in how many batches, and how much text

wa conversations batches status [options]
OptionWhat it does
--chat <chat>a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--size <n>messages to answer per batch, 10–200; 50 by default.

wa conversations batches show

the next window to answer, with the messages before it; message text goes to stdout only

wa conversations batches show [options]
OptionWhat it does
--chat <chat>a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--size <n>messages to answer per batch, 10–200; 50 by default.

message links and the conversations derived from them

find a chat's conversations in what the store holds, replacing the last build; without --chat, every chat that changed since its build and every group never built; never asks the messenger

Sends text to an outside service.

wa conversations links rebuild [options]
OptionWhat it does
--chat <chat>a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--analyzelink batches using the configured analysis provider; requires --chat and remembers consent for this chat/provider.
--analysis-provider <provider>analysis: agent, openai or anthropic.
--model <model>analysis model; overrides analysis_model.
--base-url <url>analysis API endpoint; overrides analysis_base_url.
--size <n>analysis answer messages per batch, 10–200; default 50.
--max-tokens <n>analysis input/output reservation cap per run; default 100000.
--max-chats <n>at most this many chats in one run; 20 if not given.

store your agent's answer to a batch, read as JSON from stdin: { "model", "answers": [{ "message", "parent", "confidence" }] }; all or nothing

Changes something on this computer only.

wa conversations links add [options]
OptionWhat it does
--batch <id>the batch id conversations batches show printed.

drop your agent's answers for a chat, or only one model's; messages are never touched

Changes something on this computer only.

wa conversations links clear [options]
OptionWhat it does
--chat <chat>a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--answer-model <model>only the stored answers this model gave.

wa conversations embeddings

stored conversation vectors

wa conversations embeddings status

how many chunks of a chat have a vector of the model, how many are left, and what is left costs

wa conversations embeddings status [options]
OptionWhat it does
--chat <chat>a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--model <model>local: a model id from models list (default: e5-small); remote: the provider's model.
--embedding-provider <provider>embedding provider: local or openai; flags override profile settings.
--base-url <url>a server with OpenAI's /v1/embeddings: Gemini, Jina, or Ollama and LM Studio on this machine.
--dims <n>remote: the vector size — needed with --base-url; shortens an OpenAI model's.

wa conversations embeddings clear

drop a chat's vectors, or only one model's; messages and conversations are never touched

Changes something on this computer only.

wa conversations embeddings clear [options]
OptionWhat it does
--chat <chat>a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--model <model>local: a model id from models list (default: e5-small); remote: the provider's model.
--embedding-provider <provider>embedding provider: local or openai; flags override profile settings.
--base-url <url>a server with OpenAI's /v1/embeddings: Gemini, Jina, or Ollama and LM Studio on this machine.
--dims <n>remote: the vector size — needed with --base-url; shortens an OpenAI model's.

wa conversations rebuild

build, then embed with the model on this machine, the chats that changed since their build and the group chats never built — or only --chat; bounded per run, so run it again for the rest; never asks the messenger, downloads no model and sends no text anywhere

Changes something on this computer only.

wa conversations rebuild [options]
OptionWhat it does
--chat <chat>a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--max-chats <n>at most this many chats in one run; 20 if not given.
--max-chunks <n>at most this many chunks embedded in one run; 2000 if not given.

wa conversations consents

remembered analysis permissions for this account's chats and provider endpoints

wa conversations consents list

which chats and provider endpoints you allowed to analyse, and when

wa conversations consents list [query]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.

wa conversations consents remove

forget analysis permissions so the next analysis asks again

Changes something on this computer only.

wa conversations consents remove [options]
OptionWhat it does
--chat <chat>revoke only this chat's consents; defaults to every chat.
--consent-provider <identity>exact provider identity from consents list; defaults to every provider.

wa conversations embed

compute a vector for each chunk of a chat's conversations for search by meaning — on this machine, or with --embedding-provider through a service and your key; resumes where it stopped; without --chat, every built chat with chunks left, on this machine only

Sends text to an outside service.

wa conversations embed [options]
OptionWhat it does
--chat <chat>a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--model <model>local: a model id from models list (default: e5-small); remote: the provider's model.
--embedding-provider <provider>embedding provider: local or openai; flags override profile settings.
--base-url <url>a server with OpenAI's /v1/embeddings: Gemini, Jina, or Ollama and LM Studio on this machine.
--dims <n>remote: the vector size — needed with --base-url; shortens an OpenAI model's.
--threads <n>local: threads in all (default: min(8, cores)).
--concurrency <n>remote: requests at once (default: 4).
--max-tokens <n>remote: stop before a run that could send more tokens than this.
--max-chats <n>at most this many chats in one run; 20 if not given.
--max-chunks <n>at most this many chunks embedded in one run; 2000 if not given, and no limit with --chat.

wa attachments

the files of stored messages: their text in the local store, where search finds it

wa attachments extract

read the text of downloaded files — text, PDF/DOCX text layers, ODT/ODS/XLSX/PPTX/EPUB — into the local store, where search finds them

Changes something on this computer only.

wa attachments extract [options]
OptionWhat it does
--chat <chat>only this chat's files; a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--from-dir <dir>match files in this nonrecursive directory; needs --chat.
--cursor <cursor>continue from the cursor returned by a bounded extraction.
--downloadfirst save the files no download saved yet, from the messenger, into --output-dir.
--output-dir <dir>with --download, where to save them; created if missing.
--limit <n>read at most this many files; run it again to continue.
--ocrexplicitly call models.ocr for bulk image and scanned-PDF text extraction.
--concurrency <n>remote: requests at once (default: 4).

wa attachments list

files of stored messages, newest first: where each was saved and whether its text is held — never the text

wa attachments list [query] [options]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>how many to show.
--page <n>which page, starting at 1.
--allevery row, no paging.

wa attachments show

read a bounded chunk of one retained attachment; JSON includes base64 bytes

wa attachments show <chat> [message] [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter); or a msg: locator alone.
messageoptionalthe message id.
OptionWhat it does
--attachment <n>file position from 1; required for several files.
--page <n>render one PDF page as PNG, from 1; optional unpdf/canvas, no OCR.
--offset-bytes <n>byte offset from 0.
--chunk-bytes <n>bytes to return, 1–1048576 (default524288).
--expected-fingerprint <hash>require the whole file SHA-256 from the preceding chunk.

wa attachments update

keep the text an agent read from a file — a scan, a photo — so search finds it; nothing is sent

Changes something on this computer only.

wa attachments update <chat> [message] [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter); or a msg: locator, with no message id after it.
messageoptionalthe message id.
OptionWhat it does
--attachment <n>which file of the message, from 1; needed when it has more than one.
--text-file <path>read the text from this file; - or none reads stdin.

wa attachments download

archive media from selected chats; verify and keep existing copies

Changes something on this computer only.

wa attachments download <dir> [options]
ArgumentRequirementWhat it is
dirrequiredarchive directory; created if missing.
OptionWhat it does
--chat <chat>only this chat; repeat for more; a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter). Default: ``.
--since-time <time>include messages from this ISO timestamp with a time zone.
--pause <duration>pause between history pages. Default: 2s.

wa attachments check

rehash all archived files without connecting to the messenger

wa attachments check <dir>
ArgumentRequirementWhat it is
dirrequiredarchive directory.

wa attachments jobs

daily media archive timers for this profile

wa attachments jobs install

install a Linux daily archive timer for this directory; starts nothing

Changes something on this computer only.

wa attachments jobs install <dir> [options]
ArgumentRequirementWhat it is
dirrequiredarchive directory, used with the same profile as install.
OptionWhat it does
--at <HH:mm>daily start time. Default: 03:00.
--timezone <zone>IANA time zone of the daily start time. Default: UTC.
--chat <chat>only this chat; repeat for more; a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter). Default: ``.
--since-time <time>include messages from this ISO timestamp with a time zone.

wa attachments jobs start

enable the installed archive timer at login and start its daily schedule

Changes something on this computer only.

wa attachments jobs start <dir>
ArgumentRequirementWhat it is
dirrequiredarchive directory, used with the same profile as install.

wa attachments jobs stop

disable the archive timer; a download already running finishes

Changes something on this computer only.

wa attachments jobs stop <dir>
ArgumentRequirementWhat it is
dirrequiredarchive directory, used with the same profile as install.

wa attachments jobs status

show whether this directory's archive timer is installed and active

wa attachments jobs status <dir>
ArgumentRequirementWhat it is
dirrequiredarchive directory, used with the same profile as install.

wa attachments jobs uninstall

remove this directory's stopped archive timer; keep archived files

Changes something on this computer only.

wa attachments jobs uninstall <dir>
ArgumentRequirementWhat it is
dirrequiredarchive directory, used with the same profile as install.

wa attachments move

move older images into another verified archive; remember their new locations

Changes something on this computer only.

wa attachments move <dir> <archive-dir> [options]
ArgumentRequirementWhat it is
dirrequiredsource media archive directory.
archive-dirrequireddestination archive directory; created if needed.
OptionWhat it does
--before-time <time>move images whose message date is before this ISO timestamp with zone.
--dry-runshow counts and bytes without moving files or creating the destination.

wa tags

your own labels on chats, people, messages and tasks, kept in the local store and never sent; tag: in a search finds them

wa tags rebuild

derive local group/channel tags from cached metadata using keyword rules

Changes something on this computer only.

wa tags rebuild [options]
OptionWhat it does
--chat <chat>a stored group/channel; repeat to select several. Default: ``.
--limit <n>process at most 1–500 chats. Default: 50.
--sync-firstread current descriptions from the messenger before classifying.
--dry-runpreview cached classification without changing the store.

wa tags add

put tags on one chat, person, message or task

Changes something on this computer only.

wa tags add <tag> [options]
ArgumentRequirementWhat it is
tagrequiredone or more tags: 1–32 letters a–z, digits and hyphens; upper case is lowered.
OptionWhat it does
--chat <chat>the chat to tag, or the chat of --message; a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--contact <person>the person to tag: their id, @username or name, as the local store knows them.
--message <message>the message to tag: its id in --chat, or a msg: locator alone.
--task <id>the task to tag: its id or key, as tasks list shows it.

wa tags remove

take tags off one chat, person, message or task

Changes something on this computer only.

wa tags remove <tag> [options]
ArgumentRequirementWhat it is
tagrequiredone or more tags: 1–32 letters a–z, digits and hyphens; upper case is lowered.
OptionWhat it does
--chat <chat>the chat to untag, or the chat of --message; a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--contact <person>the person to untag: their id, @username or name, as the local store knows them.
--message <message>the message to untag: its id in --chat, or a msg: locator alone.
--task <id>the task to untag: its id or key, as tasks list shows it.
--claim <claim>remove only this ownership claim: manual or auto.

wa tags list

what is tagged: this account's chats, messages and tasks, and the people of its messenger

wa tags list [query]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.

wa mentions

phones, e-mail, links, documents, names and addresses in stored messages

wa mentions list

this account's mentions matching the query, newest first; --new for those found since the last review

wa mentions list [query] [options]
ArgumentRequirementWhat it is
queryoptionalfields below; a bare word is a value, so a phone typed with 8 finds it written with +7.
OptionWhat it does
--limit <n>how many to show.
--page <n>which page, starting at 1.
--newundecided mentions found since the last --new run that showed them all; the first run shows every one.

wa mentions domains

the sites this account's links point to, most linked first, with chats and first and last time

wa mentions domains [query] [options]
ArgumentRequirementWhat it is
queryoptionalnarrows the links counted: the fields below; dismissed links are never counted.
OptionWhat it does
--limit <n>how many to show.
--page <n>which page, starting at 1.

wa mentions places

confirmed addresses, in every account, most mentioned first; mentions confirm <id> adds one

wa mentions places [options]
OptionWhat it does
--limit <n>how many to show.
--page <n>which page, starting at 1.

wa mentions show

one mention, the text around it, and how many other places hold its value

wa mentions show <id>
ArgumentRequirementWhat it is
idrequiredthe mention's id, from mentions list.

wa mentions confirm

say what a mention is: a phone's owner everywhere it is written, the stored document, who a name means, an address as a place

Changes something on this computer only.

wa mentions confirm <id> [person] [options]
ArgumentRequirementWhat it is
idrequiredthe mention's id, from mentions list.
personoptionalperson: or organization: that owns the phone or the e-mail address; person: a name means; a document or a street address needs none.
OptionWhat it does
--all-in-chata name: also every undecided place of the same name in its chat.
--as-ownerrecord it as yours although an agent's terminal runs the tool (AI_AGENT or CLAUDECODE set).

wa mentions reject

not a real mention: dismiss its value everywhere and on later syncs; a name only where it is

Changes something on this computer only.

wa mentions reject <id> [options]
ArgumentRequirementWhat it is
idrequiredthe mention's id, from mentions list.
OptionWhat it does
--all-in-chata name: also every undecided place of the same name in its chat.
--as-ownerrecord it as yours although an agent's terminal runs the tool (AI_AGENT or CLAUDECODE set).

wa mentions rebuild

find the mentions of every stored message again; decisions are kept

Changes something on this computer only.

wa mentions rebuild [kind]
ArgumentRequirementWhat it is
kindoptionalonly this kind: person-name after people were added or renamed. One of: phone, email, url, document, person-name, place.

wa images

search pictures by what they show, with a model on this machine

wa images embed

compute a vector for each picture the store knows and has none for — downloading it through the messenger, keeping only the vector; needs picture_search on in the profile and images models download clip-b32; resumes where it stopped

Changes something on this computer only.

wa images embed [options]
OptionWhat it does
--chat <chat>only this chat; a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--limit <n>at most this many pictures in one run; 100 if not given.

wa images models

models that read pictures, for images embed and picture search

wa images models list

the picture models, which are downloaded, and which one is the default

wa images models list [query]
ArgumentRequirementWhat it is
queryoptionalfield:value terms; this list filters by none yet.

wa images models download

download a picture model once, checked against the sha256 this version expects

Reads from an outside service.

wa images models download <model>
ArgumentRequirementWhat it is
modelrequireda model id from images models list.

wa metadata

cached group/channel descriptions for local automatic tags

wa metadata show

a stored chat's cached description, as automatic tags read it

wa metadata show [options]
OptionWhat it does
--chat <chat>a stored chat.

wa metadata sync

fetch group and channel descriptions again and cache them

Changes something on this computer only.

wa metadata sync [options]
OptionWhat it does
--chat <chat>stored group/channel; repeat for several. Default: ``.
--only-missingonly chats with no metadata yet; without --chat, every stored group/channel.
--limit <n>process at most 1–500 chats. Default: 50.

wa tasks

what waits on you — unanswered questions, mentions, requests, promises — kept in the local store; review and serve add them

wa tasks list

tasks, oldest first, with their message or note source

wa tasks list [query] [options]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>how many.

wa tasks add

add a task for a stored message or note — a promise, a request

Changes something on this computer only.

wa tasks add <message> [options]
ArgumentRequirementWhat it is
messagerequireda message locator, msg:///, or note:.
OptionWhat it does
--type <type>the task's type: question, request, mention or promise.
--category <name>what it is about, from the list tasks categories prints: money, documents, meeting, ….
--into <id>when tasks add listed tasks that may be the same job: link the message to this one instead of opening a task.
--newwhen tasks add listed tasks that may be the same job: open the task anyway.
--title <title>one line: the action and its object — send Alex the API token.
--description <text>the detail, in Markdown: who owes whom, done when, next step, keywords.
--due <time>when it must be done: an ISO 8601 time or 2h, 3d from now; none clears it.
--remind-time <time>when to look at it again: an ISO 8601 time or 2h, 3d from now; none clears it.
--assignee <person...>who does it: sender (whoever sent the task's message) or person:; none clears it. Leave it out when unsure: a task with no assignee is better than none.

wa tasks update

update a task's text, schedule, category, assignees, priority or parent; nothing reaches the messenger

Changes something on this computer only.

wa tasks update <task> [options]
ArgumentRequirementWhat it is
taskrequiredthe task's id or key, as tasks list shows it.
OptionWhat it does
--category <name>what it is about, from the list tasks categories prints: money, documents, meeting, …; a change is kept in the task's history.
--priority <n>priority from 0 (urgent) through 4 (low).
--parent <id>parent task in the same project; none clears it.
--title <title>one line: the action and its object — send Alex the API token.
--description <text>the detail, in Markdown: who owes whom, done when, next step, keywords.
--due <time>when it must be done: an ISO 8601 time or 2h, 3d from now; none clears it.
--remind-time <time>when to look at it again: an ISO 8601 time or 2h, 3d from now; none clears it.
--assignee <person...>who does it: sender (whoever sent the task's message) or person:; none clears it. Leave it out when unsure: a task with no assignee is better than none.

link a task to messages, chats, people or URLs — or to another task: task:

Changes something on this computer only.

wa tasks link <task> [targets] [options]
ArgumentRequirementWhat it is
taskrequiredthe task's id or key, as tasks list shows it.
targetsoptionalmsg: locators, person:, document:, note:, a URL; or task:, which links two project tasks.
OptionWhat it does
--chat <chat>a chat it concerns, repeatable; a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--kind <kind>related-to (default), evidence — it shows the task is real — or created-from; for task:, related-to, blocked-by, follow-up-of, duplicate-of or discovered-from.

wa tasks show

one task: its plan and everything linked to it

wa tasks show <task>
ArgumentRequirementWhat it is
taskrequiredthe task's id or key, as tasks list shows it.

tasks that may be the same job as this one, best first, each with a band — likely, maybe, different — and the reasons; merges nothing

wa tasks related <task> [options]
ArgumentRequirementWhat it is
taskrequiredthe task's id or key, as tasks list shows it.
OptionWhat it does
--limit <n>how many, at most 40 (default 10).

wa tasks duplicates

pairs of tasks that may be one job

wa tasks duplicates list

pairs of tasks a rule opened that may be one job, newest first, with score and reasons: merge, reject or defer each; decision:unsure lists the ones deferred to the owner

wa tasks duplicates list [query] [options]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>how many.

wa tasks duplicates reject

two tasks are not the same job: the pair leaves the list and is never offered again

Changes something on this computer only.

wa tasks duplicates reject <task> <other-task>
ArgumentRequirementWhat it is
taskrequiredthe task listed as the duplicate, by its id or key.
other-taskrequiredthe task it was paired with.

wa tasks duplicates defer

the fields and the text cannot tell: leave the pair to the owner, who lists it with decision:unsure

Changes something on this computer only.

wa tasks duplicates defer <task> <other-task>
ArgumentRequirementWhat it is
taskrequiredthe task listed as the duplicate, by its id or key.
other-taskrequiredthe task it was paired with.

wa tasks merge

one job seen twice: link every message of the duplicate to the task and close the duplicate dismissed, duplicate-of the task; nothing is deleted, and tasks unmerge undoes it

Changes something on this computer only.

wa tasks merge <task> [options]
ArgumentRequirementWhat it is
taskrequiredthe duplicate, by its id or key; it must be open.
OptionWhat it does
--into <id>the task that stays, by its id or key.

wa tasks unmerge

undo a merge: reopen the task and remove its duplicate-of relation; messages the merge linked stay linked

Changes something on this computer only.

wa tasks unmerge <task>
ArgumentRequirementWhat it is
taskrequiredthe merged task, by its id or key.

wa tasks agenda

what needs a look today, from the local store and without message text: tasks overdue, due or to check, chats where you owe an answer, chats where you wait for one, open tasks someone else does

wa tasks agenda [query] [options]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--due-within <duration>list tasks due within this: 30m, 2h, 1d (default 1d).
--unanswered <duration>list chats where someone else wrote last this long ago (default 1d).
--waiting <duration>list chats where you wrote last this long ago (default 7d).
--within <duration>leave out chats silent longer than this: they ended (default 30d).
--holder <name>who you are for claims: a session id or a chat id; default WIRECAT_HOLDER, else Claude Code's session, else the agent's name.

wa tasks categories

the categories a task takes, with what each means and the words a rule picks it by

wa tasks categories

wa tasks scan

the task rules over a chat's newest stored messages: in a one-to-one chat a question you did not answer, in a group only a question in reply to you and a mention of you, open a task, and your answer closes one; a channel opens none — for a chat the first sync left alone (config task_first_pass_per_chat). Lists what would open and changes nothing unless --yes; with --yes the duplicate check runs as on a sync. Reads only the local store

Changes something on this computer only.

wa tasks scan <chat> [options]
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
OptionWhat it does
--last <n>read the newest n stored messages of each chat (default 50, at most 1000).

wa tasks claim

take an open task so no other agent works it at once; the claim lapses by itself

Changes something on this computer only.

wa tasks claim <task> [options]
ArgumentRequirementWhat it is
taskrequiredthe task's id or key, as tasks list shows it.
OptionWhat it does
--lease <duration>how long the claim lasts: 30m, 2h (default 30m); claiming again extends it.
--holder <name>who you are for claims: a session id or a chat id; default WIRECAT_HOLDER, else Claude Code's session, else the agent's name.

wa tasks release

give back a task you claimed, before the claim lapses; the owner may release any

Changes something on this computer only.

wa tasks release <task> [options]
ArgumentRequirementWhat it is
taskrequiredthe task's id or key, as tasks list shows it.
OptionWhat it does
--holder <name>who you are for claims: a session id or a chat id; default WIRECAT_HOLDER, else Claude Code's session, else the agent's name.

wa tasks close

close a task: done, or dismissed when it needs no answer. An agent (AI_AGENT or CLAUDECODE set) states its --certainty; below config task_agent_close_min, or with task_agent_close off, the task stays open and the close waits on the owner, who confirms it with tasks close or refuses it with tasks reject. A closed task stays closed, unless tasks unmerge reopens a merged one

Changes something on this computer only.

wa tasks close <task> [options]
ArgumentRequirementWhat it is
taskrequiredthe task's id or key, as tasks list shows it.
OptionWhat it does
--as <state>how it is closed: done, or dismissed — it needs no answer; the owner may leave it out to confirm an agent's close.
--reason <text>why, kept with the task — no-reply-needed, for example.
--certainty <n>an agent's: how sure it is, 0 to 1, that the task needs nothing more.
--as-ownerclose it as yours although an agent's terminal runs the tool (AI_AGENT or CLAUDECODE set).

wa tasks reject

refuse the close an agent suggested: the task stays open and leaves close:suggested; the agent may close it again

Changes something on this computer only.

wa tasks reject <task> [options]
ArgumentRequirementWhat it is
taskrequiredthe task's id or key, as tasks list shows it.
OptionWhat it does
--as-ownerrefuse it as yours although an agent's terminal runs the tool (AI_AGENT or CLAUDECODE set).

find things by text: one resource when you know it (messages, notes), or search all across messages and notes; for mail, the separate memo CLI: memo search mail

wa search all

search messenger messages and notes in the local store, and a meeting account's transcripts when --source names one — best match first; not mail (the separate memo CLI searches it: memo search mail), tasks, people, memories or projects. Use it when you do not know where something was written; search messages or notes reads one kind with all its fields

wa search all <query> [options]
ArgumentRequirementWhat it is
queryrequiredstrict Lucene query: words, "phrases", AND/OR/NOT, field groups and date ranges.
OptionWhat it does
--only <resources>only these resources, separated by commas: messages, notes; meetings when --source names a meeting account.
--source <accounts>only these accounts, separated by commas: provider:account as a hit shows it, a provider, a kind or group:; each resource reads the ones of its kind, and meetings only when it names one.
--max-meetings <n>how many of the meeting account's meetings to look through, newest first, or all for every one (default 100).
--limit <n>how many.
--page <n>which page, starting at 1.
--exactbare words and quotes match their exact form only, as exact:word does.
--timezone <zone>the IANA timezone for calendar date boundaries.

wa search messages

search messenger messages in the local store — what was read, fetched or kept by serve; --discover searches the archive only

wa search messages [query] [options]
ArgumentRequirementWhat it is
queryoptionalstrict Lucene query: words, "phrases", AND/OR/NOT, field groups and date ranges; with --saved, more words AND-ed to it.
OptionWhat it does
--threadthe stored reply chain and replies instead of time neighbours; falls back when no graph exists.
--thread-hops <n>at most this many links from the hit (default: 8).
--thread-messages <n>at most this many messages in each thread context (default: 50).
--thread-bytes <n>at most this many bytes of whole messages and links in each context (default: 65536).
--thread-within <duration>messages within this long either side of the hit (default: 1d).
--source <accounts>every account of this messenger held in the store; personal, bots or all — the same as in: in the query; or a list: group:work,telegram:Alice.
--limit <n>how many.
--page <n>which page, starting at 1.
--newestnewest first instead of best first.
--exactbare words and quotes match their exact form only, as exact:word does; text: still matches every form.
--context <n>messages before and after each hit; 2 in the terminal, 0 otherwise.
--discoverfind partial lexical matches and eligible replies in the local archive; results are evidence, not confirmed answers.
--timezone <zone>the IANA timezone for calendar date boundaries.
--saved <name|id>run a saved search or an earlier run; options typed here replace its own.

wa search notes

search the notes — written in memo, or imported from a notes folder — by words and, with the local text model, by meaning; each hit says which found it and what it links to

wa search notes <query> [options]
ArgumentRequirementWhat it is
queryrequiredstrict Lucene query: words, "phrases", AND/OR/NOT, tag:, source:internal (written in memo) or source:file (from a notes folder) and date ranges.
OptionWhat it does
--source <accounts>only these notes accounts, separated by commas: notes:internal for notes written in memo, notes: as a hit shows it, notes, documents or group:.
--filter <query>a query every hit must also match; it does not change the search by meaning.
--limit <n>how many.
--page <n>which page, starting at 1.
--exactwords as written only; meaning is not searched.
--timezone <zone>the IANA timezone for calendar date boundaries.

wa search conversations

the conversations nearest to a query in meaning and in words, best first, in one chat or every one — meaning after conversations embed; runs on this machine

Reads from an outside service.

wa search conversations <query> [options]
ArgumentRequirementWhat it is
queryrequiredwhat to look for, in your own words, in any language the model reads.
OptionWhat it does
--model <model>local: a model id from models list (default: e5-small); remote: the provider's model.
--embedding-provider <provider>embedding provider: local or openai; flags override profile settings.
--base-url <url>a server with OpenAI's /v1/embeddings: Gemini, Jina, or Ollama and LM Studio on this machine.
--dims <n>remote: the vector size — needed with --base-url; shortens an OpenAI model's.
--max-chats <n>at most this many chats in one run; 20 if not given.
--max-chunks <n>at most this many chunks embedded in one run; 2000 if not given.
--chat <chat>only this chat: a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--since-time <time>only those still going at this ISO 8601 time, or 30m / 2h / 1d ago, or later.
--filter <query>strict Lucene filter: any message in a conversation must match; does not change the meaning query.
--source <accounts>accounts to search: personal, bots, all, a provider, or a list like group:work,telegram:Alice,email:[email protected]; defaults to the active account.
--timezone <zone>IANA timezone for filter dates; system timezone by default.
--limit <n>how many.
--catch-upfirst build and embed, on this machine, the chats in scope that changed or were never built — within --max-chats and --max-chunks.

wa searches

saved searches and the history of search messages and stats messages show, kept in the local store; --saved runs one

wa searches create

save a search under a name without running it; search messages --saved runs it

Changes something on this computer only.

wa searches create <name> [query] [options]
ArgumentRequirementWhat it is
namerequiredup to 64 letters a–z, digits and hyphens, not only digits.
queryoptionalthe query, as for search messages; none matches every stored message.
OptionWhat it does
--chat <chat>only this chat — the same as chat: in the query; a chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).
--source <accounts>every account of this messenger held in the store; personal, bots or all — the same as in: in the query; or a list: group:work,telegram:Alice,email:[email protected].
--limit <n>how many.
--newestnewest first instead of best first.
--exactbare words and quotes match their exact form only, as exact:word does; text: still matches every form.
--context <n>messages before and after each hit.
--timezone <zone>the IANA timezone for calendar date boundaries.
--by <group>count by chat, sender, day or hour for stats messages show --saved.
--selection <json>save the resolved parent ranking query and options from a drilldown.
--replaceoverwrite a saved search of the same name.

wa searches show

one saved search or earlier run: its query, options and how often it ran

wa searches show <name|id>
ArgumentRequirementWhat it is
name|idrequireda saved search's name, or the id of any row of searches history.

wa searches list

the saved searches, by name

wa searches list [query]
ArgumentRequirementWhat it is
queryoptionalfield:value terms; this list filters by none yet.

wa searches history

the searches and counts that ran, newest first — saved ones included; never their results

wa searches history [options]
OptionWhat it does
--limit <n>how many to show.
--page <n>which page, starting at 1.
--allevery row, no paging.

wa searches delete

delete a saved search, or one run from the history

Changes something on this computer only.

wa searches delete <name|id>
ArgumentRequirementWhat it is
name|idrequireda saved search's name, or the id of any row of searches history.

wa searches clear

empty the history; saved searches stay

Changes something on this computer only.

wa searches clear

wa recipients

the chats this profile may send to, when the list is on

wa recipients list

the chats on the list; empty and off until the first add

wa recipients list [query]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.

wa recipients add

allow sending to this chat; the first add turns the list on

Changes something on this computer only.

wa recipients add <chat>
ArgumentRequirementWhat it is
chatrequireda chat: its name, or its WhatsApp id (…@lid, …@g.us, …@newsletter).

wa recipients remove

stop allowing this chat; the list stays on

Changes something on this computer only.

wa recipients remove <chat>
ArgumentRequirementWhat it is
chatrequiredchat id, or the title as the list shows it.

wa recipients clear

delete the list, which turns it off: this profile may send to any chat again

Changes something on this computer only.

wa recipients clear

wa sends

every attempt to send from this profile — never the text

wa sends list

attempts to send, newest first: sent, refused, failed, or not known

wa sends list [query] [options]
ArgumentRequirementWhat it is
queryoptionalfield:value terms that narrow the list — the fields are below.
OptionWhat it does
--limit <n>how many to show.
--page <n>which page, starting at 1.
--allevery row, no paging.

Exit codes

Branch on the code, not on the text: the text can change, the code does not.

CodeWhen
0it worked
2validation_error
3configuration_error
4authentication_error
5permission_error
6not_found
7confirmation_required
8rate_limited
9timeout
10network_error
11provider_error
12provider_unavailable
13invalid_response
14outcome_unknown
130cancelled
1anything else

0 and only 0 means the operation was done. 14 (outcome_unknown) means a message may have gone: repeat it only with the same --operation-id, which WhatsApp uses to drop a second copy.