claude — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited claude (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Use when asked for "claude review", "claude challenge", "ask claude", "second opinion from claude", or "outside voice".
eval "$(~/.vibestack/bin/vibe-slug 2>/dev/null)" 2>/dev/null || SLUG="unknown"
_LEARN_FILE="${VIBESTACK_HOME:-$HOME/.vibestack}/projects/${SLUG:-unknown}/learnings.jsonl"
if [ -f "$_LEARN_FILE" ]; then
_LEARN_COUNT=$(wc -l < "$_LEARN_FILE" 2>/dev/null | tr -d ' ')
echo "LEARNINGS: $_LEARN_COUNT entries loaded"
if [ "$_LEARN_COUNT" -gt 5 ] 2>/dev/null; then
~/.vibestack/bin/vibe-learnings-search --limit 5 2>/dev/null || true
fi
else
echo "LEARNINGS: none yet"
fi{{include lib/snippets/session-host.md}}
{{include lib/snippets/decision-brief.md}}
{{include lib/snippets/working-protocols.md}}
{{include lib/snippets/state-protocols.md}}
BASE_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo "main")This skill wraps claude -p to get an independent Claude Code second opinion without allowing nested Claude to modify files.
The generated external invocation name is vibe-claude.
CLAUDE_BIN=$(command -v claude 2>/dev/null || echo "")
[ -z "$CLAUDE_BIN" ] && echo "NOT_FOUND" || echo "FOUND: $CLAUDE_BIN"If NOT_FOUND, stop and tell the user: "Claude CLI not found. Install Claude Code, then re-run this skill."
Check auth:
if [ -f "$HOME/.claude/.credentials.json" ] || [ -n "${ANTHROPIC_API_KEY:-}" ]; then
echo "AUTH_FOUND"
else
echo "AUTH_MISSING"
fiIf AUTH_MISSING, stop and tell the user: "No Claude authentication found. Run claude interactively to log in, or export ANTHROPIC_API_KEY, then re-run this skill."
Nested Claude must stay focused on the user's repository and must not run vibestack skills from inside this skill.
All claude -p calls MUST include:
--disable-slash-commands--tools ""--allowedTools Read,Grep,Glob --disallowedTools Bash,Edit,WriteNever pass Bash, Edit, or Write to nested Claude in this skill.
All prompts MUST be written to a temp file and fed through stdin. Never interpolate user text directly into the shell command.
Parse the user's input:
/claude review or /claude review <instructions> - Review mode (Step 2A)/claude challenge or /claude challenge <focus> - Challenge mode (Step 2B)/claude with no arguments, or /claude <anything else> - Consult mode (Step 2C)If no mode is obvious and a diff exists, ask whether to review, challenge, or consult.
Use these shell snippets in every mode.
Create temp files:
PROMPT_FILE=$(mktemp /tmp/vibe-claude-prompt-XXXXXX)
RESP_FILE=$(mktemp /tmp/vibe-claude-response-XXXXXX.json)
ERR_FILE=$(mktemp /tmp/vibe-claude-error-XXXXXX.txt)Cleanup at the end of every mode:
rm -f "$PROMPT_FILE" "$RESP_FILE" "$ERR_FILE"Parse JSON output:
python3 - "$RESP_FILE" <<'PY'
import json, sys
path = sys.argv[1]
try:
obj = json.load(open(path))
except Exception as exc:
print(f"CLAUDE_JSON_PARSE_ERROR: {exc}")
sys.exit(0)
if obj.get("is_error"):
print("CLAUDE_ERROR: true")
result = obj.get("result") or obj.get("response") or ""
if result:
print(result)
usage = obj.get("usage") or {}
input_tokens = usage.get("input_tokens", 0) or 0
output_tokens = usage.get("output_tokens", 0) or 0
cache_read = usage.get("cache_read_input_tokens", 0) or 0
model = obj.get("model") or "unknown"
session_id = obj.get("session_id") or ""
print(f"\nTokens: input={input_tokens} output={output_tokens} cache_read={cache_read} | Model: {model}")
if session_id:
print(f"SESSION_ID:{session_id}")
PYIf stderr contains auth, login, or unauthorized, tell the user: "Claude authentication failed. Run claude interactively to authenticate or export ANTHROPIC_API_KEY."
Review the current branch diff with nested Claude in tool-less mode.
_REPO_ROOT=$(git rev-parse --show-toplevel) || { echo "ERROR: not in a git repo" >&2; exit 1; }
cd "$_REPO_ROOT"
DIFF_FILE=$(mktemp /tmp/vibe-claude-diff-XXXXXX.patch)
git fetch origin "$BASE_BRANCH" --quiet 2>/dev/null || true
git diff "origin/$BASE_BRANCH" > "$DIFF_FILE" 2>/dev/null || git diff "$BASE_BRANCH" > "$DIFF_FILE"If the diff file is empty, stop and say: "Nothing to review - no changes against the base branch."
cat > "$PROMPT_FILE" <<'EOF'
You are a brutally honest Claude Code reviewer. Review this git diff for bugs,
production failure modes, security issues, missing tests, and maintainability
problems. Be direct. No compliments. Reference files and changed code where possible.
Additional user instructions, if any:
<custom review instructions>
DIFF:
EOF
cat "$DIFF_FILE" >> "$PROMPT_FILE"cat "$PROMPT_FILE" | claude -p --output-format json --disable-slash-commands --tools "" > "$RESP_FILE" 2>"$ERR_FILE"CLAUDE SAYS (code review):
============================================================
<parsed result from RESP_FILE>
============================================================rm -f "$DIFF_FILE" "$PROMPT_FILE" "$RESP_FILE" "$ERR_FILE"Run an adversarial failure-mode review with nested Claude in tool-less mode.
cat > "$PROMPT_FILE" <<'EOF'
You are an adversarial Claude Code reviewer. Try to break this change before users do.
Find edge cases, race conditions, security holes, resource leaks, silent data
corruption, bad error handling, and operational failure modes. Be thorough. No
compliments. If the user provided a focus area, prioritize it.
Focus area, if any:
<focus>
DIFF:
EOF
cat "$DIFF_FILE" >> "$PROMPT_FILE"cat "$PROMPT_FILE" | claude -p --output-format json --disable-slash-commands --tools "" > "$RESP_FILE" 2>"$ERR_FILE"CLAUDE SAYS (adversarial challenge):
============================================================
<parsed result from RESP_FILE>
============================================================rm -f "$DIFF_FILE" "$PROMPT_FILE" "$RESP_FILE" "$ERR_FILE"Ask Claude about the repository. Consult mode may inspect files, but only with read-only tools.
cat .context/claude-session-id 2>/dev/null || echo "NO_SESSION"If a session exists, ask the user whether to continue it or start fresh.
cat > "$PROMPT_FILE" <<'EOF'
You are Claude Code acting as an independent outside voice for this repository.
Answer the user's question directly. You may inspect repository files with Read,
Grep, and Glob only. Do not use Bash. Do not edit or write files. Do not invoke
slash commands or vibestack skills.
USER QUESTION:
<user prompt>
EOFFor a new session:
cat "$PROMPT_FILE" | claude -p --output-format json --disable-slash-commands --allowedTools Read,Grep,Glob --disallowedTools Bash,Edit,Write > "$RESP_FILE" 2>"$ERR_FILE"For a resumed session:
cat "$PROMPT_FILE" | claude -p --resume "<session-id>" --output-format json --disable-slash-commands --allowedTools Read,Grep,Glob --disallowedTools Bash,Edit,Write > "$RESP_FILE" 2>"$ERR_FILE"SESSION_ID=$(python3 - "$RESP_FILE" <<'PY'
import json, sys
try:
obj = json.load(open(sys.argv[1]))
print(obj.get("session_id") or "")
except Exception:
print("")
PY
)
if [ -n "$SESSION_ID" ]; then
mkdir -p .context
printf "%s\n" "$SESSION_ID" > .context/claude-session-id
fiCLAUDE SAYS (consult):
============================================================
<parsed result from RESP_FILE>
============================================================
Session saved - run /claude again to continue this conversation.rm -f "$PROMPT_FILE" "$RESP_FILE" "$ERR_FILE"$RESP_FILE and stderr from $ERR_FILE..context/claude-session-id and retry with a fresh session.--disable-slash-commands.Bash, Edit, or Write.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.