Cc-skills forbid
Add item to forbidden list (blocks work on matching topics). TRIGGERS - ru forbid, block topic, add forbidden, prevent work.
install
source · Clone the upstream repo
git clone https://github.com/terrylica/cc-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/terrylica/cc-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/ru/skills/forbid" ~/.claude/skills/terrylica-cc-skills-forbid && rm -rf "$T"
manifest:
plugins/ru/skills/forbid/SKILL.mdsource content
RU: Forbid
Add items to the forbidden list during an active loop session. Forbidden items are blocked from opportunity discovery.
Runtime configurable: Works with or without active loop. Changes apply on next iteration.
Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
Usage
- Add "documentation updates" to forbidden list/ru:forbid documentation updates
- Show current forbidden items/ru:forbid --list
- Clear all forbidden items/ru:forbid --clear
- Remove item matching phrase (fuzzy)/ru:forbid --remove <phrase>
Execution
/usr/bin/env bash << 'RALPH_FORBID_SCRIPT' PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" CONFIG_FILE="$PROJECT_DIR/.claude/ru-config.json" # Get arguments ARGS="${ARGUMENTS:-}" # Ensure config file exists with guidance structure if [[ ! -f "$CONFIG_FILE" ]]; then echo '{"guidance": {"forbidden": [], "encouraged": []}}' > "$CONFIG_FILE" fi # Ensure guidance structure exists if ! jq -e '.guidance' "$CONFIG_FILE" >/dev/null 2>&1; then jq '. + {guidance: {forbidden: [], encouraged: []}}' "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE" fi # Handle commands case "$ARGS" in "--list"|"-l") echo "Current forbidden items:" jq -r '.guidance.forbidden[]?' "$CONFIG_FILE" | while read -r item; do echo " ✗ $item" done COUNT=$(jq -r '.guidance.forbidden | length' "$CONFIG_FILE") echo "" echo "Total: $COUNT items" ;; "--clear"|"-c") jq '.guidance.forbidden = []' "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE" echo "Cleared all forbidden items" ;; --remove\ *) PHRASE="${ARGS#--remove }" MATCH=$(jq -r --arg phrase "$PHRASE" \ '.guidance.forbidden[] | select(. | ascii_downcase | contains($phrase | ascii_downcase))' \ "$CONFIG_FILE" | head -1) if [[ -z "$MATCH" ]]; then echo "No forbidden item matches: $PHRASE" exit 1 fi TS=$(date -u +%Y-%m-%dT%H:%M:%SZ) jq --arg match "$MATCH" --arg ts "$TS" \ '.guidance.forbidden |= map(select(. != $match)) | .guidance.timestamp = $ts' \ "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE" echo "Removed from forbidden list: $MATCH" ;; "") echo "Usage: /ru:forbid <phrase> | --list | --clear | --remove <phrase>" echo "" echo "Current forbidden items:" jq -r '.guidance.forbidden[]?' "$CONFIG_FILE" | while read -r item; do echo " ✗ $item" done ;; *) TS=$(date -u +%Y-%m-%dT%H:%M:%SZ) jq --arg item "$ARGS" --arg ts "$TS" \ '.guidance.forbidden = ((.guidance.forbidden // []) + [$item] | unique) | .guidance.timestamp = $ts' \ "$CONFIG_FILE" > "$CONFIG_FILE.tmp" && mv "$CONFIG_FILE.tmp" "$CONFIG_FILE" echo "Added to forbidden list: $ARGS" echo "" echo "Current forbidden items:" jq -r '.guidance.forbidden[]?' "$CONFIG_FILE" | while read -r item; do echo " ✗ $item" done ;; esac RALPH_FORBID_SCRIPT
Run the bash script above to manage forbidden items.
How It Works
- Config file: Changes are written to
.claude/ru-config.json - Next iteration applies: The Stop hook reads config fresh on each iteration
- Template rendering: Forbidden items appear in the
section## USER GUIDANCE
Troubleshooting
| Issue | Cause | Solution |
|---|---|---|
| jq error on add | Config file malformed | Run to recreate |
| Item not appearing | Typo or different casing | Use to verify exact text |
| Forbidden not enforced | RU not running | Start with |
| Remove by phrase fails | No match found | Use to see exact item names |
| Config file not found | .claude dir missing | Create with |
Post-Execution Reflection
After this skill completes, check before closing:
- Did the command succeed? — If not, fix the instruction or error table that caused the failure.
- Did parameters or output change? — If the underlying tool's interface drifted, update Usage examples and Parameters table to match.
- Was a workaround needed? — If you had to improvise (different flags, extra steps), update this SKILL.md so the next invocation doesn't need the same workaround.
Only update if the issue is real and reproducible — not speculative.