コンテンツにスキップ

paneflow.json スキーマリファレンス

paneflow.json のすべてのキー、型、デフォルト、適用タイミング、runtime notes。

paneflow.json はユーザー単位の JSON ファイルです。すべてのキーは 省略可能で、{} も有効な設定です。挙動のソースは Rust の config loader と runtime resolver です。公開 JSON Schema は、エディタの validation と autocomplete 用に公開キーを反映します。

未知の top-level key は runtime では無視されますが、エディタでは schema によって検出されます。有効な保存は config watcher によって reload されます。 Hot reload 中に JSON が壊れている場合、defaults を配信せず直前の有効な config を維持します。起動時にファイルが無効な場合は 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/nullPaneflow DarkHot reloadThe light or dark variant of one preset: Paneflow, Vercel, Claude, Cursor. Pre-preset names (One Dark, PaneFlow Light, Vercel, Claude, Cursor) still resolve. 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.
unfocused_pane_opacitynumber/null0.7Hot reloadOpacity 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_motionboolean/nullfalseHot reloadMinimizes non-essential interface motion: hover transitions settle instantly and decorative animations render a static frame.
sidebar_showobject/nullall offHot reloadWhat 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.
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.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": {
  "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"
          }
        ]
      }
    }
  }
]
}
Paneflowの作者 Arthur Jean によって執筆されました。