The owner wants their own words on this computer read into their PFC persona.

1. If `~/.pfc/bin/pfc_read.py` does not exist, download it:
   `mkdir -p ~/.pfc/bin && curl -fsSL https://www.apersonaai.com/local-reader/pfc_read.py -o ~/.pfc/bin/pfc_read.py`
2. Run `python3 ~/.pfc/bin/pfc_read.py --json`. Every output line is
   one step: `{"step": n, "name": ..., "status": ..., "message": ...}`. Relay
   every `message` to the owner, in order, with its numbers.
3. Exit code 3: the last line waits for the owner. Ask them, then rerun:
   - `ask: login`: they open `url`, check `code`, press 確認; run
     `python3 ~/.pfc/bin/pfc_read.py login --json` (waits), then the read again.
   - `ask: source` → rerun with `--source <kinds>`; `ask: line_name` → with
     `--line-name "<name>"`; `ask: persona` → with `--yes --persona <personaId>`.
   - `need_confirm` (step 7): show the estimate exactly (and every one of its
     `samples`, if any) and ask 「要上傳並開始讀嗎？」. Only on an explicit yes from
     the owner, rerun with `--yes`.
4. Never add `--yes` yourself. Never ask for, print or read a token or anything
   under `~/.pfc/`. Only the owner's own words are uploaded; do not work around it.
5. When step 9 is `running`, give the owner the progress `url`. To let Codex ask
   the persona (read only), the owner runs, in their own terminal,
   `python3 ~/.pfc/bin/pfc_read.py connect --client codex` and adds what it
   prints to `~/.codex/config.toml`.

## Other tools: convert, then hand the file to the program

The program reads five places by itself (Claude Code, Codex, a ChatGPT export, a
LINE export, a notes folder). The owner's words also live elsewhere, and you
read those formats better than any parser: work chat (Slack, Teams, Google Chat,
Discord, Lark, exported JSON or HTML), personal chat exports (WhatsApp, Telegram),
email (Takeout mbox, eml, an exported sent folder), documents (Google Drive,
OneDrive, Dropbox and iCloud folders, Notion or Confluence exports, docx, md),
meeting transcripts (vtt, srt, txt with speaker names), other AI tools' history
(Cursor, Gemini CLI), public writing exports (LinkedIn, X). If the owner named
what the persona lacks most, look first where they are likely to talk about it.

1. **Ask before you look.** Ask which tools they use and **their name, handle or
   email in each** -- that is how you tell their lines from everyone else's.
   List the files or folders you would read (path, size, date) and read only the
   ones they say yes to.
2. **Convert to `pfc-prepared.v1`** in `~/pfc-prepared/` (one `.jsonl` per tool
   and date). Prefer a small script you write and run here over pasting messages
   into the conversation. One passage a line:

       {"text": "...", "at": "2026-05-01T09:30:00+08:00", "app": "Slack", "mine": true, "thread": "#design"}

   - `text`: copied verbatim. Never summarize, translate, fix or invent. Leave
     out quoted or forwarded text, signatures and automated messages.
   - `mine`: `true` only when the sender or author is one of the owner's names;
     anyone else, or not sure, is `false` (the program never uploads those).
   - `at`: the time the export itself records, else `null`. `app`: the tool's
     name. `thread`: the channel, chat or document, if any.
3. **Hand it over:** `python3 ~/.pfc/bin/pfc_read.py --json --prepared ~/pfc-prepared` reads only those
   files. The step 7 line then carries `samples`: a few lines from each app that
   the program will upload as theirs. Show every sample with the estimate and ask
   「這些是你說的話嗎？要上傳並開始讀嗎？」. If an app's lines are not theirs,
   rerun with `--drop-app "<app>"` (or fix the conversion); only a yes adds `--yes`.
4. The prepared files stay on this computer. Do not upload them anywhere else;
   delete them when the owner asks.
