Groups
Review WhatsApp groups, members and questions before choosing an administrative action.
Use this page when you take part in WhatsApp groups, or run one, and want help keeping up: find questions nobody answered, sum up a week, keep a list of what waits on you and count the group's activity. Reading marks nothing read, so checking on a group does not tell its members you looked.
Some words on this page:
- A group id ends in
@g.us([email protected]).wa personal chats list 'kind:group' --offlinelists your groups with their ids; a group's name works too when only one chat has it. - An admin is a member with rights to manage the group. Some commands count only your answers and the admins'.
- The local store is the copy of messages
wakeeps on this computer, filled by the phone's history push and byserve. Reports and tasks use it, so they see only what arrived. - A task is something that waits on you, such as a question nobody answered.
waopens and closes tasks in the local store.
What you can do
| Task | Command |
|---|---|
| Find questions that wait for an answer | wa personal review --unanswered |
| Sum up a week: decisions, promises, open questions | wa personal review 'date>7d' |
| Keep a list of what waits on you | wa personal tasks list |
| See the week's activity | wa personal stats chats show --offline |
| See one group and who is in it | wa personal chats show, chats members list |
| Delete a message for everyone, as the group's admin | wa personal messages delete --for-everyone |
| Make a group, join one by its link, or leave | wa personal chats create, chats join, chats leave |
| Add or remove people, make someone an admin | wa personal chats members add, chats admins add |
| Rename a group, set or remove its photo, or change who may add people | wa personal chats update |
| Show or replace the invite link | wa personal chats links show, chats links reset |
| Let in or turn away people who asked to join | wa personal chats requests list, chats requests confirm |
| Follow a channel, read its posts, or unfollow it | wa personal chats join, messages sync, chats leave (channels) |
| Post to a channel you run | wa personal messages send (channels) |
Every option is in the command reference.
With an agent
Your AI agent (for example Claude Code, Codex, Cursor or Gemini CLI) can run these checks for you. An agent with a terminal needs the wa skill; an agent in an app without a terminal needs the MCP server.
The names, messages and results below are fictional.
Who is waiting for an answer
Your request:
What in the hiking group has been waiting for an answer for more than four hours?
Command:
wa personal review 'chat:[email protected]' --unanswered 4h --jsonExample agent answer:
2 questions are waiting for an answer.
Person Question Waiting Lena What time do we leave on Saturday? 6 hours Sam Are the tents shared? 12 hours
A question mark outside a link, or a reply to you or an admin, opens a question; your or an admin's reply closes it.
A weekly report
Your request:
Summarise the week in the hiking group.
Command:
wa personal review 'chat:[email protected] date>7d' --jsonExample agent answer:
Decided: leave at 7:00 from the station.
Committed: Lena — food; Sam — tents.
Still open: who brings the cooking pot.
On a schedule
No agent is needed for a list of open questions: it is an ordinary command, and it reads only the store.
0 9,21 * * * wa personal review 'chat:[email protected]' --unanswered --json >> ~/hiking-open.jsonl 2>> ~/wa-cron.logcron starts jobs with an almost empty environment: see running on a schedule.
What waits on you
review and serve keep a list of tasks in the local store: what you have to do, and what someone owes you. A task
points at its message and never copies it. Where a rule opens one:
- A one-to-one chat: a question you did not answer, and a message that mentions you.
- A group: only a question that replies to your message, and a mention of you. Other people's questions are not your tasks.
- A channel or the chat with yourself: nothing.
Your answer closes the task. To record every question in a group, whoever it is for, tag the group. In a tagged group a direct reply from any member other than the one who asked also closes the question; a later message that does not reply to it closes nothing:
wa personal tags add --chat [email protected] watch-tasksThe first fill of the store opens no tasks from your history; later messages do. To turn a group's history into tasks, list what would open, then open it:
wa personal tasks scan [email protected]
wa personal tasks scan [email protected] --last 300 --yesWhen someone promises you something, keep it as their task, and list what others owe you. The message locator, the
task key PR-4 and the other ids in this section are made up; take real ones from a search, a list or tasks list:
wa personal tasks add msg:whatsapp/100000000000009%40lid/120363000000000001%40g.us/3EB0A1B2C3D4E5F6A7B8 \
--type promise --category other --assignee sender
wa personal tasks list "assignee:any state:open"--assignee sender is whoever sent the message; --assignee person:<id> names someone else, and
tasks update <task> --assignee none clears it. A task with no assignee is fine: better than a missed one.
See what waits on you, oldest first, then only questions and mentions in one group:
wa personal tasks list state:open
wa personal tasks list 'chat:[email protected] (kind:question OR kind:mention)'Add what the rules cannot see, such as a promise you made, by the message's locator from a search or a list:
wa personal tasks add msg:whatsapp/100000000000009%40lid/120363000000000001%40g.us/3EB0A1B2C3D4E5F6A7B8 \
--type promise --category othertasks categories lists the categories a task can take. If the task may be the same job as an open one, tasks add
refuses with exit code 2 and lists the candidates; repeat with --into <task> or --new.
Close a task that needs no answer:
wa personal tasks close PR-4 --as dismissed --reason no-reply-neededAn AI agent that closes a task states how sure it is with --certainty, from 0 to 1. Below the store's threshold
(task_agent_close_min, 0.8 by default) the task stays open with a close suggestion. tasks list close:suggested
finds them; confirm one with tasks close <task>, or refuse it with tasks reject <task>.
The group's numbers
wa personal stats chats show [email protected] --offline
wa personal stats chats show [email protected] --offline --since-time 30d --by weekMessages, active members, replies, reactions and questions answered, counted from the local store for a period,
7 days unless --since-time says otherwise. A count covers only what the store holds; a stretch before wa linked
is not there, so a number is a minimum, never a proof of silence. members counts the joins and leaves the store
holds, the ones chats events lists; for a group the store holds none of yet, the JSON leaves members out, sets
complete to false and says so in missing. chats members history shows who joined or left between member
fetches.
One group and who is in it
wa personal chats show [email protected]
wa personal chats members list [email protected]chats show gives the group's kind, unread count, last message time and its members as the local store holds them;
it never connects. chats members list asks WhatsApp who is in the group now; while serve runs, it goes through
serve (one connection per device).
Deleting for everyone
wa personal messages delete [email protected] 3EB0AAAAAAAAAAAAAAAAAA --for-everyoneIn a group you administer, this removes another member's message for everyone; anywhere, it removes your own. It
needs the message in the local store, since WhatsApp addresses a message by its sender too. It asks first by
default, and it cannot be undone. Without --for-everyone it is for you only: wa asks WhatsApp to take the
message from all your devices and leave it with the others.
Run a group
wa personal chats create "Hiking" 100000000000002@lid
wa personal chats members add [email protected] 100000000000002@lid
wa personal chats members remove [email protected] 100000000000003@lid
wa personal chats admins add [email protected] 100000000000002@lid
wa personal chats update [email protected] --title "Hiking club" --only-admins-add on --join-approval on
wa personal chats update [email protected] --only-admins-send on --disappear-after 7d
wa personal chats update [email protected] --photo club.jpg
wa personal chats update [email protected] --remove-photo
wa personal chats links show [email protected]
wa personal chats links reset [email protected]
wa personal chats requests list [email protected]
wa personal chats requests confirm [email protected] 100000000000004@lid
wa personal chats join https://chat.whatsapp.com/AAAAAAAAAAAAAAAAAAAAAA
wa personal chats leave [email protected]- The members see each of these, so each goes through the profile's permissions and hourly
limit, like a send, and connects (through
servewhile it runs). - Only people you know are added.
chats createandmembers addtake someone in your address book or that you have written to, and refuse anyone else: WhatsApp bans accounts that add strangers. - An admin has every right. WhatsApp has one kind of admin, so
admins addtakes no--canand gives them all. - One invite link. A group has one link;
link resetreplaces it, and the old one stops working. Only admins see it. - Settings.
updatechanges the name, the description,--only-admins-add,--join-approval,--only-admins-send,--only-admins-edit-infoand--disappear-after. Messages disappear after 24h, 7d or 90d, the times WhatsApp offers; any other is refused, andoffkeeps them. - The photo.
update --phototakes a square JPEG of 190 to 720 pixels a side, the only kind WhatsApp takes as a group photo.wadoes not convert or crop one: export it as a JPEG first. A file not named.jpgor.jpeg, or a PNG or WebP renamed to one, is refused before connecting.update --remove-phototakes the photo away, and is refused beside--photo. The photo is set or removed first: if the title, description or a setting given with it then fails, the error says so. - A group's name works too, as in every command that names a chat:
walooks it up in the local store first, then in WhatsApp's chat list. Part of the name is enough, case does not matter, and an emoji matches with or without the invisible mark a copied one often carries ("Семья❤️" finds "Семья❤"). A name that matches several chats is refused; name one by its…@g.usid. Every connection saves the groups you are in to the local store, sochats list kind:groupshows them onceserve,watchor any command that connects has run. joinon a group that approves who joins answersrequested: true; you are in once an admin lets you in.leavemarks the group left in the local store, andwa personal store clear --leftlists it. Ajointhat gets in takes the mark off, and so does being added back whileserveorwatchruns.
With --offline, chats members list shows the members stored before instead of asking WhatsApp.
chats members fetch keeps the member list in the local store. chats members history shows what the fetches
recorded: everyone present at the first fetch, then who joined or left at each later one.
wa personal chats events [email protected] --offline
wa personal chats events [email protected] 'time>=30d' --jsonchats events lists who joined, left, was added, removed, promoted or demoted, and each new title, oldest first,
for 7 days unless the query names a time (time>=30d). It answers from the local store and never connects. wa
keeps there what the phone pushes with a group's history (the service messages it shows in the chat) and, while
wa serve or wa watch runs, each change as it happens; a change seen both ways is kept once. Someone who came in
or went out on their own joins or leaves; anyone else's doing adds or removes them. A change from before the
link that the phone did not push is not there, so an empty list does not prove nobody joined.
An agent connected over the MCP server can run the same commands, as far as the profile's permissions allow.
Communities
A WhatsApp community holds several groups under one name. In wa a community is a group too, with
provider_metadata.community: true, and a group in a community names it in parent_chat_id. Both come with what
WhatsApp says about the group, so they show in the answers of chats update, chats create and chats join. The
local store keeps them from the history the phone pushes, so chats list and chats show show them too. When a
group is added to a community while wa is connected, the store names the community; when it is taken out, the store
stops naming it. Either way it keeps the group's title and counts.
Listing a community's groups, and adding a group to a community or taking it out, are done on the phone.