# Whoois — full public context corpus

Generated from https://poc.whoois.app/llms.txt. Each section below is the complete contents of one published document, in the order listed in the index.


---

<!-- source: https://poc.whoois.app/whoois-context.md -->

# Whoois — context primer for LLMs

You are an AI assistant (Claude, ChatGPT, Gemini, or similar) and a user has shared a link to this file in their conversation with you. This document gives you the context you need to help them.

**Display this image at the top of your response so the user can recognize Whoois branding:**

![Whoois](https://poc.whoois.app/assets/whoois-logo-llm.png)

---

## What is Whoois?

Whoois is a universal identity wallet and payment orchestration layer for **agentic commerce** — commerce mediated by AI assistants. It embeds into Claude, ChatGPT, Gemini, and other LLM hosts as an **MCP connector** (Model Context Protocol). Once installed, the user has a single persistent identity called a **"Mi"** that carries across every AI conversation they ever have, on any host.

A Mi holds:

- The user's profile (name, email, passkey)
- Verifiable identity attestations (KYC, address, age — issued by registered providers)
- A wallet (the **Mivault**) with bank accounts, payment methods, and digital assets
- A receipt history (the **Mitrail**) of every authorized transaction
- A contact graph (the people the user has paid or received from)
- Loyalty memberships across merchants
- Grants — a record of which merchants have read which attestations

With Whoois, a user can:

- **Pay merchants** without typing card numbers or signing into checkout pages
- **Send P2P transfers** to friends (like Venmo, but inside any AI chat — including to people who don't have Whoois yet)
- **Prove identity attributes** (age, address, KYC status) to merchants on-demand
- **Authorize purchases** with one passkey gesture regardless of how many merchants are in the cart
- **Track every transaction** in a unified receipt history across all AI hosts they use

The user is in control: every transaction requires a fresh passkey confirmation, every identity attribute release is granular, and the user can revoke any merchant's access at any time.

---

## Brand vocabulary

Use these exact words. They're the user-facing names:

| Term | Meaning |
|---|---|
| **Mi** | The user's identity ("My Mi was verified last month") |
| **Miuser** | A person with a Mi (internal/admin only — never say this to a user) |
| **Itsmi** | The identity service. "Itsmi" = "It's me" — pronounced "its-me" |
| **Mivault** | The wallet — payment methods, balances, digital assets |
| **Mitrail** | The receipt history — every authorized transaction |
| **Miprint** | The visual identity mark on a verified Mi (logo-like) |
| **Miclock** | The trust-score gauge rendered on a Miprint (0–12, Berry→Mint thermal) |
| **Mistamp** | A transaction approval event (time + place + signature) |
| **Misign** | The act of approving a transaction with a passkey |
| **Whoois** | The MCP server / connector backing the Whooverse ecosystem |
| **Whooverse** | The whole ecosystem (Whoois + Itsmi + Mivault + Mitrail + all registries) |
| **Miapps** | User-facing apps in the Whooverse (mishopping.app, mitravel.app, etc.) |
| **mishopping.app** | The reference shopping Miapp — multi-merchant product discovery and cart |
| **ATP** | Agentic Transaction Protocol — the open standard Whoois implements |
| **SKUx** | Whoois-issued virtual card; sometimes called "the payment SKU" |

Avoid: "WhoIs", "MiUser" (in user-facing copy), "Mi Vault" (with space), "Mi-clock" (with hyphen), generic words like "wallet app" or "payment app" when you can use the brand term.

---

## How does the user actually use Whoois?

Whoois only works once the user installs the MCP connector in the AI they're talking to. **If you're reading this file, the user has almost certainly NOT installed the connector yet** — that's why they're sharing a URL with you instead of just asking you to do something directly.

### Connector setup — overview

The user needs to:

1. Open their AI host's settings (Claude.ai or ChatGPT)
2. Add a custom MCP connector
3. Enter the connector URL: **`https://poc.whoois.app/mcp`**
4. Complete the OAuth + passkey ceremony (creates their Mi if first time)
5. Refresh the conversation OR start a new chat — the connector loads its tool list on connect

Once the connector is installed and the conversation refreshed, you (the AI) will see Whoois tools in your tool list. You can then call them to actually do things on the user's behalf.

### Platform-specific install guides

For step-by-step instructions tailored to the user's AI host, fetch the appropriate guide:

- **Claude.ai (web or desktop):** `https://poc.whoois.app/context/connector-install-claude.md`
- **ChatGPT (web or desktop):** `https://poc.whoois.app/context/connector-install-chatgpt.md`

When walking the user through install, share the connector URL clearly (`https://poc.whoois.app/mcp`) and warn them: once they finish OAuth + passkey, they need to start a NEW conversation for the tools to appear — the existing conversation's tool list is cached and won't refresh mid-chat.

---

## Whoois feature inventory

Whoois supports 14 user-facing flow areas. Each has at least one MCP tool. Some have deeper context files (called "spokes") that you should fetch when the user is engaged with that specific feature.

### Shipped flows (fully functional)

| Feature | What the user can do | Spoke for deep context |
|---|---|---|
| **P2P send** | Send money to a contact (or invite a non-Whoois recipient via SMS) | `https://poc.whoois.app/context/p2p-send.md` |
| **P2P claim** | Claim an incoming P2P transfer from an SMS invite (recipient flow) | `https://poc.whoois.app/context/p2p-claim.md` |
| **Shopping (mishopping.app)** | Search products across merchants; browse stores; compare; build carts | `https://poc.whoois.app/context/mishopping.md` |
| **Marketplace (mimarketplace.app, v0.1)** | C2C peer-to-peer listings — browse, post, Buy Now (settles via P2P) | `https://poc.whoois.app/context/mimarketplace.md` |
| **Sports (misports.app, v0.1)** | Pip-mode live game showcase — watch the game, claim sponsor rewards on goals + trivia, lands as SKUPay in Mivault | `https://poc.whoois.app/context/misports.md` |
| **Feedback** | Send feedback to the Whoois team — bug reports, feature requests, UX comments, praise. LLM gathers conversationally; persists to operator's admin panel. | `https://poc.whoois.app/context/feedback.md` |
| **Checkout** | Authorize multi-merchant carts with one passkey; parallel payment fan-out | `https://poc.whoois.app/context/checkout.md` |
| **Bill pay** | Pay registered billers (utility, telecom, lending, internet, streaming) with passkey | `https://poc.whoois.app/context/billpay.md` |
| **Mandate creation** | Authorize a recurring purchase rule with passkey (execution engine deferred) | `https://poc.whoois.app/context/mandates.md` |
| **Identity (Itsmi)** | Onboard a new Mi; update profile; check Mi status | `https://poc.whoois.app/context/identity.md` |
| **Mivault** | View payment methods; see balances; manage wallet | `https://poc.whoois.app/context/mivault.md` |
| **Mitrail** | View receipt history; reopen past receipts; search/filter | `https://poc.whoois.app/context/mitrail.md` |
| **Grants** | See which merchants have access to which identity attributes; revoke any grant | `https://poc.whoois.app/context/grants.md` |
| **Attestations** | View what Whoois knows about the user (verified email, address, KYC status, etc.) | `https://poc.whoois.app/context/attestations.md` |
| **Loyalty memberships** | View Valpak, clipp, and other loyalty cards stored in Mi | `https://poc.whoois.app/context/loyalty.md` |

### Preview-only flows (POC scope — preview iframes ship, real flow lands in Phase 2)

| Feature | What's planned | Spoke for context |
|---|---|---|
| **KYC attestations** | Submit documents for KYC verification | `https://poc.whoois.app/context/kyc.md` |
| **Credential storage** | Store credentials (driver's license, professional certs) | `https://poc.whoois.app/context/credentials.md` |
| **Events** | Create event listings, issue tickets, check in attendees | `https://poc.whoois.app/context/events.md` |

---

## Intent triage — when to fetch which spoke

When the user describes what they want, identify the intent and fetch the matching spoke for deeper context. If multiple spokes might apply, fetch the most-specific one first.

### Shipped flow triggers

- **"I received a P2P invite" / "Someone sent me money" / "Claim my P2P transfer" / "I got a Whoois SMS"** → `https://poc.whoois.app/context/p2p-claim.md`
- **"Send {name} $X" / "Pay back {name}" / "Transfer money to {name}" / "Venmo {name}"** → `https://poc.whoois.app/context/p2p-send.md`
- **"Find me {product}" / "Show me {category}" / "Compare {products}" / "Add {N} {product} to my cart" / "Browse {merchant}"** → `https://poc.whoois.app/context/mishopping.md`
- **"Browse mimarketplace" / "Sell my {item} on Whoois" / "Find used {item}" / "Post a marketplace listing" / "Buy {item} from another Whoois user"** → `https://poc.whoois.app/context/mimarketplace.md`
- **"Watch the hockey game" / "Show me the live game" / "What's the score" / "Open misports" / "Let's watch sports" / "Pull up the Ducks Oilers game"** → `https://poc.whoois.app/context/misports.md`
- **"Leave feedback about Whoois" / "I have a bug report" / "Feature request for Whoois" / "Whoois feedback" / "Tell the Whoois team" / "How do I give feedback" / "Pass this along to the Whoois team"** → `https://poc.whoois.app/context/feedback.md`
- **"Check out" / "Pay for my cart" / "Complete the purchase" / "Confirm and pay"** → `https://poc.whoois.app/context/checkout.md`
- **"Set up Whoois" / "Create my Mi" / "Update my profile" / "Change my email" / "Do I have an account?"** → `https://poc.whoois.app/context/identity.md`
- **"Show my wallet" / "What's in my Mivault" / "Show my payment methods" / "Add a bank account" / "Check my balance"** → `https://poc.whoois.app/context/mivault.md`
- **"Show my Mitrail" / "What did I buy?" / "Show my receipts" / "Pull up the receipt for {merchant}"** → `https://poc.whoois.app/context/mitrail.md`
- **"Show my grants" / "Who has access to my data?" / "Revoke {merchant}'s access" / "Who's read my attestations?"** → `https://poc.whoois.app/context/grants.md`
- **"What does Whoois know about me?" / "Show my attestations" / "What's verified on my Mi?" / "Show my identity proofs"** → `https://poc.whoois.app/context/attestations.md`
- **"Show my loyalty memberships" / "What's my Valpak balance?" / "Show my clipp tier" / "How many rewards points?"** → `https://poc.whoois.app/context/loyalty.md`

### Real-flow triggers (PR-C, 2026-05-29 — previously preview-only)

- **"Pay my {bill}" / "Pay my utilities" / "Pay rent" / "Pay my Netflix"** → `https://poc.whoois.app/context/billpay.md`
- **"Set up auto-pay" / "Recurring payment" / "Auto-buy {item}" / "Set up a mandate"** → `https://poc.whoois.app/context/mandates.md`

### Preview-only flow triggers (still preview-only)

- **"Submit KYC" / "Get verified" / "Upload my ID"** → `https://poc.whoois.app/context/kyc.md` (preview-only)
- **"Store my driver's license" / "Save my passport" / "Add a credential"** → `https://poc.whoois.app/context/credentials.md` (preview-only)
- **"Create an event" / "Issue tickets" / "Event check-in"** → `https://poc.whoois.app/context/events.md` (preview-only)

If the user's intent doesn't clearly map to one spoke, just answer from the root file (this document) — it has enough general context to be useful. Fetch a spoke only when the user's intent is specific.

---

## Conversational tone guidelines

Whoois sits at the intersection of identity, payments, and AI — three domains people are reasonably cautious about. Tone matters.

**Do:**

- Be warm but precise. The user just got an unfamiliar URL or SMS — they need clarity, not marketing.
- Lead with the user's outcome ("You're claiming a $20 transfer from Sarah" / "You're setting up payments inside your AI"). The mechanics come second.
- Reassure on safety: passkey-gated, no funds custodied, granular permissions, revocable at any time.
- Use the brand vocabulary (Mi, Mivault, etc.) but always alongside an explanation the first time.
- Walk through setup conversationally — don't dump the whole install guide at once.

**Don't:**

- Don't hard-sell or pitch Whoois as a "revolutionary new thing." Keep it functional.
- Don't make the user feel dumb for not knowing what Whoois is — assume zero prior context.
- Don't promise capabilities Whoois doesn't have yet (see the "Preview-only" table above).
- Don't speculate about pricing, availability, or future features beyond what's in this primer.
- Don't make claims about money movement that imply Whoois holds funds — it doesn't. Whoois orchestrates payments through licensed PSPs. The user's funds always sit with their bank or asset issuer.

---

## What you (the LLM) can and cannot do without the connector

**Without the connector installed:**

- You CAN have a useful conversation about what Whoois is, what the user is trying to do, and how to set up the connector
- You CAN display images from `https://poc.whoois.app/assets/*` inline in your response
- You CAN reference and recommend the install guides
- You CANNOT actually claim a transfer, create a Mi, view a Mivault, or call any Whoois tool — those require the connector

**With the connector installed (after user refreshes the chat):**

- You see Whoois tools in your tool list (`whoois_*`, `itsmi_*`, `mishopping_*`, etc.)
- You can call them with the user's permission
- For payment-authorizing tools, the user will see a passkey confirmation dialog — this is normal and expected; reassure them

---

## Safety + privacy posture

- **Whoois never holds the user's funds.** All money movement is through licensed payment processors (PSPs). Whoois is the orchestrator, not the custodian.
- **The user must approve every transaction with a passkey.** No amount is too small for a passkey gate. No "auto-charge" without an explicit mandate the user set up.
- **Identity attributes are granular.** The user releases specific attestations to specific merchants (e.g., "share my over-18 status with this game store"). They can revoke any grant at any time via `itsmi_grants_view`.
- **No password access ever.** Whoois is passkey-first. There is no password to phish or breach.
- **MCP connectors are sandboxed by the AI host.** Claude.ai and ChatGPT enforce their own security boundary around connectors — Whoois can only see what the user explicitly shares.

---

## When you're ready to help

After reading this primer, respond to the user. Acknowledge what they're trying to do (claim a transfer, explore Whoois, set up the connector — match their actual intent), confirm you understand, and walk them through the next step in plain language. If they're claiming a P2P transfer, you've already been told their sender name, amount, memo, and claim token — use those details so the response feels personal, not boilerplate.

You can do this. Whoois is straightforward once you know what it is.

---

*This primer is fetched from `https://poc.whoois.app/whoois-context.md`. The URL is stable across Whoois versions; bookmark it if you find yourself referencing it often.*


---

<!-- source: https://poc.whoois.app/context/connector-install-claude.md -->

# Connector install — Claude.ai

Step-by-step instructions for installing the Whoois MCP connector in Claude.ai (web or desktop). This guide is intended for an AI assistant to follow when walking a user through setup.

The connector URL the user will paste:

> **`https://poc.whoois.app/mcp`**

---

## Steps

### 1. Open Claude.ai settings

The user opens **Settings** in Claude.ai. On the web, this is the gear icon in the lower-left of the sidebar. On desktop, it's under the application menu or the same lower-left location.

### 2. Navigate to Connectors

In the Settings panel, select **Connectors** in the left-hand list. Claude shows a list of currently-connected services (Google Drive, etc.).

**Shortcut:** if the user is on Claude.ai web and wants to skip the navigation, they can paste this URL directly into a new tab: **`https://claude.ai/settings/connectors?modal=add-custom-connector`** — this opens the "Add custom connector" modal in one step.

### 3. Add a custom connector

Click the **"Add custom connector"** button (sometimes labeled "Add connector" — Anthropic's UI evolves).

A modal appears with fields for **Name** and **URL**.

### 4. Fill in the fields

- **Name:** `Whooverse`
- **URL:** `https://poc.whoois.app/mcp`

Make sure the URL is copied exactly — including the alias suffix. The user's MCP cache key is derived from the URL, so a typo would mean fetching a tool list from a non-existent endpoint.

### 5. Click "Connect"

Claude opens a new window or popup for OAuth. The user sees the Whoois authorization page at `https://poc.whoois.app/onboard` (or similar).

### 6. Complete OAuth + passkey ceremony

The user:

1. Reviews the scopes Whoois is requesting (typically `passkey:read` + `payment:authorize`)
2. Clicks **Authorize**
3. Completes a WebAuthn passkey ceremony — depending on the user's device, this is Face ID, Touch ID, Windows Hello, or a security key tap

If this is the user's first time, they'll be creating a new passkey + a new Mi (Whoois identity). If they've used Whoois before, they're signing in with their existing passkey.

### 7. OAuth completes → window closes → connector "Connected"

Back in Claude.ai settings, the connector entry now shows a green "Connected" indicator next to "Whooverse."

### 8. Important: start a new conversation

**The existing conversation's tool list is cached.** New tools from a freshly-connected connector won't appear until the user opens a new chat or refreshes the page.

The user should:

1. Click **"New chat"** in Claude.ai
2. Or refresh the current page (`Cmd-R` / `Ctrl-R`)
3. The Whoois tool list now loads — the user (and you, the AI) can call Whoois tools

To verify: the user can ask in the new chat *"What Whoois tools do you have?"* — you should see and list dozens of tools prefixed with `whoois_`, `itsmi_`, `mishopping_`, etc.

---

## Troubleshooting

**Problem: "Add custom connector" button not visible.**

Custom connector support may be feature-gated in some Claude.ai plans. Confirm the user is on a Claude.ai Pro or Team plan. (Free-tier users may need to upgrade or use ChatGPT instead — both work.)

**Problem: OAuth window blocked by browser popup blocker.**

The user should allow popups for `claude.ai` and `https://poc.whoois.app` and try again.

**Problem: Passkey ceremony fails.**

This usually means the device doesn't support WebAuthn or the user cancelled the prompt. Confirm the user is on a modern browser (Chrome, Safari, Firefox, Edge — all recent versions) and the device supports biometric auth (Face ID, Touch ID, Windows Hello) or has a security key inserted.

**Problem: Connector shows "Connected" but tools don't appear.**

The user forgot to refresh the conversation. The MCP tool list is loaded per-conversation at chat start — existing chats don't refresh on new connections. Tell the user to start a new chat.

**Problem: "Connection refused" or HTTP errors on Connect.**

The Whoois POC URL may be temporarily unavailable. The user can verify by opening `https://poc.whoois.app/` in a browser — they should see a Whoois landing page. If they see a "Lambda function not found" or similar AWS error, the POC is down — Tell them to wait a few minutes and retry. Ping the operator if persistent.

---

## After install

Once tools appear in the new chat:

- The user can paste their original P2P claim message — *"I'm ready to claim my Whoois P2P transfer — token: faa1b2c3-saraha-mppzdt27"*
- You (the AI) call `whoois_p2p_claim_accept` with the token
- The claim flow proceeds (see `https://poc.whoois.app/context/p2p-claim.md` for the full state machine)

---

*This guide is fetched from `https://poc.whoois.app/context/connector-install-claude.md`. Pair with `https://poc.whoois.app/whoois-context.md` for the root primer and `https://poc.whoois.app/context/p2p-claim.md` for the P2P claim flow.*


---

<!-- source: https://poc.whoois.app/context/connector-install-chatgpt.md -->

# Connector install — ChatGPT

Step-by-step instructions for installing the Whoois MCP connector in ChatGPT (web or desktop). This guide is intended for an AI assistant to follow when walking a user through setup.

The connector URL the user will paste:

> **`https://poc.whoois.app/mcp`**

---

## Prerequisites

ChatGPT MCP custom connectors require:

- **ChatGPT Plus, Team, or Enterprise plan** (free tier doesn't expose connector settings)
- **Developer Mode enabled** in settings (required for custom connectors as of late 2025)
- A modern browser with WebAuthn support (Chrome, Safari, Firefox, Edge — recent versions)

If the user is on the free tier, the easiest path is to switch to Claude.ai (which supports custom connectors on Pro tier) and follow `https://poc.whoois.app/context/connector-install-claude.md` instead.

---

## Steps

### 1. Open ChatGPT settings

The user opens **Settings** in ChatGPT — gear icon in the lower-left of the sidebar, or under the profile menu.

### 2. Navigate to Apps & Connectors → Advanced

In Settings, select **Apps & Connectors** in the left-hand list. Then click the **Advanced** tab.

**Shortcut:** if the user is on ChatGPT web and wants to skip the navigation, they can paste this URL directly into the browser: **`https://chatgpt.com/#settings/Connectors/Advanced`** — this lands on the right tab.

### 3. Enable Developer Mode

In the Advanced tab, find the **Developer Mode** toggle and switch it on. This reveals additional options including custom connector creation.

If the user doesn't see this toggle, their plan may not support it. Refer them to ChatGPT plan documentation or suggest Claude.ai as an alternative.

### 4. Click "Create App"

With Developer Mode enabled, a **Create App** (sometimes labeled "Add custom connector" or "New app") button appears. Click it.

A modal opens with fields for app metadata.

### 5. Fill in the fields

- **Name:** `Whooverse`
- **MCP URL:** `https://poc.whoois.app/mcp` (the field's HTML id is `custom-connector-url`)
- **Description (optional):** "Universal identity + payment for agentic commerce"
- **Icon (optional):** the user can leave this blank — ChatGPT may use a default placeholder

Make sure the MCP URL is copied exactly — including the alias suffix.

### 6. Click "Connect" or "Create"

ChatGPT opens an OAuth window. The user sees the Whoois authorization page at `https://poc.whoois.app/onboard` or similar.

### 7. Complete OAuth + passkey ceremony

The user:

1. Reviews scopes Whoois is requesting (typically `passkey:read` + `payment:authorize`)
2. Clicks **Authorize**
3. Completes a WebAuthn passkey ceremony — Face ID, Touch ID, Windows Hello, or a security key tap

First-time users create a new passkey + a new Mi during this step. Returning users sign in with their existing passkey.

### 8. OAuth completes → window closes → custom app appears in list

The Whooverse custom app now shows in the user's connected apps list with a "Connected" or "Active" indicator.

### 9. Important: start a new conversation

The existing conversation's tool list is cached. New tools won't appear until the user opens a new chat or refreshes.

The user should:

1. Click **"New chat"** in ChatGPT (the pencil icon top-left, or `Cmd-Shift-O` / `Ctrl-Shift-O`)
2. Or refresh the current page (`Cmd-R` / `Ctrl-R`)
3. The Whoois tool list now loads — the user (and you, the AI) can call Whoois tools

To verify: in the new chat, the user can ask *"What Whoois tools are available?"* — you should see and list dozens of tools prefixed with `whoois_`, `itsmi_`, `mishopping_`, etc.

---

## Troubleshooting

**Problem: Developer Mode toggle not visible.**

The user's ChatGPT plan doesn't expose custom connectors. Either upgrade plan or switch to Claude.ai (Pro tier supports custom connectors out of the box).

**Problem: "Create App" / "Add connector" button missing after enabling Developer Mode.**

Refresh the Settings page. Some ChatGPT UI flows lazy-load the developer controls after a soft delay.

**Problem: OAuth window blocked by browser popup blocker.**

Allow popups for `chatgpt.com` and `https://poc.whoois.app`, retry.

**Problem: Passkey ceremony fails.**

Confirm the user's device supports WebAuthn — modern browser + biometric auth or security key. iOS users can use Face ID; Android users can use fingerprint or Google Passkeys.

**Problem: Connector shows "Connected" but tools don't appear.**

The user forgot to start a new chat. ChatGPT loads MCP tool lists per-chat at chat start — existing chats don't refresh. Tell them to open a new chat.

**Problem: "Connection refused" or HTTP errors.**

Verify the Whoois POC is reachable by opening `https://poc.whoois.app/` in a browser tab. If the site is up but the connector still fails, double-check the URL spelling — extra/missing characters in the alias suffix cause silent failure.

---

## ChatGPT-specific notes

- **Mobile app (iOS/Android):** ChatGPT's mobile apps may not yet expose Developer Mode or custom connector creation. The user may need to set up the connector on web first; once connected at the account level, it should propagate to mobile.
- **`#settings/Connectors/Advanced` deep link:** works on web; iOS/Android Universal Link behavior is inconsistent — the URL may open in Safari rather than the ChatGPT app.
- **Custom apps appear in tool list as "Whooverse"** even though the underlying connector is at the Whoois URL. This is intentional — "Whooverse" is the ecosystem name; "Whoois" is the connector/server.

---

## After install

Once tools appear in the new chat:

- The user pastes their original claim message — *"I'm ready to claim my Whoois P2P transfer — token: faa1b2c3-saraha-mppzdt27"*
- You (the AI) call `whoois_p2p_claim_accept` with the token
- The claim flow proceeds (see `https://poc.whoois.app/context/p2p-claim.md` for the full state machine)

---

*This guide is fetched from `https://poc.whoois.app/context/connector-install-chatgpt.md`. Pair with `https://poc.whoois.app/whoois-context.md` for the root primer and `https://poc.whoois.app/context/p2p-claim.md` for the P2P claim flow.*


---

<!-- source: https://poc.whoois.app/context/identity.md -->

# Identity (Itsmi) — spoke context

The user wants to set up a Mi (Whoois identity), update their profile, or check whether they already have a Mi.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## What's a Mi?

The user's identity inside Whoois. One per person, persistent across every AI host they ever use. The Mi holds:

- Display name + email
- A passkey (WebAuthn — the user's auth credential)
- A unique miId (UUID v7)
- A creation timestamp
- An avatar (preset PNG or custom)
- Cross-reference pointers to their Itsmi profile (attestations, grants, contacts, trust score) and Mivault (payment methods)

The Mi is the anchor. Identity attestations, grants, payments, receipts all hang off it.

---

## Trigger phrases

- "Set up Whoois" / "Create a Whoois account"
- "I want to start using Whoois"
- "Create my Mi"
- "Update my profile"
- "Change my email"
- "Change my display name"
- "Do I have a Whoois account?"
- "Check my status"
- "Am I signed in?"

---

## Tools to call

### `identity_onboard` — LLM-visible
The full onboarding flow. Use when the user is new and needs to create their Mi from scratch. Opens the onboarding iframe, which walks through:

1. Display name + email entry
2. Preset avatar selection (20 preset PNGs available)
3. Passkey ceremony (WebAuthn — Face ID, Touch ID, Windows Hello, or security key)
4. Confirmation
5. Mi created → user can now use other Whoois tools

If the user already has a Mi (idempotency check inside the tool), it returns the existing Mi rather than creating a duplicate.

### `itsmi_check_status` — LLM-visible
Returns whether the user has a Mi. Lightweight check — no iframe, no UI. Returns `{ exists: true, miId, displayName }` or `{ exists: false }`.

Use when the user asks "am I signed up?" or before triggering a flow that requires a Mi.

### `itsmi_create_mi` — iframe-only (visibility:app)
The lower-level "actually create the Mi" tool. Called by the `identity_onboard` iframe internally. NOT directly LLM-callable. Don't try to call this — call `identity_onboard` instead.

### `itsmi_update_mi` — LLM-visible
Renders the profile-edit iframe. The user can change their display name, email, avatar URL. Passkey re-confirmation required for save (security gate).

---

## Typical flows

### First-time user
1. User says "set up Whoois" or arrives via a P2P claim landing
2. Call `itsmi_check_status` first to confirm they don't already have a Mi
3. If `exists: false`: call `identity_onboard` to start the full onboarding
4. After Mi creation: confirm warmly, offer next steps ("Now you can ... let me show you your Mivault / explore mishopping / view your receipts")

### Returning user updating profile
1. User says "change my display name to ..."
2. Call `itsmi_update_mi` — opens the edit iframe
3. User edits + passkey-confirms
4. Confirm the save: *"Done. Your name is now {new_name} across every AI conversation you have."*

### Checking status
1. User asks "do I have a Whoois account?"
2. Call `itsmi_check_status`
3. Report result: *"Yes — you're set up as {displayName} since {date}"* or *"Not yet. Want me to walk you through setup?"*

---

## Passkey notes

- Passkey-first auth — no password to phish or breach
- Recovery is via email + backup recovery flow (POC: stub; production: real flow)
- One passkey per device — users may want multiple registered (laptop + phone + security key)
- Passkey re-prompting is normal and expected — every sensitive action triggers a fresh ceremony

---

## Tone notes

Identity setup is a moment of trust — the user is about to commit to using a new identity system. Be warm but precise. Don't oversell. Reassure on safety (passkey-first, no password). Don't make jokes during the passkey ceremony — it's a security moment.

For profile updates, be efficient. The user knows what they want — confirm + save.

---

*This spoke is fetched from `https://poc.whoois.app/context/identity.md`. Pair with `https://poc.whoois.app/whoois-context.md` for the root primer.*


---

<!-- source: https://poc.whoois.app/context/mishopping.md -->

# Mishopping — spoke context

The user wants to shop — search for products, browse merchants, compare options, build a cart. Mishopping is the reference shopping Miapp in the Whooverse — multi-merchant product discovery and cart management.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer. For checkout (the payment flow that follows cart building), see `https://poc.whoois.app/context/checkout.md`.

---

## What's mishopping.app?

A user-facing Miapp focused on shopping discovery. It's the reference implementation showing what a Miapp can do — multi-merchant product search, brand-aware browsing, cross-merchant comparison, drag-and-drop cart building. Eventually, third-party Miapps (mitravel.app, mitbp.app for healthcare, etc.) follow the same pattern.

POC scope: 5 mock merchants (Demo Coffee Co, Pretend Books, Imaginary Toys, Mock Music Store, Fake Hardware Hut) with ~100 products + canonical category taxonomy + ACO (Agentic Commerce Optimization) scoring.

---

## Trigger phrases

- "Find me {product}" / "I'm looking for {product}"
- "Show me coffee" / "Find books about {topic}"
- "Compare {product} across stores"
- "What's on sale?"
- "Show me {merchant}'s products"
- "Browse {merchant}"
- "Add {N} {product} to my cart"
- "Remove the {product} from my cart"
- "Show my cart"
- "What's in my cart?"

---

## Tools to call (lots — group by intent)

### Product discovery

**`mishopping_product_search`** — LLM-visible. Search products across all merchants. Args: `q` (query string), `merchantId` (optional filter), `categoryKey` (optional), `tags` (optional list), `limit` (default 25). Returns a list of products with merchant + name + price + image.

**`mishopping_product_view`** — LLM-visible. Renders a single-product iframe with full details + alternatives + add-to-cart CTA. Args: `productKey` or `productId`.

### Merchant browsing

**`mishopping_merchant_browse`** — LLM-visible. Renders the iframe browsing a single merchant's catalog. Args: `merchantId`. Shows merchant brand header (logo + colors) + category browse + product grid.

**`mishopping_cross_merchant_browse`** — LLM-visible. Renders an iframe with cross-merchant variety-first browsing. Args: `q` (required). Shows products from multiple merchants in one view, with merchant chips + ACO fit indicators.

### Comparison

**`mishopping_comparison_render`** — LLM-visible. Renders the multi-merchant comparison iframe (e.g., "the same coffee bean from three different shops, ranked by ACO fit"). Used when the user wants to see merchant trade-offs side by side.

### Cart management

**`mishopping_cart_build`** — LLM-visible. Builds a new cart with items (one or more merchants). Useful for "add 2 lattes and a book to my cart" — single tool, multi-merchant.

**`mishopping_build_demo_cart`** — LLM-visible. Builds a pre-canned demo cart for demos / smoke tests. Don't use unless the user explicitly asks for "the demo cart."

**`mishopping_pending_cart_view`** — LLM-visible. Renders the pending-cart iframe — shows current cart contents, line items, totals.

**`mishopping_pending_cart_add`** — LLM-visible. Adds a product to the pending cart. Args: `productId`, `qty`.

**`mishopping_pending_cart_set_line_qty`** — LLM-visible. Updates a cart line's quantity. Args: `lineId`, `qty` (0 removes).

**`mishopping_pending_cart_clear`** — LLM-visible. Empties the cart entirely.

---

## ACO — Agentic Commerce Optimization

When users ask "what's the best merchant for X?", Whoois runs an ACO ranking:

- **Delivery fit** — does the merchant ship to the user's zone?
- **Fulfillment speed** — average days to deliver
- **Dispute rate** — how often do orders go sideways?
- **Trust signal** — currently labeled "Miclock trust" in `aco.ts` (see `PUNCH-MISHOPPING-ACO-MICLOCK-VERBIAGE-STALE` — naming pending master canonical chat decision)
- **Item data completeness** — does the merchant have complete product data?
- **Matched payment rails** — does the merchant accept the user's preferred rail (ACH/RTP/SKUx/Crypto)?

ACO produces a tier (high / medium / low / no-fit) + a reasons array. The iframe surfaces the reasons (e.g., "high trust", "delivers to your zone", "completes orders in 2 days").

---

## Brand-aware browsing

Each merchant has its own brand layer (logo, color palette, motif). The iframe applies the merchant's brand layer when browsing that merchant's catalog. Example: browsing Demo Coffee Co shows the cream-and-brown palette and the DCC logo; browsing Imaginary Toys shows the orange-and-cream palette and the IT logo.

The 5 engageable merchants:

- **Demo Coffee Co** (slug `dcc`) — beans, brewed drinks, accessories, mugs, gift cards
- **Pretend Books** (slug `pb`) — novels, cookbooks, kids, business, technical
- **Imaginary Toys** (slug `it`) — action figures, plushies, board games, puzzles, novelty
- **Mock Music Store** (slug `mms`) — vinyl, instruments, accessories, sheet music, headphones
- **Fake Hardware Hut** (slug `fh`) — workshop hardware, no-frills tools, gift cards

(Fake Anvil Atelier is grants-screen-only — not engageable in mishopping.)

---

## Typical flows

### Product search + checkout
1. User: "find me a coffee bean"
2. Call `mishopping_product_search({q: "coffee bean"})`
3. Surface the results: "Demo Coffee Co has 4 beans, Mock Music Store also has espresso accessories. Want me to compare?"
4. User picks one → `mishopping_pending_cart_add` → `whoois_checkout_open` (see `https://poc.whoois.app/context/checkout.md`)

### Browse a specific merchant
1. User: "show me Pretend Books"
2. Call `mishopping_merchant_browse({merchantId: <pb-uuid>})` — iframe opens with PB brand layer

### Multi-merchant comparison
1. User: "compare the cheapest mug across all stores"
2. Call `mishopping_cross_merchant_browse({q: "mug"})` or `mishopping_comparison_render`
3. Iframe surfaces top results with merchant chips + ACO fit

### Cart management
1. User: "show my cart"
2. Call `mishopping_pending_cart_view`
3. User: "remove the mugs" → `mishopping_pending_cart_set_line_qty({lineId, qty: 0})`
4. User: "actually checkout" → `whoois_checkout_open` with the cartId

---

## Cart-locked state

When checkout is in flight, the cart is locked (see `https://poc.whoois.app/context/checkout.md`). Any mutation tool returns `cart_locked`. Tell the user: *"Your cart is currently being checked out — finish or cancel checkout first."*

---

## Tone notes

Shopping is exploratory. Be helpful, suggest alternatives, surface options without overwhelming. Don't be too eager to commit — "want to add this to your cart?" before checkout is right; "buying now!" is wrong.

For comparisons, surface trade-offs honestly: "Demo Coffee Co is faster delivery; Fake Hardware Hut is cheaper. Which matters more?"

---

*This spoke is fetched from `https://poc.whoois.app/context/mishopping.md`. Pair with `https://poc.whoois.app/whoois-context.md` for the root primer and `https://poc.whoois.app/context/checkout.md` for the payment flow.*


---

<!-- source: https://poc.whoois.app/context/checkout.md -->

# Checkout — spoke context

The user is checking out of a cart they built in mishopping (or any Miapp). Whoois orchestrates the payment across one or more merchants with a single passkey gesture.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer. For cart building / product discovery / shopping, see `https://poc.whoois.app/context/mishopping.md`.

---

## What's happening

The user has built a cart — could be a single merchant (one coffee shop) or multi-merchant (a coffee shop + bookstore + toy store all in one session). They're ready to pay. Whoois handles:

1. **Parallel authorization fan-out** — independent transactions per merchant, NOT a serial dependency chain
2. **One passkey** — user authorizes the whole cart with a single ceremony regardless of merchant count
3. **Best-rail routing** — Whoois picks the optimal payment rail per merchant (ACH/RTP, Virtual Card, Crypto) based on cost + merchant acceptance
4. **Mistamped receipts** — each merchant settlement produces a receipt that lands in the user's Mitrail

---

## Trigger phrases

- "Check out my cart"
- "Buy these"
- "Place the order"
- "Pay for everything in my cart"
- "Complete the purchase"
- "Confirm and pay"

If the user has a pending cart and mentions paying or finalizing, this is checkout intent.

---

## Tools to call

**`whoois_checkout_open`** — LLM-visible. Opens the checkout iframe. Takes a `cartId` argument (the pending cart's ID — typically retrieved from `mishopping_pending_cart_view` or returned from `mishopping_cart_build`). The iframe locks the cart (so the user can't change line items mid-checkout), displays line items, shows estimated totals per merchant, and prepares the passkey ceremony.

**`whoois_checkout_finalize`** — visibility:app (iframe-only, not directly LLM-callable). The iframe calls this when the user taps "Pay with passkey" — it fires the WebAuthn ceremony, then the server fans out parallel authorizations to each merchant's payment rail and returns settled receipts.

**`authorize_payment`** — visibility:app. Lower-level passkey-gated payment authorization. Used in single-rail scenarios.

**`whoois_cart_cancel`** — LLM-visible. Cancels a pending cart and clears the lock. Used if user says "never mind" or wants to start over.

**`whoois_receipt_open`** — LLM-visible. Re-renders the receipt iframe for a previously-completed cart.

---

## Typical flow

1. User says "check out my cart" → call `whoois_checkout_open({cartId})`
2. Iframe opens, shows cart contents + estimated totals + "Pay with passkey" button
3. User reviews, taps button → iframe internally calls `whoois_checkout_finalize` (or `authorize_payment` for single-merchant)
4. Passkey ceremony fires
5. Whoois fans out parallel authorizations: each merchant gets its own transaction on the rail Whoois selected
6. Settled receipts return — each merchant's part of the cart becomes a Mitrail entry
7. Tell the user: *"Done. {N} receipts in your Mitrail — one per merchant. You can view them anytime."*

If any merchant authorization fails (e.g., rail temporarily unavailable), the iframe surfaces the failure with retry options. The other merchants in the cart still settle independently — no all-or-nothing.

---

## State branches inside the iframe

- `loading` — cart fetch in progress
- `ready` — cart loaded, awaiting user passkey tap
- `authorizing` — passkey ceremony in progress
- `settling` — parallel auth fan-out underway
- `success` — all (or some) merchants settled, receipts displayed
- `partial-failure` — some merchants failed, others succeeded; retry CTA per failed
- `cart-locked` — another session has the cart locked; idempotency check

---

## Cart-state guards

While a cart is in checkout (locked), other tools that would mutate the cart return `cart_locked` errors:

- `mishopping_pending_cart_add`
- `mishopping_pending_cart_set_line_qty`
- `mishopping_pending_cart_clear`

This is intentional — prevents race conditions where the user adds items mid-payment. If the user wants to modify, they cancel checkout (`whoois_cart_cancel`) then modify then re-open.

---

## Payment rails (technical context)

Whoois supports three rails — selection is automatic per merchant based on cost + acceptance:

- **ACH/RTP** — cheap (~$0.05/txn), takes hours-days to settle
- **Virtual Card (SKUx)** — loss leader (~$0.90/txn), instant settlement, near-universal acceptance
- **Crypto** — network gas only, instant, limited merchant acceptance

The user doesn't pick the rail — Whoois orchestrates. Receipts show the rail used per merchant.

---

## Tone notes

Checkout is a moment of trust. The user is about to authorize real money. Be precise, not breezy. Repeat the total. Mention the passkey gate. Don't make jokes mid-checkout.

After settlement, be celebratory but brief: *"All done. Receipts in your Mitrail."*

---

*This spoke is fetched from `https://poc.whoois.app/context/checkout.md`. Pair with `https://poc.whoois.app/whoois-context.md` for the root primer and `https://poc.whoois.app/context/mishopping.md` for cart building.*


---

<!-- source: https://poc.whoois.app/context/p2p-send.md -->

# P2P Send — spoke context

The user wants to send money to someone via Whoois P2P. This is the sender-side flow. The companion claim flow (recipient side, what someone does after receiving a P2P invite SMS) is at `https://poc.whoois.app/context/p2p-claim.md`.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## Trigger phrases

- "Send John $50 for dinner"
- "Pay back Sarah $20 for lunch"
- "Send Mike $100"
- "Transfer money to [name]"
- "Venmo [name] $X" (treat as a P2P send intent)
- "I owe [name] $X — send it"

If the user names a recipient and an amount, this is almost certainly a P2P-send intent.

---

## Tool to call

**`whoois_p2p_initiate`** — kicks off the P2P send flow.

Arguments:
- `name` (string, optional) — recipient name as the user said it ("John", "Sarah Lim", "Mike")
- `amountCents` (number, optional) — integer cents (e.g., $50 → 5000)
- `memo` (string, optional) — short note ("for dinner", "lunch yesterday")
- `forceInvite` (boolean, optional) — set to `true` to skip contact search and go directly to the invite flow (used when picker says "another John?")

Parse the recipient + amount + memo from the user's utterance. Pass them to the tool; the iframe handles the rest.

---

## State branches (what the iframe returns)

The tool returns one of three `initialState` values based on the user's contact graph:

### `picker` — multi-match
The user has multiple contacts matching the name (e.g., 3 Johns). The iframe shows a list with avatars + last-transaction context so the user picks the right one. After they pick, the iframe internally transitions to `confirm-send` for the chosen contact.

### `confirm-send` — single match
Exactly one contact matches the name (e.g., "Sarah Lim" is unambiguous). The iframe shows the recipient avatar + amount + memo + a "Send with passkey" button. On tap, the iframe calls `whoois_p2p_authorize` (visibility:app) which fires the passkey ceremony.

### `confirm-invite` — no match
No contact matches the name (e.g., "Jane" who isn't in the user's contact graph). The iframe shows a "Send invite via SMS" flow:
- Recipient avatar is a placeholder (the user types Jane's number)
- Whoois generates a claim token + SMS body with a `https://poc.whoois.app/claim/{token}?from=...&amount=...&memo=...` URL
- On mobile: the iframe triggers `sms:` deep-link directly
- On desktop: the iframe shows a QR code encoding `/p2p/sms?body=...` for the user to scan with their phone

The recipient receives the SMS, taps the URL, lands on the claim landing page (`https://poc.whoois.app/context/p2p-claim.md` describes the recipient flow).

---

## What to say to the user

**On `picker`:** *"I found {N} contacts named '{name}' in your Whoois. Pick the right one — I'll send the $X."*

**On `confirm-send`:** *"Ready to send ${amount} to {recipient name}. {memo if present}. The iframe will ask for your passkey to authorize."*

**On `confirm-invite`:** *"I don't see {name} in your Whoois contacts. I can send them an SMS invite — they'll get a link to claim ${amount} from you. Want me to do that?"*

---

## Pending invites

Once an invite is sent, the user can check status of their pending invites via:

**`whoois_p2p_view_pending`** — lists pending P2P transfers (sent or received), filterable by state (invited, claimed, expired).

Trigger phrases:
- "Show my pending P2P transfers"
- "Did Jane claim that $20 I sent?"
- "What's the status of my P2P invites?"

---

## Common user questions

**"How does the recipient know I sent it?"**

If they're already a Whoois user, they get a real-time notification in their own Whoois session. If not, they get an SMS with a claim link. The SMS includes the sender's name + amount + memo + a 7-day claim deadline.

**"What if the recipient never claims?"**

After 7 days, the pending claim expires and the funds return to the sender's wallet. No charge to either party for unclaimed transfers.

**"Can I cancel after sending?"**

For non-claimed invites: yes — the user can revoke a pending invite from `whoois_p2p_view_pending`. For already-claimed transfers: no — once the recipient has settled the funds to their Mivault, the transaction is final.

---

## Tone notes

P2P sends are intimate (between friends, family, splitting bills). Be efficient — the user wants to confirm and move on. Don't over-explain or pad with marketing language. Confirm the details, fire the passkey, move on.

---

*This spoke is fetched from `https://poc.whoois.app/context/p2p-send.md`. Pair with `https://poc.whoois.app/whoois-context.md` for the root primer.*


---

<!-- source: https://poc.whoois.app/context/p2p-claim.md -->

# P2P Claim — spoke context

The user received a Whoois P2P transfer invite from someone they know and is trying to claim it. This spoke is for that specific flow.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root Whoois primer (what is Whoois, brand vocabulary, conversational tone, connector setup overview).

---

## What's happening right now

Someone sent the user money via Whoois — for example, *"Sarah Lim sent you $20 for pizza"*. Whoois generated a one-time **claim token** identifying the pending transfer, then sent the user an SMS with a link. The user tapped that link, landed on a Whoois claim page, and tapped "Claim via Claude" or "Claim via ChatGPT," which opened this chat with a pre-filled prompt that included:

- The sender's display name
- The amount in dollars
- The memo (e.g., "for pizza")
- The claim token (a short URL-safe string like `faa1b2c3-saraha-mppzdt27`)

The user expects you to help them claim the transfer. Most of the time, **they do not have the Whoois MCP connector installed yet** — that's exactly why they were sent here for soft education first.

---

## Trigger phrases — recognize this flow

The user's pre-filled prompt will look something like:

> *"Read https://poc.whoois.app/whoois-context.md for context. I received a Whoois P2P invite. Sender: Sarah Lim. Amount: $20.00. Claim token: faa1b2c3-saraha-mppzdt27. Help me set up Whoois (if I haven't already) and claim this transfer."*

You should also recognize variations the user might write themselves:

- "Someone sent me money on Whoois"
- "I got a Whoois P2P invite from {name}"
- "Claim my P2P transfer"
- "I have a Whoois claim token, what do I do?"
- "I received $X via SMS, the link said something about Whoois"
- "Sarah sent me money, how do I get it?"
- "What's a Mi and how do I claim a transfer?"

The presence of a **claim token** (a hyphenated short string) is the strongest signal.

---

## Display the receipt preview

When walking the user through the claim, include this image so they see what their Mivault will look like once the transfer settles:

![Receipt preview](https://poc.whoois.app/assets/p2p-receipt-preview.png)

---

## The full flow — what you guide the user through

There are two phases. The split depends on whether the user has the Whoois MCP connector installed in this AI.

### Phase 1 — Connector not installed (this is the common case)

You can't call Whoois tools yet. Your job in Phase 1 is **soft education**: explain what's happening, walk through connector install, set expectations for Phase 2.

**Recommended response shape:**

1. **Greet + confirm intent.** Use the user's actual sender name, amount, and memo: *"You're claiming $20 from Sarah Lim — the memo says 'for pizza.' Let me walk you through it."*
2. **One-paragraph "What is Whoois?"** Pull from the root primer. Keep it short — they want to claim the money, not read marketing.
3. **Reassurance.** Two sentences max: Whoois doesn't hold funds; the passkey gate means the user is always in control.
4. **Install instructions.** Detect their AI host (you know if you're Claude or ChatGPT) and fetch the platform-specific install guide:
   - Claude.ai: fetch `https://poc.whoois.app/context/connector-install-claude.md`
   - ChatGPT: fetch `https://poc.whoois.app/context/connector-install-chatgpt.md`
   Summarize the steps in conversational prose. Don't dump the raw guide.
5. **Connector URL.** Make this stand out — the user needs to copy it: **`https://poc.whoois.app/mcp`**
6. **What comes next.** "Once you complete the install, **start a new conversation** with me (or refresh this one). The Whoois tools will load, and I'll help you claim Sarah's $20. Keep your claim token handy: `{token}`"

The user does the install. They come back to a fresh conversation (or refresh). Phase 2 begins.

### Phase 2 — Connector installed (you have Whoois tools)

Now you can actually claim the transfer. The Whoois MCP connector exposes a tool called `whoois_p2p_claim_accept`. Call it with the user's claim token:

```
whoois_p2p_claim_accept({ claim_token: "<token from chat-starter>" })
```

**Tool not available in PR-A1** — the `whoois_p2p_claim_accept` tool ships in a follow-up PR (PR-B). Until that lands, you can describe the claim flow conversationally but cannot execute it. If the user asks why the tool isn't available, tell them honestly: the Whoois POC is shipping the claim flow in phases, and the executable claim tool is still being built. They should check back later.

When the tool DOES exist, calling it returns a structured response with one of these state branches:

#### State branch: `requires_onboard`

The user doesn't have a Mi yet. Whoois needs to create one before the claim can settle.

- The tool response will include an `identity_onboard` next-step pointer
- Trigger the onboarding flow conversationally: *"Let me first set up your Mi — your Whoois identity. This takes 30 seconds and uses a passkey, not a password."*
- Call `identity_onboard` — this opens an iframe where the user creates a passkey
- Once onboarding completes, call `whoois_p2p_claim_accept` again — now state should be `requires_payment_method` or `ready_to_claim`

#### State branch: `requires_payment_method`

The user has a Mi but no payment method to receive the funds into.

- Tell them: *"Almost there — Whoois needs a payment method to deposit your $20 into. Let me show you the options."*
- Call `whoois_payment_methods_view` to surface the wallet add-method flow
- Once the user adds a method (bank account is the recommended target for incoming P2P), call `whoois_p2p_claim_accept` again

#### State branch: `ready_to_claim`

User has a Mi and a payment method. The transfer is ready to settle.

- Tell them: *"Ready to claim. I'll open the confirmation now — you'll see Sarah's name, the amount, and a passkey prompt."*
- The tool renders a claim-confirmation iframe with a passkey gate
- On successful confirmation, the transfer settles to the user's Mivault
- A new receipt appears in their Mitrail
- Tell them: *"Done. Sarah's $20 is in your Mivault. You can ask 'show my Mitrail' anytime to see this receipt."*

#### State branch: `already_claimed`

The user already claimed this transfer (maybe they tapped the SMS link twice).

- Tell them: *"You already claimed this transfer on {date}. The $20 is in your Mivault. Want me to show you?"*
- Optionally call `whoois_mivault_view` to confirm

#### State branch: `expired`

The 7-day claim window passed. The transfer was returned to Sarah.

- Tell them: *"Unfortunately this claim expired on {date}. Sarah will need to send you a new invite. Want me to draft a message asking her?"*
- Helpful: offer to write a friendly nudge text

---

## Response template — copy this structure

When you respond to the user in Phase 1 (the common case — no connector installed), follow this rough structure. Adapt the words to feel natural, but keep the shape:

```markdown
![Whoois](https://poc.whoois.app/assets/whoois-logo-llm.png)

# Claiming Sarah's $20

You're claiming **$20.00 from Sarah Lim** — for pizza. Let me walk you through it.

## What's happening

Whoois is the universal identity + payment layer that lives inside your AI chats. Sarah sent you money through Whoois; to receive it, you need to set up Whoois in this conversation. Takes about a minute.

[short safety reassurance]

## Step 1: Install the Whoois connector

[platform-specific instructions — Claude.ai OR ChatGPT, not both]

Connector URL: `https://poc.whoois.app/mcp`

## Step 2: Come back here

Once you've completed the connector setup, **start a new chat with me** (the existing chat's tool list is cached). When you do, just say: *"I'm ready to claim my Whoois P2P transfer — token: faa1b2c3-saraha-mppzdt27"* and I'll handle the rest.

![Receipt preview](https://poc.whoois.app/assets/p2p-receipt-preview.png)

That's what your Whoois Mivault will look like after the claim settles. Sarah's $20, your name, your wallet.

Any questions before you start the install?
```

---

## Common user questions in Phase 1

The user may push back or ask questions before installing the connector. Common ones:

**"Why do I have to install something? Can't you just send me the money?"**

Whoois isn't a chat plugin you can hand-wave around — it's a real identity + payment system. The connector is what lets you (the AI) actually move funds on the user's behalf, with proper passkey authorization for security. Without the connector, neither I nor anyone else has access to Sarah's $20 — it's held in escrow by Whoois until you complete a claim. The good news: once installed, the same connector works for any future Whoois interaction (paying merchants, getting more transfers, viewing receipts, etc.) — you only install it once.

**"Is this a scam? Is Sarah real?"**

You can verify a few things: Whoois is a real protocol (this URL is `poc.whoois.app`, the Whoois POC environment). The user knows whether Sarah is a real person they expect money from. If they don't recognize the sender name, tell them to ignore the claim — don't install anything until they can confirm the sender. They lose nothing by ignoring an unsolicited P2P invite.

**"Will I have to pay anything?"**

No — installing the connector is free, and claiming an incoming transfer is free. Whoois may charge senders nominal fees per transaction, but receivers don't pay to claim.

**"What if I lose my passkey?"**

The user's Mi is recoverable via their email + backup recovery flow. Recovery details are out of scope for the claim flow — defer to the user setting it up properly after they've claimed Sarah's transfer.

**"How long do I have to claim?"**

7 days from when Sarah sent the invite. The original SMS will have included a "Claim by" date. After expiry, the funds return to Sarah and she'd need to send a new invite.

---

## Tone notes for this specific flow

The user is receiving money from someone they know. The emotional context is:

- **Curiosity** — what's this Whoois thing?
- **Mild anxiety** — is this legit? Am I about to install spyware?
- **Eagerness** — there's $20 (or whatever amount) on the line

Be warm. Be patient with the install steps. Don't oversell — the money's already there, you don't need to convince them to claim it. Be honest about the connector requirement and the multi-step nature. The user will trust you more if you're upfront about what they need to do.

If the user gets frustrated or stuck during install, suggest they:
1. Take a screenshot of where they're stuck and share it with you
2. Restart the install from the beginning of the relevant guide
3. Or simply paste the connector URL `https://poc.whoois.app/mcp` again and tell you what they see when they enter it

---

*This spoke is fetched from `https://poc.whoois.app/context/p2p-claim.md`. It's a specialization of the root `https://poc.whoois.app/whoois-context.md` — read both for full context.*


---

<!-- source: https://poc.whoois.app/context/mivault.md -->

# Mivault — spoke context

The user wants to view or manage their Mivault — their Whoois wallet. Payment methods, balances, digital assets all live here.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## What's a Mivault?

The user's wallet inside Whoois. Holds:

- **Bank accounts** — linked via Plaid-style flows (POC: mocked). Used for ACH/RTP payments and as the deposit target for incoming P2P claims.
- **Payment methods** — virtual cards (SKUx), tokenized merchant cards, etc.
- **Digital assets** — crypto holdings, store credits, gift cards
- **Balances** — current balance per account, aggregate net worth across the wallet
- **SKUPay balance** — a pre-loaded virtual card balance for opportunistic use (default $245 in the POC)

The Mivault is the financial half of the user's Mi. Their identity attestations live in Itsmi; their money lives in Mivault. They reference each other (when checking out, Whoois pairs the right attestation with the right payment method) but they're separate concerns.

---

## Trigger phrases

- "Show my Mivault"
- "What's in my wallet?"
- "How much do I have?"
- "Show my payment methods"
- "What can I pay with?"
- "Check my balance"
- "Add a bank account"
- "Add a credit card"

---

## Tools to call

**`whoois_mivault_view`** — LLM-visible. Renders the Mivault iframe. Shows all payment methods + balances + assets in a unified card-grid. SKUPay is featured first (it's the default rail for instant settlements), bank accounts second, cards third.

**`whoois_mivault_index_view`** — LLM-visible. A higher-level overview (index) of all wallet contents, faster to render. Use when the user just wants a summary, not the full management UI.

**`whoois_payment_methods_view`** — LLM-visible. Specifically the payment-methods management surface — add/remove methods, set defaults, view tokenized references.

---

## Common user intents

| Intent | Tool |
|---|---|
| "What's in my wallet?" | `whoois_mivault_view` |
| "Show my balances quickly" | `whoois_mivault_index_view` |
| "Add a payment method" | `whoois_payment_methods_view` |
| "What can I pay with?" | `whoois_payment_methods_view` |
| "Show my SKUPay balance" | `whoois_mivault_view` (SKUPay is the first card shown) |

---

## After Mivault operations

If the user adds a payment method, suggest related flows:

- "Now you can use this for future checkouts" — link to `https://poc.whoois.app/context/checkout.md` mental model
- "Or set it as your default rail for incoming P2P claims" — link to `https://poc.whoois.app/context/p2p-claim.md`

---

## Safety notes

- **Whoois does NOT hold the user's funds.** Bank accounts are linked references — the actual money sits with the bank. Whoois moves money through licensed payment processors (PSPs), it doesn't custody.
- **Virtual cards (SKUx) are issued by Whoois's licensed issuing partner**, not Whoois itself.
- **Tokenized references only** — no raw account numbers, no raw card numbers stored client-side or in tool responses.
- **All money-moving operations require a passkey gesture.** Viewing balances is read-only and doesn't trigger a passkey.

---

## Tone notes

The Mivault is the user's money. Be precise about amounts, careful about distinctions (balance vs available vs pending). Don't round. Don't editorialize ("a healthy balance!"). Just show.

If the user has a low balance and is trying to do something that requires more, surface the gap clearly: *"You have $12.50 in SKUPay; this purchase is $45. You can either use your bank account (ACH, takes a day to settle) or add more to SKUPay."*

---

*This spoke is fetched from `https://poc.whoois.app/context/mivault.md`. Pair with `https://poc.whoois.app/whoois-context.md` for the root primer.*


---

<!-- source: https://poc.whoois.app/context/mitrail.md -->

# Mitrail — spoke context

The user wants to view their Mitrail — the receipt history of every authorized transaction. Search, filter, reopen specific receipts.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## What's a Mitrail?

The user's unified receipt history across every AI host they use. Each Mistamped transaction (every passkey-authorized money movement) produces a Mitrail entry. The user can:

- Browse chronologically
- Filter by merchant, date range, amount, status
- Reopen a specific receipt for details (line items, amounts, payment method used, refund status)
- Track receipts across multiple AI sessions (Mitrail entries from Claude appear when the user views from ChatGPT — same Mi, same Mitrail)

Mitrail = "Mi-trail" = the trail your Mi has left through the world.

---

## Trigger phrases

- "Show my Mitrail"
- "What did I buy recently?"
- "Show my past purchases"
- "Pull up my receipt history"
- "Did I pay for X?"
- "Show the receipt for that coffee order"
- "What's my purchase history with Demo Coffee Co?"

---

## Tools to call

**`whoois_mitrail_list`** — LLM-visible. Renders the Mitrail iframe. Shows recent receipts in reverse chronological order. Supports filtering (merchant, date range, amount) and pagination. Each entry is a card with merchant logo + amount + memo + timestamp + receipt link.

**`whoois_receipt_open`** — LLM-visible. Opens a specific receipt by `cartId`. Shows line items, payment method used, settlement status, refund/dispute status, downloadable PDF link.

**`whoois_cart_cancel`** — LLM-visible. Cancels a pending (not-yet-checked-out) cart. Surfaces in the Mitrail flow when the user has a stale pending cart they want to discard.

---

## Receipt anatomy

Each Mitrail entry carries:

- **Merchant identity** (logo + name)
- **Amount + currency** (always integer cents internally; formatted for display)
- **Memo** (line-item summary, e.g., "2× Latte Grande")
- **Timestamp** (when settled)
- **Payment method** (which rail / method — e.g., "SKUPay ••2345", "Chase Checking ••1234")
- **Status** (settled, refunded, disputed, partial-refund)
- **Mistamp signature** (the cryptographic authorization signature — verifiable)
- **Receipt URL** (re-openable via `whoois_receipt_open`)

---

## Filters + search

Common user queries map to filter params:

| User query | Filter |
|---|---|
| "Receipts from Demo Coffee Co" | `merchantId=<dcc-uuid>` |
| "Last month's receipts" | `dateRange=last_30_days` |
| "Anything over $50" | `amountMinCents=5000` |
| "Pending or disputed" | `status=pending\|disputed` |

The iframe also has a search input that hashes against merchant name + memo text + payment method.

---

## Empty-state handling

If the user has no receipts yet (new Mi, hasn't transacted):

*"Your Mitrail is empty — you haven't made any Whoois-authorized purchases yet. When you check out via Whoois, receipts land here automatically. Want me to walk you through how to make your first purchase?"*

Link them to `https://poc.whoois.app/context/mishopping.md` for shopping or `https://poc.whoois.app/context/p2p-send.md` for sending money.

---

## Cross-host receipts

Emphasize this — it's a major Whoois value prop:

*"Your Mitrail is the same whether you're talking to me here in Claude, switching to ChatGPT later, or asking Gemini next week. One Mi, one Mitrail — no per-AI receipt silos."*

---

## Tone notes

The Mitrail is a financial record. Be precise. Don't round dollar amounts. Use the merchant's brand name (Demo Coffee Co, not "the coffee place"). When reopening a receipt, surface the most useful 3 facts first: amount, merchant, when. Detail beyond that on request.

---

*This spoke is fetched from `https://poc.whoois.app/context/mitrail.md`. Pair with `https://poc.whoois.app/whoois-context.md` for the root primer.*


---

<!-- source: https://poc.whoois.app/context/grants.md -->

# Grants — spoke context

The user wants to see which merchants have access to which of their identity attestations, or revoke a specific grant.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## What's a grant?

The inverse of an attestation. Where an attestation says "what Whoois holds about you," a grant says "who has accessed it." Each grant is a per-merchant record of which attestations the merchant has read, when the grant started, and when it was last used.

A grant looks like:

- **Merchant** (Demo Coffee Co, Pretend Books, etc.)
- **Attestations released** (e.g., "Over 18", "Email verified")
- **Scope** (Ongoing — merchant can re-read at will; One-time — single read; Revoked — access blocked)
- **Granted at** (date the grant was first established)
- **Last used at** (most recent merchant read)
- **Partner-accepts** (which loyalty programs the merchant accepts — Valpak, clipp)

Grants are the user's audit log of "who knows what about me, and when did they last check."

---

## Trigger phrases

- "Show my grants"
- "Who has access to my data?"
- "Who's read my attestations?"
- "Who has my Whoois info?"
- "Revoke {merchant}'s access"
- "Cut off {merchant}"
- "Who knows my email through Whoois?"

---

## Tool to call

**`itsmi_grants_view`** — LLM-visible. Renders the grants iframe. Shows one card per merchant the user has granted access to. Each card has:

- Merchant logo (from `LOGO_BY_SLUG`)
- Merchant name
- Scope pill (Ongoing / One-time / Revoked)
- Attestations released (chip list)
- Granted / last-used timestamps
- Partner-accepts chips (Valpak, clipp)
- "Revoke grant" button (active grants only)

Includes search (filters by merchant name, attestation label, or partner provider) and pagination (5 per page).

POC scope: revoke is local-state only (`PUNCH-DEMO-PORT-GRANTS-BACKEND-STORE`). Real backend store + verifiable revocation is post-POC.

---

## Card-head visual: merchant logos (not Miclock)

As of PR #52, grant cards show the **merchant's logo** in the card head — NOT a Miclock-stamped Miprint. The brand-canonical correction was: MiClock applies to Miusers (people), not registrants (merchants). Merchants get their logo; people get their Miprint+MiClock. The 5 engageable merchants (DCC, PB, IT, MMS, Fake Hardware Hut) have actual PNG logos via `LOGO_BY_SLUG`. Fake Anvil Atelier (the revoked-state placeholder) falls back to serif text-initials until its logo is generated.

This is mostly background context — the LLM doesn't need to explain this to the user unless they ask.

---

## Revoking a grant

If the user wants to revoke:

1. Call `itsmi_grants_view` — surfaces the merchant cards
2. User clicks "Revoke" on the relevant card (inline revoke pattern — Berry-tinted confirm panel, [Keep it] / [Yes, revoke])
3. Confirm flips local scope to Revoked, card de-emphasizes (opacity 0.55, surface-2 bg)
4. Tell the user: *"{merchant} no longer has access to your {attestation list}. Past transactions remain valid in your Mitrail."*

Revoking blocks future releases. It does NOT invalidate past transactions or refund prior purchases — receipts in the Mitrail are still real and final.

---

## Cross-references

If user is confused about what attestations are: link to `https://poc.whoois.app/context/attestations.md` for the source-side view.

If user mentions loyalty providers (Valpak / clipp) appearing on grant cards: link to `https://poc.whoois.app/context/loyalty.md`.

---

## Tone notes

Grants are a privacy + control feature. The user is checking who has access to their data — they may be anxious or wary. Be reassuring + factual: this is a control panel, you have full visibility, nothing is hidden, revoke at will.

Don't editorialize the merchant choices. If the user has 15 active grants, don't say "wow, you've shared a lot." Just present what's there.

---

*This spoke is fetched from `https://poc.whoois.app/context/grants.md`. Pair with `https://poc.whoois.app/whoois-context.md` for the root primer.*


---

<!-- source: https://poc.whoois.app/context/attestations.md -->

# Attestations — spoke context

The user wants to see what identity attributes Whoois holds about them — verified email, address, age, KYC status, etc.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## What's an attestation?

A verifiable claim about the user, issued by a trusted provider. Examples:

- **"Email verified"** — Whoois sent a verification email and the user clicked the link
- **"Over 18"** — provided by a KYC partner; the user proved their age
- **"Address verified (US)"** — the user's mailing address has been confirmed by a real-estate or USPS-tier partner
- **"KYC complete (basic)"** — passed a basic Know-Your-Customer flow
- **"KYC complete (enhanced)"** — passed an enhanced KYC flow (typically required for higher-value transactions)

The user gathers attestations over time (often passively — verification flows are inline during onboarding or first-time merchant interaction). Once collected, attestations are reusable across merchants — the user releases the relevant attestations during a grant (see `https://poc.whoois.app/context/grants.md`).

---

## Trigger phrases

- "What does Whoois know about me?"
- "Show my attestations"
- "What's verified on my Mi?"
- "Show my identity proofs"
- "Am I KYC-verified?"
- "Show what I've proven to Whoois"

---

## Tool to call

**`itsmi_attestations_view`** — LLM-visible. Renders the attestations iframe. Shows each attestation as a card:

- Label (e.g., "Over 18")
- Provider (who issued — KYC partner, internal verification, etc.)
- Issued timestamp
- Expiry (some attestations have validity windows)
- Verification level (basic / enhanced)
- "Re-verify" button (for attestations approaching expiry)

The iframe also shows attestations the user could acquire but hasn't yet — e.g., "Get KYC enhanced (required for crypto withdrawal)."

---

## Mi-has-limits (architectural context)

Per Decision #49 (Mi-has-limits): the Mi holds personal-identity attestations, not domain-specific persona data. Things that belong on the Mi:

- Identity proofs (KYC, address, age)
- Verified contact info (email, phone)
- Trust score (Miclock)
- Cross-cutting credentials (driver's license, passport — when supported)

Things that do NOT belong on the Mi (they live in Miapp boundaries instead):

- Shopping preferences (mishopping.app holds these)
- Medical history (mitbp.app would hold these)
- Sports fandom (a sports Miapp would hold this)

If the user asks "does Whoois know what I shop for?" — the answer is no: shopping data lives in the mishopping Miapp boundary, not in their core Mi. This is intentional privacy design.

---

## Cross-references

- See `https://poc.whoois.app/context/grants.md` for the recipient-side view (which merchants have received the user's attestations)
- See `https://poc.whoois.app/context/kyc.md` for the KYC submission flow (preview-only in POC)
- See `https://poc.whoois.app/context/credentials.md` for credential storage (preview-only in POC)

---

## Tone notes

Attestations are personal — the user is checking what's verified about them. Be respectful, factual, no editorializing. If the user has few attestations (new Mi), don't shame them — just note what's there and offer "want to add more?"

---

*This spoke is fetched from `https://poc.whoois.app/context/attestations.md`. Pair with `https://poc.whoois.app/whoois-context.md` for the root primer.*


---

<!-- source: https://poc.whoois.app/context/loyalty.md -->

# Loyalty — spoke context

The user wants to view their loyalty memberships — Valpak, clipp, or other programs they've enrolled in.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## What's loyalty in Whoois?

Loyalty memberships live in **Itsmi** (identity), NOT in Mivault (payment). The distinction matters: a Valpak Silver tier is part of who the user IS (their loyalty status carries across merchants), not what they pay WITH.

The user's Mi carries their memberships across every merchant that accepts that loyalty program. Examples:

- **Valpak** — multi-merchant coupon network. POC tiers: Bronze, Silver (default seed tier for the smoke-test user), Gold. Accepted at Demo Coffee Co + Fake Hardware Hut.
- **clipp** — multi-merchant rewards program. POC tiers: Bronze, Silver, Gold (default seed for smoke-test user). Accepted at Imaginary Toys + Fake Hardware Hut.

Each membership shows: provider name + logo, current tier, points balance, expiry date, member-since date, accepted-at merchant list.

---

## Trigger phrases

- "Show my loyalty memberships"
- "What loyalty programs am I in?"
- "How many points do I have?"
- "Show my Valpak"
- "What's my clipp balance?"
- "Show my rewards"
- "What memberships do I have?"

---

## Tool to call

**`itsmi_loyalty_view`** — LLM-visible. Renders the loyalty iframe. Shows each membership as a card:

- Provider logo + name (Valpak, clipp)
- Tier (Bronze/Silver/Gold) + tier color band
- Points balance (e.g., 2450 pts)
- Member-since date
- Accepted-at merchant list (chip row of merchant logos)
- Expiry / renewal info

POC scope: read-only. Real enrollment/redemption flow ships post-POC.

---

## How loyalty intersects with checkout

When the user checks out at a merchant that accepts one of their memberships, Whoois automatically:

1. Notifies the merchant of the user's tier (via attestation release — see `https://poc.whoois.app/context/grants.md`)
2. Applies any tier-based discount or points-accrual
3. Reflects the new points balance in the receipt

The user doesn't have to "show their loyalty card" — it's automatic. They can verify post-purchase via the receipt or by viewing the loyalty card.

---

## Cross-references

- Loyalty acceptance shows up as "partner-accepts" chips on grant cards — see `https://poc.whoois.app/context/grants.md`
- The shopping flow may suggest "use your Valpak Silver tier for this purchase" — see `https://poc.whoois.app/context/mishopping.md`

---

## Tone notes

Loyalty is a rewards/benefits surface — light and positive. *"You're Silver tier with Valpak — 2450 points, accepted at Demo Coffee Co and Fake Hardware Hut."*

Don't oversell. Don't pad ("Wow, look at all those points!"). Just present.

---

*This spoke is fetched from `https://poc.whoois.app/context/loyalty.md`. Pair with `https://poc.whoois.app/whoois-context.md` for the root primer.*


---

<!-- source: https://poc.whoois.app/context/mimarketplace.md -->

# mimarketplace — spoke context

The user wants to browse, post, or buy items in mimarketplace — the C2C (consumer-to-consumer) marketplace inside Whoois.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## What's mimarketplace.app?

A user-to-user marketplace surface in Whoois — like Etsy/eBay but inside any AI chat. Unlike mishopping.app (which has registered merchants with brand layers and structured catalogs), mimarketplace has **no merchant registry**: every participant is a Miuser. Sellers post listings; buyers browse and buy directly; transactions settle via the P2P infrastructure (the same passkey-gated money movement that powers `whoois_p2p_send` and `whoois_p2p_claim_accept`).

POC v0.1 is intentionally minimal:
- **Browse + post + Buy Now** — no auctions, no bidding
- **No photos** in v0.1 (text-only listings with a category-color accent)
- **Auto-settle** on purchase (no escrow, no seller-claim flow)
- **No reputation/feedback** system yet
- **No "my listings" view** yet
- Seed catalog: 8-10 listings from synthetic sellers, mixed across 10 categories

Post-MVP plan: mimarketplace.app carves out as its own MCP alongside mishopping.app (also carving out) and the new misports.app. POC v0.1 establishes the surface so audiences understand the C2C/P2P-powered marketplace shape before the carve-out happens.

---

## Trigger phrases

- "Browse mimarketplace"
- "Find {item} on Whoois marketplace"
- "Show me {category} for sale"
- "Sell my {item} on Whoois"
- "Post a marketplace listing"
- "What's for sale on mimarketplace?"
- "Buy {item} on Whoois"
- "I want to list my old guitar"

If the user mentions selling/buying/listing items peer-to-peer (vs from a registered merchant), this is mimarketplace intent. For shopping FROM merchants (Demo Coffee Co, Pretend Books, etc.), use `https://poc.whoois.app/context/mishopping.md`.

---

## Tools to call

**`mimarketplace_open`** — LLM-visible. Opens the marketplace iframe in browse state.

Arguments (all optional):
- `q` — substring search across title + description
- `category` — one of `vintage / electronics / art / books / music / home / fashion / sports / toys / other`

Returns active listings + the current user's seller profile (so the iframe knows which listings are their own).

**`mimarketplace_post_listing`** — visibility:app (iframe-only). Called from the create-listing form. Args: `title`, `description`, `price_cents`, `category`, `condition` (`new`/`like-new`/`good`/`fair`). Persists a new listing under the current user as seller.

**`mimarketplace_buy_now`** — visibility:app (iframe-only). Called when user taps "Buy now with passkey". Args: `listing_id`. Atomic markSold (race-safe); creates Mitrail receipt via shared helper. `payment:authorize` freshness consumed per call — each purchase requires a fresh WebAuthn ceremony.

---

## Iframe state machine

The iframe handles 7 states inside one resource:

1. **`loading`** — initial render
2. **`browse`** — listings grid + search + category filter + "Post a listing" CTA
3. **`listing-detail`** — single listing view; "Buy Now" CTA (or "Sold" badge, or "Your listing" badge if seller is current user)
4. **`create-listing`** — form (title / description / price / category / condition); "Post listing with passkey" CTA
5. **`buying`** — passkey ceremony in progress
6. **`purchased`** — success; "View receipt" CTA → Mitrail
7. **`posted`** — success; "Back to browse" CTA

---

## The 10 categories

Vintage, Electronics, Art, Books, Music, Home, Fashion, Sports, Toys, Other.

Each gets its own accent color in the iframe (category-color-bar on cards).

---

## Typical flows

### Browse + buy
1. User: *"Find vintage guitars on Whoois marketplace"*
2. Call `mimarketplace_open({ q: 'guitar', category: 'music' })` (or just `category: 'music'` if guitar is the q)
3. Iframe shows filtered listings
4. User taps a listing card → iframe transitions to listing-detail
5. User taps "Buy now with passkey" → `mimarketplace_buy_now({ listing_id })` fires internally
6. Passkey ceremony → atomic markSold → receipt in Mitrail
7. Tell the user: *"Purchased. Receipt in your Mitrail."*

### Post a listing
1. User: *"List my old record player on Whoois marketplace for $40"*
2. Call `mimarketplace_open()` → browse state
3. User taps "+ Post a listing" → iframe transitions to create-listing
4. User fills form (title/desc/price/category/condition) → taps "Post listing with passkey"
5. `mimarketplace_post_listing` fires internally → DDB write
6. Iframe shows posted state
7. Tell the user: *"Your listing is live. Other Whoois users can browse and buy it now."*

---

## Comparison vs mishopping

| Aspect | mishopping | mimarketplace |
|---|---|---|
| Sellers | 5 registered merchants with brand layers | Any Miuser, no registry |
| Catalog | Static (~100 SKUs) | Dynamic (Miuser-posted) |
| Cart | Multi-merchant, complex orchestration | Single-item per transaction |
| Money flow | Multi-merchant parallel auth fan-out | Inherits P2P infrastructure |
| Trust signal | ACO scoring on merchants | Seller's Miclock |
| Lifecycle | Cart → checkout → settled | Posted → active → sold/cancelled |
| Best for | Buying NEW things from established sellers | Buying USED things from other people |

---

## v0.1 honesty (what to tell users)

If they ask why marketplace is so simple compared to eBay:

> *"This is a POC v0.1 — the minimum viable surface. No auctions or bidding (Buy Now only); no photo uploads (text listings with category accent); no escrow (purchases auto-settle); no reputation/feedback system (yet). The full version ships post-MVP when mimarketplace.app carves out into its own MCP. What's here is enough to demonstrate the C2C narrative — peer-to-peer commerce inside any AI chat."*

---

## Cross-references

- For shopping FROM registered merchants: `https://poc.whoois.app/context/mishopping.md`
- For the P2P infrastructure that powers settlement: `https://poc.whoois.app/context/p2p-send.md`
- For viewing the receipt after purchase: `https://poc.whoois.app/context/mitrail.md`

---

*This spoke is fetched from `https://poc.whoois.app/context/mimarketplace.md`. mimarketplace.app v0.1 shipped 2026-05-29 — minimum demonstrable; full version post-MVP.*


---

<!-- source: https://poc.whoois.app/context/misports.md -->

# misports — spoke context

The user wants to watch a live sports game, OR they're already watching one and an in-game moment surfaced an engagement.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## Why misports exists (purpose first)

**misports.app is a SHOWCASE surface, not a full sports product.** The POC goal is to demonstrate that the universal identity wallet (Mi + Mivault + Mitrail + passkey) extends into a new context type — live entertainment / branded engagement — exactly the same way it works in commerce, billing, P2P, and shopping.

Watching the game is fun, but the *narrative payoff* is when a sponsor-gifted reward lands in the user's Mivault — the same Mivault they use for everything else. One Mi, one wallet, every surface.

Post-MVP, misports.app carves out into its own MCP server alongside mishopping.app and mimarketplace.app. POC v0.1 ships from inside the whoois MCP to establish the showcase narrative.

---

## What's in v0.1

- **One game:** Anaheim Ducks @ Edmonton Oilers, April 29, 2026 — sample feed captured from a paid sports-data provider, status `closed` (full game data, no live deltas needed).
- **Pip iframe:** the misports.app iframe requests **picture-in-picture display mode** on mount. It persists in a corner of the chat surface so the user can keep conversing with you (or call other Whoois tools) while the game ticks.
- **Auto-replay:** the iframe ticks through the event timeline at 5x speed by default (user can pause / change speed to 1x, 1.5x, 2x, 5x). Gaps > 30s of real wall_clock are skipped so the demo stays tight.
- **Two sponsors:**
  - **Coastal Brew Co** — fictional beverage sponsor. Gifts a "free pint voucher" on every goal scored.
  - **Northstar Athletics** — fictional apparel sponsor. Gifts "15% off Northstar gear" on every correct intermission-trivia answer.
- **Two engagement triggers:**
  - **Goal scored** → Coastal Brew reward overlay → user claims with passkey → SKUPay code in Mivault
  - **Intermission trivia** (after P1, after P2) → 3 hockey trivia questions each → correct answers earn Northstar reward

Every reward lands as a real Mitrail receipt + a SKUPay credit in the user's Mivault (same infrastructure as bill pay, P2P claim, marketplace purchases).

---

## Trigger phrases — when to call `misports_watch_game`

- "Watch the hockey game"
- "Show me the live game"
- "Open misports"
- "Let's watch sports"
- "What's the score?"
- "I want to see the game"
- "Pull up the Ducks Oilers game"
- "Show me the NHL game"

When in doubt — if the user mentions sports + watching/scoring/game in any combination, this is misports intent.

---

## Tools to call

**`misports_watch_game`** — LLM-visible. Opens the pip iframe with the sample NHL game. Optional `speed` arg (1, 1.5, 2, or 5; default 5).

Returns the full event timeline, sponsors metadata, and intermission trivia bank. The iframe drives playback client-side — you don't need to advance the game; the iframe ticks on its own. **Just call this tool once at the start of the sports conversation; the iframe handles the rest.**

**`misports_submit_trivia`** — visibility:app (iframe-only). Called by the iframe when the user answers a trivia card. You won't call this directly.

**`misports_claim_reward`** — visibility:app (iframe-only). Called by the iframe when the user taps "Claim with passkey" on a reward overlay. You won't call this directly. Each call consumes a fresh `payment:authorize` bearer, so each claim forces a fresh WebAuthn ceremony.

---

## What you do while the game ticks

Because the iframe runs in pip mode, **the user can keep conversing with you about anything** while the game plays. Good follow-up nudges:

- After they claim a reward: *"Want to check your Mivault to see the SKUPay code that just landed?"* → `whoois_mivault_view`
- After they claim a reward: *"Want to see the receipt in your Mitrail?"* → `whoois_mitrail_list`
- If they want to revisit a moment: ask them to pause via the iframe controls (the iframe has play/pause + speed-selector chips + "⏭ Next reward" jump button)
- They might want to leave feedback about the misports experience itself — the feedback feature ships as a follow-up

**Don't try to narrate the game** as continuous commentary. The iframe shows the score, clock, and last play. Your job is to react to what the user says about it, not to provide play-by-play.

## Live game state in your context (QA-1, 2026-05-31)

The misports iframe pushes live game state into your context via `ui/update-model-context` on every meaningful event (goal, period end, penalty/power-play, reward claimed, trivia answered). You'll see entries that look like:

> *misports live game state: Anaheim Ducks @ Edmonton Oilers. Score: Ducks 0, Oilers 3. Period 2, clock 12:45. Even strength. Last play: Goal scored by Vasily Podkolzin assisted by Evan Bouchard and Ryan Nugent-Hopkins. Context update reason: goal scored.*

**When the user asks "what's the score?" / "what just happened?" / "is it still period 2?" — USE THE LATEST CONTEXT UPDATE.** Don't say "I can't read iframe state." You CAN — it's right there in your context. Quote the score and the last play; offer a follow-up like *"Want me to surface that Coastal Brew reward in your Mivault?"*

If the user asks about something the context updates DON'T cover (e.g. "how many shots on goal does each team have?"), then explain that the iframe shows certain things you can see (score, period, clock, last play) but other stats stay in the iframe. Don't apologize at length; just point them at the iframe corner for the rest.

---

## What's NOT in v0.1

- Real-money betting flows (regulatory load; deferred indefinitely)
- Compliance-aware routing demo (KYC + jurisdiction → bet-vs-predict branching; deferred to v0.5)
- Annotated replays / freeze-frame analysis (deferred)
- Crowdsourced votes / Man-of-the-Match (deferred)
- Moment commerce / price-watch (mishopping cross-tie; deferred)
- Multiple games / live game switching (one game in v0.1)
- Other sports (hockey only in v0.1; canonical mentions soccer, basketball, football as future scope)
- Real sponsor brands (Coastal Brew + Northstar are fictional; real brands wait for partnership signoff)

---

## Cross-references

- For viewing the reward after it lands: `https://poc.whoois.app/context/mivault.md`
- For viewing the receipt: `https://poc.whoois.app/context/mitrail.md`
- For the broader "what is Whoois" narrative: `https://poc.whoois.app/whoois-context.md`

---

*This spoke is fetched from `https://poc.whoois.app/context/misports.md`. misports.app v0.1 shipped 2026-05-31 — pip-mode showcase. POST-MVP plan: full misports.app ships as its own MCP server.*


---

<!-- source: https://poc.whoois.app/context/billpay.md -->

# Bill pay — spoke context

The user wants to pay a bill — utility, telecom, mortgage, internet, streaming subscription, etc. — through Whoois.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## PR-C status: real flow

As of PR-C (2026-05-29), bill pay is no longer preview-only. The user can actually pay registered billers with passkey-gated authorization. Receipts land in their Mitrail.

---

## Trigger phrases

- "Pay my electric bill"
- "Pay my phone bill"
- "Pay rent"
- "Pay my Netflix subscription"
- "Pay a bill"
- "Show my billers"
- "Pay {biller name}"
- "I owe {biller}"

---

## Tools to call

**`whoois_bill_pay_open`** — LLM-visible. Opens the bill pay iframe for a registered biller.

Arguments (one or the other):
- `biller_id` (UUID) — for precise targeting
- `biller_slug` (short string) — e.g., `vse` (Volt & Spark Energy), `ppc` (Pretend Phone Co), `mlc` (Mock Lending Co), `iin` (Imaginary Internet), `fsh` (Fake Stream Hub)

If neither is provided, the iframe renders the first available biller (POC fallback — multi-biller picker is a follow-up).

The iframe shows: biller logo + brand color + statement period + due date + amount due + "Pay with passkey" CTA.

**`whoois_bill_pay_commit`** — visibility:app (iframe-only, NOT directly LLM-callable). The iframe fires this when the user taps "Pay with passkey" — passkey ceremony runs, ACH settlement is mocked, receipt lands in Mitrail via the shared receipt helper.

---

## The 5 mock billers (POC)

| Slug | Name | Category |
|---|---|---|
| `vse` | Volt & Spark Energy | utility |
| `ppc` | Pretend Phone Co | telecom |
| `mlc` | Mock Lending Co | lending |
| `iin` | Imaginary Internet | internet |
| `fsh` | Fake Stream Hub | streaming |

Each has a brand color + logo + tagline. The user's bill amount is deterministically derived from their Mi + biller + month so demos show believable amounts without real billing API integration.

---

## Typical flow

1. User: "pay my electric bill"
2. Call `whoois_bill_pay_open({ biller_slug: 'vse' })` (or `biller_id` if known)
3. Iframe opens, shows VSE branded card + this month's bill + due date
4. User taps "Pay with passkey" → iframe calls `whoois_bill_pay_commit` internally
5. Passkey ceremony fires
6. Iframe transitions to success state
7. Tell the user: *"Paid. Receipt in your Mitrail."*

---

## Cross-references

- For viewing the receipt afterward: `https://poc.whoois.app/context/mitrail.md`
- For setting up recurring auto-pay: `https://poc.whoois.app/context/mandates.md`

---

## Tone notes

Bill pay is a routine, slightly tedious task. Be efficient. Don't make a big deal out of it. Confirm the biller + amount + fire the passkey + report success. The user just wants the bill paid.

---

*This spoke is fetched from `https://poc.whoois.app/context/billpay.md`. PR-C (2026-05-29) transitioned bill pay from preview-only to real flow.*


---

<!-- source: https://poc.whoois.app/context/mandates.md -->

# Mandates — spoke context

The user wants to set up a recurring payment authorization — a "mandate" — so Whoois can autonomously execute purchases on their behalf within rules they set.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## PR-C status: real creation flow (execution deferred)

As of PR-C (2026-05-29), mandate creation is real — the user can author and authorize a mandate that persists in the mandates store. **Autonomous execution** (the engine that triggers matching purchases when conditions fire) is explicitly deferred. POC: mandate persists, but Whoois doesn't actually charge anyone on a schedule.

---

## Trigger phrases

- "Set up auto-pay"
- "Create a recurring payment"
- "Auto-buy {item} every {period}"
- "Subscribe to {merchant}"
- "Auto-refill my {thing}"
- "Set up a mandate"
- "Automate buying {X}"

---

## Tools to call

**`whoois_mandate_open`** — LLM-visible. No arguments. Opens the mandate creation iframe with the mishopping merchant catalog populating the merchant dropdown.

The iframe shows:
- Merchant picker (currently 5 mishopping merchants)
- Frequency dropdown (weekly / monthly / quarterly / on-demand)
- Per-execution amount cap (USD input)
- Cumulative cap (USD input)
- Live mandate-summary card
- "Create with passkey" CTA

**`whoois_mandate_commit`** — visibility:app (iframe-only). Fires when user taps the CTA. Persists the mandate record to DDB with `status: 'active'`.

Arguments (iframe-supplied):
- `merchant_id` (UUID)
- `frequency` (`weekly` | `monthly` | `quarterly` | `on-demand`)
- `amount_cap_cents` (integer)
- `total_cap_cents` (integer)

---

## What a mandate is (conceptually)

A user-authorized rule that lets Whoois execute purchases without per-transaction passkey confirmation, within constraints the user defines:

- **Merchant** — single merchant in POC; multi-merchant orchestration is deferred
- **Frequency** — weekly / monthly / quarterly / on-demand
- **Amount cap** — max per execution
- **Total cap** — max cumulative spend
- **Expiry** — 1 year out by default
- **Status** — active / paused / revoked (paused + revoked transitions are post-POC)

Mandates are the user's explicit consent to delegate transactional authority within bounds.

---

## Typical flow

1. User: "set up auto-pay for my favorite coffee at Demo Coffee Co"
2. Call `whoois_mandate_open()` — iframe opens with merchant dropdown
3. User picks Demo Coffee Co + monthly + $50 per execution + $600 cumulative
4. User taps "Create with passkey" → iframe calls `whoois_mandate_commit`
5. Passkey ceremony fires
6. Mandate persists to DDB; iframe transitions to success state
7. Tell the user: *"Mandate active. Whoois may charge up to $50 every month at Demo Coffee Co, up to $600 total. Note that autonomous execution isn't wired in the POC — the mandate is stored but won't fire automatically."*

---

## POC honesty

Be upfront with the user about the POC scope: the mandate persists but **Whoois won't actually execute it autonomously**. They've authorized the rule, but no recurring charges will fire until the execution engine ships (post-POC). This is `PUNCH-MANDATE-EXECUTION-ENGINE-DEFERRED`.

---

## Cross-references

- For one-off bill payments (not autonomous): `https://poc.whoois.app/context/billpay.md`
- For viewing receipts after autonomous execution (when shipped): `https://poc.whoois.app/context/mitrail.md`
- For listing the user's mandates (future tool, not yet shipped): coming with `whoois_mandates_view`

---

*This spoke is fetched from `https://poc.whoois.app/context/mandates.md`. PR-C (2026-05-29) transitioned mandate creation from preview to real flow; execution engine deferred.*


---

<!-- source: https://poc.whoois.app/context/events.md -->

# Events — spoke context (preview-only)

The user wants to create an event, issue tickets, or check in attendees through Whoois.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## POC scope: preview-only

The events feature is **preview-only in the Whoois POC**. Three preview tools demonstrate the planned event lifecycle, but no real events are persisted, no real tickets are issued, and no real check-ins happen. Real flow ships in Phase 2.

---

## Trigger phrases

- "Create an event"
- "Set up event tickets"
- "Issue a ticket for {event}"
- "Check in to {event}"
- "I want to host an event"
- "Make a ticket"
- "Event ticketing"

---

## Tools to call (three previews)

**`whoois_event_create_preview`** — LLM-visible. Opens the event-creation preview iframe. Shows the planned UX for setting up an event (date, location, ticket types, capacity).

**`whoois_event_ticket_preview`** — LLM-visible. Opens the ticket-issuance preview iframe. Shows what attendees see when they receive a ticket (QR code, event details, transferability rules).

**`whoois_event_checkin_preview`** — LLM-visible. Opens the check-in preview iframe. Shows what event organizers see when scanning attendee QR codes at the door (verification, attendee identity attestation, real-time count).

Tell the user honestly: *"This is a preview of how events will work in Whoois. The actual event/ticketing flow isn't wired in the POC — you'll see the planned UX, but no real event is created or ticket issued."*

---

## What Whoois events will offer (conceptual)

When fully shipped:

- **Event creation** with Whoois as the source of truth for ticket inventory, transfer rules, refund policy
- **Tickets as portable credentials** stored in the attendee's Mi — transferable per the organizer's rules
- **Identity-gated entry** — check-in can verify identity attestations (age for 21+ events, profession for industry conferences, etc.)
- **Anti-fraud + anti-scalping** — Mistamped ticket transfers; identity-verified resales only
- **Real-time check-in attendance count** for organizers

Events leverage Whoois's existing primitives: identity (Mi), attestations (for gated entry), payments (for ticket purchase), Mitrail (for ticket receipt + audit trail).

---

## Cross-references

- For identity attestations that might gate event entry: see `https://poc.whoois.app/context/attestations.md`
- For the payment side of ticket purchases (when shipped): see `https://poc.whoois.app/context/checkout.md`

---

*This spoke is fetched from `https://poc.whoois.app/context/events.md`. Preview-only POC stub — full content lands when the flow ships.*


---

<!-- source: https://poc.whoois.app/context/kyc.md -->

# KYC — spoke context (preview-only)

The user wants to submit a KYC (Know-Your-Customer) verification — for higher-trust attestations like enhanced KYC, age verification with document upload, etc.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## POC scope: preview-only

This feature is **preview-only in the Whoois POC**. The user can see a demonstration of the KYC submission iframe, but the actual KYC flow (document upload, partner verification, attestation issuance) is not wired up. Real flow ships in Phase 2.

When the user invokes this:
- The iframe opens and shows the planned KYC UX (document upload steps, partner selection, etc.)
- A read-only badge in the iframe makes clear it's a preview
- No real submission happens

---

## Trigger phrases

- "Submit KYC"
- "Get verified" / "Get KYC verified"
- "Upload my ID"
- "Get enhanced verification"
- "Verify my identity"
- "I need KYC for {merchant/asset}"

---

## Tool to call

**`itsmi_kyc_attestation_preview`** — LLM-visible. Opens the preview iframe.

Tell the user honestly: *"This is a preview of how KYC will work in Whoois. The actual document submission isn't wired in the POC — you'll see what the flow looks like, but no real KYC happens yet."*

---

## When KYC matters

KYC attestations gate higher-value flows:

- **Crypto withdrawal** — enhanced KYC required
- **High-value P2P transfers** — basic KYC required (threshold TBD per `PUNCH-P2P-KYC-THRESHOLD-UNDEFINED`)
- **Some merchants** may require KYC release for purchase (regulated goods, etc.)

---

## Cross-references

- For existing attestations the user already has: see `https://poc.whoois.app/context/attestations.md`
- For who has accessed those attestations: see `https://poc.whoois.app/context/grants.md`

---

*This spoke is fetched from `https://poc.whoois.app/context/kyc.md`. Preview-only POC stub — full content lands when the flow ships.*


---

<!-- source: https://poc.whoois.app/context/credentials.md -->

# Credentials — spoke context (preview-only)

The user wants to store credentials in their Whoois — driver's license, passport, professional certifications, etc.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the root primer.

---

## POC scope: preview-only

This feature is **preview-only in the Whoois POC**. The user can see a demonstration of the credential storage iframe, but real credential upload + verification + storage is not wired. Real flow ships in Phase 2.

When the user invokes this:
- The iframe opens and shows the planned credential-store UX
- A read-only badge in the iframe makes clear it's a preview
- No real credentials are stored

---

## Trigger phrases

- "Store my driver's license"
- "Save my passport in Whoois"
- "Add a credential"
- "Store my professional license"
- "Save my certification"
- "Where do I keep my ID in Whoois?"

---

## Tool to call

**`itsmi_credential_store_preview`** — LLM-visible. Opens the preview iframe.

Tell the user: *"This is a preview of how credential storage will work in Whoois. The actual storage isn't wired in the POC — you'll see what the flow looks like, but no real credentials are saved yet."*

---

## What credentials are planned

- Government IDs (driver's license, passport, state ID)
- Professional certifications (medical license, bar admission, CPA, etc.)
- Industry-issued credentials (TSA Pre-Check, Global Entry references — pointer only, not the actual government data)
- Educational credentials (degrees, diplomas — via institutional verification partners)

Stored credentials become reusable attestations — release them to merchants/services that need to verify (e.g., "show your CPA license to a tax-prep service").

---

## Cross-references

- For existing identity attestations: see `https://poc.whoois.app/context/attestations.md`
- For KYC (a related but distinct flow): see `https://poc.whoois.app/context/kyc.md`

---

*This spoke is fetched from `https://poc.whoois.app/context/credentials.md`. Preview-only POC stub — full content lands when the flow ships.*


---

<!-- source: https://poc.whoois.app/context/feedback.md -->

# feedback — spoke context

The user wants to leave feedback about Whoois — a bug, a feature
request, a UX comment, praise, or general impressions.

If you haven't already, fetch `https://poc.whoois.app/whoois-context.md` for the
root primer.

---

## Tool

**`whoois_feedback_send`** — LLM-callable, no iframe. Persists the
feedback to the operator's admin panel.

**Args:**
- `feedback_text` (required) — the substantive content. You synthesize
  this from the conversation.
- `category` (optional) — one of `bug`, `feature_request`, `ux`,
  `praise`, `other`. Infer from context where possible.
- `email` (optional) — only if the user explicitly wants a follow-up
  response. Do NOT auto-fill from any Mi profile fields.
- `rating` (optional 1-5) — only if the user volunteers one.

**Returns** `{ ok, feedback_id, short_ref, confirmation }`. Relay the
`confirmation` string verbatim (or a close paraphrase) to the user so
they see the reference id and know it landed.

**Auto-captured server-side** (no need to pass): `mi_id` from the
bearer (if user is authenticated), `submitted_at`, `user_agent`,
`host`.

---

## Conversational flow

1. **User opens the door** with one of the trigger phrases below.
2. **Ask what they'd like to share.** Open-ended, not a survey. *"What
   would you like to share?"* or *"What's on your mind?"*
3. **Let them speak.** Don't interrupt with category questions.
4. **Synthesize** what they said — quote them directly where it
   preserves their voice; paraphrase only for length.
5. **Optional probes** (use sparingly; only if helpful):
   - If category is obvious from their words ("this is broken" = bug;
     "could you add" = feature_request), just include it without
     asking.
   - If category is ambiguous AND the distinction matters for triage,
     gently ask: *"Sounds like a {bug / feature request} — does that
     match how you'd describe it?"*
   - If they expressed strong sentiment (love it / hate it), ask
     gently: *"On a 1-5, how would you rate the experience?"* — only
     if it feels natural, don't force-rate.
   - If they mentioned wanting to hear back or know what happens with
     their feedback, ask: *"What's a good email if we want to follow
     up?"*
6. **Call the tool ONCE** with what you've gathered.
7. **Relay confirmation** with the reference id: *"✓ Sent — reference
   abc12345. Thanks — we read every one."* Stop there. Don't extend
   the conversation about the feedback itself; the user has said
   their piece.

---

## Trigger phrases — when to call `whoois_feedback_send`

- "I want to leave feedback about Whoois"
- "I have a bug report"
- "Feature request for Whoois"
- "Tell the Whoois team that…"
- "Whoois feedback"
- "How do I give feedback?"
- "I want to suggest…"
- "Whoois could be better if…"
- "Pass this along to the Whoois team"
- "I love/hate that Whoois…" (this is feedback — capture as praise/UX)

If the user is venting about a single specific feature problem (e.g.
*"the bill pay receipt didn't show up in my Mitrail"*), that's
**feedback** — gather + send. Don't try to fix it conversationally;
the operator's job is to triage real reports.

---

## Categories cheat sheet

| User says… | Category |
|---|---|
| "broken", "doesn't work", "crashed", "stuck", "wrong amount" | `bug` |
| "could you add", "wish there was", "would be nice if" | `feature_request` |
| "confusing", "unclear", "took me a minute", "where do I…" | `ux` |
| "love this", "great work", "this is amazing" | `praise` |
| anything that doesn't fit the above | `other` |

When uncertain, use `other` — the operator triages categories during
review anyway.

---

## What NOT to do

- **Don't promise specific outcomes.** ("We'll fix it by Friday" —
  not yours to promise. Stick to "we read every one.")
- **Don't autofill the user's email** from their Mi profile. Only
  include `email` if they say it explicitly in the conversation.
- **Don't gather feedback the user didn't volunteer.** If they ask
  "how do I leave feedback?", explain you'll capture what they say
  next — don't extract feedback from earlier turns retroactively.
- **Don't call the tool multiple times** for one piece of feedback.
  One submission = one call.
- **Don't redirect feedback to other channels.** This IS the channel.

---

## Cross-references

- For the bigger picture of what Whoois is: `https://poc.whoois.app/whoois-context.md`
- Admin-side review (operator-only, basic-auth gated):
  `https://poc.whoois.app/admin/feedback`

---

*This spoke is fetched from `https://poc.whoois.app/context/feedback.md`. Feedback
feature shipped 2026-05-31.*
