Security and privacy

Your code, your keys, your machine.

Duscode runs where your code lives. With your own key, it calls the AI provider you choose directly. On Duscode credits, requests pass through Duscode Cloud, which keeps what each call cost, not what it said.

Runs on your machine
A local server that listens on 127.0.0.1 only, and refuses requests from other websites and from any address but localhost, because it can edit files and run commands.
Keys stay on your machine
Provider keys are added in Settings and sealed in an encrypted vault on your machine (or read from your environment), never in a project or the repo. The browser sees only their last four characters, and Dus can't read them. They go only to the provider they belong to.
Code goes only to the model
Dus sends the parts of your code a task needs to the provider of the model that answers. With your own key, nothing passes through Duscode's servers. On credits, requests pass through Duscode Cloud and aren't stored there.
Never stored by Duscode
Duscode doesn't store your code, prompts or keys. Sessions, the journal and usage history are files on your own machine.

Where your data goes, and privacy mode

With your own key, every model call goes straight from your computer to the provider of the model that answers it. On Duscode credits, it passes through Duscode Cloud on the way. Privacy mode (Settings → Models & keys) chooses who may get anything at all: any provider with a key, only the providers you choose, or local models only (Ollama, LM Studio and other servers on your computer or network). It is enforced inside the engine for every call, and a refused call is never sent somewhere else instead. Web search and browser checks of internet pages have their own switches.

Exactly what is sent and when, what Duscode Cloud receives, how keys and the sandbox work, how costs are calculated, the audit log and how to delete your data: Data and privacy in the docs.

Guardrails on what Dus can do

  • You approve changes. Nothing changes a file or runs a command without your approval unless you turn auto-approve on, and every request says why.
  • A fixed blocklist of dangerous commands applies even with auto-approve on.
  • Commands run without your provider keys in their environment, and known secrets are redacted from command output.
  • File access stays inside the project. Symlinks are followed to check they don't lead outside it, writes are atomic, and an edit is refused if the file changed while you were reviewing it.
  • A project's config can't redirect your keys. Where a provider's requests go is set in your own user config only, because a project's config travels with its code.
  • Never destructive with git. Sessions never force-push, reset or stash; a session's branch is kept when it finishes.
  • Web access is honest. When Dus fetches a page it identifies itself as Duscode, fetches one page at a time, and refuses private and local network addresses.

Secrets vault

Projects need deploy keys, database URLs and tokens. The vault holds them, globally or per project, encrypted with AES-256-GCM and with the key in your operating system's keychain where available. Dus refers to a secret by name; Duscode puts the value into the one command that needs it and redacts it from every output, log, journal and session file, so the value never reaches a model provider. The vault lives in your Duscode folder, outside every project, so it is never committed, and it is never synced to Duscode Cloud. Settings → Vault shows which session used which secret, and when.

Your AI provider's data policy

When you use a provider's API with your key, that provider's terms and data policy apply. As of our last review (October 2026):

  • Anthropic: API content isn't used for training by default. Zero data retention is available; content flagged for safety may still be retained.
  • OpenAI: API data isn't used for training by default, and abuse-monitoring logs are kept for up to 30 days. Duscode calls OpenAI with store: false.
  • Google Gemini: the paid tier doesn't train on prompts, and abuse logs are kept for 55 days. The unpaid tier may use your content for training and human review, so don't send sensitive code through it.

Check each provider's current policy before you send it sensitive code. Duscode uses official API keys only, never consumer chat subscriptions.

What Duscode Cloud stores

Duscode Cloud handles accounts, billing and licences for paid plans. It stores your email, an optional name (you sign in with an email link, so there is no password), when you accepted the Terms and confirmed you're 18 or over, your plan and your Stripe customer and subscription identifiers. Card details are handled by Stripe and never reach us. Your plan is checked with a signed licence that Duscode verifies offline. On Duscode credits, Dus's model requests pass through Duscode Cloud to the provider that answers (always named in the app); they are not stored, and the cloud keeps only each call's model, token counts and cost. With your own keys, nothing passes through us. See the draft Privacy Policy.

Reporting a security issue

Email support@duscode.com with "Security" in the subject. Please give us a chance to fix the issue before you share it publicly.