A skill is a package that describes how to use a service or a family of
functions. Its entry point is SKILL.md; the package may also contain
scripts and references needed at runtime. Metnos does not execute it directly:
it translates the package into executors with explicit names, arguments,
capabilities, and provenance.
The file contains a metadata header and a readable body for functions, prerequisites, commands, and examples. The parser turns that material into a structure that can be checked; prose is not treated as permission to expand the system vocabulary or its capabilities.
Metnos can import a skill source: it reads the file, derives a set of executors in its own format, and submits each one to admission checks. Those that pass enter the same catalog as other executors and can be invoked in natural language, while the manifest continues to record their external origin.
A SKILL.md file does not carry the signature and contract of a
Metnos executor. Importing generates a wrapper, declares capabilities and
arguments in a manifest, applies admission checks, and signs the result. This
reduces the granted authority and makes it observable, but it does not certify
third-party code as benign: provenance and source still require judgment.
The import command starts a sequence of distinct steps. The distinction matters: successful translation is not yet admission to the catalog.
SKILL.md.action_object_qualifier name. The provider qualifies imported
executors, and collisions within the skill are rejected.Name and argument translation is procedural for the current source and vocabulary. The whole import does not promise byte-for-byte identical output: provenance contains the import time, descriptions may come from a model, and admission depends on the installed catalog and the available semantic verifier.
Metnos accepts only actions and objects defined by the runtime vocabulary.
A skill that speaks of append rows to spreadsheet cannot invent
append_rows; it must map to a compatible canonical name. If no
semantically correct mapping exists, the sub-command is rejected. Synonyms
and skill-specific phrasing therefore cannot introduce new verbs implicitly.
A skill can come from three places:
SKILL.md file or a directory that
contains it. Adjacent scripts/ and references/ are
retained with the source.agentskills.io/<author>/<skill>; the importer
resolves it to the SKILL.md file at the expected repository
root.If a skill calls its own scripts, import a complete local directory or the repository rather than the raw file alone. Remote sources are kept in the local cache for a default maximum of seven days; an operator can force a fresh fetch.
The source is retained separately from the generated executors. With the default paths, both trees belong to the user who performs the import:
~/.local/share/metnos/skills/google-workspace/ SKILL.md scripts/ references/ ~/.local/share/metnos/executors/skills/google-workspace/ read_events_google_workspace/ read_events_google_workspace.py manifest.toml manifest.lang_state.json manifest.toml.sig send_messages_google_workspace/ …
Before signing, each directory contains three generated files: wrapper,
manifest, and language state. Signing adds manifest.toml.sig.
Scripts and references remain in the source package and are called by the
wrapper. The runtime applies sandbox constraints from the contract and
declared capabilities, without another per-executor file.
The manifest retains its link to the source:
[provenance] synthesized = true imported_from = "<skill origin>" source_version = "1.1.0" source_section = "<section>" source_subcommand = "calendar list" imported_at = "<UTC instant>" source_sha256 = "<SKILL.md fingerprint>" importer_version = "<version>"
Location, provenance, retained source, and audit distinguish an imported executor from one maintained directly in the product. Signature, contract, and execution policy are shared requirements: provenance replaces none of those controls.
The pipeline separates translation rejections from admission rejections. The final audit records both categories.
| Step | What it checks | Negative outcome |
|---|---|---|
| Verb boundary | The source action has a semantically valid match in the closed vocabulary. | The sub-command produces no plan. |
| Name and collisions | The composed name is canonical, provider-qualified, and distinct from other names in the same skill. | The translator records the rejection reason. |
| Binding uniqueness | The skill binding is not already owned by another import. | The whole skill is rejected. |
| L1 — vocabulary | The plan action, object, and qualifiers belong to the current vocabulary. | The individual plan is rejected. |
| L2 — affinity | Canonical affinity does not exceed the overlap threshold against installed executors; an explicit binding uses a distinct threshold. | The individual plan is rejected as a possible duplicate. |
| L5 — routing | When a prototype question and runner are available, the assertion must select the expected executor. | An executed failure rejects the plan; an unmapped or unavailable case is skipped. |
| L6 — semantic alignment | The verifier compares the generated manifest and code. | Drift, an error, or verifier unavailability rejects the plan in the ordinary flow. |
Independent plans can have different outcomes: rejected directories are removed and the others continue. A global binding collision is the exception and rejects the whole import. Options that bypass L2, L5, or L6 are intended for development and CI; using them weakens the evidence and is not equivalent to production certification.
The import report is authoritative for that particular run: it lists translated plans, accepted names, and rejections with reasons. An accepted name alone does not prove that every possible L5 assertion ran, because some patterns explicitly allow a skip.
Importing does not collect credentials. If a provider reports missing
authentication during use, the generated wrapper returns
decision = "needs_inputs" and preserves the arguments needed to
resume the operation.
~/.config/metnos/credentials/
by default.0600.Credential bindings and values are isolated per user. The manifest declares
only the binding name and dialog schema: secrets do not enter the manifest,
generated code, or text sent to the planner. The canonical
find_credentials, set_credentials, and
delete_credentials executors expose metadata, protected writes,
and deletion respectively; their planner-facing results contain no plaintext
secret values.
Ask Metnos with a request like this example: “What appointments are on my work calendar tomorrow?” If the Google Workspace capability is admitted, enabled, and connected to the user's account, the catalog exposes the event-specific executor. Other examples are “Find unread messages from Anna,” “Read the contents of this Drive file,” and “Append these rows to the Expenses sheet.”
Importing is a separate administrative operation. The Google Workspace package included with Metnos also contains the required scripts, so the command uses the complete directory:
metnos-skills import <install-root>/executors/skills/google-workspace
The source declares 24 sub-commands. The current procedural verification proves 24 distinct canonical plans with no translation rejection. Several important semantic distinctions are:
| Sub-command | Canonical executor | Distinction |
|---|---|---|
gmail send | send_messages_google_workspace | a new message |
gmail reply | send_messages_thread_google_workspace | a reply within a thread |
gmail labels | list_messages_labels_google_workspace | list labels, rather than modify messages |
drive get | get_files_google_workspace | file metadata |
drive download | read_files_google_workspace | file contents |
sheets update | set_files_xlsx_google_workspace | update existing cells |
sheets append | write_files_xlsx_google_workspace | write new rows |
The 24/24 result covers translation, name uniqueness, and manifest generation. It does not justify declaring “24 admitted” in advance: L2 compares the user's catalog, L5 depends on executable checks, and L6 depends on the semantic verifier. The report from that import states how many executors were accepted; only those that are signed and valid can enter the catalog. OAuth authorization then occurs for the individual user and is not part of the import count.
Importing a skill does not attest that its code is benign. The importer checks the wrapper and contract it generates, but it does not perform complete static analysis of every received script. Before import, the operator must verify origin and fingerprint, review the scripts, and grant only the required capabilities and credentials.
| Control | When | Actual assurance |
|---|---|---|
| Provenance and fingerprint | acquisition | tie the artifact to the reviewed source; they do not prove it safe |
| Generated contract | generation | makes arguments, output, capabilities, credentials, and provenance explicit |
| L1, L2, L5, L6 | admission | limit foreign names, overlap, routing failures, and semantic drift |
| Digest and Ed25519 signature | catalog load | prevent missing, modified, or invalidly signed artifacts from loading |
| Sandbox, capabilities, policy, and vaglio | invocation | limit concrete authority and apply decisions required by the action's risk |
| Per-user credential store | authentication and use | separates bindings and keeps secrets away from the planner |
| Audit and efficacy statistics | after invocation | record use and outcome and feed lifecycle controls |
Executors maintained directly by Metnos follow release review, tests, signing, and policy; imported executors add specific provenance, admission, and audit. Neither origin is “trusted by definition.” In the ordinary flow, L6 also does not approve when its verifier is unavailable: the plan is rejected with an explicit reason.
| To understand… | Read |
|---|---|
| what an executor is and how it is structured | Executor |
| how services, skills, and backends determine availability | Skills, services, and backends |
| how Synt generates a new executor | Synt |
| the boundary in which code runs | Sandbox |
| the checks before risky actions | Vaglio |
Metnos — importing skills