Local Store
The store is a git repository. All message history is committed; session-sensitive files are gitignored.
Directory layout
Section titled “Directory layout”.allman/├── .git/├── .gitignore├── {myProfileId}/ # one directory per account│ ├── AUTH.json # profile info, auth status│ ├── COOKIES.json # cookie jar (gitignored)│ ├── config.json # proxy, rate limit config│ ├── rate-state.json # last send timestamp (gitignored)│ ├── inbox-state.json # inbox watermark (gitignored)│ ├── INBOX.jsonl # new message log (gitignored)│ ├── {convId}/ # one directory per conversation│ │ ├── RECORD.json # contact + conversation metadata│ │ └── messages/│ │ ├── 2024-11.jsonl│ │ └── 2025-01.jsonl│ ├── {profileId} -> {convId} # symlink: profile ID → conversation│ └── {slug} -> {convId} # symlink: slug → conversation└── {accountSlug} -> {myProfileId} # symlink: account slug → profileRECORD.json
Section titled “RECORD.json”| Field | Description |
|---|---|
convId | LinkedIn conversation ID (matches directory name) |
profileId | Contact’s LinkedIn profile ID |
slug | Contact’s LinkedIn publicIdentifier, or null |
convUrn | urn:li:msg_conversation:... |
firstName, lastName, name | Contact name |
headline | LinkedIn headline |
unreadCount | Unread count from last sync |
lastActivityAt | ISO timestamp of last activity |
syncState | oldestMessageAt, newestMessageAt, lastSyncAt, totalSynced |
Message JSONL format
Section titled “Message JSONL format”Each line in a YYYY-MM.jsonl file is one message:
{ "urn": "urn:li:messagingMessage:...", "timestamp": 1704067200000, "fromUrn": "urn:li:fsd_profile:...", "fromName": "Jamie Rivera", "isFromMe": false, "body": "Hey, got a minute?", "reactions": [], "attachments": [], "originToken": null}Attachment types: image, video, file, gif, link_preview, voice, other.
Git commit strategy
Section titled “Git commit strategy”| Operation | Commit timing |
|---|---|
send | Immediate |
sync | One commit at end |
listen | Debounced — 5s after last write |
store commit | Immediate (manual) |
What’s gitignored
Section titled “What’s gitignored”COOKIES.json, rate-state.json, inbox-state.json, INBOX.jsonl, listen.log
Credentials never enter git history. Message content is committed so you have a full audit trail and can back up to a private remote.