Skip to main content

burn-after-login

Create dev-only auth shortcuts so AI browser automation agents can authenticate instantly. Analyzes your auth system, creates guarded endpoints/scripts, detects your browser automation tools, and updates agent instructions. Use when setting up dev authentication for browser automation, or when agents struggle with login forms. Self-destructs after completion.

Source facts

Repository
pbakaus/burn-after-login
Last source activity
March 11, 2026 at 22:37
Detected SKILL.md language
English
Stars
52
Forks
3

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
burn-after-login
description
Create dev-only auth shortcuts so AI browser automation agents can authenticate instantly. Analyzes your auth system, creates guarded endpoints/scripts, detects your browser automation tools, and updates agent instructions. Use when setting up dev authentication for browser automation, or when agents struggle with login forms. Self-destructs after completion.
license
MIT
metadata
{"author":"pbakaus","version":"1.0"}
compatibility
Requires an existing authentication system and dev/local mode detection.
# Burn After Login > Your mission, should you choose to accept it, is to create dev-only auth shortcuts so AI browser agents can authenticate instantly. This skill will self-destruct after completion. Follow these phases in order. If a phase has an EXIT CONDITION that triggers, stop immediately and report the issue — do NOT continue to later phases. --- ## Phase 1: Environment Validation Verify this codebase has: 1. **A way to detect development/local mode.** Look for: - Environment variables: `NODE_ENV`, `RAILS_ENV`, `FLASK_ENV`, `APP_ENV`, `DEBUG`, `ENVIRONMENT`, etc. - Config files that distinguish dev from prod - Build flags or conditional compilation 2. **An existing authentication system.** Look for: - Auth-related directories: `auth/`, `authentication/`, `identity/` - Auth libraries in dependencies (check `package.json`, `requirements.txt`, `Gemfile`, `go.mod`, `Cargo.toml`, etc.) - Middleware or decorators that check auth - Login routes or handlers **EXIT CONDITIONS:** - If no dev mode detection exists: Stop and say *"Could not find a way to detect development mode. Add environment-based detection first to ensure auth shortcuts are never exposed in production."* - If no auth system exists: Stop and say *"No authentication system found. Set up authentication first."* --- ## Phase 2: Find Development Credentials Search for existing dev/test credentials in: - Seed/fixture files: `seed.*`, `fixtures/`, `test-data/`, `mock/` - Scripts directory for user management tools - Database migrations or seeders - Documentation mentioning test accounts (`README`, `CLAUDE.md`, etc.) - Environment files (`.env.development`, `.env.local`, `.env.example`) Search patterns: `username`, `password`, `testuser`, `demo`, `admin@`, `test@`, `seed`, `fixture` **EXIT CONDITION:** - If no credentials found: Stop and say *"No development credentials found. Create test users first (via seed script, admin panel, or auth provider dashboard), then run this again."* Document what you find — list the credentials with their roles. --- ## Phase 3: Analyze Authentication Discover: 1. **How auth works in this codebase:** - Token-based (JWT, API keys, Bearer tokens) - Session/cookie-based - Both (common in apps with API + web frontend) 2. **What auth library/framework is used:** - Identify from dependencies and imports - Understand how to programmatically authenticate a user - Understand how sessions/tokens are created and validated 3. **What apps/services exist:** - Web frontends (any framework) - Admin interfaces - API servers - List each with its path and auth pattern --- ## Phase 4: User Selection Ask the user which apps/services should have dev auth shortcuts. If a tool to ask the user is unavailable, create shortcuts for all discovered apps. --- ## Phase 5: Create Shortcuts Create authentication shortcuts appropriate for the codebase's language, framework, and auth system. ### For token-based auth — Token Generator Create a script that: - Accepts credentials (with sensible dev defaults) - Calls the existing auth system to get a token - Outputs only the token to stdout (for easy scripting) - Example usage: `TOKEN=$(./scripts/get-token) && curl -H "Authorization: Bearer $TOKEN" http://localhost:8000/api/...` ### For cookie/session auth — Dev Login Endpoint Create an endpoint that: - Accepts credentials via query params or JSON body - Calls the existing auth system - Sets session cookies - Returns 404 in production (not an error — completely hidden) - Example usage: `open "http://localhost:3000/dev-login?user=demo&pass=demo"` ### Guidelines 1. **Follow existing patterns** — Match the codebase's style, conventions, and directory structure 2. **Use the existing auth system** — Don't reinvent; call the same auth functions the app uses 3. **Guard with dev-only checks** — The shortcut MUST refuse to work in production 4. **Keep it simple** — Minimal code that does one thing ### Security Requirements - Check for development mode BEFORE doing anything - Return 404 or equivalent in production (not an error message that reveals the endpoint exists) - Never log credentials - Consider also checking for localhost/127.0.0.1 if appropriate ### Reference Implementations Use these for inspiration only. Adapt to the actual stack and auth system in use. <details> <summary>Node.js Token Generator</summary> ```ts // scripts/get-token.ts async function main() { const [user, pass] = process.argv.slice(2); const { token } = await yourAuthLib.signIn( user || 'demo@test.com', pass || 'demo' ); console.log(token); } main(); ``` </details> <details> <summary>Next.js Dev Login</summary> ```ts export async function GET(req: Request) { if (process.env.NODE_ENV !== 'development') { return new Response('Not found', { status: 404 }); } const url = new URL(req.url); await yourAuth.signIn( url.searchParams.get('email'), url.searchParams.get('password') ); return Response.json({ ok: true }); } ``` </details> <details> <summary>Django Dev Login</summary> ```python from django.conf import settings from django.http import Http404, JsonResponse from django.contrib.auth import authenticate, login def dev_login(request): if not settings.DEBUG: raise Http404() user = authenticate( username=request.GET.get('user'), password=request.GET.get('pass') ) if user: login(request, user) return JsonResponse({'ok': True}) return JsonResponse({'error': 'Invalid'}, status=401) ``` </details> <details> <summary>Rails Dev Login</summary> ```ruby class DevSessionsController < ApplicationController skip_before_action :verify_authenticity_token def create raise ActionController::RoutingError, 'Not Found' unless Rails.env.development? user = User.find_by(email: params[:email]) if user&.authenticate(params[:password]) session[:user_id] = user.id render json: { ok: true } else render json: { error: 'Invalid' }, status: 401 end end end ``` </details> <details> <summary>Flask Dev Login</summary> ```python @app.route('/dev-login') def dev_login(): if not current_app.debug: abort(404) user = authenticate( request.args.get('email'), request.args.get('password') ) if user: session['user_id'] = user.id return jsonify(ok=True) return jsonify(error='Invalid'), 401 ``` </details> <details> <summary>Go Dev Login</summary> ```go func DevLogin(w http.ResponseWriter, r *http.Request) { if os.Getenv("ENV") != "development" { http.NotFound(w, r) return } user, err := auth.Authenticate( r.URL.Query().Get("email"), r.URL.Query().Get("password"), ) if err != nil { http.Error(w, "Unauthorized", 401) return } session.Set(r, w, user) json.NewEncoder(w).Encode(map[string]bool{"ok": true}) } ``` </details> --- ## Phase 6: Detect Browser Automation Tools Scan the project for browser automation tools that are configured or in use. Check: 1. **MCP server configurations** — Look in `.claude/settings.json`, `mcp.json`, `.cursor/mcp.json`, or similar for: - `claude-in-chrome` or `chrome-extension` - `playwright` or `@anthropic/mcp-playwright` or `@anthropic-ai/mcp-playwright` - `chrome-devtools` or `devtools-mcp` - `browserbase` or `stagehand` 2. **Dependencies** — Check `package.json`, `requirements.txt`, `Gemfile`, `go.mod`, etc. for: - `playwright`, `@playwright/test` - `puppeteer`, `puppeteer-core` - `selenium`, `selenium-webdriver` - `cypress` - `@browserbasehq/stagehand` - `agent-browser` 3. **Config files** — Look for: - `playwright.config.ts`, `playwright.config.js` - `cypress.config.ts`, `cypress.config.js` - `.puppeteerrc.js` 4. **Existing agent instructions** — Scan `CLAUDE.md`, `AGENTS.md`, `GEMINI.md`, `CURSOR.md`, `COPILOT.md`, `.github/copilot-instructions.md`, `README.md`, and files in `.claude/`, `.cursor/`, `.agents/`, `.windsurf/` for any mentions of browser automation, testing, or auth flows. Record everything you find — you'll need it for the next phase. --- ## Phase 7: Update Agent Instructions & Documentation Based on what you found in Phase 6, update or create documentation so that AI agents using browser automation know about the dev auth shortcuts. ### For each detected browser automation tool, add specific usage instructions: **Claude in Chrome / Chrome Extension MCP:** ``` To authenticate in the browser, navigate to: http://localhost:PORT/dev-login?email=EMAIL&password=PASSWORD Then proceed to the authenticated page. ``` **Playwright / Playwright MCP:** ``` To authenticate before testing: await page.goto('http://localhost:PORT/dev-login?email=EMAIL&password=PASSWORD'); // Session cookies are now set, proceed with authenticated actions await page.goto('http://localhost:PORT/dashboard'); ``` **Token-based (for API testing with any tool):** ``` To get an auth token for API requests: TOKEN=$(./scripts/get-token EMAIL PASSWORD) Use header: Authorization: Bearer $TOKEN ``` ### Where to add documentation: - If `CLAUDE.md` exists — add a "Dev Authentication" section - If `AGENTS.md` exists — add a "Dev Authentication" section - If `CURSOR.md` exists — add equivalent instructions - If `GEMINI.md` exists — add equivalent instructions - If `COPILOT.md` or `.github/copilot-instructions.md` exists — add equivalent instructions - If `.windsurf/` config exists — add equivalent instructions - If none of these exist — create an `AGENTS.md` with the auth instructions Always match the existing style and formatting of each file you modify. ### Documentation must include: 1. What dev auth shortcuts are available (endpoints and/or scripts) 2. The test credentials and their roles 3. Tool-specific usage examples (based on what was detected) 4. A note that these only work in development mode --- ## Phase 8: Summary Present a clear report: - What was created (with file paths) - How to use each shortcut (with copy-pasteable commands) - Which agent instruction files were updated - Security measures in place - Test credentials reference --- ## Phase 9: Self-Destruct After presenting the summary, say: > *Mission complete. All dev auth shortcuts are in place and your agent instructions have been updated.* > > *This skill has served its purpose. Like any good secret agent tool, it should leave no trace. Want me to self-destruct? (y/n)* **If the user agrees:** 1. **Check for `skills.lock`** in the project root or common locations. If it exists and contains `burn-after-login`, the skill was installed via `npx skills`. Run: ``` npx skills remove burn-after-login ``` This handles all cleanup. Done. 2. **If no `skills.lock` found**, manually clean up by deleting the skill directory from all locations where it may exist: - `.agents/skills/burn-after-login/` - `.claude/skills/burn-after-login/` - `.claude/commands/burn-after-login.md` - `.cursor/skills/burn-after-login/` - `.windsurf/skills/burn-after-login/` - Any symlinks pointing to the above 3. After cleanup, say: > *This skill will self-destruct in 3... 2... 1...* > > *burn-after-login has been removed. Your dev auth shortcuts remain intact. Good luck out there, agent.* **If the user declines:** > *Understood. The skill remains installed if you need to run it again. You can remove it anytime with `npx skills remove burn-after-login`.*
View on GitHub