Skip to Content
DesignCompact ModeCompact-Mode-Design: Wettbewerbsanalyse und Optimierung

Compact-Mode-Design: Wettbewerbsanalyse und Optimierung

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

Benutzerdokumentation: Settings — ui.compactMode.

1. Zusammenfassung

Sowohl Qwen Code als auch Claude Code bieten einen Ctrl+O-Shortcut zum Umschalten zwischen kompakten und detaillierten Tool-Ausgaben, aber die Designphilosophie, der Standardzustand und das Interaktionsmodell unterscheiden sich grundlegend. Dieses Dokument bietet einen tiefgehenden Vergleich auf Quellcode-Ebene, identifiziert UX-Lücken und schlägt Optimierungen für Qwen Code vor.

DimensionClaude CodeQwen Code
StandardmodusCompact (verbose=false)Verbose (compactMode=false)
UmschaltlogikTemporäre DetailansichtPersistente Präferenzumschaltung
PersistenzNur Sitzung, Reset bei NeustartIn settings.json gespeichert
GeltungsbereichGlobaler Bildschirmwechsel (Prompt ↔ Transkript)Komponentenweises Rendering-Toggle
Eingefrorener SnapshotKeiner (kein Konzept)Keiner (entfernt)
Expand-Hinweis pro ToolJa (“ctrl+o to expand”)Ja (“Drücke 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 komponentenbasierten Rendering-Toggles:

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

2.2 Wichtige Quelldateien

KomponenteDateiKernlogik
Umschalt-Handlersrc/hooks/useGlobalKeybindings.tsx:90-132Wechselt screen zwischen 'prompt' und 'transcript'
Tastenkombinationsrc/keybindings/defaultBindings.ts:44app:toggleTranscript
Zustandsdefinitionsrc/state/AppStateStore.ts:472verbose: false (nur Sitzung)
Expand-Hinweissrc/components/CtrlOToExpand.tsx:29-46Tool-spezifischer Text “(ctrl+o to expand)“
Nachrichtenfiltersrc/components/Messages.tsx:93-151filterForBriefTool() für Compact-Ansicht
Berechtigungsrc/components/permissions/PermissionRequest.tsxWird im Overlay-Layer gerendert, nie ausgeblendet

2.3 Designentscheidungen

  1. Compact ist der Standard. Benutzer sehen sofort eine aufgeräumte Oberfläche; Details sind opt-in.
  2. Sitzungsbasiert. verbose wird bei jeder neuen Sitzung auf false zurückgesetzt – Claude Code geht davon aus, dass Benutzer generell die Compact-Ansicht bevorzugen und Details nur temporär benötigen.
  3. Bildschirmweites Toggle. Ctrl+O ändert nicht, wie Komponenten gerendert werden; es schaltet die gesamte Anzeige zwischen einem “Prompt”-Bildschirm (compact) und einem “Transcript”-Bildschirm (detailed) um.
  4. Kein eingefrorener Snapshot. Es gibt kein Konzept zum Einfrieren von Snapshots. Beim Umschalten aktualisiert sich die Anzeige sofort mit dem aktuellen Zustand.
  5. Berechtigungsdialoge sind separat. Tool-Freigaben werden in einem dedizierten Overlay-Layer gerendert, der niemals vom verbose/compact-Toggle beeinflusst wird.
  6. Hinweis pro Tool. Die Komponente CtrlOToExpand zeigt einen kontextuellen Hinweis bei einzelnen Tools an, wenn diese große Ausgaben erzeugen; in Sub-Agenten wird er unterdrückt.

2.4 Benutzerablauf

Sitzungsstart → Compact-Modus (Standard) ├─ Tool-Ausgaben werden in einer Zeile zusammengefasst ├─ Große Tool-Ausgaben zeigen den Hinweis "(ctrl+o to expand)" ├─ Benutzer drückt Ctrl+O │ └─→ Bildschirm wechselt zu Transcript (Detailansicht) │ └─ Benutzer sieht alle Tool-Ausgaben, Thinking usw. ├─ Benutzer drückt erneut Ctrl+O │ └─→ Bildschirm wechselt zurück zu Prompt (Compact) └─ Sitzungsende → verbose wird auf false zurückgesetzt

3. Analyse der Qwen-Code-Implementierung

3.1 Architektur

Qwen Code verwendet ein komponentenbasiertes Rendering-Flag, das jede UI-Komponente aus dem Context ausliest:

┌─────────────────────────────────────┐ │ CompactModeContext │ │ compactMode: boolean (Standard: false)│ │ setCompactMode: (v) => void │ └──────────┬──────────────────────────┘ ┌─────┴──────┐ │ Ctrl+O │ toggles compactMode │ 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
Umschalt-HandlerAppContainer.tsx:1684-1690Toggelt compactMode, persistiert in Einstellungen
ContextCompactModeContext.tsxcompactMode, setCompactMode
Tool-GruppeToolGroupMessage.tsx:105-110showCompact mit 4 Force-Expand-Bedingungen
Tool-NachrichtToolMessage.tsx:346-350Blendet displayRenderer im Compact-Modus aus
Compact-AnzeigeCompactToolGroupDisplay.tsx:49-108Einzeilige Zusammenfassung mit Status + Hinweis
BestätigungToolConfirmationMessage.tsx:113-147Vereinfachte 3-Optionen-Compact-Bestätigung
TippsTips.tsx:14-29Startup-Tipp-Rotation enthält Compact-Mode-Hinweis
Einstellungen-SyncSettingsDialog.tsx:189-193Synchronisiert mit CompactModeContext + refreshStatic
MainContentMainContent.tsx:60-76Rendert live pendingHistoryItems
ThinkingHistoryItemDisplay.tsx:123-133Blendet gemini_thought im Compact-Modus aus

3.3 Designentscheidungen

  1. Verbose ist der Standard. Benutzer sehen standardmäßig alle Tool-Ausgaben und Thinking.
  2. Persistente Präferenz. compactMode wird in settings.json gespeichert und überlebt Sitzungen.
  3. Komponentenbasiertes Rendering. Jede Komponente liest compactMode aus dem Context 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 Snapshot-Einfrieren. Das Toggle zeigt immer Live-Ausgaben – keine eingefrorenen Snapshots.
  6. Sync mit Einstellungsdialog. Das Umschalten des Compact-Modus in den Einstellungen aktualisiert den React-State sofort über setCompactMode.
  7. Unauffällige Entdeckbarkeit. Der Compact-Modus wird über die Startup-Tipp-Rotation eingeführt, anstatt über einen persistenten Footer-Indikator, um UI-Überladung zu vermeiden.

3.4 Benutzerablauf

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

4. Detaillierte Analyse der Hauptunterschiede

4.1 Philosophie des Standardmodus

AspektClaude Code (Compact-Standard)Qwen Code (Verbose-Standard)
Erster EindruckAufgeräumt, minimal – professionelles GefühlInformationsreich – volle Transparenz
LernkurveBenutzer muss Ctrl+O lernen, um Details zu sehenBenutzer sieht sofort alles
ZielgruppeErfahrene Benutzer, die dem Tool vertrauenBenutzer, die verstehen wollen, was passiert
InformationsüberflutungStandardmäßig vermiedenFür neue Benutzer möglich
EntdeckbarkeitTool-spezifische “(ctrl+o to expand)“-HinweiseStartup-Tipp-Rotation + ?-Shortcuts + /help

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

4.2 Persistenzmodell

AspektClaude CodeQwen Code
Persistiert?Nein – nur SitzungJa – in settings.json
BegründungVerbose ist temporäre EinsichtModus ist Benutzerpräferenz
Verhalten bei NeustartStartet immer im Compact-ModusStartet mit zuletzt verwendetem Modus

Analyse: Claude Code betrachtet die Detailansicht als kurzfristiges Bedürfnis – man schaut nach und kehrt zurück. Qwen Code behandelt es als stabile Präferenz – einige Benutzer wollen immer Details, andere immer Compact. Beide Ansätze sind valide; der Ansatz von Qwen Code ist flexibler.

4.3 Bestätigungsschutz

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

Analyse: Die architektonische Trennung von Claude Code (Overlay-Layer) ist robuster. Der Force-Expand-Ansatz von Qwen Code ist effektiv, erfordert aber, dass jeder neue interaktive Zustand explizit zur Bedingungsliste hinzugefügt wird.

4.4 Rendering-Ansatz

AspektClaude CodeQwen Code
Toggle-GeltungsbereichBildschirmebene (Prompt ↔ Transkript)Komponentenebene (jede Komponente entscheidet)
GranularitätAlles oder nichtsFeingranular pro Komponente
FlexibilitätNiedrig – globaler SwitchHoch – Komponenten können überschreiben
KonsistenzGarantiertHängt von der Implementierung jeder Komponente ab

Analyse: Der komponentenbasierte Ansatz von Qwen Code ist flexibler (z. B. Force-Expand für spezifische Bedingungen), erfordert aber mehr Disziplin, um Konsistenz zu wahren. Der bildschirmbasierte Ansatz von Claude Code ist einfacher und garantiert konsistentes Verhalten.

5. Optimierungsempfehlungen

5.1 [P0] Verbose als Standard beibehalten – Keine Änderung erforderlich

Der Verbose-Standard von Qwen Code ist die richtige Wahl für die aktuelle Phase. Neue Benutzer benötigen Transparenz, um Vertrauen aufzubauen. Mit zunehmender Produktreife kann erwogen werden, Compact zum Standard zu machen (wie bei Claude Code).

5.2 [P1] Tool-spezifisches Aufklappen bei großen Ausgaben

Claude Code zeigt “(ctrl+o to expand)” bei einzelnen Tools an, die große Ausgaben erzeugen. Qwen Code hat aktuell nur ein globales Toggle. In Betracht ziehen:

  • Wenn ein einzelnes Tool Ausgaben erzeugt, die N Zeilen überschreiten, einen tool-spezifischen “Expand”-Hinweis im Compact-Modus anzeigen.
  • Umfang: Zukünftige Erweiterung, keine aktuelle Priorität.

5.3 [P2] Sitzungsbasierte Überschreibung in Betracht ziehen

Einige Benutzer möchten Compact als Standard, benötigen aber gelegentlich Verbose für eine bestimmte Sitzung. In Betracht ziehen, beides zu unterstützen:

  • settings.json → persistenter Standard (aktuelles Verhalten)
  • Ctrl+O während der Sitzung → temporäre Überschreibung nur für die aktuelle Sitzung (Verhalten von Claude Code)
  • Bei Sitzungsneustart → Rückkehr zum Wert aus settings.json

Dies bietet Benutzern das Beste aus beiden Welten. Die Implementierung würde erfordern, den “Einstellungs-Standard” vom “Sitzungs-Überschreibungs”-State zu trennen.

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

Aktuell basiert der Bestätigungsschutz auf showCompact-Bedingungen in ToolGroupMessage. Ein robusterer Ansatz wäre:

  • Bestätigungen in einem separaten Layer rendern (ähnlich dem Overlay-Ansatz von Claude Code).
  • 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 im Branch feat/compact-mode-optimization:

FeatureStatusHinweise
Startup-Tipp-HinweisErledigtCompact-Mode-Tipp in Tipp-Rotation (unauffällig)
Ctrl+O in Tastenkombinationen (?)ErledigtZu KeyboardShortcuts-Komponente hinzugefügt
Ctrl+O in /helpErledigtZu Help-Komponente hinzugefügt
Sync mit EinstellungsdialogErledigtSynchronisiert compactMode mit CompactModeContext
Kein Snapshot-EinfrierenErledigtToggle zeigt immer Live-Ausgaben
BestätigungsschutzErledigtForce-Expand + WaitingForConfirmation-Guard
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.tsxUmschalt-Handler, State-Initialisierung, Context-Provider
packages/cli/src/ui/contexts/CompactModeContext.tsxContext-Definition
packages/cli/src/ui/components/messages/ToolGroupMessage.tsxForce-Expand-Logik
packages/cli/src/ui/components/messages/ToolMessage.tsxTool-spezifisches Ausblenden von Ausgaben
packages/cli/src/ui/components/messages/CompactToolGroupDisplay.tsxRendering der Compact-Ansicht
packages/cli/src/ui/components/messages/ToolConfirmationMessage.tsxCompact-Bestätigungs-UI
packages/cli/src/ui/components/MainContent.tsxRendering ausstehender History-Items
packages/cli/src/ui/components/Tips.tsxStartup-Tipp mit Compact-Mode-Hinweis
packages/cli/src/ui/components/Help.tsx/help-Shortcut-Eintrag
packages/cli/src/ui/components/KeyboardShortcuts.tsx?-Shortcut-Eintrag
packages/cli/src/ui/components/SettingsDialog.tsxEinstellungen-Sync
packages/cli/src/ui/components/HistoryItemDisplay.tsxAusblenden von Thinking-Inhalten
packages/cli/src/config/settingsSchema.tsEinstellungsdefinition
packages/cli/src/config/keyBindings.tsCtrl+O-Bindung

Claude Code (Referenz)

DateiZweck
src/hooks/useGlobalKeybindings.tsxUmschalt-Handler
src/state/AppStateStore.tsState-Definition (verbose: false)
src/components/CtrlOToExpand.tsxTool-spezifischer Expand-Hinweis
src/components/Messages.tsxFilter für kurze Nachrichten
src/screens/REPL.tsxModuswechsel auf Bildschirmebene
src/components/permissions/PermissionRequest.tsxOverlay-basierte Bestätigung
Last updated on