Skip to Content
DesignCompact ModeCompact Mode Design: Wettbewerbsanalyse & Optimierung

Compact Mode Design: Wettbewerbsanalyse & Optimierung

Ctrl+O Compact/Verbose-Modus-Umschaltung – Wettbewerbsanalyse mit Claude Code, Überprüfung der aktuellen Implementierung und Optimierungsempfehlungen.

Benutzerdokumentation: Einstellungen — ui.compactMode.

1. Zusammenfassung

Qwen Code und Claude Code bieten beide eine Ctrl+O-Tastenkombination zum Umschalten zwischen kompakten und detaillierten Tool-Ausgabeansichten, aber die Designphilosophie, der Standardzustand und das Interaktionsmodell unterscheiden sich grundlegend. Dieses Dokument bietet einen detaillierten Quellcode-Vergleich, identifiziert UX-Lücken und schlägt Optimierungen für Qwen Code vor.

DimensionClaude CodeQwen Code
StandardmodusCompact (verbose=false)Verbose (compactMode=false)
UmschaltsemantikTemporärer Einblick in DetailsDauerhafter Präferenzwechsel
PersistenzNur für Sitzung, wird beim Neustart zurückgesetztIn settings.json persistent gespeichert
GültigkeitsbereichGlobaler Bildschirmwechsel (Prompt ↔ Transkript)Umbruch pro Komponente
Eingefrorener SnapshotKein (kein Konzept)Kein (entfernt)
Erweiterungshinweis pro ToolJa („ctrl+o to expand“)Ja („Drücken Sie Ctrl+O, um die vollständige Tool-Ausgabe anzuzeigen“)

2. Analyse der Claude Code-Implementierung

2.1 Architektur

Claude Code verwendet einen bildschirmbasierten Ansatz anstelle eines Render-Umschalters auf Komponentenebene:

┌──────────────────────────────────┐ │ AppState (Zustand) │ │ verbose: boolean (default: false)│ │ screen: 'prompt' | 'transcript' │ └──────────┬───────────────────────┘ ┌─────┴──────┐ │ Ctrl+O │ schaltet Bildschirmmodus um │ Handler │ KEIN Rendering-Flag └─────┬──────┘ ┌─────▼──────────────┐ │ REPL.tsx │ │ screen='prompt' → kompakte Ansicht (Standard) │ screen='transcript'→ detaillierte Ansicht └────────────────────┘

2.2 Wichtige Quelldateien

KomponenteDateiKernlogik
Toggle-Handlersrc/hooks/useGlobalKeybindings.tsx:90-132Schaltet screen zwischen 'prompt' und 'transcript'
Tastenkombinationsrc/keybindings/defaultBindings.ts:44app:toggleTranscript
Zustandsdefinitionsrc/state/AppStateStore.ts:472verbose: false (nur für Sitzung)
Erweiterungshinweissrc/components/CtrlOToExpand.tsx:29-46Text pro Tool „(ctrl+o to expand)“
Nachrichtenfiltersrc/components/Messages.tsx:93-151filterForBriefTool() für kompakte Ansicht
Berechtigungsrc/components/permissions/PermissionRequest.tsxWird in Überlagerungsebene gerendert, nie ausgeblendet

2.3 Designentscheidungen

  1. Compact ist der Standard. Benutzer sehen sofort eine saubere Oberfläche; Details sind optional.
  2. Auf Sitzung beschränkt. verbose wird bei jeder neuen Sitzung auf false zurückgesetzt — Claude Code geht davon aus, dass Benutzer in der Regel die kompakte Ansicht bevorzugen und Details nur vorübergehend benötigen.
  3. Umschaltung auf Bildschirmebene. Ctrl+O ändert nicht, wie Komponenten rendern; es schaltet die gesamte Anzeige zwischen einem „Prompt”-Bildschirm (kompakt) und einem „Transkript”-Bildschirm (detailliert) um.
  4. Kein eingefrorener Snapshot. Es gibt kein Snapshot-Einfrierkonzept. Beim Umschalten wird die Anzeige sofort mit dem aktuellen Zustand aktualisiert.
  5. Berechtigungsdialoge sind getrennt. Tool-Genehmigungen werden in einer eigenen Überlagerungsebene gerendert, die niemals vom Verbose/Compact-Umschalter beeinflusst wird.
  6. Hinweis pro Tool. Die CtrlOToExpand-Komponente zeigt einen kontextbezogenen Hinweis bei einzelnen Tools an, wenn diese große Ausgaben produzieren, unterdrückt in Sub-Agents.

2.4 Benutzerablauf

Sitzungsstart → Compact-Modus (Standard) ├─ Tool-Ausgaben werden in einer einzigen Zeile zusammengefasst ├─ Große Tool-Ausgabe zeigt Hinweis „(ctrl+o to expand)" ├─ Benutzer drückt Ctrl+O │ └─→ Bildschirm wechselt zu Transkript (detaillierte Ansicht) │ └─ Benutzer sieht gesamte Tool-Ausgabe, Denkprozesse usw. ├─ Benutzer drückt erneut Ctrl+O │ └─→ Bildschirm wechselt zurück zu Prompt (kompakt) └─ Sitzung endet → verbose wird auf false zurückgesetzt

3. Analyse der Qwen Code-Implementierung

3.1 Architektur

Qwen Code verwendet ein Rendering-Flag auf Komponentenebene, das jede UI-Komponente aus dem Kontext liest:

┌─────────────────────────────────────┐ │ CompactModeContext │ │ compactMode: boolean (default: false)│ │ setCompactMode: (v) => void │ └──────────┬──────────────────────────┘ ┌─────┴──────┐ │ Ctrl+O │ schaltet compactMode um │ Handler │ persistiert in Einstellungen └─────┬──────┘ ┌─────▼──────────────────┐ │ Jede Komponente liest │ │ compactMode und │ │ entscheidet, wie sie rendert │ └────────────────────────┘ ┌─────▼──────────────────────────────┐ │ ToolGroupMessage │ │ showCompact = compactMode │ │ && !hasConfirmingTool │ │ && !hasErrorTool │ │ && !isEmbeddedShellFocused │ │ && !isUserInitiated │ └────────────────────────────────────┘

3.2 Wichtige Quelldateien

KomponenteDateiKernlogik
Toggle-HandlerAppContainer.tsx:1684-1690Schaltet compactMode um, persistiert in Einstellungen
KontextCompactModeContext.tsxcompactMode, setCompactMode
Tool-GruppeToolGroupMessage.tsx:105-110showCompact mit 4 Force-Expand-Bedingungen
Tool-NachrichtToolMessage.tsx:346-350Blendet displayRenderer im Compact-Modus aus
Kompakte AnzeigeCompactToolGroupDisplay.tsx:49-108Einzeilige Zusammenfassung mit Status + Hinweis
BestätigungToolConfirmationMessage.tsx:113-147Vereinfachte 3-Optionen-Compact-Genehmigung
TippsTips.tsx:14-29Start-Tipp-Rotation enthält Compact-Modus-Hinweis
Einstellungen-SyncSettingsDialog.tsx:189-193Synchronisiert mit CompactModeContext + refreshStatic
MainContentMainContent.tsx:60-76Rendert live-pendingHistoryItems
DenkprozesseHistoryItemDisplay.tsx:123-133Blendet gemini_thought im Compact-Modus aus

3.3 Designentscheidungen

  1. Verbose ist der Standard. Benutzer sehen standardmäßig sämtliche Tool-Ausgaben und Denkprozesse.
  2. Dauerhafte Präferenz. compactMode wird in settings.json gespeichert und überlebt sitzungsübergreifend.
  3. Rendering auf Komponentenebene. Jede Komponente liest compactMode aus dem Kontext und passt ihr eigenes Rendering an.
  4. Force-Expand-Schutz. Vier Bedingungen überschreiben den Compact-Modus, um sicherzustellen, dass kritische UI-Elemente immer sichtbar sind (Bestätigungen, Fehler, Shell, benutzerinitiiert).
  5. Kein eingefrorener Snapshot. Der Umschalter zeigt immer Live-Ausgaben – keine eingefrorenen Snapshots.
  6. Synchronisation mit Einstellungsdialog. Das Umschalten des Compact-Modus aus den Einstellungen aktualisiert den React-Status sofort über setCompactMode.
  7. Unaufdringliche Auffindbarkeit. Der Compact-Modus wird über die Start-Tipp-Rotation eingeführt, anstatt durch einen persistenten Fußzeilenindikator, um UI-Überfrachtung zu vermeiden.

3.4 Benutzerablauf

Sitzungsstart → Verbose-Modus (Standard) ├─ Alle Tool-Ausgaben, Denkprozesse, Details sichtbar ├─ Benutzer drückt Ctrl+O (oder schaltet in Einstellungen um) │ └─→ compactMode = true, gespeichert │ ├─ Tool-Gruppen zeigen einzeilige Zusammenfassung │ ├─ Denkprozess-/Inhalte ausgeblendet │ ├─ Bestätigungen, Fehler, Shell bleiben erweitert ├─ Benutzer drückt erneut Ctrl+O │ └─→ compactMode = false, gespeichert │ └─ Alle Details wieder sichtbar └─ Nächste Sitzung → gleicher Modus wie letzte Sitzung

4. Wesentliche Unterschiede im Detail

4.1 Philosophie des Standardmodus

AspektClaude Code (Compact-Standard)Qwen Code (Verbose-Standard)
Erster EindruckSauber, minimalistisch – professionellInformationsreich – volle Transparenz
LernkurveBenutzer muss Ctrl+O lernen, um Details zu sehenBenutzer kann sofort alles sehen
ZielgruppeErfahrene Benutzer, die dem Tool vertrauenBenutzer, die verstehen wollen, was passiert
InformationsüberflutungStandardmäßig vermiedenFür neue Benutzer möglich
AuffindbarkeitHinweise pro Tool „(ctrl+o to expand)“Start-Tipp-Rotation + ? Tastenkombinationen + /help

Analyse: Claude Codes Compact-Standard funktioniert, weil seine Benutzerbasis im Allgemeinen aus erfahrenen Entwicklern besteht, die dem Tool vertrauen und nicht jeden Tool-Aufruf sehen müssen. Qwen Codes Verbose-Standard ist für die frühere Phase angemessen, in der der Aufbau von Benutzervertrauen durch Transparenz wichtig ist.

4.2 Persistenzmodell

AspektClaude CodeQwen Code
Persistiert?Nein – nur für SitzungJa – in settings.json
BegründungVerbose ist temporärer EinblickModus ist Benutzerpräferenz
Verhalten beim NeustartStartet immer kompaktStartet mit zuletzt verwendetem Modus

Analyse: Claude Code behandelt die Detailansicht als vorübergehendes Bedürfnis – man schaut kurz rein und geht dann zurück. Qwen Code behandelt sie als stabile Präferenz – manche Benutzer wollen immer Details, andere immer kompakt. Beide Ansätze sind gültig; Qwen Codes Ansatz ist flexibler.

4.3 Bestätigungsschutz

AspektClaude CodeQwen Code
MechanismusÜberlagerungs-/Modal-Ebene (strukturell getrennt)Force-Expand-Bedingungen in showCompact
AbdeckungVollständig – Genehmigungen können nie ausgeblendet werdenVollständig – 4 Bedingungen decken alle interaktiven Zustände ab
Compact-Bestätigungs-UIN/A (Überlagerung ist immer vollständig)Vereinfachte 3-Optionen-RadioButtonSelect

Analyse: Claude Codes architektonische Trennung (Überlagerungsebene) ist robuster. Qwen Codes Force-Expand-Ansatz ist effektiv, erfordert aber, dass jeder neue interaktive Zustand explizit zur Bedingungsliste hinzugefügt wird.

4.4 Rendering-Ansatz

AspektClaude CodeQwen Code
UmschaltbereichBildschirmebene (Prompt ↔ Transkript)Komponentenebene (jede Komponente entscheidet)
GranularitätAlles oder nichtsFein granular pro Komponente
FlexibilitätNiedrig – globaler SchalterHoch – Komponenten können überschreiben
KonsistenzGarantiertHängt von der Implementierung jeder Komponente ab

Analyse: Qwen Codes komponentenbasierter Ansatz ist flexibler (z. B. Force-Expand für bestimmte Bedingungen), erfordert aber mehr Disziplin, um Konsistenz zu wahren. Claude Codes bildschirmbasierter Ansatz ist einfacher und garantiert konsistentes Verhalten.

5. Optimierungsempfehlungen

5.1 [P0] Verbose als Standard beibehalten – Keine Änderung nötig

Qwen Codes Verbose-Standard ist die richtige Wahl für die aktuelle Phase. Benutzer, die mit dem Tool neu sind, brauchen Transparenz, um Vertrauen aufzubauen. Mit zunehmender Produktreife sollte in Betracht gezogen werden, Compact zum Standard zu machen (wie bei Claude Code).

5.2 [P1] Pro-Tool-Erweiterung für große Ausgaben

Claude Code zeigt „(ctrl+o to expand)” bei einzelnen Tools an, die große Ausgaben produzieren. Qwen Code hat derzeit nur einen globalen Umschalter. Ziehen Sie in Betracht:

  • Wenn ein einzelnes Tool eine Ausgabe mit mehr als N Zeilen produziert, zeigen Sie im Compact-Modus einen „Erweitern”-Hinweis pro Tool an.
  • Umfang: zukünftige Verbesserung, keine aktuelle Priorität.

5.3 [P2] Sitzungsbezogene Überschreibung in Betracht ziehen

Manche Benutzer möchten vielleicht Compact als Standard, benötigen aber gelegentlich Verbose für eine bestimmte Sitzung. Ziehen Sie die Unterstützung beider Varianten in Betracht:

  • settings.json → dauerhafter Standard (aktuelles Verhalten)
  • Ctrl+O während der Sitzung → temporäre Überschreibung nur für die aktuelle Sitzung (Claude Code-Verhalten)
  • Beim Sitzungsneustart → auf den Wert in settings.json zurückfallen

Dies gibt Benutzern das Beste aus beiden Welten. Die Implementierung würde erfordern, den „Einstellungsstandard” vom „Sitzungs-Override”-Zustand zu trennen.

5.4 [P2] Strukturelle Trennung für Bestätigungen

Derzeit basiert der Bestätigungsschutz auf showCompact-Bedingungen in ToolGroupMessage. Ziehen Sie einen robusteren Ansatz in Betracht:

  • Bestätigungen in einer separaten Ebene rendern (wie Claude Codes Überlagerungsansatz).
  • Dies würde es architektonisch unmöglich machen, dass der Compact-Modus Bestätigungen beeinflusst.
  • Niedrigere Priorität, da der aktuelle Force-Expand-Ansatz korrekt funktioniert.

6. Aktueller Implementierungsstatus

Nach den Änderungen des Branches feat/compact-mode-optimization:

FunktionStatusHinweise
Start-Tipp-HinweisErledigtCompact-Modus-Tipp in Tipp-Rotation (unaufdringlich)
Ctrl+O in Tastenkombinationen (?)ErledigtZur KeyboardShortcuts-Komponente hinzugefügt
Ctrl+O in /helpErledigtZur Help-Komponente hinzugefügt
Einstellungsdialog-SynchronisationErledigtSynchronisiert compactMode mit CompactModeContext
Kein Snapshot-EinfrierenErledigtUmschalter zeigt immer Live-Ausgabe
BestätigungsschutzErledigtForce-Expand + WaitingForConfirmation-Sicherung
Shell-SchutzErledigt!isEmbeddedShellFocused Force-Expand
FehlerschutzErledigt!hasErrorTool Force-Expand
Benutzerdokumentation aktualisiertErledigtsettings.md, keyboard-shortcuts.md

7. Dateireferenz

Qwen Code

DateiZweck
packages/cli/src/ui/AppContainer.tsxToggle-Handler, Zustandsinitialisierung, Kontextanbieter
packages/cli/src/ui/contexts/CompactModeContext.tsxKontextdefinition
packages/cli/src/ui/components/messages/ToolGroupMessage.tsxForce-Expand-Logik
packages/cli/src/ui/components/messages/ToolMessage.tsxAusblenden der Tool-Ausgabe pro Tool
packages/cli/src/ui/components/messages/CompactToolGroupDisplay.tsxRendering der kompakten Ansicht
packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsxCompact-Bestätigungs-UI
packages/cli/src/ui/components/MainContent.tsxRendering ausstehender History-Elemente
packages/cli/src/ui/components/Tips.tsxStart-Tipp mit Compact-Modus-Hinweis
packages/cli/src/ui/components/Help.tsx/help-Tastenkombinationseintrag
packages/cli/src/ui/components/KeyboardShortcuts.tsx?-Tastenkombinationseintrag
packages/cli/src/ui/components/SettingsDialog.tsxEinstellungs-Synchronisation
packages/cli/src/ui/components/HistoryItemDisplay.tsxAusblenden von Denkprozess-Inhalten
packages/cli/src/config/settingsSchema.tsEinstellungsdefinition
packages/cli/src/config/keyBindings.tsxCtrl+O-Bindung

Claude Code (Referenz)

DateiZweck
src/hooks/useGlobalKeybindings.tsxToggle-Handler
src/state/AppStateStore.tsZustandsdefinition (verbose: false)
src/components/CtrlOToExpand.tsxErweiterungshinweis pro Tool
src/components/Messages.tsxKurznachrichtenfilter
src/screens/REPL.tsxBildschirmebenen-Modusumschaltung
src/components/permissions/PermissionRequest.tsxÜberlagerungsbasierte Bestätigung
Last updated on