wealthbox-cli 1.0.2__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.2/README.md → wealthbox_cli-1.0.3/PKG-INFO +100 -13
- wealthbox_cli-1.0.2/PKG-INFO → wealthbox_cli-1.0.3/README.md +59 -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.2 → wealthbox_cli-1.0.3}/pyproject.toml +24 -4
- wealthbox_cli-1.0.2/.gitignore +0 -216
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/.env.example +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/.github/workflows/ci.yml +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/CONTRIBUTING.md +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/LICENSE +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/SECURITY.md +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/docs/cli-reference.md +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/__init__.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/__init__.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/_config.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/_util.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/activity.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/categories.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/config.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/contacts.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/events.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/households.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/main.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/me.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/notes.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/opportunities.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/projects.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/tasks.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/users.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/workflows.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/__init__.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/activity.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/base.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/categories.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/comments.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/contacts.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/events.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/households.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/me.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/notes.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/opportunities.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/projects.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/tasks.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/users.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/workflows.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/__init__.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/activity.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/comments.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/common.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/contacts.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/custom_fields.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/enums.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/events.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/households.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/notes.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/opportunities.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/projects.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/tasks.py +0 -0
- {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/workflows.py +0 -0
- {wealthbox_cli-1.0.2 → 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:
|
|
@@ -127,10 +175,10 @@ For the full command reference see [docs/cli-reference.md](docs/cli-reference.md
|
|
|
127
175
|
For this workspace, the easiest entrypoint is:
|
|
128
176
|
|
|
129
177
|
```bash
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
|
134
182
|
```
|
|
135
183
|
|
|
136
184
|
The wrapper:
|
|
@@ -140,7 +188,7 @@ The wrapper:
|
|
|
140
188
|
|
|
141
189
|
------------------------------------------------------------------------
|
|
142
190
|
|
|
143
|
-
## Project Structure
|
|
191
|
+
## Architecture and Project Structure
|
|
144
192
|
|
|
145
193
|
src/
|
|
146
194
|
wealthbox_tools/
|
|
@@ -149,6 +197,8 @@ The wrapper:
|
|
|
149
197
|
models/ # Pydantic v2 models for input validation
|
|
150
198
|
tests/ # pytest integration tests (respx mocks)
|
|
151
199
|
|
|
200
|
+
Built with [Typer](https://typer.tiangolo.com/), [httpx](https://www.python-httpx.org/), and [Pydantic v2](https://docs.pydantic.dev/).
|
|
201
|
+
|
|
152
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`.
|
|
153
203
|
|
|
154
204
|
**Rate limiting:** Sliding-window (300 req / 5-min window); state persists across processes via `~/.wbox_rate_limit.json`. 429 responses trigger automatic retry.
|
|
@@ -180,7 +230,7 @@ git pull
|
|
|
180
230
|
.venv/bin/pip install -e .
|
|
181
231
|
|
|
182
232
|
# Run the read-only smoke test
|
|
183
|
-
|
|
233
|
+
scripts/smoke_test.sh
|
|
184
234
|
```
|
|
185
235
|
|
|
186
236
|
Smoke test coverage:
|
|
@@ -197,6 +247,43 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for the full contributor guide.
|
|
|
197
247
|
|
|
198
248
|
------------------------------------------------------------------------
|
|
199
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
|
+
|
|
200
287
|
## Troubleshooting
|
|
201
288
|
|
|
202
289
|
**401 Unauthorized** — Check your API token.
|
|
@@ -1,47 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
Name: wealthbox-cli
|
|
3
|
-
Version: 1.0.2
|
|
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:
|
|
@@ -158,10 +134,10 @@ For the full command reference see [docs/cli-reference.md](docs/cli-reference.md
|
|
|
158
134
|
For this workspace, the easiest entrypoint is:
|
|
159
135
|
|
|
160
136
|
```bash
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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
|
|
165
141
|
```
|
|
166
142
|
|
|
167
143
|
The wrapper:
|
|
@@ -171,7 +147,7 @@ The wrapper:
|
|
|
171
147
|
|
|
172
148
|
------------------------------------------------------------------------
|
|
173
149
|
|
|
174
|
-
## Project Structure
|
|
150
|
+
## Architecture and Project Structure
|
|
175
151
|
|
|
176
152
|
src/
|
|
177
153
|
wealthbox_tools/
|
|
@@ -180,6 +156,8 @@ The wrapper:
|
|
|
180
156
|
models/ # Pydantic v2 models for input validation
|
|
181
157
|
tests/ # pytest integration tests (respx mocks)
|
|
182
158
|
|
|
159
|
+
Built with [Typer](https://typer.tiangolo.com/), [httpx](https://www.python-httpx.org/), and [Pydantic v2](https://docs.pydantic.dev/).
|
|
160
|
+
|
|
183
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`.
|
|
184
162
|
|
|
185
163
|
**Rate limiting:** Sliding-window (300 req / 5-min window); state persists across processes via `~/.wbox_rate_limit.json`. 429 responses trigger automatic retry.
|
|
@@ -211,7 +189,7 @@ git pull
|
|
|
211
189
|
.venv/bin/pip install -e .
|
|
212
190
|
|
|
213
191
|
# Run the read-only smoke test
|
|
214
|
-
|
|
192
|
+
scripts/smoke_test.sh
|
|
215
193
|
```
|
|
216
194
|
|
|
217
195
|
Smoke test coverage:
|
|
@@ -228,6 +206,43 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for the full contributor guide.
|
|
|
228
206
|
|
|
229
207
|
------------------------------------------------------------------------
|
|
230
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
|
+
|
|
231
246
|
## Troubleshooting
|
|
232
247
|
|
|
233
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.
|