# Beyond launching (/docs/pounce/beyond-launching)



Both of these are **off by default**, and both need the [Accessibility
grant](/docs/pounce/install#grant-accessibility). They share one grant and one
set of observers, so turning both on costs one approval, not two. Both blocks are
also [captured when the daemon arms](/docs/pounce/config#config-file), so **any**
edit inside them needs a restart, not just a re-open:

```sh
launchctl kickstart -k "gui/$(id -u)/com.hausfold.pounce"
```

## A window switcher, not an app switcher [#a-window-switcher-not-an-app-switcher]

Pounce ships an **MRU window switcher**: tap the chord to bounce to your last
window even on another workspace, hold it and keep tapping to walk older ones,
or type while holding to fuzzy-filter. It moves by *window*, so two Ghostty
windows are two rows.

```jsonc
{
  "windows": {
    "enabled": true,
    "key": "tab",
    "modifiers": ["cmd"]
  }
}
```

Inside haus that is `haus.launcher.windowSwitcher`, where it defaults **on**.

**With a tiling window manager**, rows gather by workspace under a header each,
and focusing goes through `aerospace focus --window-id` so a window parked
elsewhere surfaces properly. One deliberate wrinkle: a bare tap-and-release
skips the workspace **family** you're on and lands on the most recent window
outside it: with two windows tiled side by side, the most recent is one you're
already looking at, so landing there wouldn't be a switch. The skipped siblings
are still the rows right below you.

Family, not workspace name: a workspace with a `/` in it (`T/haus`, `T/main`) is
a page of `T`, and the whole `T` family counts as one place, so walking pages and
then tapping ⌘⇥ takes you off `T` altogether rather than back to the page you
just left. Getting *between* pages is the page walk's job. The rule is the name
before the first `/` and is not keyed on `pages.prefix`.

## Quit an app when its last window closes [#quit-an-app-when-its-last-window-closes]

macOS keeps an app running after you close its last window. If your muscle
memory is from Windows, that's a ⌘Q you forgot every time.

```jsonc
{
  "autoQuit": {
    "enabled": true,
    "delay": 2,
    "exclude": ["com.apple.finder"]
  }
}
```

In haus: `haus.launcher.autoQuit.enable`, off by default.

**Asked, not killed**: the same Quit event ⌘Q sends, so unsaved work puts up
its sheet and stays open.

**The delay is load-bearing.** `delay` (2s, clamped 0.25–3600) is what tells "I'm
done with this app" apart from "close this window, open another," which is what
a browser does on ⌘N.

**`exclude` replaces the default, it doesn't extend it.** Out of the box it is
`["com.apple.finder"]`, since Finder is the one app macOS runs windowless by
design. Name anything else and you have dropped Finder from the list.

<Callout type="warn" title="The one thing that will surprise you">
  An app doing work in the background is still just an app with a window. Closing
  the Docker Desktop dashboard asks Docker to quit, which stops your containers.
  The same shape catches media players, torrent clients, and any chat app you
  keep open for notifications. That's what `exclude` is for.
</Callout>
