Engage: from a key to a first sale
The decision
Activation is one event: a first test sale, counted. A key alone is not value; a stranger has seen ONE work only when money lands in a shop they made. The code already holds this rule: a sale is counted, never claimed, and the step turns done only when storefront:stats reads back a purchase (journey.ts:21, :271-287). We copy it. There is no email to nurture with (see identify.md), so the nudges live in the chat and the terminal, tied to state.
What we built
The activation sentence
Activation = a workspace has at least one active product with a checkout link AND storefront:stats returns purchases of 1 or more, in test mode.
The shortest path, as a person
Press Generate. Keep the 24 words. Sign in (dev: one press does both; prod: VERIFY how a key gets its account). Name a product and a price in the shop (/w/shop, receiver products:create). Open its checkout (checkout:link) and pay with 4242 4242 4242 4242, any future date, any CVC. The shop counts the sale (storefront:stats). A person who built the shop already owns it: the hand-over is the agent lane only. VERIFY: this web lane is unwalked (llms.txt walked the agent lane), and whether a person's shop takes the test card without storefront:test-cards (llms.txt: country_not_supported, IE only).
The shortest path, as an agent
npx oneie. It makes the key, a shop in test mode and a default "Test product" at 1.00 USD, then prints the checkout link. A person must pay it in a browser. Then run npx oneie again (it waits 20 s) or npx oneie --wait 30.
Time, per step (llms.txt): key 66 ms, no network; workspace born 9 to 13 s; test sale counted under 30 s with a stranger paying (2026-11-06). Do not add them up; "under a minute" waits on one clocked walk (one.md).
The first object and the checklist. The first object is made for them: the default Test product, or the call box (dev). Three gating boxes:
- Make your key. Make a product with a price. Pay your own link with the test card.
- Not gating: the 24 words on paper; the hand-over link. When the third box is checked, the checklist goes away.
Nudges, tied to state
- Proposed, not wired. Product made, no sale (chat): "Your link is ready. Pay it yourself with the test card 4242 4242 4242 4242 and watch it land."
- Proposed, not wired. Sale counted, agent lane (chat): "That's a sale. Your agent made it. Now one link hands the shop to you."
- Exists: terminal, pending: "Next: Pay with the test card at the link above, then run
npx oneieagain." - Exists: the chat's first card is the person's next deed (
nextDeedStarter,home-opener.ts:35). - Day-1, day-3 and day-7 emails: not written. ONE holds no email. VERIFY first, then write.
The chat script
Welcome (two sentences): "Welcome. To be paid you need a key, so one question first: what do you sell?"
Diagnostic, one question at a time:
- "A product, a service, a subscription or a course? Give me your website, or tell me in a line."
- After the answer: "How do people pay you today, or not yet?"
- Then: "Is someone ready to buy, or are you setting up first?"
There is no budget question: the key is free. Sold comes up only if they say they want to be taught.
Transition (four sentences): "You want to be paid by link. To be paid, you need a key; yours is made on your machine and nobody else holds it. Your agent sends the link and you are paid by card or crypto, straight to you. ONE takes nothing from a sale; the card network takes its fee."
Booking script. ONE offers no call and I found no calendar link, so the commit is the first sale. "Two ways to go on. Pay your own link now with the test card, or send it to someone and watch it land. Which one?" Confirm with the checkout link. Today it is test money.
Check: the dev opening is three messages and four sentences, so it breaks the two-sentence welcome rule. The welcome above fixes it.
The friction audit (scores 1 to 5 are my judgement, no user data; a score of 3 or below is a friction point)
- Land on the home page. Clarity 3, effort 5, trust 4. Prod walks nine stops. Fix: ship the sale-first opening.
- Press Generate. Clarity 5, effort 5, trust 4. No fix.
- Keep the 24 words. Clarity 4, effort 2, trust 4. The page says nothing checks the words. Fix: a read-back check.
- Sign in. Clarity 3, effort 4, trust 4. "Once your key has an account" is unclear. Fix: one press saves and signs in (dev copy).
- Make a product. Clarity 4, effort 3, trust 4. The sparkle needs sign-in and credits. Fix: the call box.
- The call (dev). Clarity 4, effort 4, trust 3. Subscription and Course make a one-time link. Fix: wire recurring.
- Pay the test card. Clarity 4, effort 3, trust 3. A person must pay in a browser. Fix: show the card number by the link.
- Re-run to count the sale (agent). Clarity 3, effort 3, trust 4. A first run ends at "pending". Fix: ask its person to pay, then
--wait 30. - Seal the agent's wallet. Clarity 3, effort 2, trust 4. A headless shell with no Keychain is refused. Fix:
init --no-wallet(unwalked). - Hand over. Clarity 3, effort 3, trust 4. "Press Own again if asked." Fix: one press. VERIFY.
- Enrol in Sold. Clarity 4, effort 4, trust 2. No real purchase has run. Fix: walk one enrolment.
Friction score: 14 of 33 scores are 3 or below, 42%. Lower is better. Re-score after real runs.
The objection library
- "It's too expensive." "The key, wallets and links are free. Only Sold costs money, $100. Your agent can talk and cannot be paid; that is the cost today. Sold divided by your price is the sales that pay it back: at $10 a call, ten." That ten is arithmetic on an example. "ONE takes nothing from a card sale; the card network takes its fee." VERIFY migration 0377 ran on prod; one.md still says 2% once.
- "I need to think about it." "What would you need to see to feel sure?" Then: "Make the key and do nothing else. Delete us tomorrow and it still works."
- "I don't have time." "Your agent is already talking and cannot be paid. That is what costs you time. In our own runs the key took 66 ms and the shop 9 to 13 s." No total is claimed.
- "I need to talk to my partner, or my person." "Would it help if I walked them through it too? Your agent builds the shop, then sends one link. They make their own key and press Own. The limit on your agent is one only they can raise." Sold is priced for a human; their human enrols.
- "I've tried something like this before." "Which part broke?" Then: "Here the key is on your machine and ONE is not in the money path. Each agent has its own wallet and a limit only you can raise." Never say x402 pays the seller: that rail still reads ONE's treasury (market.md).
- "Is it safe?" (
home-chat.ts:209) "The key never leaves your device. A break-in at ONE reaches nothing. You keep the 24 words." - "Is it real money?" "Not yet: Sui testnet and Stripe test mode. Rehearse the sale."
Receipts
Probed 2026-11-12: /, /key, /sold, /learn/saas, /llms.txt and /docs/agent-path returned 200. /learn/saas/one/engage returned 404 until published. pay.one.ie/status: testnet. /sold shows $100, one month of community, then $100 a month, and "Enrol for $100"; llms.txt the same day says no real Sold sale has run.
Prod home shows nine stops, the test card at "Practise". The eight-beat script is on origin/dev, not prod (identify.md has the probe).
Still open
- The whole path has not been clocked. No "seconds" claim.
- No day-1, day-3 or day-7 email until there is an address and consent. No human touch either: nobody can see who stopped.
- The activation rate has no number; I did not read
ui:journey:reach. - A real card sale needs the seller's own Stripe; test mode only today.
- Sold: VERIFY one enrolment end to end, and the $100 a month.
- Dev beat 4 says "We take 0%"; the brief forbids it; not used.
Do it yourself
- Write your activation sentence as one loggable event. Take it from the product, not from a feeling.
- Walk your own shortest path and time each step. Never add them into a claim.
- Write the first object for them, so the empty state never shows.
- Make each nudge check the activation event and stop when it fires.
- Score each step 1 to 5 for clarity, effort and trust. Fix every 3 or below, then score again.