Skip to content

spec: launch configs that open at app startup (#9203)#10018

Open
lonexreb wants to merge 1 commit intowarpdotdev:masterfrom
lonexreb:spec/9203-startup-tab-config-groups
Open

spec: launch configs that open at app startup (#9203)#10018
lonexreb wants to merge 1 commit intowarpdotdev:masterfrom
lonexreb:spec/9203-startup-tab-config-groups

Conversation

@lonexreb
Copy link
Copy Markdown
Contributor

@lonexreb lonexreb commented May 4, 2026

Adds a product+tech spec for #9203: a per-Launch-Config "Open at startup" toggle so users can have their daily workflow layout materialize on every Warp launch.

Files

  • specs/GH9203/product.md (122 lines) — V1 scope, user experience, configuration shape, 10 testable behavior invariants
  • specs/GH9203/tech.md (220 lines) — implementation plan, startup hook integration, UI toggle wiring, end-to-end flow

Total: 342 insertions, 0 deletions. No code changes — this is a spec PR.

Why this is small

The Launch Configs feature already serializes a multi-window, multi-tab, multi-pane layout with per-pane CWDs, start commands, and pane modes. LaunchConfig::from_snapshot and apply_launch_config exist and are exercised today by the command-palette /launch-config <name> trigger. The data model was designed for this exact use case; only the time of application is missing.

This spec adds:

  1. One bool field on LaunchConfig (auto_launch_at_startup) with #[serde(default)] so existing on-disk configs deserialize unchanged.
  2. One new hook in the app startup path that enumerates flagged configs and calls apply_launch_config on each.
  3. One toggle on the existing Launch Configs list row.

That's it. No new persistence, no new application path, no new settings page.

V1 scope

  • Per-config opt-in toggle, not a global setting.
  • Multiple configs may be flagged; all apply on startup in list order.
  • Composes additively with Restore previous tabs on startup (both run, neither displaces the other).
  • Failures (missing CWDs, corrupt records) surface non-blocking notifications; app startup is never blocked.
  • Idempotency: hook fires exactly once per process startup, guarded by an AtomicBool.

Out of V1 (tracked as follow-ups)

  • Time-of-day or per-day scheduling.
  • Conditional auto-launch (CWD- or git-state-anchored).
  • Workspace-folder-anchored auto-launch (driven by IDE / shell integration).
  • Dedicated "Startup order" UI distinct from the main list ordering.
  • Auto-detection of overlap with restore-previous-tabs.
  • "Disable all auto-launch this session" affordance.

Why this spec

  • Issue is ready-to-spec, no existing PR claims it.
  • Reporter rated importance 2/5; this spec keeps the surface area appropriately small (one toggle, no new settings page) to match the cost-vs-value math.
  • Quietly the most leveraged of the three remaining unclaimed ready-to-spec issues — the data model and application path are already built; this is the smallest possible addition that delivers the user-visible feature.

Open questions for maintainers

  1. Notification routing. Spec uses the existing ToastStack for failure notifications. Confirm at implementation time.
  2. Idempotency guard placement. AtomicBool in the startup.rs module vs. on the hook's input context. Implementation-time choice.
  3. Toggle UI surface. This spec assumes the toggle goes on the existing Launch Configs list row. If that surface doesn't exist as expected (it might be the save modal or a settings page instead), the spec needs a small adjustment but the core mechanism doesn't change.

Happy to iterate on the design or tighten the V1 scope further.

Adds product.md and tech.md for issue warpdotdev#9203: a per-LaunchConfig
"Open at startup" toggle so users can have their daily workflow layout
materialize on every Warp launch.

The Launch Configs feature already serializes a multi-window, multi-tab,
multi-pane layout with per-pane CWDs, start commands, and pane modes.
The data model was designed for this exact use case; only the *time of
application* is missing. This spec is a focused additive change:

V1 scope:
- New `auto_launch_at_startup: bool` field on `LaunchConfig` with
  `#[serde(default)]` so existing on-disk configs deserialize unchanged
- Startup hook in app_state init, fired after restore-previous-tabs,
  enumerates flagged configs and applies them via the existing
  apply_launch_config entry point
- Toggle on the existing Launch Configs list row (no new settings page)
- Failure handling: missing CWDs → fallback + notification; corrupt
  records → skip + notification; never block app startup
- Composes with restore-previous-tabs (additive, not replacing)

Out of V1 (tracked as follow-ups):
- Time-of-day or per-day scheduling
- Conditional auto-launch (CWD- or git-anchored)
- Workspace-folder-anchored auto-launch (IDE integration)
- Dedicated "Startup order" UI
- Auto-detection of overlap with restore-previous

10 testable behavior invariants. Implementation surface is genuinely
small: one struct field, one new hook, one toggle. Reuses existing
launch-config persistence, application path, and notification routing.
@cla-bot cla-bot Bot added the cla-signed label May 4, 2026
@github-actions github-actions Bot added the external-contributor Indicates that a PR has been opened by someone outside the Warp team. label May 4, 2026
@oz-for-oss
Copy link
Copy Markdown
Contributor

oz-for-oss Bot commented May 4, 2026

@lonexreb

I'm starting a first review of this spec-only pull request.

You can view the conversation on Warp.

I completed the review and no human review was requested for this pull request.

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Copy link
Copy Markdown
Contributor

@oz-for-oss oz-for-oss Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overview

Reviewed the product and tech specs for per-launch-config startup auto-launch. The feature direction matches the linked issue, but the current spec assumes UI and ordering primitives that are not present in the launch-config implementation and understates the security impact of moving saved command execution from manual invocation to app startup.

Concerns

  • Startup ordering depends on a user-assigned drag-and-drop list order, but the existing launch-config path loads YAML files and renders command-palette results without a persisted ordering model.
  • The toggle is assigned to an existing Launch Configs list row, but the current command-palette surface is not a management list with per-row controls.
  • The tech spec says there are no new shell interactions even though auto-launch can execute saved launch-config commands implicitly at startup.

Security

  • Auto-launching a config that contains saved commands, or a config that is later edited on disk to add commands, creates a startup-time command execution surface that needs explicit confirmation/warning and safe handling requirements.

Verdict

Found: 0 critical, 3 important, 0 suggestions

Request changes

Comment /oz-review on this pull request to retrigger a review (up to 3 times on the same pull request).

Powered by Oz

Comment thread specs/GH9203/product.md

### Ordering multiple auto-launch configs

The Launch Configs list lets the user reorder rows via drag-and-drop (existing affordance, V0 simply respects the existing list ordering). Auto-launch configs open in list order on startup. There's no separate "startup order" UI in V1 — keeping the surface simple matches the issue's importance level (the reporter rated this 2/5).
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ [IMPORTANT] The current launch-config search path does not expose a user-assigned, drag-and-drop list order; configs are loaded from files and rendered from a HashMap, so startup order is undefined unless the spec adds persisted ordering or defines a deterministic fallback.

Comment thread specs/GH9203/tech.md

### 4. UI toggle

**File:** the existing Launch Configs list view (locate via `grep -rn "LaunchConfig" app/src/search/command_palette/launch_config/`). Each row gains a toggle component.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ [IMPORTANT] The referenced command-palette launch-config view is not a management row with toggle/edit/delete affordances; pick the actual surface and specify how it mutates and persists auto_launch_at_startup before implementation.

Comment thread specs/GH9203/tech.md

- The `auto_launch_at_startup` boolean serializes identically across all platforms.
- Working-directory fallback semantics are inherited from the existing manual `apply_launch_config` path; this PR doesn't change them.
- No new file-system, network, or shell interactions.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ [IMPORTANT] [SECURITY] Auto-launching configs can automatically run saved commands at app startup, so this is a new shell-execution timing surface; replace this with requirements for user confirmation/warning and safe handling when an already-enabled YAML is edited to add commands or agent/cloud panes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed external-contributor Indicates that a PR has been opened by someone outside the Warp team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant