Skills
Skill is one NodeType, defined once (SkillNodeType, nodeType: "Skill"), and this package is
where it lives β public and pre-installed, so the type resolves on every mesh with no install and
no purchase. The same holds for Agent in the Agent package.
π¨ Never define a second NodeType called
SkillorAgent. A module that declares its own puts a second meaning on a reserved name, and nothing warns you β the nodes import, the module works, and the platform type is shadowed for anything that resolves it there.LinkedIn/Skilldid exactly this (it meant "a skill on a LinkedIn profile"), which is what prompted this section.
Skills live where they belong β NOT here
This package holds the platform defaults only β the skills about MeshWeaver itself: /code,
/space, /access, /group, /navigate, /markdown, /model, /layout-area, /activity,
/harness, /clear, /agent, /pull-request, /provider-keys, /slide, /presentation.
Everything else belongs to the module it is about, under {Module}/Skill/ (and {Module}/Agent/):
| skill | lives in | not |
|---|---|---|
/post |
SocialMedia/Skill |
the global registry |
/pdf-package, /multipart-doc |
Publish/Skill |
the global registry |
/video, /poster |
Video/Skill |
the global registry |
/create-course, /course-e2e |
Edu/Skill |
the global registry |
/plugin, /ci-policy |
Store/Skill |
the global registry |
/deployment, /setup-environment |
Hosting/Skill |
the global registry |
/debug, LogTriage |
Observability |
the global registry |
/thread, ThreadNamer |
Collaboration |
the global registry |
A local or exotic skill copied into this package is a duplicate with two owners: the module's copy drifts, both resolve under the same slash word, and which one a composer shows is incidental.
Decentral does NOT mean invisible
Two mechanisms carry a module's skills outward, and neither needs a copy here.
1. Context injection (the default). Skills are injected by the partition of the NodeType and
the partition of the data element you are working on β SkillNodeType.SkillQueries(contextPath, userPath, nodeTypePath). Open a SocialMedia/Post and /post is there because it sits in that
NodeType's partition. This is why a skill belongs beside the thing it describes: placement IS the
targeting.
2. installPaths (for global reach). A package installs its own skill path:
"installPaths": ["Publish/Skill", "Publish/Agent"]
Installing the package copies those into your {you}/Skill / {you}/Agent home, so they resolve in
every composer β that is how /pdf-package is globally visible while living in Publish.
π¨ The folder named in
installPathsMUST be backed by a node file βSkill.jsonbesideSkill/. A folder with no node file is nothing in the mesh: no id, nothing to copy. Declare an unbacked folder and every install of that package fails withVerify install failed β the copy was accepted but not stored β¦ please retry the install, and retrying can never work.Trainingshipped exactly that way until this change.