Enhancing Author Profiles
This skill fills in missing author profile fields (bio, avatar, website, socials) via web research.
Workflow Overview
Phase 1: Author Identification
└─ Find and validate author file
Phase 2: Parallel Research (for missing fields only)
├─ WebSearch agent 1: bio/background
├─ WebSearch agent 2: avatar URL
└─ WebSearch agent 3: website + socials
Phase 3: User Review (BLOCKING GATE)
└─ Present findings, await approval
Phase 4: Save Enhanced Author
└─ Update frontmatter fields
Phase 5: Quality Check
└─ Run pnpm lint:fix && pnpm typecheck
Phase 1: Author Identification
1.1 Find the Author File
Accept an author slug, name, or partial name as argument:
- Try exact slug match first: Check if
content/authors/{slug}.mdexists (convert spaces to hyphens, lowercase) - If no exact match: Use Grep to search for the name in author files:
Grep pattern: "name:.*{search term}" with glob: "content/authors/*.md"
Outcomes:
- Single match → proceed with that file
- Multiple matches → list options for user to choose
- No match → list available authors
1.2 Identify Missing Fields
Read the author file and check which fields are missing or empty:
Required fields (always present):
nameslug
Optional fields to enhance:
bio- Professional background and expertiseavatar- URL to profile picturewebsite- Personal website URLsocials.twitter- Twitter/X handlesocials.github- GitHub usernamesocials.linkedin- LinkedIn usernamesocials.youtube- YouTube channel
A field is "missing" if:
- It doesn't exist in the frontmatter
- It exists but is empty (
""ornull)
If all fields are already populated, inform the user and offer to update specific fields.
Phase 2: Parallel Research
Spawn up to 3 WebSearch agents in parallel based on what fields are missing:
**Agent 1 - Bio/Background:**
Task tool with subagent_type: "general-purpose"
prompt: "Use WebSearch to find professional background info for [Author Name].
Query: '[Author Name]' bio background expertise
Extract: Job title, company, areas of expertise, notable projects.
Return: A 1-2 sentence professional bio."
**Agent 2 - Avatar URL:**
Task tool with subagent_type: "general-purpose"
prompt: "Use WebSearch to find a profile picture URL for [Author Name].
Query: '[Author Name]' site:github.com OR site:twitter.com
Extract: GitHub username or Twitter handle to construct avatar URL.
Return: Avatar URL (prefer GitHub format: https://github.com/{username}.png)"
**Agent 3 - Website & Socials:**
Task tool with subagent_type: "general-purpose"
prompt: "Use WebSearch to find social media profiles for [Author Name].
Query: '[Author Name]' twitter github linkedin youtube
Extract: Personal website, Twitter handle, GitHub username, LinkedIn profile, YouTube channel.
Return: List of found profiles with URLs/handles."
Only spawn agents for missing fields. If bio already exists, skip Agent 1.
Collect all results via TaskOutput (blocking).
Phase 3: User Review (BLOCKING GATE)
This is a mandatory approval step. Present the proposed changes before saving.
3.1 Present Changes
Display proposed updates as a comparison table:
## Proposed Updates for [Author Name]
| Field | Current | Proposed |
|-------|---------|----------|
| bio | (empty) | "Founder of X, creator of Y..." |
| avatar | (empty) | "https://github.com/username.png" |
| website | (empty) | "https://example.com" |
| socials.twitter | (empty) | "username" |
| socials.github | (empty) | "username" |
| socials.linkedin | (empty) | "username" |
| socials.youtube | (empty) | (not found) |
3.2 Request Approval
Use the AskUserQuestion tool:
question: "Save these changes to the author profile?"
header: "Review"
multiSelect: false
options:
- label: "Save"
description: "Update the author file with these values"
- label: "Edit"
description: "Tell me what to change"
- label: "Cancel"
description: "Don't modify the file"
3.3 Handle Response
- Save: Proceed to Phase 4
- Edit: Apply user feedback, show updated preview
- Cancel: Exit without changes
Do NOT proceed to Phase 4 without explicit user approval.
Phase 4: Save Enhanced Author
4.1 Update Frontmatter
Use the Edit tool to update only the approved fields:
Before:
---
name: "John Doe"
slug: "john-doe"
bio: ""
avatar: ""
website: ""
socials:
twitter: ""
github: ""
linkedin: ""
youtube: ""
---
After:
---
name: "John Doe"
slug: "john-doe"
bio: "Software engineer specializing in distributed systems..."
avatar: "https://github.com/johndoe.png"
website: "https://johndoe.dev"
socials:
twitter: "johndoe"
github: "johndoe"
linkedin: "johndoe"
youtube: ""
---
4.2 Preserve Existing Values
Critical: Never overwrite existing non-empty values unless explicitly requested:
- Keep existing
nameandslugunchanged - Only update fields that were empty/missing
- Preserve any additional custom fields
4.3 Confirmation
Report to user:
Updated: content/authors/{slug}.md
- bio: added
- avatar: added
- website: added
- socials.twitter: added
- socials.github: added
Phase 5: Quality Check
Run linter and type check to catch any issues:
pnpm lint:fix && pnpm typecheck
If errors are found, fix them before completing the task.
Error Recovery
| Error | Recovery |
|-------|----------|
| Author not found | List available authors in content/authors/ |
| No missing fields | Inform user, offer to update specific fields |
| WebSearch fails | Try alternative query patterns |
| User rejects changes | Allow editing or cancel |
| Could not find info | Mark field as "(not found)", proceed with others |
Quality Checklist
Before saving, verify:
- [ ] Author file exists in
content/authors/ - [ ] Only updating empty/missing fields
- [ ] Bio is 1-2 sentences, professional tone
- [ ] Avatar URL is valid (prefer GitHub format)
- [ ] Social handles are usernames only (no URLs)
- [ ] Existing non-empty values preserved
- [ ] User explicitly approved changes
Scan to join WeChat group