|
| 1 | +# Security FAQ |
| 2 | + |
| 3 | +Answers to the most common security questions about running Altimate Code in your environment. |
| 4 | + |
| 5 | +--- |
| 6 | + |
| 7 | +## Does Altimate Code send my data to external services? |
| 8 | + |
| 9 | +Altimate Code sends prompts and context to the LLM provider you configure (Anthropic, OpenAI, Azure OpenAI, AWS Bedrock, etc.). **You choose the provider.** No data is sent anywhere else except optional [telemetry](#what-telemetry-is-collected), which contains no code, queries, or credentials. |
| 10 | + |
| 11 | +If you use a self-hosted or VPC-deployed model (e.g., AWS Bedrock, Azure OpenAI), your data never leaves your cloud account. |
| 12 | + |
| 13 | +## Can the AI read my database credentials? |
| 14 | + |
| 15 | +Altimate Code needs database credentials to connect to your warehouse. Credentials are stored locally in your project's `altimate-code.json` or passed via environment variables. They are **never** included in telemetry, logged, or sent to any service other than your database. |
| 16 | + |
| 17 | +!!! tip |
| 18 | + Prefer environment variables or your cloud provider's secret manager over hardcoding credentials in config files. Add `altimate-code.json` to `.gitignore` if it contains connection strings. |
| 19 | + |
| 20 | +## What can the agent actually execute? |
| 21 | + |
| 22 | +Altimate Code can read files, write files, and run shell commands — but only with your permission. The [permission system](configure/permissions.md) lets you control every tool: |
| 23 | + |
| 24 | +| Level | Behavior | |
| 25 | +|-------|----------| |
| 26 | +| `"allow"` | Runs without confirmation | |
| 27 | +| `"ask"` | Prompts you before each use | |
| 28 | +| `"deny"` | Blocked entirely | |
| 29 | + |
| 30 | +By default, destructive operations like `bash`, `write`, and `edit` require confirmation. You can further restrict specific commands: |
| 31 | + |
| 32 | +```json |
| 33 | +{ |
| 34 | + "permission": { |
| 35 | + "bash": { |
| 36 | + "dbt *": "allow", |
| 37 | + "git status": "allow", |
| 38 | + "DROP *": "deny", |
| 39 | + "rm *": "deny", |
| 40 | + "*": "ask" |
| 41 | + } |
| 42 | + } |
| 43 | +} |
| 44 | +``` |
| 45 | + |
| 46 | +## Can I prevent the agent from modifying production databases? |
| 47 | + |
| 48 | +Yes. Use pattern-based permissions to deny destructive SQL: |
| 49 | + |
| 50 | +```json |
| 51 | +{ |
| 52 | + "permission": { |
| 53 | + "bash": { |
| 54 | + "DROP *": "deny", |
| 55 | + "DELETE *": "deny", |
| 56 | + "TRUNCATE *": "deny", |
| 57 | + "ALTER *": "deny", |
| 58 | + "*": "ask" |
| 59 | + } |
| 60 | + } |
| 61 | +} |
| 62 | +``` |
| 63 | + |
| 64 | +You can also configure per-agent permissions. For example, restrict the `analyst` agent to read-only: |
| 65 | + |
| 66 | +```json |
| 67 | +{ |
| 68 | + "agent": { |
| 69 | + "analyst": { |
| 70 | + "permission": { |
| 71 | + "write": "deny", |
| 72 | + "edit": "deny", |
| 73 | + "bash": { |
| 74 | + "SELECT *": "allow", |
| 75 | + "*": "deny" |
| 76 | + } |
| 77 | + } |
| 78 | + } |
| 79 | + } |
| 80 | +} |
| 81 | +``` |
| 82 | + |
| 83 | +## What network endpoints does Altimate Code contact? |
| 84 | + |
| 85 | +| Destination | Purpose | |
| 86 | +|-------------|---------| |
| 87 | +| Your configured LLM provider | Model inference | |
| 88 | +| Your warehouse endpoints | Database queries | |
| 89 | +| `registry.npmjs.org` | Package updates | |
| 90 | +| `models.dev` | Model catalog (can be disabled) | |
| 91 | +| `eastus-8.in.applicationinsights.azure.com` | Telemetry (can be disabled) | |
| 92 | + |
| 93 | +No other outbound connections are made. See the [Network reference](network.md) for proxy and firewall configuration. |
| 94 | + |
| 95 | +## Can I run Altimate Code without internet access? |
| 96 | + |
| 97 | +Yes, with constraints. You need: |
| 98 | + |
| 99 | +1. **A locally accessible LLM** — self-hosted model or a provider reachable from your network |
| 100 | +2. **Model catalog disabled** — set `ALTIMATE_CLI_DISABLE_MODELS_FETCH=true` or provide a local models file |
| 101 | +3. **Telemetry disabled** — set `ALTIMATE_TELEMETRY_DISABLED=true` |
| 102 | + |
| 103 | +```bash |
| 104 | +export ALTIMATE_CLI_DISABLE_MODELS_FETCH=true |
| 105 | +export ALTIMATE_TELEMETRY_DISABLED=true |
| 106 | +export ALTIMATE_CLI_MODELS_PATH=/path/to/models.json |
| 107 | +``` |
| 108 | + |
| 109 | +## What telemetry is collected? |
| 110 | + |
| 111 | +Anonymous usage telemetry — event names, token counts, timing, and error types. **Never** code, queries, credentials, file paths, or prompt content. See the full [Telemetry reference](configure/telemetry.md) for the complete event list. |
| 112 | + |
| 113 | +Disable telemetry entirely: |
| 114 | + |
| 115 | +```json |
| 116 | +{ |
| 117 | + "telemetry": { |
| 118 | + "disabled": true |
| 119 | + } |
| 120 | +} |
| 121 | +``` |
| 122 | + |
| 123 | +Or via environment variable: |
| 124 | + |
| 125 | +```bash |
| 126 | +export ALTIMATE_TELEMETRY_DISABLED=true |
| 127 | +``` |
| 128 | + |
| 129 | +## Are MCP servers a security risk? |
| 130 | + |
| 131 | +MCP (Model Context Protocol) servers extend Altimate Code with additional tools. They run as local subprocesses or connect via SSE/HTTP. Security considerations: |
| 132 | + |
| 133 | +- **Only install MCP servers you trust.** They run with the same permissions as your user account. |
| 134 | +- **MCP servers can access your filesystem and network.** Review what a server does before adding it. |
| 135 | +- **MCP tool calls go through the permission system.** You can set MCP tools to `"ask"` or `"deny"` like any other tool. |
| 136 | + |
| 137 | +!!! warning |
| 138 | + Third-party MCP servers are not reviewed or audited by Altimate. Treat them like any other third-party dependency — review the source, check for updates, and limit their access. |
| 139 | + |
| 140 | +## How does the Python engine work? Is it safe? |
| 141 | + |
| 142 | +The Python engine (`altimate_engine`) runs as a local subprocess, communicating with the CLI over JSON-RPC via stdio. It: |
| 143 | + |
| 144 | +- Runs under your user account with your permissions |
| 145 | +- Has no network access beyond what your warehouse connections require |
| 146 | +- Restarts automatically if it crashes (max 2 restarts) |
| 147 | +- Times out after 30 seconds per call |
| 148 | + |
| 149 | +The engine is not exposed on any network port — it only communicates through stdin/stdout pipes with the parent CLI process. |
| 150 | + |
| 151 | +## Does Altimate Code store conversation history? |
| 152 | + |
| 153 | +Conversation context lives in memory during your session. Altimate Code does not persist conversation history to disk or send it to any service. When you end a session, the context is gone. |
| 154 | + |
| 155 | +!!! note |
| 156 | + Your LLM provider may have its own data retention policies. Check your provider's terms to understand how they handle API requests. |
| 157 | + |
| 158 | +## How do I secure Altimate Code in a team environment? |
| 159 | + |
| 160 | +1. **Use project-level config** — Place `altimate-code.json` in your project root with appropriate permission defaults. This ensures consistent security settings across the team. |
| 161 | + |
| 162 | +2. **Restrict dangerous operations** — Deny destructive SQL and shell commands at the project level so individual users can't accidentally bypass them. |
| 163 | + |
| 164 | +3. **Use environment variables for secrets** — Never commit credentials. Use `ALTIMATE_CLI_PYTHON`, warehouse connection env vars, and your cloud provider's secret management. |
| 165 | + |
| 166 | +4. **Review MCP servers** — Maintain a list of approved MCP servers. Don't let individual developers add arbitrary servers to shared configurations. |
| 167 | + |
| 168 | +5. **Lock down agent permissions** — Give each agent only the permissions it needs. The `analyst` agent doesn't need `write` access. The `builder` agent doesn't need `DROP` permissions. |
| 169 | + |
| 170 | +## Can AI-generated SQL damage my database? |
| 171 | + |
| 172 | +Altimate Code generates SQL based on your instructions and schema context. Like any generated code, it should be reviewed before execution. The permission system defaults to `"ask"` for shell commands, so you'll see every query before it runs. |
| 173 | + |
| 174 | +For additional safety: |
| 175 | + |
| 176 | +- Use a **read-only database user** for exploration and analysis |
| 177 | +- **Deny destructive DDL/DML** via pattern-based permissions |
| 178 | +- Run against a **staging environment** before production |
| 179 | +- Use the `analyst` agent with restricted permissions for ad-hoc queries |
| 180 | + |
| 181 | +## Where should I report security vulnerabilities? |
| 182 | + |
| 183 | +**Do not open public GitHub issues for security vulnerabilities.** Instead, email **security@altimate.ai** with a description, reproduction steps, and your severity assessment. You'll receive acknowledgment within 48 hours. See the full [Security Policy](https://github.com/AltimateAI/altimate-code/blob/main/SECURITY.md) for details. |
0 commit comments