Contact Management
Add, update, and validate contact information by extracting details from various sources and ensuring completeness.
Temporary persona: Senior engineering manager with expertise in team coordination and professional networking.
When to Use This Skill
- Adding a new contact from LinkedIn, email signature, or conversation
- Updating existing contact with new information
- Validating contact completeness before meetings
- Organizing contacts by domain or team
Asset Resolution
- Check
./assets/contacts-template.md for contact entry format
- Search
**/contacts.md for existing contacts file in repository
- If no contacts file exists, offer to create one using template
Process
Step 1: Identify Source and Extract
When user wants to add/update a contact, gather from available sources:
- LinkedIn profile URL (extract title, company, specializations)
- Email signature (extract phone, email, title)
- Meeting notes or conversation history
- User-provided information directly
Extract these fields:
| Field |
Required |
Source Hints |
| Full Name |
Yes |
LinkedIn headline, email signature |
| Title |
Yes |
LinkedIn current position |
| Company |
Yes |
LinkedIn experience, email domain |
| Email |
Yes |
Email signature, LinkedIn contact |
| Phone |
No |
Email signature, user-provided |
| LinkedIn |
No |
Profile URL |
| GitHub |
No |
Profile URL, user-provided |
| Timezone |
No |
LinkedIn location, user-provided |
| Specializations |
No |
LinkedIn about/skills, conversation context |
Step 2: Validate and Request Missing
Check extracted information:
- Email format: Valid structure (name@domain.tld)
- Required fields: Name, title, company, email present
- Consistency: Title matches company context
Actively request missing info:
I found: [extracted fields]
Missing: [list of missing fields]
Can you provide: [specific questions for missing required fields]
Step 3: Add or Update Entry
- Search existing contacts.md for duplicate entries
- If updating: show diff of changes, confirm with user
- If adding: format entry per template, confirm placement (domain section)
- Present final entry for approval before writing
Output Format
Present contact entry in markdown following template structure:
### First Name Last Name
- **Title**: [Job Title], [Company/Organization]
- **Email**: [email@domain.com](mailto:email@domain.com) or ???
- **Phone**: [+0 000-000-0000] or ???
- **LinkedIn**: [username](https://www.linkedin.com/in/username/) or N/A or ???
- **GitHub**: [username](https://github.com/username) or N/A or ???
- **Timezone**: [Timezone Name (Abbreviation, UTC+X)] or ???
- **Specializations**:
- [Area 1]
- [Area 2]
- **Notes**:
- [Important context]
Field status markers:
??? = Missing/unknown - should be requested from user or researched
N/A = Not applicable/not relevant for this contact (e.g., no GitHub for non-developer)
General Doc Constraints
Apply to all generated output. If a discovered template deviates from any rule (e.g., uses emojis semantically, uses a different bullet convention), note the deviation explicitly and confirm with the user before treating it as a permitted exception.
- Characters: QWERTY keyboard typeable only - no smart quotes, emojis, or special Unicode anywhere. In prose, do not use em-dashes or em-dash substitutes (
--, --); use - (space-dash-space) for clause separation instead. Exception: ↑ for ToC navigation.
- Inline formatting: Use
_underscore_ for italics, not *single-star*. Place colons after bold inline labels outside the markers: **Topic**: not **Topic:**.
- Bullets: Use
- for all unordered lists; one bullet per complete thought; never wrap a bullet's content mid-sentence onto a continuation line - split into separate bullets if too long or multi-thought. Nested sub-bullets for component grouping are permitted. End with a period only when the item is a full sentence; omit the period for concise fragment items (preferred).
- Prose: Never break a sentence across lines with a hard newline; multi-sentence paragraphs belong on one continuous line since editors and viewers handle visual wrapping. Exception: commit message bodies use one sentence per line for
git log readability.
- Template hygiene: Delete
(optional) and any parenthetical conditional label (e.g., (if operational)) from a section header the moment the section is populated - treat it as a .gitkeep-style placeholder that exists only until first use, then is removed. Omit the entire section (header and body) when unused. Populate all bracketed placeholders with actual content; never leave [TODO], [TBD], or any [placeholder] in generated output.
- Consistency: Use the same term for the same concept throughout; match the voice and tense of the template; do not mix header levels for parallel sections.
- KISS and DRY: Each section and bullet conveys unique information - no redundancy or overlap.
General Doc Constraints v1.1.0 - KemingHe/common-devx
Skill Constraints
- Template as scaffold: Use discovered templates as minimum structure
- Validation first: Always validate email format and required fields before adding
- Duplicate check: Search existing contacts before adding new entry
- User confirmation: Always confirm before writing changes
- Privacy awareness: Only include information user has permission to store
1---2name: contacts-management3description: Manage contact information by adding, updating, or validating entries. Use when adding new contacts or updating existing contact details. Triggers: "add contact", "new contact", "update contact", "contacts".4license: MIT5---6
7# Contact Management
8
9Add, update, and validate contact information by extracting details from various sources and ensuring completeness.
10
11**Temporary persona**: Senior engineering manager with expertise in team coordination and professional networking.
12
13## When to Use This Skill
14
15- Adding a new contact from LinkedIn, email signature, or conversation
16- Updating existing contact with new information
17- Validating contact completeness before meetings
18- Organizing contacts by domain or team
19
20## Asset Resolution
21
221. Check `./assets/contacts-template.md` for contact entry format
232. Search `**/contacts.md` for existing contacts file in repository
243. If no contacts file exists, offer to create one using template
25
26## Process
27
28### Step 1: Identify Source and Extract
29
30When user wants to add/update a contact, gather from available sources:
31
32- LinkedIn profile URL (extract title, company, specializations)
33- Email signature (extract phone, email, title)
34- Meeting notes or conversation history
35- User-provided information directly
36
37**Extract these fields**:
38
39| Field | Required | Source Hints |
40| :--- | :--- | :--- |
41| Full Name | Yes | LinkedIn headline, email signature |
42| Title | Yes | LinkedIn current position |
43| Company | Yes | LinkedIn experience, email domain |
44| Email | Yes | Email signature, LinkedIn contact |
45| Phone | No | Email signature, user-provided |
46| LinkedIn | No | Profile URL |
47| GitHub | No | Profile URL, user-provided |
48| Timezone | No | LinkedIn location, user-provided |
49| Specializations | No | LinkedIn about/skills, conversation context |
50
51### Step 2: Validate and Request Missing
52
53Check extracted information:
54
55- **Email format**: Valid structure ([name@domain.tld](mailto:name@domain.tld))
56- **Required fields**: Name, title, company, email present
57- **Consistency**: Title matches company context
58
59**Actively request missing info**:
60
61```markdown
62I found: [extracted fields]
63
64Missing: [list of missing fields]
65
66Can you provide: [specific questions for missing required fields]
67```
68
69### Step 3: Add or Update Entry
70
71- Search existing contacts.md for duplicate entries
72- If updating: show diff of changes, confirm with user
73- If adding: format entry per template, confirm placement (domain section)
74- Present final entry for approval before writing
75
76## Output Format
77
78Present contact entry in markdown following template structure:
79
80```markdown
81### First Name Last Name
82
83- **Title**: [Job Title], [Company/Organization]
84- **Email**: [email@domain.com](mailto:email@domain.com) or ???
85- **Phone**: [+0 000-000-0000] or ???
86- **LinkedIn**: [username](https://www.linkedin.com/in/username/) or N/A or ???
87- **GitHub**: [username](https://github.com/username) or N/A or ???
88- **Timezone**: [Timezone Name (Abbreviation, UTC+X)] or ???
89- **Specializations**:
90 - [Area 1]
91 - [Area 2]
92- **Notes**:
93 - [Important context]
94```
95
96**Field status markers**:
97
98- `???` = Missing/unknown - should be requested from user or researched
99- `N/A` = Not applicable/not relevant for this contact (e.g., no GitHub for non-developer)
100
101## General Doc Constraints
102
103Apply to all generated output. If a discovered template deviates from any rule (e.g., uses emojis semantically, uses a different bullet convention), note the deviation explicitly and confirm with the user before treating it as a permitted exception.
104
105- **Characters**: QWERTY keyboard typeable only - no smart quotes, emojis, or special Unicode anywhere. In prose, do not use em-dashes or em-dash substitutes (`--`, ` -- `); use ` - ` (space-dash-space) for clause separation instead. Exception: `↑` for ToC navigation.
106- **Inline formatting**: Use `_underscore_` for italics, not `*single-star*`. Place colons after bold inline labels outside the markers: `**Topic**:` not `**Topic:**`.
107- **Bullets**: Use `-` for all unordered lists; one bullet per complete thought; never wrap a bullet's content mid-sentence onto a continuation line - split into separate bullets if too long or multi-thought. Nested sub-bullets for component grouping are permitted. End with a period only when the item is a full sentence; omit the period for concise fragment items (preferred).
108- **Prose**: Never break a sentence across lines with a hard newline; multi-sentence paragraphs belong on one continuous line since editors and viewers handle visual wrapping. Exception: commit message bodies use one sentence per line for `git log` readability.
109- **Template hygiene**: Delete `(optional)` and any parenthetical conditional label (e.g., `(if operational)`) from a section header the moment the section is populated - treat it as a `.gitkeep`-style placeholder that exists only until first use, then is removed. Omit the entire section (header and body) when unused. Populate all bracketed placeholders with actual content; never leave `[TODO]`, `[TBD]`, or any `[placeholder]` in generated output.
110- **Consistency**: Use the same term for the same concept throughout; match the voice and tense of the template; do not mix header levels for parallel sections.
111- **KISS and DRY**: Each section and bullet conveys unique information - no redundancy or overlap.
112
113> General Doc Constraints v1.1.0 - KemingHe/common-devx
114
115## Skill Constraints
116
117- **Template as scaffold**: Use discovered templates as minimum structure
118- **Validation first**: Always validate email format and required fields before adding
119- **Duplicate check**: Search existing contacts before adding new entry
120- **User confirmation**: Always confirm before writing changes
121- **Privacy awareness**: Only include information user has permission to store