[{"data":1,"prerenderedAt":91},["ShallowReactive",2],{"doc:en:troubleshooting":3},{"title":4,"lede":5,"html":6,"headings":7},"Troubleshooting","The problems Escouade runs into most often, each with its symptom, its cause, and its fix: Claude Code not found, WSL, proxy, quotas, usage limit, worktree, git, notifications. At the end, where to read the app’s log and how to report a bug.","\u003Ch2 id=\"claude-code\">Claude Code\u003C\u002Fh2>\n\u003Ch3 id=\"claude-code-is-not-found\">Claude Code is not found\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> The welcome screen says “Claude Code couldn’t be found on this machine”. The Kanban shows “Claude Code not found — no tickets will start”, and Settings › About shows “Claude Code not found”.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Cause.\u003C\u002Fstrong> Escouade looks for \u003Ccode class=\"key\">claude\u003C\u002Fcode> in this order:\u003C\u002Fp>\n\u003Col>\n\u003Cli>The path in Settings › Claude Code, “Executable path” field, when it is filled in. If it is filled in, it decides alone: a wrong path gives “not found”, even if \u003Ccode class=\"key\">claude\u003C\u002Fcode> is in the \u003Ccode class=\"key\">PATH\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Otherwise, the \u003Ccode class=\"key\">PATH\u003C\u002Fcode>, then the usual installer locations. On Windows: \u003Ccode>%USERPROFILE%\\.local\\bin\\claude.exe\u003C\u002Fcode>, \u003Ccode>%USERPROFILE%\\.claude\\local\\claude.exe\u003C\u002Fcode>, and \u003Ccode>%USERPROFILE%\\AppData\\Roaming\\npm\\claude.cmd\u003C\u002Fcode>. On macOS and Linux: \u003Ccode class=\"key\">~\u002F.local\u002Fbin\u002Fclaude\u003C\u002Fcode>, \u003Ccode>~\u002F.claude\u002Flocal\u002Fclaude\u003C\u002Fcode>, \u003Ccode>\u002Fopt\u002Fhomebrew\u002Fbin\u002Fclaude\u003C\u002Fcode>, and \u003Ccode>\u002Fusr\u002Flocal\u002Fbin\u002Fclaude\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>On Windows, failing that, a Claude Code installed in WSL (see below).\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> Install Claude Code and sign in, or give its path in Settings › Claude Code (see the \u003Ca href=\"\u002Fen\u002Fdocs\u002Fsettings-claude-code\u002F\">Claude Code settings\u003C\u002Fa>). The field accepts \u003Ccode class=\"key\">~\u003C\u002Fcode> for your home folder, and on Windows you can leave out \u003Ccode class=\"key\">.exe\u003C\u002Fcode> or \u003Ccode class=\"key\">.cmd\u003C\u002Fcode>. The line under the field answers right away: “Found: …” with the path it picked, or “Not found. Give the path to claude.exe, …”. Clear the field to go back to automatic detection (“blank = detect automatically”).\u003C\u002Fp>\n\u003Cp>A Claude account can have its own executable (Settings › Claude accounts, “Executable” field, “The one in the settings” by default). A path that exists but won’t run gives “can’t start” followed by that path.\u003C\u002Fp>\n\u003Ch3 id=\"claude-code-is-not-found-when-the-app-starts-from-the-finder-macos\">Claude Code is not found when the app starts from the Finder (macOS)\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> \u003Ccode class=\"key\">claude\u003C\u002Fcode> answers in Terminal, but Escouade, opened from the Finder or the Dock, can’t find it, nor \u003Ccode class=\"key\">git\u003C\u002Fcode> or \u003Ccode class=\"key\">node\u003C\u002Fcode> if you installed them with Homebrew.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Cause.\u003C\u002Fstrong> macOS gives apps launched from the Finder or the Dock a minimal \u003Ccode class=\"key\">PATH\u003C\u002Fcode>, not your terminal’s. At startup, Escouade completes it with your login shell’s (it asks the shell with \u003Ccode>$SHELL -ilc\u003C\u002Fcode>), then adds \u003Ccode class=\"key\">\u002Fopt\u002Fhomebrew\u002Fbin\u003C\u002Fcode>, \u003Ccode class=\"key\">\u002Fusr\u002Flocal\u002Fbin\u003C\u002Fcode>, and \u003Ccode class=\"key\">~\u002F.local\u002Fbin\u003C\u002Fcode>. It waits for the shell for only five seconds: a profile that asks for input, or takes longer, cancels that step. The same goes for a desktop launcher on Linux.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> Give the full path of \u003Ccode class=\"key\">claude\u003C\u002Fcode> in Settings › Claude Code (\u003Ccode>which claude\u003C\u002Fcode> in a terminal prints it), or lighten your shell profile so that it answers quickly.\u003C\u002Fp>\n\u003Ch3 id=\"claude-code-is-installed-in-wsl\">Claude Code is installed in WSL\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> Claude Code is only installed in WSL, and Escouade can’t find it, or an agent can’t work in a folder.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Cause.\u003C\u002Fstrong> On Windows, Escouade only looks in WSL when Windows has no \u003Ccode class=\"key\">claude\u003C\u002Fcode>. It looks in the distribution set in Settings › Terminals (“WSL distribution” field, “blank = default distribution”), at \u003Ccode class=\"key\">~\u002F.local\u002Fbin\u002Fclaude\u003C\u002Fcode>, \u003Ccode>~\u002F.claude\u002Flocal\u002Fclaude\u003C\u002Fcode>, \u003Ccode>\u002Fusr\u002Flocal\u002Fbin\u002Fclaude\u003C\u002Fcode>, and \u003Ccode class=\"key\">\u002Fusr\u002Fbin\u002Fclaude\u003C\u002Fcode>. That search can start the distribution and take a few seconds.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> Give the path in Settings › Claude Code, in one of these forms:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode class=\"key\">~\u002F.local\u002Fbin\u002Fclaude\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>\u002Fhome\u002F&lt;user&gt;\u002F.local\u002Fbin\u002Fclaude\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>\\\\wsl.localhost\\&lt;distribution&gt;\\home\\&lt;user&gt;\\.local\\bin\\claude\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The line under the field confirms it: “Found in WSL (Ubuntu): \u002Fhome\u002Fada\u002F.local\u002Fbin\u002Fclaude”, for example. Escouade then runs \u003Ccode class=\"key\">claude\u003C\u002Fcode> through \u003Ccode class=\"key\">wsl.exe\u003C\u002Fcode>, in the agent’s folder (seen from WSL, \u003Ccode class=\"key\">\u002Fmnt\u002Fc\u002F…\u003C\u002Fcode>), and reads its sessions and its sign-in in the Linux home folder. A project folder that WSL can’t reach (a network share, another distribution’s folder) is refused: “The folder … can’t be reached from WSL (…): the Claude Code installed there can’t work in it.”\u003C\u002Fp>\n\u003Ch3 id=\"mcp-tools-and-the-claude-code-view-tracking-don-t-work-from-wsl\">MCP tools and the Claude Code view tracking don’t work from WSL\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> Under the path field, Settings › Claude Code shows: “WSL’s network is NAT: Escouade’s MCP server and the tracking of the Claude Code view can’t reach the app.”\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Cause.\u003C\u002Fstrong> In NAT mode, WSL isn’t on Windows’ network: Escouade’s MCP server and the Claude Code view’s hooks, which listen on Windows’ \u003Ccode class=\"key\">127.0.0.1\u003C\u002Fcode>, are out of its reach.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> Switch WSL to mirrored networking. In \u003Ccode>%UserProfile%\\.wslconfig\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-ini\">[wsl2]\nnetworkingMode=mirrored\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Then, in a Windows terminal, run \u003Ccode>wsl --shutdown\u003C\u002Fcode> and restart Escouade.\u003C\u002Fp>\n\u003Ch3 id=\"a-variable-from-the-shell-profile-doesn-t-reach-claude-code-in-wsl\">A variable from the shell profile doesn’t reach Claude Code in WSL\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> Claude Code, in WSL, doesn’t see a variable set in \u003Ccode class=\"key\">~\u002F.profile\u003C\u002Fcode> or \u003Ccode class=\"key\">~\u002F.bashrc\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Cause.\u003C\u002Fstrong> Escouade starts it without the shell profile: those files aren’t read.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> The proxy from Settings › Network, on the other hand, is passed to Claude Code in WSL. For another variable, define it on the Windows side (in your account’s environment variables), add its name to the Windows \u003Ccode class=\"key\">WSLENV\u003C\u002Fcode> variable (names are separated by \u003Ccode class=\"key\">:\u003C\u002Fcode> there), and restart Escouade. Escouade keeps your \u003Ccode class=\"key\">WSLENV\u003C\u002Fcode> value and adds the variables it passes itself.\u003C\u002Fp>\n\u003Ch2 id=\"network\">Network\u003C\u002Fh2>\n\u003Ch3 id=\"escouade-is-behind-a-proxy\">Escouade is behind a proxy\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> Quotas, integrations, updates, or Claude Code can’t connect from a corporate network.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> In Settings › Network, fill in “HTTP(S) proxy” (for example \u003Ccode>http:\u002F\u002Fuser:password@proxy:3128\u003C\u002Fcode>) and, if needed, “Exclusions” (the \u003Ccode class=\"key\">NO_PROXY\u003C\u002Fcode> list, separated by commas). The proxy is passed to Claude Code processes, quota reads, integrations, and updates. For an agent, it applies the next time its process (re)starts. For the built-in terminals, the launch commands, and the worktree setup and teardown commands to use it too, turn on “Also apply the proxy to the built-in terminals” (off by default). See the \u003Ca href=\"\u002Fen\u002Fdocs\u002Fsettings-network\u002F\">Network settings\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"a-corporate-certificate-makes-connections-fail\">A corporate certificate makes connections fail\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> An “UnknownIssuer” error, or another TLS failure, for integrations, quotas, updates, or Claude Code.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Cause.\u003C\u002Fstrong> A corporate proxy decrypts the traffic with a certificate nobody recognizes. Escouade’s own requests (integrations, quotas, updates) trust recognized certificates and those installed on the system, usually a corporate proxy’s. Claude Code has its own list.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> Install the company certificate in the system: Escouade then trusts it for its own requests. Claude Code has its own list: for it, or if you can’t install the certificate, turn on “Skip TLS certificate verification” (Settings › Network, “Certificates” group). The setting applies to integrations, quotas, updates, Claude Code processes (the next time their process starts), and the commands agents run (npm, node…).\u003C\u002Fp>\n\u003Cdiv class=\"callout warning\">\u003Cp class=\"callout-title\">Warning\u003C\u002Fp>\u003Cp>With this setting, an intercepted connection, tokens included, would no longer be detected. Keep it for a network you trust.\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003Ch2 id=\"quotas-and-usage-limit\">Quotas and usage limit\u003C\u002Fh2>\n\u003Ch3 id=\"quotas-don-t-show\">Quotas don’t show\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> In the status bar, \u003Ccode class=\"key\">5h\u003C\u002Fcode> and \u003Ccode class=\"key\">W\u003C\u002Fcode> have an empty bar and a “—” in place of the countdown, and the tooltip says “Quota unavailable”. In Settings › Claude accounts, the account says “Not signed in”, “Not signed in with a claude.ai account (API key?)”, or “Sign-in expired: run Claude Code again for this account.”\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Possible causes.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Quotas are those of a claude.ai subscription: Escouade reads them with the sign-in that Claude Code keeps for the account. A Claude Code used with an API key has none.\u003C\u002Fli>\n\u003Cli>The sign-in has expired.\u003C\u002Fli>\n\u003Cli>Anthropic can’t be reached (network, proxy, certificate: see above). The last values stay displayed, and Escouade tries again at the next read, about every five minutes.\u003C\u002Fli>\n\u003Cli>On macOS, Claude Code keeps its sign-in in the keychain. If you deny access when macOS asks, Escouade doesn’t ask again for ten minutes.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> In Settings › Claude accounts, “Sign in…” (or “Sign in again…”) opens a terminal where Claude Code signs you in (use the \u003Ccode class=\"key\">\u002Flogin\u003C\u002Fcode> command if it doesn’t offer it). For Main, it is your own Claude Code’s sign-in. See \u003Ca href=\"\u002Fen\u002Fdocs\u002Faccounts\u002F\">Claude accounts\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"an-agent-stopped-on-the-usage-limit\">An agent stopped on the usage limit\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> The “The turn ended with an error” card shows Claude Code’s message about the usage limit, and the agent stops.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Cause.\u003C\u002Fstrong> The 5-hour window or the week of your subscription is used up.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> What the app does depends on your settings:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Auto-resume.\u003C\u002Fstrong> The “Auto-resume after the usage limit” setting (Settings › Claude Code, on by default) sends “continue” once the quota has reset. When Claude Code tells the reset time, the card says “Auto-resume” followed by the time, with a “Cancel auto-resume” button.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Another account.\u003C\u002Fstrong> With several accounts, the “Resume on Pro” button (with the name of another account), and its “Resume on another account” menu, restart the agent with its session on another account. Accounts that are inactive, not signed in, or above “Pause above quota” aren’t listed.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Ticket agents\u003C\u002Fstrong> wait for their account to reset, unless you turn on “Resume a ticket’s agent stopped by the usage limit on another account” (Settings › Claude Code, with several accounts).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>To avoid reaching the limit, the \u003Ca href=\"\u002Fen\u002Fdocs\u002Fautopilot\u002F\">autopilot\u003C\u002Fa> pauses before, at the “Pause above quota” threshold.\u003C\u002Fp>\n\u003Ch2 id=\"agents\">Agents\u003C\u002Fh2>\n\u003Ch3 id=\"an-agent-stopped\">An agent stopped\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> The agent goes to “Error”. The conversation says “Claude Code stopped (code N)”, followed by what Claude Code wrote on its way out, and a banner adds “The agent stopped. Send a message to restart Claude on the same session.”\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Cause.\u003C\u002Fstrong> The agent’s Claude Code process ended on its own. The message it left usually says why (sign-in, proxy, version…).\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> Send a message: Escouade restarts Claude on the same session. A process stopped on purpose isn’t an error: Escouade stops idle processes after a delay (Settings › Claude Code, “Stop idle Claude processes after”, 30 minutes by default, 0 for never) and restarts them at the next action.\u003C\u002Fp>\n\u003Ch3 id=\"claude-session-not-found\">Claude session not found\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> A notice says “Claude session not found: a new session will start with your next message.”\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Cause.\u003C\u002Fstrong> Escouade restarted the agent on its session, but Claude Code no longer knows it (for example because the account’s configuration folder was emptied or changed).\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> There is nothing to do: the next message starts a new session. The conversation stays displayed in Escouade, but Claude no longer has its context.\u003C\u002Fp>\n\u003Ch2 id=\"worktrees\">Worktrees\u003C\u002Fh2>\n\u003Ch3 id=\"a-worktree-setup-fails\">A worktree setup fails\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> The agent’s conversation shows “The worktree setup failed on \u003Ccode>npm ci\u003C\u002Fcode> (code 1).”, followed by the last lines of the output and by “Full output” with a path.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Cause.\u003C\u002Fstrong> A setup command of the project failed (Settings › Projects, “Worktrees” group, “When a worktree opens” section). Escouade runs them in order and stops at the first one that fails. The reason is in parentheses: “code 1”, “stopped”, “not done in 20 min” (a command gets 20 minutes), “doesn’t start” followed by the cause, or “the folder … doesn’t exist in the worktree”.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> Read the full output in \u003Ccode>~\u002F.escouade\u002Flogs\u002F&lt;agent&gt;-setup.log\u003C\u002Fcode>: each step has its name and its ending there. Fix the command in the project’s settings (see the \u003Ca href=\"\u002Fen\u002Fdocs\u002Fsettings-projects\u002F\">project settings\u003C\u002Fa>), or run it by hand in a terminal opened in the worktree. The commands receive \u003Ccode class=\"key\">ESCOUADE_PROJECT_DIR\u003C\u002Fcode>, \u003Ccode>ESCOUADE_WORKTREE_DIR\u003C\u002Fcode>, and \u003Ccode class=\"key\">ESCOUADE_BRANCH\u003C\u002Fcode>. The agent remains usable; for a ticket agent, the failure is added to its first message, and Claude has to do what it takes to be able to work and test. The log is replaced at each new setup, and goes away with the agent.\u003C\u002Fp>\n\u003Cp>When an agent is deleted, a teardown command that fails is reported the same way: “Agent deleted, but the worktree teardown failed on …”. The agent is deleted all the same.\u003C\u002Fp>\n\u003Ch2 id=\"git\">Git\u003C\u002Fh2>\n\u003Ch3 id=\"a-git-command-is-interrupted\">A git command is interrupted\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> A message says “git status stopped: still not done after 120 s” (the command and the time change), in a commit preview, a merge, a sync…\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Cause.\u003C\u002Fstrong> Escouade stops a git command that doesn’t end, so that the window doesn’t stay stuck: a read (status, log, diff…) after 2 minutes, a command that reaches the remote (push, pull, fetch) after 3 minutes (1 minute for the fetch run in the background), and a command that runs git’s hooks (commit, merge, rebase, switching branch) after 30 minutes.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> Run the same command by hand in a terminal opened in the project’s folder to see what blocks it (a hook, the remote’s credentials, the network), then do the action again in Escouade.\u003C\u002Fp>\n\u003Ch2 id=\"notifications\">Notifications\u003C\u002Fh2>\n\u003Ch3 id=\"notifications-don-t-appear\">Notifications don’t appear\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> No notification, or no sound, when an agent asks a question, finishes, or fails.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Possible causes.\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>The type is turned off. In Settings › Notifications, “Notify me about” lists “Questions and permissions”, “Finished tasks”, “Errors”, and “Tickets (ready to review, blocked)”. A type that is off gets no system notification and no chime; the tab, the card, and the taskbar (the Dock on macOS) still flag the agent.\u003C\u002Fli>\n\u003Cli>The system notification only appears if Escouade’s window isn’t in the foreground (shown, active, and not minimized): in the foreground, only the chime sounds. It also needs the switch of the “Channels” group to be on (“Windows notifications when the app is not in the foreground”, “macOS notifications…” on macOS).\u003C\u002Fli>\n\u003Cli>The sound is off: the “♪” button in the status bar and the “Sound on” setting control it, and “Test the sound” tries it.\u003C\u002Fli>\n\u003Cli>On Linux, Escouade doesn’t send system notifications. The chime is played by \u003Ccode class=\"key\">paplay\u003C\u002Fcode>: without it, no sound.\u003C\u002Fli>\n\u003Cli>Also check that the system allows Escouade’s notifications, and that a “do not disturb” mode isn’t hiding them.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>See \u003Ca href=\"\u002Fen\u002Fdocs\u002Fnotifications\u002F\">notifications\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"data-and-tokens\">Data and tokens\u003C\u002Fh2>\n\u003Ch3 id=\"a-data-file-is-unreadable\">A data file is unreadable\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> Escouade starts without its projects, or with its default settings.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Cause.\u003C\u002Fstrong> \u003Ccode class=\"key\">state.json\u003C\u002Fcode> or \u003Ccode class=\"key\">settings.json\u003C\u002Fcode> (or \u003Ccode class=\"key\">integrations.json\u003C\u002Fcode>, \u003Ccode class=\"key\">sync-queue.json\u003C\u002Fcode>) wasn’t valid JSON. Escouade kept a copy under a name like \u003Ccode class=\"key\">state.broken.json\u003C\u002Fcode> and started with the defaults for that file.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> Open the copy to recover what it held, such as the list of projects. \u003Ccode class=\"key\">app.log\u003C\u002Fcode> says which file was the problem. See \u003Ca href=\"\u002Fen\u002Fdocs\u002Fdata\u002F\">local data\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch3 id=\"the-system-keychain-is-unreadable\">The system keychain is unreadable\u003C\u002Fh3>\n\u003Cp>\u003Cstrong>Symptom.\u003C\u002Fstrong> Settings › Integrations says “System keychain unreadable: restart Escouade or reconnect the account.” or “System keychain unavailable: the token stays in ~\u002F.escouade\u002Fintegrations.json.”\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Fix.\u003C\u002Fstrong> Restart Escouade; if the message comes back, reconnect the account (the token is then saved again). In the second case, the token stays in \u003Ccode class=\"key\">integrations.json\u003C\u002Fcode>, readable only by you on macOS and Linux.\u003C\u002Fp>\n\u003Ch2 id=\"log-and-reports\">Log and reports\u003C\u002Fh2>\n\u003Ch3 id=\"where-the-app-s-log-is\">Where the app’s log is\u003C\u002Fh3>\n\u003Cp>The log is \u003Ccode class=\"key\">~\u002F.escouade\u002Fapp.log\u003C\u002Fcode> (\u003Ccode>C:\\Users\\&lt;you&gt;\\.escouade\\app.log\u003C\u002Fcode> on Windows). Each line carries the date, the level, and the text: startup and version, agent stops, errors, migrations, updates. When it goes over about 5 MB, the next startup files it under the name \u003Ccode class=\"key\">app.old.log\u003C\u002Fcode>. Any text editor opens it.\u003C\u002Fp>\n\u003Ch3 id=\"reporting-a-bug\">Reporting a bug\u003C\u002Fh3>\n\u003Cp>Open an issue on \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fguillaume-gagnaire\u002Fescouade\u002Fissues\" rel=\"noopener\">GitHub\u003C\u002Fa> with:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Escouade’s version (Settings › About, “Escouade 1.7.5” for example) and your system (Windows, macOS, or Linux, and its version);\u003C\u002Fli>\n\u003Cli>what you were doing, what you expected, what happened, and a screenshot if it helps;\u003C\u002Fli>\n\u003Cli>the useful lines of \u003Ccode class=\"key\">app.log\u003C\u002Fcode>. Read them before attaching them: they can mention the paths of your folders and project names. Never paste a token.\u003C\u002Fli>\n\u003C\u002Ful>\n",[8,12,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88],{"id":9,"text":10,"depth":11},"claude-code","Claude Code",2,{"id":13,"text":14,"depth":15},"claude-code-is-not-found","Claude Code is not found",3,{"id":17,"text":18,"depth":15},"claude-code-is-not-found-when-the-app-starts-from-the-finder-macos","Claude Code is not found when the app starts from the Finder (macOS)",{"id":20,"text":21,"depth":15},"claude-code-is-installed-in-wsl","Claude Code is installed in WSL",{"id":23,"text":24,"depth":15},"mcp-tools-and-the-claude-code-view-tracking-don-t-work-from-wsl","MCP tools and the Claude Code view tracking don’t work from WSL",{"id":26,"text":27,"depth":15},"a-variable-from-the-shell-profile-doesn-t-reach-claude-code-in-wsl","A variable from the shell profile doesn’t reach Claude Code in WSL",{"id":29,"text":30,"depth":11},"network","Network",{"id":32,"text":33,"depth":15},"escouade-is-behind-a-proxy","Escouade is behind a proxy",{"id":35,"text":36,"depth":15},"a-corporate-certificate-makes-connections-fail","A corporate certificate makes connections fail",{"id":38,"text":39,"depth":11},"quotas-and-usage-limit","Quotas and usage limit",{"id":41,"text":42,"depth":15},"quotas-don-t-show","Quotas don’t show",{"id":44,"text":45,"depth":15},"an-agent-stopped-on-the-usage-limit","An agent stopped on the usage limit",{"id":47,"text":48,"depth":11},"agents","Agents",{"id":50,"text":51,"depth":15},"an-agent-stopped","An agent stopped",{"id":53,"text":54,"depth":15},"claude-session-not-found","Claude session not found",{"id":56,"text":57,"depth":11},"worktrees","Worktrees",{"id":59,"text":60,"depth":15},"a-worktree-setup-fails","A worktree setup fails",{"id":62,"text":63,"depth":11},"git","Git",{"id":65,"text":66,"depth":15},"a-git-command-is-interrupted","A git command is interrupted",{"id":68,"text":69,"depth":11},"notifications","Notifications",{"id":71,"text":72,"depth":15},"notifications-don-t-appear","Notifications don’t appear",{"id":74,"text":75,"depth":11},"data-and-tokens","Data and tokens",{"id":77,"text":78,"depth":15},"a-data-file-is-unreadable","A data file is unreadable",{"id":80,"text":81,"depth":15},"the-system-keychain-is-unreadable","The system keychain is unreadable",{"id":83,"text":84,"depth":11},"log-and-reports","Log and reports",{"id":86,"text":87,"depth":15},"where-the-app-s-log-is","Where the app’s log is",{"id":89,"text":90,"depth":15},"reporting-a-bug","Reporting a bug",1791926756749]