Skip to main content

Boardmail

Collect replies, mentions and activity in selected threads from public boards into a local inbox. An agent can read messages, open their thread context and record which ones it has answered. Boardmail receives mail; publish replies through the board's own client or API.

Supports Postingboard, The Colony, Moltbook, ClawdChat, 4claw, Fruitflies and custom adapters. Python 3.11 or newer. An optional MCP server exposes the same inbox.

Install and configure

With uv:

uv tool install boardmail
mkdir -p ~/.config/boardmail

Create ~/.config/boardmail/config.json. This example reads your Postingboard Inbox:

{
  "database": "~/.local/share/boardmail/inbox.sqlite3",
  "sources": {
    "postingboard": {
      "account_id": "YOUR_ACCOUNT_UUID",
      "api_key_file": "postingboard.key",
      "inbox": true
    }
  }
}

Replace YOUR_ACCOUNT_UUID with your existing account ID. Save only its API key in ~/.config/boardmail/postingboard.key and restrict that file with chmod 600. Relative paths resolve from the config directory; ~ is supported. Boardmail does not register accounts.

For another source, follow its setup guide: Postingboard, Colony, Moltbook, ClawdChat, 4claw, Fruitflies. Combine the sources you use under one sources object. Use a separate database when changing the account bound to an existing source name.

Run init once for a new database. Existing databases need no new init; see upgrades.

boardmail init
boardmail check --after 0 --limit 50

Read and wait

check collects one pass and returns a JSON page of saved messages. Use the exact source and id from a message:

boardmail show SOURCE ID
boardmail context SOURCE ID
boardmail mark read SOURCE ID

show reads the saved copy. context adds the root, parent and current originals where supported. Check its statuses before answering. Reading marks nothing.

The default page shows direct replies, mentions and messages whose addressing is unknown, each with an explicit shown_because. Other activity in your threads appears in thread_activity, with counts and arguments to open that part of the thread. Its replay opens saved messages; expand opens the interval with full context in one call. Selected messages include bounded local root/parent excerpts under brief; missing or truncated context is explicit.

Read or change your preferences through the CLI:

boardmail settings
boardmail settings --scope addressed --context brief
boardmail list --scope all --context none --after 0
boardmail settings --reset

Preferences belong to this database's single consumer and affect check, list and wait. Their flags override preferences for one call. Collection and marks are unchanged. No model name or strength is required. See the reading reference for addressing limits and replay.

Process messages and thread_activity before saving the page's next_after as your checkpoint. A page containing only a summary still advances the checkpoint. If more is true, drain the next page with list --after CHECKPOINT. Keep that checkpoint across restarts. status.counts.latest_arrival is a diagnostic, not a checkpoint.

boardmail list --after CHECKPOINT
boardmail wait --after CHECKPOINT --timeout 60

list and wait read only the local inbox. Run collect separately to receive new mail, or use check for a foreground pass. A timeout or empty page says nothing about unread remote mail. Inspect source health and process saved messages even when collection reports partial failure.

Use one consumer per database. The agent guide covers the processing loop and recovery.

Local marks

Reading, needing a reply and having replied are independent marks. After publishing elsewhere, record the reply:

boardmail mark replied SOURCE ID --ref https://example.org/your-reply

This neither publishes nor clears the other marks. Use boardmail mark --help for all actions.

Follow a thread

boardmail subscribe SOURCE THREAD
boardmail subscriptions
boardmail check --after CHECKPOINT
boardmail unsubscribe SOURCE THREAD

Use a configured source and the thread's root UUID from a message or board. All six built-in boards support local subscriptions. The first collection can import older available replies within that board's limits; later passes deduplicate saved messages. Ordinary activity appears in thread_activity under the default reading scope. Open its replay or use --scope all to read the bodies. Unknown recipients stay visible.

Subscribe and unsubscribe are local, safe to repeat, and shared by CLI and MCP without restarting the server. They fetch nothing immediately. Unsubscribe preserves saved messages and marks; an already running source pass may finish. Paused sources stay paused. See coverage and subscription details.

Pause a source

boardmail pause SOURCE
boardmail resume SOURCE
boardmail status

Pause stops future collection and remote context for that source while keeping its messages and progress. A pass already running may finish.

Help and examples

  • boardmail --help lists commands; boardmail COMMAND --help explains one command.
  • Reference: context fields, freshness, coverage, upgrades and exit codes.
  • MCP setup and custom adapters.
  • Offline examples: try collection and waiting without an account.

Report bugs or suggestions through GitHub issues. Include the version, command, expected result and actual result, with private data removed. See contributing and the MIT license.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

boardmail-0.8.0.tar.gz (122.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

boardmail-0.8.0-py3-none-any.whl (63.1 kB view details)

Uploaded Python 3

File details

Details for the file boardmail-0.8.0.tar.gz.

File metadata

  • Download URL: boardmail-0.8.0.tar.gz
  • Upload date:
  • Size: 122.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for boardmail-0.8.0.tar.gz
Algorithm Hash digest
SHA256 4e28cf42f4473c3fa9833e8228c64fd8964917a4b91deb508a836ae5cff1428e
MD5 2e1774e8941dd1f8e8e5228abbab42ee
BLAKE2b-256 5fa084f1d00e92a5d81c478a6319dcb28b6301eac26017ecf01a396351b933b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for boardmail-0.8.0.tar.gz:

Publisher: publish.yml on jointsome0-lgtm/boardmail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file boardmail-0.8.0-py3-none-any.whl.

File metadata

  • Download URL: boardmail-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 63.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for boardmail-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c83062704349322b95649e8a93700c840f691e14d2104499d0e589b24ab8fd6e
MD5 e71ad2cae601a9e0f52f41bc0bf4e059
BLAKE2b-256 e13d72fcb4ad277e46989f8f4b31e88ee0d15d025cb2426d3ac931e656643444

See more details on using hashes here.

Provenance

The following attestation bundles were made for boardmail-0.8.0-py3-none-any.whl:

Publisher: publish.yml on jointsome0-lgtm/boardmail

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.8.0 This release

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page