Add Warp Agent CLI launch modal - #14733
Conversation
Adds a one-time launch modal announcing the Warp Agent CLI, following the established launch-modal pattern (feature flag, cloud-synced seen setting, OneTimeModalModel trigger, debug force-open/reset actions). The card is a 720x440 two-column layout to match the design: copy on the left (New badge, headline, two feature rows, full-width "Get started" button) and a full-bleed hero on the right. Co-Authored-By: Warp <agent@warp.dev> Co-Authored-By: Warp Agent <agent@warp.dev>
…ent-cli-launch-modal
There was a problem hiding this comment.
This png looks lower quality -- how does its resolution compared to other launch image assets we have? Also should we retire the previous launch modal so we could free up bundled assets?
There was a problem hiding this comment.
Good catch on both counts — numbers first.
Resolution vs the other launch assets. Every launch banner is authored at 2x its on-screen slot, and this one already was:
| asset | file | slot | scale |
|---|---|---|---|
openwarp_launch_banner.png |
420x92 (69 KB) | 420x92 | 1.0x |
orchestration_launch_banner.png |
840x184 (333 KB) | 420x92 | 2.0x |
auto_handoff_sleep_banner.png |
840x184 (123 KB) | 420x92 | 2.0x |
agent_cli_launch_banner.png (this PR) |
720x880 | 360x440 | 2.0x |
So the scale was never the problem — at 0.63 MP it's the largest launch banner in onboarding/. The softness you spotted was in the source: the Figma file is view-only, which disables layer selection and native export, so I had screen-captured the panel at 686x855 and upscaled it to 720x880. That upscale is exactly what made it look mushy next to the others.
What I changed (760ad9c). I re-captured from Figma at 320% zoom as two vertically-stitched tiles — 1150x1407, ~2.76x the pixels of the old source — and downscaled that to the same 720x880 slot. Same dimensions, no layout change, and it's both sharper and smaller:
- high-frequency detail (mean Laplacian energy): 309 -> 461, a 1.49x improvement
- file size: 490 KB -> 410 KB
The terminal text on the laptop screen is legibly crisper now. It's still a screen re-capture rather than a designer export, so if anyone can hand me the exported original I'd still swap it in — but it's no longer below the bar for the directory.
On retiring a previous launch modal. Facts, since this is worth deciding on real numbers. Four launch modals ship today, and all four cargo features are in app's default list, so enabled_features() turns all four flags on in a default build:
| modal | assets | bundled cost |
|---|---|---|
Oz (launch_modal/, 4 slides) |
oz_cloud_agents, oz_launch_credits, oz_agent_management, oz_agent_automations (1086x710 each) |
~2.7 MB |
| Orchestration | 1 | 333 KB |
| Agent CLI (this PR) | 1 | 410 KB |
| OpenWarp | 1 | 69 KB |
The Oz launch modal is ~78% of all launch-modal asset weight — retiring it would free roughly 6.5x what this PR adds, and far more than retiring Orchestration or OpenWarp. It's also the only one still listed in DOGFOOD_FLAGS.
That said, whether any of these has finished its run is a product call, not mine, and deleting another feature's modal would put an unrelated user-visible removal inside this PR. So I haven't touched them. Leaving this thread open for you — if you want the Oz modal (or Orchestration) retired, I'm happy to do it as a follow-up PR where it can be reviewed on its own merits.
… new-user path - "Get started" now opens https://docs.warp.dev/cli/quickstart/ before dismissing, via a dedicated GetStarted action. - Re-captured the hero from Figma at 320% and downscaled to the same 2x 720x880 slot. Same dimensions, 1.49x the high-frequency detail, and 80KB smaller (490KB -> 410KB). - Added coverage for the AuthComplete new-user branch, which pre-dismisses the modal so fresh signups never see it on their second startup. Co-Authored-By: Warp <agent@warp.dev> Co-Authored-By: Warp Agent <agent@warp.dev>
…ent-cli-launch-modal
Description
Adds a one-time launch modal announcing the Warp Agent CLI, built on the existing launch-modal pattern (
.agents/skills/gui-create-launch-modal) used by the orchestration / OpenWarp / Oz modals.The card follows the Figma mock (Factory-Launch, node
731-18312, frame "Modal-1"): a 720×440 two-column card instead of the existing hero-on-top 420-wide layout.Newbadge → headline → two feature rows (icon + bold lead-in + body) → full-widthGet startedbutton pinned to the bottom.Get startedopens https://docs.warp.dev/cli/quickstart/, then dismisses the modal and marks it seen.surface_3,main_text_color,sub_text_color,foreground/backgroundfor the CTA) and the terminal magenta accent for the badge — no hardcoded hex.Iconvariants (LayoutAlt01,Inbox), which are the closest matches to the glyphs in the mock. No new SVGs were added.Wiring mirrors the other launch modals:
FeatureFlag::AgentCliLaunchModal(+DOGFOOD_FLAGS,appcargo featureagent_cli_launch_modal).did_check_to_trigger_agent_cli_launch_modalinAISettingsso it shows at most once per user across devices.OneTimeModalModeltrigger inserted intocheck_and_trigger_all_modalsafter the orchestration modal, plus new-user pre-dismissal in theAuthComplete!is_existing_userbranch,is_any_modal_open, and a debug force-open.[Debug] Open Warp Agent CLI Launch Modaland[Debug] Reset Warp Agent CLI Launch Modal State.Get startedCTA,Escape, and anXin the top-right (the mock omits an X, but the other launch modals all have one).Note on the hero asset
app/assets/async/png/onboarding/agent_cli_launch_banner.pngis 720×880 — 2× its 360×440 slot, matchingorchestration_launch_banner.png's 2× and doubleopenwarp_launch_banner.png's 1×. It was captured from the view-only Figma file (which disables layer selection and native export), re-captured at 320% zoom as a stitched 1150×1407 source and downscaled into the 2× slot. If the designer's exported original is available it's still worth swapping in, but the checked-in asset is at the directory's quality bar.Linked Issue
APP-5183 — Add Warp Agent CLI launch modal to the Warp client
Testing
Automated:
app/src/workspace/one_time_modal_model_tests.rs:agent_cli_launch_modal_shows_at_most_once— the seen marker is written up front, a second trigger is a no-op, and it stays a no-op after dismissal.agent_cli_launch_modal_skipped_when_flag_disabled— with the flag off the trigger does nothing and the seen marker is left untouched, so the modal can still show once the flag is turned on.agent_cli_launch_modal_pre_dismissed_for_new_users_on_auth_complete— drives a realAuthManagerEvent::AuthCompletefor a non-onboarded user and asserts the seen marker is set, so a fresh signup never sees the modal on their second startup...._shows_at_most_once, and removing the pre-dismissal fails..._pre_dismissed_for_new_users_on_auth_complete. Each passes again once restored.cargo nextest run -p warp one_time_modal→ 8 passed../script/format+cargo fmt --all -- --check→ clean.cargo clippy -p warp -p warp_features --all-targets --tests -- -D warnings→ clean.cargo build --bin warp-oss --features gui→ clean.Manual (computer use, Linux dev build):
Built and ran
./target/debug/warp-oss, opened the command palette, ran[Debug] Open Warp Agent CLI Launch Modal, and compared the rendered modal against the Figma frame: badge, headline, both feature rows, CTA label/width/position, hero placement and wordmark all match.Clicked
Get startedand confirmed it openshttps://docs.warp.dev/cli/quickstart/(the "Warp Agent CLI quickstart" page) and closes the modal.Escapealso closes it.I have manually tested my changes locally
Rework changes
Addressing @kevinyang372's review (commit
760ad9c):Get startedshould open the CLI quickstart docs — implemented. Added a dedicatedAgentCliLaunchModalAction::GetStartedthat callsctx.open_url("https://docs.warp.dev/cli/quickstart/")and then emitsClose, rather than reusing the plainCloseaction. Verified in the running client; recording below. This also resolves the "CTA destination" open question that was previously called out in this description.orchestration_launch_banner), but its source was a 686×855 screen capture upscaled to 720×880. Re-captured from Figma at 320% as a stitched 1150×1407 image and downscaled into the same 720×880 slot: 1.49× the high-frequency detail (mean Laplacian energy 309 → 461) and 80 KB smaller (490 KB → 410 KB), with no layout change.AuthCompletebranch — addedagent_cli_launch_modal_pre_dismissed_for_new_users_on_auth_complete, which emits the real event for a non-onboarded user and asserts the seen marker is written.Screenshots / Videos
Computer-use video recording (1)
Get started opens the CLI quickstart docs: opening the command palette, running
[Debug] Open Warp Agent CLI Launch Modal, the modal appearing, clickingGet started, the modal closing, and the browser opening the Warp Agent CLI quickstart page.Computer-use screenshots (4)
The modal as shipped — rendered over the terminal in the running client, with the sharpened hero.
After clicking
Get started— the browser lands onhttps://docs.warp.dev/cli/quickstart/.Figma reference — the "Modal-1" frame (node 731-18312) the implementation was compared against.
Re-captured hero source — the 1150×1407 stitch that the committed 720×880 asset is downscaled from.
Agent Mode
Originating thread: https://warpdev.slack.com/archives/C0BDQDW8V5E/p1785944092233829
Conversation: https://staging.warp.dev/conversation/8fed9083-310e-4c36-8b18-b2288fe81502
Run: https://oz.staging.warp.dev/runs/019fd29e-2877-7d7b-8b46-c736f6f5ccf8
This PR was generated with Oz.