4.0 KiB
skill-repo
Private collection of tool-neutral Agent Skills, plus optional vendor-specific setup/integration adapters (currently: Claude Code).
Why this structure
The SKILL.md format (YAML frontmatter + Markdown body + scripts/ /
references/ / assets/) is an open standard published at
agentskills.io, adopted by Claude Code, OpenAI
Codex, GitHub Copilot, Cursor, Gemini CLI, and others — the same skill files
work unmodified across these tools. What's not portable is host-specific
plumbing: slash commands, permission/allow-list syntax, plugin/marketplace
manifests. This repo keeps those two concerns physically separate.
Structure
skill-repo/
├── skills/ ← tool-neutral, single source of truth
│ └── obsidian-vault-kb/
│ ├── SKILL.md
│ ├── references/
│ └── scripts/ ← config lives at ~/.agent-skills/<skill>/config.json
├── vendor/
│ └── claude-code/
│ ├── .claude-plugin/ ← (unused here; marketplace.json lives at repo root, see below)
│ └── plugins/
│ └── obsidian-vault-kb/
│ ├── .claude-plugin/
│ │ └── plugin.json
│ ├── skills/
│ │ └── obsidian-vault-kb -> ../../../../../skills/obsidian-vault-kb (symlink)
│ ├── commands/
│ │ └── setup.md ← -> /obsidian-vault-kb:setup
│ └── permissions-whitelist.template.json
└── .claude-plugin/
└── marketplace.json ← must live at repo root per Claude Code's convention
skills/<name>/ is the only place skill content actually lives —
SKILL.md, scripts/, references/. It assumes nothing about the host
tool: configuration is read from ~/.agent-skills/<skill-name>/config.json,
a tool-neutral location, not ~/.claude/....
vendor/<tool>/ holds everything specific to one host tool: for Claude
Code, that's the plugin manifest, the permissions whitelist (Claude Code's
Bash(...) allow-list syntax), and the /setup slash command. The plugin's
skills/<name> is a symlink into the top-level skills/ directory —
there is exactly one copy of the skill content on disk, never a duplicate
that can drift out of sync.
Adding support for another tool (e.g. a future OpenAI/Codex-specific
adapter) means adding vendor/<other-tool>/ with that tool's own
conventions, symlinked back to the same skills/<name>/, without touching
the skill content itself.
Symlinks assume a POSIX filesystem; this repo doesn't attempt to be Windows-git-checkout-friendly.
Adding this marketplace locally (Claude Code)
/plugin marketplace add /absolute/path/to/skill-repo
/plugin install obsidian-vault-kb
Then run /obsidian-vault-kb:setup to configure the vault path/mode and the
permissions whitelist.
Adding a new skill to this repo
- Create
skills/<new-skill-name>/withSKILL.md, andscripts//references/as needed. Keep configuration at~/.agent-skills/<new-skill-name>/config.jsonif the skill needs persistent config — don't hardcode a Claude-specific path here. - For Claude Code support, create
vendor/claude-code/plugins/<new-skill-name>/with.claude-plugin/plugin.json, askills/<new-skill-name>symlink back to the top-levelskills/directory, and (if the skill needs restricted shell access) acommands/setup.mdpluspermissions-whitelist.template.jsonfollowing theobsidian-vault-kbpattern — wrapper scripts that resolve their own scope from the config file rather than accepting raw paths as arguments, whitelisted only by exact absolute path, never generic tool wildcards likeBash(find:*). - Add an entry for the new plugin to
.claude-plugin/marketplace.json. - Bump
versionin the plugin'splugin.jsonand itsmarketplace.jsonentry on updates.