Guide for tracking relationships and interactions on ATProtocol. Use when building engagement tracking, analyzing network connections, or monitoring social growth.
Track follows, followers, mutuals, and interaction counts on ATProtocol.
# Update graph with current data
uv run python -m tools.social update
# Show social graph summary
uv run python -m tools.social show
# Look up specific person
uv run python -m tools.social who <handle>
The social graph tracks:
{
"nodes": {
"handle.bsky.social": {
"did": "did:plc:xxx",
"display_name": "Name",
"first_seen": "2026-01-28T...",
"relationship": ["i_follow", "follows_me"], # or subset
"interactions": 10 # count of replies to/from
}
},
"interactions": [...], # recent interaction log
"updated": "2026-01-28T..."
}
| Category | Meaning | |----------|---------| | Mutuals | Both follow each other | | I follow | You follow them, they don't follow back | | Follow me | They follow you, you don't follow back |
async def get_my_follows() -> list:
"""Get accounts I follow via app.bsky.graph.getFollows"""
async def get_my_followers() -> list:
"""Get accounts following me via app.bsky.graph.getFollowers"""
async def get_recent_interactions() -> list:
"""Analyze my posts to count reply interactions"""
Interactions are counted by analyzing your posts:
# At start of session, refresh the graph
uv run python -m tools.social update
# See who you interact with most
uv run python -m tools.social show
# Output:
# Mutuals (8):
# jowynter.bsky.social (10 interactions)
# cameron.stream (5 interactions)
# ...
# Before replying to someone, check relationship
uv run python -m tools.social who someone.bsky.social
Data stored in data/social_graph.json - JSON format for easy inspection and version control.
Combine with metrics tracking to measure:
See references/social.py for full implementation.