88 lines
2.9 KiB
Bash
88 lines
2.9 KiB
Bash
#!/usr/bin/env bash
|
|
# claude-obsidian: multi-agent skill installer
|
|
# Symlinks the skills/ directory into each AI agent's expected location.
|
|
# Idempotent: safe to run multiple times.
|
|
#
|
|
# Supported agents:
|
|
# - Claude Code : auto-discovered via .claude-plugin/ (no symlink needed)
|
|
# - Codex CLI : symlink to ~/.codex/skills/claude-obsidian
|
|
# - OpenCode : symlink to ~/.opencode/skills/claude-obsidian
|
|
# - Gemini CLI : symlink to ~/.gemini/skills/claude-obsidian
|
|
# - Cursor : symlink to .cursor/skills (in repo)
|
|
# - Windsurf : symlink to .windsurf/skills (in repo)
|
|
#
|
|
# Bootstrap files (AGENTS.md, GEMINI.md, .cursor/rules/, .windsurf/rules/,
|
|
# .github/copilot-instructions.md) are already committed in the repo.
|
|
# This script just wires up the skills directory.
|
|
|
|
set -euo pipefail
|
|
|
|
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
SKILLS_DIR="$REPO_ROOT/skills"
|
|
|
|
if [ ! -d "$SKILLS_DIR" ]; then
|
|
echo "ERROR: $SKILLS_DIR does not exist. Are you running this from the claude-obsidian repo?"
|
|
exit 1
|
|
fi
|
|
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
GRAY='\033[0;37m'
|
|
NC='\033[0m'
|
|
|
|
link_if_missing() {
|
|
local target="$1"
|
|
local dest="$2"
|
|
local agent_name="$3"
|
|
|
|
mkdir -p "$(dirname "$dest")"
|
|
|
|
if [ -L "$dest" ]; then
|
|
local existing="$(readlink "$dest")"
|
|
if [ "$existing" = "$target" ]; then
|
|
echo -e "${GRAY}[$agent_name] already linked: $dest${NC}"
|
|
return
|
|
else
|
|
echo -e "${YELLOW}[$agent_name] symlink exists but points elsewhere: $dest -> $existing (skipping, remove manually if you want to relink)${NC}"
|
|
return
|
|
fi
|
|
fi
|
|
|
|
if [ -e "$dest" ]; then
|
|
echo -e "${YELLOW}[$agent_name] path exists and is not a symlink: $dest (skipping)${NC}"
|
|
return
|
|
fi
|
|
|
|
ln -s "$target" "$dest"
|
|
echo -e "${GREEN}[$agent_name] linked: $dest -> $target${NC}"
|
|
}
|
|
|
|
echo "claude-obsidian: multi-agent skill installer"
|
|
echo "Repo: $REPO_ROOT"
|
|
echo
|
|
|
|
# Codex CLI
|
|
link_if_missing "$SKILLS_DIR" "$HOME/.codex/skills/claude-obsidian" "Codex CLI"
|
|
|
|
# OpenCode
|
|
link_if_missing "$SKILLS_DIR" "$HOME/.opencode/skills/claude-obsidian" "OpenCode"
|
|
|
|
# Gemini CLI
|
|
link_if_missing "$SKILLS_DIR" "$HOME/.gemini/skills/claude-obsidian" "Gemini CLI"
|
|
|
|
# Cursor (workspace-local)
|
|
link_if_missing "$SKILLS_DIR" "$REPO_ROOT/.cursor/skills" "Cursor"
|
|
|
|
# Windsurf (workspace-local)
|
|
link_if_missing "$SKILLS_DIR" "$REPO_ROOT/.windsurf/skills" "Windsurf"
|
|
|
|
echo
|
|
echo -e "${GREEN}Done.${NC} Bootstrap files (AGENTS.md, GEMINI.md, .cursor/rules/, .windsurf/rules/, .github/copilot-instructions.md) are already in this repo."
|
|
echo
|
|
echo "To verify each agent picks up the skills:"
|
|
echo " - Claude Code: open the project, type /wiki"
|
|
echo " - Codex CLI: codex --list-skills | grep claude-obsidian"
|
|
echo " - Cursor: open the project, ask 'what skills do you have?'"
|
|
echo " - Windsurf: open in Cascade, ask the same"
|
|
echo " - Gemini CLI: gemini --list-skills (if supported)"
|