codex-console
```markdown
by adisinghstudent · published 2026-03-22
$ claw add gh:adisinghstudent/adisinghstudent-codex-console-openai-registration---
name: codex-console-openai-registration
description: Skill for using codex-console, an integrated console for automated OpenAI account registration, login, token retrieval, batch processing, and data export with Web UI management.
triggers:
- "set up codex-console"
- "automate OpenAI account registration"
- "batch register OpenAI accounts"
- "run codex-console web UI"
- "configure codex console database"
- "package codex-console executable"
- "fix OpenAI registration flow"
- "deploy codex-console with docker"
---
# codex-console
> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.
codex-console is an enhanced, actively-maintained fork of [cnlimiter/codex-manager](https://github.com/cnlimiter/codex-manager). It provides a Web UI and CLI for automated OpenAI account registration, login, token retrieval, batch task management, log viewing, and data export. Key fixes include Sentinel POW solving, split register/login flows, deduplication of verification code sending, and improved page-state detection.
---
## Installation
### Requirements
- Python 3.10+
- `uv` (recommended) or `pip`
### Clone and Install
git clone https://github.com/dou-jiang/codex-console.git
cd codex-console
# Using uv (recommended)
uv sync
# Or using pip
pip install -r requirements.txt
### Environment Configuration
cp .env.example .env
# Edit .env as needed
Key environment variables:
| Variable | Description | Default |
|---|---|---|
| `APP_HOST` | Listen host | `0.0.0.0` |
| `APP_PORT` | Listen port | `8000` |
| `APP_ACCESS_PASSWORD` | Web UI access password | `admin123` |
| `APP_DATABASE_URL` | Database connection string | `data/database.db` |
Priority order: `CLI args > .env variables > DB settings > defaults`
---
## Starting the Web UI
# Default (127.0.0.1:8000)
python webui.py
# Custom host and port
python webui.py --host 0.0.0.0 --port 8080
# With access password
python webui.py --access-password mypassword
# Debug mode (hot reload)
python webui.py --debug
# Combined
python webui.py --host 0.0.0.0 --port 8080 --access-password mypassword
Access the UI at: [http://127.0.0.1:8000](http://127.0.0.1:8000)
---
## Docker Deployment
### docker-compose (recommended)
docker-compose up -d
Customize environment variables in `docker-compose.yml`:
version: "3.8"
services:
codex-console:
image: ghcr.io/<yourname>/codex-console:latest
ports:
- "1455:1455"
environment:
WEBUI_HOST: "0.0.0.0"
WEBUI_PORT: "1455"
WEBUI_ACCESS_PASSWORD: "${WEBUI_ACCESS_PASSWORD}"
LOG_LEVEL: "info"
volumes:
- ./data:/app/data
### docker run
docker run -d \
-p 1455:1455 \
-e WEBUI_HOST=0.0.0.0 \
-e WEBUI_PORT=1455 \
-e WEBUI_ACCESS_PASSWORD="${WEBUI_ACCESS_PASSWORD}" \
-v $(pwd)/data:/app/data \
--name codex-console \
ghcr.io/<yourname>/codex-console:latest
> ⚠️ Always mount `-v $(pwd)/data:/app/data` to persist database and account data across container restarts.
Docker environment variables:
| Variable | Description |
|---|---|
| `WEBUI_HOST` | Listen host (default `0.0.0.0`) |
| `WEBUI_PORT` | Listen port (default `1455`) |
| `WEBUI_ACCESS_PASSWORD` | Web UI password |
| `DEBUG` | Set `1` or `true` for debug mode |
| `LOG_LEVEL` | Log level: `info`, `debug`, etc. |
---
## Database Configuration
### SQLite (default)
# Uses data/database.db by default
python webui.py
### Remote PostgreSQL
export APP_DATABASE_URL="postgresql://user:password@host:5432/dbname"
python webui.py
Also supports `DATABASE_URL` env var (lower priority than `APP_DATABASE_URL`).
---
## Building Executables
### Windows
build.bat
Output: `dist/codex-console-windows-X64.exe`
The built executable supports CLI arguments:
codex-console.exe --access-password mypassword
codex-console.exe --host 0.0.0.0 --port 8080
### Linux / macOS
bash build.sh
Build troubleshooting checklist:
- Python is added to PATH
- All dependencies installed (`uv sync` or `pip install -r requirements.txt`)
- Antivirus is not blocking PyInstaller output
- Check terminal output for specific error messages
---
## Key Architectural Changes (vs upstream)
Understanding these helps when extending or debugging:
### 1. Sentinel POW Solving
OpenAI now enforces Sentinel Proof-of-Work validation. The original codebase passed empty values; this fork implements actual POW solving:
# The registration flow now calls POW solver before submitting
pow_token = solve_sentinel_pow(challenge)
headers["openai-sentinel-token"] = pow_token
### 2. Split Register + Login Flow
Registration no longer returns a usable token directly. The flow is now:
# Step 1: Register account
register_result = await register_account(email, password)
# Step 2: Separately log in to retrieve token
token = await login_and_get_token(email, password)
### 3. Verification Code Handling
The server sends the verification code email automatically. The old logic sent a duplicate manual request, causing conflicts:
# Old (broken): manually trigger code send
# await send_verification_code(email) # REMOVED
# New: wait for the system-sent code
code = await wait_for_verification_email(email_client)
### 4. Login Page State Detection
Login re-entry now correctly detects page transitions and submits credentials at the right stage:
# Detect current page state before acting
page_state = detect_login_page_state(response)
if page_state == "password_required":
await submit_password(password)
elif page_state == "verification_required":
await submit_verification_code(code)
---
## Common Patterns
### Running a Batch Registration Task
1. Open Web UI at `http://127.0.0.1:8000`
2. Navigate to **Tasks** → **New Task**
3. Configure email service (IMAP/接码 provider), proxy settings, and batch count
4. Start the task and monitor logs in real-time via the **Logs** panel
### Exporting Account Data
Use the Web UI **Export** feature to download account credentials and tokens as CSV or JSON.
### Viewing Logs
Real-time logs are available in the Web UI. For CLI log output:
python webui.py --debug 2>&1 | tee run.log
### Using a Custom Email Service
Set up your email接码 provider credentials in the Web UI settings panel or via environment:
export EMAIL_IMAP_HOST="imap.yourprovider.com"
export EMAIL_IMAP_USER="${EMAIL_USER}"
export EMAIL_IMAP_PASS="${EMAIL_PASS}"
---
## Troubleshooting
### Web UI not accessible
# Check the host binding — 127.0.0.1 only allows local access
python webui.py --host 0.0.0.0 --port 8000
### Registration stuck or failing
- Ensure your proxy is configured and working
- Check logs for Sentinel POW errors — update to latest commit
- Verify email接码 service credentials are correct
### Database errors on startup
# Ensure data directory exists
mkdir -p data
# For PostgreSQL, verify connection string
psql "postgresql://user:password@host:5432/dbname" -c "SELECT 1"
### PyInstaller build fails on Windows
# Run in a clean environment
pip install pyinstaller
pyinstaller --clean codex-console.spec
Check for antivirus interference — whitelist the `dist/` directory during build.
### Token retrieval returns empty
This typically means the login flow is hitting a new page state. Check:
- That you're on the latest commit (login page detection is actively maintained)
- Proxy is not flagged by OpenAI
- Verification code email was received and parsed correctly
---
## Project Structure (key files)
codex-console/
├── webui.py # Main entry point — starts Web UI
├── build.bat # Windows packaging script
├── build.sh # Linux/macOS packaging script
├── docker-compose.yml # Docker Compose configuration
├── .env.example # Environment variable template
├── data/ # SQLite DB and account data (persisted)
└── requirements.txt # Python dependencies
---
## Attribution
This project is a fix-and-enhancement fork of [cnlimiter/codex-manager](https://github.com/cnlimiter/codex-manager). When publishing or redistributing, include:
Forked and fixed from cnlimiter/codex-manager
**Disclaimer:** For learning, research, and technical exchange only. Comply with all platform terms of service. Users assume all responsibility for use.More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...