Skip to content

External Skills

External skills let netclaw read skill directories owned by other AI tools — Claude Code, Open Code, or any arbitrary directory on disk. Point netclaw at an existing directory and it scans those skills alongside its own. No copying required.

Skills must follow the SKILL.md format (frontmatter with name and description fields, markdown body). See Skills Overview for details on the format and lifecycle.

To add Claude Code’s skills, use the CLI:

Terminal window
netclaw skill source add claude-code --well-known claude-code

That’s it. The daemon picks up the change via its file watcher — no restart needed.

Alternatively, run netclaw config → Skill Sources, then choose Add a local skill folder to browse and select a directory manually.

  • Netclaw is installed and initialized (or you’re comfortable editing netclaw.json directly — it lives at ~/.netclaw/config/netclaw.json by default)
  • The external directory you want to add exists on disk (netclaw logs a warning for missing paths but still configures the source)

Well-known aliases expand to standard paths:

AliasResolves to
claude-code~/.claude/skills/, ~/.claude/commands/, plus marketplace paths discovered dynamically (~/.claude/plugins/marketplaces/*/skills/)
open-code~/.open-code/skills/

The claude-code alias scans marketplace plugin directories alphabetically for stable precedence. Marketplace paths are discovered at runtime — if you install a new plugin, it gets picked up on the next scan. Missing one of those paths is fine — the alias resolves whichever ones exist.

External sources live under ExternalSkills.Sources in netclaw.json:

{
"ExternalSkills": {
"Sources": [
{
"Name": "claude-code",
"WellKnown": "claude-code",
"Enabled": true,
"AllowSymlinks": true
},
{
"Name": "team-skills",
"Path": "/opt/skills/shared",
"Enabled": true,
"AllowSymlinks": true
}
]
}
}
FieldTypeDefaultDescription
NamestringUnique identifier for this source
PathstringnullAbsolute path to a skill directory (mutually exclusive with WellKnown)
WellKnownstringnullWell-known alias (mutually exclusive with Path)
EnabledbooltrueWhether the source is active
AllowSymlinksboolfalseFollow symlinks within the directory. Any well-known alias defaults to true when added via CLI (--well-known).

Each source must set either Path or WellKnown, not both.

Add and remove sources without editing netclaw.json:

Terminal window
# List configured sources
netclaw skill source list
# Add a well-known source
netclaw skill source add claude-code --well-known claude-code
# Add a custom path
netclaw skill source add team-skills --path /opt/skills/shared
# Disable a source without removing it
netclaw skill source disable team-skills
# Re-enable
netclaw skill source enable team-skills
# Remove entirely
netclaw skill source remove team-skills

All netclaw skill source commands work without the daemon running. CLI changes are picked up by a running daemon automatically via its file watcher.

netclaw config → Skill Sources presents two options: + Add local folder and + Add skill server.

Local folders are selected via a directory picker (Ctrl+N to create a new folder). After selection, you choose whether to allow symlinks in that folder, then confirm the source name. The source gets added and autosaved immediately.

Skill Sources editor

The Skill Sources screen — + Add local folder opens a directory picker; + Add skill server connects a remote feed.

Leave symlinks off unless your setup requires it (shared filesystems, monorepo layouts with linked skill directories).

When multiple sources define a skill with the same name:

native skills > server feeds > external sources

Native skills are skills authored directly through netclaw’s agent. Server feeds are remotely-synced skill repositories. External sources always have lowest priority.

Within external sources, order in the Sources array determines which wins — higher-priority sources go first. Collisions are logged; run netclaw skill issues to see them.

The daemon watches every resolved external path for changes. When a *.md file changes, it rescans after a 500ms debounce — so multiple rapid writes only trigger one rescan. Drop a new skill file into an external directory and it’s available on the next agent turn. No restart needed.

The daemon logs a warning for missing directories at startup but keeps running.

All well-known sources have AllowSymlinks: true set automatically when added via CLI — their standard paths often include symlinked directories. Custom sources default to AllowSymlinks: false — opt in per source if you trust the targets.

External skills loaded from disk go through:

  • Frontmatter validationname and description are required; malformed YAML is rejected
  • Symlink/path safety — blocked unless AllowSymlinks: true for that source
  • Tool access policies — same restrictions as native skills; the allowed-tools frontmatter field is informational only and doesn’t grant tool access

External skills do NOT go through the prompt injection content scanner (that only runs on skills authored through the skill_manage tool). The assumption is that external skill files are user-curated.

Validate skills before loading them:

Terminal window
# Validate a single skill
netclaw skill validate /opt/skills/shared/deploy/SKILL.md
# See all scanning/validation issues across all sources
netclaw skill issues

The path doesn’t contain valid *.md files with SKILL.md frontmatter. Run netclaw skill validate <path> on a file to see what’s wrong. Common causes: missing name or description in frontmatter, or the directory has subdirectories but no top-level markdown files.

The source has AllowSymlinks: false and the directory contains symlinks. Either restructure the directory or set AllowSymlinks: true if you trust where the links point.

Filesystem events are debounced by 500ms. If changes still aren’t showing up, check that the daemon is running (netclaw status) and the source is enabled (netclaw skill source list).