隐私设计原则

OpenCode 的隐私设计遵循以下原则:

  1. 本地优先:所有代码处理在本地完成
  2. 最小传输:只发送必要的上下文给 LLM
  3. 无持久化:不存储代码或对话历史在服务端
  4. 透明可控:用户可以清楚看到和控制数据传输

数据流向

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  本地文件    │ ──► │   OpenCode  │ ──► │  LLM API    │
│  (你的电脑)  │     │  (本地运行)  │     │ (Anthropic等)│
└─────────────┘     └─────────────┘     └─────────────┘
                           │
                           ▼
                    ┌─────────────┐
                    │  本地存储    │
                    │ (对话历史)   │
                    └─────────────┘

关键点:

  • 代码文件只发送到 LLM API,不会存储在其他地方
  • 对话历史保存在本地 ~/.opencode/sessions/
  • OpenCode 服务端不存储任何用户数据

权限系统

权限模式

OpenCode 支持三种权限模式:

模式说明适用场景
allow自动允许,不询问信任的操作
ask每次执行前询问需要审查的操作
deny禁止执行危险操作

权限类别

{
  "permissions": {
    "file_read": {
      "src/**": "allow",
      ".env*": "deny",
      "**/*.key": "deny"
    },
    "file_write": {
      "src/**": "allow",
      "dist/**": "allow",
      "node_modules/**": "deny"
    },
    "commands": {
      "npm *": "allow",
      "git *": "allow",
      "rm -rf *": "deny",
      "sudo *": "deny"
    },
    "network": {
      "api.github.com": "allow",
      "registry.npmjs.org": "allow",
      "*": "ask"
    }
  }
}

模式匹配

权限规则支持 glob 模式匹配:

  • *:匹配任意字符(不含路径分隔符)
  • **:匹配任意路径
  • ?:匹配单个字符
  • [abc]:匹配括号中的任意字符

敏感文件保护

默认拒绝规则

OpenCode 默认拒绝访问以下文件:

# 内置拒绝规则
.env*
*.key
*.pem
*.p12
*secret*
*credential*
~/.ssh/*
~/.aws/credentials

自定义敏感文件

{
  "permissions": {
    "file_read": {
      "config/database.yml": "deny",
      "secrets/**": "deny"
    }
  }
}

Doom Loop 检测

OpenCode 内置 doom loop 检测机制,防止 AI 陷入无限循环:

{
  "safety": {
    "doomLoop": {
      "enabled": true,
      "maxRetries": 3,
      "maxDuration": "5m"
    }
  }
}

当检测到以下情况时,会自动中断:

  • 相同操作重复执行超过 3 次
  • 单个任务执行时间超过设定值
  • AI 反复修改同一段代码

代理配置

HTTP 代理

export HTTP_PROXY=http://proxy.company.com:8080
export HTTPS_PROXY=http://proxy.company.com:8080
export NO_PROXY=localhost,127.0.0.1

自定义 CA 证书

对于企业内网自签名证书:

export NODE_EXTRA_CA_CERTS=/path/to/ca-bundle.crt
# 或在配置中指定
{
  "network": {
    "caCert": "/path/to/ca-bundle.crt"
  }
}

审计日志

OpenCode 记录所有敏感操作:

> /audit log

最近操作记录:
2024-01-15 14:30:22 [ALLOW] file_read: src/index.ts
2024-01-15 14:30:25 [ALLOW] file_write: src/utils.ts
2024-01-15 14:30:30 [ASK] command: npm publish
2024-01-15 14:30:35 [DENY] file_read: .env

安全最佳实践

  1. 最小权限:只授予必要的权限
  2. 审查操作:对文件写入和命令执行使用 ask 模式
  3. 保护敏感文件:确保 .env、密钥文件被拒绝
  4. 定期审计:检查操作日志,发现异常
  5. 更新版本:及时更新 OpenCode 获取安全修复

企业安全合规

数据不出境

对于数据主权要求,可以使用本地模型:

{
  "provider": "ollama",
  "model": "llama3.1"
}

网络隔离

{
  "network": {
    "allowedHosts": [
      "api.anthropic.com",
      "registry.npmjs.org"
    ],
    "blockedHosts": ["*"]
  }
}