253273b007
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.
60 lines
1.6 KiB
Bash
Executable File
60 lines
1.6 KiB
Bash
Executable File
#!/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"
|