SKILL.md files. A common pattern is to keep them in a git repository and sync them to a Caylex project from CI on every merge, so the project’s skills always match main.
The skill endpoints address your project by name and each skill by its SKILL.md frontmatter name, so your tooling never has to track Caylex UUIDs.
Want to sync global skills — the ones attached to a Navigator in the Navigator Library so they’re shared across every project that navigator is connected to? Those use a parallel set of endpoints. Jump to Manage global skills on a navigator.
Endpoints used
Project names are matched exactly and are case-sensitive. URL-encode names that contain spaces —
Production Project becomes Production%20Project. The skill’s name is taken from its SKILL.md frontmatter, not the folder name.In the URL, a skill is identified by its slug — the kebab-cased form of its name (
Code Review → code-review). The API also accepts the display name and normalizes it (case-insensitively), so either works; the list response returns both name and slug if you want to address keys explicitly.The procedure
1
Enumerate local skills
Walk your repository’s
skills/ directory. Each skill is a folder containing a SKILL.md; read the name from its frontmatter to use as the skill identifier.2
List remote skills
GET …/skills to see what’s already in the project.3
Add or replace each local skill
Use
POST for skills that don’t exist remotely and PUT for ones that do. Because POST returns 409 and PUT returns 404, CI can distinguish a first-time upload from an update instead of silently overwriting.4
(Optional) Prune deleted skills
DELETE any remote skill that no longer exists locally so the project mirrors your repo exactly.Full sync script
This walks a localskills/ directory and reconciles it with the project: new skills are added, changed skills are replaced, and (optionally) skills deleted from the repo are removed from the project. Drop it into CI and run it on every merge to main.
The Python and TypeScript tabs reconcile the whole directory; the cURL tab shows the individual building-block calls.
- Python
- TypeScript
- cURL
sync_skills.py
Manage global skills on a navigator
Global skills are attached to a Navigator in the Navigator Library rather than to a single project. A navigator’s global skills are merged into the skill list of every project that navigator is connected to at runtime, so they’re the right home for instructions you want every deployment of a navigator to share. These endpoints are the direct navigator analogue of the project ones above: same verbs, same name-addressing, same request bodies — the owner is a navigator (addressed by its Navigator Library name) instead of a project. They live under the/navigator-global-skills prefix.
Endpoints used
Navigator names are matched exactly and are case-sensitive. URL-encode names that contain spaces —
Support Navigator becomes Support%20Navigator. A navigator’s display name is unique within your tenant, so it addresses exactly one navigator. As with projects, the skill’s name comes from its SKILL.md frontmatter, and the {skill_name} path segment accepts either the display name or its slug.Full sync script
This walks a localglobal-skills/ directory and reconciles it with one navigator: new skills are added (POST), changed skills are replaced (PUT), and (optionally) skills deleted from the repo are removed.
- Python
- TypeScript
- cURL
sync_global_skills.py
Next steps
Search skills by tag
Find skills — project or global — carrying a given tag across your workspace.
Platform Authentication
Create and manage the platform access token these recipes use.
Provision customer projects
Stand up a project per customer and seed it from a model project.