2026-03-27 14:56:06 +00:00
< p align = "center" >
2026-04-02 15:18:08 +00:00
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/banner.svg" alt = "pbi-cli" width = "850" / >
2026-03-27 14:56:06 +00:00
< / p >
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-27 14:56:06 +00:00
< p align = "center" >
< b > Give Claude Code the Power BI skills it needs.< / b > < br / >
feat: v3.10.0 -- audit fixes, 12 skills, README rewrite
- Fix 4 code bugs: TopN filter cross-table, theme_set corruption,
visual_bind type annotation, tmdl_diff hierarchy pluralization
- Add missing VisualTypeError and ReportNotFoundError to errors.py
- Register 5 command groups in CLI (report, visual, filters, format, bookmarks)
- Split monolithic report skill into 5 focused skills (12 total):
power-bi-report, power-bi-visuals, power-bi-pages, power-bi-themes,
power-bi-filters
- Update CLAUDE.md snippet for 12 skills organised by layer
- Add diff-tmdl section to deployment skill
- Write CHANGELOG entries for v3.0.0 through v3.10.0
- Rewrite README.md and README.pypi.md for both model and report layers
- Add skill triggering test suite (19/19 passing)
- 488 tests passing, ruff clean
2026-04-01 22:07:52 +00:00
Install once, then just ask Claude to work with your semantic models < i > and< / i > reports.
2026-03-27 14:56:06 +00:00
< / p >
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-27 14:56:06 +00:00
< p align = "center" >
< a href = "https://pypi.org/project/pbi-cli-tool/" > < img src = "https://img.shields.io/pypi/pyversions/pbi-cli-tool?style=flat-square&color=3776ab&label=Python" alt = "Python" > < / a >
< a href = "https://github.com/MinaSaad1/pbi-cli/actions" > < img src = "https://img.shields.io/github/actions/workflow/status/MinaSaad1/pbi-cli/ci.yml?branch=master&style=flat-square&label=CI" alt = "CI" > < / a >
< a href = "https://github.com/MinaSaad1/pbi-cli/blob/master/LICENSE" > < img src = "https://img.shields.io/github/license/MinaSaad1/pbi-cli?style=flat-square&color=06d6a0" alt = "License" > < / a >
2026-03-27 16:27:25 +00:00
< a href = "https://www.linkedin.com/in/minasaad1/" > < img src = "https://img.shields.io/badge/LinkedIn-Mina%20Saad-0A66C2?style=flat-square&logo=linkedin&logoColor=white" alt = "LinkedIn" > < / a >
< a href = "https://mina-saad.com" > < img src = "https://img.shields.io/badge/Website-mina--saad.com-58a6ff?style=flat-square&logo=googlechrome&logoColor=white" alt = "Website" > < / a >
2026-03-27 14:56:06 +00:00
< / p >
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
< p align = "center" >
< a href = "#why-pbi-cli" > Why pbi-cli< / a > •
< a href = "#get-started" > Get Started< / a > •
2026-04-02 15:18:08 +00:00
< a href = "#semantic-model-layer" > Modeling< / a > •
< a href = "#report-layer" > Reporting< / a > •
2026-03-27 14:56:06 +00:00
< a href = "#skills" > Skills< / a > •
< a href = "#all-commands" > All Commands< / a > •
< a href = "#contributing" > Contributing< / a >
< / p >
2026-03-26 12:16:28 +00:00
---
2026-03-27 14:56:06 +00:00
## Why pbi-cli?
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/before-after.svg" alt = "Why pbi-cli" width = "850" / >
< / p >
2026-03-26 17:29:35 +00:00
2026-04-02 14:21:05 +00:00
< p align = "center" >
2026-04-03 09:49:23 +00:00
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/layers.svg" alt = "Dual-Layer Architecture" width = "850" / >
< / p >
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/stats.svg" alt = "pbi-cli at a Glance" width = "850" / >
2026-04-02 14:21:05 +00:00
< / p >
2026-04-10 20:06:32 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/downloads-chart.svg" alt = "pbi-cli cumulative downloads from PyPI" width = "850" / >
< / p >
< p align = "center" >
< sub > Cumulative downloads, refreshed daily from < a href = "https://pypistats.org/packages/pbi-cli-tool" > pypistats.org< / a > via GitHub Actions.< / sub >
< / p >
2026-03-26 12:16:28 +00:00
---
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-26 12:38:04 +00:00
## Get Started
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
```bash
2026-03-26 14:38:44 +00:00
pipx install pbi-cli-tool # 1. Install (handles PATH automatically)
2026-04-05 18:37:05 +00:00
pbi-cli skills install # 2. Register Claude Code skills (one-time setup)
pbi connect # 3. Connect to Power BI Desktop
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
```
2026-04-05 18:37:05 +00:00
Open Power BI Desktop with a `.pbix` file, run the three commands above, and start asking Claude.
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-27 05:19:21 +00:00
> **Requires:** Windows with Python 3.10+ and Power BI Desktop running.
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-27 14:56:06 +00:00
< details >
< summary > < b > Alternative: give Claude the repo URL< / b > < / summary >
```
Install and set up pbi-cli from https://github.com/MinaSaad1/pbi-cli.git
```
Claude will clone, install, connect, and set up skills automatically.
< / details >
2026-03-26 14:03:31 +00:00
< details >
2026-03-26 14:27:13 +00:00
< summary > < b > Using pip instead of pipx?< / b > < / summary >
2026-03-26 14:03:31 +00:00
```bash
2026-03-26 14:27:13 +00:00
pip install pbi-cli-tool
2026-03-26 14:03:31 +00:00
```
2026-03-26 14:27:13 +00:00
On Windows, `pip install` often places the `pbi` command in a directory that isn't on your PATH.
**Fix: Add the Scripts directory to PATH**
2026-03-26 14:03:31 +00:00
```bash
python -c "import site; print(site.getusersitepackages().replace('site-packages','Scripts'))"
```
2026-03-27 14:56:06 +00:00
Add the printed path to your system PATH, then restart your terminal. We recommend `pipx` to avoid this entirely.
2026-03-26 14:03:31 +00:00
< / details >
2026-03-26 12:38:04 +00:00
---
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-04-02 15:18:08 +00:00
## Semantic Model Layer
Ask Claude to work with your Power BI semantic model. Requires `pbi connect` .
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-27 14:56:06 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/chat-demo.svg" alt = "Just Ask Claude" width = "850" / >
< / p >
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
### Create measures in bulk
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/bulk-operations.svg" alt = "Bulk operations" width = "850" / >
< / p >
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
### Debug broken DAX
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/dax-debugging.svg" alt = "DAX debugging" width = "850" / >
< / p >
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
### Snapshot and restore your model
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/backup-restore.svg" alt = "Backup and restore" width = "850" / >
< / p >
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
### Audit your model for issues
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/model-health-check.svg" alt = "Model health check" width = "850" / >
< / p >
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
### Test row-level security
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/rls-testing.svg" alt = "RLS testing" width = "850" / >
< / p >
2026-03-26 12:16:28 +00:00
2026-04-02 15:18:08 +00:00
---
## Report Layer
Ask Claude to build and manage your Power BI reports. No connection needed -- works directly on PBIR files.
2026-04-02 14:21:05 +00:00
< p align = "center" >
2026-04-02 15:05:21 +00:00
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/chat-demo-report.svg" alt = "Ask Claude to build reports" width = "850" / >
< / p >
2026-04-02 15:18:08 +00:00
### Build a report in 6 steps
2026-04-02 15:05:21 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/report-workflow.svg" alt = "Report workflow" width = "850" / >
< / p >
2026-04-02 15:18:08 +00:00
### Visuals, pages, themes, filters
2026-04-02 15:05:21 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/report-layer.svg" alt = "Report layer capabilities" width = "850" / >
< / p >
2026-04-02 15:18:08 +00:00
### 32 visual types
2026-04-02 15:05:21 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/visual-types.svg" alt = "32 Visual Types" width = "850" / >
2026-04-02 14:21:05 +00:00
< / p >
2026-03-27 14:56:06 +00:00
---
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
## Architecture
2026-03-26 12:16:28 +00:00
2026-03-27 14:56:06 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/architecture-flow.svg" alt = "Architecture" width = "850" / >
< / p >
2026-03-26 12:16:28 +00:00
feat: v3.10.0 -- audit fixes, 12 skills, README rewrite
- Fix 4 code bugs: TopN filter cross-table, theme_set corruption,
visual_bind type annotation, tmdl_diff hierarchy pluralization
- Add missing VisualTypeError and ReportNotFoundError to errors.py
- Register 5 command groups in CLI (report, visual, filters, format, bookmarks)
- Split monolithic report skill into 5 focused skills (12 total):
power-bi-report, power-bi-visuals, power-bi-pages, power-bi-themes,
power-bi-filters
- Update CLAUDE.md snippet for 12 skills organised by layer
- Add diff-tmdl section to deployment skill
- Write CHANGELOG entries for v3.0.0 through v3.10.0
- Rewrite README.md and README.pypi.md for both model and report layers
- Add skill triggering test suite (19/19 passing)
- 488 tests passing, ruff clean
2026-04-01 22:07:52 +00:00
**Two layers, one CLI:**
- **Semantic Model layer** -- Direct in-process .NET interop from Python to Power BI Desktop via TOM/ADOMD. No MCP server, no external binaries, sub-second execution.
- **Report layer** -- Reads and writes PBIR (Enhanced Report Format) JSON files directly. No connection needed. Works with `.pbip` projects.
2026-03-26 12:16:28 +00:00
2026-04-02 14:45:33 +00:00
### Desktop Auto-Sync
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/auto-sync.svg" alt = "Desktop Auto-Sync" width = "850" / >
< / p >
2026-03-26 12:38:04 +00:00
< details >
2026-03-27 14:56:06 +00:00
< summary > < b > Configuration details< / b > < / summary >
2026-03-27 05:19:21 +00:00
2026-03-27 14:56:06 +00:00
All config lives in `~/.pbi-cli/` :
2026-03-27 05:19:21 +00:00
```
2026-03-27 14:56:06 +00:00
~/.pbi-cli/
config.json # Default connection preference
connections.json # Named connections
repl_history # REPL command history
```
2026-03-27 05:19:21 +00:00
2026-03-27 14:56:06 +00:00
Bundled DLLs ship inside the Python package (`pbi_cli/dlls/`).
2026-03-27 05:19:21 +00:00
< / details >
2026-03-26 12:16:28 +00:00
---
2026-04-02 15:18:08 +00:00
## Skills
2026-04-05 18:37:05 +00:00
After running `pbi-cli skills install` , Claude Code discovers **12 Power BI skills** . Each skill teaches Claude a different area. You don't need to memorize commands.
2026-04-02 15:18:08 +00:00
< p align = "center" >
< img src = "https://raw.githubusercontent.com/MinaSaad1/pbi-cli/master/assets/skills-hub.svg" alt = "12 Skills" width = "850" / >
< / p >
### Semantic Model Skills (require `pbi connect`)
| Skill | What you say | What Claude does |
|-------|-------------|-----------------|
| **DAX** | *"What are the top 10 products by revenue?"* | Writes and executes DAX queries, validates syntax |
| **Modeling** | *"Create a star schema with Sales and Calendar"* | Creates tables, relationships, measures, hierarchies |
| **Deployment** | *"Save a snapshot before I make changes"* | Exports/imports TMDL, manages transactions, diffs snapshots |
| **Security** | *"Set up RLS for regional managers"* | Creates roles, filters, perspectives |
| **Docs** | *"Document everything in this model"* | Generates data dictionaries, measure inventories |
| **Partitions** | *"Show me the M query for the Sales table"* | Manages partitions, expressions, calendar config |
| **Diagnostics** | *"Why is this query so slow?"* | Traces queries, checks model health, benchmarks |
### Report Layer Skills (no connection needed)
| Skill | What you say | What Claude does |
|-------|-------------|-----------------|
| **Report** | *"Create a new report project for Sales"* | Scaffolds PBIR reports, validates structure, previews layout |
| **Visuals** | *"Add a bar chart showing revenue by region"* | Adds, binds, updates, bulk-manages 32 visual types |
| **Pages** | *"Add an Executive Overview page"* | Manages pages, bookmarks, visibility, drillthrough |
| **Themes** | *"Apply our corporate brand colours"* | Applies themes, conditional formatting, colour scales |
| **Filters** | *"Show only the top 10 products"* | Adds page/visual filters (TopN, date, categorical) |
---
2026-03-26 12:38:04 +00:00
## All Commands
2026-03-26 12:16:28 +00:00
feat: v3.10.0 -- audit fixes, 12 skills, README rewrite
- Fix 4 code bugs: TopN filter cross-table, theme_set corruption,
visual_bind type annotation, tmdl_diff hierarchy pluralization
- Add missing VisualTypeError and ReportNotFoundError to errors.py
- Register 5 command groups in CLI (report, visual, filters, format, bookmarks)
- Split monolithic report skill into 5 focused skills (12 total):
power-bi-report, power-bi-visuals, power-bi-pages, power-bi-themes,
power-bi-filters
- Update CLAUDE.md snippet for 12 skills organised by layer
- Add diff-tmdl section to deployment skill
- Write CHANGELOG entries for v3.0.0 through v3.10.0
- Rewrite README.md and README.pypi.md for both model and report layers
- Add skill triggering test suite (19/19 passing)
- 488 tests passing, ruff clean
2026-04-01 22:07:52 +00:00
27 command groups covering both the semantic model and the report layer.
| Category | Commands |
|----------|----------|
| **Queries** | `dax execute` , `dax validate` , `dax clear-cache` |
| **Model** | `table` , `column` , `measure` , `relationship` , `hierarchy` , `calc-group` |
| **Deploy** | `database export-tmdl` , `database import-tmdl` , `database export-tmsl` , `database diff-tmdl` , `transaction` |
| **Security** | `security-role` , `perspective` |
| **Connect** | `connect` , `disconnect` , `connections list` , `connections last` |
| **Data** | `partition` , `expression` , `calendar` , `advanced culture` |
| **Diagnostics** | `trace start/stop/fetch/export` , `model stats` |
| **Report** | `report create` , `report info` , `report validate` , `report preview` , `report reload` |
| **Pages** | `report add-page` , `report delete-page` , `report get-page` , `report set-background` , `report set-visibility` |
| **Visuals** | `visual add/get/list/update/delete` , `visual bind` , `visual bulk-bind/bulk-update/bulk-delete` , `visual where` |
| **Filters** | `filters list` , `filters add-categorical/add-topn/add-relative-date` , `filters remove/clear` |
| **Formatting** | `format get/clear` , `format background-gradient/background-conditional/background-measure` |
| **Bookmarks** | `bookmarks list/get/add/delete/set-visibility` |
| **Tools** | `setup` , `repl` , `skills install/list/uninstall` |
2026-03-26 12:16:28 +00:00
2026-03-26 12:38:04 +00:00
Use `--json` for machine-readable output (for scripts and AI agents):
2026-03-26 12:16:28 +00:00
2026-03-26 12:38:04 +00:00
```bash
pbi --json measure list
pbi --json dax execute "EVALUATE Sales"
feat: v3.10.0 -- audit fixes, 12 skills, README rewrite
- Fix 4 code bugs: TopN filter cross-table, theme_set corruption,
visual_bind type annotation, tmdl_diff hierarchy pluralization
- Add missing VisualTypeError and ReportNotFoundError to errors.py
- Register 5 command groups in CLI (report, visual, filters, format, bookmarks)
- Split monolithic report skill into 5 focused skills (12 total):
power-bi-report, power-bi-visuals, power-bi-pages, power-bi-themes,
power-bi-filters
- Update CLAUDE.md snippet for 12 skills organised by layer
- Add diff-tmdl section to deployment skill
- Write CHANGELOG entries for v3.0.0 through v3.10.0
- Rewrite README.md and README.pypi.md for both model and report layers
- Add skill triggering test suite (19/19 passing)
- 488 tests passing, ruff clean
2026-04-01 22:07:52 +00:00
pbi --json visual list --page overview
2026-03-26 12:16:28 +00:00
```
2026-03-26 12:38:04 +00:00
Run `pbi <command> --help` for full options.
2026-03-26 12:16:28 +00:00
---
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-26 12:38:04 +00:00
## REPL Mode
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-27 14:56:06 +00:00
For interactive work, the REPL keeps a persistent connection:
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
```
2026-03-26 12:38:04 +00:00
$ pbi repl
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-26 12:38:04 +00:00
pbi> connect --data-source localhost:54321
Connected: localhost-54321
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-26 12:38:04 +00:00
pbi(localhost-54321)> measure list
pbi(localhost-54321)> dax execute "EVALUATE TOPN(5, Sales)"
pbi(localhost-54321)> exit
2026-03-26 12:16:28 +00:00
```
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-26 12:38:04 +00:00
Tab completion, command history, and a dynamic prompt showing your active connection.
2026-03-26 12:16:28 +00:00
---
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
## Development
```bash
2026-03-26 12:16:28 +00:00
git clone https://github.com/MinaSaad1/pbi-cli.git
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
cd pbi-cli
pip install -e ".[dev]"
2026-03-26 12:16:28 +00:00
```
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-26 12:16:28 +00:00
```bash
ruff check src/ tests/ # Lint
mypy src/ # Type check
feat: v3.10.0 -- audit fixes, 12 skills, README rewrite
- Fix 4 code bugs: TopN filter cross-table, theme_set corruption,
visual_bind type annotation, tmdl_diff hierarchy pluralization
- Add missing VisualTypeError and ReportNotFoundError to errors.py
- Register 5 command groups in CLI (report, visual, filters, format, bookmarks)
- Split monolithic report skill into 5 focused skills (12 total):
power-bi-report, power-bi-visuals, power-bi-pages, power-bi-themes,
power-bi-filters
- Update CLAUDE.md snippet for 12 skills organised by layer
- Add diff-tmdl section to deployment skill
- Write CHANGELOG entries for v3.0.0 through v3.10.0
- Rewrite README.md and README.pypi.md for both model and report layers
- Add skill triggering test suite (19/19 passing)
- 488 tests passing, ruff clean
2026-04-01 22:07:52 +00:00
pytest -m "not e2e" # Run tests (488 tests)
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
```
2026-03-26 12:16:28 +00:00
---
2026-04-05 18:37:05 +00:00
## Bundled third-party software
`pbi-cli-tool` ships with Microsoft Analysis Services client library
assemblies (`Microsoft.AnalysisServices.*.dll`) under `src/pbi_cli/dlls/` .
These binaries are **not** covered by pbi-cli's MIT license. They are
redistributed unmodified under the Microsoft Software License Terms for
Microsoft Analysis Management Objects (AMO) and Microsoft Analysis
Services - ADOMD.NET. Full terms are in
[THIRD_PARTY_LICENSES.md ](THIRD_PARTY_LICENSES.md ) and the companion
[NOTICE ](NOTICE ) file. By installing `pbi-cli-tool` you agree to those
terms in addition to the MIT License that applies to the rest of the
package.
---
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
## Contributing
2026-03-26 12:16:28 +00:00
Contributions are welcome! Please open an issue first to discuss what you'd like to change.
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
1. Fork the repository
2026-03-26 12:38:04 +00:00
2. Create a feature branch
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
3. Make your changes with tests
2026-03-26 12:38:04 +00:00
4. Open a pull request
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-26 12:16:28 +00:00
---
< p align = "center" >
< a href = "https://github.com/MinaSaad1/pbi-cli" > < img src = "https://img.shields.io/badge/GitHub-pbi--cli-1a1a2e?style=flat-square&logo=github" alt = "GitHub" > < / a >
< a href = "https://pypi.org/project/pbi-cli-tool/" > < img src = "https://img.shields.io/badge/PyPI-pbi--cli--tool-f2c811?style=flat-square&logo=pypi&logoColor=white" alt = "PyPI" > < / a >
< / p >
feat: add REPL mode, test suite, CI/CD, and Claude Skills (Sprints 6-8)
Sprint 6 - REPL Mode + Polish:
- Error hierarchy (PbiCliError, McpToolError, etc.) for clean REPL error handling
- Interactive REPL with prompt-toolkit (persistent MCP connection, command completion, history)
- REPL-aware run_tool() and connection commands that reuse shared client
- README.md and CHANGELOG.md
Sprint 7 - Tests + CI/CD:
- 120 tests across unit, command, and e2e test files (79% coverage)
- MockPbiMcpClient with canned responses for test isolation
- GitHub Actions CI (lint + typecheck + test matrix: 3 OS x 3 Python)
- GitHub Actions release workflow for PyPI trusted publishing
Sprint 8 - Claude Skills + Installer:
- 5 bundled SKILL.md files (modeling, dax, deployment, security, docs)
- `pbi skills install/list/uninstall` command for Claude Code discovery
- Skills packaged with wheel via setuptools package-data
2026-03-26 11:54:24 +00:00
2026-03-26 12:16:28 +00:00
< p align = "center" >
2026-04-05 18:37:05 +00:00
< sub > MIT License — bundled Microsoft DLLs are licensed separately, see < a href = "THIRD_PARTY_LICENSES.md" > THIRD_PARTY_LICENSES.md< / a > < / sub >
2026-03-26 12:16:28 +00:00
< / p >