# Autoteam Chatgpt Rotation

> AutoTeam ChatGPT Team账号自动轮转管理工具，支持Codex额度监控、自动换号、CPA认证同步

- Skill: `aradotso-trending-skills/autoteam-chatgpt-rotation` (Agent Skill)
- Install (CLI): `npx skillmds@latest add aradotso-trending-skills/autoteam-chatgpt-rotation`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aradotso-trending-skills/autoteam-chatgpt-rotation/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: aradotso (https://skillmd.com/u/aradotso-trending-skills)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/aradotso-trending-skills/autoteam-chatgpt-rotation

---


# AutoTeam — ChatGPT Team账号自动轮转管理

> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.

AutoTeam 是一个自动化工具，用于管理 ChatGPT Team 账号的轮转：自动注册账号、获取 Codex OAuth 认证、监控额度余量、在额度低时智能切换账号，并将认证文件同步到 [CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)。

## 安装

### 前置条件

- Python 3.10+
- [uv](https://docs.astral.sh/uv/) 包管理器
- Chromium（由 Playwright 管理）

### 一键安装

```bash
git clone https://github.com/cnitlrt/AutoTeam.git
cd AutoTeam
bash setup.sh
# 等价于: uv sync && uv run playwright install chromium
```

### 手动安装

```bash
uv sync
uv run playwright install chromium
cp .env.example data/.env
# 编辑 data/.env 填入必要配置
```

## 配置

### 环境变量（`data/.env`）

```env
# 临时邮箱服务（CloudMail）
CLOUDMAIL_API_KEY=$CLOUDMAIL_API_KEY
CLOUDMAIL_DOMAIN=example.com

# CPA（CLIProxyAPI）连接
CPA_BASE_URL=http://your-cpa-host:port
CPA_API_KEY=$CPA_API_KEY

# AutoTeam API 鉴权
AUTOTEAM_API_KEY=$AUTOTEAM_API_KEY

# ChatGPT Team 管理员账号
TEAM_ADMIN_EMAIL=admin@example.com
TEAM_ADMIN_PASSWORD=$TEAM_ADMIN_PASSWORD

# 额度阈值（低于此值触发轮转）
QUOTA_THRESHOLD=100

# Team 目标成员数
TEAM_SIZE=5

# Web 面板端口
PORT=8787
```

### 首次启动配置向导

```bash
uv run autoteam api
# 首次启动自动引导配置 CloudMail、CPA、API Key 并验证连通性
```

## CLI 命令

```bash
# 启动 Web 面板 + HTTP API（推荐，默认端口 8787）
uv run autoteam api

# 智能轮转，补满到 N 个账号（默认 5）
uv run autoteam rotate
uv run autoteam rotate 8

# 查看所有账号状态和额度
uv run autoteam status

# 检查所有账号额度
uv run autoteam check

# 手动添加一个新账号
uv run autoteam add

# 补满成员到目标数量
uv run autoteam fill
uv run autoteam fill 10

# 清理多余成员
uv run autoteam cleanup
uv run autoteam cleanup 5

# 同步认证文件到 CPA
uv run autoteam sync

# 管理员登录（刷新 admin session）
uv run autoteam admin-login
```

## Docker 部署

### 快速启动

```bash
git clone https://github.com/cnitlrt/AutoTeam.git && cd AutoTeam
mkdir -p data && cp .env.example data/.env
# 编辑 data/.env
docker compose up -d
```

### `docker-compose.yml` 结构

```yaml
services:
  autoteam:
    build: .
    ports:
      - "8787:8787"
    volumes:
      - ./data:/app/data   # 持久化配置、数据库、认证文件
    environment:
      - TZ=Asia/Shanghai
    restart: unless-stopped
```

### Docker 常用操作

```bash
# 查看实时日志
docker compose logs -f autoteam

# 重启服务
docker compose restart autoteam

# 进入容器执行 CLI
docker compose exec autoteam uv run autoteam status

# 停止服务
docker compose down
```

## HTTP API

所有 API 请求需携带鉴权头：

```
Authorization: Bearer $AUTOTEAM_API_KEY
```

### 核心端点

```bash
# 获取账号状态列表
GET /api/accounts

# 触发轮转任务
POST /api/rotate
Content-Type: application/json
{"target": 5}

# 检查额度
POST /api/check

# 补满成员
POST /api/fill
{"target": 5}

# 清理多余成员
POST /api/cleanup
{"keep": 5}

# 同步认证到 CPA
POST /api/sync

# 获取任务历史
GET /api/tasks

# 获取实时日志
GET /api/logs

# 获取/更新巡检配置
GET /api/patrol/config
PUT /api/patrol/config
Content-Type: application/json
{"enabled": true, "interval_minutes": 30, "threshold": 100}
```

### Python 调用示例

```python
import httpx
import os

BASE_URL = "http://localhost:8787"
HEADERS = {"Authorization": f"Bearer {os.environ['AUTOTEAM_API_KEY']}"}

# 获取账号状态
with httpx.Client() as client:
    resp = client.get(f"{BASE_URL}/api/accounts", headers=HEADERS)
    accounts = resp.json()
    for acc in accounts:
        print(f"{acc['email']}: quota={acc['quota']}, status={acc['status']}")

# 触发轮转
with httpx.Client(timeout=300) as client:
    resp = client.post(
        f"{BASE_URL}/api/rotate",
        headers=HEADERS,
        json={"target": 5}
    )
    task = resp.json()
    print(f"Task ID: {task['task_id']}, Status: {task['status']}")
```

## Web 管理面板

访问 `http://localhost:8787` 后查看以下页面：

| 页面 | 功能 |
|------|------|
| 📊 仪表盘 | 账号统计、状态表格、登录/移出/删除/同步操作 |
| 👥 Team 成员 | 全部 Team 成员（含外部成员）列表 |
| ⚡ 操作 & 任务 | 一键轮转/检查/补满/清理/同步 + 任务历史 |
| 📋 日志 | 实时日志查看器 |
| ⚙️ 设置 | 管理员登录 + 主号 Codex 同步 + 巡检配置 |

## 工作原理

### 轮转流程

```
检查额度
  └─ 低于阈值?
       ├─ 否 → 退出
       └─ 是 → 移出当前账号
                └─ 有备用账号?
                     ├─ 是 → 验证额度 → 加入 Team → 同步 CPA
                     └─ 否 → 注册新账号
                              └─ 临时邮箱 → ChatGPT 注册
                                   └─ 验证码 → Codex OAuth
                                        └─ 加入 Team → 同步 CPA
```

### 账号状态机

```
new → registering → registered → codex_auth → active → low_quota → removed
                        ↓                                              ↑
                      failed                                      (可复用)
```

## 常见模式

### 自动化巡检脚本

```python
import httpx
import os
import time

BASE_URL = os.environ.get("AUTOTEAM_BASE_URL", "http://localhost:8787")
HEADERS = {"Authorization": f"Bearer {os.environ['AUTOTEAM_API_KEY']}"}

def check_and_rotate():
    """检查额度，必要时触发轮转"""
    with httpx.Client(timeout=60) as client:
        # 先检查额度
        check_resp = client.post(f"{BASE_URL}/api/check", headers=HEADERS)
        check_resp.raise_for_status()
        
        # 获取账号状态
        accounts_resp = client.get(f"{BASE_URL}/api/accounts", headers=HEADERS)
        accounts = accounts_resp.json()
        
        low_quota = [a for a in accounts if a.get("quota", 999) < 100 and a["status"] == "active"]
        
        if low_quota:
            print(f"检测到 {len(low_quota)} 个低额度账号，触发轮转...")
            rotate_resp = client.post(
                f"{BASE_URL}/api/rotate",
                headers=HEADERS,
                json={"target": 5},
                timeout=300
            )
            print(f"轮转结果: {rotate_resp.json()}")
        else:
            print("所有账号额度正常")

if __name__ == "__main__":
    check_and_rotate()
```

### 配置巡检（通过 API）

```python
import httpx
import os

BASE_URL = "http://localhost:8787"
HEADERS = {"Authorization": f"Bearer {os.environ['AUTOTEAM_API_KEY']}"}

# 开启自动巡检，每 30 分钟检查一次，额度低于 100 触发轮转
with httpx.Client() as client:
    resp = client.put(
        f"{BASE_URL}/api/patrol/config",
        headers=HEADERS,
        json={
            "enabled": True,
            "interval_minutes": 30,
            "threshold": 100,
            "target_size": 5
        }
    )
    print(resp.json())
```

### 批量同步认证文件

```python
import httpx
import os

BASE_URL = "http://localhost:8787"
HEADERS = {"Authorization": f"Bearer {os.environ['AUTOTEAM_API_KEY']}"}

def sync_active_accounts():
    """只同步 active 账号的认证文件到 CPA"""
    with httpx.Client(timeout=120) as client:
        resp = client.post(f"{BASE_URL}/api/sync", headers=HEADERS)
        result = resp.json()
        print(f"同步结果: 成功={result.get('synced', 0)}, 失败={result.get('failed', 0)}")
        return result

sync_active_accounts()
```

## 故障排查

### 注册失败 / 验证码超时

```bash
# 问题：验证码有效期短，网络延迟导致失败
# 解决：使用延迟低的代理，或住宅代理
# 配置代理（在 .env 中）
HTTP_PROXY=http://user:pass@proxy-host:port
HTTPS_PROXY=http://user:pass@proxy-host:port
```

### Playwright 浏览器问题

```bash
# 重新安装 Chromium
uv run playwright install chromium

# Docker 中确认浏览器依赖
docker compose exec autoteam uv run playwright install-deps chromium
```

### CPA 同步失败

```bash
# 验证 CPA 连接
curl -H "Authorization: Bearer $CPA_API_KEY" $CPA_BASE_URL/health

# 检查 AutoTeam 日志
uv run autoteam api  # 查看 Web 面板日志页
# 或
docker compose logs -f autoteam | grep "sync"
```

### 账号被封 / IP 被标记

```bash
# 症状：注册成功率低，频繁出现 Cloudflare 挑战
# 解决方案：
# 1. 使用住宅代理（非 VPS IP）
# 2. 降低注册频率，在 .env 中增加延迟
REGISTER_DELAY_SECONDS=30

# 3. 减少并发（AutoTeam 同时只允许一个 Playwright 操作）
```

### 查看详细日志

```bash
# CLI 模式下增加详细输出
uv run autoteam rotate --verbose

# Docker 中查看完整日志
docker compose logs --tail=200 autoteam

# Web 面板实时日志
# 访问 http://localhost:8787 → 日志页面
```

### 数据库重置

```bash
# 清除本地数据（保留配置）
rm data/autoteam.db

# 重新启动后会自动初始化
uv run autoteam api
```

## 项目结构

```
AutoTeam/
├── data/               # 持久化数据（.env、数据库、认证文件）
│   ├── .env
│   └── autoteam.db
├── docs/               # 详细文档
│   ├── getting-started.md
│   ├── configuration.md
│   ├── docker.md
│   ├── api.md
│   ├── architecture.md
│   └── troubleshooting.md
├── src/autoteam/       # 源码
│   ├── cli.py          # CLI 入口
│   ├── api.py          # FastAPI 应用
│   ├── rotator.py      # 轮转核心逻辑
│   ├── browser.py      # Playwright 自动化
│   ├── quota.py        # 额度检查
│   └── sync.py         # CPA 同步
├── frontend/           # Vue 3 Web 面板
├── docker-compose.yml
├── setup.sh
└── pyproject.toml
```

## 重要限制

- **IP 风险**：VPS IP 容易被 OpenAI/Cloudflare 标记，强烈建议使用住宅代理
- **并发限制**：同一时间只允许一个 Playwright 操作，避免竞态
- **服务条款**：使用本工具可能违反 OpenAI 服务条款，风险自担
- **验证码时效**：OpenAI 验证码有效期极短，高延迟网络下成功率低

