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
| Platform | Path |
|---|---|
| Linux と macOS | ~/.paneflow/paneflow.json |
| Windows | %USERPROFILE%\.paneflow\paneflow.json |
PANEFLOW_HOME はディレクトリ全体(設定、セッション、worktree、キャッシュ、
補助バイナリ)を移動します。以前の場所(~/.config/paneflow、
~/Library/Application Support/paneflow、%APPDATA%\paneflow)にある設定は、
初回起動時に ~/.paneflow へコピーされます。
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 | 後述 | ホットリロード | Paneflow がブランチ用に作る git worktree の保存先と後始末: dir、auto_remove、keep_limit、for_new_branches。Settings > Worktrees でも同じキーを編集できます。 |
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 オフ、scrollbar オン | ホットリロード | コード エディタがテキストの脇に描くもの: minimap は右端にミニマップを追加し、scrollbar は縦スクロールバーを残します。エディタのコントロール メニューから切り替え、選択はすべての開いているファイルに適用されます。 |
automation | object/null | すべてオフ | ホットリロード | エージェントのターン後に走るバックグラウンド処理: tab_auto_naming はセッションの直近のやり取りを、エージェント自身の CLI (claude -p、codex exec、opencode run、pi --print) をツールなしで使って 2 から 5 語のタブ名に要約します。セッションごとに三分に一度まで、会話が増えたときのみ実行されます。入力した名前が置き換えられることはなく、"Reset name" でその名前にタブを戻します。 |
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 | [] | ホットリロード | 組み込みエージェントを追加の環境変数と引数つきで起動するカスタム launcher エントリ。例えば CLAUDE_CONFIG_DIR による 2 つ目の Claude Code アカウント。Settings > Agents > Profiles でも同じリストを編集できます。 |
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 | ターミナルビューの作成時 | v0.17.5 以降で利用できます。 copy はフォーカス中のターミナルから OSC 52 経由でシステムクリップボードに書き込むことを許可し、off はすべての OSC 52 書き込みを拒否します。OSC 52 によるクリップボードの読み取りは常に拒否されます。既存のターミナルビューでは、再作成するまで設定が変わりません。 |
terminal.xt_checksum_report | boolean/null | false | セッションの開始時 | v0.17.7 以降で利用できます。 DECRQCRA のチェックサム要求 (CSI Pi ; Pg ; Pt ; Pl ; Pb ; Pr * y) に応答します。vttest や esctest などの適合性テストはこの応答を必要とします。実行中のプログラムが画面のチェックサムを 1 セルずつ計算し、ほかのプログラムの出力も含めて画面の内容をすべて読み取れてしまうため、既定では無効です。無効の間は XTCHECKSUM (CSI Ps # y) も無視されます。セッションホストはセッションを開始するたびにこの値を読み込みます。 |
terminal.xt_checksum_extension | integer/null | 0 | セッションの開始時 | v0.17.7 以降で利用できます。 DECRQCRA チェックサムの計算方法です。XTCHECKSUM と xterm の checksumExtension のビットを使います。1 は結果を正の値に保ち、2 はセルの表示属性を除外し、4 は空白を数え、8 は一度も書き込まれていないセルを空白として数え、16 は DEC の 8 ビット値の代わりに完全なコードポイントを使います。0 は実際の DEC 端末と同じ計算です。範囲は 0 から 31 です。32、-1、1.5、"4" のような範囲外の値はこのキーだけを無効にし、キー名と範囲を示す警告を出して 0 に戻ります。起動時も再読み込み時も、ファイルのほかの設定はそのまま適用されます。フルリセット (ESC c) を行うとこの値に戻ります。 |
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 は「New pane」パレット、タブのコンテキストメニュー、paneflow up からブランチを開くと
git worktree を作ります。チェックアウトの中には何も書きません。所有マーカーは
worktree 自身の git dir(メインリポジトリの .git/worktrees/<name>/)にあり、
git status はきれいなままで、マーカーは worktree と一緒に消えます。
Settings > Worktrees で同じキーを編集でき、Paneflow が管理する worktree を一覧できます。
パレットでブランチ名を空のままにすると、選んだベースで detached なチェックアウトが
<base>-<sha7> という名前で作られます。タブのコンテキストメニューの
「Create branch here…」で後からブランチにでき、未コミットの変更は保持されます。
リポジトリのルートに置いた .worktreeinclude は、新しい worktree にコピーする
git-ignored なファイルやディレクトリを 1 行 1 パス(ルートからの相対パス)で
列挙します。# はコメント、ディレクトリの末尾 / は省略可能です。ファイルが
ない場合、Paneflow は最上位の .env* と AGENTS.override.md(存在すれば)を
コピーします。worktree に既にあるファイルは上書きしません。
管理対象 worktree を削除する前に、自動でも手動でも、Paneflow は未コミットの
変更をメインリポジトリの refs/paneflow/snapshots/ 配下にスナップショット
コミットとして保存します。追跡ファイルの編集、新規ファイル、当時のブランチが
対象です。Settings > Worktrees にスナップショットが並び、Restore は同じ
ブランチ上にその変更を未コミットのまま worktree を作り直し、Delete は ref を
捨てます。きれいな worktree はスナップショットを残しません。
| キー | 型 | デフォルト | 補足 |
|---|---|---|---|
worktrees.dir | string/null | ~/.paneflow/worktrees | 管理対象 worktree のルートディレクトリ。リポジトリごとに <repo>-<hash> のサブディレクトリ、その下にブランチごとのディレクトリができます。デフォルトはすべてのプラットフォームで ~/.paneflow/worktrees(Windows では %USERPROFILE%\.paneflow\worktrees)。~ はホームディレクトリに展開されます。以前のルート(旧来の隣接 <repo>.worktrees/ を含む)に作られた worktree はそのまま動き続けます。 |
worktrees.auto_remove | boolean/null | true | workspace を閉じたときに管理対象 worktree を削除し、keep_limit を超えた古いものから整理します。未コミットの変更は先にスナップショットとして保存され、ブランチは削除しません。false なら Settings > Worktrees やタブのメニューから削除するまで残します。 |
worktrees.keep_limit | integer/null | 15 | 保持する管理対象 worktree の数。これを超えると、開いているタブが使っていない古いものから削除されます。0 から 200。 |
worktrees.for_new_branches | boolean/null | true | New branch フォームの Worktree トグルの初期状態。true はブランチ用の worktree を作り、false は代わりに workspace のチェックアウトをそのブランチに切り替え、pane はリポジトリのルートで開きます。トグルはこのキーを書き換え、そのチェックアウトでエージェントが作業中の間は切り替えを拒否します。 |
{
"worktrees": {
"dir": "~/worktrees",
"auto_remove": true,
"keep_limit": 15
}
}agent_profiles
agent_profiles はリストです。各エントリは、組み込みエージェントのいずれかを
追加の環境変数と引数つきで起動する launcher 項目を追加します。プロファイルは
pane パレットに組み込みエージェントと並んで表示され、ベースの
エージェントのステータス追跡、hooks、セッションをそのまま使います。
Settings > Agents > Profiles でも同じリストを編集できます。
| キー | 型 | デフォルト | 補足 |
|---|---|---|---|
agent_profiles.*.name | string | 必須 | launcher に表示されるラベル。 |
agent_profiles.*.agent | string | 必須 | ベースエージェントのタグ: claude_code、codex、opencode、pi、hermes、grok、amp、gemini、copilot、factory、openclaw。 |
agent_profiles.*.env | object | {} | エージェントのプロセスに設定する環境変数。先頭の ~ はホームディレクトリに展開され、値の任意の位置にある $NAME、${NAME}、%NAME% は Paneflow 自身の環境からその変数を取り込みます。何も指さない $ や % はそのまま残ります。環境で定義されていない名前は Settings のエディターでは拒否され、手書きの設定では値全体がそのまま残り、ログに警告が出ます。 |
agent_profiles.*.args | string array | [] | ベースエージェント自身のフラグの後に付け足す引数。各トークンは英数字、-、_、.、= だけの単語である必要があります。 |
未知のエージェントタグ、空の名前、安全でないトークンを含むエントリは警告つきで スキップされ、他のプロファイルは読み込まれます。
{
"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"
}
]
}
}
}
]
}