Privacy Policy

This document describes what data Dolaima sends externally, to whom, and what it stores locally.

In one sentence: Dolaima runs no server of its own. It collects no data, sends no analytics, and shows no ads. Your code and your conversations go only to the model provider you configure.

1. What is sent to your AI provider

Dolaima is a coding agent: its whole job is handing context to a large language model. The following is sent over HTTP(S) to the LLM provider you name in your configuration (both baseUrl and apiKey are yours — it can be OpenAI, Anthropic, DeepSeek, OpenRouter, a local Ollama, or any compatible service):

WhatNotes
Your promptsThe text you type in the terminal / Web / GUI / phone app, and the conversation that follows
Conversation historyThe context accumulated in this session, including compacted summaries
File contents it readThe body of files read by tools such as read_file / grep / glob
Command outputstdout / stderr returned by tools such as bash
Tool resultsReturn values of every tool, MCP tools included
Images / audioOnly when you use view_image / screenshot / transcribe — the corresponding image or audio file
System promptGenerated by the program; includes project structure, Git status, memory, and similar (can be trimmed with --economy / --tiny)

⚠ The agent decides which files to read. If your working directory contains sensitive files (keys, certificates, .env), the model may read them and send them to the provider. Put sensitive files in an ignore rule (the ignore files supported by FileIgnoreManager), or do not run in a directory that holds sensitive data.

Who receives it is entirely up to your configuration. This project does not relay, proxy or re-upload anything, and it cannot see this content — the API key and the provider account are yours.

2. Other network requests

Apart from your LLM provider, these features reach the network, and only when you (or the model) actually call that tool:

FeatureGoes toSends
web_searchDuckDuckGo, BingYour search keywords
fetchA URL you or the model specifyAn HTTP request (no extra data)
downloadSame as aboveSame as above
transcribeThe Whisper-compatible endpoint you configuredThe audio to transcribe
MCP serversServers you configured in .waycoder/mcp_servers.jsonDetermined by that MCP protocol
Automatic update checkGitee Releases, GitHub ReleasesA single GET, carrying no user data or identifier
Model catalogue / connection testThe provider endpoint you configuredList and reachability probes

3. What is stored locally (including plain-text keys)

On desktop (Windows / Linux / macOS) data lives in ~/.waycoder/ under your user directory, and in .waycoder/ inside each project:

PathContents
~/.waycoder/api_keys.jsonAPI keys for each provider, stored in plain text, unencrypted
~/.waycoder/config.jsonGlobal configuration (may contain keys, depending on how you configure it)
~/.waycoder/connections.json / providers.jsonConnection and provider definitions (base URL, provider name)
~/.waycoder/sessions/Session records (one directory per slot)
~/.waycoder/kb/Knowledge base
<project>/.waycoder/memory/Structured memory (*.md plus a MEMORY.md index)
<project>/.waycoder/Project-level configuration, MCP server list, and similar

⚠ The keys are plain text: any process or person who can read your user directory can read them. Rely on operating-system file permissions and disk encryption to protect that file; do not keep production keys on a shared account or a multi-user machine. A .env file, if present, may also hold keys — and it is only a first-launch bootstrap source.

This project never uploads that data to a server of its own (there is no such server).

4. No telemetry

The codebase contains no telemetry, no analytics reporting, no crash reporting and no advertising SDK. The only "report" is the automatic update check you trigger yourself — it reads a version number and sends nothing about your machine.

(The sentry entry you may see in the tool catalogue is an optional MCP server entry: you supply the token and enable it yourself. It has nothing to do with any reporting behaviour of this program.)

5. Local privileges and the boundaries around them

The agent runs as your user, so it can execute shell commands, modify files and reach the network. To bound that, the program provides:

  • Permission confirmation (Ask / Auto / SmartAuto / YOLO) — which tool calls need your approval each time
  • Sandbox boundaries — which directories are writable and how far network access goes
  • Work modes — Plan mode is read-only (whitelisted tools), Chat mode uses no tools at all
  • Tool allow / deny lists — WAYCODER_ALLOWED_TOOLS / WAYCODER_DISABLED_TOOLS
  • Bash safety guard — BashGuard blocks dangerous commands

⚠ With the default configuration, bash / file writes / file edits ask you every time; /perm yolo skips confirmation (dangerous: it hands the machine to the model). Choose according to your own risk appetite.

6. Reducing what leaves your machine, and deleting it

  • Use --economy / --tiny to trim the system prompt and context
  • Set ignore rules before running in sensitive directories, or switch to Plan mode (read-only)
  • Point the provider at a local model (Ollama, for instance): data never leaves the machine
  • Clean up ~/.waycoder/sessions/ and the project's .waycoder/memory/ periodically
  • Deleting your data (phone): uninstalling the app erases everything in its private directory (keys, sessions, settings). If you enabled "All files access", the workspace is in external storage and you need to delete the waycoder/ directory yourself

7. Phone notes (iOS / Android)

Everything above holds for both desktop and phone; a few things differ on the phone:

Where the data lives

All of it stays on the device; none of it is uploaded to us (we have no server to upload to):

WhatWhere
API keysapi_keys.json in the app's private directory (plain text, not encrypted)
Settings, connections, model choiceConfig files in the app's private directory
Sessions and memorysessions/, memory/ in the app's private directory
Your code and projectsThe workspace directory (see below)

Where the workspace lives: by default inside the app's private directory (not ~/.waycoder/). On Android, if you grant "All files access", the workspace and config move to a waycoder/ directory in external storage — so other file managers can see the code you write. On iOS it always stays inside the app's private directory.

Phone permissions we request

PermissionWhen we askWhat it is for
CameraWhen you tap "Take photo"Photograph something for the AI to look at
PhotosWhen you tap "Pick image"Choose an existing image for the AI to look at
MicrophoneWhen you tap "Voice input"Turn your speech into text
All files access (Android only)When you enable it in system settingsPut the workspace in external storage so other apps can open your code

We ask only when the feature is used, and declining still leaves everything else working — only that one feature becomes unavailable.

In-app purchase

The phone edition's "Full Edition" is a one-time purchase, and payment is handled by Apple — all we receive is the receipt telling us whether this Apple ID has bought it. We do not get your name, card number or billing address.

Not included on the phone

Automatic updates (the App Store does not allow an app to update itself), command-line installation and winget.

The phone app carries its own copy of this policy with the same wording (Settings → About → Help and privacy), readable offline.

8. Children and age

This software is intended for developers with a basic programming background. It is not directed to children under 13, and we do not knowingly collect information from them. The mobile (App Store) age rating is 13+.

If you are under 18, please use it with a guardian's consent — and make sure you have permission before entering a model provider's API key, since the charges from that key are billed to the account holder.

9. Contact

This policy is also the source of the bundled phone version (Settings → About → Help and privacy), and is published at docs/PRIVACY.md.


See also: Terms of Use · Support · Guide · FAQ

Last updated: 2026-09-30