wealthbox-cli 1.0.1__tar.gz → 1.0.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wealthbox_cli-1.0.3/.github/workflows/docs.yml +39 -0
- wealthbox_cli-1.0.3/.gitignore +50 -0
- wealthbox_cli-1.0.1/README.md → wealthbox_cli-1.0.3/PKG-INFO +112 -13
- wealthbox_cli-1.0.1/PKG-INFO → wealthbox_cli-1.0.3/README.md +71 -44
- wealthbox_cli-1.0.3/docs/changelog.md +116 -0
- wealthbox_cli-1.0.3/docs/contributing.md +95 -0
- wealthbox_cli-1.0.3/docs/getting-started.md +110 -0
- wealthbox_cli-1.0.3/docs/index.md +77 -0
- wealthbox_cli-1.0.3/docs/promotion.md +135 -0
- wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/SKILL.md +68 -0
- wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/firm-config.example.md +111 -0
- wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/contacts.md +151 -0
- wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/events.md +88 -0
- wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/households.md +40 -0
- wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/lookups.md +73 -0
- wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/notes.md +67 -0
- wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/opportunities.md +87 -0
- wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/projects.md +60 -0
- wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/tasks.md +101 -0
- wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/workflows.md +90 -0
- wealthbox_cli-1.0.3/mkdocs.yml +67 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/pyproject.toml +24 -4
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/_util.py +133 -6
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/contacts.py +2 -5
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/events.py +23 -8
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/main.py +0 -2
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/notes.py +23 -8
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/opportunities.py +25 -17
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/projects.py +18 -7
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/tasks.py +34 -6
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/workflows.py +19 -7
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/comments.py +8 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/enums.py +8 -1
- wealthbox_cli-1.0.1/.gitignore +0 -216
- wealthbox_cli-1.0.1/src/wealthbox_tools/cli/comments.py +0 -51
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/.env.example +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/.github/workflows/ci.yml +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/CONTRIBUTING.md +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/LICENSE +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/SECURITY.md +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/docs/cli-reference.md +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/__init__.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/__init__.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/_config.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/activity.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/categories.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/config.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/households.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/me.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/users.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/__init__.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/activity.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/base.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/categories.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/contacts.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/events.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/households.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/me.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/notes.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/opportunities.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/projects.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/tasks.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/users.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/workflows.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/__init__.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/activity.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/comments.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/common.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/contacts.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/custom_fields.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/events.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/households.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/notes.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/opportunities.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/projects.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/tasks.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/workflows.py +0 -0
- {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/py.typed +0 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: Deploy docs to GitHub Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
pages: write
|
|
11
|
+
id-token: write
|
|
12
|
+
|
|
13
|
+
concurrency:
|
|
14
|
+
group: "pages"
|
|
15
|
+
cancel-in-progress: true
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
build:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
- uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
- run: pip install mkdocs-material
|
|
26
|
+
- run: mkdocs build --strict
|
|
27
|
+
- uses: actions/upload-pages-artifact@v3
|
|
28
|
+
with:
|
|
29
|
+
path: site/
|
|
30
|
+
|
|
31
|
+
deploy:
|
|
32
|
+
needs: build
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
environment:
|
|
35
|
+
name: github-pages
|
|
36
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
37
|
+
steps:
|
|
38
|
+
- id: deployment
|
|
39
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Python bytecode
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
|
|
7
|
+
# Distribution / packaging
|
|
8
|
+
build/
|
|
9
|
+
dist/
|
|
10
|
+
*.egg-info/
|
|
11
|
+
*.egg
|
|
12
|
+
.installed.cfg
|
|
13
|
+
MANIFEST
|
|
14
|
+
|
|
15
|
+
# Virtual environments
|
|
16
|
+
.venv/
|
|
17
|
+
venv/
|
|
18
|
+
env/
|
|
19
|
+
|
|
20
|
+
# Environment / secrets
|
|
21
|
+
.env
|
|
22
|
+
.envrc
|
|
23
|
+
|
|
24
|
+
# Testing / coverage
|
|
25
|
+
.pytest_cache/
|
|
26
|
+
.coverage
|
|
27
|
+
.coverage.*
|
|
28
|
+
htmlcov/
|
|
29
|
+
coverage.xml
|
|
30
|
+
|
|
31
|
+
# Type checking
|
|
32
|
+
.mypy_cache/
|
|
33
|
+
.dmypy.json
|
|
34
|
+
.pytype/
|
|
35
|
+
|
|
36
|
+
# Linting
|
|
37
|
+
.ruff_cache/
|
|
38
|
+
|
|
39
|
+
# Editors / IDEs
|
|
40
|
+
.idea/
|
|
41
|
+
.vscode/
|
|
42
|
+
|
|
43
|
+
# MkDocs build output
|
|
44
|
+
site/
|
|
45
|
+
|
|
46
|
+
# Project-specific
|
|
47
|
+
dev/
|
|
48
|
+
.claude/
|
|
49
|
+
CLAUDE.md
|
|
50
|
+
docs/superpowers/
|
|
@@ -1,16 +1,54 @@
|
|
|
1
|
-
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: wealthbox-cli
|
|
3
|
+
Version: 1.0.3
|
|
4
|
+
Summary: CLI and client library for the Wealthbox CRM API
|
|
5
|
+
Project-URL: Homepage, https://github.com/massive-value/wealthbox-cli
|
|
6
|
+
Project-URL: Documentation, https://massive-value.github.io/wealthbox-cli/
|
|
7
|
+
Project-URL: Repository, https://github.com/massive-value/wealthbox-cli
|
|
8
|
+
Project-URL: Issues, https://github.com/massive-value/wealthbox-cli/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/massive-value/wealthbox-cli/blob/main/CHANGELOG.md
|
|
10
|
+
Author: Kadin Bullock
|
|
11
|
+
License: Apache-2.0
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Keywords: api,cli,client-management,command-line,contacts,crm,financial-advisor,fintech,wealth-management,wealthbox
|
|
14
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
15
|
+
Classifier: Environment :: Console
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
18
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
19
|
+
Classifier: Natural Language :: English
|
|
20
|
+
Classifier: Operating System :: OS Independent
|
|
21
|
+
Classifier: Programming Language :: Python :: 3
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Topic :: Office/Business
|
|
26
|
+
Classifier: Topic :: Office/Business :: Financial
|
|
27
|
+
Classifier: Typing :: Typed
|
|
28
|
+
Requires-Python: >=3.11
|
|
29
|
+
Requires-Dist: httpx<1.0,>=0.27
|
|
30
|
+
Requires-Dist: pydantic<3.0,>=2.0
|
|
31
|
+
Requires-Dist: python-dotenv<2.0,>=1.0
|
|
32
|
+
Requires-Dist: tabulate<1.0,>=0.9
|
|
33
|
+
Requires-Dist: typer<1.0,>=0.12
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
36
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
37
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
38
|
+
Requires-Dist: respx>=0.21; extra == 'dev'
|
|
39
|
+
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
40
|
+
Description-Content-Type: text/markdown
|
|
41
|
+
|
|
42
|
+
# Wealthbox CLI — Command-Line Client for the Wealthbox CRM API
|
|
2
43
|
|
|
3
44
|
[](https://pypi.org/project/wealthbox-cli/)
|
|
45
|
+
[](https://pypi.org/project/wealthbox-cli/)
|
|
4
46
|
[](https://www.python.org/downloads/)
|
|
5
47
|
[](LICENSE)
|
|
6
48
|
|
|
7
|
-
|
|
49
|
+
**wealthbox-cli** (`wbox`) is a command-line tool and Python client library for the [Wealthbox CRM](https://www.wealthbox.com/) API. It gives financial advisors, developers, and RIA firms full CRUD access to contacts, tasks, events, notes, households, and more — directly from the terminal. Automate your CRM workflows, export data, and integrate Wealthbox into scripts and CI pipelines.
|
|
8
50
|
|
|
9
|
-
|
|
10
|
-
events, notes, users, categories, and more — directly from your
|
|
11
|
-
terminal.
|
|
12
|
-
|
|
13
|
-
Official API documentation: https://dev.wealthbox.com
|
|
51
|
+
[Documentation](https://massive-value.github.io/wealthbox-cli/) | [PyPI](https://pypi.org/project/wealthbox-cli/) | [API Reference](https://dev.wealthbox.com)
|
|
14
52
|
|
|
15
53
|
> **Disclaimer:** This is an unofficial, community-built tool. It is not affiliated with,
|
|
16
54
|
> endorsed by, or supported by Wealthbox or its parent company. "Wealthbox" is a trademark
|
|
@@ -18,6 +56,16 @@ Official API documentation: https://dev.wealthbox.com
|
|
|
18
56
|
|
|
19
57
|
------------------------------------------------------------------------
|
|
20
58
|
|
|
59
|
+
## Why Use wealthbox-cli?
|
|
60
|
+
|
|
61
|
+
- **No coding required** — structured CLI flags replace raw JSON and cURL commands
|
|
62
|
+
- **Automate CRM workflows** — script bulk updates, data exports, and scheduled tasks
|
|
63
|
+
- **Multiple output formats** — pipe JSON, CSV, or TSV directly to files or other tools
|
|
64
|
+
- **Built for financial advisors and developers** — covers contacts, households, tasks, events, notes, categories, and custom fields
|
|
65
|
+
- **Open source** — Apache 2.0 licensed, community-driven, and extensible
|
|
66
|
+
|
|
67
|
+
------------------------------------------------------------------------
|
|
68
|
+
|
|
21
69
|
## Features
|
|
22
70
|
|
|
23
71
|
- Full CRUD support for:
|
|
@@ -45,6 +93,18 @@ Official API documentation: https://dev.wealthbox.com
|
|
|
45
93
|
pip install wealthbox-cli
|
|
46
94
|
```
|
|
47
95
|
|
|
96
|
+
### With pipx (recommended for Ubuntu/Debian)
|
|
97
|
+
|
|
98
|
+
On systems where the system Python is externally managed (Ubuntu 23.04+, Debian 12+),
|
|
99
|
+
`pip install` outside a virtual environment is blocked by [PEP 668](https://peps.python.org/pep-0668/).
|
|
100
|
+
Use [pipx](https://pipx.pypa.io/) to install CLI tools in isolated environments:
|
|
101
|
+
|
|
102
|
+
``` bash
|
|
103
|
+
pipx install wealthbox-cli
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
This puts `wbox` and `wb` on your PATH without touching system Python.
|
|
107
|
+
|
|
48
108
|
### From source (development)
|
|
49
109
|
|
|
50
110
|
``` bash
|
|
@@ -115,10 +175,10 @@ For the full command reference see [docs/cli-reference.md](docs/cli-reference.md
|
|
|
115
175
|
For this workspace, the easiest entrypoint is:
|
|
116
176
|
|
|
117
177
|
```bash
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
178
|
+
scripts/run-wbox.sh me --format json
|
|
179
|
+
scripts/run-wbox.sh users list --format json
|
|
180
|
+
scripts/run-wbox.sh contacts list --per-page 1 --format json
|
|
181
|
+
scripts/run-wbox.sh contacts add person --first-name Jane --last-name Doe --format json
|
|
122
182
|
```
|
|
123
183
|
|
|
124
184
|
The wrapper:
|
|
@@ -128,7 +188,7 @@ The wrapper:
|
|
|
128
188
|
|
|
129
189
|
------------------------------------------------------------------------
|
|
130
190
|
|
|
131
|
-
## Project Structure
|
|
191
|
+
## Architecture and Project Structure
|
|
132
192
|
|
|
133
193
|
src/
|
|
134
194
|
wealthbox_tools/
|
|
@@ -137,6 +197,8 @@ The wrapper:
|
|
|
137
197
|
models/ # Pydantic v2 models for input validation
|
|
138
198
|
tests/ # pytest integration tests (respx mocks)
|
|
139
199
|
|
|
200
|
+
Built with [Typer](https://typer.tiangolo.com/), [httpx](https://www.python-httpx.org/), and [Pydantic v2](https://docs.pydantic.dev/).
|
|
201
|
+
|
|
140
202
|
**Client mixin pattern:** `WealthboxClient` inherits from resource mixins (`ContactsMixin`, `TasksMixin`, `EventsMixin`, etc.) plus `_WealthboxBase` (core HTTP, rate limiting, error handling). To add a new resource, create a mixin and register it in `client/__init__.py`.
|
|
141
203
|
|
|
142
204
|
**Rate limiting:** Sliding-window (300 req / 5-min window); state persists across processes via `~/.wbox_rate_limit.json`. 429 responses trigger automatic retry.
|
|
@@ -168,7 +230,7 @@ git pull
|
|
|
168
230
|
.venv/bin/pip install -e .
|
|
169
231
|
|
|
170
232
|
# Run the read-only smoke test
|
|
171
|
-
|
|
233
|
+
scripts/smoke_test.sh
|
|
172
234
|
```
|
|
173
235
|
|
|
174
236
|
Smoke test coverage:
|
|
@@ -185,6 +247,43 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for the full contributor guide.
|
|
|
185
247
|
|
|
186
248
|
------------------------------------------------------------------------
|
|
187
249
|
|
|
250
|
+
## Claude Code Skill
|
|
251
|
+
|
|
252
|
+
A `/wealthbox-crm` skill is included for [Claude Code](https://claude.ai/download) users. It provides natural-language access to all `wbox` commands with progressive disclosure and optional firm-specific conventions.
|
|
253
|
+
|
|
254
|
+
### Install the skill
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
# Copy the skill to your user-level Claude Code skills directory
|
|
258
|
+
# macOS/Linux
|
|
259
|
+
cp -r docs/skills/wealthbox-crm ~/.claude/skills/wealthbox-crm
|
|
260
|
+
|
|
261
|
+
# Windows (PowerShell)
|
|
262
|
+
Copy-Item -Recurse docs\skills\wealthbox-crm $env:USERPROFILE\.claude\skills\wealthbox-crm
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Usage
|
|
266
|
+
|
|
267
|
+
In any Claude Code conversation:
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
/wealthbox-crm create a contact for Jane Doe, she's a new prospect
|
|
271
|
+
/wealthbox-crm list my tasks due this week
|
|
272
|
+
/wealthbox-crm add a note to contact 123 about today's meeting
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Firm-specific configuration (optional)
|
|
276
|
+
|
|
277
|
+
To customize the skill for your firm's conventions:
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
cp ~/.claude/skills/wealthbox-crm/firm-config.example.md ~/.claude/skills/wealthbox-crm/firm-config.md
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Edit `firm-config.md` with your firm's required fields, defaults, naming conventions, and multi-step workflows. See the example file for all available options.
|
|
284
|
+
|
|
285
|
+
------------------------------------------------------------------------
|
|
286
|
+
|
|
188
287
|
## Troubleshooting
|
|
189
288
|
|
|
190
289
|
**401 Unauthorized** — Check your API token.
|
|
@@ -1,47 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
Name: wealthbox-cli
|
|
3
|
-
Version: 1.0.1
|
|
4
|
-
Summary: CLI and client library for the Wealthbox CRM API
|
|
5
|
-
Project-URL: Homepage, https://github.com/massive-value/wealthbox-cli
|
|
6
|
-
Project-URL: Issues, https://github.com/massive-value/wealthbox-cli/issues
|
|
7
|
-
Project-URL: Repository, https://github.com/massive-value/wealthbox-cli
|
|
8
|
-
Author: Kadin Bullock
|
|
9
|
-
License: Apache-2.0
|
|
10
|
-
License-File: LICENSE
|
|
11
|
-
Classifier: Environment :: Console
|
|
12
|
-
Classifier: Intended Audience :: Developers
|
|
13
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
14
|
-
Classifier: Programming Language :: Python :: 3
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
-
Requires-Python: >=3.11
|
|
19
|
-
Requires-Dist: httpx<1.0,>=0.27
|
|
20
|
-
Requires-Dist: pydantic<3.0,>=2.0
|
|
21
|
-
Requires-Dist: python-dotenv<2.0,>=1.0
|
|
22
|
-
Requires-Dist: tabulate<1.0,>=0.9
|
|
23
|
-
Requires-Dist: typer<1.0,>=0.12
|
|
24
|
-
Provides-Extra: dev
|
|
25
|
-
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
26
|
-
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
27
|
-
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
28
|
-
Requires-Dist: respx>=0.21; extra == 'dev'
|
|
29
|
-
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
30
|
-
Description-Content-Type: text/markdown
|
|
31
|
-
|
|
32
|
-
# Wealthbox CLI
|
|
1
|
+
# Wealthbox CLI — Command-Line Client for the Wealthbox CRM API
|
|
33
2
|
|
|
34
3
|
[](https://pypi.org/project/wealthbox-cli/)
|
|
4
|
+
[](https://pypi.org/project/wealthbox-cli/)
|
|
35
5
|
[](https://www.python.org/downloads/)
|
|
36
6
|
[](LICENSE)
|
|
37
7
|
|
|
38
|
-
|
|
8
|
+
**wealthbox-cli** (`wbox`) is a command-line tool and Python client library for the [Wealthbox CRM](https://www.wealthbox.com/) API. It gives financial advisors, developers, and RIA firms full CRUD access to contacts, tasks, events, notes, households, and more — directly from the terminal. Automate your CRM workflows, export data, and integrate Wealthbox into scripts and CI pipelines.
|
|
39
9
|
|
|
40
|
-
|
|
41
|
-
events, notes, users, categories, and more — directly from your
|
|
42
|
-
terminal.
|
|
43
|
-
|
|
44
|
-
Official API documentation: https://dev.wealthbox.com
|
|
10
|
+
[Documentation](https://massive-value.github.io/wealthbox-cli/) | [PyPI](https://pypi.org/project/wealthbox-cli/) | [API Reference](https://dev.wealthbox.com)
|
|
45
11
|
|
|
46
12
|
> **Disclaimer:** This is an unofficial, community-built tool. It is not affiliated with,
|
|
47
13
|
> endorsed by, or supported by Wealthbox or its parent company. "Wealthbox" is a trademark
|
|
@@ -49,6 +15,16 @@ Official API documentation: https://dev.wealthbox.com
|
|
|
49
15
|
|
|
50
16
|
------------------------------------------------------------------------
|
|
51
17
|
|
|
18
|
+
## Why Use wealthbox-cli?
|
|
19
|
+
|
|
20
|
+
- **No coding required** — structured CLI flags replace raw JSON and cURL commands
|
|
21
|
+
- **Automate CRM workflows** — script bulk updates, data exports, and scheduled tasks
|
|
22
|
+
- **Multiple output formats** — pipe JSON, CSV, or TSV directly to files or other tools
|
|
23
|
+
- **Built for financial advisors and developers** — covers contacts, households, tasks, events, notes, categories, and custom fields
|
|
24
|
+
- **Open source** — Apache 2.0 licensed, community-driven, and extensible
|
|
25
|
+
|
|
26
|
+
------------------------------------------------------------------------
|
|
27
|
+
|
|
52
28
|
## Features
|
|
53
29
|
|
|
54
30
|
- Full CRUD support for:
|
|
@@ -76,6 +52,18 @@ Official API documentation: https://dev.wealthbox.com
|
|
|
76
52
|
pip install wealthbox-cli
|
|
77
53
|
```
|
|
78
54
|
|
|
55
|
+
### With pipx (recommended for Ubuntu/Debian)
|
|
56
|
+
|
|
57
|
+
On systems where the system Python is externally managed (Ubuntu 23.04+, Debian 12+),
|
|
58
|
+
`pip install` outside a virtual environment is blocked by [PEP 668](https://peps.python.org/pep-0668/).
|
|
59
|
+
Use [pipx](https://pipx.pypa.io/) to install CLI tools in isolated environments:
|
|
60
|
+
|
|
61
|
+
``` bash
|
|
62
|
+
pipx install wealthbox-cli
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
This puts `wbox` and `wb` on your PATH without touching system Python.
|
|
66
|
+
|
|
79
67
|
### From source (development)
|
|
80
68
|
|
|
81
69
|
``` bash
|
|
@@ -146,10 +134,10 @@ For the full command reference see [docs/cli-reference.md](docs/cli-reference.md
|
|
|
146
134
|
For this workspace, the easiest entrypoint is:
|
|
147
135
|
|
|
148
136
|
```bash
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
137
|
+
scripts/run-wbox.sh me --format json
|
|
138
|
+
scripts/run-wbox.sh users list --format json
|
|
139
|
+
scripts/run-wbox.sh contacts list --per-page 1 --format json
|
|
140
|
+
scripts/run-wbox.sh contacts add person --first-name Jane --last-name Doe --format json
|
|
153
141
|
```
|
|
154
142
|
|
|
155
143
|
The wrapper:
|
|
@@ -159,7 +147,7 @@ The wrapper:
|
|
|
159
147
|
|
|
160
148
|
------------------------------------------------------------------------
|
|
161
149
|
|
|
162
|
-
## Project Structure
|
|
150
|
+
## Architecture and Project Structure
|
|
163
151
|
|
|
164
152
|
src/
|
|
165
153
|
wealthbox_tools/
|
|
@@ -168,6 +156,8 @@ The wrapper:
|
|
|
168
156
|
models/ # Pydantic v2 models for input validation
|
|
169
157
|
tests/ # pytest integration tests (respx mocks)
|
|
170
158
|
|
|
159
|
+
Built with [Typer](https://typer.tiangolo.com/), [httpx](https://www.python-httpx.org/), and [Pydantic v2](https://docs.pydantic.dev/).
|
|
160
|
+
|
|
171
161
|
**Client mixin pattern:** `WealthboxClient` inherits from resource mixins (`ContactsMixin`, `TasksMixin`, `EventsMixin`, etc.) plus `_WealthboxBase` (core HTTP, rate limiting, error handling). To add a new resource, create a mixin and register it in `client/__init__.py`.
|
|
172
162
|
|
|
173
163
|
**Rate limiting:** Sliding-window (300 req / 5-min window); state persists across processes via `~/.wbox_rate_limit.json`. 429 responses trigger automatic retry.
|
|
@@ -199,7 +189,7 @@ git pull
|
|
|
199
189
|
.venv/bin/pip install -e .
|
|
200
190
|
|
|
201
191
|
# Run the read-only smoke test
|
|
202
|
-
|
|
192
|
+
scripts/smoke_test.sh
|
|
203
193
|
```
|
|
204
194
|
|
|
205
195
|
Smoke test coverage:
|
|
@@ -216,6 +206,43 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for the full contributor guide.
|
|
|
216
206
|
|
|
217
207
|
------------------------------------------------------------------------
|
|
218
208
|
|
|
209
|
+
## Claude Code Skill
|
|
210
|
+
|
|
211
|
+
A `/wealthbox-crm` skill is included for [Claude Code](https://claude.ai/download) users. It provides natural-language access to all `wbox` commands with progressive disclosure and optional firm-specific conventions.
|
|
212
|
+
|
|
213
|
+
### Install the skill
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
# Copy the skill to your user-level Claude Code skills directory
|
|
217
|
+
# macOS/Linux
|
|
218
|
+
cp -r docs/skills/wealthbox-crm ~/.claude/skills/wealthbox-crm
|
|
219
|
+
|
|
220
|
+
# Windows (PowerShell)
|
|
221
|
+
Copy-Item -Recurse docs\skills\wealthbox-crm $env:USERPROFILE\.claude\skills\wealthbox-crm
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Usage
|
|
225
|
+
|
|
226
|
+
In any Claude Code conversation:
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
/wealthbox-crm create a contact for Jane Doe, she's a new prospect
|
|
230
|
+
/wealthbox-crm list my tasks due this week
|
|
231
|
+
/wealthbox-crm add a note to contact 123 about today's meeting
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Firm-specific configuration (optional)
|
|
235
|
+
|
|
236
|
+
To customize the skill for your firm's conventions:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
cp ~/.claude/skills/wealthbox-crm/firm-config.example.md ~/.claude/skills/wealthbox-crm/firm-config.md
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Edit `firm-config.md` with your firm's required fields, defaults, naming conventions, and multi-step workflows. See the example file for all available options.
|
|
243
|
+
|
|
244
|
+
------------------------------------------------------------------------
|
|
245
|
+
|
|
219
246
|
## Troubleshooting
|
|
220
247
|
|
|
221
248
|
**401 Unauthorized** — Check your API token.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to **wealthbox-cli** are documented here.
|
|
4
|
+
|
|
5
|
+
This project uses [Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## [1.0.2](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.2) — 2026-03-30
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- Redesigned comment handling — comments are now embedded in `get` commands
|
|
13
|
+
- Added ID shorthand for resource lookups
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## [1.0.1](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.1) — 2026-03-30
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- Updated README with API token instructions and config commands
|
|
21
|
+
- Added deploy workflow documentation
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## [1.0.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v1.0.0) — 2026-03-29
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
- Full CRUD for contacts (person, household, organization, trust), tasks, events, and notes
|
|
29
|
+
- Household member management (`add-member`, `remove-member`)
|
|
30
|
+
- Read/list access for users, activity, `me`, and categories
|
|
31
|
+
- Type-specific contact creation subcommands: `contacts add person|household|org|trust`
|
|
32
|
+
- `--more-fields` escape hatch for uncommon JSON fields on contacts, tasks, projects, opportunities, and workflows
|
|
33
|
+
- Multiple output formats: `json`, `table`, `csv`, `tsv` via `--format`
|
|
34
|
+
- Nested field flattening for tabular output (linked_to, email_addresses, tags, etc.)
|
|
35
|
+
- Client-side filtering for fields the API doesn't support server-side (e.g. `--assigned-to` on contacts)
|
|
36
|
+
- Category and custom field lookups (resource-scoped and workspace-level)
|
|
37
|
+
- Token management via `wbox config set-token|show|clear`
|
|
38
|
+
- Authentication via `--token` flag, `WEALTHBOX_TOKEN` env var, config file, or `.env`
|
|
39
|
+
- Sliding-window rate limiter (300 req / 5-min window) with automatic retry on 429
|
|
40
|
+
- GitHub Actions CI (lint + test across Python 3.11, 3.12, 3.13)
|
|
41
|
+
- PyPI publishing via trusted publishers (OIDC)
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## [0.8.5](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.8.5)
|
|
46
|
+
|
|
47
|
+
### Changed
|
|
48
|
+
- Standardized CLI help text across all commands
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## [0.8.4](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.8.4)
|
|
53
|
+
|
|
54
|
+
### Added
|
|
55
|
+
- PyPI badges and install instructions
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## [0.8.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.8.0)
|
|
60
|
+
|
|
61
|
+
### Added
|
|
62
|
+
- Events CRUD support
|
|
63
|
+
- Notes CRUD support (create, read, update — delete not supported by API)
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## [0.7.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.7.0)
|
|
68
|
+
|
|
69
|
+
### Added
|
|
70
|
+
- Tasks CRUD support
|
|
71
|
+
- Task categories
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## [0.6.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.6.0)
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
- Household member management commands
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## [0.5.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.5.0)
|
|
83
|
+
|
|
84
|
+
### Added
|
|
85
|
+
- Contact CRUD operations
|
|
86
|
+
- Contact categories and metadata lookups
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## [0.4.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.4.0)
|
|
91
|
+
|
|
92
|
+
### Added
|
|
93
|
+
- Output format support (`--format json|table|csv|tsv`)
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## [0.3.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.3.0)
|
|
98
|
+
|
|
99
|
+
### Added
|
|
100
|
+
- User listing and `me` command
|
|
101
|
+
- Activity feed with cursor-based pagination
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## [0.2.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.2.0)
|
|
106
|
+
|
|
107
|
+
### Added
|
|
108
|
+
- Rate limiting (sliding-window, 300 req / 5-min)
|
|
109
|
+
- Token configuration (`--token`, env var, `.env`)
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## [0.1.0](https://github.com/massive-value/wealthbox-cli/releases/tag/v0.1.0)
|
|
114
|
+
|
|
115
|
+
### Added
|
|
116
|
+
- Initial release — basic Wealthbox API client with CLI scaffolding
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Contributing to Wealthbox CLI
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing to **wealthbox-cli**!
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Development Setup
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
git clone https://github.com/massive-value/wealthbox-cli
|
|
11
|
+
cd wealthbox-cli
|
|
12
|
+
python -m venv .venv
|
|
13
|
+
source .venv/bin/activate # macOS/Linux
|
|
14
|
+
# OR
|
|
15
|
+
.venv\Scripts\activate # Windows
|
|
16
|
+
|
|
17
|
+
pip install -e ".[dev]"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Configure your Wealthbox API token:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
wbox config set-token
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Running Tests
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pytest
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Tests use [respx](https://lundberg.github.io/respx/) to mock HTTP at the transport layer — no real API calls are made.
|
|
35
|
+
|
|
36
|
+
## Code Style
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
ruff check src/ tests/
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- **ruff** for linting (E, F, I rules; 120-char line length)
|
|
43
|
+
- **mypy** in strict mode
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Project Architecture
|
|
48
|
+
|
|
49
|
+
Three layers under `src/wealthbox_tools/`:
|
|
50
|
+
|
|
51
|
+
| Layer | Purpose |
|
|
52
|
+
|-------|---------|
|
|
53
|
+
| `cli/` | [Typer](https://typer.tiangolo.com/) commands — user-facing, delegates to client |
|
|
54
|
+
| `client/` | Async HTTP client built from [httpx](https://www.python-httpx.org/) mixins |
|
|
55
|
+
| `models/` | [Pydantic v2](https://docs.pydantic.dev/) models for input validation |
|
|
56
|
+
|
|
57
|
+
`WealthboxClient` (in `client/__init__.py`) inherits from all resource mixins plus `_WealthboxBase` (core HTTP, rate limiting, error handling).
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Adding a New Resource
|
|
62
|
+
|
|
63
|
+
1. Add Pydantic models to `models/<resource>.py` (CreateInput, UpdateInput, ListQuery)
|
|
64
|
+
2. Add a client mixin to `client/<resource>.py` with async CRUD methods
|
|
65
|
+
3. Register the mixin in `client/__init__.py`
|
|
66
|
+
4. Add CLI commands to `cli/<resource>.py`
|
|
67
|
+
5. Register the CLI sub-app in `cli/main.py`
|
|
68
|
+
6. Add category types via `make_category_command()` if applicable
|
|
69
|
+
7. Add tests in `tests/test_<resource>_create.py` and `tests/test_<resource>_update.py`
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## CI
|
|
74
|
+
|
|
75
|
+
Pull requests and pushes to `main` run GitHub Actions CI:
|
|
76
|
+
|
|
77
|
+
- **Lint:** `ruff check src/ tests/`
|
|
78
|
+
- **Test:** `pytest` across Python 3.11, 3.12, 3.13
|
|
79
|
+
|
|
80
|
+
Both must pass before merging.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Pull Requests
|
|
85
|
+
|
|
86
|
+
- Keep PRs focused — one feature or fix per PR
|
|
87
|
+
- All tests must pass
|
|
88
|
+
- No ruff errors
|
|
89
|
+
- Update the CLI reference docs if commands change
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Reporting Issues
|
|
94
|
+
|
|
95
|
+
Open an issue at [github.com/massive-value/wealthbox-cli/issues](https://github.com/massive-value/wealthbox-cli/issues) with steps to reproduce, expected behavior, and actual behavior.
|