[{"data":1,"prerenderedAt":7},["ShallowReactive",2],{"privacy:en":3},{"title":4,"lede":5,"html":6},"Privacy","Escouade works locally, on your machine. The only thing that leaves it on its own, and only if you accepted, is anonymous usage statistics. This page says what is sent, what never is, where it goes, and how to stop it.","\u003Ch2 id=\"in-short\">In short\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>The statistics are \u003Cstrong>optional\u003C\u002Fstrong>. Escouade asks at the first start (existing installs too, after an update from a version that had none) and sends nothing until you answer “Share statistics”.\u003C\u002Fli>\n\u003Cli>They are \u003Cstrong>anonymous\u003C\u002Fstrong>: an id drawn at random, never derived from your machine or from you, and no name, path, code, conversation or Git data.\u003C\u002Fli>\n\u003Cli>They go to a server \u003Cstrong>of ours\u003C\u002Fstrong>, hosted in France. No third party receives them.\u003C\u002Fli>\n\u003Cli>You can stop them at any time, and the id is then deleted.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"what-is-sent\">What is sent\u003C\u002Fh2>\n\u003Cp>Every event carries its name, its time (UTC, to the millisecond), a session id, the install id, and the system information described below.\u003C\u002Fp>\n\u003Ch3 id=\"the-events\">The events\u003C\u002Fh3>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Event\u003C\u002Fth>\n\u003Cth>When\u003C\u002Fth>\n\u003Cth>Props added\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">app_started\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>At each start\u003C\u002Ftd>\n\u003Ctd>The interface language (\u003Ccode class=\"key\">fr\u003C\u002Fcode> or \u003Ccode class=\"key\">en\u003C\u002Fcode>), the number of Claude accounts, the number of projects, whether “Claude can drive Escouade” (the MCP server) is on (yes or no), whether a project is in WSL (yes or no)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">app_active\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Once a day while the app stays open\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">project_created\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A project is created\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">agent_created\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>An agent is created\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">worktree\u003C\u002Fcode>: with a worktree or not (yes or no)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">message_sent\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A message is sent to an agent\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">ticket_created\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A ticket is created\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">ticket_started\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A ticket is started\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">by\u003C\u002Fcode>: \u003Ccode class=\"key\">user\u003C\u002Fcode> or \u003Ccode class=\"key\">autopilot\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">ticket_approved\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A ticket is approved\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">committed\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A commit is made\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">merged\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A branch is merged\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">git_sync\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A Git sync\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">op\u003C\u002Fcode>: \u003Ccode class=\"key\">fetch\u003C\u002Fcode>, \u003Ccode class=\"key\">pull\u003C\u002Fcode> or \u003Ccode class=\"key\">push\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">branch_created\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A branch is created\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">terminal_opened\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A terminal is opened\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">launch_started\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A launch command starts\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">test_run_started\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A test starts\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">claude_code_view\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>An agent switches to the Claude Code view\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">file_saved\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A file is saved in the editor\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">code_searched\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A search in the code\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">mcp_enabled\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>“Claude can drive Escouade” is turned on\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>integration_connected\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A service is connected\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">service\u003C\u002Fcode>: \u003Ccode class=\"key\">jira\u003C\u002Fcode>, \u003Ccode class=\"key\">trello\u003C\u002Fcode>, \u003Ccode class=\"key\">github\u003C\u002Fcode> or \u003Ccode class=\"key\">linear\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">tickets_imported\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Tickets are imported\u003C\u002Ftd>\n\u003Ctd>\u003Ccode class=\"key\">service\u003C\u002Fcode>: \u003Ccode class=\"key\">jira\u003C\u002Fcode>, \u003Ccode class=\"key\">trello\u003C\u002Fcode>, \u003Ccode class=\"key\">github\u003C\u002Fcode> or \u003Ccode class=\"key\">linear\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"key\">account_created\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>A Claude account is added\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>remote_control_enabled\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Remote control is turned on\u003C\u002Ftd>\n\u003Ctd>—\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Cp>An event says that a feature was used, not on what: never the name of the project, the agent or the branch, nor anything that was written.\u003C\u002Fp>\n\u003Ch3 id=\"the-system-and-the-install\">The system and the install\u003C\u002Fh3>\n\u003Cp>Every event also carries:\u003C\u002Fp>\n\u003Cdiv class=\"table\">\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Information\u003C\u002Fth>\n\u003Cth>Example or detail\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Install id\u003C\u002Ftd>\n\u003Ctd>A random UUID v4 drawn when you agree, kept in \u003Ccode>~\u002F.escouade\u002Ftelemetry-id\u003C\u002Fcode>, deleted when you say no\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Session id\u003C\u002Ftd>\n\u003Ctd>A random number, renewed after 4 hours without any event\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Escouade’s version\u003C\u002Ftd>\n\u003Ctd>For example \u003Ccode class=\"key\">1.8.0\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Development build\u003C\u002Ftd>\n\u003Ctd>Whether the app is a development build (yes or no)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>System and its version\u003C\u002Ftd>\n\u003Ctd>For example Windows 10.0.26200, macOS 15.1\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>System locale\u003C\u002Ftd>\n\u003Ctd>For example \u003Ccode class=\"key\">fr-FR\u003C\u002Fcode> (10 characters at most)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Web engine and its version\u003C\u002Ftd>\n\u003Ctd>WebView2, WebKit or WebKitGTK\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"what-is-never-sent\">What is never sent\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Names: yours, and those of your projects, agents, branches and accounts.\u003C\u002Fli>\n\u003Cli>E-mail addresses.\u003C\u002Fli>\n\u003Cli>Paths and file names.\u003C\u002Fli>\n\u003Cli>Your code.\u003C\u002Fli>\n\u003Cli>The content of conversations and of the instructions given to agents.\u003C\u002Fli>\n\u003Cli>The titles and texts of your tickets.\u003C\u002Fli>\n\u003Cli>Git data: commits, remotes.\u003C\u002Fli>\n\u003Cli>Tokens and secrets.\u003C\u002Fli>\n\u003Cli>Anything you type.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"the-tool-and-where-the-data-lives\">The tool and where the data lives\u003C\u002Fh2>\n\u003Cp>The statistics are received by \u003Ca href=\"https:\u002F\u002Faptabase.com\" rel=\"noopener\">Aptabase\u003C\u002Fa>, an open source analytics tool (\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Faptabase\u002Faptabase\" rel=\"noopener\">its source\u003C\u002Fa>). It is \u003Cstrong>self-hosted by Escouade’s author\u003C\u002Fstrong>, at \u003Ccode>aptabase.gagnaire.dev\u003C\u002Fcode>, on a Scaleway server in a datacenter in Paris (France). No third party receives this data, and nothing goes through Aptabase’s own cloud.\u003C\u002Fp>\n\u003Cp>On the server side, Aptabase does not store the IP address. It uses it on reception to derive the country and, when it can, the region, and, combined with a salt that changes every day, to compute a daily visitor hash.\u003C\u002Fp>\n\u003Ch2 id=\"how-events-leave\">How events leave\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Events wait in memory, never on disk.\u003C\u002Fli>\n\u003Cli>They are sent every minute, in batches of 25, and when you quit the app (3 seconds at most), over HTTPS to \u003Ccode>https:\u002F\u002Faptabase.gagnaire.dev\u002Fapi\u002Fv0\u002Fevents\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>Offline, up to 1,000 events wait in memory, the oldest being dropped first. If you quit the app offline, they are lost.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"how-long\">How long\u003C\u002Fh2>\n\u003Cp>The server deletes events automatically after 5 years (after 182 days for those of development builds).\u003C\u002Fp>\n\u003Ch2 id=\"saying-yes-no-or-changing-your-mind\">Saying yes, no, or changing your mind\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>At the first start\u003C\u002Fstrong>, a “Help improve Escouade?” dialog offers “Share statistics” or “No thanks”, with a “What is sent, in detail” link to this page. If you close it without answering (with \u003Ccode class=\"key\">Esc\u003C\u002Fcode>), it comes back at the next start.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>In the settings\u003C\u002Fstrong>, “About” tab, the “Anonymous usage statistics” line has a switch and an “In detail” button that opens this page. It is off until you accept in the first-start dialog.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>When you turn it off\u003C\u002Fstrong>, the install id is forgotten, its \u003Ccode class=\"key\">telemetry-id\u003C\u002Fcode> file is deleted, and events still waiting are dropped. If you turn it on again, a new id is drawn: the install counts as a new one.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>See also \u003Ca href=\"\u002Fen\u002Fdocs\u002Fsettings-about\u002F\">the “About” settings\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"tests-and-demos\">Tests and demos\u003C\u002Fh2>\n\u003Cp>An instance started with a separate data folder (the \u003Ccode class=\"key\">ESCOUADE_DATA_DIR\u003C\u002Fcode> variable, used by tests and demos) never sends anything. See \u003Ca href=\"\u002Fen\u002Fdocs\u002Fdata\u002F\">local data\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"why\">Why\u003C\u002Fh2>\n\u003Cp>To know how many people use Escouade (users active over 30 days, counted by install id), which versions are still in use (to know when an old one can stop being supported), on which systems, and which features are used, in order to decide what to improve.\u003C\u002Fp>\n\u003Ch2 id=\"anonymity\">Anonymity\u003C\u002Fh2>\n\u003Cp>The id is drawn at random. It is derived from nothing about your machine or about you, and nothing allows linking the statistics to a person.\u003C\u002Fp>\n\u003Ch2 id=\"asking-for-deletion\">Asking for deletion\u003C\u002Fh2>\n\u003Cp>To have an install’s data deleted, open a \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fguillaume-gagnaire\u002Fescouade\u002Fissues\" rel=\"noopener\">GitHub issue\u003C\u002Fa> giving the id in your \u003Ccode class=\"key\">telemetry-id\u003C\u002Fcode> file (in \u003Ccode class=\"key\">~\u002F.escouade\u002F\u003C\u002Fcode>). You can also write to \u003Ca href=\"mailto:guillaume@gagnaire.dev\" rel=\"noopener\">guillaume@gagnaire.dev\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"who-is-responsible\">Who is responsible\u003C\u002Fh2>\n\u003Cp>The statistics are managed by GAGNAIRE DEVELOPPEMENT, the publisher of Escouade (see the \u003Ca href=\"\u002Fen\u002Flegal\u002F\">legal notice\u003C\u002Fa>). Contact: \u003Ca href=\"mailto:guillaume@gagnaire.dev\" rel=\"noopener\">guillaume@gagnaire.dev\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"the-code\">The code\u003C\u002Fh2>\n\u003Cp>The code that sends the statistics is open: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fguillaume-gagnaire\u002Fescouade\u002Fblob\u002Fmain\u002Fsrc-tauri\u002Fsrc\u002Ftelemetry.rs\" rel=\"noopener\">\u003Ccode class=\"key\">telemetry.rs\u003C\u002Fcode>\u003C\u002Fa>. What this page says has to be true there.\u003C\u002Fp>\n\u003Ch2 id=\"what-leaves-escouade-besides-the-statistics\">What leaves Escouade besides the statistics\u003C\u002Fh2>\n\u003Cp>Escouade has no account or server of its own for your projects, conversations or settings: they stay in \u003Ccode class=\"key\">~\u002F.escouade\u002F\u003C\u002Fcode> (\u003Ca href=\"\u002Fen\u002Fdocs\u002Fdata\u002F\">local data\u003C\u002Fa>). It does talk to a few services, and only for what you ask of it:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Claude Code\u003C\u002Fstrong>, which it runs on your machine, sends its requests to Anthropic as it would in a terminal. Escouade also queries Anthropic’s usage service to show your quotas (\u003Ca href=\"\u002Fen\u002Fdocs\u002Fusage\u002F\">quotas\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Updates\u003C\u002Fstrong>: Escouade reads the \u003Ccode class=\"key\">latest.json\u003C\u002Fcode> file of the latest release on GitHub, then downloads the new version (\u003Ca href=\"\u002Fen\u002Fdocs\u002Fupdates\u002F\">updates\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>The integrations\u003C\u002Fstrong> you connect (Jira, Trello, GitHub, Linear): Escouade talks to those services with your token (\u003Ca href=\"\u002Fen\u002Fdocs\u002Fintegrations\u002F\">integrations\u003C\u002Fa>).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"this-site\">This site\u003C\u002Fh2>\n\u003Cp>This site’s code includes no cookie and no analytics tool. It only keeps your language choice in your browser’s local storage (the \u003Ccode class=\"key\">escouade-lang\u003C\u002Fcode> key), to leave you on the right language at your next visit. That value stays in your browser and is sent nowhere.\u003C\u002Fp>\n",1791926756890]