Autoteam F Chatgpt Team Rotation logo

Autoteam F Chatgpt Team Rotation

Organization
reason-machines
autoteam-f-chatgpt-team-rotation

AutoTeam-F is a ChatGPT Team account rotation and authentication sync tool with batch free account generation, OAuth management, and a Web dashboard.

Overview

Publisherreason-machines
Repositorytrending-skills
Skill nameautoteam-f-chatgpt-team-rotation
Stars
80
Forks
15
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by reason-machines on GitHub. Read the source before you install it.

Installation

Install the Autoteam F Chatgpt Team Rotation AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/reason-machines/trending-skills.git /tmp/trending-skills
mkdir -p .claude/skills
cp -r /tmp/trending-skills/skills/autoteam-f-chatgpt-team-rotation .claude/skills/autoteam-f-chatgpt-team-rotation
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Autoteam F Chatgpt Team Rotation in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Autoteam F Chatgpt Team Rotation on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Autoteam F Chatgpt Team Rotation is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

AutoTeam-F ChatGPT Team Rotation & Free Account Generation

Skill by ara.so — Daily 2026 Skills collection.

AutoTeam-F is a Python-based tool for automating ChatGPT Team account rotation, batch free Personal account generation, and Codex OAuth authentication sync to CLIProxyAPI (CPA). It uses Playwright for browser automation, FastAPI for the web backend, and Vue 3 for the dashboard.

F = Fix + Free: it fixes blocking bugs from the upstream cnitlrt/AutoTeam and adds batch free-account production.


Installation

Prerequisites

Linux

bash
git clone https://github.com/ZRainbow1275/AutoTeam-F.git
cd AutoTeam-F
bash setup.sh
# setup.sh runs: uv sync && uv run playwright install chromium

Windows / macOS

bash
git clone https://github.com/ZRainbow1275/AutoTeam-F.git
cd AutoTeam-F
uv sync
uv run playwright install chromium

Docker (recommended for production)

bash
git clone https://github.com/ZRainbow1275/AutoTeam-F.git
cd AutoTeam-F
mkdir -p data && cp .env.example data/.env
# Edit data/.env with your configuration
docker compose up -d

Configuration

Create a .env file (or data/.env for Docker). First-run wizard auto-generates it:

bash
uv run autoteam api  # triggers guided setup on first run

Key .env Variables

dotenv
# Mail provider: cf_temp_email (default/recommended) or maillab
MAIL_PROVIDER=cf_temp_email
MAIL_BASE_URL=https://your-cf-temp-email.workers.dev

# If using maillab (upstream-compatible legacy)
# MAIL_PROVIDER=maillab
# MAIL_BASE_URL=https://your-cloudmail-instance.com

# OpenAI admin/master account
OPENAI_EMAIL=admin@example.com
OPENAI_PASSWORD=your_password

# CLIProxyAPI (CPA) sync target
CPA_BASE_URL=https://your-cpa-instance.com
CPA_API_KEY=$CPA_API_KEY

# AutoTeam-F API protection
API_KEY=$AUTOTEAM_API_KEY

# Team workspace settings
TEAM_WORKSPACE_ID=your_workspace_id
TARGET_MEMBER_COUNT=5

# Reconcile behavior
RECONCILE_KICK_ORPHAN=false
RECONCILE_KICK_GHOST=false

Mail Provider Notes

  • cf_temp_email (default): Cloudflare Workers-based, widely tested, good OpenAI domain allowlist compatibility
  • maillab: Legacy maillab/cloud-mail backend; must be set explicitly — no longer the default
  • On startup, AutoTeam-F fingerprint-sniffs the base URL and warns if provider/URL mismatch is detected (prevents silent "login success → create mailbox 401" failures)

CLI Commands

bash
# Start Web dashboard + API (port 8787)
uv run autoteam api

# Smart rotation — fill to N active accounts (default: 5)
uv run autoteam rotate [N]

# View account status
uv run autoteam status

# Check quotas (active accounts)
uv run autoteam check

# Check quotas including standby pool (rate-limited, 24h dedup)
uv run autoteam check --include-standby

# Add a new account via automated registration
uv run autoteam add

# Add account via manual OAuth paste
uv run autoteam manual-add

# Fill Team seats to target count
uv run autoteam fill [N]

# Clean up excess Team members
uv run autoteam cleanup [N]

# Sync local auth to CPA
uv run autoteam sync

# Pull auth from CPA to local
uv run autoteam pull-cpa

# Admin login (master account)
uv run autoteam admin-login

# Reconcile workspace vs local — find ghost/orphan/mismatched accounts
uv run autoteam reconcile
uv run autoteam reconcile --dry-run

Web Dashboard

Access at http://localhost:8787 after starting with uv run autoteam api.

PageKey Features
📊 DashboardAccount stats, status table, login/kick/delete/bulk-delete
👥 Team MembersAll workspace members including external
🔁 Pool OperationsRotate / Check / Fill / Add / Generate Free Accounts / Cleanup
🔄 Sync CenterSync accounts, push to CPA, pull from CPA
🔐 OAuth LoginGenerate auth links; auto localhost callback + manual paste fallback
📜 Task HistoryBackground task status + real-time stop button
📋 LogsLive log viewer
⚙️ SettingsAdmin login, master Codex sync, patrol config

REST API

All endpoints require Authorization: Bearer $API_KEY header.

Account Management

bash
# List all accounts
curl -H "Authorization: Bearer $API_KEY" http://localhost:8787/api/accounts

# Trigger rotation (fill to 5 active)
curl -X POST -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"target": 5}' \
  http://localhost:8787/api/tasks/rotate

# Generate free Personal accounts (leave_workspace=true)
curl -X POST -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"target": 3, "leave_workspace": true}' \
  http://localhost:8787/api/tasks/fill

# Check quotas including standby
curl -X POST -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"include_standby": true}' \
  http://localhost:8787/api/tasks/check

# Sync to CPA
curl -X POST -H "Authorization: Bearer $API_KEY" \
  http://localhost:8787/api/tasks/sync

# Pull from CPA
curl -X POST -H "Authorization: Bearer $API_KEY" \
  http://localhost:8787/api/tasks/pull-cpa

Diagnostics & Repair

bash
# Diagnose 401 issues (checks 4 API endpoints)
curl -H "Authorization: Bearer $API_KEY" \
  http://localhost:8787/api/admin/diagnose | jq

# Hot-fix mismatched account_id without re-login
curl -X POST -H "Authorization: Bearer $API_KEY" \
  http://localhost:8787/api/admin/fix-account-id | jq

# Reconcile workspace vs local accounts (dry run)
curl -X POST -H "Authorization: Bearer $API_KEY" \
  "http://localhost:8787/api/admin/reconcile?dry_run=1" | jq

# Stop a running task
curl -X POST -H "Authorization: Bearer $API_KEY" \
  http://localhost:8787/api/tasks/{task_id}/stop

OAuth Flow

bash
# Get OAuth URL for an account
curl -H "Authorization: Bearer $API_KEY" \
  http://localhost:8787/api/oauth/url

# Submit manually-obtained OAuth callback URL
curl -X POST -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"callback_url": "http://localhost:..."}' \
  http://localhost:8787/api/oauth/manual

Key Workflows

1. Batch Generate Free Personal Accounts

The "F" in AutoTeam-F's key feature: register accounts → master invites to Team → accounts leave workspace → Personal OAuth stored.

Via Web: Dashboard → "账号池操作" → "生成免费号" → set count → start.

Via API:

bash
curl -X POST -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"target": 5, "leave_workspace": true}' \
  http://localhost:8787/api/tasks/fill

Constraints: baseline + new_batch ≤ 4 (Team seat limit). AutoTeam-F auto-shrinks the batch if exceeded.

2. Smart Rotation

Accounts with exhausted Codex quota are moved to standby. When standby accounts recover quota, they're promoted back to active before registering new ones.

bash
uv run autoteam rotate 5
# Equivalent API:
curl -X POST -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"target": 5}' \
  http://localhost:8787/api/tasks/rotate

3. Fix 401 "Must be part of this workspace"

bash
API_KEY="$(grep '^API_KEY' .env | cut -d= -f2)"

# Step 1: Diagnose
curl -s -H "Authorization: Bearer $API_KEY" \
  http://localhost:8787/api/admin/diagnose | jq

# Step 2: Hot-fix account_id (no re-login needed)
curl -s -X POST -H "Authorization: Bearer $API_KEY" \
  http://localhost:8787/api/admin/fix-account-id | jq

4. Reconcile Ghost/Orphan Accounts

Identifies: orphaned seats (workspace has seat, no local auth), mismatched accounts, exhausted-but-not-abandoned, ghost accounts.

bash
# Safe dry run first
uv run autoteam reconcile --dry-run

# Apply fixes (behavior controlled by RECONCILE_KICK_ORPHAN / RECONCILE_KICK_GHOST in .env)
uv run autoteam reconcile

5. CPA Bidirectional Sync

bash
# Push local active accounts → CPA
uv run autoteam sync

# Pull CPA accounts → local (import external auth)
uv run autoteam pull-cpa

Account State Machine

registered → active → standby → (recover) → active
                   ↘ (exhausted, no recovery) → abandoned
                   
standby: quota exhausted, waiting for recovery
active: has valid Codex quota
auth_invalid: 401/403 on check → needs re-OAuth
network_error: transient DNS/timeout/5xx → retried next cycle (not marked invalid)

Failure log: Registration failures are persisted to register_failures.json with categories: phone_required, duplicate, kick_failed, oauth_failed.


Python Integration Examples

Check Account Status Programmatically

python
import httpx
import os

API_KEY = os.environ["AUTOTEAM_API_KEY"]
BASE_URL = "http://localhost:8787"

headers = {"Authorization": f"Bearer {API_KEY}"}

with httpx.Client() as client:
    # Get all accounts
    accounts = client.get(f"{BASE_URL}/api/accounts", headers=headers).json()
    
    active = [a for a in accounts if a["status"] == "active"]
    standby = [a for a in accounts if a["status"] == "standby"]
    
    print(f"Active: {len(active)}, Standby: {len(standby)}")

    # Trigger rotation if below threshold
    if len(active) < 3:
        resp = client.post(
            f"{BASE_URL}/api/tasks/rotate",
            headers=headers,
            json={"target": 5}
        )
        task = resp.json()
        print(f"Rotation task started: {task['task_id']}")

Poll Task Until Complete

python
import httpx
import time
import os

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

def run_task_and_wait(endpoint: str, payload: dict, timeout: int = 600) -> dict:
    with httpx.Client(timeout=30) as client:
        resp = client.post(
            f"{BASE_URL}/api/tasks/{endpoint}",
            headers=headers,
            json=payload
        )
        resp.raise_for_status()
        task_id = resp.json()["task_id"]
        
        deadline = time.time() + timeout
        while time.time() < deadline:
            status = client.get(
                f"{BASE_URL}/api/tasks/{task_id}",
                headers=headers
            ).json()
            
            if status["state"] in ("completed", "failed", "stopped"):
                return status
            
            time.sleep(5)
        
        raise TimeoutError(f"Task {task_id} did not complete in {timeout}s")

# Generate 3 free personal accounts
result = run_task_and_wait("fill", {"target": 3, "leave_workspace": True})
print(f"Task result: {result['state']}, accounts: {result.get('result')}")

Export Codex CLI Auth

python
import httpx
import json
import os

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

with httpx.Client() as client:
    resp = client.get(f"{BASE_URL}/api/auth/export", headers=headers)
    auth_data = resp.json()

# Write Codex CLI format
with open(os.path.expanduser("~/.codex/auth.json"), "w") as f:
    json.dump(auth_data, f, indent=2)

print("Auth exported to ~/.codex/auth.json")

Docker Compose Reference

yaml
# docker-compose.yml (from repo)
services:
  autoteam:
    build: .
    ports:
      - "8787:8787"
    volumes:
      - ./data:/app/data
    environment:
      - DATA_DIR=/app/data
    restart: unless-stopped
bash
# Start
docker compose up -d

# View logs
docker compose logs -f autoteam

# Run CLI commands inside container
docker compose exec autoteam uv run autoteam status
docker compose exec autoteam uv run autoteam reconcile --dry-run

# Restart after config change
docker compose restart autoteam

Linux host access: If CPA or mail service runs on the host, use host.docker.internal (Docker Desktop) or the host's bridge IP (172.17.0.1 typically) instead of localhost in .env.


Troubleshooting

401 "Must be part of this workspace"

Most common cause: account_id stored locally doesn't match OpenAI's records.

bash
API_KEY="$(grep '^API_KEY' data/.env | cut -d= -f2)"
curl -s -H "Authorization: Bearer $API_KEY" http://localhost:8787/api/admin/diagnose | jq
curl -s -X POST -H "Authorization: Bearer $API_KEY" http://localhost:8787/api/admin/fix-account-id | jq

Mail provider mismatch warning on startup

WARNING: MAIL_PROVIDER=cf_temp_email but base_url fingerprint suggests maillab protocol

Fix: ensure MAIL_PROVIDER in .env matches your actual deployed mail service. cf_temp_email uses Cloudflare Workers API; maillab uses the cloud-mail REST API.

Registration fails with phone_required

OpenAI began requiring phone verification for some IPs. Use a residential proxy. Check register_failures.json for categorized failure counts.

Playwright times out during registration

bash
# Increase timeout — edit .env
PLAYWRIGHT_TIMEOUT=120000  # ms, default 60000

Common on high-latency VPS. Consider residential proxy.

Standby accounts never recover

AutoTeam-F uses 24h dedup for standby quota checks to avoid rate-limits. Force a check:

bash
curl -X POST -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"include_standby": true}' \
  http://localhost:8787/api/tasks/check

Personal accounts invalidated after master account ban

This is a known limitation — personal accounts derived from a banned master account (via Team invite → leave → personal OAuth) will also become invalid. The accounts must be regenerated from a new master account.

Task stop is soft, not immediate

Clicking "Stop Task" completes the current account registration (~2 min) before exiting. This is by design to avoid half-registered accounts. The task will show stopping then stopped.

autoteam fill batch auto-shrinks

Team seats are capped: baseline + new_batch ≤ 4. AutoTeam-F auto-reduces batch size. To generate more, run multiple fill cycles after previous accounts have left the workspace.


Project Structure

AutoTeam-F/
├── autoteam/           # Core Python package
│   ├── api/            # FastAPI routes
│   ├── core/           # Account manager, rotation logic
│   ├── playwright_/    # Browser automation (register, OAuth, Codex)
│   ├── mail/           # cf_temp_email + maillab backends
│   └── cli.py          # CLI entry points
├── frontend/           # Vue 3 dashboard source
├── data/               # Runtime data (gitignored)
│   ├── accounts.json   # Account pool state
│   ├── register_failures.json  # Failure analytics
│   └── .env            # Configuration
├── docs/               # Extended documentation
├── docker-compose.yml
└── setup.sh

Links

Frequently asked questions

What does the Autoteam F Chatgpt Team Rotation AI skill do?

AutoTeam-F is a ChatGPT Team account rotation and authentication sync tool with batch free account generation, OAuth management, and a Web dashboard.

Why use Autoteam F Chatgpt Team Rotation on TypingMind?

Because you install it once and use it with any model. Autoteam F Chatgpt Team Rotation is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Autoteam F Chatgpt Team Rotation in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/reason-machines/trending-skills/tree/main/skills/autoteam-f-chatgpt-team-rotation. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Autoteam F Chatgpt Team Rotation?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Autoteam F Chatgpt Team Rotation?

As many as you like. As long as a model supports skills, you can use Autoteam F Chatgpt Team Rotation with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Autoteam F Chatgpt Team Rotation AI skill free?

It is published on GitHub by reason-machines. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇