A central repository of GitHub Copilot instructions and prompt files for Data Platform Services. It provides reusable agent packages — such as language-specific coding instructions — that are distributed to consuming repositories via APM (Agent Package Manager), ensuring consistent AI-assisted development practices across the platform.
| Toolkit | Package name | Source path | Description |
|---|---|---|---|
| Universal | universal |
toolkits/universal |
Universal Copilot instructions for all Data Platform repositories |
| Platform Engineering | platform-engineering |
toolkits/platform-engineering |
Platform Engineering Copilot instructions and prompts |
| Software Engineering | software-engineering |
toolkits/software-engineering |
Software Engineering Copilot instructions (Python, Django) |
Consuming repositories declare the toolkits they need in their own apm.yml and install them with apm install. This is the primary, fully automated flow and runs unattended inside a development container.
-
Install the Ministry of Justice Development Container in your repository.
-
Add the APM feature to your
.devcontainer/devcontainer.json:{ "features": { "ghcr.io/ministryofjustice/devcontainer-feature/apm:": {} } } -
Populate
.devcontainer/devcontainer-lock.jsonwith the resolved hash:{ "features": { "ghcr.io/ministryofjustice/devcontainer-feature/apm:": { "version": "1.0.0", "resolved": "ghcr.io/ministryofjustice/devcontainer-feature/apm@sha256:b562e126312767cf69b772bce79ae551a82f97c2eda7cce400fe068530261f71", "integrity": "sha256:b562e126312767cf69b772bce79ae551a82f97c2eda7cce400fe068530261f71" } } } -
Create an
apm.ymlin the root of your repository to declare this toolkit as a dependency:name: <name> version: 1.0.0 description: APM project for <name> author: Data Platform Engineering targets: - copilot dependencies: apm: - ministryofjustice/data-platform-ai-toolkit/toolkits/universal#^1.0.0
The
#^1.0.0is a SemVer range: APM resolves it to the highest matchinguniversal-v<version>release tag and pins the exact commit inapm.lock.yaml. Use a caret range to accept compatible updates, or pin an exact tag (#universal-v1.0.0) or branch (#main) instead. -
Add
apm installto your.devcontainer/post-create.shscript:#!/usr/bin/env bash apm install
This repository is also published as an APM marketplace — a curated index of the toolkits above. The marketplace is a discovery and naming layer; it is not required for the automated apm install flow described above, which resolves dependencies directly from apm.yml.
It is useful when a developer wants to browse what is available and add a toolkit by friendly name rather than by repository path:
apm marketplace add ministryofjustice/data-platform-ai-toolkit # register the catalogue (one-time)
apm marketplace browse data-platform # list available toolkits
apm install universal@data-platform # add a toolkit by nameapm install <toolkit>@data-platform resolves the toolkit through the marketplace and writes an ordinary entry into your apm.yml dependencies, after which the standard apm install flow takes over. The registration step (apm marketplace add) is interactive, so it does not replace the unattended apm install in your post-create.sh.
The marketplace is defined by the marketplace: block in the root apm.yml and compiled to .claude-plugin/marketplace.json. To add or update a toolkit:
- Edit the
packages:list inapm.yml(or useapm marketplace package add ./toolkits/<name>). - Regenerate and validate the artifact:
apm pack --check-versions --check-clean
- Commit both
apm.ymland the generated.claude-plugin/marketplace.json.
To release a new version of a toolkit (for example bumping universal to
1.1.0), prepare main before drafting the release:
- Bump
version:in bothtoolkits/<name>/apm.ymland that package's entry in the rootapm.yml. - Regenerate and validate the artifact:
apm pack --check-versions --check-clean
- Commit
apm.ymland the updated.claude-plugin/marketplace.jsontomain. - Then draft the release with the new tag (e.g.
universal-v1.1.0).
Skipping the bump fails the release gates: --check-clean rejects a committed
marketplace.json that does not match a fresh apm pack.
To draft the new release:
- Go to Releases → Draft a new release.
- Choose a tag → Create new tag, of the form
<package-name>-v<version>(for exampleuniversal-v1.0.0). The<package-name>matches the toolkit's source directory (for exampleuniversal) and<version>must match that package'sversion:in the rootapm.yml. Thevprefix and the matching name are what let consumers pin a SemVer range such astoolkits/universal#^1.0.0. - Set Target to
main. - Expand Set as the latest release and choose Keep existing so the release is not marked as latest.
- Add a title which matches the tag, and generate release notes, then click Publish release.