Skip to content

Repository files navigation

AnyCode

中文 | English

面向 Codex agent 的 Web 工作台:在浏览器中统一管理项目、会话卡片、隔离 worktree、可编排工作流和人工介入。

AnyCode 工作台预览

核心能力 · 界面展示 · 快速开始 · 首次使用 · 配置 · 数据与安全 · 运维与排错

核心能力

  • 在一个工作台中管理多个项目和会话,集中查看运行状态、优先级、TODO 与代码变更。
  • Git 项目的会话可基于指定分支创建独立 worktree,减少并行任务互相干扰。
  • 同时支持直接与 Codex 交互的会话模式,以及包含条件、重试、审批和合并节点的流程模式。
  • Codex 可以通过 App Server 动态工具 questions 请求用户补充决策;工作流也可以暂停并等待人工审批。
  • Codex 可以为容器内测试程序创建带鉴权的 Cloudflare 临时隧道,并由会话或管理界面查看和关闭;概览页会实时显示运行中的隧道数量。
  • 会话时间线实时展示文本、推理、命令、工具调用和文件变更,执行完成后仍可回看。

界面展示

思维图

展开图片

AnyCode 思维图

横向工作台

展开图片

AnyCode 横向工作台

主要功能

项目与会话

  • 从服务端可访问的目录添加项目,自动检测 Git 仓库和可用分支。
  • 通过独立的项目管理页新增或移除项目,并进入项目设置和流程配置。
  • 创建会话时选择基础分支、运行模式、Codex 模型、推理强度和文件系统权限;Git 项目可为会话创建隔离 worktree。
  • 通过卡片集中查看运行状态、基础分支、工作分支、当前流程节点、优先级、Token 用量和最近活动,并在同一 Codex 会话中持续追加需求。
  • 在全局设置的“常规”分组配置并发上限,以及“工作区写入”模式下 Agent 可额外写入的绝对路径;结合会话优先级控制执行队列。

横向工作台

  • 桌面概览可在紧凑的卡片视图与横向视图之间切换,并按项目筛选需要关注的会话。
  • 横向视图将多个活跃会话的完整详情并排展开,可直接跟进时间线和执行操作,无需频繁切换页面。
  • 会话列支持横向滚动和独立调宽,列宽偏好会保存在当前浏览器中。

交互与快捷操作

  • 在全局设置中新增、编辑和删除快捷指令,并在输入需求时快速插入常用内容。
  • 可在运行中的卡片和事件流底部显示轮换的思考语句,也可关闭展示或选择不同语气。

动态外观

  • 使用每日自动更新的 Bing 壁纸、上传的 JPEG/PNG 自定义壁纸,或中国传统纯色色系作为应用背景。
  • 自动提取 Bing 与自定义壁纸的主色,并通过可选的 Material 3 选色算法生成完整的明暗主题色板。
  • 独立调节背景遮罩,在保留壁纸视觉效果的同时维持内容可读性。

工作流与人工介入

  • 为项目编排由 Codex、表达式、人工审批、合并和关闭节点组成的可视化流程。
  • 根据节点结果执行条件分支和重试,并在需要决策或审批时暂停运行。
  • 在界面中集中回答 Codex 提出的问题;人工审批时可结合节点输出、Diff 和产物完成审核。

Git、文件与产物

  • 查看单文件或完整 Diff、按需展开上下文,并浏览会话提交历史。
  • 上传附件作为 Codex 输入,并在后续追加需求中继续引用附件或会话产物。
  • 归档并在线预览图片、PDF、音视频和文本产物;其他格式可直接下载。
  • 关闭卡片时清理可变输出和归档产物,同时保留删除审计记录;提示中的产物引用不会复制文件。
  • 卡片关闭后异步清理经确认由 AnyCode 创建并登记的 worktree;可从会话详情重试清理失败的任务。

快速开始

前置条件

  • Docker Engine
  • Docker Compose 插件 2.20 或更高版本(使用 docker compose 命令)
  • curl
  • x86-64(linux/amd64)宿主机;当前官方 Arch Linux 基础镜像仅提供 amd64
  • 可用于 Codex 的 ChatGPT 账号或 OpenAI API key

无需克隆仓库;启动只需要 compose.yml.env.example

默认推荐使用 Docker Compose。需要直接在 Linux 宿主机运行时,请参阅 systemd 部署说明;每个 GitHub Release 都提供 amd64arm64 二进制归档,以及 Debian、Red Hat 和 Arch Linux 安装包与校验和。

1. 下载部署文件并配置环境

创建部署目录并下载必要文件:

mkdir -p anycode
cd anycode
curl -fsSL -o compose.yml https://raw.githubusercontent.com/nzlov/anycode/master/compose.yml
curl -fsSL -o .env https://raw.githubusercontent.com/nzlov/anycode/master/.env.example

编辑 .env,至少把下面的默认值替换为足够长且随机的访问密钥:

ANYCODE_ACCESS_KEY=replace-with-a-long-random-secret

不要原样使用示例值。

默认配置把 ./data 挂载为容器用户目录,把 ./workspaces 挂载到容器的 /workspaces

mkdir -p data workspaces

需要由 AnyCode 管理的项目应位于 ANYCODE_WORKSPACES_DIR 指向的宿主机目录中。进入界面后,应使用对应的容器路径(默认是 /workspaces/<项目目录>)添加项目,而不是宿主机绝对路径。

2. 拉取镜像并登录 Codex

docker compose pull
docker compose run --rm anycode codex login --device-auth
docker compose run --rm anycode codex login status

也可以通过标准输入配置 OpenAI API key:

printf '%s' "$OPENAI_API_KEY" | docker compose run --rm -T anycode codex login --with-api-key
docker compose run --rm anycode codex login status

Codex 凭据写入容器的 /home/anycode/.codex,并由 ANYCODE_HOST_DATA_DIR 对应的宿主机目录持久化。不要共享该目录。

3. 启动服务

docker compose up -d
docker compose ps

默认使用本地 Turso 数据库。要改用 Compose 内置 PostgreSQL,请在 .env 中设置非默认密码并启用 profile:

COMPOSE_PROFILES=postgres
POSTGRES_PASSWORD=replace-with-a-strong-password
DATABASE_URL=postgres://anycode:replace-with-a-strong-password@postgres:5432/anycode?sslmode=disable

然后照常运行 docker compose up -d。PostgreSQL 数据默认保存在 ./postgres-data

使用默认端口时,健康检查地址为:

curl --fail http://127.0.0.1:8080/healthz

然后打开 http://127.0.0.1:8080,输入 .env 中的 ANYCODE_ACCESS_KEY

ANYCODE_HTTP_PORT 会同时改变服务监听端口、宿主机映射端口和镜像内置的 Docker healthcheck 地址。

首次使用

  1. 首次打开且没有项目时,在自动弹出的目录选择窗口中选择 /workspaces 下的项目目录。
  2. 如需执行依赖安装等准备工作,为项目配置 worktree 初始化命令;如需流程模式,先配置并启用项目工作流。
  3. 返回概览页创建卡片,选择项目、基础分支、会话或流程模式,以及 Codex 模型、推理强度和权限。
  4. 输入需求并附加必要文件。启动后可从卡片查看实时状态、TODO、待回答问题、待审批结果和 Diff。
  5. 进入会话详情查看完整时间线、追加需求、管理产物或停止/关闭会话。

配置

部署配置以 .env.examplecompose.yml 为准。常用变量如下:

变量 默认值 用途
ANYCODE_ACCESS_KEY 无可用默认值 访问 Web 数据、GraphQL、WebSocket 和会话文件的密钥;Compose 要求显式设置。
PACMAN_MIRROR 容器启动时更新软件包前写入 pacman mirrorlist 的单个 Arch Linux 镜像地址模板。
ANYCODE_EXTRA_PACKAGES 容器启动时以 root 权限安装的、由空白分隔的 Arch Linux 官方仓库包名。
ANYCODE_INIT_SCRIPT 容器每次启动时以 root 权限执行的 shell 脚本;在安装额外软件包后、AnyCode 降权启动前运行。
ANYCODE_HTTP_PORT 8080 宿主机发布端口和容器监听端口。
ANYCODE_HOST_DATA_DIR ./data 挂载到容器 /home/anycode 的宿主机目录,用于持久化 AnyCode 数据和 Codex 凭据。
ANYCODE_DATA_DIR /home/anycode/.anycode 容器内数据库、附件、产物以及 AnyCode 创建的 worktree 目录。通常无需修改。
ANYCODE_WORKSPACES_DIR ./workspaces 挂载到容器 /workspaces 的宿主机项目目录。
CLOUDFLARED_BIN cloudflared Cloudflare 临时隧道客户端命令;官方镜像已内置。
DATABASE_URL 数据库切换入口;支持 postgres://postgresql://libsql://https:// 和本地 Turso 路径。为空时回退到 TURSO_DATABASE_URL
TURSO_DATABASE_URL /home/anycode/.anycode/anycode.turso.db 本地 Turso/libSQL 数据库路径,也可改为 libsql:// 云数据库地址。
TURSO_AUTH_TOKEN 使用远程 Turso 数据库时的认证 token。
POSTGRES_HOST_DATA_DIR ./postgres-data Compose PostgreSQL profile 的宿主机数据目录。

Turso 缓存变量可在 .env.example 中查看;产物大小限制、Playwright 和 Chromium 配置可在 compose.yml 中查看。

数据与安全

  • ANYCODE_ACCESS_KEY 是高权限访问凭据。持有者可以读取服务进程有权访问的目录,并可通过项目 worktree 初始化命令执行 shell。请使用随机密钥并只交给受信用户。
  • ANYCODE_EXTRA_PACKAGES 在入口脚本降权前通过 pacman 安装,只接受包名而不执行任意命令。仅配置受信的官方仓库包;缺少包时会更新系统并增加启动耗时,容器重建后会重新安装。
  • ANYCODE_INIT_SCRIPT 会在每次容器启动时由 /bin/sh 以 root 权限执行,失败会阻止 AnyCode 启动。它可以修改容器和已挂载目录;只配置可信脚本,并确保脚本可重复执行。安装官方仓库软件包时优先使用约束更窄的 ANYCODE_EXTRA_PACKAGES
  • 登录后,访问密钥会保存在浏览器 localStorage 中。只使用受信浏览器;使用共享设备后应在界面中退出登录,并在必要时清除该站点数据。
  • 访问密钥只提供应用鉴权,不提供传输加密。Compose 的端口映射通常会监听宿主机所有网络接口;不要把服务直接暴露到不受信网络。远程访问时应自行配置防火墙和带 TLS 的可信反向代理或私有网络。
  • 只把需要 AnyCode 访问的项目放入 ANYCODE_WORKSPACES_DIR。该挂载默认可读写,项目内命令和 Codex 进程拥有容器用户权限范围内的文件访问能力。
  • 运行容器默认使用 UID/GID 1000。workspace 必须对该用户可读写;入口脚本会调整 /home/anycode 挂载内容的所有权,因此不要把无关目录用作 ANYCODE_HOST_DATA_DIR
  • 本地数据库、附件、会话产物、活动 worktree 和 Codex 凭据都保存在 ANYCODE_HOST_DATA_DIR 下。备份时应保护整个目录,删除该目录会丢失持久化状态。
  • Compose 为容器内浏览器能力增加了 SYS_ADMIN capability,并放宽 AppArmor/seccomp。只在受信宿主机上运行,并审查挂载范围。
  • 不要手动删除、移动或重建 AnyCode 创建的会话 worktree;关闭卡片会按已记录的所有权提交异步清理,失败时应从会话详情使用重试操作。

运维与排错

查看状态和日志:

docker compose ps
docker compose logs -f anycode

拉取最新镜像并启动:

docker compose pull
docker compose up -d

停止服务:

docker compose down

docker compose down 不会删除默认的宿主机 bind mount 数据。仍应在升级或迁移前备份 ANYCODE_HOST_DATA_DIR

常见问题:

  • Compose 提示必须设置 ANYCODE_ACCESS_KEY:确认部署目录存在 .env,且该值不是空字符串。
  • 页面提示访问密钥无效:输入 .env 中的原始值,不要添加 Bearer 前缀。
  • 服务启动失败并出现 probe codex cli:先运行 docker compose run --rm anycode codex login status 检查凭据;凭据有效时,查看容器日志并重新拉取镜像,确认镜像内 Codex CLI 完整且版本兼容。
  • 会话执行时返回 Codex 认证错误:重新执行“拉取镜像并登录 Codex”中的任一登录命令,再确认 codex login status
  • 无法添加或写入项目:确认宿主机目录已挂载到 /workspaces,并允许 UID/GID 1000 读写。
  • 本地数据库或附件写入失败:确认 ANYCODE_HOST_DATA_DIR 有可用空间且允许容器用户写入。
  • 使用远程 Turso 失败:同时核对 TURSO_DATABASE_URLTURSO_AUTH_TOKEN 和容器网络连接。
  • 使用 PostgreSQL 失败:核对 DATABASE_URL、PostgreSQL profile、账号密码和 docker compose logs postgres
  • 镜像拉取失败:确认当前网络可以访问 ghcr.io,然后重新执行 docker compose pull

许可证

AnyCode 使用 MIT License

About

codex web

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages