Settings

One file, every setting.

Code Carta keeps everything you choose in settings.json. Edit it by hand or ask an agent to. A running Code Carta applies the change at once, with no restart.

Where it is Not for editing Code Carta The desktop app Shortcut actions The schema

Where it is

settings.json, in the config folder.

Linux~/.config/code-carta/settings.json
macOS~/.config/code-carta/settings.json
Windows%APPDATA%\code-carta\settings.json
Portable copydata\config\settings.json beside the program

carta-daemon --settings prints the path on your machine.

Edits apply live

Save the file and a running Code Carta applies the change in every window, with no restart. A key left out takes its default. If the file is not valid JSON, Code Carta keeps the settings it had and says so in its log; fix the file and save again.

Your vimrc sits beside it. So do licence, pairing.key and api-key, which are secrets and not settings.

Not for editing

The state folder is Code Carta's own.

What Code Carta remembers for itself, such as open projects, window layout and installed language servers, lives in the state folder. Code Carta rewrites those files as it runs, so a change made there is undone. Anything you would want to choose is in settings.json.

Linux and macOS~/.local/state/code-carta/
Windows%LOCALAPPDATA%\code-carta\
Portable copydata\state\ beside the program

For administrators

A machine's owner can take choices away with policy.json, which only an administrator can write: /etc/code-carta/policy.json on Linux and macOS, %ProgramData%\code-carta\policy.json on Windows. {"remote_access": false} forbids reaching the machine from a phone, whatever settings.json says.

Code Carta

What every window shares: agents, shells, the phone, language servers.

agents

array of objectsdefault []

Agents to offer beside the ones Code Carta knows. An entry whose id matches a built-in agent replaces it, so a wrapper script called claude means the wrapper.

agents[].id

stringrequired

A short stable name, used to remember which agent was chosen.

agents[].name

stringrequired

What the agent chooser shows.

agents[].command

stringrequired

A program found on PATH, or an absolute path taken as given. ~ is your home folder.

agents[].ask

array of strings

Arguments that run the agent once, non-interactively, with a prompt appended. Lets Code Carta ask this agent for things like commit messages.

agents[].renders_transcript

booleandefault false

The agent redraws its whole conversation in place instead of scrolling it, so Code Carta gives it a taller screen to keep more of it visible. Leave this out unless scrolling back in its pane shows nothing.

shell

string or nulldefault null

The shell a plain pane runs. A name found on PATH (pwsh, fish) or a full path. Null uses $SHELL, then the platform's own (bash, or cmd.exe on Windows).

keep_serving

booleandefault false

Keep Code Carta running in the background with no window open, so the phone can start agents on this machine.

resume_on_restart

booleandefault true

After Code Carta restarts, reopen each pane's last conversation. False starts every pane fresh.

update_checks

booleandefault true

Ask codecarta.com whether a newer version exists. The request carries nothing about you or this machine. It is made when a window opens, when one comes to the front six hours after the last answer, and when you press Check now.

code_intelligence

booleandefault false

Let agents ask a language server about the code (definitions, references, types). Uses memory for a server per project. Agents already running keep what they started with.

language_servers

object of stringsdefault {}

Where a language's server lives, when Code Carta cannot find it. Keyed by language id: {"rust": "/opt/ra/rust-analyzer"}. A path that does not exist is reported, not replaced by a guess.

servers_off

array of stringsdefault []

Languages whose server never starts, to save memory. Agents asking about these files are told it is switched off.

remote_access

booleandefault false

Allow the phone to reach this machine. While false nothing listens on the network and no relay is used. An administrator's policy.json can forbid it.

relay

string or nulldefault null

How a phone off this network reaches this machine. Null uses Code Carta's relay, which only ever sees encrypted traffic. An empty string uses none. host:port uses your own.

The desktop app

Under desktop: text sizes, the editor, shortcuts, the todo panel.

desktop.font_size

integer7 to 32default 14

Text size in the editor, diffs and search results, in pixels.

desktop.agent_font_size

integer7 to 32default 14

Text size in agent and terminal panes, in pixels.

desktop.interface_size

integer12 to 20default 15

Text size of the interface around the code, in pixels: menus, tabs, panel rows, the status bar.

desktop.focus_hides

array of stringseach one of "MenuBar", "ProjectTabs", "ToolRails", "ToolWindows", "StatusBar", "TabStrip"default ["MenuBar","ProjectTabs","ToolRails","ToolWindows","StatusBar"]

What focus mode puts away. An empty list hides nothing.

desktop.markdown_mode

stringone of "source", "split", "preview"default "split"

How a Markdown file opens: the source, the source beside the rendered page, or the rendered page alone.

desktop.auto_save

booleandefault true

Save a file a second after the typing stops, and when the keyboard leaves it. False saves only when asked, as vim does.

desktop.align_on

stringdefault ""

Characters that, typed over a selection of several lines, line those lines up on that character instead of replacing them, such as "=" or ":". Empty is off.

desktop.vim

booleandefault false

Vim keys in the editor. Your vim configuration is the vimrc file beside this one.

desktop.keys

objectdefault {}

Keyboard shortcuts.

desktop.keys.preset

stringone of "code-carta", "vscode", "visualstudio", "jetbrains", "vim-tmux"default "code-carta"

Which editor's shortcuts to start from: code-carta (Default), vscode (VS Code), visualstudio (Visual Studio), jetbrains (JetBrains) or vim-tmux (vim & tmux).

desktop.keys.bindings

object of stringsdefault {}

Shortcuts changed from the preset, by action id: {"closeTab": "Ctrl+W"}. Several keys are separated by "; ", and a chord by ", ". An empty string unbinds. Run carta-daemon --settings for the action ids.

desktop.keys.in_terminals

array of stringsdefault []

Shortcuts that go to the program in a terminal or agent pane instead of to Code Carta.

desktop.keys.vim_conflicts

object of stringseach value one of "ide", "vim"default {}

With vim keys on, which side gets a Ctrl chord both want: {"Ctrl+R": "vim"}.

desktop.todos

objectdefault {}

How the todo panel looks.

desktop.todos.stacked

booleandefault false

Put the finished todos under the open ones rather than beside them.

desktop.todos.show_timestamps

booleandefault true

Show when each todo was written down or finished.

desktop.todos.timestamp_format

stringone of "relative", "date", "datetime", "iso"default "relative"

How those times are written: relative (2h ago), date, datetime, or iso (2026-10-07 14:30).

desktop.todos.sort

stringone of "manual", "newest", "done", "alpha"default "manual"

The order todos are listed in: manual (as added, or as dragged), newest first, done (the finished ones by when they were finished, without their groups), or alpha (A to Z).

Shortcut actions

What a shortcut can do.

The ids desktop.keys.bindings takes: {"closeTab": "Ctrl+W"}.

Navigate

paletteGo to anything
findActionFind an action
goToLineGo to line…
goToSymbolInProjectGo to a symbol in the project
goToFileGo to a file
findInFilesFind in files
nextTabNext tab
prevTabPrevious tab
closeTabClose tab
newTabNew tab
reopenTabReopen the closed tab
closeOtherTabsClose other tabs
closeTabsToRightClose tabs to the right
closeAllTabsClose all tabs
pinTabPin or unpin the tab
renameTabRename the tab
recentTabsRecent tabs
recentTabsBackRecent tabs, backwards
lastTabBack to the last tab
goToTab1Go to the first tab
goToTab2Go to the second tab
goToTab3Go to the third tab
goToTab4Go to the fourth tab
goToTab5Go to the fifth tab
goToTab6Go to the sixth tab
goToTab7Go to the seventh tab
goToTab8Go to the eighth tab
goToTab9Go to the ninth tab
recentFilesRecent tabs, as a list that stays open
jumpBackBack
jumpForwardForward
nextProjectNext project
prevProjectPrevious project
replaceInFilesReplace in files
nextProblemNext problem
prevProblemPrevious problem
goToDefinitionGo to definition
goToImplementationGo to implementation
findUsagesFind usages
goToSymbolGo to a symbol in this file
showProblemsProblems in the open files
renameSymbolRename everywhere…
quickFixFix this…

Application

openProjectOpen project…
closeProjectClose project
dockSettingsSettings…
keyHelpKeyboard shortcuts…
openMenusOpen the menu bar
quitQuit
toggleLoadShow or hide the machine load
toggleVimTurn Vim mode on or off
toggleFocusFocus mode: only panes and tabs
zoomInLarger text
zoomOutSmaller text
zoomResetReset text size
welcomeWelcome
planSign in, or see the plan
reportBugReport a bug
checkUpdatesCheck for updates
aboutAbout Code Carta
restartDaemonRestart the background service
restartDaemonElevatedRestart the background service as administrator

Tool windows

moveDockLeftMove tool window to the left edge
moveDockRightMove tool window to the right edge
moveDockBottomMove tool window to the bottom edge
moveDockCentreOpen tool window as a tab
moveDockOutMove tool window to its own window
dockExplorerFiles
dockSessionsSessions
dockTodosTodos
dockTestsTests
dockMessagesMessages
dockStatsProject
dockParityParity
addTodoAdd a todo…
dockGitCommit
hideDocksHide all tool windows

Agents

newAgentNew agent
addAgentKindAdd an agent…
nextAgentFocus next agent
prevAgentFocus previous agent
needsYouGo to an agent that wants you
zoomAgentZoom the focused agent
closeAgentClose the focused agent
renameAgentRename the focused agent
unzoomBack to the grid

Files

saveFileSave this file
findInFileFind in what you are reading
findNextNext match
findPrevPrevious match
replaceInFileReplace in this file
foldBlockFold this block
unfoldBlockUnfold this block
moveLineUpMove the line up
moveLineDownMove the line down
duplicateLineDuplicate the line
growSelectionExpand the selection
shrinkSelectionShrink the selection
selectLineSelect the line
jumpToBracketGo to the matching bracket
indentLinesIndent the line
outdentLinesOutdent the line
insertLineBelowNew line below
insertLineAboveNew line above
toggleCommentComment the line
toggleBlockCommentBlock comment
deleteLineDelete the line
joinLinesJoin with the line below
markdownViewSource, split or preview
foldAllFold everything
unfoldAllUnfold everything
suggestSuggest what could be typed
showHoverShow what this is
parameterInfoShow what this call takes
formatFileLay this file out

Find

findMatchCaseMatch case
findWholeWordWhole words only
findRegexRegular expression
findReplaceAllReplace every match
keepResultsKeep the results in a tab
openBesideOpen the result beside
nextResultNext result in the kept search
prevResultPrevious result in the kept search

Run

runTestHereRun the test under the cursor
runLastAgainRun the last test run again

Panes

copyTextCopy
pasteTextPaste
findInTerminalFind in this agent's output
splitRightSplit right
splitDownSplit down
closePaneClose pane
tileTabTile this tab evenly
toggleTerminalGo to the terminal, or back
newTerminalNew terminal
focusPane1Focus the first pane
focusPane2Focus the second pane
focusPane3Focus the third pane
focusPane4Focus the fourth pane
focusPane5Focus the fifth pane
focusPane6Focus the sixth pane
focusPane7Focus the seventh pane
focusPane8Focus the eighth pane
focusPane9Focus the ninth pane
focusPaneLeftMove focus left
focusPaneDownMove focus down
focusPaneUpMove focus up
focusPaneRightMove focus right
swapPaneLeftSwap with the pane on the left
swapPaneDownSwap with the pane below
swapPaneUpSwap with the pane above
swapPaneRightSwap with the pane on the right
resizePaneLeftMove the divider left
resizePaneDownMove the divider down
resizePaneUpMove the divider up
resizePaneRightMove the divider right

Review

nextChangeNext change
prevChangePrevious change
refreshDiffRefresh review
stageHunkTick this change for the commit
commitReviewCommit what is ticked
nextFileNext file
prevFilePrevious file
stageFileTick this file for the commit
switchBranchSwitch branch
openHistoryHistory

Editing

undoUndo
redoRedo
cutCut
copyCopy
pastePaste
selectAllSelect all
caretLeftMove one character left
caretRightMove one character right
caretWordLeftMove one word left
caretWordRightMove one word right
caretLineStartMove to the start of the line
caretLineEndMove to the end of the line
caretTopMove to the top of the file
caretBottomMove to the bottom of the file
caretUpMove up a line
caretDownMove down a line
caretPageUpMove up a page
caretPageDownMove down a page
selectLeftSelect one character left
selectRightSelect one character right
selectWordLeftSelect one word left
selectWordRightSelect one word right
selectLineStartSelect to the start of the line
selectLineEndSelect to the end of the line
selectTopSelect to the top of the file
selectBottomSelect to the bottom of the file
selectUpSelect up a line
selectDownSelect down a line
selectPageUpSelect up a page
selectPageDownSelect down a page
deleteBackDelete the character before
deleteForwardDelete the character after
deleteWordBackDelete the word before
deleteWordForwardDelete the word after
deleteToLineEndDelete to the end of the line
The schema

For editors and agents.

Every key above comes from one JSON Schema: https://codecarta.com/settings/v1/schema.json. The file names it in its $schema key, so an editor that reads JSON Schema explains each key as you type and marks a wrong value.

On the machine itself, carta-daemon --settings prints where the file is and this whole page as text. That is the command to point an agent at.