desk follows the XDG folders. Below, ~/.local/share is $XDG_DATA_HOME, ~/.config is $XDG_CONFIG_HOME, ~/.local/state is $XDG_STATE_HOME and ~/.cache is $XDG_CACHE_HOME, when those are set.
The board: columns, cards, their links and session stats, the archive. Saved as you go, atomically (written to board.json.tmp, then renamed). A missing file starts a fresh board.
chats/<card>.jsonl
Each card’s conversation, one message per line.
images/
Images you pasted into a card or a message, referenced as .
snoozed.json
Snoozed alerts and until when.
crash.log
If desk crashes, the trace goes here. desk runs detached, with no terminal to print it on.
desk’s own settings: the search folders ([[folder]] with path, depth, only_toml, root) and the languages (card_lang, chat_lang). Edit them in Settings → General.
infra-layout.json
The infra workspace’s look: its theme, whether its sidebar and Claude panel show, and the Claude panel’s width.
desk keeps what it has in an organization’s folder inside that folder’s .desk/. Only Claude Code’s own files (.claude/, CLAUDE.md) stay where Claude Code reads them.
Path
What’s in it
<Org>/.desk/desk.toml
The organization’s accounts and settings. See desk.toml. When Settings saves it, the file is made readable by you only (it may hold a token), and comments in it are not kept.
<Org>/.desk/ssh_config
The organization’s servers file (or the one [servers] file names). See The servers file.
<Org>/.desk/servers-dynamic.conf
What a #@ hosts-cmd printed last (servers-dynamic-<group>.conf for one in a group).
<Org>/.desk/infra/
The infra Claude’s working folder, made when the organization has a servers file (an older <Org>/Infra-Claude/ moves here). Put a CLAUDE.md here for it to read.
<Org>/.desk/infra/runbooks/
Runbooks: Markdown with sh blocks and {{parameters}}. The infra Claude saves new ones here too.
<Org>/.claude/agents/
The Claude Code agents cards can run as (or the folder agents names in desk.toml).