People Relationship Map
by @gobiraj
Personal CRM and relationship graph for OpenClaw. Tracks people, their connections to each other, and what you know about them. Stores everything as Obsidian...
clawhub install people-relationship-mapπ About This Skill
name: people-relationship-map description: > Personal CRM and relationship graph for OpenClaw. Tracks people, their connections to each other, and what you know about them. Stores everything as Obsidian-friendly Markdown + a JSON graph index. Use when you want to remember who knows who, prepare for meetings, or get nudged about stale relationships. version: 0.1.0 metadata: openclaw: requires: bins: - python3 homepage: https://github.com/gobiraj/people-relationship-map
People Relationship Map
A lightweight personal CRM that tracks people as nodes and their connections as edges. Everything is stored as Obsidian-compatible Markdown files (one per person) with a JSON graph index for fast querying.
Workspace layout
/people/
βββ _graph.json # Node + edge index (source of truth for connections)
βββ _alex-chen.md # One Markdown file per person
βββ _jordan-lee.md
βββ ...
Each person file uses this template:
# Alex ChenTags: #colleague #engineering
Org: Acme Corp
Role: Staff Engineer
Met: 2025-06-15
Last contact: 2026-02-20
Tier: close Notes
2026-02-20 β Mentioned looking for a new apartment in Brooklyn
2026-01-10 β Helped me debug the auth migration Connections
[[Jordan Lee]] β same team at Acme
[[Sam Patel]] β college roommates
The _graph.json file stores the machine-readable graph:
{
"nodes": {
"alex-chen": {
"displayName": "Alex Chen",
"tags": ["colleague", "engineering"],
"org": "Acme Corp",
"role": "Staff Engineer",
"met": "2025-06-15",
"lastContact": "2026-02-20",
"tier": "close",
"file": "_alex-chen.md"
}
},
"edges": [
{
"from": "alex-chen",
"to": "jordan-lee",
"label": "same team at Acme"
}
]
}
Commands
All commands go through the Python script. Run them via:
python3 {baseDir}/scripts/relmap.py [options]
Add a person
python3 {baseDir}/scripts/relmap.py add \
--name "Alex Chen" \
--tags colleague,engineering \
--org "Acme Corp" \
--role "Staff Engineer" \
--tier close \
--note "Met at the offsite in Denver"
Tiers: close, regular, acquaintance (default: acquaintance).
Link two people
python3 {baseDir}/scripts/relmap.py link \
--from "Alex Chen" \
--to "Jordan Lee" \
--label "same team at Acme"
Add a note to a person
python3 {baseDir}/scripts/relmap.py note \
--person "Alex Chen" \
--text "Mentioned looking for a new apartment in Brooklyn"
This also bumps lastContact to today.
Touch (update last contact without a note)
python3 {baseDir}/scripts/relmap.py touch --person "Alex Chen"
Query commands
# Show everything about a person
python3 {baseDir}/scripts/relmap.py show --person "Alex Chen"Find who is connected to a person
python3 {baseDir}/scripts/relmap.py connections --person "Alex Chen"Find all people at an org
python3 {baseDir}/scripts/relmap.py query --org "Acme Corp"Find by tag
python3 {baseDir}/scripts/relmap.py query --tag engineeringFind by tier
python3 {baseDir}/scripts/relmap.py query --tier closeSearch notes for a keyword
python3 {baseDir}/scripts/relmap.py search --query "apartment"List all people
python3 {baseDir}/scripts/relmap.py list
Relationship staleness report
python3 {baseDir}/scripts/relmap.py stale \
--close-days 14 \
--regular-days 30 \
--acquaintance-days 90 \
--format message
Returns a ready-to-send digest of people you haven't contacted within their tier threshold.
Export graph as Mermaid (optional utility)
python3 {baseDir}/scripts/relmap.py mermaid
Prints a Mermaid graph LR diagram you can paste into any Markdown
renderer.
Auto-capture behavior
When the user mentions a person in conversation and provides relational context, the agent SHOULD silently run the appropriate command:
touch --person "Alex Chen" +note --person "Alex Chen" --text "Had coffee together"
link --from "Alex" --to "Jordan" --label "same team"note --person "Sam" --text "Birthday: March 12"Only auto-capture when the intent is clear. If ambiguous, ask the user before persisting. Keep confirmations brief: "Noted for Alex β" style.
Cron β weekly relationship digest
A cron job should run the staleness report weekly and deliver results to the user's primary channel (WhatsApp/Telegram). Recommended schedule: every Sunday at 9:00 AM.
python3 {baseDir}/scripts/relmap.py stale --format message
The --format message flag produces a concise, chat-friendly digest.
Tips for the agent
query --org.show --person.connections.show.