From canvas-apps
Edits existing Power Apps canvas apps via .pa.yaml files. Syncs from coauthoring session, checks for content, assesses simple vs complex edits, and orchestrates changes or generation.
npx claudepluginhub microsoft/power-platform-skills --plugin canvas-appsThis skill is limited to using the following tools:
Make the following changes to the existing Canvas App:
Acquire memory dumps from live systems/VMs and analyze with Volatility 3 for processes, networks, DLLs, injections in incident response or malware hunts.
Provides x86-64/ARM disassembly patterns, calling conventions, control flow recognition for static analysis of executables and compiled binaries.
Identifies anti-debugging checks like IsDebuggerPresent, NtQueryInformationProcess in Windows binaries; suggests bypasses via patches/hooks/scripts for malware analysis, CTFs, authorized RE.
Make the following changes to the existing Canvas App:
$ARGUMENTS
This skill uses two paths depending on edit complexity:
canvas-edit-planner + parallel canvas-screen-editorBefore syncing or editing, create a subfolder to contain the app's YAML files:
$ARGUMENTS — extract the app name if present, otherwise
use a 2–3 word summary of what is being editedexpense-tracker)Bash: mkdir -p <folder-name>All file reads, writes, and syncs operate in this folder.
Sync the canvas app:
Call the sync_canvas MCP tool targeting the working directory. This pulls the current app
state from the coauthoring session into local .pa.yaml files. Only proceed after
sync_canvas completes successfully.
Check for meaningful content:
After sync_canvas completes, read the synced .pa.yaml files and check whether the app
has meaningful content. An app is considered empty if:
.pa.yaml files were written, orGroupContainer) with no
leaf controls inside themIf the app is empty, do not proceed with the edit workflow. Instead, inform the user:
The synced app appears to be empty — no existing screens or controls were found. Switching to app generation mode to build the app from scratch.
Then follow the full generate-canvas-app workflow, using the user's original request as the generation requirements.
If the app has meaningful content, proceed to Phase 2.
Read all synced .pa.yaml files. Based on $ARGUMENTS and the current app state, determine
whether this is a simple or complex edit:
Simple — all of the following are true:
Examples: change a button color, update label text, fix a formula, adjust a control size.
Complex — any of the following are true:
Examples: add a settings screen, redesign the home screen layout, integrate a new connector, change the navigation flow across the app.
Read ${CLAUDE_PLUGIN_ROOT}/references/TechnicalGuide.md before making changes.
Apply the changes directly:
Edit the relevant .pa.yaml files with the required changes, following conventions
from TechnicalGuide.md.
Validate by calling compile_canvas on the working directory after making changes.
On failure, read the errors, fix with Edit, and re-compile. Iterate until clean.
Present a brief summary:
Edit complete. [1-2 sentence description of what was changed.] Compiled clean after [N] pass(es).
Invoke the canvas-edit-planner agent using the Task tool.
Pass a prompt that includes:
$ARGUMENTS.pa.yaml files were synced)${CLAUDE_PLUGIN_ROOT}.pa.yaml files found in the working directoryExample prompt:
You are the canvas-edit-planner agent. Plan the following edits to an existing Canvas App:
[paste $ARGUMENTS here]
Working directory: [absolute working directory path] Plugin root: ${CLAUDE_PLUGIN_ROOT} Synced files: [list of .pa.yaml filenames]
Follow the instructions in your agent file. Write canvas-edit-plan.md to the working directory. Return the list of screens to modify/add and the plan document path when complete.
Wait for the planner to finish. The planner will present the edit plan to the user via plan mode and wait for approval before returning. Do not proceed to Phase 4 until the planner task completes successfully.
After the planner completes, read canvas-edit-plan.md from the working directory.
Extract the list of screens to modify and screens to add from the plan's tables.
Invoke one canvas-screen-editor agent per affected screen. Fire all invocations in a
single message (parallel execution) — do not wait for one editor to finish before starting
the next.
For each screen, pass a prompt that includes:
canvas-edit-plan.mdExample prompt per screen:
You are the canvas-screen-editor agent. [Modify / Add] the [Screen Name] screen.
- Action: [Modify / Add]
- Target file: [ScreenName].pa.yaml
- Plan document: [absolute path to canvas-edit-plan.md]
- Working directory: [absolute working directory path]
Follow the instructions in your agent file. [Edit / Write] [ScreenName].pa.yaml and return your result when done. Do not call compile_canvas — validation is handled by the skill.
Wait for all screen-editor tasks to complete before proceeding.
After all screen-editors have finished, call compile_canvas on the working directory.
On success: Proceed to Phase 6.
On failure: Read every error in the output. Errors will reference specific files and line numbers. For each error:
Read the referenced .pa.yaml fileEditcompile_canvas againRepeat until compile_canvas reports no errors. Do not give up after a single fix attempt —
iterate until the entire directory compiles clean.
Track how many compile_canvas passes were needed.
Present a final summary:
Edit complete.
Action Screen File Status [Modify / Add] [Screen Name] [filename].pa.yaml Done Compiled clean after [N] pass(es).
If any errors remain after exhausting fixes, report them explicitly so the user knows what needs manual attention.