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.
Files changed (77) 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.2/README.md → wealthbox_cli-1.0.3/PKG-INFO +100 -13
  4. wealthbox_cli-1.0.2/PKG-INFO → wealthbox_cli-1.0.3/README.md +59 -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.2 → wealthbox_cli-1.0.3}/pyproject.toml +24 -4
  23. wealthbox_cli-1.0.2/.gitignore +0 -216
  24. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/.env.example +0 -0
  25. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/.github/workflows/ci.yml +0 -0
  26. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/CONTRIBUTING.md +0 -0
  27. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/LICENSE +0 -0
  28. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/SECURITY.md +0 -0
  29. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/docs/cli-reference.md +0 -0
  30. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/__init__.py +0 -0
  31. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/__init__.py +0 -0
  32. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/_config.py +0 -0
  33. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/_util.py +0 -0
  34. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/activity.py +0 -0
  35. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/categories.py +0 -0
  36. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/config.py +0 -0
  37. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/contacts.py +0 -0
  38. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/events.py +0 -0
  39. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/households.py +0 -0
  40. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/main.py +0 -0
  41. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/me.py +0 -0
  42. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/notes.py +0 -0
  43. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/opportunities.py +0 -0
  44. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/projects.py +0 -0
  45. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/tasks.py +0 -0
  46. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/users.py +0 -0
  47. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/cli/workflows.py +0 -0
  48. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/__init__.py +0 -0
  49. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/activity.py +0 -0
  50. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/base.py +0 -0
  51. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/categories.py +0 -0
  52. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/comments.py +0 -0
  53. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/contacts.py +0 -0
  54. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/events.py +0 -0
  55. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/households.py +0 -0
  56. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/me.py +0 -0
  57. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/notes.py +0 -0
  58. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/opportunities.py +0 -0
  59. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/projects.py +0 -0
  60. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/tasks.py +0 -0
  61. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/users.py +0 -0
  62. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/client/workflows.py +0 -0
  63. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/__init__.py +0 -0
  64. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/activity.py +0 -0
  65. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/comments.py +0 -0
  66. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/common.py +0 -0
  67. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/contacts.py +0 -0
  68. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/custom_fields.py +0 -0
  69. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/enums.py +0 -0
  70. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/events.py +0 -0
  71. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/households.py +0 -0
  72. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/notes.py +0 -0
  73. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/opportunities.py +0 -0
  74. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/projects.py +0 -0
  75. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/tasks.py +0 -0
  76. {wealthbox_cli-1.0.2 → wealthbox_cli-1.0.3}/src/wealthbox_tools/models/workflows.py +0 -0
  77. {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
- # 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:
@@ -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
- ./run-wbox.sh me --format json
131
- ./run-wbox.sh users list --format json
132
- ./run-wbox.sh contacts list --per-page 1 --format json
133
- ./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
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
- ./smoke_test.sh
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
- Metadata-Version: 2.4
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
  [![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:
@@ -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
- ./run-wbox.sh me --format json
162
- ./run-wbox.sh users list --format json
163
- ./run-wbox.sh contacts list --per-page 1 --format json
164
- ./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
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
- ./smoke_test.sh
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.