Add password reset skill
This commit is contained in:
122
dotfiles/agents/skills/password-reset/SKILL.md
Normal file
122
dotfiles/agents/skills/password-reset/SKILL.md
Normal file
@@ -0,0 +1,122 @@
|
||||
---
|
||||
name: password-reset
|
||||
description: Use when the user wants to reset or rotate a website or service password end-to-end, including finding the right `pass` entry, generating a new password with `xkcdpassgen`, retrieving reset emails through Gmail MCP or a local Gmail CLI, completing the reset in the browser with Chrome DevTools MCP, and updating the password store safely without losing entry metadata.
|
||||
---
|
||||
|
||||
# Password Reset
|
||||
|
||||
## Overview
|
||||
|
||||
Handle password resets end-to-end. Prefer Gmail MCP for reset-email retrieval, Chrome DevTools MCP for website interaction, and the local `xkcdpassgen` helper for password generation.
|
||||
|
||||
## Tool Priorities
|
||||
|
||||
- Prefer Gmail MCP over opening Gmail in the browser.
|
||||
- If Gmail MCP is unavailable, use an installed Gmail CLI or IMAP-based mail tool if one exists locally. Inspect the environment first instead of guessing command names.
|
||||
- Prefer Chrome DevTools MCP for all browser interaction.
|
||||
- Use `pass find` and `pass show` before asking the user for credentials or account details.
|
||||
|
||||
## Password Generation
|
||||
|
||||
The local password generator is `xkcdpassgen`, defined in `dotfiles/lib/functions/xkcdpassgen` and available in shell as an autoloaded function.
|
||||
|
||||
```bash
|
||||
xkcdpassgen <pass-entry-name>
|
||||
```
|
||||
|
||||
Behavior:
|
||||
|
||||
- Generates `xkcdpass -n 3 | tr -d ' '` as the base password.
|
||||
- Appends one uppercase letter, one digit, and one symbol by default.
|
||||
- Supports:
|
||||
- `-U` to omit uppercase
|
||||
- `-N` to omit number
|
||||
- `-S` to omit symbol
|
||||
|
||||
Do not substitute a different password generator ungless the user explicitly asks.
|
||||
|
||||
## Safe `pass` Update Pattern
|
||||
|
||||
`xkcdpassgen` writes directly to the `pass` entry it is given. Do not run it against the canonical entry before the reset succeeds, because:
|
||||
|
||||
- it would overwrite the current password immediately
|
||||
- it would replace any extra metadata lines in a multiline `pass` entry
|
||||
|
||||
Use this pattern instead:
|
||||
|
||||
```bash
|
||||
entry="service/example"
|
||||
tmp_entry="${entry}-password-reset-tmp"
|
||||
|
||||
existing_contents="$(pass show "$entry" 2>/dev/null || true)"
|
||||
metadata="$(printf '%s\n' "$existing_contents" | tail -n +2)"
|
||||
|
||||
xkcdpassgen "$tmp_entry"
|
||||
new_password="$(pass show "$tmp_entry" | head -1)"
|
||||
|
||||
# ... use $new_password in the reset flow ...
|
||||
|
||||
if [ -n "$metadata" ]; then
|
||||
printf '%s\n%s\n' "$new_password" "$metadata" | pass insert -m -f "$entry"
|
||||
else
|
||||
printf '%s\n' "$new_password" | pass insert -m -f "$entry"
|
||||
fi
|
||||
|
||||
pass rm -f "$tmp_entry"
|
||||
```
|
||||
|
||||
If the site rejects the password because of policy constraints, keep the canonical entry unchanged, delete or reuse the temp entry, and generate another candidate with different flags only if needed.
|
||||
|
||||
## Reset Workflow
|
||||
|
||||
1. Identify the account and canonical `pass` entry.
|
||||
2. Run `pass find <service>` and inspect likely matches with `pass show`.
|
||||
3. Capture existing metadata before generating a new password.
|
||||
4. Generate the candidate password into a temporary `pass` entry with `xkcdpassgen`.
|
||||
5. Start the reset flow in Chrome DevTools MCP:
|
||||
- navigate to the login or account page
|
||||
- use the site's "forgot password" flow, or
|
||||
- sign in and navigate to security settings if the user asked for a rotation rather than a reset
|
||||
6. Use Gmail MCP to retrieve the reset email when needed:
|
||||
- search recent mail by sender domain, subject, or reset-related keywords
|
||||
- open the message and extract the reset link
|
||||
- navigate to that link in Chrome DevTools MCP
|
||||
7. Fill the new password from the temporary `pass` entry and complete the form.
|
||||
8. Verify success:
|
||||
- confirmation page, or
|
||||
- successful login with the new password
|
||||
9. Promote the temp password into the canonical `pass` entry while preserving metadata, then remove the temp entry.
|
||||
|
||||
## Gmail Guidance
|
||||
|
||||
Prefer Gmail MCP for reset-email handling. Typical pattern:
|
||||
|
||||
- search for recent messages from the service domain
|
||||
- bias toward reset keywords such as `reset`, `password`, `security`, `verify`, or `signin`
|
||||
- read the shortlisted messages rather than browsing Gmail manually
|
||||
|
||||
If Gmail MCP is unavailable, use an installed Gmail CLI or local mail helper only as a fallback. Keep that discovery lightweight and local to the current environment.
|
||||
|
||||
## Browser Guidance
|
||||
|
||||
Use Chrome DevTools MCP to complete the reset flow directly:
|
||||
|
||||
- navigate to the reset or security page
|
||||
- take snapshots to identify the relevant inputs and buttons
|
||||
- click, fill, and submit through the site UI
|
||||
- verify the success state before updating the canonical `pass` entry
|
||||
|
||||
Prefer MCP interaction over describing steps for the user to perform manually.
|
||||
|
||||
## Credentials And Account Data
|
||||
|
||||
- Search `pass` before asking the user for usernames, recovery emails, or OTP-related entries.
|
||||
- Preserve existing metadata lines in multiline `pass` entries whenever possible.
|
||||
- Never print the new password in the final response unless the user explicitly asks for it.
|
||||
|
||||
## Failure Handling
|
||||
|
||||
- If account discovery is ambiguous, ask a short clarifying question only after checking `pass`.
|
||||
- If the reset email does not arrive, search spam or alternate senders before giving up.
|
||||
- If login or reset requires another secret that is not in `pass`, then ask the user.
|
||||
- If the reset flow fails after temp-password generation, leave the canonical entry untouched.
|
||||
4
dotfiles/agents/skills/password-reset/agents/openai.yaml
Normal file
4
dotfiles/agents/skills/password-reset/agents/openai.yaml
Normal file
@@ -0,0 +1,4 @@
|
||||
interface:
|
||||
display_name: "Password Reset"
|
||||
short_description: "Reset passwords and update pass safely"
|
||||
default_prompt: "Use $password-reset to reset this account password, complete the browser flow, and update pass safely."
|
||||
Reference in New Issue
Block a user