athola/sem-integration
Provides sem semantic-diff detection, install-on-first-use, and fallback patterns. Use when building skills that consume git diff output.
npx skills add https://github.com/athola/claude-night-market --skill sem-integration
Foundation patterns for using
sem semantic
diffs in night-market skills.
Consult this skill when building or modifying skills that
consume git diff output. It provides the detection,
installation, and fallback patterns.
sem diff yourself)Check sem availability once per session:
# Detection (cache per session)
_sem_check() {
local cache="${CLAUDE_CODE_TMPDIR:-/tmp}/sem-available"
if [ -f "$cache" ]; then
cat "$cache"
return
fi
if command -v sem &>/dev/null; then
echo "1" | tee "$cache"
else
echo "0" | tee "$cache"
fi
}
When _sem_check returns 0, offer installation.
See modules/detection.md for install-on-first-use
logic and platform-specific commands.
Primary path (sem available):
sem diff --format json <baseline>
Fallback path (sem unavailable):
git diff --name-only --diff-filter=A <baseline>
git diff --name-only --diff-filter=M <baseline>
git diff --name-only --diff-filter=D <baseline>
git diff --name-only --diff-filter=R <baseline>
See modules/fallback.md for output normalization
that produces the same entity schema from both paths.
Primary path (sem available):
sem impact --json <file-or-entity>
Fallback path (sem unavailable): use rg/grep to trace
callers by filename. See modules/fallback.md.
_sem_check result cached per session at${CLAUDE_CODE_TMPDIR:-/tmp}/sem-available; detection command
runs at most once per session regardless of how many skills
invoke it
path used automatically (git diff --name-only --diff-filter=
variants); no silent failure
JSON output per modules/fallback.md; consumers downstream
see the same structure from both paths
dependencies: [leyline:sem-integration] in frontmatter
rather than reimplementing the detection pattern
Take athola/sem-integration from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.