> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xysq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# WhatsApp

> Link your phone number and text your memory. xysq answers from your vault, keeps what is worth keeping, and shows you which messages it kept.

WhatsApp is the one connection with nothing to configure. You link a number once, and from then on you talk to xysq in a normal chat: ask it what you told it, tell it something new, send it a document. It answers every message, and it saves the ones worth saving.

It writes to your **personal** context graph, the same one your AI tools read through [MCP](/connect/overview). Tell it something from your phone and your coding agent has it in the next session.

<Steps>
  <Step title="Open Connect in the app">
    Go to [app.xysq.ai](https://app.xysq.ai), open **Connect**, and pick **WhatsApp**. Click **Add a number**.
  </Step>

  <Step title="Send the code from your phone">
    xysq shows you a short message that looks like `link-Xk2p...` and an **Open WhatsApp** button. The button opens WhatsApp with that message already filled in, so all you do is hit send. You can also copy it and send it yourself from the phone you want to link.

    The code is single-use and expires in **30 minutes**. If it lapses, come back and generate another.
  </Step>

  <Step title="Watch it flip to linked">
    Once the message arrives, xysq replies `All set, this number is linked. Ask me anything you've told me before.` The Connect page notices on its own and shows the number as linked.

    If the code has expired or was already used, you get `That link code didn't work. Grab a fresh one from Connect in xysq.` instead. Generate a new one and resend.
  </Step>
</Steps>

## Start from your phone instead

You do not need an account first. Text the xysq number from the phone you want to link (the **WA me** button on [xysq.ai](https://xysq.ai) opens WhatsApp with the message already typed), and xysq replies with who it is and a link. Sign in or sign up on that link, and the number is linked the moment your email is known. Switch back to WhatsApp: your agent has already sent its first message.

Two things to know:

* The link lasts **30 minutes**. If it lapses, text the number again and you get a fresh one.
* A number belongs to one account. If yours is linked elsewhere, xysq says so; unlink it there first (**Connect → WhatsApp**), then text again.

If you finish setting up on the web afterwards, xysq congratulates you on WhatsApp and asks a question or two to fill in your profile. Say what fits and it lands on your Profile page; correct it any time, there or in the chat.

## What happens to each message

Every message gets an answer. What happens *after* the answer is the part worth understanding, because xysq does not keep everything you type.

| You send                                                    | It does                                                                                                                                                                   |
| ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| A question ("what did I decide about pricing?")             | Answers from your vault. Questions are not kept: the useful thing is the answer, not a record of you asking                                                               |
| A statement worth keeping ("we moved the launch to 12 Nov") | Answers, then reacts to that exact message with ✅. The tick is the receipt                                                                                                |
| Something ambiguous                                         | Answers, then asks `should I keep this? <the part in question>`. Reply `yes` or `no`                                                                                      |
| `hi`, `thanks`, `ok`, a lone 👍                             | Answers as normal, and keeps nothing: no tick, no ask. Greetings and acknowledgements never become memory                                                                 |
| Anything under three words                                  | Answered the same way and not kept, unless it is one of the commands below. `ship friday` is too short to judge; say `we ship friday` and it is judged like anything else |

The tick lands on the message it is about, so there is never a question of *which* one was kept. If a message was half statement and half question, the reply also says `kept: <the statement part>`, so you can see which half became memory. If it kept your message as a correction to something xysq said earlier, the reply says that too: `kept: <the correction>, replacing: <what it replaced>`.

You also get blue ticks and a typing indicator the moment a message is accepted, so you can tell the difference between "it is thinking" and "it never arrived".

<Note>
  Silence means no. If xysq asks whether to keep something and your next message is about something else entirely, the ask resolves as "don't keep it" and your new message is judged on its own. Only one ask is ever open at a time, so you never face a queue of questions.
</Note>

## Telling it what to keep

A handful of phrases override the judgement entirely. No model is consulted; they just do what they say.

* **`remember this`**, **`keep this`**, **`save this`**, or a message starting `note` or `remember`. Put the content after the command (`remember: the deploy freeze starts Friday`) and that message is kept. Send the command on its own and it keeps your **previous** message, which is the natural move when you have just typed something and then decided it matters.
* **`forget that`**, **`don't keep that`**, or **`drop that`** retracts the most recent keep. xysq removes the tick and replies `dropped: <what it was>`. The text is rewritten out of the source and the facts it was holding up are closed on the next pass.

Five fixed lines can come back instead of a confirmation. Each one means something different:

* `already kept.` The message you pointed at already carries a tick. Nothing changed, and nothing needed to.
* `There's nothing before this for me to keep.` You sent a bare keep command with no earlier message for it to point at.
* `I haven't kept anything recently, so there's nothing to drop.` There is no keep in this conversation to retract.
* `That message wasn't kept, so there's nothing to drop.` You quoted a message that never got a tick.
* `I couldn't find that in your vault to remove. It may have been edited since.` The keep is on record but its text is no longer in the source, so nothing was rewritten. The tick stays, because pulling it would claim a removal that did not happen.

## Replying to an older message

Use WhatsApp's own reply-quote and xysq follows it. Quoting a message tells it which one you mean, which matters in four places:

* **Answers.** The quoted line rides along in the prompt, so "actually make that 45 days" attaches to the right thing.
* **`keep this`** on a quoted message keeps **that** message, not the one before this one.
* **`forget that`** on a quoted message retracts **that** keep, not the newest one.
* **Adding to an earlier message.** If what you just said only makes sense with the one you quoted, both are kept together and the reply says so: `kept: <the new statement>, with: <the quoted message>`.

Quoting also resolves an open ask: a `yes` that quotes the question xysq asked settles that question, even if other messages arrived in between.

## Sending documents

Send a file and it becomes a source in your vault, on the same path as an upload in the app: same allowed types, same size cap, same text extraction.

* **Types:** PDF, TXT, MD, CSV, JSON.
* **Size:** up to 25 MB.
* **Feedback:** a ✅ on the message plus `got it, reading <filename>`. The tick alone would not tell you it is being read.
* **Caption:** if you send the file with a caption, that becomes its title. Otherwise the filename is.

Anything else is refused rather than silently dropped:

* Images, voice notes, video, and stickers get `I can't take images or audio yet. Send text, or a document (PDF, TXT, MD, CSV, JSON).` Nothing is written.
* A file of the wrong type gets `I can read PDF, TXT, MD, CSV, JSON. This one is <EXT>.` The check is on the bytes, not the file extension, so renaming a `.docx` to `.pdf` does not get it past.
* A file over the cap gets `That file is over 25 MB, which is more than I can take.`

## What is stored, and what is searchable

These are two different things, and the difference is the whole design.

* **The conversation is the record.** Every message, yours and the agent's, is stored verbatim as it happens. Nothing is thrown away.
* **Only what was kept becomes memory.** A kept message is promoted into your vault, distilled into your pages, and comes back through recall in any tool. An unkept one stays in the conversation and never surfaces as a memory.

That split is why "what have I been working on?" does not come back later as its own answer. Under an everything-is-memory model, the best match for a question tends to be the last time you asked it and got nothing.

<Warning>
  **Messages you send here are not PII-scrubbed.** Your personal graph has scrubbing off, and linking WhatsApp does not turn it on. Text it like you text a person: what you send is stored as you sent it. [PII scrubbing](/sdk/pii-scrub) is a per-vault setting for the agent vaults you build on the SDK, not a filter on your own chat.
</Warning>

## Unlinking

Open **Connect → WhatsApp**, click the bin next to the number, and confirm. New messages from that number stop being recognised. Nothing you already kept is deleted; unlinking closes the door, it does not empty the room. Delete individual sources from the Vault if you want them gone.

## When something goes wrong

* `Hi, I'm xysq... I don't recognise this number yet. Want me to set you up?` means the number is not linked. Reply **yes** for a link, or link it from **Connect → WhatsApp**. Codes bind the number that sent them, so use the phone you actually message from.
* `I couldn't work out whether to keep that. Say 'keep this' if you want it saved.` means the classifier failed. The message is in the conversation, and the command settles it.
* `Sorry, something went wrong on my end and I couldn't answer that.` means the answer failed, not the capture. Your message was already stored before the model ran.

## Where to go next

<CardGroup cols={2}>
  <Card title="Connect an AI tool" icon="plug" href="/connect/overview">
    The same memory, read and written by Claude, Cursor, ChatGPT, and the rest.
  </Card>

  <Card title="Context lake" icon="layer-group" href="/concepts/context-lake">
    Where a WhatsApp message lands, and who else can read it.
  </Card>
</CardGroup>
