password-generator
Use the password-generator app to generate secure passwords, passphrases, and PINs in the browser.
Best use case
password-generator is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Use the password-generator app to generate secure passwords, passphrases, and PINs in the browser.
Teams using password-generator should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/password-generator/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How password-generator Compares
| Feature / Agent | password-generator | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Use the password-generator app to generate secure passwords, passphrases, and PINs in the browser.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# password-generator skill
## What this app does
password-generator is a browser-only React SPA that generates cryptographically secure passwords, passphrases (EFF wordlist), and PINs. No network requests are made after initial load. All state lives in localStorage.
## Running the app
```bash
cd password-generator
pnpm install
pnpm run dev # opens http://localhost:5173
```
For a production build:
```bash
pnpm run build
pnpm run preview # preview at http://localhost:4173
```
The built `dist/` folder can be hosted on any static file server or opened directly as `dist/index.html`.
## localStorage schema
The app uses two keys:
**`pg_settings`** - user preferences:
```json
{
"length": 20,
"includeUpper": true,
"includeLower": true,
"includeDigits": true,
"includeSymbols": true,
"excludeAmbiguous": false,
"customCharset": "",
"passphraseWords": 5,
"passphraseSep": "-",
"pinLength": 6,
"maxHistory": 100,
"defaultTab": "password",
"theme": "system"
}
```
**`pg_history`** - array of saved passwords:
```json
[
{
"id": "3f2a1b4c-...",
"value": "kR7#mZ2$vX9@qP4!nL5&",
"type": "password",
"entropy": 131.1,
"createdAt": "2026-03-20T09:41:00.000Z",
"label": "GitHub account"
}
]
```
## Reading history from browser console
```javascript
// View all history
JSON.parse(localStorage.getItem('pg_history') ?? '[]')
// Find by label
JSON.parse(localStorage.getItem('pg_history') ?? '[]')
.filter(e => e.label.toLowerCase().includes('github'))
// Count by type
const h = JSON.parse(localStorage.getItem('pg_history') ?? '[]')
Object.groupBy(h, e => e.type)
```
## Reset / export from console
```javascript
// Export plain text (one per line)
const h = JSON.parse(localStorage.getItem('pg_history') ?? '[]')
const txt = h.map(e => e.value).join('\n')
const blob = new Blob([txt], { type: 'text/plain' })
const url = URL.createObjectURL(blob)
const a = document.createElement('a'); a.href = url; a.download = 'passwords.txt'; a.click()
// Reset all settings to defaults
localStorage.removeItem('pg_settings')
location.reload()
// Clear history
localStorage.removeItem('pg_history')
location.reload()
```
## Keyboard shortcuts
| Shortcut | Action |
|----------|--------|
| Ctrl+G / Cmd+G | Regenerate password |
| Ctrl+Shift+C | Copy current output |
| Ctrl+1 | Go to Generator |
| Ctrl+2 | Go to History |
| Alt+Left / Alt+Right | Switch generator tab |
## Entropy thresholds
| Bits | Label | Color |
|------|-------|-------|
| < 40 | Weak | red #dc2626 |
| 40-59 | Fair | orange #ea580c |
| 60-79 | Strong | yellow-green #65a30d |
| 80-99 | Very strong | green #16a34a |
| >= 100 | Excellent | blue #2563eb |
## Password formula
`entropy = length * log2(charsetSize)`
Where charsetSize depends on enabled character sets:
- Uppercase (A-Z): +26
- Lowercase (a-z): +26
- Digits (0-9): +10
- Symbols (!@#...): +32 (or custom chars)
- `excludeAmbiguous` removes: 0, O, l, I, 1 (5 chars)
## Behavior notes
- History entries are added automatically every time a password is generated or copied (configurable)
- History is capped at `maxHistory` (default 100); oldest entries are evicted when the limit is exceeded
- The "Exclude ambiguous" option removes 5 characters from the charset, slightly reducing entropy
- Custom charset characters are deduplicated and appended to the active charset
- Dark mode follows system preference by default; can be overridden in Settings
- All generation uses `crypto.getRandomValues` - `Math.random()` is never usedRelated Skills
Skill: Invoice Generator Core
## Purpose
nginx-config-generator
Generate production-ready nginx configuration files for reverse proxy, SSL, rate limiting, and caching setups. Use when you need an nginx config for a web application, API, static site, or reverse proxy. Triggers include "nginx config", "nginx configuration", "nginx setup", "reverse proxy config", "SSL nginx", "nginx rate limiting", or any request involving nginx web server configuration.
qr-code-generator
Generate QR codes via the web UI or REST API. Supports URL, WiFi, vCard, and plain text. Outputs SVG and PNG. Includes logo embedding and bulk CSV generation.
expense-report-generator
Manage expenses and generate PDF reports using the expense-report-generator app.
Skill: Uptime Monitoring
## Overview
Skill: Status Page
## Overview
Skill: unit-conversion
## Overview
Skill: recipe-scaler
## Overview
reading-list
Operate the reading-list API to save, manage, tag, search, and export articles.
email-digest
Configure, test, and troubleshoot the reading-list daily email digest delivered via nodemailer.
websocket-realtime
Use the WebSocket connection in poll-builder to receive live vote updates. Use when you need to stream real-time poll results, monitor a poll for new votes, or build a live dashboard. Triggers include "live results", "real-time updates", "stream votes", "watch poll", or "WebSocket".
poll-builder
Self-hosted poll creation tool with real-time results. Use when you need to create a poll, check vote counts, close a poll, export results, or get the shareable link for a poll. Triggers include "create poll", "vote", "poll results", "survey", "collect votes", "share poll", or any task involving polling or voting.