Skip to content

EPIC: onboarding a new client — what the ten-step process needs that does not exist #562

Description

@ssdavidai

Research epic, written 2026-08-13 from Sir's onboarding design. Nothing here
is committed work. It records what the ten-step process needs versus what the
code does today, so the gaps are visible before anyone starts building.

The promise

Point A — a solo consultant with 4–15 clients whose day starts with "what
did I promise to whom?"
Agreements live in their head. Prep happens at 9pm.
The AI tools they bought made it worse, because the AI forgets between sessions
and they rebuild context for the tool as well as for themselves.

Point B — same business, memory problem gone. Briefed before every call.
Every promise, decision and open loop tracked until it closes. 15–20 hours a
month returned, shown on a signed monthly report.


What already exists, and fits well

Steps 4–6 are largely built. The onboarding ritual
(/awaken → /reading-the-room → /verify → /soul → /composing → /preparing → /first-brief → /desk) already pulls ~100 days of mail, extracts facts chunked,
discovers instinct patterns, writes USER.md / SOUL.md / RULES.md,
materialises a matter pack and an errand pack, seeds day-one Desk cards and
composes a first brief. That is substantially "Alfred shows what it learned
about you"
and "build your Matters".

Step 9 is a precise fit, not a coincidence. "Day 60 — discretion on" is the
tier ladder: Asking → Confirming → Acting, where reaching Acting requires
the principal's explicit approval (#452), enforced at two independent points
that read the shared reader in matching/tiers.py and fail closed. Day 60 is
literally the principal working the Approve/Decline queue on /instincts. The
ladder was built for this shape after the 2026-08-06 incident.

Step 6's training loop is real and verified. Desk click → decision →
observation → nightly reflection → tier change. Confirmed end to end.

Point A's core complaint has its primitive. "What did I promise to whom" is
the commitment canonical type (#469#471), with an 11-state lifecycle because
the coarse four-value status cannot express delivered_awaiting_acceptance.


Gap 1 — there is no way in

Step 1 (application at alfred.black) does not exist. Wasp auth only lets
someone sign into an Alfred that already exists for them. There is no
application, no queue, no provisioning trigger.

Step 3 (deployment) is a project, not a step. Provisioning is manual.

Gap 2 — day 1 requires SSH

"Connect your ChatGPT or Claude account" is, today, exactly this — it is what
HermesAuthBanner.tsx:66 tells the operator to run:

docker exec -it alfred-black-hermes-1 hermes auth login --provider openai-codex
docker compose restart hermes

A paying consultant cannot be handed a terminal on day 1. This is the real
content of #300 — not "one OAuth ceremony or two" but "can it happen in a
browser at all". A device flow is the natural shape (the dashboard shows a code
and a link, Hermes polls), mirroring the existing Tailscale card.

Note the direction: this is Alfred authenticating to the principal's ChatGPT
subscription
, the opposite of the app OAuth in #546. It is also a commercial
advantage worth keeping — no per-seat model cost, no API keys in custody — but
it is unavoidable, because everything the principal sees is produced by Hermes.

Workspace choice is two of three. Slack works. The Claude connector works.
ChatGPT is #546, parked, and blocked on the one-VM-one-URL problem.

Gap 3 — the number on the signed report cannot be computed

This is the one that matters.

Point B promises 15–20 hours a month returned, on a signed monthly report.
Step 2 says "we count the hours leaking". Step 7 is "Alfred presents how it
will save you 15+ hours"
.

A grep across the entire repository for saved-time instrumentation returns
exactly one hit:

packages/learn/src/activities/onboarding.py:676
    "estimated_time_saved": "e.g. 30 min/week"

That is a string inside a prompt template — an LLM's guess, not a measurement.

The hours machinery that does exist (#468, alfred-hours-reconstruction)
reconstructs billable client hours from cross-source evidence for
invoicing. That is the opposite direction: it answers "how long did I work on
X"
, not "how much did Alfred give back".

So the central commercial claim has no instrumentation behind it. And a delta
needs a baseline, which step 2 assumes was captured on the sales call and which
nothing stores.

Why this is hard, not merely unbuilt

Attributing saved time is easy to fake and hard to defend. "Alfred handled 40
Desk cards, at 3 minutes each, therefore 2 hours" is a number that survives
exactly one sceptical question from the person signing it.

Design constraints worth committing to before any code:

  • Measure at the moment of action, not retrospectively. A monthly
    reconstruction is a story; a per-action record with provenance is evidence.
  • The principal signs, Alfred proposes. P2: ship evidence-based hours reconstruction as a per-matter opt-in — propose, never auto-accept #468 already establishes this
    pattern — an auditable per-period proposal that is never accepted
    automatically at any confidence. The saved-hours report should reuse it.
  • A defensible small number beats an impressive one. This report is shown
    to someone deciding whether to keep paying. One inflated month costs more
    trust than a year of conservative ones earns.
  • No baseline, no claim. If step 2's measurement was not captured, the day
    30 report should say so rather than compare against an assumption.

Gap 4 — step 7 has no surface

Nothing presents "here is the plan". Day 30 currently has no artifact.


What is genuinely fine

Steps 4, 5, 6, 9 and 10 rest on machinery that exists and works. The weekly
check-ins in steps 6 and 8 are human process and need no code. Step 10 is the
Desk, which is the daily surface already.

Sequencing

# Work Why this order
1 Web-based Codex auth (#300) Nothing in day 1 is repeatable without it, and it is the smallest of these
2 Answer: do OpenAI's terms permit a daemon on a personal ChatGPT subscription? If no, the model changes; cheaper to know before a funnel exists
3 Saved-hours instrumentation + baseline capture The commercial promise; also the longest lead time because the design question is real
4 Day-30 plan surface Consumes (3)
5 Signup + provisioning Largest, and only needed when hand-holding each deployment stops scaling

Items 1 and 2 are independent and worth doing regardless.

The honest summary

Steps 4, 5, 6, 9 and 10 mostly work today. Steps 1, 2, 3 and 7 do not exist.

The binding constraint is not the onboarding ritual — that is the part that is
built. It is that the thing being sold is measured nowhere, and that day 1
currently requires a terminal.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions