paneflow.json ist eine benutzerspezifische JSON-Datei. Alle Schlüssel
sind optional, und {} ist eine gültige Konfiguration. Der Rust-Config-
Loader und die Runtime-Resolver sind die Quelle des Verhaltens; das
veröffentlichte JSON Schema
spiegelt die öffentlichen Schlüssel für Editor-Validierung und
Autovervollständigung.
Unbekannte Top-Level-Schlüssel werden zur Runtime ignoriert, aber vom Schema in Editoren markiert. Ein gültiges Speichern wird vom Config- Watcher neu geladen. Bei Hot Reload behält ungültiges JSON die letzte gültige Konfiguration, statt Defaults zu senden. Beim Start fällt eine ungültige Datei auf Defaults zurück und schreibt eine Warnung ins Log.
File locations
| Platform | Path |
|---|---|
| Linux und macOS | ~/.paneflow/paneflow.json |
| Windows | %USERPROFILE%\.paneflow\paneflow.json |
PANEFLOW_HOME verschiebt das ganze Verzeichnis (Konfiguration, Session,
Worktrees, Cache, Hilfsbinärdateien). Eine Konfiguration an den früheren Orten
(~/.config/paneflow, ~/Library/Application Support/paneflow,
%APPDATA%\paneflow) wird beim ersten Start nach ~/.paneflow kopiert.
Editor schema
Add this at the top of the file for autocomplete in VS Code, Zed, JetBrains IDEs, Helix, and other JSON Schema-aware editors:
{
"$schema": "https://github.com/arthjean/paneflow/raw/main/schemas/paneflow.schema.json",
"$schemaVersion": "1.0.0"
}Top-level keys
| Key | Type | Default | Applied | Notes |
|---|---|---|---|---|
$schema | string | none | Editor only | Points editors to the published schema. Ignored by Paneflow. |
$schemaVersion | string | 1.0.0 | Startup/reload | Unknown versions warn but do not block loading. |
default_shell | string/null | Platform shell fallback | New terminal | Unix: configured -> $SHELL -> /bin/sh. Windows: configured -> pwsh.exe -> powershell.exe -> %ComSpec% -> C:\Windows\System32\cmd.exe -> cmd.exe. |
theme | string/null | Paneflow Dark | Hot reload | The light or dark variant of one preset: Paneflow, Vercel, Claude, Cursor, Tailwind. Pre-preset names (One Dark, PaneFlow Light, Vercel, Claude, Cursor) still resolve. Runtime lookup is case-insensitive. |
theme_mode | string/null | dark | Hot reload | light and dark force the matching bundled theme; system follows the OS window appearance. |
font_family | string/null | bundled JetBrainsMono Nerd Font | Hot reload cache | Accepts .PaneflowMono, JetBrainsMono NF, JetBrainsMono NFM, .PaneflowSans, embedded font names, or installed monospace families. |
font_fallbacks | string array/null | GPUI fallback stack | Hot reload cache | Ordered extra fallback families for glyphs missing from font_family. |
font_size | number/null | 13.0 | Hot reload cache | Points, valid range 8.0 to 32.0; invalid values fall back to 13.0. |
font_weight | string/null | normal | Hot reload cache | One of thin, extra_light, light, semi_light, normal, medium, semi_bold, bold, extra_bold, black, extra_black. |
line_height | number/null | 1.0 | Hot reload cache | Multiplier of the font's own line height (ascent, descent, and line gap), valid range 0.8 to 2.5. The cell is rounded to whole device pixels. |
cell_width | number/null | 1.0 | Hot reload cache | Multiplier of the font's advance, valid range 0.8 to 2.0. The cell is rounded to whole device pixels. |
unfocused_pane_opacity | number/null | 1.0 | Hot reload | Opacity of panes that do not hold focus, when a workspace has more than one pane. Range 0.15 to 1.0; 1.0 disables the dim. |
reduce_motion | boolean/null | false | Hot reload | Minimizes non-essential interface motion: hover transitions settle instantly and decorative animations render a static frame. Trackpad scrolling in a terminal moves by whole lines instead of following the gesture by the pixel. |
sidebar_show | object/null | all off | Hot reload | What a session tab row shows beyond its name: branch adds its git branch, diffstat adds its insertion and deletion counts, pr turns the branch icon into a pull-request glyph colored by the request's state when one exists, indent_guide draws a hairline under a workspace's folder icon down its tab rows. The first two read the tab's bound worktree, or its workspace's checkout when the tab is unbound; pr needs the gh CLI and answers for GitHub remotes only. Toggled from the rail's Customize Sidebar menu. |
worktrees | object/null | siehe unten | Hot Reload | Wo Paneflow die für Branches erzeugten Git-Worktrees ablegt und wie es sie aufräumt: dir, auto_remove, keep_limit, for_new_branches. Settings > Worktrees bearbeitet dieselben Schlüssel. |
window_decorations | string/null | client | Startup | client draws Paneflow chrome; server delegates to the OS compositor. |
window_backdrop | string/null | auto | Startup | auto, mica, blurred, acrylic, transparent, opaque, or off. On Windows, blurred and acrylic set in the config resolve to auto; only PANEFLOW_WINDOW_BACKDROP applies blur there. PANEFLOW_WINDOW_BACKDROP overrides for one launch. |
windows_terminal_material | boolean/null | false | Window/terminal render | Windows-only terminal background material toggle. The Blended interface style sets it to true, Themed to false. Ignored on other platforms. |
windows_chrome_material | boolean/null | false | Window/chrome render | Windows-only native material in the primary navigation card. The Blended interface style sets it to true, Themed to false. Ignored on other platforms. |
macos_chrome_material | boolean/null | false | Window/chrome render | macOS-only native Sidebar material in the primary navigation card. The Blended interface style sets it to true, Themed to false. Ignored on other platforms. |
linux_terminal_material | boolean/null | false | Window/terminal render | Linux-only translucent terminal card over the window veil, so a compositor blur shows through. The Blended interface style sets it to true, Themed to false. Ignored on other platforms. |
linux_chrome_material | boolean/null | false | Window/chrome render | Linux-only translucent veil behind the sidebar and the title bar, so a compositor blur shows through. The Blended interface style sets it to true, Themed to false. Ignored on other platforms. |
option_as_meta | boolean/null | true on Linux and Windows, false on macOS | Hot reload | Sends Alt/Option as ESC-prefix Meta. On macOS, true makes Option plus a letter send Meta instead of composing a character; keep false when Option should type Unicode characters. A config reload applies it to open terminals. |
shell_integration | boolean/null | true | New terminal | Enables Paneflow shell snippets for OSC 7 CWD and OSC 133 command marks. |
editor | object/null | Minimap aus, Scrollbar an | Hot Reload | Was der Code-Editor neben dem Text zeichnet: minimap fügt eine Minimap am rechten Rand hinzu, scrollbar behält die vertikale Scrollbar. Wird im Steuerungsmenü des Editors umgeschaltet; die Wahl gilt für jede offene Datei. |
automation | object/null | alles aus | Hot Reload | Hintergrundarbeit nach einem Agent-Zug: tab_auto_naming fasst den jüngsten Austausch der Sitzung über die CLI des Agents (claude -p, codex exec, opencode run, pi --print) ohne Tools zu einem Tab-Namen aus 2 bis 5 Wörtern zusammen, höchstens einmal alle drei Minuten pro Sitzung und nur, wenn die Unterhaltung gewachsen ist. Ein von dir eingegebener Name wird nie ersetzt; "Reset name" öffnet den Tab wieder darauf. |
submit_paste_delay_ms | integer/null | 70 | IPC send | Floor delay between bracketed paste and Enter for paneflow send --submit. Range 10 to 5000. |
external_editor | string/null | auto | Next open action | Editor that opens file links, including terminal file links: auto, system, zed, cursor, windsurf, code, or visual_studio. auto uses $VISUAL, then $EDITOR, then the first known editor on PATH; system always uses the OS opener. A named editor that is not on PATH falls back to auto. |
shortcuts | object | {} | Hot reload | Maps keystrokes to action names. See shortcuts and actions. |
terminal | object/null | defaults below | Mixed | Namespaced terminal renderer and PTY settings. |
commands | array | [] | Settings/Run | Command palette entries and workspace templates. |
agent_profiles | array | [] | Hot Reload | Eigene Launcher-Einträge, die einen eingebauten Agenten mit zusätzlichen Umgebungsvariablen und Argumenten starten, etwa ein zweites Claude-Code-Konto über CLAUDE_CONFIG_DIR. Settings > Agents > Profiles bearbeitet dieselbe Liste. |
claude_code_bypass_permissions | boolean/null | false | Next Claude launch | Adds --permission-mode bypassPermissions to the Claude Code launcher. High-risk opt-in. |
ai_unrestricted | boolean/null | false | Per IPC call | Allows trusted conductors to submit to peer panes without PANEFLOW_IPC_SCRIPTING. |
ai_injection_fence | boolean/null | true | Per read call | Wraps surface.read output in an untrusted-output fence by default. |
on_quit | ask, keep, stop, null | ask | At quit | What quitting does while hosted sessions run: ask opens the quit dialog, keep leaves every session running, stop stops them all and shuts the host down. With no live session the app exits and shuts the idle host down. |
sidebar_ended_sessions | 0, 3, 5, 10, null | 5 | Next sidebar render | How many ended sessions a workspace previews in the sidebar before the rest collapse under one "N more ended sessions" row. Nothing is pruned; the cap only controls the preview. |
agent_panel | object/null | defaults below | Agents UI | Agents-view notification preferences. |
agents | object/null | defaults below | Restore and next launch | Agent conversation restore and Claude Code session-id preassignment. |
telemetry | object/null | { "enabled": null } | Startup/consent | Desktop telemetry consent. PANEFLOW_NO_TELEMETRY=1 overrides it. |
Agent launcher buttons
Each button key is boolean/null. null or omission auto-detects the
CLI binary. false hides the button. true forces it visible.
On Windows, the pane palette, the New pane menu, and the welcome screen offer
only Claude Code, Codex, Amp, Gemini, and Copilot, the runtimes that declare
Windows support, and hide agent_profiles entries based on the others. Linux
and macOS keep every agent below.
| Key | Agent |
|---|---|
claude_code_button_visible | Claude Code |
codex_button_visible | Codex |
opencode_button_visible | OpenCode |
pi_button_visible | Pi |
hermes_agent_button_visible | Hermes Agent |
grok_button_visible | Grok |
amp_button_visible | Amp |
gemini_button_visible | Gemini |
copilot_button_visible | Copilot |
factory_button_visible | Factory |
openclaw_button_visible | OpenClaw |
muse_button_visible | Muse Code |
fx_button_visible | fx (Linux and macOS) |
terminal
| Key | Type | Default | Applied | Notes |
|---|---|---|---|---|
terminal.ligatures | boolean/null | true | Hot reload cache | Enables programming ligatures when the active font supports them. |
terminal.integrated_glyphs | boolean/null | true | Hot reload | Draws built-in block glyphs as filled quads. |
terminal.color_emoji | boolean/null | true | Hot reload | Uses the platform color-emoji path. |
terminal.cursor_color | string/null | theme cursor | Hot reload/new terminal | #RRGGBB, RRGGBB, #RGB, or RGB. |
terminal.scrollbar | boolean/null | true | New terminal view | Overlay scrollbar shown while scrolling or hovering the right edge of a pane. |
terminal.scrollback_lines | integer/null | 10000 | New terminal | Range 100 to 100000. Cached terminals cap at 1000. |
terminal.cursor_shape | string/null | block | New terminal | vintage, block, beam, underline, double_underline, or hollow. |
terminal.osc52_clipboard | string/null | copy | Neue Terminal-Ansicht | Verfügbar seit v0.17.5. copy erlaubt dem fokussierten Terminal, über OSC 52 in die Systemzwischenablage zu schreiben; off verweigert alle OSC-52-Schreibzugriffe. OSC-52-Lesezugriffe auf die Zwischenablage werden immer verweigert. Bestehende Terminal-Ansichten behalten ihre Einstellung, bis sie neu erstellt werden. |
terminal.xt_checksum_report | boolean/null | false | Neue Sitzung | Verfügbar seit v0.17.7. Beantwortet DECRQCRA-Checksummenanfragen (CSI Pi ; Pg ; Pt ; Pl ; Pb ; Pr * y), auf die Konformitätssuiten wie vttest und esctest angewiesen sind. Standardmäßig aus, weil ein laufendes Programm die Checksumme des Bildschirms Zelle für Zelle berechnen und so alles darauf zurücklesen kann, auch die Ausgabe anderer Programme. Solange es aus ist, wird auch XTCHECKSUM (CSI Ps # y) ignoriert. Der Sitzungs-Host liest den Wert bei jedem Sitzungsstart. |
terminal.xt_checksum_extension | integer/null | 0 | Neue Sitzung | Verfügbar seit v0.17.7. Wie die DECRQCRA-Checksumme berechnet wird, mit den Bits von XTCHECKSUM und xterms checksumExtension: 1 hält das Ergebnis positiv, 2 lässt die Videoattribute der Zellen weg, 4 zählt Leerzeichen mit, 8 zählt nie beschriebene Zellen als Leerzeichen, 16 verwendet vollständige Codepoints statt DEC-8-Bit-Werten. 0 ist die Berechnung eines echten DEC-Terminals. Bereich 0 bis 31. Ein Wert außerhalb, etwa 32, -1, 1.5 oder "4", entfernt nur diesen Schlüssel: Er fällt mit einer Warnung, die Schlüssel und Bereich nennt, auf 0 zurück, und der Rest der Datei gilt weiter, beim Start wie beim Neuladen. Ein vollständiger Reset (ESC c) kehrt zu diesem Wert zurück. |
terminal.cursor_blink | string/null | terminal_controlled | New terminal | on, off, or terminal_controlled. |
terminal.env | object/null | none | New terminal | Environment variables injected into every new terminal. Per-surface env wins. Values are passed through verbatim: no ~ and no $NAME expansion, unlike agent_profiles.*.env. Keys Paneflow sets for every terminal, such as TERM, ZDOTDIR, and the PANEFLOW_* variables, are ignored and logged once. LANG defaults to en_US.UTF-8 only when LANG, LC_ALL, and LC_CTYPE are all unset. |
terminal.scroll_multiplier | number/null | 1.0 | New terminal view | Range 0.1 to 10.0. Ignored in mouse-reporting and alternate-screen scroll paths. |
terminal.minimum_contrast | number/null | Auto (60) | Hot reload | Minimum APCA lightness contrast (Lc) enforced between text and its cell background, on the colors a program chose (truecolor and palette indices 16 to 255). The theme's sixteen ANSI colors, foreground, and background are never corrected. Unset means Auto, which is 60 on every theme; 0 turns the correction off; a negative or non-numeric value means Auto. Range 0 to 90. |
agent_panel
| Key | Type | Default | Notes |
|---|---|---|---|
agent_panel.notify_when_agent_waiting | string/null | Never | PrimaryScreen, AllScreens, or Never. Also governs desktop notifications that terminal programs send with OSC 9 or OSC 777. |
agents
| Key | Type | Default | Notes |
|---|---|---|---|
agents.restore_conversations | boolean/null | true | When a pane's hosted session did not survive, for instance after a reboot, Paneflow opens a shell in the recorded folder and types the runtime's resume command for the conversation last started in that pane. Set to false to only reopen the shell. |
agents.claude_preassign_session_id | boolean/null | false | The Claude Code shim adds --session-id <uuid> to a fresh interactive claude launch, so Paneflow knows the conversation before any hook arrives. Read by panes started after the change. |
worktrees
Paneflow legt einen Git-Worktree an, wenn du einen Branch aus der Palette
"New pane", dem Kontextmenü eines Tabs oder paneflow up öffnest. In den Checkout wird
nichts geschrieben: die Besitzmarkierung liegt im eigenen Git-Verzeichnis des
Worktrees (.git/worktrees/<name>/ im Hauptrepository), git status bleibt
sauber, und die Markierung verschwindet mit dem Worktree. Settings > Worktrees
bearbeitet dieselben Schlüssel und listet die verwalteten Worktrees.
Bleibt der Branch-Name in der Palette leer, entsteht ein detached Checkout auf
der gewählten Basis mit dem Namen <base>-<sha7>; "Create branch here…" im
Kontextmenü des Tabs macht später einen Branch daraus und behält
uncommittete Änderungen.
Eine Datei .worktreeinclude im Repository-Root listet die von Git ignorierten
Dateien und Verzeichnisse, die in jeden neuen Worktree kopiert werden, ein Pfad
pro Zeile relativ zum Root, # für Kommentare, abschließender / bei
Verzeichnissen optional. Ohne die Datei kopiert Paneflow die obersten .env*
und AGENTS.override.md, sofern vorhanden. Eine im Worktree bereits vorhandene
Datei wird nie überschrieben.
Bevor ein verwalteter Worktree entfernt wird, automatisch oder von Hand,
sichert Paneflow seine uncommitteten Änderungen als Snapshot-Commit unter
refs/paneflow/snapshots/ im Hauptrepository: verfolgte Änderungen, neue
Dateien und den aktuellen Branch. Settings > Worktrees listet die Snapshots;
Restore legt den Worktree mit diesen Änderungen uncommitted auf demselben
Branch neu an, Delete verwirft die Ref. Ein sauberer Worktree hinterlässt
keinen Snapshot.
| Schlüssel | Typ | Standard | Hinweise |
|---|---|---|---|
worktrees.dir | string/null | ~/.paneflow/worktrees | Wurzelverzeichnis der verwalteten Worktrees. Jedes Repository bekommt ein Unterverzeichnis <repo>-<hash>, jeder Branch ein Verzeichnis darunter. Standard ist ~/.paneflow/worktrees auf jeder Plattform (%USERPROFILE%\.paneflow\worktrees unter Windows). ~ steht für das Home-Verzeichnis. Unter einer früheren Wurzel angelegte Worktrees, auch der alte Nachbar <repo>.worktrees/, funktionieren weiter, wo sie sind. |
worktrees.auto_remove | boolean/null | true | Entfernt einen verwalteten Worktree beim Schließen seines Workspace und kürzt die ältesten über keep_limit hinaus. Uncommittete Änderungen werden vorher als Snapshot gesichert, und der Branch wird nie gelöscht. false behält jeden Worktree, bis du ihn in Settings > Worktrees oder im Tab-Menü entfernst. |
worktrees.keep_limit | integer/null | 15 | Anzahl verwalteter Worktrees, die behalten werden, bevor die ältesten ohne offenen Tab entfernt werden. 0 bis 200. |
worktrees.for_new_branches | boolean/null | true | Ausgangszustand des Worktree-Schalters im Formular New branch. true legt einen Worktree für den Branch an; false wechselt stattdessen den Checkout des Workspace auf ihn, und das Pane öffnet im Repository-Root. Der Schalter schreibt diesen Schlüssel, und der Wechsel wird verweigert, solange ein Agent in diesem Checkout arbeitet. |
{
"worktrees": {
"dir": "~/worktrees",
"auto_remove": true,
"keep_limit": 15
}
}agent_profiles
agent_profiles ist eine Liste. Jeder Eintrag fügt dem Launcher einen Punkt
hinzu, der einen der eingebauten Agenten mit zusätzlichen Umgebungsvariablen
und Argumenten startet. Profile erscheinen in der Pane-Palette neben den
eingebauten Agenten und behalten Statusverfolgung, Hooks und
Sessions des Basis-Agenten. Settings > Agents > Profiles bearbeitet
dieselbe Liste.
| Schlüssel | Typ | Standard | Hinweise |
|---|---|---|---|
agent_profiles.*.name | string | erforderlich | Beschriftung im Launcher. |
agent_profiles.*.agent | string | erforderlich | Tag des Basis-Agenten: claude_code, codex, opencode, pi, hermes, grok, amp, gemini, copilot, factory oder openclaw. |
agent_profiles.*.env | object | {} | Umgebungsvariablen für den Agent-Prozess. Ein führendes ~ wird zum Home-Verzeichnis aufgelöst, und $NAME, ${NAME} oder %NAME% an beliebiger Stelle im Wert übernimmt diese Variable aus Paneflows eigener Umgebung. Ein $ oder %, das nichts benennt, bleibt wörtlich; ein Name, den die Umgebung nicht definiert, wird vom Settings-Editor abgelehnt und lässt in einer handgeschriebenen Konfiguration den gesamten Wert unverändert, mit einer Warnung im Log. |
agent_profiles.*.args | string array | [] | Zusätzliche Argumente nach den eigenen Flags des Basis-Agenten. Jedes Token muss ein einfaches Wort sein: Buchstaben, Ziffern, -, _, ., =. |
Ein Eintrag mit unbekanntem Agent-Tag, leerem Namen oder unsicherem Token wird mit einer Warnung übersprungen; die übrigen Profile laden trotzdem.
{
"agent_profiles": [
{
"name": "Claude perso",
"agent": "claude_code",
"env": { "CLAUDE_CONFIG_DIR": "~/.claude-perso" },
"args": ["--model", "opus"]
}
]
}commands
commands entries back both simple shell commands and Settings >
Workspaces templates. A command entry must have name; workspace and
command are mutually exclusive.
| Key | Type | Default | Notes |
|---|---|---|---|
commands[].name | string | required | Display name. Must not be blank. |
commands[].description | string/null | none | Human-readable description. |
commands[].keywords | string array | [] | Fuzzy-search keywords. |
commands[].workspace | object/null | none | Workspace template. |
commands[].command | string/null | none | Simple shell command string. |
Workspace template keys:
| Key | Type | Default | Notes |
|---|---|---|---|
commands[].workspace.name | string/null | command name | Workspace display name. |
commands[].workspace.cwd | string/null | current cwd | Default workspace directory. |
commands[].workspace.layout_preset | string/null | none | even_h, even_v, main_vertical, or tiled. |
commands[].workspace.color | string/null | none | Six-digit hex accent color, no leading #. |
commands[].workspace.layout | object/null | preset layout | Layout tree root. |
Layout keys:
| Key | Type | Notes |
|---|---|---|
commands[].workspace.layout.type | string | pane or split. |
commands[].workspace.layout.surfaces | array | Required for pane nodes. |
commands[].workspace.layout.direction | string | Required for split: horizontal or vertical. |
commands[].workspace.layout.ratio | number/null | Legacy binary split ratio, range 0.1 to 0.9. Ignored when ratios exists. |
commands[].workspace.layout.ratios | number array/null | Per-child ratios for N-ary layouts. Must match child count and sum near 1.0. |
commands[].workspace.layout.children | array | Required for split; minimum two layout nodes. |
Surface keys inside a pane:
| Key | Type | Default | Notes |
|---|---|---|---|
commands[].workspace.layout.surfaces[].surface_type | string/null | terminal | Currently only terminal surfaces render. |
commands[].workspace.layout.surfaces[].name | string/null | derived | Surface tab name. |
commands[].workspace.layout.surfaces[].custom_name | string/null | none | User-assigned name that survives restart. |
commands[].workspace.layout.surfaces[].command | string/null | shell | Command to run when the surface is created. |
commands[].workspace.layout.surfaces[].prompt | string/null | none | Prompt to prefill after launching an agent command. |
commands[].workspace.layout.surfaces[].cwd | string/null | workspace cwd | Per-surface working directory. Relative paths resolve against workspace cwd. |
commands[].workspace.layout.surfaces[].path | string/null | none | File opened by a markdown surface. Ignored by terminal surfaces. |
commands[].workspace.layout.surfaces[].env | object/null | none | Extra environment variables. Wins over terminal.env on collision. |
commands[].workspace.layout.surfaces[].focus | boolean/null | false | Gives this surface initial focus. |
commands[].workspace.layout.surfaces[].scrollback | string/null | none | Saved plain-text scrollback restored with the surface. |
commands[].workspace.layout.surfaces[].agent | string/null | none | Stable tag of the agent CLI last detected in the surface. |
commands[].workspace.layout.surfaces[].font_size | number/null | global font_size | Per-surface font-size override, range 8.0 to 32.0. |
commands[].workspace.layout.surfaces[].session | string/null | none | UUID of the persistent host session the terminal reattaches to on restore. Written by Paneflow. |
commands[].workspace.layout.surfaces[].agent_session | object/null | none | Agent conversation last started in the surface: runtime (catalog id), id (provider session id), and cwd. Paneflow reopens it when the host session did not survive. Written by Paneflow. |
telemetry
| Key | Type | Default | Notes |
|---|---|---|---|
telemetry.enabled | boolean/null | null | null means unanswered, true means opted in, false means opted out. |
Complete example
{
"$schema": "https://github.com/arthjean/paneflow/raw/main/schemas/paneflow.schema.json",
"$schemaVersion": "1.0.0",
"theme": "One Dark",
"font_family": "JetBrainsMono Nerd Font",
"font_size": 13,
"line_height": 1.0,
"cell_width": 1.0,
"windows_chrome_material": false,
"macos_chrome_material": false,
"terminal": {
"ligatures": true,
"scrollback_lines": 10000,
"cursor_shape": "block"
},
"agent_panel": {
"notify_when_agent_waiting": "PrimaryScreen"
},
"commands": [
{
"name": "API + Claude",
"description": "Open the API project with Claude and tests",
"workspace": {
"name": "API",
"cwd": "~/projects/api",
"layout_preset": "even_h",
"layout": {
"type": "pane",
"surfaces": [
{
"name": "Claude",
"agent": "claude_code",
"command": "claude",
"prompt": "Review the API changes"
}
]
}
}
}
]
}