Skill Registry Management
CRITICAL MUST: Secrets and .env
- NEVER store live
.envfiles or credentials inside any skill folder. .env.templatefiles belong only intemplates/within a skill.- Store live secrets in
~/.admin/.env(or another non-skill location you control) and reference them from there.
Requires: Device profile from admin skill
Profile-First Approach
Skills tracked in central registry:
# Registry location
$AdminProfile.paths.skillsRegistry
# "C:/Users/Owner/.admin/skills-registry.json"
# Installed skills
$Registry.installedSkills | Format-Table Name, Source, Clients, Status
jq '.installedSkills' "$SKILLS_REGISTRY_PATH"
Registry Schema
{
"schemaVersion": "1.0",
"clients": { ... }, // Known AI clients
"skillSources": { ... }, // Marketplaces/repos
"installedSkills": { ... }, // Per-skill tracking
"clientInstallations": { ... }, // Per-client summary
"installMethods": { ... }, // How to install
"syncHistory": [ ... ] // Audit trail
}
Template: templates/skills-registry.json
Quick Reference: Clients
| Client | Install Method | Skills Path | Capabilities |
|---|---|---|---|
| Claude Code | plugin marketplace | ~/.claude/skills/ | skills, commands, agents |
| Claude Desktop | manual/MCP | N/A | skills (via MCP) |
| Cursor | .cursorrules | ~/.cursor/rules/ | rules only |
| OpenCode | symlink | ~/.config/opencode/skills/ | skills |
| Windsurf | rules file | ~/.windsurf/ | rules only |
| Gemini CLI | AGENTS.md | project root | agents |
List Installed Skills
$registry = Get-Content $AdminProfile.paths.skillsRegistry | ConvertFrom-Json
$registry.installedSkills.PSObject.Properties | ForEach-Object {
[PSCustomObject]@{
Name = $_.Name
Source = $_.Value.source
Clients = ($_.Value.clients -join ", ")
Status = $_.Value.status
Version = $_.Value.version
}
} | Format-Table
jq -r '.installedSkills | to_entries[] | [.key, .value.source, .value.status] | @tsv' "$SKILLS_REGISTRY_PATH" | column -t
Install Skill to Claude Code
Via Marketplace (Recommended)
# Add marketplace (one-time)
/plugin marketplace add evolv3-ai/vibe-skills
# Install bundle
/plugin install admin
# Or individual skill
/plugin install ./skills/admin-skills
Update Registry After Install
$registry = Get-Content $AdminProfile.paths.skillsRegistry | ConvertFrom-Json
$registry.installedSkills["admin-skills"] = @{
source = "evolv3-ai/vibe-skills"
version = "1.0.0"
installDate = (Get-Date -Format "yyyy-MM-dd")
installMethod = "plugin"
bundle = "admin"
clients = @("claude-code")
status = "active"
lastVerified = (Get-Date -Format "yyyy-MM-dd")
notes = "Skill registry management"
}
$registry.lastUpdated = (Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ")
$registry | ConvertTo-Json -Depth 10 | Set-Content $AdminProfile.paths.skillsRegistry
Sync Skill to Other Clients
Export for Cursor/Windsurf
# Export skill content to rules format
SKILL_PATH="$HOME/.claude/skills/admin-skills"
TARGET="$HOME/.cursor/rules/admin-skills.md"
# Copy with header
echo "# admin-skills (from evolv3-ai/vibe-skills)" > "$TARGET"
cat "$SKILL_PATH/SKILL.md" >> "$TARGET"
# Update registry
# Mark as installed on cursor client
Export for Gemini CLI
# Skills become agents in AGENTS.md format
# Append to project's AGENTS.md
cat >> AGENTS.md << 'EOF'
## admin-skills Agent
Source: evolv3-ai/vibe-skills
Purpose: Skill registry management
EOF
Audit Skills
Check All Installed
function Test-SkillsHealth {
$registry = Get-Content $AdminProfile.paths.skillsRegistry | ConvertFrom-Json
foreach ($skill in $registry.installedSkills.PSObject.Properties) {
$name = $skill.Name
$info = $skill.Value
# Check if skill files exist
$skillPath = "$($AdminProfile.paths.claudeSkills)/$name"
$exists = Test-Path $skillPath
[PSCustomObject]@{
Skill = $name
Source = $info.source
Status = $info.status
FilesExist = $exists
LastVerified = $info.lastVerified
}
}
}
Test-SkillsHealth | Format-Table
Verify Against Source
# Check if local skill matches source version
SKILL="admin-skills"
SOURCE="evolv3-ai/vibe-skills"
# Get source version (from GitHub)
REMOTE_VERSION=$(curl -s "https://raw.githubusercontent.com/$SOURCE/main/skills/$SKILL/SKILL.md" | grep -oP 'version:\s*"\K[^"]+')
# Get local version
LOCAL_VERSION=$(jq -r ".installedSkills[\"$SKILL\"].version" "$SKILLS_REGISTRY_PATH")
echo "Local: $LOCAL_VERSION, Remote: $REMOTE_VERSION"
Remove Skill
From Claude Code
# Remove symlink or plugin
rm -rf ~/.claude/skills/skill-name
# Or via plugin
/plugin uninstall skill-name
Update Registry
$registry = Get-Content $AdminProfile.paths.skillsRegistry | ConvertFrom-Json
# Mark as removed (keep history)
$registry.installedSkills["skill-name"].status = "removed"
$registry.installedSkills["skill-name"].clients = @()
# Or fully remove
$registry.installedSkills.PSObject.Properties.Remove("skill-name")
$registry | ConvertTo-Json -Depth 10 | Set-Content $AdminProfile.paths.skillsRegistry
Marketplace Management
List Configured Marketplaces
$registry = Get-Content $AdminProfile.paths.skillsRegistry | ConvertFrom-Json
$registry.skillSources | Format-List
Add New Marketplace
$registry.skillSources["my-org/skills"] = @{
type = "marketplace"
url = "https://github.com/my-org/skills"
description = "My organization's skills"
bundles = @("custom")
default = $false
}
$registry | ConvertTo-Json -Depth 10 | Set-Content $AdminProfile.paths.skillsRegistry
Sync History
Track all changes:
$registry.syncHistory += @{
date = (Get-Date -Format "yyyy-MM-dd")
action = "install"
source = "evolv3-ai/vibe-skills"
changes = @("Added admin-skills v1.0.0")
}
View history:
jq '.syncHistory | reverse | .[0:10]' "$SKILLS_REGISTRY_PATH"
Integration with admin Profile
Add to Device Profile
# Add skills registry path to device profile
$AdminProfile.paths.skillsRegistry = "$($AdminProfile.paths.adminRoot)/skills-registry.json"
$AdminProfile | ConvertTo-Json -Depth 10 | Set-Content $AdminProfile.paths.deviceProfile
# Initialize registry if needed
if (-not (Test-Path $AdminProfile.paths.skillsRegistry)) {
Copy-Item "templates/skills-registry.json" $AdminProfile.paths.skillsRegistry
}
Cross-Reference with MCP
Skills that provide MCP tools should be tracked in both registries:
# If skill adds MCP server, update both
$AdminProfile.mcp.servers["skill-mcp"] = @{ ... }
$registry.installedSkills["skill-mcp-provider"].mcpServer = "skill-mcp"
References
references/REGISTRY_SCHEMA.md- Full schema documentationreferences/CLIENT_COMPATIBILITY.md- Per-client installation guidesreferences/SYNC_PATTERNS.md- Multi-client sync strategies
Scripts
| Script | Purpose |
|---|---|
Update-SkillsRegistry.ps1 | PowerShell registry updater |
sync-skills.sh | Bash multi-client sync |
audit-skills.ps1 | Health check all skills |
Related Skills
| Skill | Purpose |
|---|---|
admin | Device profile orchestrator |
admin-mcp | MCP server management |
