architect
Given a PRD, produces an implementation architecture: file tree, component breakdown, data model, and a phased build plan with…
Browser-based QA verification. Launches a real browser, navigates the app, clicks buttons, fills forms, and tests user flows. Works as a standalone skill or as a phase end condition in campaigns. Requires Playwright (optional dependency, graceful skip if not installed).
Claude Code
$ npx -y skills add SethGammon/Citadel --skill qa --agent claude-code
Codex
$ npx skills add SethGammon/Citadel --skill qa -a codex -y
Cursor
$ npx skills add SethGammon/Citadel --skill qa -a cursor -y
Gemini CLI
$ npx skills add SethGammon/Citadel --skill qa -a gemini-cli -y
GitHub Copilot
$ npx skills add SethGammon/Citadel --skill qa -a github-copilot -y
OpenCode
$ npx skills add SethGammon/Citadel --skill qa -a opencode -y
Windsurf
$ npx skills add SethGammon/Citadel --skill qa -a windsurf -y
name: qa license: MIT description: >- Browser-based QA verification. Launches a real browser, navigates the app, clicks buttons, fills forms, and tests user flows. Works as a standalone skill or as a phase end condition in campaigns. Requires Playwright (optional dependency, graceful skip if not installed). user-invocable: true auto-trigger: false trigger_keywords: - qa - test the app - click through - does it work - browser test effort: high
/qa requires Playwright. It's an optional dependency.
**If Playwright is installed:** full browser QA works. **If Playwright is NOT installed:** the skill offers to install it, or falls back to /live-preview (screenshot-only verification).
Detection:
npx playwright --version 2>/dev/null
Installation (if user agrees):
npm install -D playwright npx playwright install chromium
Only installs Chromium (smallest download, ~150MB). Not Firefox or WebKit unless the user asks for cross-browser testing.
**/do setup integration:** During setup, if the project is a web app (has React, Next.js, Vue, Svelte, or HTML files), offer to install Playwright: "I see this is a web project. Want to enable browser QA testing? This installs Playwright (~150MB) for interaction testing. (y/n)"
If they say no, /qa falls back to /live-preview. No pressure.
Before testing, understand what to test:
1. Read the project's routes/pages (from file tree, router config, or package.json scripts) 2. Read the PRD or campaign file (if exists) for expected user flows 3. Identify testable flows:
If no PRD or campaign exists, ask: "What should I test? Give me 1-3 user flows."
Before testing, the app needs to be running:
1. Check if a dev server is already running (try curl localhost:3000, 5173, 8080) 2. If not running, check package.json for start/dev scripts 3. Start it: `npm run dev` or equivalent, in background 4. Wait for the server to be ready (poll the health endpoint or main URL) 5. If the app won't start, report the error and stop. Don't test a broken app.
Track whether the agent started the server. If so, kill it on completion.
For each flow identified in Step 1, write and run a Playwright script:
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage();
// Navigate
await page.goto('http://localhost:3000');
// Verify page loaded
const title = await page.title();
// Test interactions
await page.click('button[data-testid="add-todo"]');
await page.fill('input[name="title"]', 'Test todo');
await page.click('button[type="submit"]');
// Verify result
const todoText = await page.textContent('.todo-item:last-child');
// Screenshot for evidence
await page.screenshot({ path: '.planning/screenshots/qa-flow-1.png' });
await browser.close();
})();For each test:
Write results to `.planning/qa-report-{date}.md`:
# QA Report: {App Name or Feature}
> Date: {ISO date}
> Flows tested: {N}
> Passed: {N}
> Failed: {N}
> Screenshots: .planning/screenshots/qa-*.png
## Results
### Flow 1: {description}
- Steps: {what was done}
- Expected: {what should happen}
- Actual: {what did happen}
- Result: PASS / FAIL
- Screenshot: {path}
- Notes: {any observations}
### Flow 2: ...When running as a phase end condition:
The campaign file can specify QA conditions:
| 3 | qa_verify | /qa passes for: add todo, complete todo, delete todo |
/qa reads the condition, runs those specific flows, and reports pass/fail. The phase is complete only if all specified flows pass.
For apps with authentication:
1. First run the auth flow: navigate to login, fill credentials, submit 2. Save the browser context (cookies + localStorage state) 3. Use the saved context for all subsequent tests 4. This means authenticated flows work without re-logging-in per test
Test credentials should come from `.env.example` or the campaign file. NEVER read from `.env` (protected by the hook). Use test accounts only.
If Playwright isn't installed and the user declines installation:
1. Fall back to /live-preview (screenshot-only) 2. Report: "Browser QA unavailable (Playwright not installed). Visual verification only." 3. Take screenshots of each page that would have been tested 4. Mark interaction tests as SKIPPED, visual tests as PASS/FAIL
An open-source operating layer for Claude Code and OpenAI Codex. Citadel routes requests, preserves repository state between sessions, coordinates parallel work, applies repository safeguards, and records evidence and handoffs around the coding agent you
Given a PRD, produces an implementation architecture: file tree, component breakdown, data model, and a phased build plan with…
Autonomous multi-session campaign agent. Decomposes large work into phases, delegates to sub-agents, reviews output, and…
Generate perfectly aligned ASCII diagrams — architecture, flow, sequence, box-and-arrow. Uses a programmatic character-grid…
Intake-to-delivery pipeline. Processes pending items from .planning/intake/: briefs new ideas, executes approved work through…
Deep cost exploration and transparency. Shows real token usage, session costs, campaign spend, burn rates, and model breakdown.…
End-to-end app creation from a single description. Five tiers: blank project, guided, templated, fully generated, or feature…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.