Open
Conversation
Add first-class OpenClaw support to the build system. OpenClaw is a local-first AI agent framework whose SKILL.md files use an extended YAML frontmatter schema (permissions, triggers, version, metadata). Changes: - New `openclaw` provider in PROVIDERS config - New `frontmatterEnrich` hook on transformer factory — lets any provider post-process frontmatter before YAML serialization - Extended `generateYamlFrontmatter` with recursive serializer for nested objects and arrays (backward-compatible) - Model-agnostic placeholder config (uses 'the model' since OpenClaw operators configure their own LLM backend) - Pre-built skills output to `.openclaw/skills/` Complements rohitg00/skillkit#86 which adds the OpenClaw adapter to SkillKit's translate command — both produce the same output format.
pbakaus
requested changes
Mar 28, 2026
Owner
pbakaus
left a comment
There was a problem hiding this comment.
Thanks for your contribution! I have a few questions before this I can merge this.
| // than FIELD_SPECS since they have a fixed structure per-provider. | ||
| // See: https://github.com/rohitg00/skillkit/pull/86 | ||
| frontmatterEnrich: (fm) => { | ||
| fm.version = '1.0.0'; |
Owner
There was a problem hiding this comment.
this should probably inherit the actual current version (available in several files, I think including package.json)?
| // See: https://github.com/rohitg00/skillkit/pull/86 | ||
| frontmatterEnrich: (fm) => { | ||
| fm.version = '1.0.0'; | ||
| fm.permissions = { filesystem: 'none', network: false }; |
Owner
There was a problem hiding this comment.
are these really the right permissions for all skills?
| fm.version = '1.0.0'; | ||
| fm.permissions = { filesystem: 'none', network: false }; | ||
| fm.triggers = [{ command: `/${fm.name}` }]; | ||
| fm.metadata = { |
Owner
There was a problem hiding this comment.
why is this needed, if empty anyway?
| }; | ||
| // OpenClaw gateway routes skills by trigger-phrase descriptions. | ||
| // Descriptions must start with a verb phrase like "Use when". | ||
| if ( |
Owner
There was a problem hiding this comment.
this is a bit of a weird workaround - all skills should have decent descriptions, if not, better to fix at the source skill level
| // operator configures (Anthropic, OpenRouter, local). Use generic phrasing. | ||
| 'openclaw': { | ||
| model: 'the model', | ||
| config_file: 'SOUL.md', |
Owner
There was a problem hiding this comment.
Isn't SOUL.md a very specific instruction file for a single purpose?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add first-class OpenClaw support to impeccable's build system.
OpenClaw is a local-first AI agent framework with a persistent gateway daemon. It uses
SKILL.md files with an extended YAML frontmatter schema beyond the standard
name+description— addingpermissions,triggers,version, andmetadata.openclawfields that the gateway uses for routing, security gating, and dependency checks.
Changes
openclawprovider inPROVIDERSconfig (providers.js)frontmatterEnrichhook on the transformer factory (factory.js) — lets anyprovider post-process the frontmatter object before YAML serialization. OpenClaw uses
this to inject its extended schema fields without modifying
FIELD_SPECS.generateYamlFrontmatter(utils.js) — recursiveserializeYamlValuehelper handles nested objects and arrays (needed for
permissions,triggers,metadata.openclaw). Backward-compatible — existing flat-value providers are unaffected.utils.js) — model-agnostic (the modelrather thana specific provider name, since OpenClaw operators configure their own LLM backend),
SOUL.mdas config file,/command prefix.index.jsOpenClaw SKILL.md frontmatter
The build produces skills with this extended frontmatter:
SkillKit alignment
This PR complements rohitg00/skillkit#86,
which adds an OpenClaw adapter to SkillKit's
translatecommand. Both produce the sameoutput format — impeccable's build system for pre-built distribution, SkillKit for
on-the-fly translation of arbitrary skills.
Install instructions (for README update)
Test plan
bun run buildcompletes without errorsdist/openclaw/.openclaw/skills/contains all 21 skillspermissions,triggers,metadata)Use when ...){{placeholder}}tokens fully resolved (no{{model}}etc. remaining)reference/subdirectories copied forfrontend-designandcritiquedist/openclaw-prefixed/) also worksgenerateYamlFrontmatterbackward-compatible for flat-value providers