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.
Files changed (78) hide show
  1. wealthbox_cli-1.0.3/.github/workflows/docs.yml +39 -0
  2. wealthbox_cli-1.0.3/.gitignore +50 -0
  3. wealthbox_cli-1.0.1/README.md → wealthbox_cli-1.0.3/PKG-INFO +112 -13
  4. wealthbox_cli-1.0.1/PKG-INFO → wealthbox_cli-1.0.3/README.md +71 -44
  5. wealthbox_cli-1.0.3/docs/changelog.md +116 -0
  6. wealthbox_cli-1.0.3/docs/contributing.md +95 -0
  7. wealthbox_cli-1.0.3/docs/getting-started.md +110 -0
  8. wealthbox_cli-1.0.3/docs/index.md +77 -0
  9. wealthbox_cli-1.0.3/docs/promotion.md +135 -0
  10. wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/SKILL.md +68 -0
  11. wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/firm-config.example.md +111 -0
  12. wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/contacts.md +151 -0
  13. wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/events.md +88 -0
  14. wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/households.md +40 -0
  15. wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/lookups.md +73 -0
  16. wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/notes.md +67 -0
  17. wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/opportunities.md +87 -0
  18. wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/projects.md +60 -0
  19. wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/tasks.md +101 -0
  20. wealthbox_cli-1.0.3/docs/skills/wealthbox-crm/references/workflows.md +90 -0
  21. wealthbox_cli-1.0.3/mkdocs.yml +67 -0
  22. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/pyproject.toml +24 -4
  23. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/_util.py +133 -6
  24. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/contacts.py +2 -5
  25. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/events.py +23 -8
  26. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/main.py +0 -2
  27. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/notes.py +23 -8
  28. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/opportunities.py +25 -17
  29. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/projects.py +18 -7
  30. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/tasks.py +34 -6
  31. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/workflows.py +19 -7
  32. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/comments.py +8 -0
  33. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/enums.py +8 -1
  34. wealthbox_cli-1.0.1/.gitignore +0 -216
  35. wealthbox_cli-1.0.1/src/wealthbox_tools/cli/comments.py +0 -51
  36. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/.env.example +0 -0
  37. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/.github/workflows/ci.yml +0 -0
  38. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/CONTRIBUTING.md +0 -0
  39. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/LICENSE +0 -0
  40. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/SECURITY.md +0 -0
  41. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/docs/cli-reference.md +0 -0
  42. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/__init__.py +0 -0
  43. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/__init__.py +0 -0
  44. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/_config.py +0 -0
  45. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/activity.py +0 -0
  46. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/categories.py +0 -0
  47. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/config.py +0 -0
  48. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/households.py +0 -0
  49. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/me.py +0 -0
  50. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/users.py +0 -0
  51. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/__init__.py +0 -0
  52. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/activity.py +0 -0
  53. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/base.py +0 -0
  54. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/categories.py +0 -0
  55. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/contacts.py +0 -0
  56. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/events.py +0 -0
  57. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/households.py +0 -0
  58. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/me.py +0 -0
  59. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/notes.py +0 -0
  60. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/opportunities.py +0 -0
  61. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/projects.py +0 -0
  62. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/tasks.py +0 -0
  63. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/users.py +0 -0
  64. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/workflows.py +0 -0
  65. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/__init__.py +0 -0
  66. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/activity.py +0 -0
  67. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/comments.py +0 -0
  68. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/common.py +0 -0
  69. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/contacts.py +0 -0
  70. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/custom_fields.py +0 -0
  71. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/events.py +0 -0
  72. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/households.py +0 -0
  73. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/notes.py +0 -0
  74. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/opportunities.py +0 -0
  75. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/projects.py +0 -0
  76. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/tasks.py +0 -0
  77. {wealthbox_cli-1.0.1 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/workflows.py +0 -0
  78. {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
- # Wealthbox CLI
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
  [![PyPI version](https://img.shields.io/pypi/v/wealthbox-cli)](https://pypi.org/project/wealthbox-cli/)
45
+ [![Downloads](https://img.shields.io/pypi/dm/wealthbox-cli)](https://pypi.org/project/wealthbox-cli/)
4
46
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue)](https://www.python.org/downloads/)
5
47
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
6
48
 
7
- A command-line interface for interacting with the Wealthbox CRM API.
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
- This tool provides structured access to contacts, households, tasks,
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
- ./run-wbox.sh me --format json
119
- ./run-wbox.sh users list --format json
120
- ./run-wbox.sh contacts list --per-page 1 --format json
121
- ./run-wbox.sh contacts add person --first-name Jane --last-name Doe --format json
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
- ./smoke_test.sh
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
- Metadata-Version: 2.4
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
  [![PyPI version](https://img.shields.io/pypi/v/wealthbox-cli)](https://pypi.org/project/wealthbox-cli/)
4
+ [![Downloads](https://img.shields.io/pypi/dm/wealthbox-cli)](https://pypi.org/project/wealthbox-cli/)
35
5
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue)](https://www.python.org/downloads/)
36
6
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
37
7
 
38
- A command-line interface for interacting with the Wealthbox CRM API.
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
- This tool provides structured access to contacts, households, tasks,
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
- ./run-wbox.sh me --format json
150
- ./run-wbox.sh users list --format json
151
- ./run-wbox.sh contacts list --per-page 1 --format json
152
- ./run-wbox.sh contacts add person --first-name Jane --last-name Doe --format json
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
- ./smoke_test.sh
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.