Settings and config.json
cornercase is configured from the Settings modal, opened with the Settings button at the bottom of the projects column. Every change is saved at once to config.json, so there is nothing to apply or restart. You can also edit the file by hand, and the server applies it within a second; this page lists every key. A script or another app reads and changes the same settings with cornercase config.
The settings modal
Section titled “The settings modal”The modal has eight tabs: Worktrees, Agents, Accounts, Flows, Issues, UI, Remote and Plugins. Click a row, or select it and press Enter, to change it; the line at the bottom explains what the selected row does and confirms every change.
The restart button next to done restarts cornercase. It first lists what is running in your terminals, since restarting stops every program in them; your projects, workspaces, tabs and splits come back, each tab with a new shell in its folder. See Restart the server.
Worktrees
Section titled “Worktrees”| Row | What it sets |
|---|---|
| worktrees folder | Where new worktrees are checked out: <folder>/<repository>/<branch>. Must be an absolute path or start with ~/. |
| fetch branches every | How often, in minutes, the remotes are fetched to show the commits to pull as ↓n on each workspace. 0 turns it off. |
| merged PRs in stats | On (the default): Usage → Stats counts your merged pull requests and merge requests, read with gh and glab. Off: nothing is asked. The note names the accounts read, or why none were. See Usage and stats. |
| pull requests | On (the default): each workspace whose branch has a pull request on GitHub shows its number, the state of its checks and whether it has merge conflicts, read with gh. Off: nothing is asked. The note says why none show when gh is missing, logged out or failing. See Pull requests and their checks. |
Agents
Section titled “Agents”| Row | What it sets |
|---|---|
| default agent | The agent that takes an issue when you don’t pick one: a specific agent, or auto, which uses the agent running in your current tab and otherwise asks. |
| send the prompt | Off: the prompt is typed on one line and you press Enter. On: it is pasted as written and sent for you. |
| trust prompts | Off (the default): when an agent cornercase starts asks “do you trust this folder?”, you answer, and the prompt waits. On: cornercase answers yes for you, which lets the repository’s agent configuration run. |
| resume conversations | On (the default): after a server restart, kill-server or a reboot, each pane that ran Claude Code, Codex, Gemini CLI, Grok Build, Cursor CLI or GitHub Copilot CLI comes back in the same conversation. Off: it comes back as a plain shell. See Agents resume their conversations. |
| keep awake | Off (the default): the computer sleeps when idle, as it always does. On: while an agent is working, the computer does not go to sleep on its own. The note says whether it is being kept awake now, or why it can’t be on this machine. See Keep the computer awake. |
| How each agent starts | One row per agent: the default agent, the agents with start modes (claude, codex, gemini, opencode, grok, cursor and copilot out of the box) and any you set up. Click one to choose its mode and extra arguments. |
| + another agent… | Adds one of the other known agents to the list so you can set it up. |
Choosing how an agent starts opens a list of its modes, each with the arguments it adds, plus extra arguments… for anything else you want on its command line:
Modes whose name says dangerous are shown in red. Extra arguments are split like a shell would: use quotes for arguments with spaces.
Accounts
Section titled “Accounts”Your agent accounts. One section per agent that takes accounts (Claude Code, Codex, Gemini CLI): first the agent’s own login (System, or the name you gave it, with its usual folder), then a row per account (whether it is logged in and as whom, its folder, and the settings that stopped being shared), each followed by rename…, which gives it a name for the window, and last + add account, which makes one and opens a tab to log in. ● marks the one new tabs use; Enter on a row uses it from now on, Backspace on an account asks before removing it. When a token variable such as ANTHROPIC_API_KEY is set where the server runs, a line at the top names it, since it wins over the accounts. What you choose here is kept in account_names and active_accounts; scripts use cornercase account, and the profiles of cornercase profile (profiles, profile).
Flows, teams of agents that work through a plan: one list with the selected flow’s diagram beside it, and edit, duplicate, export, delete, import and new. Tab and ← → switch tabs here, ↑ ↓ move between flows. Deleting a built-in flow hides it (see hidden_flows); deleted built-ins, at the end of the list, brings it back.
Issues
Section titled “Issues”| Row | What it sets |
|---|---|
| Shortcut API token, Linear API key | Paste a token and press Enter; cornercase checks it, then saves it to secrets.json. Hover a saved one and click ×, or press Delete, to remove it. When the token comes from an environment variable, the row says so and can’t be changed here. |
| Jira site, Jira email | Your Jira Cloud site, such as acme.atlassian.net (a bare name like acme gets .atlassian.net), and the email of your Atlassian account. The Jira tab of the issue browser asks for both when they are missing. |
| Jira API token | Like the tokens above; the site and the email must be set first, since the token is checked against that site. |
| Jira filter | A JQL condition the Jira tab always applies, such as project = SHOP. Empty lists every issue of the site you can see. |
| Plane workspace, Plane URL | Your Plane workspace, the part of the address after the server’s name (acme in app.plane.so/acme), and the address of a self-hosted server, such as https://plane.acme.dev. Empty means Plane Cloud. The Plane tab of the issue browser asks for the workspace when it is missing. |
| Plane API key | Like the tokens above; the workspace must be set first, since the key is checked against it. |
| Plane filter | Query parameters the Plane tab always adds to its list, such as priority=high or project_id=…&label_id=…. Empty adds nothing; finished work items still need closed. |
| Asana workspace | Your Asana workspace, by name or ID; the row shows its name once the account is known, with the saved ID in the note. Empty means the only workspace your token belongs to; with several, the Asana tab of the issue browser asks which one. |
| Asana projects | The projects whose tasks the Asana tab lists, as IDs or links separated by spaces or commas (saved as IDs). Empty lists the tasks assigned to you. |
| Asana access token | Like the tokens above; it needs no workspace first. |
| GitLab URL | The address of a self-hosted GitLab server, such as https://gitlab.acme.dev. Empty means gitlab.com. The GitLab tab of the issue browser asks for it before the token. |
| GitLab access token | Like the tokens above; it is checked against the server set in GitLab URL. |
| Sources shown | Which tabs the issue browser shows. Click to show or hide one (at least one stays); hover a row and use its ↑ ↓ buttons, or press Shift+↑ Shift+↓, to change the order. |
| Row | What it sets |
|---|---|
| sidebar | How projects, workspaces and tabs are laid out: projects_on_top (the default) and workspaces_on_top stack both lists in one column, side_by_side gives each its own column, and tree shows one list with every project, its workspaces and their tabs. See Arrange the columns. |
| tabs | Where a workspace’s tabs are listed: sidebar (the default) under their workspace, or top in a bar above the pane with only the active workspace’s tabs. See Tabs above the pane. |
| icon bar | Move the buttons at the bottom of the sidebar into a column of icons on the left edge, named when you hover them. They need a Nerd Font, which Ghostty, kitty and WezTerm include. Off by default. See The icon bar. |
| agents section | List every Claude Code, Codex, Gemini CLI, opencode, Grok Build, Cursor CLI and GitHub Copilot CLI, in every project, at the bottom of the sidebar; a click jumps to one. Off by default. See The agents section. |
| working icon | What a working agent’s tab shows: moon (the default), a still yellow ◐, or spinner, ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ turning about ten times a second. Also in the tab bar and the agents section. See What your agents are doing. |
| counts | Show how many workspaces a project has, such as (3), after its name, and how many projects a collapsed group holds. On by default. |
| TODO dot | Show a grey ● next to the TODO button while items are left to do. On by default. |
| inactive panes | Dim the panes you aren’t typing in, in a split tab. |
| model | Show the model of a Claude Code, Codex, Gemini CLI, opencode, Grok Build, Cursor CLI or GitHub Copilot CLI tab on a second line under its name, such as Opus 5.5. |
| context | Show how full its context is on that line, such as 23%. With the model off too, and the memory off, every tab takes one row. See How full the context is. |
| memory | Show how much memory every tab uses, at the end of an agent’s line or on a second line in a shell tab, such as 1.2 GB. Off by default. See How much memory a tab uses. |
| account | Show the account an agent uses on its second line, such as work. On by default; shown only once you have an account. |
| account switcher | Show a status bar at the bottom of the window with a button per agent, such as claude: work ▾, to choose the account new tabs use. On by default; shown only once you have an account. |
| account picker | Offer an account list when you start an issue or a flow, or schedule one. On by default; shown only once you have an account. |
| desktop notifications | How your terminal tells you that an agent in another tab needs you or finished: auto picks what your terminal understands, osc777, osc9, osc99 or bell force one, off sends none. The toast in cornercase shows either way; see Notifications. |
| sound | Also play a sound when an agent in another tab needs you or finishes, on the computer the window is on, even while your terminal is focused and inside tmux. On by default. See A sound. |
| sound when it needs you | The file played when an agent waits for you or fails: an absolute path or one starting with ~/, read on the window’s computer. Empty plays the built-in one. |
| sound when it finishes | The file played when an agent finishes. Empty plays the built-in one. |
| sound for subagents | Also play it for agents started by another agent or by a flow. Off by default, so only the agents you started make a sound. |
| check for updates | Every hour: ask GitHub for the latest release when the server starts and then hourly, and offer to update when there is a newer one. Never: don’t ask. |
| star prompt | Now and then: after about two weeks of use, a small card at the bottom right asks for a star on GitHub. Never: it never asks. See star_prompt. |
| prefix key | The key that opens the menu of keyboard shortcuts. Select the row, then press the combination you want; Backspace turns it off, Esc keeps the current one. Off by default. |
Remote
Section titled “Remote”Using cornercase away from the computer: in your phone’s browser, or through Telegram or Discord. Once one of them is set up, a Remote button shows at the right of the Usage row, at the bottom of the sidebar; it opens a menu with each, and shows a green ● while a browser is attached or you are away on a chat app.
| Row | What it sets |
|---|---|
| remote access | Open this cornercase in your phone’s browser over Tailscale: on, Remote › open in your phone’s browser shows a QR code to scan. The note says when it is ready, at which address, or what is missing. Off by default. See From your phone. |
| paired browsers | How many browsers are paired, shown once there is one. Enter forgets them all and disconnects them. |
| bot | Under Telegram, the Telegram bot that messages you while you are away: paste the token @BotFather gave you. Under Discord, the Discord app’s bot token, from the Developer Portal. The note says whether cornercase reaches it. Backspace removes it. |
| phone | The chat paired with the bot, shown once a bot is set. Enter shows a code to scan with your phone (for Discord, the link that adds the app to your account); Backspace forgets the chat. |
Plugins
Section titled “Plugins”The plugins you installed with cornercase plugin install or linked with cornercase plugin link, under Installed. Each row shows the plugin’s name and version and whether it is on. While it is off, the note says what it asks for; once on, its description, or whether its service runs. Enter turns it on or off, and the change is saved in plugins.json, not in config.json. A plugin whose manifest cannot be read, or whose command leads out of its folder, says why and cannot be turned on. With no plugin linked, the tab says how to add one.
Plugins run as you, with your rights: what they ask for is shown, not enforced. Other apps read the same rows, and what each service is doing, with the plugin-list request (see Scripts and agents).
Keys in the settings modal
Section titled “Keys in the settings modal”| Key | Does |
|---|---|
Enter, Space |
Change the selected row. |
↑ ↓ |
Select a row. The mouse wheel does the same. |
Tab, → / Shift+Tab, ← |
Next / previous tab. |
Shift+↑ Shift+↓ |
Move the selected source up or down. |
Delete, Backspace |
Remove the selected saved token or chat bot, or forget the paired phone. |
Esc |
Close the modal, or leave a list or a text field. |
In a list, type to filter it and press Enter to pick. In a text field, Enter saves and Esc cancels.
config.json
Section titled “config.json”| Path | |
|---|---|
| Usually | ~/.config/cornercase/config.json |
With XDG_CONFIG_HOME set |
$XDG_CONFIG_HOME/cornercase/config.json |
With CORNERCASE_SOCKET set |
config.json next to the socket |
Every key is optional: a missing key takes its default. Here is a complete file, as the settings modal writes it after choosing Claude Code in plan mode as the default agent:
{ "worktrees_dir": "~/.cornercase/worktrees", "fetch_minutes": 5, "pull_requests": true, "merged_pull_requests": true, "issue_tabs": ["all", "github", "gitlab", "shortcut", "linear", "jira", "plane", "asana"], "gitlab_url": "", "jira_site": "", "jira_email": "", "jira_jql": "", "plane_url": "", "plane_workspace": "", "plane_filter": "", "asana_workspace": "", "asana_projects": "", "agent": "claude", "agent_args": { "claude": ["--permission-mode", "plan"] }, "agent_modes": {}, "agent_commands": {}, "prompt": "{url}", "submit": false, "accept_trust_prompts": false, "resume_agents": true, "keep_awake": false, "hidden_flows": [], "trust_prompt_pattern": "trust the files|trust this (folder|directory|workspace|repository)|do you trust|yes, proceed", "gh": "gh", "glab": "glab", "sidebar": "projects_on_top", "tabs": "sidebar", "icon_bar": false, "agents_section": false, "working_icon": "moon", "counts": true, "todo_dot": true, "dim_inactive_panes": true, "prefix_key": "", "model": true, "context": true, "memory": false, "account_mark": true, "account_switcher": true, "account_picker": true, "desktop_notifications": "auto", "sound": true, "sound_waiting": "", "sound_done": "", "sound_subagents": false, "check_updates": true, "star_prompt": true, "remote": false, "remote_port": 47681, "projects": {}}| Key | Type | Default |
|---|---|---|
worktrees_dir |
string | "~/.cornercase/worktrees" |
fetch_minutes |
number | 5 |
pull_requests |
boolean | true |
merged_pull_requests |
boolean | true |
issue_tabs |
array of strings | ["all", "github", "gitlab", "shortcut", "linear", "jira", "plane", "asana"] |
gitlab_url |
string | "" |
jira_site |
string | "" |
jira_email |
string | "" |
jira_jql |
string | "" |
plane_url |
string | "" |
plane_workspace |
string | "" |
plane_filter |
string | "" |
asana_workspace |
string | "" |
asana_projects |
string | "" |
agent |
string | "auto" |
agent_args |
object | {} |
agent_modes |
object | {} |
agent_commands |
object | {} |
prompt |
string | "{url}" |
submit |
boolean | false |
accept_trust_prompts |
boolean | false |
resume_agents |
boolean | true |
keep_awake |
boolean | false |
hidden_flows |
array of strings | [] |
trust_prompt_pattern |
string | see below |
gh |
string | "gh" |
glab |
string | "glab" |
sidebar |
string | "projects_on_top" |
tabs |
string | "sidebar" |
icon_bar |
boolean | false |
agents_section |
boolean | false |
working_icon |
string | "moon" |
counts |
boolean | true |
todo_dot |
boolean | true |
dim_inactive_panes |
boolean | true |
prefix_key |
string | "" |
model |
boolean | true |
context |
boolean | true |
memory |
boolean | false |
account_mark |
boolean | true |
account_switcher |
boolean | true |
account_picker |
boolean | true |
desktop_notifications |
string | "auto" |
sound |
boolean | true |
sound_waiting |
string | "" |
sound_done |
string | "" |
sound_subagents |
boolean | false |
check_updates |
boolean | true |
star_prompt |
boolean | true |
remote |
boolean | false |
remote_port |
number | 47681 |
projects |
object | {} |
profiles |
object | {} |
profile |
string | "" |
account_names |
object | {} |
active_accounts |
object | {} |
worktrees_dir
Section titled “worktrees_dir”The folder for new worktrees, checked out in <worktrees_dir>/<repository>/<branch>. An absolute path, or one starting with ~/.
fetch_minutes
Section titled “fetch_minutes”How often, in minutes, each project’s remotes are fetched to show the commits to pull on its workspaces. A whole number; 0 turns fetching and the counts off.
pull_requests
Section titled “pull_requests”Whether each workspace shows the pull request of its branch and the state of its checks and whether it has merge conflicts, asked of GitHub with gh. On by default. See Pull requests and their checks.
merged_pull_requests
Section titled “merged_pull_requests”Whether Usage → Stats counts the pull requests and merge requests you opened that were merged, read with gh and glab. On by default; off asks nothing. See Usage and stats.
issue_tabs
Section titled “issue_tabs”The tabs of the issue browser, in order. Accepts all, github, gitlab, shortcut, linear, jira, plane and asana, in any case; unknown names and repeats are ignored, and a list with no valid name shows all eight. A list saved before Jira existed gets jira added at the end once, one saved before Plane existed gets plane, one saved before Asana existed gets asana, and one saved before GitLab existed gets gitlab right after github (at the end without it).
gitlab_url
Section titled “gitlab_url”The address of your GitLab server, such as "https://gitlab.acme.dev", or one under a path such as "https://acme.dev/gitlab"; a trailing / is dropped. Empty is gitlab.com. Requests carry your token, so they don’t follow redirects: enter the address the server ends up at. An http:// address works too; one that isn’t loopback (localhost, 127.x.x.x or [::1]) gets a warning, since the token then travels unencrypted. The GitLab tab lists the issues of the project whose remote is on this server. Set from the issue browser or the settings modal. The token is never stored here: it goes in secrets.json or comes from GITLAB_TOKEN (see Files and environment).
jira_site
Section titled “jira_site”Your Jira Cloud site, as a host name such as acme.atlassian.net. Set from the issue browser or the settings modal, which also accept a URL or a bare name.
jira_email
Section titled “jira_email”The email of your Atlassian account, sent with the API token to sign in to Jira. The token itself is never stored here: it goes in secrets.json or comes from JIRA_API_TOKEN (see Files and environment).
jira_jql
Section titled “jira_jql”A JQL condition added to every Jira list, such as project = SHOP or project in (SHOP, API) AND labels = backend. The list is always sorted by last update, so an ORDER BY in it is dropped.
plane_url
Section titled “plane_url”The address of a self-hosted Plane server, such as "https://plane.acme.dev"; a trailing / is dropped. Empty is Plane Cloud (https://app.plane.so). Requests carry your API key, so they don’t follow redirects: enter the address the server ends up at. Set from the settings modal.
plane_workspace
Section titled “plane_workspace”Your Plane workspace, the slug in the address after the server’s name: acme in app.plane.so/acme. Lower case letters, numbers and dashes. Set from the issue browser or the settings modal. The API key is never stored here: it goes in secrets.json or comes from PLANE_API_KEY (see Files and environment).
plane_filter
Section titled “plane_filter”Query parameters added to every Plane list, written as in a URL: priority=high&label_id=…. The parameters are those of Plane’s work item list (state_group, priority, project_id, label_id, cycle_id, …; lists take comma-separated values). They are not checked: when Plane refuses them, its answer is shown in the list. The list asks for the work items that are not done on its own, so a state_group__in here narrows that rather than replacing it: while closed is off only its open groups count, and one that names only finished groups lists nothing.
asana_workspace
Section titled “asana_workspace”Your Asana workspace, by name (any case) or ID. Choosing one in the issue browser saves its ID, since two workspaces can share a name; a name that two share is refused, with their IDs. Empty means the only workspace your token belongs to; when it belongs to several and this names none of them, the issue browser asks which one and the Asana tab says so. Set from the issue browser or the settings modal. The access token is never stored here: it goes in secrets.json or comes from ASANA_ACCESS_TOKEN (see Files and environment).
asana_projects
Section titled “asana_projects”The projects the Asana tab lists, as project IDs or links separated by spaces or commas: "1200000000000001 https://app.asana.com/1/12/project/34/list/56". The settings modal saves them as IDs joined by , . Empty lists the open tasks assigned to you, and then the assignee filter can only be anyone or me.
The default agent: an agent kind such as "claude" or "codex", or "auto" for the agent running in your current tab, and otherwise ask.
agent_args
Section titled “agent_args”The arguments each agent kind starts with, including those of its mode. For example {"claude": ["--permission-mode", "plan"]} starts claude --permission-mode plan.
agent_modes
Section titled “agent_modes”Extra or replaced start modes for an agent kind: {"kind": {"mode name": ["args"]}}. A mode with the same name as a built-in one replaces it; an empty list hides it.
agent_commands
Section titled “agent_commands”The program to run for an agent kind, a name on your PATH or a path: {"cursor": "/opt/bin/cursor-agent"}. A kind that cornercase doesn’t know adds a new agent.
prompt
Section titled “prompt”The prompt template handed to an agent started on an issue. Placeholders such as {url}, {title} and {branch} are filled in.
submit
Section titled “submit”true sends the prompt for you; false leaves it typed at the agent’s prompt for you to send.
accept_trust_prompts
Section titled “accept_trust_prompts”Whether cornercase answers yes to the agent’s “do you trust this folder?” question when it starts one. Off by default: you answer, and the prompt waits until you have. Older versions called this key auto_accept_trust_prompt and had it on; that key is ignored now, so it is off until you turn it on again. See Trust prompts.
resume_agents
Section titled “resume_agents”Whether a pane that ran Claude Code, Codex, Gemini CLI, Grok Build, Cursor CLI or GitHub Copilot CLI comes back in the same conversation when a new server restores your session: cornercase types claude --resume <id>, codex resume <id>, gemini --resume <id>, grok --resume <id> or cursor-agent --resume <id> or copilot --resume=<id> into its new shell, with the agent’s command and arguments and the mode it was running in. On by default. See Agents resume their conversations.
keep_awake
Section titled “keep_awake”Whether the computer stays awake while an agent is working. Off by default. See Keep the computer awake.
hidden_flows
Section titled “hidden_flows”The names of the built-in flows you deleted in Settings → Flows, compared ignoring case and surrounding spaces. They leave Settings, the start dialog and cornercase flow list, and cornercase flow run refuses them; a deleted name stays reserved, so a project’s flow named like one does not run. A name that matches no built-in flow is ignored, and the list is kept across updates. Remove a name here, or use deleted built-ins in Settings → Flows, to bring the flow back.
trust_prompt_pattern
Section titled “trust_prompt_pattern”The regular expression, matched without regard to case against the last 15 non-blank lines of the agent’s screen, that recognises a trust question. The default is:
trust the files|trust this (folder|directory|workspace|repository)|do you trust|yes, proceedThe GitHub CLI to run for GitHub issues and for the pull requests of workspaces: a name looked up in your PATH, or a path, which may start with ~/.
The GitLab CLI to run for the merged merge requests of Stats: a name looked up in your PATH, or a path, which may start with ~/.
sidebar
Section titled “sidebar”How projects, workspaces and tabs are laid out: "projects_on_top" and "workspaces_on_top" stack both lists in one column, the first one named on top; "side_by_side" gives each its own column; "tree" shows one list with every project, its workspaces and their tabs. An unknown value counts as the default, "projects_on_top"; before 0.9.0 the default was "side_by_side", and a config.json that already names it keeps it. It applies from 90 columns up; below that the compact layout shows one list at a time.
Where a workspace’s tabs are listed: "sidebar" under their workspace, in the workspaces list or the tree; "top" in a bar above the pane, with only the active workspace’s tabs and, on a second line, the model and context of the one on screen. An unknown value counts as the default, "sidebar". It applies from 90 columns up; the compact layout always lists the tabs in its menu. See Tabs above the pane.
icon_bar
Section titled “icon_bar”Whether the buttons at the bottom of the sidebar become a column of icons on the left edge, from 90 columns up, and the compact layout’s top bar and the panels’ search buttons use the same icons. The icons come from Nerd Fonts: Ghostty, kitty and WezTerm include them, other terminals need a Nerd Font set as their font. See The icon bar.
agents_section
Section titled “agents_section”Whether the sidebar ends with a list of every Claude Code, Codex, Gemini CLI, opencode, Grok Build, Cursor CLI and GitHub Copilot CLI running in any project, with what each is doing, its model and context; a click on one jumps to it. In every layout; below 90 columns it is a third menu. See The agents section.
working_icon
Section titled “working_icon”What the tab of a working agent shows, also in the tab bar and the agents section: "moon", a still ◐, or "spinner", ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ turning about ten times a second. An unknown value counts as the default, "moon". See What your agents are doing.
counts
Section titled “counts”Whether a project shows how many workspaces it has after its name, such as (3), and a collapsed group how many projects it holds.
todo_dot
Section titled “todo_dot”Whether the TODO button shows a grey ● while at least one item is left to do (☐ ● in the compact layout’s top bar). It never shows a number, and goes away once every item is done or the list is empty. See TODO list.
dim_inactive_panes
Section titled “dim_inactive_panes”Whether panes you aren’t typing in are dimmed, in tabs split into several panes.
prefix_key
Section titled “prefix_key”The key that opens the menu of keyboard shortcuts, such as "ctrl+]", "alt+k" or "f12": modifiers (ctrl, alt, shift) joined by +, then a character, space or a function key. Ctrl or Alt is needed except for function keys, and ctrl+c, ctrl+d and ctrl+z are refused. Empty, the default, or anything that can’t be a prefix leaves keyboard shortcuts off.
Whether a Claude Code, Codex, Gemini CLI, opencode, Grok Build, Cursor CLI or GitHub Copilot CLI tab shows its model on a second line under its name, such as Opus 5.5. When the file has no model, it takes the value of context, so a line turned off in 0.6 stays off.
context
Section titled “context”Whether that line shows how full the agent’s context is, such as 23%, after the model. With model, context and memory all false, every tab takes one row. cornercase 0.6 called it context_line, and it hid the model too; that key is still read.
memory
Section titled “memory”Whether every tab shows how much memory its processes use on its second line, such as Opus 5.5 · 23% · 1.2 GB, or 1.2 GB alone in a shell tab or with model and context off. While it is true, the tabs of the project on screen are measured every 2 seconds; in the tree, those of every open workspace. See How much memory a tab uses.
account_mark
Section titled “account_mark”Whether an agent’s tab, the tab bar and the agents section name the account it uses, such as Opus 5.5 · work · 12%. Nothing shows while you have no account, whatever this says.
account_switcher
Section titled “account_switcher”Whether a status bar along the bottom of the window shows a button per agent with accounts, such as claude: work ▾, to choose the account new tabs use. The panes give it one row while it shows. Nothing shows while you have no account.
account_picker
Section titled “account_picker”Whether the dialogs that start an issue or a flow, and the schedule form, offer an account list for the agents that have accounts. Off, they use the accounts in use. Nothing shows while you have no account.
desktop_notifications
Section titled “desktop_notifications”How cornercase asks your terminal for a desktop notification when an agent in another tab needs you or finishes: "auto" picks it from each terminal, "osc777", "osc9", "osc99" or "bell" forces one, and "off" sends none. An unknown value counts as "auto". The toast inside cornercase shows either way; see Notifications.
Whether cornercase also plays a sound when an agent in another tab needs you or finishes: at the same moments as the toast, once the state has held for a second, never for the tab you are looking at. It plays on the computer the window is on, whatever your terminal does with notifications, so it is heard while Ghostty is focused and inside tmux, screen or Zellij; with cornercase remote it plays on your laptop. A window opened in a plain SSH session (ssh -t host cornercase) plays none, since it would play on the other computer. It does not depend on desktop_notifications, which can be "off". On macOS it uses afplay; on Linux the first of pw-play, paplay and aplay found. On by default. See A sound.
sound_waiting
Section titled “sound_waiting”The file played when an agent waits for you or fails. "" (the default) plays the built-in one. The path must be absolute or start with ~/, your home folder on the window’s computer, where it is read; Settings refuses any other. A file that is missing or cannot be read plays the built-in one. afplay plays most formats; on Linux use WAV with aplay, or WAV, OGG or FLAC with pw-play and paplay.
sound_done
Section titled “sound_done”The file played when an agent finishes, the same way as sound_waiting. "" plays the built-in one, which sounds different from the other, so you can tell them apart without looking.
sound_subagents
Section titled “sound_subagents”Whether the sound also plays for agents started by another agent (with cornercase start, new-tab or split run in its pane) or by a flow, the ones the agents section hangs under another. false by default: only the agents you started make a sound, and the others still get their toast and notification. An agent whose parent closed counts as one you started.
check_updates
Section titled “check_updates”Whether cornercase asks GitHub for the latest release, when the server starts and then every hour, to offer an update. Only a request for the latest release is sent, and, once a newer one is out, a download of its changelog for the update dialog; nothing about you. Builds made with cargo run never check. An explicit check, cornercase update --check or a program’s update-check, asks GitHub whatever this setting says.
star_prompt
Section titled “star_prompt”Whether cornercase may ask for a star on GitHub. After about 14 days on which a window was open and an agent ran (not calendar days since you installed it), a small card appears at the bottom right of the window: star on GitHub copies the repository’s link to your clipboard and never asks again, later asks again in about 90 days, and don’t show again never asks again. If you don’t answer, it counts as later. It never appears while an agent is working or waiting for you, while a dialog, the search or a panel’s field has the keys, or in the compact layout (below 90 columns), and it never takes the keys from the pane. Nothing is sent anywhere and cornercase doesn’t check whether you starred; what it remembers (the days counted, when it last asked and your answer) is in star.json next to session.json. Set it to false to turn it off for good.
Agents explains agent, agent_args, agent_modes, agent_commands and the trust prompt in depth.
remote
Section titled “remote”Whether this cornercase can be opened in a browser over Tailscale, from a phone that scans the code the Remote button shows. Off by default. See From your phone.
remote_port
Section titled “remote_port”The port cornercase listens on for browsers, on your computer only (127.0.0.1); tailscale serve passes Tailscale’s port 8443 to it. Change it when something else uses 47681.
projects
Section titled “projects”Per-project commands, keyed by the project’s folder (~/ is expanded): setup runs in the first tab of each new worktree before its agent starts, teardown runs before a worktree is removed. Edit them in the project’s ⋯ menu, project settings; an entry with both empty is removed.
"projects": { "~/code/web-shop": { "setup": "npm ci\ncp ../.env .env", "teardown": "docker compose down" } }profiles
Section titled “profiles”Your profiles: for each, the account each agent uses. Left out of the file while you have none. Manage them with cornercase profile.
"profiles": { "Work": { "claude": "work", "codex": "work" }, "Home": { "claude": "personal" } }profile
Section titled “profile”The active profile, whose accounts new tabs and agents start with. Empty, the default, means no profile: each agent uses the account in active_accounts, else its usual login. A name that is not in profiles counts as empty. cornercase profile use changes it, and an edit to the file applies at once. Choosing an account in the window empties it.
account_names
Section titled “account_names”The names the window shows for your accounts, per agent; "" is the agent’s own login, which is otherwise called System, and an account without one shows its folder’s name. The folders never move. Left out of the file while you have none. rename… in Settings › Accounts and cornercase account rename change it.
"account_names": { "claude": { "": "work", "personal": "Personal" } }active_accounts
Section titled “active_accounts”The account each agent’s new tabs start with while no profile is active; an agent left out uses its usual login. Left out of the file while it is empty. The buttons above Usage, Enter in Settings › Accounts and cornercase account use change it; cornercase profile use --system empties it.
"active_accounts": { "claude": "personal" }A customised example
Section titled “A customised example”{ "worktrees_dir": "~/work/trees", "issue_tabs": ["github", "linear"], "agent": "codex", "agent_args": { "codex": ["--sandbox", "workspace-write"], "mine": ["--fast"] }, "agent_modes": { "claude": { "auto": [] } }, "agent_commands": { "mine": "/opt/bin/my-agent" }, "prompt": "Work on {url} ({title}). You are on branch {branch}; start with a failing test.", "submit": true, "dim_inactive_panes": false}This keeps worktrees in ~/work/trees, shows only the GitHub and Linear tabs, starts Codex in its workspace write sandbox by default, hides Claude Code’s auto mode, adds a custom agent called mine, sends a fuller prompt for you, and keeps every pane equally bright.