# Al Code Review

> Review Business Central AL code using BCQuality's curated rules. Use for an AL app folder, pull request, working-tree diff, branch, or individual AL file when BCQuality is installed as a standalone plugin.

- Skill: `microsoft/al-code-review` (Agent Skill)
- Install (CLI): `npx skillmds@latest add microsoft/al-code-review`
- Raw SKILL.md: https://api.skillmd.com/api/skills/microsoft/al-code-review/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Microsoft (https://skillmd.com/u/microsoft)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/microsoft/al-code-review

---


# AL code review

This is BCQuality's host-native adapter for standalone plugin installations. It
is not a BCQuality action skill and contains no review or routing policy. Its
only responsibility is to translate the caller's request into an Entry task
context and execute the resulting dispatch.

## Execute

1. Resolve `PLUGIN_ROOT` to the directory containing this plugin's root
   `plugin.json`. This file is
   `PLUGIN_ROOT/skills/al-code-review/SKILL.md`; when the host does not expose
   the plugin root, resolve it two levels above this file.
2. Build the `task-context` required by
   `PLUGIN_ROOT/skills/entry.md`:
   - Copy the caller's actual request verbatim into `goal`; do not replace a
     focused request such as "review performance" with a generic full-review
     goal.
   - Set `inputs-available` to the inputs actually available to the review:
     `folder-path` for an app or source folder, `pr-diff` for changes, or
     `file-path` for one file. Pass the caller's actual path with the selected
     input type; for a whole-app request in the current working directory, use
     that directory as the `folder-path`.
   - Set `technologies: [al]` when the input is known to be AL.
   - Pass `bc-version`, `countries`, and `application-area` only when supplied
     or reliably determined.
   - If `BCQUALITY_ENABLED_LAYERS` is set, split its comma-separated value and
     pass the trimmed, non-empty entries as `enabled-layers`; otherwise omit the
     field and let Entry apply its default.
   - If `BCQUALITY_DISABLED_SKILLS` is set, split its comma-separated value and
     pass the trimmed, non-empty entries as `disabled-skills`; otherwise omit
     the field.
3. Read and execute `PLUGIN_ROOT/skills/entry.md` exactly as written, including
   its Preparation step. Entry is authoritative for index freshness, routing,
   defaults, and failure behavior; this adapter must not duplicate or weaken
   those rules. Entry is written for a checkout whose root is the current
   directory, so resolve every repo-relative path it names against
   `PLUGIN_ROOT` rather than the caller's working directory, which is the
   user's own project. In particular, run Preparation's index build as
   `pwsh PLUGIN_ROOT/tools/Build-KnowledgeIndex.ps1`: the generator resolves
   its own root and writes `PLUGIN_ROOT/knowledge-index.json`, which is not
   shipped and is therefore absent on a fresh install. If `pwsh` is
   unavailable or the build fails, continue — READ falls back to path-based
   discovery — but do not treat a failed build as a failed review.
4. Follow Entry's **How the agent uses the dispatch** instructions. Invoke only
   the returned action skills, pass each dispatch entry's exact input subset,
   and read `PLUGIN_ROOT/skills/read.md` and `PLUGIN_ROOT/skills/do.md` on
   demand. When a dispatched super-skill requests isolated leaf execution and
   the host supports child contexts, use them.
5. Return each dispatched action skill's findings report unchanged. If Entry
   returns `no-match` or `failed`, return its dispatch record unchanged.

The internal `microsoft/skills/review/al-code-review.md` action skill remains
the canonical coordinator for a broad AL review. Entry decides whether that
super-skill or a narrower domain skill applies; this host adapter never chooses
between them.

## Layer selection is not a deny mechanism

A plugin install ships the whole BCQuality tree, so `enabled-layers` here can
only narrow *discovery*: the files of a layer left out of the list still exist
on disk. This differs from the clone model Entry's Preparation step describes,
where a consumer prunes its checkout to policy before the agent runs and the
index is rebuilt over the pruned tree. Treat `BCQUALITY_ENABLED_LAYERS` as a
selection filter, never as a security boundary. A host that needs a genuine
deny mechanism must prune the installed tree itself.

