skeleton: plugin layout + docs, skill/agent migration deferred to iter 1
Establishes the repository structure for the skills plugin: - README + INSTALL describing the two-layer split (plugin mechanics vs per-project profile) - docs/design, profile-schema, pipeline, agent-template covering the universal discipline constants and the profile slot model - templates/project-profile.yml as a copy-and-fill starting point - templates/CLAUDE.md.fragment with the baseline orchestrator rules a project can import - install.sh / uninstall.sh wiring skills/ + agents/ into ~/.claude/ via idempotent symlinks - skills/ and agents/ directories empty except for migration READMEs; the actual SKILL bodies and agent files migrate from ~/dev/ailang/skills/ in the next iteration. No skill or agent runs yet — this commit only stands up the structure and documents the substitution model.
This commit is contained in:
Executable
+59
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
# Install the skills plugin globally into ~/.claude/.
|
||||
#
|
||||
# Creates symlinks from ~/.claude/skills/<name> and
|
||||
# ~/.claude/agents/<name> into this repo's skills/ and agents/
|
||||
# subdirectories. Idempotent — existing symlinks pointing to
|
||||
# this repo are left alone; existing entries that point elsewhere
|
||||
# are reported and skipped.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
CLAUDE_SKILLS="$HOME/.claude/skills"
|
||||
CLAUDE_AGENTS="$HOME/.claude/agents"
|
||||
|
||||
mkdir -p "$CLAUDE_SKILLS" "$CLAUDE_AGENTS"
|
||||
|
||||
link_one() {
|
||||
local src="$1"
|
||||
local dst="$2"
|
||||
if [ -L "$dst" ]; then
|
||||
local existing
|
||||
existing="$(readlink "$dst")"
|
||||
if [ "$existing" = "$src" ]; then
|
||||
echo "ok $dst -> $src"
|
||||
return 0
|
||||
fi
|
||||
echo "skip $dst already symlinked to $existing"
|
||||
return 0
|
||||
fi
|
||||
if [ -e "$dst" ]; then
|
||||
echo "skip $dst exists and is not a symlink"
|
||||
return 0
|
||||
fi
|
||||
ln -s "$src" "$dst"
|
||||
echo "link $dst -> $src"
|
||||
}
|
||||
|
||||
if [ -d "$REPO_DIR/skills" ]; then
|
||||
for s in "$REPO_DIR"/skills/*/; do
|
||||
[ -d "$s" ] || continue
|
||||
name="$(basename "$s")"
|
||||
link_one "$s" "$CLAUDE_SKILLS/$name"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -d "$REPO_DIR/agents" ]; then
|
||||
for a in "$REPO_DIR"/agents/*/; do
|
||||
[ -d "$a" ] || continue
|
||||
name="$(basename "$a")"
|
||||
link_one "$a" "$CLAUDE_AGENTS/$name"
|
||||
done
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Install complete."
|
||||
echo "Next: drop a profile into each project that should use the plugin:"
|
||||
echo " cp $REPO_DIR/templates/project-profile.yml <project>/.claude/dev-cycle-profile.yml"
|
||||
Reference in New Issue
Block a user