Skip to content

Commit 2bbed62

Browse files
sodiumsunclaude
andcommitted
onboarding: add a "Two ways Heard talks" step (copilot vs companion)
New 4th wizard screen after Connect-agents, explaining the two listening modes — Co-pilot (at the screen, terse signposts) vs Companion (eyes-off, fuller plain-spoken catch-ups), both plain-English, switch anytime from the menu bar. Explanatory only (no picker). Screens list + dots + finish-button adapt automatically. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 91d75cf commit 2bbed62

1 file changed

Lines changed: 28 additions & 2 deletions

File tree

‎heard/settings_window.py‎

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2325,6 +2325,7 @@ def init(self):
23252325
("welcome", self._screen_welcome, None),
23262326
("signin", self._screen_signin, self._enter_signin),
23272327
("agents", self._screen_agents, self._enter_agents),
2328+
("modes", self._screen_modes, None),
23282329
]
23292330
return self
23302331

@@ -2443,7 +2444,7 @@ def _go_to(self, idx: int) -> None:
24432444
enter_fn()
24442445
self._update_chrome()
24452446
# Phase 1 analytics — drop-off per step. _key is "welcome" |
2446-
# "signin" | "agents" (the current 3-screen wizard).
2447+
# "signin" | "agents" | "modes" (the 4-screen wizard).
24472448
try:
24482449
from heard import analytics
24492450
analytics.capture("wizard_viewed", {"step": _key, "step_idx": idx})
@@ -2539,7 +2540,32 @@ def _screen_welcome(self) -> NSView:
25392540
"Coding has always lived inside a window.\n\n"
25402541
"Heard pulls it out — so you can step away from the "
25412542
"screen without losing track of what's happening.\n\n"
2542-
"Let's get you set up. Three quick steps."
2543+
"Let's get you set up — a few quick steps."
2544+
)
2545+
stack = _vstack([title, body], spacing=14)
2546+
v.addSubview_(stack)
2547+
NSLayoutConstraint.activateConstraints_([
2548+
stack.topAnchor().constraintEqualToAnchor_constant_(v.topAnchor(), 12),
2549+
stack.leadingAnchor().constraintEqualToAnchor_(v.leadingAnchor()),
2550+
stack.trailingAnchor().constraintEqualToAnchor_(v.trailingAnchor()),
2551+
stack.bottomAnchor().constraintLessThanOrEqualToAnchor_(v.bottomAnchor()),
2552+
body.widthAnchor().constraintLessThanOrEqualToAnchor_(v.widthAnchor()),
2553+
])
2554+
return v
2555+
2556+
def _screen_modes(self) -> NSView:
2557+
v = NSView.alloc().init()
2558+
v.setTranslatesAutoresizingMaskIntoConstraints_(False)
2559+
title = _wizard_title("Two ways Heard talks")
2560+
body = _wizard_body(
2561+
"Co-pilot — for when you're at the screen. Quick, clipped "
2562+
"signposts; the detail's already in front of you.\n\n"
2563+
"Companion — for when you're away: cooking, driving, walking. "
2564+
"Fuller, plain-spoken catch-ups, since your ears are the only "
2565+
"screen.\n\n"
2566+
"Either way, Heard talks in plain language — no code jargon in "
2567+
"your ear. You'll start in Co-pilot; switch anytime from the "
2568+
"menu bar under “Mode.”"
25432569
)
25442570
stack = _vstack([title, body], spacing=14)
25452571
v.addSubview_(stack)

0 commit comments

Comments
 (0)