Reading & Triage

DMs

DMs

birdclaw treats DMs as first-class content: full-text indexed, multi-account, and filterable by sender context. The web app's DMs lane uses the same query model you get from the CLI.

#List conversations

3 dms list 0 1 10 2
5 dms list 0 1 500 2 90 3 influence 4

dms list is the no-query view onto conversations and recent events. It is optimized for agent and operator filtering — you do not need a search query to walk the inbox.

Flags:

  • --refresh — refresh live DMs through bird before listing
  • --cache-ttl <seconds> — tune freshness
  • --participant <handle-or-id>
  • --min-followers <n> / --max-followers <n>
  • --min-influence-score <n> / --max-influence-score <n>
  • --sort recent|influence
  • --replied / --unreplied
  • --account <name>
  • --limit <n>

#Sync

Refresh live direct messages through bird and merge into the canonical conversation/message tables:

3 dms sync 0 50 1 2

Flags:

  • --account <account-id>
  • --limit <n>
  • --refresh — force a live fetch
  • --cache-ttl <seconds>

Sync is idempotent — re-running merges new events without disturbing already-imported message bodies.

2 search dms 0 1
5 search dms 0 1 1000 2 120 3 influence 4
4 search dms 0 1 @someone 2 3

Same FTS5 backbone as tweet search, with the DM-specific filters layered on top. See Search for the full flag list.

#Influence score

Influence is a derived ranking signal that starts with follower count and folds in:

  • verified status
  • prior reply / DM history with the active account
  • follower-to-following ratio
  • account age
  • block / mute history

It is intentionally simple. The goal is to bucket noisy inboxes ("strangers with no follow signal" vs "people you actually talk to"), not to produce a global ranking.

When triaging a quiet day, sort by influence to surface higher-context conversations first:

4 dms list 0 1 influence 2 20 3

When triaging a noisy day, hide low-influence senders entirely:

4 dms list 0 1 80 2 20 3

#Reply

1 compose dm dm_003 0

Replies use the active live transport (auto by default). Without a working transport, the command fails fast with exit code 4 rather than recording a half-state local row.

#DM mode on archive import

Twitter archives include full DM history but the JSON is awkward. By default, import archive runs --dm-mode full so message bodies land in SQLite and become FTS5-searchable. Pass --dm-mode metadata if you only want conversation skeletons (faster import, no body content).

2 import archive ~/Downloads/twitter-archive.zip 0 metadata 1
2 import archive ~/Downloads/twitter-archive.zip 0 full 1

#Web UI

The DMs lane uses a two-column layout:

  • left: conversation list, filterable by participant, follower count, influence, reply state
  • right: detail view with sender bio, follower count, and influence visible in the header so you do not have to dig

Theme follows the system / light / dark switcher with an animated transition.

#See also

  • Search — full filter reference
  • Inbox — mixed mention + DM triage with AI ranking
  • Sync — DMs share the cursor / cache rules of other syncs