Funktionen & Features

Was Kachelwerk kann – und was auf macOS bewusst nicht geht

Kachelwerk ist kein Ersatz für den Fenstermanager von macOS, sondern ein Aufsatz darauf. Es benutzt die Bedienungshilfen-API (Accessibility), um laufende Fenster zu verschieben und zu skalieren. Alles, was dieser Weg hergibt, funktioniert – alles, was einen eigenen Compositor bräuchte, nicht. Beides steht hier vollständig.

Auf einen Blick

Funktion
🧱Sieben Layouts – dwindle, master, master-left, master-right, centered, scrolling, grid
🗂Zehn virtuelle Arbeitsflächen, unabhängig von den Spaces des Systems
⌨️Globale Tastenkürzel, die auch aus fremden Apps heraus greifen
🖱Kürzel-Editor – Tastendruck aufzeichnen statt Konfigurationsdatei tippen
📝Konfiguration in einer Textdatei, live nachladbar bei jedem Speichern
🎛Zwei Kürzel-Profile, jedes Kürzel einzeln überschreibbar
🖥Mehrere Bildschirme – jeder Schirm wird eigenständig gekachelt, auf Wunsch mit eigenem Layout
🪟Fensterregeln je App: schwebend, gekachelt, ignoriert, Hauptfenster, feste Arbeitsfläche, Zusatzfenster mittig
🟡Fenstermenü am gelben Knopf – alle Aktionen für genau dieses Fenster, auch per Tastatur
★Anklickbares Master-Abzeichen – Hauptfenster durchreichen, fixieren, Anteil ändern
🗃Dashboard – die Anordnung umstellen, bevor sie angewendet wird
🚀Fernsteuerung über Adressen, dazu ein Raycast-Paket
🤖MCP-Server – ein KI-Assistent liest die Anordnung und ordnet Fenster an (ab Werk aus)
📥Scratchpad – eine unsichtbare Ablage für Fenster
🧭Menüleisten-App ohne Dock-Symbol; das Symbol zeigt das aktive Layout
♻️Sauberes Beenden – geparkte Fenster werden alle wiederhergestellt

Die Kacheln

Jedes neue Fenster bekommt automatisch einen Platz. Es gibt keine Überlappung, keinen Stapel und keine ungenutzte Fläche. Welche Aufteilung dabei entsteht, bestimmt das gewählte Layout – ausführlich beschrieben unter Layouts.

Zwei Abstände regeln das Erscheinungsbild:

general {
    gaps_in  = 6      # Abstand zwischen zwei Fenstern
    gaps_out = 12     # Abstand zum Bildschirmrand
}

Fensterregeln

Nicht jede App will gekachelt werden. Sechs Regeltypen decken die üblichen Fälle ab; der zweite Wert ist ein Teilstring des App-Namens, Groß- und Kleinschreibung ist egal.

windowrule = float,     Calculator           # startet schwebend
windowrule = tile,      Preview              # wird immer gekachelt
windowrule = ignore,    Karabiner-Elements   # wird nie angefasst
windowrule = master,    iTerm2               # wird immer das Hauptfenster
windowrule = workspace, Mail, 4              # landet auf Arbeitsfläche 4
windowrule = center,    Mail                 # weitere Fenster schweben mittig

Zusatzfenster mittig statt gekachelt

Manche Programme öffnen zu ihrem Hauptfenster kurzlebige Zusatzfenster – das Fenster für eine neue E-Mail ist das bekannteste. Ohne Regel bekäme es eine eigene Kachel, und alle anderen Fenster rückten für eine Minute zusammen.

Mit windowrule = center, <App> wird das erste Fenster des Programms wie gewohnt gekachelt. Jedes weitere, das danach aufgeht, bleibt schwebend und landet in der Mitte des Bildschirms, auf dem es sich geöffnet hat. Die übrigen Kacheln bewegen sich nicht, die Größe des Fensters bleibt, wie das Programm sie gewählt hat.

Eine automatische Erkennung gibt es bewusst nicht: Ein Verfassen-Fenster und ein zweites Hauptfenster sehen für einen Fenstermanager gleich aus – und ein zweites Terminal- oder Browserfenster soll ja gerade gekachelt werden.

Arbeitsflächen

Kachelwerk bringt eigene virtuelle Arbeitsflächen mit. Sie haben nichts mit den Spaces von macOS zu tun – und genau deshalb funktionieren sie ohne Umschaltanimation und ohne Mission Control.

  • SUPER + 1 … 0 wechselt auf Arbeitsfläche 1 bis 10
  • SUPER SHIFT + 1 … 0 nimmt das fokussierte Fenster mit
  • SUPER + Tab springt zur nächsten belegten Arbeitsfläche

Wie das Verstecken funktioniert

Fenster einer inaktiven Arbeitsfläche müssen irgendwo hin. Dafür gibt es zwei Verfahren, umschaltbar über hide_strategy:

WertVerfahrenVorteilNachteil
offscreen (Standard)Fenster werden weit außerhalb aller Bildschirme geparktSofort, ohne Animation, Inhalte laufen weiterStürzt Kachelwerk ab, bleiben sie draußen – ein Neustart holt sie zurück
minimizeFenster werden ins Dock minimiertÜbersteht einen AbsturzLangsamer, sichtbare Animation, Videos pausieren

Scratchpad

Eine unsichtbare Ablage für Fenster, die man griffbereit, aber nicht im Weg haben will. SUPER SHIFT + S legt das fokussierte Fenster hinein, SUPER + S blendet die Ablage ein und wieder aus.

Mehrere Bildschirme

Jedes Fenster wird dem Bildschirm zugeordnet, mit dem es sich am stärksten überlappt – nicht dem, auf dem zufällig sein Ursprungspunkt liegt. Das ist der Unterschied, der bei einem halb über die Kante geschobenen Fenster zählt. Die Layout-Berechnung läuft danach einmal pro Bildschirm: jeder Schirm hat sein eigenes Hauptfenster und seine eigene Aufteilung. Für Fenster, die weit außerhalb geparkt wurden, greifen zwei Rückfallebenen.

Ein Layout je Bildschirm

Unter Menüleiste → Displays stehen alle angeschlossenen Bildschirme, jeweils mit dem Layout, das dort gerade gilt. Jeder Bildschirm folgt ab Werk dem Standard-Layout; wer will, gibt ihm ein eigenes – etwa grid auf dem eingebauten Display und master-left auf dem großen Monitor.

displays {
    dell-u2720q = master-left
    integriertes-retina-display = grid
}

Wird ein Monitor an- oder abgesteckt, kachelt Kachelwerk nach etwa einer halben Sekunde neu. Die Fenster des abgezogenen Monitors landen auf dem übrigen Bildschirm und werden mit dessen Layout angeordnet; kommt der Monitor zurück, kommt sein Layout mit.

Das Menüleisten-Menü

Kachelwerk hat kein Dock-Symbol und kein Hauptfenster – es lebt ausschließlich in der Menüleiste. Das Symbol zeigt das aktive Layout und wird zu einem Pause-Zeichen, sobald das Kacheln ausgeschaltet ist oder die Berechtigung fehlt.

┌──────────────────────────────────────────┐
│ Kachelwerk — 4 Fenster · Arbeitsfläche 2 │
├──────────────────────────────────────────┤
│ ☑ Kacheln aktiv                          │
│   Layout                              ▸  │
│   Displays                            ▸  │
│   Tastenkürzel-Profil                 ▸  │
│   Arbeitsflächen                      ▸  │
├──────────────────────────────────────────┤
│   Konfiguration                       ▸  │
│   Anleitung                              │
│   Keybindings                            │
├──────────────────────────────────────────┤
│   Kachelwerk beenden                     │
└──────────────────────────────────────────┘

Enthält die Konfigurationsdatei Fehler, erscheint zusätzlich ein Eintrag ⚠︎ n Konfigurationswarnung(en), der jede fehlerhafte Zeile mit Zeilennummer auflistet.

Das Fenstermenü am gelben Knopf

Bleibt der Zeiger einen Moment auf dem gelben Knopf eines Fensters stehen, öffnet Kachelwerk ein eigenes Menü mit den Aktionen für genau dieses Fenster:

EintragWirkung
Zum Hauptfenster machentauscht dieses Fenster mit dem Hauptfenster
Mit Fenster darüber tauschentauscht die Plätze nach oben
Auf die linke / rechte Seiteschiebt das Fenster in die jeweilige Spalte
Schwebend / gekacheltnimmt das Fenster aus der Kachelung heraus oder zurück hinein
Vollbild · Zentrierenwie die gleichnamigen Befehle
Auf nächste / vorige Arbeitsflächeverschiebt das Fenster
Fenster schließenschließt es

Rechts in jeder Zeile steht das Tastenkürzel, das denselben Befehl auslöst – abgeleitet aus der tatsächlichen Belegung. Ohne Maus öffnet SUPER + A das Menü; die Pfeiltasten wählen, ⏎ führt aus, ⎋ schließt.

Warum der gelbe und nicht der grüne Knopf: Auf dem grünen zeigt macOS sein eigenes Kachel-Menü, und das lässt sich nicht abschalten. Ein Klick auf den gelben Knopf legt das Fenster weiterhin ins Dock – das Menü erscheint nur beim Verweilen.

Das Master-Abzeichen

In den Layouts mit Hauptfenster trägt dieses ein schwebendes Abzeichen mitten auf seiner Titelleiste – standardmäßig ★ Master. Es ist nicht nur Anzeige, sondern anklickbar:

GesteWirkung
LinksklickDas nächste Fenster aus dem Stapel wird Hauptfenster, das bisherige geht ans Ende
⌥ + Linksklickdasselbe rückwärts – nimmt genau einen Klick zurück
⇧ + LinksklickDas zuletzt fokussierte Fenster wird Hauptfenster
RechtsklickMenü: Hauptfenster wählen, fixieren, Master-Anteil, Layout

Der Platz des Hauptfensters ändert sich beim Durchreichen nicht, nur sein Inhalt – Klick, Klick, Klick reiht die Fenster durch, ohne dass die Hand wandert. Hauptfenster fixieren (master { pinned }) hält den Platz fest: ein neu geöffnetes Fenster übernimmt ihn dann nicht mehr.

Das Abzeichen liegt auf der Titelleiste und verschluckt auf seiner Fläche das Ziehen des Fensters. Wer das nicht will, macht es mit master_badge_interactive = false wieder zur reinen Anzeige oder blendet es mit master_badge = false aus.

Dashboard und Markierung

  • SUPER + O öffnet das Dashboard: eine Vorschau aller Kacheln, in der sich die Anordnung umstellen lässt. Angewendet wird erst mit „Fertig".
  • SUPER SHIFT + N legt einen farbigen Ring um das zuletzt geöffnete Fenster – hilfreich, wenn ein neues Fenster irgendwo einsortiert wurde.

Fernsteuerung und MCP-Server

Kachelwerk nimmt Befehle auch von außen an: über Adressen der Form kachelwerk://dispatch/…, über ein Raycast-Paket – und über einen MCP-Server, mit dem ein KI-Assistent die Fensteranordnung lesen und Fenster anordnen kann. Der MCP-Server ist ab Werk abgeschaltet. Alles dazu unter Fernsteuerung & MCP-Server.

Grenzen auf macOS

Der Fenstermanager von macOS lässt sich nicht ersetzen, nur fernsteuern. Diese Tabelle sagt offen, wo die Grenze verläuft.

FunktionStatusGrund bzw. Ersatz
Fenster kacheln, verschieben, skalieren✅Über die Bedienungshilfen-API
Globale Tastenkürzel✅Ein CGEventTap fängt die Taste ab, bevor die App sie sieht
Virtuelle Arbeitsflächen✅Eigene Umsetzung, nicht die Spaces des Systems
Mehrere Bildschirme✅Zuordnung nach größter Überlappung, Berechnung je Schirm
Fensterrahmen, Ecken, Schatten❌Zeichnet der WindowServer – kein Zugriff über eine API
Echte Transparenz oder Weichzeichner je Fenster❌Nur die App selbst kann das für ihre Fenster festlegen
Pseudo-Tiling (pseudo)❌Setzt einen eigenen Compositor voraus
Spaces des Systems steuern❌Keine öffentliche API – Kachelwerk bringt eigene Arbeitsflächen mit
Fenster im nativen Vollbild kacheln❌Diese liegen auf einem eigenen Space und werden übersprungen
Systemeinstellungen kacheln❌Die App erzwingt ihre Größe selbst; sie steht in ignore_apps
Fenstertitel ändern❌AXTitle ist bei fremden Prozessen schreibgeschützt – deshalb kennzeichnet ein schwebendes Abzeichen das Hauptfenster
Fenster mit der Maus verschieben (bindm)⚠️Die Konfigurationszeile wird gelesen, die Mausgeste fehlt noch
Animationen⚠️Kachelwerk interpoliert selbst – macOS animiert Fremdfenster nicht

Kürzel ändern ohne Texteditor

Wer keine Konfigurationsdatei anfassen will, ändert jedes Kürzel direkt in der App: Menüleiste → Keybindings → Zeile auswählen → „Bearbeiten …". Der Dialog zeichnet den Tastendruck auf, meldet Konflikte mit bereits belegten Kombinationen und schreibt anschließend die passende bind-Zeile in die Konfigurationsdatei. Beide Wege führen also zur selben Datei – die Oberfläche ist eine Schreibhilfe, keine zweite Quelle der Wahrheit.

Unter der Haube

KennzahlWert
SpracheSwift 6.2
OberflächeSwiftUI + AppKit
Swift-Dateien130
Codezeilenrund 17.400
Testfälle702, laufen headless in Millisekunden
Speicherbedarf der Appca. 8 MB

Der Kern liegt in einem eigenen Modul ohne einen einzigen AppKit-Import. Die Layout-Berechnungen sind reine Funktionen ohne gespeicherten Zustand – auch das scrollende Band berechnet seinen Versatz bei jedem Durchlauf neu, statt ihn aufzuaddieren. Deshalb driftet nichts nach einem Bildschirmwechsel, und deshalb laufen alle Tests ohne Bildschirm, ohne Freigabe und ohne App-Bundle.