Overview
The most common way to ship skills with MeshAgent is to package the skills in a separate image, mount that image into the service container, copy the skills into a writable working directory, and then launch the agent with one--skill-dir flag per discovered skill.
This page walks through that full pattern using the existing anthropic_skills example in this docs repo.
For the full service YAML reference, see Packaging and Deploying Services.
End-to-end example: package a skills repo as a ChatBot
This example assumes you already have a repo or folder of Agent Skills you want to ship. Theanthropic_skills sample models the pattern where those skills are packaged into an image and then mounted at /skills inside the MeshAgent service container.
Step 1: Package your skills into an image
Start with a skills repo that contains one or more skill directories, each with its ownSKILL.md. In the existing sample, the skills come from the open Anthropic skills repo.
At runtime, the MeshAgent service expects those skills to be present in an image that can be mounted read-only into the container.
Build The Skills Image
Build The Skills Image
Clone the skills repo:Create a scratch Build and push the image:What the build arguments mean
bash
Dockerfile in the repo root:bash
<REGISTRY>: Container registry host such asdocker.io,ghcr.io, orus-west1-docker.pkg.dev.<NAMESPACE>: Your registry account or organization name.<IMAGE_NAME>: The repository name for the image.<TAG>: A version label such aslatestor2026-03-03.docker buildx build .: Builds from the current directory using Buildx.-t: Tags the image with the full name.--platform linux/amd64: Builds a Linux AMD64 image.--push: Pushes the built image to the registry.
bash
Step 2: Create the MeshAgent service spec
Use ameshagent.yaml file that mounts the skills image and starts a ChatBot which loads the discovered skills.
container.storage.images.image: <REGISTRY>/<NAMESPACE>/<IMAGE_NAME>:<TAG>
Step 3: Understand what this service is doing
The sample follows the same pattern you used for the Anthropic skills packaging flow:- It mounts the room filesystem at
/data. - It mounts the skills image at
/skills. - It copies the skills into
/data/skillson startup. - It finds every
SKILL.mdand turns each parent directory into a--skill-dirargument. - It starts
meshagent chatbot joinwith the required tools and rules so the agent can actually use the skills.
- It copies the skill files into
/data/skills, giving the running service a predictable local path to work from. - It discovers every
SKILL.mdand expands those directories into repeated--skill-dirflags before launching the agent. - It launches the agent with the tools and rules the packaged skills need in order to be useful.
Step 4: Validate the service spec
bash
ServiceTemplate is structurally valid before deployment.
Step 5: Deploy it to a room
bash
ServiceTemplate with no required input variables, you can deploy it directly to a room.
If you want the service to be available only in one room, keep the --room flag. If you later convert the sample to a plain Service, you can follow the normal room vs project deployment rules from the packaging docs.
Step 6: Verify that the skills are available
After deployment:- Open the room in MeshAgent Studio.
- Start chatting with the deployed agent.
- Give it a task that should trigger one of the packaged skills.
- Check the agent logs if you need to confirm startup or skill discovery behavior.
Why this pattern works well
This approach is a good default when:- you already have a skill repo you want to reuse
- you want multiple skills to ship together
- you want the service to discover whatever skills are present in the mounted image
- you want stable, versioned skill content in deployment
Editable skills vs image-baked skills
There are two common operating modes:- Image-baked skills: versioned, reproducible, and best for stable deployments.
- Copied skills under
/data/skills: easier to inspect, reference, or customize from the room because/datais mounted from room storage in this sample.
- The mounted image acts as the default packaged source of truth.
- On startup, the skills are copied into
/data/skills, which lives in room storage. - Because the sample uses
cp -R -n, files that already exist in room storage are not overwritten by later startups.
/data/skills.
This gives you a useful hybrid model:
- ship a stable base set of skills in the image
- let a specific room inspect or customize those skills after deployment
- keep the agent pointed at the room-backed paths it actually uses at runtime
Adapting this pattern to your own repo
If your skills repo differs from the sample:- change the mounted image in
storage.images - adjust the source path if your repo uses a different root layout
- keep the
find ... SKILL.mdloop so every skill becomes its own--skill-dir - enable whatever tools the skills actually depend on
--skill-dir. The discovery loop becomes most useful when you are shipping a repo of skills.
See also
- Skills Overview: understand how skills differ from tools and rules.
- Using Skills with Agents: load skills into an agent locally before packaging them.
- Packaging and Deploying Services: full service YAML field reference.