Skip to main content
Skills can carry tags in their SKILL.md frontmatter (tags: [finance, onboarding]). Tags are a great way to group related skills — but skills live inside individual projects, so answering “which skills across my workspace are tagged finance?” would normally mean listing every project’s skills and filtering client-side. The GET /skills endpoint does this in one call: it searches across projects in your tenant and returns every skill that carries the tag, along with each match’s project and file manifest.
Looking for global skills — the ones attached to a Navigator in the Navigator Library rather than to a single project? Those live under a parallel endpoint, GET /navigator-global-skills. Jump to Search global skills by tag.

Endpoint used

Query parameters

Tags live on the skill bundle (from its SKILL.md frontmatter), not on individual bundled files. Matching is an exact, case-sensitive comparison against the tags as they were uploaded.
Project scoping accepts either the project name (exact, case-sensitive — URL-encode spaces, so Support Team becomes Support%20Team) or its UUID. Passing a name or UUID that doesn’t exist in your tenant returns 404.

Response shape

The endpoint returns a plain JSON array (not the cursor-paginated envelope used by some other list endpoints). Each item is a matched skill with its project and current-revision file manifest — the SKILL.md body is omitted to keep the response compact:
Need the full SKILL.md body or a bundled file’s contents? Use the per-skill detail endpoint (GET /projects/{project_id}/skills/{skill_id}) or a file endpoint with the id/path values returned here.

The procedure

1

Pick your scope

Search your whole workspace with project=all (the default), or narrow to specific projects by repeating project= with names or UUIDs.
2

Call the endpoint

GET /skills?tag={tag} with your platform access token. The result is every matching skill across the requested scope.
3

Use the results

Each item tells you which project_name/project_id the skill lives in and lists its files. Follow up with the per-skill endpoints if you need the SKILL.md body or file contents.

Full example

Find every skill tagged finance across the workspace and print where each one lives. The project tab shows how to scope the same search to specific projects.
search_skills.py

Search global skills by tag

Global skills are attached to a Navigator in the Navigator Library instead of to a single project. A navigator’s global skills are shared with every project that navigator is connected to, so they don’t belong to any one project — which means the project-scoped GET /skills search above intentionally excludes them. To search global skills, use the parallel GET /navigator-global-skills endpoint. It works just like GET /skills, but the scope is a set of navigators instead of projects, and each result carries the owning navigator instead of a project.

Endpoint used

Query parameters

Tag matching is identical to the project search: an exact, case-sensitive comparison against the skill’s SKILL.md frontmatter tags. Passing a navigator name/UUID that doesn’t exist in your tenant returns 404.

Response shape

Same plain JSON array as the project search, but each item identifies the owning navigator (navigator_identity_id + navigator_name) and sets source to "global":
Need the full SKILL.md body or a bundled file’s contents for a global skill? Use the per-navigator detail endpoints (GET /navigator-global-skills/{navigator_id}/skills/{skill_id} and its file routes) with the navigator_identity_id/id/path values returned here.

Example

Find every global skill tagged finance across all navigators, and print which navigator owns each one. The navigator tab shows how to scope the same search to specific navigators.
search_global_skills.py

Next steps

Sync skills from your repo

Keep a folder of SKILL.md files in version control and push changes to a Caylex project from CI.

Platform Authentication

Create and manage the platform access token these recipes use.