#!/bin/bash # 启动官方 codex app-server(照搬开源核心,不改 agent 循环、不改沙箱)。 # # 用法: # ./start.sh # stdio,适合本机客户端(client.py) # ./start.sh --listen unix:///tmp/codex.sock # Unix socket,多客户端共享一个 server # ./start.sh --listen ws://127.0.0.1:8080 # WebSocket,远程/另一台机器接 # CODEX_HOME=~/.codex ./start.sh # 默认就是 ~/.codex,不设也一样 # # 先只校验配置、不启动(排障用): # codex app-server --print-startup-config # # 注意: # 1. 模型和登录不在开源里:首次使用前先在你自己的机器上完成 # `codex login`(ChatGPT 登录)或配好 API key 的 model provider, # 否则 thread/start 能建、turn/start 会在模型调用处失败。 # 2. 不要把 --dangerously-bypass-approvals-and-sandbox 写进常驻启动, # 那是给外部已沙箱化的环境准备的,见 README 安全一节。 set -euo pipefail cd "$(dirname "$0")" # 本机 VM 修复:系统里的 codex 是裸二进制,旁边没有 # codex-code-mode-host 和 codex-resources/bwrap,工具会 fail closed。 # 本项目 bin/ 里是配对好的官方 0.164.0-alpha.9 三件套 # (codex + codex-code-mode-host + codex-resources/bwrap), # 优先用它;Mac 上用 npm 正常安装的 codex 自带这三件套, # 不需要 bin/,直接用 PATH 里的 codex 即可。 if [ -n "${CODEX_BIN:-}" ]; then CODEX_CMD="$CODEX_BIN" elif [ -x "$(dirname "$0")/bin/codex" ]; then CODEX_CMD="$(dirname "$0")/bin/codex" elif command -v codex >/dev/null 2>&1; then CODEX_CMD="codex" else echo "找不到 codex,请先装官方 codex" >&2 exit 1 fi echo "codex: $($CODEX_CMD --version 2>&1 | head -1) ($CODEX_CMD)" echo "CODEX_HOME: ${CODEX_HOME:-$HOME/.codex}" exec "$CODEX_CMD" app-server "$@"