# Codex Relay

这是一个给同事在局域网内提问的轻量中转服务。当前默认模式会在 Docker 容器里调用 `codex exec`，并通过只读挂载的 `/Users/lqt/.codex` 复制必要登录态到容器内部运行目录。

注意：这不是共享当前 Codex Desktop 窗口里的实时会话，而是让同事通过网页触发新的 `codex exec` 任务。所有请求会使用你的 Codex 账号能力和授权边界，但运行日志和临时状态写在容器自己的 `runtime` 目录里，不写回本机 `~/.codex`。

## 本地密钥

真实密钥只放本地忽略目录：

```bash
mkdir -p /Users/lqt/work/zhct/zhctprompt/config/local
chmod 700 /Users/lqt/work/zhct/zhctprompt/config/local
cp /Users/lqt/work/zhct/zhctprompt/docker/local-config-templates/codex-relay.env.example \
  /Users/lqt/work/zhct/zhctprompt/config/local/codex-relay.env
chmod 600 /Users/lqt/work/zhct/zhctprompt/config/local/codex-relay.env
```

编辑 `config/local/codex-relay.env`，至少设置：

```bash
RELAY_ACCESS_TOKEN=[REDACTED_SECRET]]
```

## Docker 启动

```bash
cd /Users/lqt/work/zhct/zhctprompt/docker
docker compose -f codex-relay.compose.yml up -d --build
docker logs -f zhct-codex-relay
```

同事在同一局域网访问：

```text
http://192.168.10.147:8787
```

停止：

```bash
cd /Users/lqt/work/zhct/zhctprompt/docker
docker compose -f codex-relay.compose.yml down
```

## API

```bash
curl -s http://127.0.0.1:8787/api/chat \
  -H "content-type: application/json" \
  -H "authorization: [REDACTED_SECRET]] $RELAY_ACCESS_TOKEN" \
  -d '{"message":"帮我看一下这个项目的 README，总结启动方式"}'
```

## 安全边界

- 不要把 `/Users/lqt/.codex` 复制给同事；这里只在容器内只读挂载，并在容器内部生成运行副本。
- 不要把 `config/local/codex-relay.env` 提交到 Git。
- 容器默认挂载 `/Users/lqt/work/zhct` 到 `/workspace/zhct`，同事的问题会在这个范围内让 Codex 读取和操作。
- 访问口令泄露就等于别人可以借用你的 Codex 账号跑任务，必须使用长随机口令。
- 如需对公网开放，必须先加反向代理 HTTPS、强口令、IP 白名单和更严格的访问日志。

如需改回纯 OpenAI API 中转，可在环境中设置：

```bash
RELAY_PROVIDER=openai
OPENAI_API_KEY=[REDACTED_SECRET]]
```
