> ## Documentation Index
> Fetch the complete documentation index at: https://docs.codecobra.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Security

> How CodeCobra protects your Odoo credentials, your data and your production systems.

CodeCobra connects to your live Odoo database and works inside it. That asks for real trust, so this page says what actually protects you rather than summarising it.

## Your Odoo credentials

<CardGroup cols={2}>
  <Card title="Encrypted before storage" icon="lock">
    Every credential is encrypted the moment you submit it, using AES-128-CBC with HMAC-SHA256 authentication. Nothing is written in plaintext.
  </Card>

  <Card title="Never readable back" icon="eye-slash">
    Once saved, a credential cannot be retrieved — not through the API, not through the interface, not by you. Only whether one exists.
  </Card>

  <Card title="Separate keys per system" icon="key">
    Odoo credentials, GitHub authorizations and two-factor secrets are each encrypted under their own key, so one does not expose the others.
  </Card>

  <Card title="Decrypted only in use" icon="clock">
    A credential is decrypted only when a task you started needs it, and only for that turn.
  </Card>
</CardGroup>

## You set the ceiling

Every Odoo connection carries an access level that you choose:

| Level      | What CodeCobra can do                                             |
| ---------- | ----------------------------------------------------------------- |
| **Read**   | Look at records. Nothing can be changed, whatever is asked of it. |
| **Write**  | Create and update records.                                        |
| **Delete** | Everything above, plus removing records.                          |

A task can be given **less** access than the connection allows, never more — a request to escalate is clamped back down on our side, not trusted from the browser. And even at Write or Delete, destructive operations still stop and ask you before they run.

<Warning>The access level controls what *kinds* of action can be attempted, not *which records* are visible. Restricting CodeCobra to particular models, records or modules is done on the Odoo side, with groups and record rules, the same way you would for any other user. Give it a dedicated Odoo user scoped to what it actually needs.</Warning>

## Your work is isolated

Every task runs in its own container, with its own storage, created for that task and destroyed with it. One task cannot see another's workspace.

## Nothing is used to train models

Your code, your prompts, your business data and your credentials are never used to train, fine-tune or evaluate any model — ours or anyone else's. Third-party providers that run model inference are bound by agreements that prohibit it.

## Nothing reaches production without you

CodeCobra cannot push to production on its own. Every change goes through a plan you approve and a pull request you merge, and production merges are gated separately from staging. You also get a disposable Odoo instance to test the change against before any of that.

<Card title="Review and deploy" icon="code-merge" href="/tasks/review-and-deploy">
  How changes get from a chat to your production system.
</Card>

## Account security

<CardGroup cols={2}>
  <Card title="Two-factor authentication" icon="shield-halved" href="/security/two-factor">
    Authenticator app, backup codes and trusted devices.
  </Card>

  <Card title="Require 2FA for your team" icon="building-shield" href="/security/enforce-2fa-for-your-org">
    Organization owners can make it mandatory.
  </Card>
</CardGroup>

## Data retention

<Card title="How long we keep things" icon="calendar-xmark" href="/security/data-retention">
  Idle workspaces are purged after 90 days, and deleting a task destroys it properly.
</Card>

## Reporting a problem

Found something? Email [info@codecobra.ai](mailto:info@codecobra.ai). We would much rather hear from you than not.
