From 29c404007807b98aa9d3f61d8392e65e57b4f3c7 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 19 May 2026 10:25:49 +0000 Subject: [PATCH 1/2] chore: install onsager-ai/dev-skills on SessionStart in cloud Adds a web-only SessionStart hook (.claude/hooks/session-start.sh) that runs `npx skills add -g onsager-ai/dev-skills --skill '*' -a claude-code` so Claude Code on the web sessions land with the cross- repo dev-skills bundle already installed under ~/.claude/skills/. Gated on $CLAUDE_CODE_REMOTE=true so local terminal sessions stay untouched. --- .claude/hooks/session-start.sh | 13 +++++++++++++ .claude/settings.json | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100755 .claude/hooks/session-start.sh diff --git a/.claude/hooks/session-start.sh b/.claude/hooks/session-start.sh new file mode 100755 index 000000000..ffdf19a74 --- /dev/null +++ b/.claude/hooks/session-start.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -euo pipefail + +# Cloud-only: in Claude Code on the web, every container starts fresh, so we +# install the onsager-ai/dev-skills bundle into ~/.claude/skills/ on each +# session start. Local terminal sessions are skipped so a developer's +# hand-installed skills are left alone. +if [ "${CLAUDE_CODE_REMOTE:-}" != "true" ]; then + exit 0 +fi + +echo "--- installing onsager-ai/dev-skills globally ---" +npx -y skills add -g onsager-ai/dev-skills --skill '*' -a claude-code -y diff --git a/.claude/settings.json b/.claude/settings.json index ac1386a42..32fb413cb 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -5,7 +5,7 @@ "hooks": [ { "type": "command", - "command": "echo '--- codervisor hooks: no setup needed ---'" + "command": "bash .claude/hooks/session-start.sh" } ] } From 0d3eb6035ba126769bec0a4e80b35ce46ead905b Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 19 May 2026 13:37:31 +0000 Subject: [PATCH 2/2] chore: make dev-skills install best-effort and drop double -y - Wrap `npx skills add` in `if !` so a transient npm/registry/GitHub failure logs a warning and lets the session continue without the bundle (was: hook would exit non-zero under `set -e`). - Drop the trailing `-y` (now passed only to `npx`); the `skills` CLI's agent-detect already installs non-interactively under Claude Code. Addresses Copilot review feedback on the parallel PRs in onsager-ai/onsager#424, onsager-ai/duhem#57, codervisor/lean-spec#303, onsager-ai/onsager-skills#20, and onsager-ai/telegramable#65. --- .claude/hooks/session-start.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.claude/hooks/session-start.sh b/.claude/hooks/session-start.sh index ffdf19a74..26ca29510 100755 --- a/.claude/hooks/session-start.sh +++ b/.claude/hooks/session-start.sh @@ -9,5 +9,10 @@ if [ "${CLAUDE_CODE_REMOTE:-}" != "true" ]; then exit 0 fi +# Best-effort: a transient npm/registry/GitHub blip shouldn't fail the whole +# session start. On failure we log a warning and let the session continue +# without the bundle. echo "--- installing onsager-ai/dev-skills globally ---" -npx -y skills add -g onsager-ai/dev-skills --skill '*' -a claude-code -y +if ! npx -y skills add -g onsager-ai/dev-skills --skill '*' -a claude-code; then + echo "warning: onsager-ai/dev-skills install failed; session will start without the bundle." >&2 +fi