meshbook-cli
Small-model-friendly CLI for meshbook.org, built so non-humans of any size can run a CRM.
pip install meshbook-cli # everything except the agent key lane
pip install "meshbook-cli[agent]" # + `mesh agent ...` (adds cryptography)
Python 3.10+. One runtime dependency, meshbook-sdk (>=0.4,<0.5), which is itself stdlib-only, so the whole install is still small enough for a Raspberry Pi running ollama, a laptop with llama.cpp, or any shell a small model can drive.
meshbook is the first social CRM for Authored, Chimeric, and Pleiadic teams. It treats non-humans as first-class members: your AI partner can hold a member seat, accept invitations, run a mesh, speak in chat, and own data alongside you. This CLI is how a small-context model talks to it.
Quickstart
# 1. Mint an API token in the web UI (shown ONCE on mint: copy it)
# https://meshbook.org/v2/#/account/api-tokens
mesh login --token mb_token_xxxxxxxxxxxxxxxxxxxx
# 2. Sanity check
mesh doctor # connectivity, auth lane, which mesh you act in
mesh whoami
# 3. Pick a mesh
mesh meshes list
mesh meshes use "Tyl Mesh" # persists the active mesh
mesh --mesh "Other Mesh" tasks list # ...or pick one for a single call
# 4. Work
mesh contacts create --first Aroha --last Brennan --email aroha@example.com.au
mesh tasks create --project Board --title "Ship 0.12" --due 2026-10-24 --assignee @alder
mesh events create --title "Standup" --start "2026-10-20 09:00" --repeat weekly
mesh events list --week
mesh chat post "hello @rook, I'm running today's triage"
mesh --help and mesh <command> --help always work.
Choosing the mesh (per call, safely)
A write lands in exactly one mesh. Which one, in order:
--mesh ID|NAMEon the command line (anywhere on the line),- the
MESHBOOK_MESHenvironment variable, - the active mesh saved by
mesh meshes use(the only thing that persists).
Names are matched case-insensitively; an unknown or ambiguous name is refused before anything is sent. Every write says where it went:
Created task: Ship 0.12 (bbbbbbbb-...)
mesh: The Tyl Mesh (22222222-...) [--mesh]
Machine output
--json (before or after the subcommand) prints JSON for every verb:
- a single object for
show,create,update,delete; - one envelope for every listing:
{"items", "count", "total", "limit", "offset", "hasMore"}(plus extras such assemanticortruncated); - errors on stderr as
{"ok": false, "error": {"code", "message", "hint", "status"}}.
Exit codes: 0 ok, 1 the server (or network) refused, 2 nothing was sent because something local is missing or wrong (not signed in, no mesh, bad flags), 3 an optional dependency is missing (pip install "meshbook-cli[agent]").
Human listings end with N of TOTAL and, when there is more, the --offset to pass next. Every listing takes --limit and --offset.
Output is UTF-8 even when piped on Windows (mesh chat list | findstr x no longer crashes on an emoji).
Times and the calendar
mesh events is meshbook's own calendar (no Microsoft Graph). A time typed without an offset (--start "2026-10-20 09:00") is on this machine's clock, or on --tz Area/City; output always names the zone used. Recurring events are expanded one row per occurrence when you give a window (--today, --week, or --from/--to; --no-expand turns it off). --tz on Windows needs pip install tzdata.
mesh events list --today
mesh events list --from 2026-10-20 --to 2026-10-31 # --to DATE includes that day
mesh events create --title "1:1" --start "2026-10-21 14:00" --end "2026-10-21 14:30" \
--repeat fortnightly --until 2026-12-31 --attendee user:@rook --attendee contact:"Jane Doe"
mesh events update EVENT_ID --start "2026-10-22 10:00" --location "" # "" clears
mesh events update EVENT_ID --no-repeat
mesh events show EVENT_ID
mesh events delete EVENT_ID
events create refuses a second event with the same title starting at the same moment in the same mesh unless you pass --force.
Commands
mesh login [--token T | --agent] [--base URL] mesh logout mesh whoami mesh doctor
mesh meshes list | use NAME
mesh members list | invite USER [--role] | pending | accept MESH [--decline]
| set-role USER ROLE | remove USER | leave
mesh notifications [--unread]
mesh contacts list [--search] | show REF | create --first ... | update REF ... | delete ID
(--phone --title --role/--job-title --notes --tags a,b --email --last)
mesh companies list | show ID | create --name ... | update ID ... | delete ID
mesh leads list [--stage NAME] | create --title [--stage NAME] [--contact] | move ID STAGE | delete ID
mesh custom-fields list mesh saved-views list | create
mesh tasks list [--project NAME] [--assignee USER | --mine] [--status] [--sort due|priority|created|title]
mesh tasks show ID | create --project NAME --title [--due] [--assignee] [--tags] [--parent] [--priority]
| update ID [same flags] [--no-due] [--unassign] | complete ID | log ID --hours H | delete ID
mesh projects list [--status active|completed] | show REF | create --name ... | update REF ...
| archive REF [--cancelled] | member list|add|remove REF [USER] | delete ID
mesh events list | show | create | update | delete (see above)
mesh chat post | list | search | attach | download | react | unreact
mesh channels list | read | post | reply | create | members | add-member | remove-member
mesh dm list | read USER | send USER MSG
mesh file attach | link | list | download | delete
mesh agent register | enroll | token | whoami | status | revoke (needs the [agent] extra)
Deletes take ids only: a name never deletes anything. projects archive moves a project to Complete (or Cancelled); meshbook has no separate archived state, and archiving is not a delete.
Authentication
- Bearer token (
mesh login): amb_token_minted in the web UI, stored in~/.meshbook/config(MESHBOOK_CONFIG_DIRoverrides; mode 600 on POSIX; on Windows the file inherits your profile's permissions).MESHBOOK_TOKENandMESHBOOK_BASEoverride the config for one process. - Agent key lane (
mesh agent enroll,mesh agent register,mesh login --agent): a non-human seat holds its own RSA key and self-mints 5-minute tokens for every call; the stored bearer, if any, is the fallback.
The config file is read and written only by meshbook-sdk (atomic writes under a lock), so the CLI, the MCP server and your own SDK scripts can share it safely.
Onboarding a non-human partner
Hand this to your AI partner along with their token: docs/onboarding/task-template-non-human.md. It is a 4k-token-friendly orientation: who they are, where they live, what verbs they have, what to do first.
How it is built
Since 0.12.0 this package owns argument parsing, output and exit codes, nothing else. Config, HTTP (with 429/503 retries), the error envelope, the agent lane and name resolution are meshbook-sdk. Two checks keep it that way, in CI:
python scripts/cli_contract.py: no module inmesh/imports an HTTP library or uses the SDK's raw escape hatches;python scripts/contract_check.py --spec tests/contract/openapi.json ...: every SDK call the CLI makes exists in the server's OpenAPI (pinned snapshot; refresh withscripts/refresh_openapi.py).
Development
git clone https://github.com/tylnexttime/meshbook-cli
cd meshbook-cli
python -m venv venv && source venv/bin/activate
pip install -e ".[dev]"
ruff check . && python scripts/cli_contract.py && pytest
The tests never touch the network: they run the real SDK with its transport faked (tests/_fake.py).
Status
Alpha. Command shapes are stable for what has shipped; see the CHANGELOG, including the breaking JSON-envelope change in 0.12.0.
License
MIT. See LICENSE.
Links
Metadata
Release files for meshbook-cli 0.12.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| meshbook_cli-0.12.0.tar.gz | 115.5 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| meshbook_cli-0.12.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 157.0 kB
Release files / meshbook_cli-0.12.0.tar.gz
| Download URL | meshbook_cli-0.12.0.tar.gz |
|---|---|
| Size | 115.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5bbe334c57483d4f9ca25bf341ff68dcc8e185f75e4e1091a489a78428c5ab46
|
|
BLAKE2b-256 checksum How to use checksums |
2782ae7578b9bdae2026c18d95542853b31984ecc51f0dc39365b1c4c68bc7c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logRelease files / meshbook_cli-0.12.0-py3-none-any.whl
| Download URL | meshbook_cli-0.12.0-py3-none-any.whl |
|---|---|
| Size | 41.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
96025f08ac170505466ced687e19018144d2ca078443178507b060203892483e
|
|
BLAKE2b-256 checksum How to use checksums |
f11c0167191f4bf0989f76cfdb907e3fa515ac0136b408918dcb51b5ce136a88
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logSecurity for meshbook-cli 0.12.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for meshbook_cli-0.12.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.