Official agent skill

Enable Tables Offline

by microsoft in microsoft/power-platform-skills

Internal mobile-app workflow read and executed only by /setup-offline-profile to enable Dataverse table prerequisites for a Mobile Offline Profile.

OfficialMITAuto-check: notes

Install Enable Tables Offline

skills CLI
$ npx skills add microsoft/power-platform-skills --skill enable-tables-offline -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install microsoft/power-platform-skills enable-tables-offline --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/microsoft/power-platform-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/mobile-apps/skills/enable-tables-offline .claude/skills/enable-tables-offline && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
enable-tables-offline
GitHub stars
972
Token cost
~2.2k tokens
SKILL.md length
792 words
Files
1
Skills in repo
87
Repo updated
First seen
Licence
MIT

At a glance

Internal mobile-app workflow read and executed only by /setup-offline-profile to enable Dataverse table prerequisites for a Mobile Offline Profile.

  • Works in 7 steps: Verify project & auth → Resolve table list → Inspect current state → …
  • SKILL.md covers Workflow and Status code
  • Calls node

What it does

Enable Tables Offline is an agent skill from microsoft/power-platform-skills, published by the product's own GitHub organization. Internal mobile-app workflow read and executed only by /setup-offline-profile to enable Dataverse table prerequisites for a Mobile Offline Profile.

Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The repository describes itself as: A plugin marketplace for GitHub Copilot and other AI agents that provides Power Platform development plugins, including reusable skills, agents, and commands for building and… The licence is MIT.

Example prompts

  • “/enable-tables-offline”

Requirements

  • Pre-approved tools (allowed-tools): Read, Edit, Write, Grep, Glob, Bash, AskUserQuestion, EnterPlanMode, ExitPlanMode

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Verify project & auth
  2. Resolve table list
  3. Inspect current state
  4. PUT EntityMetadata per table
  5. Publish customizations (targeted PublishXml, with PublishAllXml fallback)
  6. Verify
  7. Summary

What it can do on your machine

Read from SKILL.md and the folder at commit 0d044b8. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Edit
    • Write
    • Grep
    • Glob
    • Bash
    • AskUserQuestion
    • EnterPlanMode
    • ExitPlanMode

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Enable Tables Offline loads about 2.2k tokens when it runs. Until then it costs about 42 tokens; SKILL.md has 792 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~42
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Edit, Write, Grep, Glob, Bash, AskUserQuestion, EnterPlanMode, ExitPlanMode

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from microsoft/power-platform-skills at commit 0d044b8, republished under its MIT licence (© microsoft). 792 words, ~2,194 tokens.

Download SKILL.mdSave it as .claude/skills/enable-tables-offline/SKILL.md (or your agent's skills folder).
name
enable-tables-offline
description
Internal mobile-app workflow read and executed only by /setup-offline-profile to enable Dataverse table prerequisites for a Mobile Offline Profile.
allowed-tools
Read, Edit, Write, Grep, Glob, Bash, AskUserQuestion, EnterPlanMode, ExitPlanMode
user-invocable
false
disable-model-invocation
true
model
sonnet

Shared instructions: shared-instructions.md — read first.

References:

Enable Tables Offline

Flip IsAvailableOffline=true AND ChangeTrackingEnabled=true on the EntityMetadata of one or more Dataverse tables, then publish customizations. This is the prerequisite shown in Image 4 of the maker portal ("Can be taken offline" + "Track changes") — without both, a table CANNOT be added to a Mobile Offline Profile.

Sequential (Dataverse metadata lock) and idempotent: re-running on an already-enabled table is a no-op.

Workflow

  1. Verify project & auth → 2. Resolve table list → 3. Inspect current state → Gate → 4. PUT EntityMetadata per table → 5. Publish → 6. Verify → 7. Summary

Step 1 — Verify project & auth
bash
test -f power.config.json && test -f app.config.js
node "${PLUGIN_ROOT}/scripts/resolve-environment.js" "$(node -e \"console.log(require('./power.config.json').environmentId)\")"

Capture the Environment URL from the resolver for <envUrl>. STOP if not authenticated.

Step 2 — Resolve table list

Tables to enable come from one of (in order):

SourceUsed when
$ARGUMENTSUser passed a comma- or space-separated list of logical names (e.g. /enable-tables-offline cr123_note,cr123_visit)
.datamodel-manifest.jsonDefault — read tables[].logicalName for every Dataverse-backed table in the app
AskUserQuestionOnly if both above are absent. Show the table list from src/generated/services/*Service.ts filenames and let the user pick.

If the resolved list is empty, STOP with: "No Dataverse tables found in this project. Run /add-dataverse first."

Step 3 — Inspect current state

Print before starting:

"→ Querying current IsAvailableOffline + ChangeTrackingEnabled for <N> table(s)…"

For each table, in sequence:

bash
node "${PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> GET \
  "EntityDefinitions(LogicalName='<table>')?\$select=LogicalName,DisplayName,IsAvailableOffline,ChangeTrackingEnabled,IsCustomizable"

Build a status table:

text
| Table              | IsAvailableOffline | ChangeTrackingEnabled | IsCustomizable | Needs change? |
|--------------------|--------------------|-----------------------|----------------|---------------|
| cr123_note         | false              | false                 | true           | YES (both)    |
| cr123_visit        | true               | false                 | true           | YES (track)   |
| contact            | true               | true                  | true           | NO            |

Hard rule: if IsCustomizable.Value=false on any table, that table CANNOT be modified. Drop it from the change set and flag in DONE_WITH_CONCERNS — system-managed tables (most OOB) require an admin solution patch path the skill does not handle.

Gate — Approval before mutation

Enter plan mode with the status table from Step 3 plus the planned operation per table. Wait for user ExitPlanMode before proceeding.

Plan body:

text
The following EntityMetadata changes will be PUT in sequence:

cr123_note   → set IsAvailableOffline=true, ChangeTrackingEnabled=true
cr123_visit  → set ChangeTrackingEnabled=true (IsAvailableOffline already true)

After all updates, a single PublishAllXml request will commit the changes.

Tables already in the desired state are skipped (no API call).

If the user rejects, STOP. If they approve, proceed.

Step 4 — PUT EntityMetadata per table

Print before starting:

"→ Updating EntityMetadata for <N> table(s) sequentially (Dataverse serializes metadata writes)…"

⚠️ Concurrency rule — do not violate. Metadata writes hold an exclusive lock per org. Issue one PUT, wait for 2xx, then the next. No batching, no parallel calls. Same rule as /add-dataverse Step 5.

For each table needing change (skip ones already in target state):

bash
node "${PLUGIN_ROOT}/scripts/update-entity-offline-flags.js" <envUrl> \
  --table <table> \
  --offline true \
  --tracking true

The helper:

  • Re-reads EntityMetadata to pick up the current MetadataId + SchemaName (both required in the PUT body — Dataverse rejects PUT without them).
  • Sends MSCRM.MergeLabels: true so display labels are preserved (the alternative wipes labels — never use false).
  • Returns { "status": 200, "noop": true, ... } if the table is already in the target state (skip silently).
  • Returns { "status": 200, "skipped": "uncustomizable", ... } for tables whose IsCustomizable.Value=false (system-managed; you must surface as DONE_WITH_CONCERNS).
  • Returns { "status": 204, ... } on successful update.
  • Handles 401 token refresh and 429 back-off automatically.

If the helper returns status 403 PrivilegeCheckFailed: the user lacks "Customize System" privilege. Print the table name and which privilege is missing, then STOP.

If status 400 with ChangeTrackingEnabled cannot be disabled: ignore — that path only triggers when going from true to false, which we never do.

Print ✓ <table> after each 204; print ↷ <table> (already enabled) for no-ops; print ⚠ <table> (uncustomizable) for skips.

Show full SKILL.md (289 more words)Show less
Step 5 — Publish customizations (targeted PublishXml, with PublishAllXml fallback)

Print before starting:

"→ Publishing customizations (targeted PublishXml on the entities just edited)…"

Use targeted PublishXml scoped to the entities that were actually modified — avoids the org-wide rate-limit storms (0x80071151 "concurrent PublishAll already running") observed on shared envs. Empirical 2026-05-25.

bash
# Build the <entities> XML body from the list of tables modified in Step 4
node "${PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> POST \
  "PublishXml" --body '{
    "ParameterXml": "<importexportxml><entities><entity>cr720_fcbflag</entity><entity>cr720_rolloutevent</entity></entities></importexportxml>"
  }'

Substitute <entity>...</entity> lines for every table the helper PUT'd flags on in Step 4. Tables that were no-ops or uncustomizable are omitted.

On 204: success — continue to Step 6.

On 429 / 0x80071151 ("concurrent publish already running"): back off automatically via dataverse-request.js's retry logic. If still failing after 4 retries, return DONE_WITH_CONCERNS: publish bottlenecked on shared env; metadata changes are committed but maker portal will not refresh until next publish. The downstream skill (/setup-offline-profile) can proceed — metadata-level writes are durable.

Fallback to PublishAllXml (only when the targeted call returns a non-rate-limit error like 0x80048d19 malformed body):

bash
node "${PLUGIN_ROOT}/scripts/dataverse-request.js" <envUrl> POST \
  "PublishAllXml" --body '{}'

Same timeout-but-success handling as /setup-offline-profile Step 8: if the client times out but a follow-up GET on the table's EntityMetadata shows the flags are set, treat as success.

Step 6 — Verify

Print before starting:

"→ Re-querying EntityMetadata to confirm flags are set…"

Re-run the Step 3 query for each modified table. Assert IsAvailableOffline=true and ChangeTrackingEnabled=true on every changed row. If any disagree, BLOCKED — something rejected the PUT silently (extremely unlikely; usually an indication of a managed-solution layer that's masking the unmanaged change).

Step 7 — Summary

Print:

text
✓ Offline prerequisites enabled on <N> table(s):
  - cr123_note    (IsAvailableOffline + ChangeTrackingEnabled set)
  - cr123_visit   (ChangeTrackingEnabled set; IsAvailableOffline already on)

Skipped (already enabled): contact

Next: run /setup-offline-profile to design the offline profile that uses these tables.

Update memory-bank.md under ## Offline profile with the timestamp and table list.

Status code

Final line of the skill's response is one of:

  • DONE — all requested tables now have both flags set
  • DONE_WITH_CONCERNS: <list> — some tables skipped (uncustomizable, publish warning, etc.)
  • NEEDS_CONTEXT: <missing> — couldn't resolve table list and user didn't provide
  • BLOCKED: <reason> — auth failure, privilege check failed, or post-PUT verification disagreed

© microsoft, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugins/mobile-apps/skills/enable-tables-offline of microsoft/power-platform-skills.

Open the folder on GitHubat commit 0d044b8

Compare with similar skills

Enable Tables Offline next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Enable Tables Offline compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Enable Tables Offline this skillmicrosoft/power-platform-skills972—~2.2kAutomated safety check: NotesMIT
Eol Internal Enablementdeanpeters/Product-Manager-Skills7.2k—~3.1kAutomated safety check: PassCustom licence
Executealirezarezvani/claude-skills28k—~831Automated safety check: PassMIT
Debugging Executionsn8n-io/n8n207k—~2.6kAutomated safety check: PassCustom licence
Internal Commsalirezarezvani/claude-skills28k—~3.4kAutomated safety check: PassMIT
Internal Communicationsickn33/agentic-awesome-skills47k1 repos~3.4kAutomated safety check: PassMIT

Similar skills

  • Eol Internal Enablement

    deanpeters/Product-Manager-Skills

    Build the support FAQ, sales talking points, and objection handling teams need before an EOL announcement.

    7.2k GitHub stars~3.1k tokensUpdated 1 mo ago
    Sales & SupportAuto-check passed
  • Execute

    alirezarezvani/claude-skills

    /cs:execute <decision — Generate a 90-day execution plan with weekly milestones, DRIs, and check-in cadence from an approved decision.

    28k GitHub stars~831 tokensUpdated 1 mo ago
    Product & Project ManagementAuto-check passed
  • Official

    Debug failed or wrong-output workflow executions using executions tools.

    207k GitHub stars~2.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Internal Comms

    alirezarezvani/claude-skills

    A skill your agent uses when a Head of People Ops, BizOps lead, or Internal Communications owner needs to draft and sequence an internal-only change-management communication — a re-org announcement…

    28k GitHub stars~3.4k tokensUpdated 1 mo ago
    Writing & ContentAuto-check passed
  • Internal Communication

    sickn33/agentic-awesome-skills

    Internal communication log: title, type, date, department, host and attendees, agenda, action items, follow-up date, meeting link and delivery status.

    47k GitHub starsUsed in 1 repo~3.4k tokens
    Writing & ContentAuto-check passed
  • Official

    A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill…

    180k GitHub starsUsed in 38 repos~378 tokens
    Writing & ContentAuto-check passed

More from microsoft/power-platform-skills

All 87 skills in this repo
  • Manage Firewall

    microsoft/power-platform-skills

    Official

    Inspects and configures the web application firewall (WAF) in front of a Power Pages production site.

    972 GitHub stars~4.5k tokensUpdated today
    Auto-check: notes
  • Manage Headers

    microsoft/power-platform-skills

    Official

    Inspects and configures the security headers a Power Pages site sends to browsers — Content Security Policy, frame and clickjacking protection, cross-origin sharing, cookie behavior, and related…

    972 GitHub stars~3k tokensUpdated today
    Auto-check: notes
  • Scan Code

    microsoft/power-platform-skills

    Official

    Scans a Power Pages site project for security issues in source code and dependencies.

    972 GitHub stars~3.4k tokensUpdated today
    Auto-check: notes
  • Scan Site

    microsoft/power-platform-skills

    Official

    Runs a security scan on a deployed Power Pages site, fetches the latest scan report, and produces a plain-language summary.

    972 GitHub stars~3.2k tokensUpdated today
    Auto-check: notes
  • Setup Datamodel

    microsoft/power-platform-skills

    Official

    Creates Dataverse tables, columns, and relationships for a Power Pages site based on a data model proposal.

    972 GitHub stars~4k tokensUpdated today
    Auto-check: notes
  • Add Server Logic

    microsoft/power-platform-skills

    Official

    Creates, edits, and manages Power Pages Server Logic files — server-side JavaScript that runs securely on the Power Pages runtime.

    972 GitHub stars~18k tokensUpdated today
    Auto-check: notes

Questions about Enable Tables Offline

What does Enable Tables Offline do?

Internal mobile-app workflow read and executed only by /setup-offline-profile to enable Dataverse table prerequisites for a Mobile Offline Profile. Enable Tables Offline is an agent skill from microsoft/power-platform-skills, published by the product's own GitHub organization. Internal mobile-app workflow read and executed only by /setup-offline-profile to enable Dataverse table prerequisites for a Mobile Offline Profile.

How do I install Enable Tables Offline in Claude Code?

Run `npx skills add microsoft/power-platform-skills --skill enable-tables-offline -a claude-code`. Or copy the skill folder (plugins/mobile-apps/skills/enable-tables-offline in microsoft/power-platform-skills) into .claude/skills/enable-tables-offline in your project. Claude Code loads it when a task matches its description.

How do I install Enable Tables Offline in Codex?

Run `npx skills add microsoft/power-platform-skills --skill enable-tables-offline -a codex`. Or copy the skill folder (plugins/mobile-apps/skills/enable-tables-offline in microsoft/power-platform-skills) into .agents/skills/enable-tables-offline in your project. Codex loads it when a task matches its description.

Can I use Enable Tables Offline in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add microsoft/power-platform-skills --skill enable-tables-offline -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/enable-tables-offline, .gemini/skills/enable-tables-offline, .github/skills/enable-tables-offline and .opencode/skills/enable-tables-offline in your project.

What does Enable Tables Offline need to run?

Going by SKILL.md and its folder, Enable Tables Offline needs the command-line tools its instructions call (node). Its frontmatter pre-approves these tools: Read, Edit, Write, Grep, Glob, Bash, AskUserQuestion, EnterPlanMode, ExitPlanMode.

Does Enable Tables Offline access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Enable Tables Offline safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Enable Tables Offline use?

Enable Tables Offline is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Enable Tables Offline use?

About 2.2k tokens (SKILL.md is roughly 8.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Enable Tables Offline?

Skills that share tags, products or a category with Enable Tables Offline: Eol Internal Enablement (deanpeters/Product-Manager-Skills, 7.2k stars), Execute (alirezarezvani/claude-skills, 28k stars), Debugging Executions (n8n-io/n8n, 207k stars) and Internal Comms (alirezarezvani/claude-skills, 28k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Enable Tables Offline?

microsoft (a GitHub organization, an official publisher) maintains it in microsoft/power-platform-skills, which has 972 GitHub stars. The repository holds 87 skills in this directory. The repository was last updated on October 7, 2026.

Source: microsoft/power-platform-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.