Skip to content

gakiyukr/Codex_team_auto

Repository files navigation

Codex 推薦邀請自動化工具

一套用於研究 SSO 工作區推薦邀請流程的自動化工具,支援 OIDC SSO 系統整合,可一條命令完成全流程。

功能特色

  • 全自動流程:一條命令完成 母號建立 → 母號登入 → 發送邀請 → 子號登入 → 子號激活
  • OIDC SSO 整合:支援自訂 OIDC SSO 系統,自動註冊與登入
  • 並發處理:母號登入、邀請發送、子號登入均支援多執行緒並發
  • 多種輸入格式:支援 CSV、JSON(物件陣列)、純文字(每行一個郵箱)
  • 自動備份:邀請結果自動備份,避免覆蓋歷史記錄
  • 代理支援:所有腳本的所有 HTTP 請求均走代理,且每支腳本都預設 http://127.0.0.1:7890(不傳 --proxy 也會走代理;用 --proxy "" 可停用)

環境需求

  • Python 3.8+
  • 已部署的 OIDC SSO 系統(用於帳號註冊與登入)
  • HTTP 代理(建議)

安裝

# 建立虛擬環境
python -m venv .venv

# 啟動虛擬環境
# Windows:
.venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate

# 安裝依賴
pip install -r requirements.txt

快速開始

一條命令完成全流程

python codex_referral_flow.py \
  --auto-seeds 10 \
  --seeds-invite-code JOIN-2026 \
  --domain your-domain.com \
  --per-account 5 \
  --concurrency 10 \
  --oidc-sso-url https://your-sso.example.com \
  --oidc-sso-admin-token YOUR_ADMIN_TOKEN \
  --oidc-sso-invite-code JOIN-2026

這會自動:

  1. 在 SSO 系統建立 10 個母號
  2. 登入這 10 個母號到 OpenAI
  3. 每個母號發送 5 個邀請(共 50 個子號)
  4. 登入 50 個子號(自動在 SSO 註冊)
  5. 激活所有子號

Windows PowerShell 用法

PowerShell 使用反引號 ` 續行:

python codex_referral_flow.py `
  --auto-seeds 10 `
  --seeds-invite-code JOIN-2026 `
  --domain your-domain.com `
  --per-account 5 `
  --concurrency 10 `
  --oidc-sso-url https://your-sso.example.com `
  --oidc-sso-admin-token YOUR_ADMIN_TOKEN `
  --oidc-sso-invite-code JOIN-2026

或寫成一行:

python codex_referral_flow.py --auto-seeds 10 --seeds-invite-code JOIN-2026 --domain your-domain.com --per-account 5 --concurrency 10 --oidc-sso-url https://your-sso.example.com --oidc-sso-admin-token YOUR_ADMIN_TOKEN --oidc-sso-invite-code JOIN-2026

新用戶第一次該怎麼跑(推薦範本)

新用戶建議用「獨立輸出目錄 + 全程日誌落檔」的方式執行,這樣產物不會互相覆蓋,中斷後也能對照日誌接續。PowerShell:

cd C:\Projects\codex-referral-risk-research

# 用帶時間戳的獨立目錄,避免覆蓋舊產物
$ts = Get-Date -Format yyyyMMdd_HHmmss
$out = "runs\$ts"

python codex_referral_flow.py --auto-seeds 10 --seeds-invite-code JOIN-2026 --domain your-domain.com --per-account 5 --concurrency 10 --oidc-sso-url https://your-sso.example.com --oidc-sso-admin-token YOUR_ADMIN_TOKEN --oidc-sso-invite-code JOIN-2026 --proxy http://127.0.0.1:7890 --out-dir $out 2>&1 | Tee-Object -FilePath "$out\run.log"

說明:

  • --out-dir $out:所有產物(憑證、邀請結果、子號清單)落在這個獨立目錄,下次重跑不會覆蓋。
  • --proxy http://127.0.0.1:7890:本程式所有網絡操作都走 HTTP 代理(無驗證);代理沒開會導致全部請求失敗。
  • Tee-Object:把完整執行過程同時印到螢幕並寫入 $out\run.log,中斷後可查到斷在哪一步。
  • $out 是 PowerShell 變數,只在同一個視窗有效;換視窗請把 $out 改成實際路徑字串(例如 runs\20260618_103000)。

注意:Tee-Object 要等程式結束才會寫完整 log。若中途強制關閉視窗,log 可能不完整,但 $out 下的產物檔(憑證、邀請結果)仍會逐步落檔保留。

流程步驟說明

步驟 說明 對應腳本
0 自動建立母號(在 SSO 系統註冊) codex_referral_flow.py 內建
1 母號登入 OpenAI(透過 SSO OAuth) codex_protocol_login.py
2 母號發送邀請(生成隨機子號郵箱) codex_invitation_batch.py
3 子號登入(在 SSO 註冊 + OpenAI 建號) codex_protocol_login.py
4 子號激活(模擬 Codex 桌面端遙測) codex_activation_batch.py

參數說明

codex_referral_flow.py(全自動流程)

參數 必填 說明
--auto-seeds N 三選一 自動建立 N 個母號
--seeds FILE 三選一 指定母號 JSON 文件
--use-existing-seeds 三選一 使用已存在的母號(讀取 out-dir/auto_seeds.json
--seeds-invite-code 條件 自動建立母號時使用的 SSO 邀請碼(--auto-seeds 時必填)
--seeds-prefix 母號帳號前綴,預設 seed
--domain 邀請郵箱域名,預設 dfhdg.store
--per-account 每個母號邀請的子號數量,預設 5
--concurrency 並發數(同時執行的母號數量),預設 10
--out-dir 輸出目錄,預設 ./runs/auto
--proxy HTTP 代理,預設 http://127.0.0.1:7890
--oidc-sso-url OIDC SSO 伺服器 URL
--oidc-sso-admin-token SSO 系統的 ADMIN_TOKEN
--oidc-sso-invite-code 子號註冊時使用的 SSO 邀請碼
--skip-seeds-login 跳過母號登入(假設已登入)
--skip-invitations 跳過發送邀請(假設已發送)
--skip-activation 跳過子號激活
--dry-run 只預檢,不實際發送邀請

codex_protocol_login.py(登入腳本)

參數 說明
--email / --password 單帳號登入
--csv FILE CSV 批量登入(格式:email,password
--json FILE JSON 批量登入(支援物件陣列、字串陣列、純文字)
--out / --out-dir 輸出路徑
--concurrency N 並發數,預設 1
--retries N 失敗重試次數,預設 2
--skip-existing 跳過已存在的帳號
--proxy URL 代理 URL,預設 http://127.0.0.1:7890
--oidc-sso-url SSO 伺服器 URL
--oidc-sso-admin-token SSO ADMIN_TOKEN
--oidc-sso-invite-code SSO 邀請碼(有則走 /api/register,無則走 /api/login

codex_invitation_batch.py(邀請腳本)

參數 說明
--auth-dir 母號憑證目錄
--domain 隨機郵箱域名,預設 dfhdg.store
--per-account 每個母號邀請數量,預設 5
--concurrency 並發母號數,預設 5
--proxy 代理 URL,預設 http://127.0.0.1:7890
--out 結果輸出 JSON 路徑
--dry-run 只預檢不發送
--save-back 刷新 token 後寫回原文件

codex_activation_batch.py(激活腳本)

參數 說明
--auth-dir 子號憑證目錄
--concurrency 並發數,預設 5
--proxy 代理 URL,預設 http://127.0.0.1:7890
--save-back 刷新 token 後寫回原文件

使用情境

情境一:首次執行全流程

python codex_referral_flow.py \
  --auto-seeds 10 \
  --seeds-invite-code JOIN-2026 \
  --domain your-domain.com \
  --per-account 5 \
  --concurrency 10 \
  --oidc-sso-url https://your-sso.example.com \
  --oidc-sso-admin-token YOUR_ADMIN_TOKEN \
  --oidc-sso-invite-code JOIN-2026

情境二:邀請已發送,只需登入和激活子號

python codex_referral_flow.py \
  --use-existing-seeds \
  --domain your-domain.com \
  --per-account 5 \
  --concurrency 10 \
  --oidc-sso-url https://your-sso.example.com \
  --oidc-sso-admin-token YOUR_ADMIN_TOKEN \
  --oidc-sso-invite-code JOIN-2026 \
  --skip-seeds-login \
  --skip-invitations

情境三:使用已有的母號文件

python codex_referral_flow.py \
  --seeds my_seeds.json \
  --domain your-domain.com \
  --per-account 5 \
  --concurrency 10 \
  --oidc-sso-url https://your-sso.example.com \
  --oidc-sso-admin-token YOUR_ADMIN_TOKEN \
  --oidc-sso-invite-code JOIN-2026

情境四:只登入帳號(不發邀請)

# 母號登入(走 /api/login)
python codex_protocol_login.py \
  --json seeds.json \
  --out-dir ./seeds \
  --concurrency 10 \
  --oidc-sso-url https://your-sso.example.com \
  --oidc-sso-admin-token YOUR_ADMIN_TOKEN

# 子號登入(走 /api/register,帶邀請碼)
python codex_protocol_login.py \
  --json invitees.json \
  --out-dir ./invitees \
  --concurrency 10 \
  --oidc-sso-url https://your-sso.example.com \
  --oidc-sso-admin-token YOUR_ADMIN_TOKEN \
  --oidc-sso-invite-code JOIN-2026

中斷後如何續跑(防止流程斷掉無法繼續)

全流程分四步,每步完成的產物都會落在 --out-dir 目錄。如果中途斷掉(網絡、代理、Ctrl+C 等),不需要從頭重來,用同一個 --out-dir 加上對應的 --skip-* 跳過已完成的步驟即可接續。

判斷斷在哪一步,看 --out-dir 下已經產生了哪些檔:

已存在的產物 代表已完成 續跑時加的參數
auto_seeds.json 步驟 0 建母號 --use-existing-seeds
seeds/*.json 步驟 1 母號登入 --skip-seeds-login
invite_results.json 步驟 2 發送邀請 --skip-invitations
invitees/*.json 步驟 3 子號登入 (激活前已完成,可直接補激活)

續跑一定要帶上原本那次的 --out-dir,否則讀不到先前的產物。PowerShell 同一視窗可直接用 $out 變數;換了視窗請填實際路徑字串。

續跑情境 A:斷在母號登入後(已有 auto_seeds.json + seeds/

跳過建號,從母號登入往後接續:

python codex_referral_flow.py --use-existing-seeds --seeds-invite-code JOIN-2026 --domain your-domain.com --per-account 5 --concurrency 10 --oidc-sso-url https://your-sso.example.com --oidc-sso-admin-token YOUR_ADMIN_TOKEN --oidc-sso-invite-code JOIN-2026 --proxy http://127.0.0.1:7890 --out-dir $out --skip-seeds-login 2>&1 | Tee-Object -FilePath "$out\run_resume.log" -Append

續跑情境 B:邀請已發出(已有 invite_results.json

只補「子號登入 + 激活」,不重發邀請:

python codex_referral_flow.py --use-existing-seeds --domain your-domain.com --concurrency 10 --oidc-sso-url https://your-sso.example.com --oidc-sso-admin-token YOUR_ADMIN_TOKEN --oidc-sso-invite-code JOIN-2026 --proxy http://127.0.0.1:7890 --out-dir $out --skip-seeds-login --skip-invitations 2>&1 | Tee-Object -FilePath "$out\run_resume.log" -Append

續跑情境 C:只剩激活(子號 token 已在 invitees/

直接單獨跑激活腳本,最省事:

python codex_activation_batch.py --auth-dir $out\invitees --concurrency 10 --save-back --proxy http://127.0.0.1:7890 2>&1 | Tee-Object -FilePath "$out\run_activate.log" -Append

已建好的子號要重新登入 + 激活

如果子號已經在 OpenAI / SSO 系統建好了(例如先前因 bug 中斷),只需重新拿 token 再激活,登入時不要帶 --oidc-sso-invite-code,這樣會走 /api/login(登入既有帳號),而不是 /api/register(重複註冊會失敗):

# 第 1 步:重新登入拿 token(走 /api/login)
python codex_protocol_login.py --json $out\invitees.txt --out-dir $out\invitees --concurrency 10 --oidc-sso-url https://your-sso.example.com --oidc-sso-admin-token YOUR_ADMIN_TOKEN --proxy http://127.0.0.1:7890

# 第 2 步:激活
python codex_activation_batch.py --auth-dir $out\invitees --concurrency 10 --save-back --proxy http://127.0.0.1:7890

輸入文件格式

JSON 格式(推薦)

字串陣列(只有郵箱,密碼為空):

["alice@example.com", "bob@example.com", "charlie@example.com"]

物件陣列(帶密碼):

[
  {"email": "alice@example.com", "password": "optional"},
  {"email": "bob@example.com", "password": "optional"}
]

純文字(每行一個郵箱,.txt.json 均可):

alice@example.com
bob@example.com
charlie@example.com

CSV 格式

alice@example.com,password
bob@example.com,password

SSO 系統整合

本工具透過 OIDC 協議與自訂 SSO 系統整合:

  • 母號登入:呼叫 SSO 的 /api/login,帳號必須已存在於 SSO 系統
  • 子號登入:呼叫 SSO 的 /api/register(帶邀請碼),自動在 SSO 建立帳號
  • 判斷邏輯:有 --oidc-sso-invite-code 參數時走 /api/register,無則走 /api/login

SSO 系統要求

你的 SSO 系統需要提供以下 API:

  • POST /api/login — 登入已有帳號
  • POST /api/register — 註冊新帳號(需要邀請碼)

所有 API 需要 Authorization: Bearer <ADMIN_TOKEN> 認證。

輸出目錄結構

runs/auto/
├── auto_seeds.json              # 自動建立的母號帳號列表
├── seeds/                       # 母號憑證(auth.json)
│   ├── seed_abc12345.json
│   └── seed_def67890.json
├── invite_results.json          # 最新邀請結果
├── invite_results_20260115_*.json  # 歷史邀請結果備份
├── invitees.txt                 # 被邀請的郵箱列表
└── invitees/                    # 子號憑證(auth.json)
    ├── sfvm3ta6b0lf99zhoapf.json
    └── 3y1or48la0x07sykisa3.json

常見問題

Q: --per-account--concurrency 分別代表什麼?

  • --per-account:每個母號邀請多少個子號
  • --concurrency:同時有多少個母號並發執行

例如 10 個母號、--per-account 5--concurrency 10,會同時用 10 個母號各邀請 5 個子號,總共 50 個子號。

Q: 母號和子號的邀請碼可以不同嗎?

可以。--seeds-invite-code 用於建立母號,--oidc-sso-invite-code 用於註冊子號,兩者可以不同。

Q: 邀請結果會被覆蓋嗎?

不會。每次發送邀請前,如果 invite_results.json 已存在,會自動備份為 invite_results_YYYYMMDD_HHMMSS.json

Q: 代理一定要設定嗎?

所有腳本都預設走 http://127.0.0.1:7890(無驗證),不傳 --proxy 也會走代理,所以執行前請確認本機代理已開啟,否則所有網絡請求都會失敗。如果你的代理位址不同,用 --proxy 指定;如果不需要代理,用 --proxy "" 停用。

Q: SSO 系統需要怎麼配置?

你的 SSO 系統需要是 OIDC 提供者,並在 OpenAI 後台配置為 Custom OIDC。SSO 的 ACCOUNT_DOMAIN 必須與 --domain 參數一致。

Q: 流程跑到一半中斷了,要從頭重來嗎?

不用。每一步的產物都落在 --out-dir 目錄。看目錄下已經有哪些檔,判斷斷在哪一步,再用同一個 --out-dir 加對應的 --skip-* 接續即可。詳見〈中斷後如何續跑〉章節。

Q: 怎麼保留完整的執行記錄?

程式本身只把日誌印到螢幕,不自動寫檔。執行時在命令尾端加 2>&1 | Tee-Object -FilePath "$out\run.log"(PowerShell),即可同時顯示在螢幕並寫入 log 檔,方便中斷後排查斷點。

Q: 子號已經建好了,重跑卻一直登入失敗?

已存在的帳號要走 /api/login,不能再走 /api/register。重新登入時移除 --oidc-sso-invite-code 參數即可(有邀請碼才走註冊)。詳見〈已建好的子號要重新登入 + 激活〉。

各腳本說明

腳本 用途
codex_referral_flow.py 全自動流程(一條命令搞定)
codex_protocol_login.py 純 HTTP 協議登入(支援 SSO)
codex_invitation_batch.py 批量並發發送邀請
codex_invitation_helper.py 單帳號邀請助手
codex_activation_batch.py 批量並發激活子號
codex_activation_helper.py 單帳號激活模擬器
codex_sso_login.py 瀏覽器自動化登入(備用)
sentinel.py Sentinel token 生成

資料安全

運行時資料已從 git 排除,請勿提交以下內容:

  • 帳號憑證文件(auth.json
  • access_token / refresh_token / id_token
  • 帳號 ID
  • 郵箱密碼 CSV 文件
  • 邀請結果
  • 本地日誌

.gitignore 已封鎖:accounts/runs/*.csv*auth*.json.venv/*.log

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors