Closed feature request

pup has no payment-card vault, so the AI cannot complete a checkout it has otherwise filled in

John Lauer · 2mo ago ·closed by John Lauer

What is missing

pup's credential vault stores login credentials only: credential_set, credential_list, credential_delete (HTTP Basic Auth / site passwords into the OS keychain), plus desktop_decrypt_browser_credentials for importing the user's saved browser passwords.

There is no equivalent for payment cards. A normal Chrome profile keeps cards in a separate autofill store (Web Data -> credit_cards, encrypted with the same OS key as passwords) and offers them at checkout. pup drives Chrome for Testing in a pup-managed durable profile, but exposes no way to store, list, or autofill a card.

Why it matters

This is the point at which pup stops being an assistant. Today an AI can do the entire job for the user, then stall on the last click:

Real case, 2026-09-02. John asked for a Venture Dallas conference ticket. pup opened the checkout, selected the correct $350 Entrepreneur Pass, filled first/last name, email, mobile, accepted terms, and advanced to the Stripe payment step. Then it could go no further, because there is no card. The only options were to hand the laptop back to the user or ask him to paste a card number into chat, which is worse than either alternative.

The user's framing: "pup's whole point of existing is that it can do stuff for me via the AI. Does pup store credit cards just like a normal Chrome browser does? It should."

Requested behaviour

  1. card_set / card_list / card_delete, mirroring the credential verbs. PAN + expiry + CVV into the OS keychain; card_list returns only nickname, brand, last four and expiry, never the PAN or CVV, exactly as credential_list never returns a password.
  2. Autofill a stored card into a checkout form on request, addressed by nickname (e.g. adom-amex), so the AI never handles the digits.
  3. A per-fill approval gate. A card is not a password: the natural default is that each use prompts the human once, in the moment, with merchant and amount shown. An always-allow-this-merchant option would be a bonus, not the default.
  4. Optionally extend pup_import_browser_logins to import cards from the user's own Chrome/Edge profile, behind the same consent + UAC flow that already exists for passwords.

Notes

  • Approval UX matters more here than for passwords. The gate should show merchant, amount and last four so the human is approving a specific charge, not a vague capability.
  • Scope it to autofill into a page pup is already driving. Nothing should be able to read a PAN back out through a verb.
  • Related: john/work -> work-amex documents the Adom Amex account but deliberately holds no card data and forbids payments without explicit approval. A pup card vault plus a per-charge prompt is what would let that skill actually authorise a payment safely.

1 Reply

John Lauer · 2mo ago

Shipped in v2.0.374/375. (1) pup_card_set / pup_cards / pup_card_delete: OS-keychain card vault (Luhn + expiry + cvv validation, brand derived); pup_cards returns nickname/brand/last4/expiry only and NO verb ever returns the PAN or CVV. (2) pup_fill_card {nickname, merchant, amount}: pup types the card into the checkout itself - walking payment-processor iframes, Stripe-style, with trusted CDP keystrokes - and returns booleans, so the digits never reach the caller. (3) The per-fill gate is exactly as requested: EVERY fill pops a desktop approval toast naming merchant, amount, brand and last4, and nothing fills without the click; deny/timeout return consent_declined/consent_timeout. Deliberately allowed from relayed cloud threads (unlike pup_credential_reveal) because the human click authorizes the specific charge and no secret leaves the desktop. Verified end to end on AdomLapper today: stored the public Stripe test card, rendered a test checkout with the number field inside an iframe, John approved the toast, all four fields filled (number landed inside the iframe), values confirmed by DOM read, test card deleted after. Also fixed in 375: ab-side timeouts for the consent verbs (ab's 60s default was cutting the call while the 120s toast was still up). Ask 4 (import cards from the user's browser profile behind the existing consent+UAC flow) is deferred as a follow-up - reopen or file fresh when wanted.

John Lauer closed this · 2mo ago

Log in to reply.