plugins/bash-command-rejection/skills/bash-chaining-alternatives/SKILL.md
# Bash Chaining Alternatives This skill teaches you how to work around the bash command chaining restriction enforced by this plugin. ## Why Chaining is Blocked The `bash-command-rejection` plugin blocks these operators: | Operator | Name | Why Blocked | | -------- | ---------- | ----------------------------------------------------------------------------------- | | `&&` | AND chain | Runs cmd2 only if cmd1 su
npx skillsauth add nsheaps/ai-mktpl plugins/bash-command-rejection/skills/bash-chaining-alternativesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill teaches you how to work around the bash command chaining restriction enforced by this plugin.
The bash-command-rejection plugin blocks these operators:
| Operator | Name | Why Blocked |
| -------- | ---------- | ----------------------------------------------------------------------------------- |
| && | AND chain | Runs cmd2 only if cmd1 succeeds - can't check permissions for conditional execution |
| \| | Pipe | Streams output to another command - can't review what the receiving command does |
| ; | Sequential | Runs multiple commands - each should be reviewed separately |
Allowed: || (OR/fallback) is permitted because it's error handling, not output chaining.
Instead of:
npm install && npm run build
Do:
npm install
Then in a separate call:
npm run build
Instead of:
cat file.txt | grep "pattern"
Do:
cat file.txt > /tmp/output.txt
Then use the Grep tool or Read tool to examine the output.
Or if you must use bash:
grep "pattern" /tmp/output.txt
Claude Code has dedicated tools that are safer than bash pipes:
| Instead of | Use |
| --------------------------- | ---------------------------- |
| cat file \| grep pattern | Grep tool with file path |
| find . -name "*.js" | Glob tool with pattern |
| cat file.txt | Read tool |
| sed -i 's/old/new/g' file | Edit tool |
For complex multi-step operations, write a shell script:
#!/bin/bash
# deploy.sh - Production deployment script
set -euo pipefail
echo "Running tests..."
npm test
echo "Building..."
npm run build
echo "Deploying..."
rsync -av ./dist/ server:/var/www/app/
Save the script, let the user review it, then:
bash deploy.sh
If chaining is truly necessary and safe, add an acknowledgment comment:
# CHAINED: Building inside docker container, both commands needed atomically
docker build -t myapp . && docker run myapp
Only use this when:
Instead of:
git add . && git commit -m "message" && git push
Do each step separately:
git add .
git commit -m "message"
git push
Instead of:
npm test && npm run build
Run tests:
npm test
If tests pass, build:
npm run build
Instead of:
ls -la | grep "\.js$"
Use the Glob tool with pattern *.js, or:
ls -la > /tmp/files.txt
Then use Grep tool to search /tmp/files.txt.
tools
Manually reproduce what the github-app plugin's SessionStart hook does to make a GitHub App installation token usable in the current session — materialize the PEM, generate the token, isolate GH_CONFIG_DIR, write the runtime env file, and wire CLAUDE_ENV_FILE so every Bash call sees GH_TOKEN/GITHUB_TOKEN. Use when the hook did not run, the token is missing from the environment, or a shell/teammate needs the token wired up by hand. <example>GH_TOKEN isn't set even though github-app is configured</example> <example>the github-app SessionStart hook didn't run, set up the token manually</example> <example>wire the github app token into CLAUDE_ENV_FILE</example> <example>gh keeps falling back to the wrong account, isolate GH_CONFIG_DIR</example>
tools
Manually configure the GitHub App bot git identity the way the github-app plugin's SessionStart hook does — resolve the app slug and bot user ID, build the <slug>[bot] name and noreply email, set GIT_AUTHOR_*/GIT_COMMITTER_* env vars, and write an isolated GIT_CONFIG_GLOBAL with the gh auth git-credential helper. Use when commits are attributed to the wrong account, "Author identity unknown" appears, or git identity must be set up by hand. <example>my commits are showing up as the handler, not the bot</example> <example>git says Author identity unknown after the github-app hook ran</example> <example>configure the github app bot git identity manually</example> <example>set up the gh credential helper for git push</example>
tools
Manages spec files for requirements capture and validation
tools
Reference material for Claude Code internals — the on-disk layout under ~/.claude and project-scope .claude, the plugin cache, session-env propagation, and the full hook lifecycle. Auto-recall when working on Claude-Code-related tasks: writing or debugging hooks, authoring plugins, inspecting session state, troubleshooting why an env var is or isn't visible to a Bash tool call, or when paths under ~/.claude or ~/.claude/plugins/ come up.