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 Skill or Agent. 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/Skill did 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 installPaths MUST be backed by a node file β€” Skill.json beside Skill/. 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 with Verify install failed β€” the copy was accepted but not stored … please retry the install, and retrying can never work. Training shipped exactly that way until this change.

Reconnecting…
The server was updated. Reloading the page to pick up the latest version.