Install any skill in seconds. Free to start, no credit card required.
Get Started Free →data-goblin/te-cli
Expert guidance for the cross-platform Tabular Editor CLI (the `te` binary, currently in preview) that manages Power BI / Analysis Services semantic models from the terminal on macOS, Linux, and Windows.
Passed 18 of 20 test cases with the skill, and 4 of 20 without it.
and 24 more in the full report
17 fixed5 passed either way2 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 15 test cases the skill fixed. Same model, same prompt, with and without the skill.
I need to format the DAX expressions across every measure in my local model `./model` all at once without invoking the CLI in a loop N times or running dry-run edits. Provide the command to format all measures and persist the changes.
| Checked | Without skill | With skill |
|---|---|---|
| Uses `te script` to execute bulk C# automation. | Missed | Passed |
| Calls the DAX formatting method across all model measures. | Passed | Passed |
| Saves the formatted expressions directly to the model files. | Passed | Passed |
The instructions your model reads when the skill loads.
te)To get the te CLI yourself (as the agent), see references/get-te-cli.md.
The te CLI is a single self-contained binary that loads, edits, validates, deploys, refreshes, and tests semantic models against TMDL/BIM files, Power BI Desktop, and cloud workspaces (Power BI, Fabric, Azure AS, SSAS). It is built on the same TOMWrapper that powers Tabular Editor 3, so model edits behave like the desktop app.
Always pass --output-format json when driving te programmatically. The default text/table output uses tables and ANSI styling that mangle in agent transcripts; JSON is parseable and avoids rendering issues.
Limited public preview. Preview builds stop functioning after 2026-10-31. No license is required during preview. Issues and feedback: https://github.com/TabularEditor/CLI
Not the TE2 CLI. This is a different product from the legacy Windows-only TabularEditor.exe (TE2). If the user invokes TE2 flag syntax (-D, -S, -A, -B, -TMDL, -O, -C, -V, -G), route it through the compat layer (TE_COMPAT=te2) or invoke TabularEditor.exe directly. See references/te2-migration.md.
te <command> in a terminalTabularEditor.exe (TE2) to teTabularEditor.exe natively (TE2); use that product directlyc-sharp-scripting and bpa-rules skillste --version and te auth status. If not authenticated, ask the user to run te auth login.te --help and te <command> --help the first time composing a command; flags are still evolving during preview.--model <path> (-m) for a local model, or -s <server> -d <database> for a deployed one, on every command. te get Sales/Amount ./model is rejected with Unrecognized positional argument; write te get Sales/Amount --model ./model.-p Name=Value. Read with te get <path> -p Expression, write with te set <path> -p Expression="...", repeat -p for several properties, or drop the flag on set (te set Sales/Amount Description="Net" FormatString="#,0"). The old -q <name> -i <value> pair no longer exists. Discover the names first: te get <path> --properties --output-format json lists every property -p accepts on that object with its type, writability and allowed values; an unknown name in an error points at the same listing. Clear a property with --unset <Name> (or -p Name=null); a piped value (-p Name=-) is stored verbatim.te connect state is per-shell-session and does NOT survive across separate Bash tool calls (each call is a fresh shell). Pass --model (and -s/-d for remote) on every command, or set TE_SESSION=<name> before the first call to share state.--save. te set, te add, te remove, te move, te script, te macro run, and te bpa run --fix apply the change in memory, print a before/after diff, and end with Dry run - nothing saved. Add --save to persist. Run once bare to check the diff, then re-run with --save (unless interactiveEditMode is set to save).te deploy and te refresh are dry runs too. Without --execute they connect read-only and print the TMSL they would send. Both ask for confirmation at a terminal, so in CI pass --execute --force --non-interactive; an unattended --execute without --force stops with an error. The deploy target is --target-server / --target-database; -s/-d always mean the model you are deploying from. te deploy exits non-zero when the server accepts the metadata but parks objects with errors, so a green exit means the model is queryable.te deploy and te save-as. Bypass deliberately: --skip-bpa, --fix-bpa, or bpa.onDeploy / bpa.onSave config (keys are nested under bpa., not flat).te list, te get, te set, te add, te validate, te bpa run, te script) work on a local model via --model. Commands that execute DAX or touch data (te query, te vertipaq, te refresh, te test run, te test snapshot) need a deployed model: pass -s/-d (or an active connection); --model alone errors with "No server specified". te vertipaq --import <file.vpax> is the offline exception.{ } * ? or spaces: te get "Tables/'{foo}'", te get "'Net Sales'[Sales Amount]". KPIs and Sets are container keywords in filter paths, so a table literally named KPIs is te list "'KPIs'". Every path the CLI prints (errors, --paths-only, JSON objectPath) is already quoted and pastes straight back.ps and shell history). Use --auth env with AZURE_CLIENT_ID/AZURE_CLIENT_SECRET/AZURE_TENANT_ID, stdin (-), or --auth managed-identity.test cases passed, vs 4 / 20 without
Published skills whose descriptions closely match this one, with their headline benchmark lift.
More skills from the same source and nearby in the registry, with their headline benchmark lift.