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
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 copy | data\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.
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 copy | data\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.
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.
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).
What a shortcut can do.
The ids desktop.keys.bindings takes: {"closeTab": "Ctrl+W"}.
Navigate
palette | Go to anything |
|---|---|
findAction | Find an action |
goToLine | Go to line… |
goToSymbolInProject | Go to a symbol in the project |
goToFile | Go to a file |
findInFiles | Find in files |
nextTab | Next tab |
prevTab | Previous tab |
closeTab | Close tab |
newTab | New tab |
reopenTab | Reopen the closed tab |
closeOtherTabs | Close other tabs |
closeTabsToRight | Close tabs to the right |
closeAllTabs | Close all tabs |
pinTab | Pin or unpin the tab |
renameTab | Rename the tab |
recentTabs | Recent tabs |
recentTabsBack | Recent tabs, backwards |
lastTab | Back to the last tab |
goToTab1 | Go to the first tab |
goToTab2 | Go to the second tab |
goToTab3 | Go to the third tab |
goToTab4 | Go to the fourth tab |
goToTab5 | Go to the fifth tab |
goToTab6 | Go to the sixth tab |
goToTab7 | Go to the seventh tab |
goToTab8 | Go to the eighth tab |
goToTab9 | Go to the ninth tab |
recentFiles | Recent tabs, as a list that stays open |
jumpBack | Back |
jumpForward | Forward |
nextProject | Next project |
prevProject | Previous project |
replaceInFiles | Replace in files |
nextProblem | Next problem |
prevProblem | Previous problem |
goToDefinition | Go to definition |
goToImplementation | Go to implementation |
findUsages | Find usages |
goToSymbol | Go to a symbol in this file |
showProblems | Problems in the open files |
renameSymbol | Rename everywhere… |
quickFix | Fix this… |
Application
openProject | Open project… |
|---|---|
closeProject | Close project |
dockSettings | Settings… |
keyHelp | Keyboard shortcuts… |
openMenus | Open the menu bar |
quit | Quit |
toggleLoad | Show or hide the machine load |
toggleVim | Turn Vim mode on or off |
toggleFocus | Focus mode: only panes and tabs |
zoomIn | Larger text |
zoomOut | Smaller text |
zoomReset | Reset text size |
welcome | Welcome |
plan | Sign in, or see the plan |
reportBug | Report a bug |
checkUpdates | Check for updates |
about | About Code Carta |
restartDaemon | Restart the background service |
restartDaemonElevated | Restart the background service as administrator |
Tool windows
moveDockLeft | Move tool window to the left edge |
|---|---|
moveDockRight | Move tool window to the right edge |
moveDockBottom | Move tool window to the bottom edge |
moveDockCentre | Open tool window as a tab |
moveDockOut | Move tool window to its own window |
dockExplorer | Files |
dockSessions | Sessions |
dockTodos | Todos |
dockTests | Tests |
dockMessages | Messages |
dockStats | Project |
dockParity | Parity |
addTodo | Add a todo… |
dockGit | Commit |
hideDocks | Hide all tool windows |
Agents
newAgent | New agent |
|---|---|
addAgentKind | Add an agent… |
nextAgent | Focus next agent |
prevAgent | Focus previous agent |
needsYou | Go to an agent that wants you |
zoomAgent | Zoom the focused agent |
closeAgent | Close the focused agent |
renameAgent | Rename the focused agent |
unzoom | Back to the grid |
Files
saveFile | Save this file |
|---|---|
findInFile | Find in what you are reading |
findNext | Next match |
findPrev | Previous match |
replaceInFile | Replace in this file |
foldBlock | Fold this block |
unfoldBlock | Unfold this block |
moveLineUp | Move the line up |
moveLineDown | Move the line down |
duplicateLine | Duplicate the line |
growSelection | Expand the selection |
shrinkSelection | Shrink the selection |
selectLine | Select the line |
jumpToBracket | Go to the matching bracket |
indentLines | Indent the line |
outdentLines | Outdent the line |
insertLineBelow | New line below |
insertLineAbove | New line above |
toggleComment | Comment the line |
toggleBlockComment | Block comment |
deleteLine | Delete the line |
joinLines | Join with the line below |
markdownView | Source, split or preview |
foldAll | Fold everything |
unfoldAll | Unfold everything |
suggest | Suggest what could be typed |
showHover | Show what this is |
parameterInfo | Show what this call takes |
formatFile | Lay this file out |
Find
findMatchCase | Match case |
|---|---|
findWholeWord | Whole words only |
findRegex | Regular expression |
findReplaceAll | Replace every match |
keepResults | Keep the results in a tab |
openBeside | Open the result beside |
nextResult | Next result in the kept search |
prevResult | Previous result in the kept search |
Run
runTestHere | Run the test under the cursor |
|---|---|
runLastAgain | Run the last test run again |
Panes
copyText | Copy |
|---|---|
pasteText | Paste |
findInTerminal | Find in this agent's output |
splitRight | Split right |
splitDown | Split down |
closePane | Close pane |
tileTab | Tile this tab evenly |
toggleTerminal | Go to the terminal, or back |
newTerminal | New terminal |
focusPane1 | Focus the first pane |
focusPane2 | Focus the second pane |
focusPane3 | Focus the third pane |
focusPane4 | Focus the fourth pane |
focusPane5 | Focus the fifth pane |
focusPane6 | Focus the sixth pane |
focusPane7 | Focus the seventh pane |
focusPane8 | Focus the eighth pane |
focusPane9 | Focus the ninth pane |
focusPaneLeft | Move focus left |
focusPaneDown | Move focus down |
focusPaneUp | Move focus up |
focusPaneRight | Move focus right |
swapPaneLeft | Swap with the pane on the left |
swapPaneDown | Swap with the pane below |
swapPaneUp | Swap with the pane above |
swapPaneRight | Swap with the pane on the right |
resizePaneLeft | Move the divider left |
resizePaneDown | Move the divider down |
resizePaneUp | Move the divider up |
resizePaneRight | Move the divider right |
Review
nextChange | Next change |
|---|---|
prevChange | Previous change |
refreshDiff | Refresh review |
stageHunk | Tick this change for the commit |
commitReview | Commit what is ticked |
nextFile | Next file |
prevFile | Previous file |
stageFile | Tick this file for the commit |
switchBranch | Switch branch |
openHistory | History |
Editing
undo | Undo |
|---|---|
redo | Redo |
cut | Cut |
copy | Copy |
paste | Paste |
selectAll | Select all |
caretLeft | Move one character left |
caretRight | Move one character right |
caretWordLeft | Move one word left |
caretWordRight | Move one word right |
caretLineStart | Move to the start of the line |
caretLineEnd | Move to the end of the line |
caretTop | Move to the top of the file |
caretBottom | Move to the bottom of the file |
caretUp | Move up a line |
caretDown | Move down a line |
caretPageUp | Move up a page |
caretPageDown | Move down a page |
selectLeft | Select one character left |
selectRight | Select one character right |
selectWordLeft | Select one word left |
selectWordRight | Select one word right |
selectLineStart | Select to the start of the line |
selectLineEnd | Select to the end of the line |
selectTop | Select to the top of the file |
selectBottom | Select to the bottom of the file |
selectUp | Select up a line |
selectDown | Select down a line |
selectPageUp | Select up a page |
selectPageDown | Select down a page |
deleteBack | Delete the character before |
deleteForward | Delete the character after |
deleteWordBack | Delete the word before |
deleteWordForward | Delete the word after |
deleteToLineEnd | Delete to the end of the line |
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.