claude-harness/hooks/harness-check.sh

30 lines
2.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# SessionStart hook: проверяет, подключена ли обвязка к проекту в cwd.
# Всё на месте — молчит. Чего-то нет — пишет в контекст сессии инструкцию агенту.
# HARNESS_AUTO_ADOPT=1 в окружении → агенту велено подключать без вопроса.
set -uo pipefail
input=$(cat)
cwd=$(printf '%s' "$input" | python3 -c 'import sys,json; print(json.load(sys.stdin).get("cwd",""))' 2>/dev/null)
[ -n "$cwd" ] || exit 0
git -C "$cwd" rev-parse --is-inside-work-tree >/dev/null 2>&1 || exit 0
root=$(git -C "$cwd" rev-parse --show-toplevel)
missing=()
[ -d "$root/openspec" ] || missing+=("openspec/")
[ -d "$root/.codegraph" ] || missing+=(".codegraph/")
grep -qs '^## OpenSpec и superpowers' "$root/CLAUDE.md" || missing+=("секция «OpenSpec и superpowers» в CLAUDE.md")
[ ${#missing[@]} -eq 0 ] && exit 0
if [ -n "$(git -C "$root" status --porcelain)" ]; then
dirty=" Рабочее дерево не чистое — скрипт откажется; сначала попроси пользователя закоммитить или спрятать изменения."
else dirty=""; fi
if [ "${HARNESS_AUTO_ADOPT:-0}" = "1" ]; then
mode="Выполни это сейчас, до любых других действий, без вопроса, и одной строкой сообщи пользователю, что сделано."
else
mode="Прежде чем что-либо делать, спроси пользователя одним вопросом, подключить ли обвязку, и по «да» выполни."
fi
cat <<MSG
[claude-harness] В проекте $root не подключена обвязка: нет: $(printf '%s; ' "${missing[@]}" | sed 's/; $//').
Подключение: \`bash "$HOME/.claude/harness/adopt-project.sh" "$root"\` — скрипт сам делает ветку chore/harness-init, бутстрап, коммит и ff-merge; хук guard-main его пропускает.$dirty
$mode После этого продолжай с запросом пользователя.
MSG
exit 0