跳到内容

paneflow.json 模式参考

paneflow.json 的每个键、类型、默认值、应用时机和 runtime notes。

paneflow.json 是按用户存储的 JSON 文件。所有键都是可选的,{} 也是有效配置。实际行为以 Rust config loader 和 runtime resolver 为准;发布的 JSON Schema 用于向编辑器暴露公共键、验证和自动补全。

未知的 top-level key 会在 runtime 被忽略,但编辑器会通过 schema 标记出来。有效保存会被 config watcher 重新加载。Hot reload 时,如果 JSON 无效,Paneflow 会保留上一份有效配置,而不是广播 defaults。启动时 遇到无效文件会回退到 defaults 并写入 warning 日志。

File locations

PlatformPath
Linux~/.config/paneflow/paneflow.json
macOS~/Library/Application Support/paneflow/paneflow.json
Windows%APPDATA%\paneflow\paneflow.json

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:

paneflow.json
{
"$schema": "https://github.com/arthjean/paneflow/raw/main/schemas/paneflow.schema.json",
"$schemaVersion": "1.0.0"
}

Top-level keys

KeyTypeDefaultAppliedNotes
$schemastringnoneEditor onlyPoints editors to the published schema. Ignored by Paneflow.
$schemaVersionstring1.0.0Startup/reloadUnknown versions warn but do not block loading.
default_shellstring/nullPlatform shell fallbackNew terminalFalls back through configured executable, $SHELL, /bin/sh, then %COMSPEC% on Windows.
themestring/nullOne DarkHot reloadBuilt-ins: One Dark, PaneFlow Light. Runtime lookup is case-insensitive.
theme_modestring/nulldarkHot reloadlight and dark force the matching bundled theme; system follows the OS window appearance.
font_familystring/nullJetBrainsMono NFM if installed, else LilexHot reload cacheAccepts .PaneflowMono, .PaneflowSans, embedded font names, or installed monospace families.
font_fallbacksstring array/nullGPUI fallback stackHot reload cacheOrdered extra fallback families for glyphs missing from font_family.
font_sizenumber/null13.0Hot reload cachePoints, valid range 8.0 to 32.0; invalid values fall back to 13.0.
font_weightstring/nullnormalHot reload cacheOne of thin, extra_light, light, semi_light, normal, medium, semi_bold, bold, extra_bold, black, extra_black.
line_heightnumber/null1.2Hot reload cacheMultiplier, valid range 1.0 to 2.5; invalid values fall back to 1.2.
cell_widthnumber/null0.6Hot reload cacheMultiplier, valid range 0.3 to 2.0; invalid values fall back to 0.6.
window_decorationsstring/nullclientStartupclient draws Paneflow chrome; server delegates to the OS compositor.
window_backdropstring/nullautoStartupauto, mica, blurred, acrylic, transparent, opaque, or off. PANEFLOW_WINDOW_BACKDROP overrides for one launch.
windows_terminal_materialboolean/nullfalseWindow/terminal renderWindows-only terminal background material toggle. Ignored on other platforms.
windows_chrome_materialboolean/nullfalseWindow/chrome renderWindows-only native material in the primary navigation card. Ignored on other platforms.
macos_chrome_materialboolean/nulltrueWindow/chrome rendermacOS-only native Sidebar material in the primary navigation card. Ignored on other platforms.
option_as_metaboolean/nulltrueNew terminalSends Alt/Option as ESC-prefix Meta. Set false on macOS when Option should type Unicode characters.
shell_integrationboolean/nulltrueNew terminalEnables Paneflow shell snippets for OSC 7 CWD and OSC 133 command marks.
agent_stall_detectionboolean/nulltrueRuntime sweepDetects Thinking agents with no hook activity past the threshold.
agent_stall_threshold_secsinteger/null60Runtime sweepRange 30 to 86400; checked by a 30 second sweep.
review_prefill_delay_msinteger/null2000Review launchDelay before auto-filling the review prompt into a fresh CLI. Range 250 to 10000.
submit_paste_delay_msinteger/null70IPC sendFloor delay between bracketed paste and Enter for paneflow send --submit. Range 10 to 5000.
external_editorstring/nullautoNext open actionauto, system, zed, cursor, windsurf, or code.
shortcutsobject{}Hot reloadMaps keystrokes to action names. See shortcuts and actions.
terminalobject/nulldefaults belowMixedNamespaced terminal renderer and PTY settings.
commandsarray[]Settings/RunCommand palette entries and workspace templates.
claude_code_bypass_permissionsboolean/nullfalseNext Claude launchAdds --permission-mode bypassPermissions to the Claude Code launcher. High-risk opt-in.
ai_unrestrictedboolean/nullfalsePer IPC callAllows trusted conductors to submit to peer panes without PANEFLOW_IPC_SCRIPTING. Every write is traced.
ai_injection_fenceboolean/nulltruePer read callWraps surface.read output in an untrusted-output fence by default.
agent_panelobject/nulldefaults belowAgents UIAgents-view display, profiles, and notification preferences.
tool_permissionsobject{}Permission checksPer-tool always-allow and always-deny input patterns.
telemetryobject/null{ "enabled": null }Startup/consentDesktop 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.

KeyAgent
claude_code_button_visibleClaude Code
codex_button_visibleCodex
opencode_button_visibleOpenCode
pi_button_visiblePi
hermes_agent_button_visibleHermes Agent
grok_button_visibleGrok
amp_button_visibleAmp
cursor_button_visibleCursor
gemini_button_visibleGemini
kiro_button_visibleKiro
antigravity_button_visibleAntigravity
copilot_button_visibleCopilot
codebuddy_button_visibleCodeBuddy
factory_button_visibleFactory
qoder_button_visibleQoder
openclaw_button_visibleOpenClaw

terminal

KeyTypeDefaultAppliedNotes
terminal.backendstringautoNew sessionauto, ghostty, or alacritty. Standard Linux builds and supported Windows x64 MSVC builds select Ghostty for auto; ghostty requests it explicitly and alacritty is the rollback. macOS and builds without the target's native Ghostty feature use Alacritty. Unknown runtime values fail safe to Alacritty. Applies only to new sessions.
terminal.ligaturesboolean/nullfalseHot reload cacheEnables programming ligatures when the active font supports them.
terminal.integrated_glyphsboolean/nulltrueHot reloadDraws built-in block glyphs as filled quads.
terminal.color_emojiboolean/nulltrueHot reloadUses the platform color-emoji path.
terminal.cursor_colorstring/nulltheme cursorHot reload/new terminal#RRGGBB, RRGGBB, #RGB, or RGB.
terminal.scrollback_linesinteger/null10000New terminalRange 100 to 100000. Review terminals cap at 2000; cached terminals cap at 1000.
terminal.cursor_shapestring/nullblockNew terminalvintage, block, beam, underline, double_underline, or hollow.
terminal.cursor_blinkstring/nullterminal_controlledNew terminalon, off, or terminal_controlled.
terminal.envobject/nullnoneNew terminalEnvironment variables injected into every new terminal. Per-surface env wins.
terminal.scroll_multipliernumber/null1.0New terminal viewRange 0.1 to 10.0. Ignored in mouse-reporting and alternate-screen scroll paths.

agent_panel

KeyTypeDefaultNotes
agent_panel.max_content_widthinteger/null760Chat content width in pixels. Range 320 to 4000.
agent_panel.thinking_displaystring/nullAutoAuto, Preview, AlwaysExpanded, or AlwaysCollapsed.
agent_panel.profilesobject{}Named profile map. Keys are profile names.
agent_panel.default_profilestring/nullnoneProfile selected by default when present.
agent_panel.notify_when_agent_waitingstring/nullPrimaryScreenPrimaryScreen, AllScreens, or Never.

Profile entries under agent_panel.profiles use this shape:

KeyTypeDefaultNotes
agent_panel.profiles.*.agentstring/nullnonePreferred agent tag.
agent_panel.profiles.*.modelstring/nullnonePreferred model label.
agent_panel.profiles.*.modestring/nullnonePreferred mode label.
agent_panel.profiles.*.effortstring/nullnonePreferred reasoning-effort label.
agent_panel.profiles.*.toolsstring array[]Preferred tool-kind keys shown by the profile.

tool_permissions

tool_permissions is keyed by tool kind, for example read, edit, or execute.

KeyTypeDefaultNotes
tool_permissions.*.always_allowstring array[]Substring patterns that auto-allow matching tool inputs.
tool_permissions.*.always_denystring array[]Substring patterns that auto-deny matching tool inputs.

commands

commands entries back both simple shell commands and Settings > Workspaces templates. A command entry must have name; workspace and command are mutually exclusive.

KeyTypeDefaultNotes
commands[].namestringrequiredDisplay name. Must not be blank.
commands[].descriptionstring/nullnoneHuman-readable description.
commands[].keywordsstring array[]Fuzzy-search keywords.
commands[].workspaceobject/nullnoneWorkspace template.
commands[].commandstring/nullnoneSimple shell command string.

Workspace template keys:

KeyTypeDefaultNotes
commands[].workspace.namestring/nullcommand nameWorkspace display name.
commands[].workspace.cwdstring/nullcurrent cwdDefault workspace directory.
commands[].workspace.layout_presetstring/nullnoneeven_h, even_v, main_vertical, or tiled.
commands[].workspace.colorstring/nullnoneSix-digit hex accent color, no leading #.
commands[].workspace.layoutobject/nullpreset layoutLayout tree root.

Layout keys:

KeyTypeNotes
commands[].workspace.layout.typestringpane or split.
commands[].workspace.layout.surfacesarrayRequired for pane nodes.
commands[].workspace.layout.directionstringRequired for split: horizontal or vertical.
commands[].workspace.layout.rationumber/nullLegacy binary split ratio, range 0.1 to 0.9. Ignored when ratios exists.
commands[].workspace.layout.ratiosnumber array/nullPer-child ratios for N-ary layouts. Must match child count and sum near 1.0.
commands[].workspace.layout.childrenarrayRequired for split; minimum two layout nodes.

Surface keys inside a pane:

KeyTypeDefaultNotes
commands[].workspace.layout.surfaces[].surface_typestring/nullterminalCurrently only terminal surfaces render.
commands[].workspace.layout.surfaces[].namestring/nullderivedSurface tab name.
commands[].workspace.layout.surfaces[].custom_namestring/nullnoneUser-assigned name that survives restart.
commands[].workspace.layout.surfaces[].commandstring/nullshellCommand to run when the surface is created.
commands[].workspace.layout.surfaces[].promptstring/nullnonePrompt to prefill after launching an agent command.
commands[].workspace.layout.surfaces[].cwdstring/nullworkspace cwdPer-surface working directory. Relative paths resolve against workspace cwd.
commands[].workspace.layout.surfaces[].envobject/nullnoneExtra environment variables. Wins over terminal.env on collision.
commands[].workspace.layout.surfaces[].focusboolean/nullfalseGives this surface initial focus.
commands[].workspace.layout.surfaces[].scrollbackstring/nullnoneSaved plain-text scrollback restored with the surface.
commands[].workspace.layout.surfaces[].agentstring/nullnoneStable tag of the agent CLI last detected in the surface.
commands[].workspace.layout.surfaces[].font_sizenumber/nullglobal font_sizePer-surface font-size override, range 8.0 to 32.0.

telemetry

KeyTypeDefaultNotes
telemetry.enabledboolean/nullnullnull means unanswered, true means opted in, false means opted out.

Complete example

paneflow.json
{
"$schema": "https://github.com/arthjean/paneflow/raw/main/schemas/paneflow.schema.json",
"$schemaVersion": "1.0.0",
"theme": "One Dark",
"font_family": "Lilex",
"font_size": 13,
"line_height": 1.2,
"cell_width": 0.6,
"windows_chrome_material": false,
"macos_chrome_material": true,
"terminal": {
  "backend": "auto",
  "ligatures": false,
  "scrollback_lines": 10000,
  "cursor_shape": "block"
},
"agent_panel": {
  "thinking_display": "Auto",
  "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"
          }
        ]
      }
    }
  }
]
}