Skip to content
Development
Skill

/te-cli

Expert guidance for the cross-platform Tabular Editor CLI (the `te` binary, in preview) that manages Power BI and Analysis Services semantic models from the terminal on macOS, Linux and Windows. Use when the user mentions the `te` CLI or Tabular Editor CLI, runs a `te` command,

From plugin
power-bi-agentic-development
1.1k35 skills8 agents2 commands1 MCP

Claude Code

$ npx -y skills add data-goblin/power-bi-agentic-development --skill te-cli --agent claude-code

SKILL.md

te-cli.SKILL.md
name: te-cli
description: Expert guidance for the cross-platform Tabular Editor CLI (the `te` binary, in preview) that manages Power BI and Analysis Services semantic models from the terminal on macOS, Linux and Windows. Use when the user mentions the `te` CLI or Tabular Editor CLI, runs a `te` command, or wants to scaffold, inspect, edit, validate, run BPA on, query, deploy, refresh or migrate a semantic model from a terminal or CI pipeline. Also use for DAX regression tests, measure contracts and invariants, data quality and orphan-key checks, snapshot baselines or A/B comparison of two deployed models, even when the user does not name `te`. Not for the legacy Windows-only TabularEditor.exe (TE2).

Tabular Editor CLI (`te`)

To get the `te` CLI yourself (as the agent), see [references/get-te-cli.md](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-12-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`.

When to use this skill

  • The user mentions "te CLI", "the new Tabular Editor CLI", or runs a `te <command>` in a terminal
  • The user wants to scaffold, inspect, edit, validate, deploy, refresh, query, or test a semantic model from the terminal on any OS
  • The user wants to convert TMDL, BIM, or PBIP, run BPA, or format DAX from the command line
  • The user wants to set up a DAX regression test suite, snapshot baselines, or A/B-compare two deployed models
  • The user is building a CI/CD pipeline (GitHub Actions or Azure DevOps) that validates, tests, or deploys a semantic model to Power BI / Fabric
  • The user is migrating CI/CD pipelines from `TabularEditor.exe` (TE2) to `te`

When NOT to use this skill

  • The user explicitly wants to run `TabularEditor.exe` natively (TE2); use that product directly
  • The user asks about Tabular Editor 3 desktop UI features (Preferences.json, MacroActions.json, Layouts.json); consult https://docs.tabulareditor.com/
  • The user wants help authoring a C# script body or a BPA rule expression itself rather than running it; use the `c-sharp-scripting` and `bpa-rules` skills

Critical general rules

  • First use in a session: run `te --version` and `te auth status`. If not authenticated, ask the user to run `te auth login`.
  • Run `te --help` and `te <command> --help` the first time composing a command; flags are still evolving during preview.
  • **The model is always a flag, never a trailing path.** Pass `--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`.
  • **Properties are `-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.
  • **Every mutation is a dry run until `--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.
  • The BPA gate is ON by default for `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).
  • Metadata commands (`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 vert
Read more
@data-goblin
Ships withpower-bi-agentic-development

Power BI AI skills and Power BI agents for Claude Code and GitHub Copilot: a plugin marketplace of Power BI skills, subagents, and hooks for semantic models, DAX, TMDL, reports, and AI dashboards. Includes Microsoft Fabric skills and Fabric agents. Weekly updates.

1.1k35 skills8 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
1.1k
Star history of data-goblin/power-bi-agentic-development on GitHub, a chart by star-history.com

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills13d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react4d252k
@facebook@facebookInstall Skill

Questions about te-cli.

Which coding agents can use te-cli?
te-cli installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.