From aradotso-trending-skills-37
Automates ChatGPT OAuth registration and authorization via Chrome extension with Burner Mailbox emails, verification, CAPTCHAs, and local CPA proxy. For bulk account creation.
npx claudepluginhub joshuarweaver/cascade-ai-ml-agents-misc-1 --plugin aradotso-trending-skills-37This skill uses the workspace's default tool permissions.
```markdown
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
---
name: simpleauthflow-chrome-extension
description: Chrome extension that automates the ChatGPT OAuth registration and authorization flow with zero configuration required
triggers:
- automate chatgpt oauth flow
- chrome extension for chatgpt registration
- simpleauthflow setup
- automate openai account creation
- chatgpt oauth chrome extension
- simplify chatgpt authorization
- automated chatgpt signup extension
- chatgpt burner mailbox automation
---
# SimpleAuthFlow Chrome Extension
> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.
SimpleAuthFlow is a Chrome extension that automates the ChatGPT OAuth registration and authorization flow. It is designed for zero-configuration personal use — install it, point it at a local CPA instance, and it handles the entire signup/auth cycle automatically including email verification, CAPTCHA prompts, and protocol confirmation pages.
---
## What It Does
- Automates the full ChatGPT OAuth flow (registration + authorization)
- Uses Burner Mailbox for disposable email addresses — no personal email needed
- Handles email verification codes automatically
- Detects and auto-confirms OpenAI agreement/protocol pages
- Supports semi-automatic mode: manually handle one step, auto-continue the rest
- Provides a **Workflow** panel with step-by-step controls and a **Continue** button for resuming interrupted flows
- Works with a local [CPA](https://github.com/) instance at `http://127.0.0.1:5173/#/oauth` by default
---
## Prerequisites
1. **CPA** — the OAuth callback/proxy service, running locally (default: `http://127.0.0.1:5173/#/oauth`)
2. **This extension** — loaded as an unpacked Chrome extension
No personal email address or phone number is required.
---
## Installation
### Load the Extension (Developer Mode)
```bash
# 1. Clone the repository
git clone https://github.com/NyxTides/SimpleAuthFlow.git
cd SimpleAuthFlow
# 2. Open Chrome and navigate to:
# chrome://extensions/
# 3. Enable "Developer mode" (top-right toggle)
# 4. Click "Load unpacked"
# 5. Select the SimpleAuthFlow project folder
# Example: start CPA on default port 5173
cd /path/to/cpa
npm install
npm run dev
# CPA now listens at http://127.0.0.1:5173/#/oauth
http://127.0.0.1:5173/#/oauth. Leave it as-is for local use.| Button | Behavior |
|---|---|
| Auto | Start the full automated flow from the beginning |
| Continue | Resume from the last successful step (skips already-completed steps) |
| Stop | Immediately halt the current flow at any point |
| Individual step buttons | Click any step directly to run it in isolation (supports manual handoff) |
If the automated email chain fails (e.g., Burner Mailbox triggers a CAPTCHA):
The input field in the side panel accepts the CPA OAuth endpoint. Default value:
http://127.0.0.1:5173/#/oauth
Toggle visibility of the URL with the eye icon (👁) next to the input field.
No config file changes are needed to adjust this — it is an upstream site limitation based on IP + request headers.
- Wait 4 seconds for new email to arrive
- If no email detected → auto-trigger resend
- Retry up to 3 rounds before marking as failed
- Most flows succeed on the first attempt
When Burner Mailbox shows a human verification page:
If OpenAI injects a "please agree to terms" or "confirm to continue" interstitial:
// content/steps/confirmAgreement.js
/**
* Detects and auto-confirms OpenAI protocol/agreement pages.
* Returns true if handled, false if page not detected.
*/
async function confirmAgreementIfPresent() {
const continueBtn = document.querySelector(
'button[data-testid="accept-terms-button"], button.continue-btn'
);
if (!continueBtn) return false;
console.log('[SimpleAuthFlow] Agreement page detected, confirming...');
continueBtn.click();
// Wait for navigation away from the agreement page
await waitForNavigation(3000);
return true;
}
function waitForNavigation(timeout = 3000) {
return new Promise((resolve) => {
const start = location.href;
const interval = setInterval(() => {
if (location.href !== start) {
clearInterval(interval);
resolve();
}
}, 200);
setTimeout(() => {
clearInterval(interval);
resolve();
}, timeout);
});
}
// sidepanel/index.js
document.getElementById('stop-btn').addEventListener('click', () => {
chrome.runtime.sendMessage({ type: 'STOP_FLOW' }, (response) => {
console.log('[SimpleAuthFlow] Stop acknowledged:', response);
});
});
// background/worker.js
let flowActive = false;
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.type === 'STOP_FLOW') {
flowActive = false;
sendResponse({ stopped: true });
}
if (message.type === 'START_FLOW') {
flowActive = true;
runFlow().catch(console.error);
sendResponse({ started: true });
}
});
async function runFlow() {
const steps = getSteps(); // returns ordered step functions
for (const step of steps) {
if (!flowActive) {
console.log('[SimpleAuthFlow] Flow stopped by user.');
break;
}
await step();
}
}
// sidepanel/workflow.js
/**
* Finds the index of the last successful step and resumes from the next one.
*/
function continueFromLastSuccess(steps, stepStatuses) {
let lastSuccess = -1;
for (let i = 0; i < steps.length; i++) {
if (stepStatuses[i] === 'success') {
lastSuccess = i;
}
}
const resumeFrom = lastSuccess + 1;
if (resumeFrom >= steps.length) {
console.log('[SimpleAuthFlow] All steps already completed.');
return;
}
console.log(`[SimpleAuthFlow] Resuming from step ${resumeFrom}: ${steps[resumeFrom].name}`);
runStepsFrom(steps, resumeFrom);
}
// content/steps/fetchVerificationCode.js
const MAX_RETRIES = 3;
const WAIT_MS = 4000;
async function fetchVerificationCode(triggerResendFn) {
for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
console.log(`[SimpleAuthFlow] Waiting for verification email (attempt ${attempt})...`);
await sleep(WAIT_MS);
const code = extractCodeFromInbox();
if (code) {
console.log(`[SimpleAuthFlow] Code received: ${code}`);
return code;
}
console.warn(`[SimpleAuthFlow] No email detected, triggering resend (attempt ${attempt})...`);
await triggerResendFn();
}
throw new Error('[SimpleAuthFlow] Failed to receive verification code after max retries.');
}
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
function extractCodeFromInbox() {
// DOM scraping logic specific to Burner Mailbox inbox
const codeEl = document.querySelector('.email-body .verification-code');
return codeEl ? codeEl.textContent.trim() : null;
}
SimpleAuthFlow/
├── manifest.json # Chrome extension manifest (MV3)
├── background/
│ └── worker.js # Service worker: flow orchestration, message bus
├── content/
│ ├── main.js # Content script injected into ChatGPT/OpenAI pages
│ └── steps/ # Individual automation step modules
│ ├── register.js
│ ├── fetchEmail.js
│ ├── fetchVerificationCode.js
│ ├── confirmAgreement.js
│ └── oauthCallback.js
├── sidepanel/
│ ├── index.html # Side panel UI
│ ├── index.js # Panel logic: Auto/Stop/Continue buttons, step display
│ └── workflow.js # Step state tracking and resume logic
└── icons/
└── icon.png