feat: add LaunchClaudeCode.sh wrapper script
Add configurable shell script wrapper for Claude Code CLI with: - All CLI options with documentation links - Sensible defaults and environment variable support - Comprehensive help system and bash best practices 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
250
LaunchClaudeCode.sh
Executable file
250
LaunchClaudeCode.sh
Executable file
@@ -0,0 +1,250 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# LaunchClaudeCode.sh - A wrapper script for invoking Claude Code with configurable options
|
||||||
|
# This script provides sensible defaults and easy configuration for all Claude Code CLI options
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# CONFIGURATION OPTIONS
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#add-dir
|
||||||
|
ADD_DIR=""
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#allowedtools
|
||||||
|
ALLOWED_TOOLS=""
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#disallowedtools
|
||||||
|
DISALLOWED_TOOLS=""
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#print
|
||||||
|
PRINT_MODE=false
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#output-format
|
||||||
|
OUTPUT_FORMAT="text" # Options: text, json, stream-json
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#input-format
|
||||||
|
INPUT_FORMAT="text" # Options: text, stream-json
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#verbose
|
||||||
|
VERBOSE=false
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#max-turns
|
||||||
|
MAX_TURNS=""
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#model
|
||||||
|
MODEL="sonnet" # Options: sonnet, opus, or full model name
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#permission-mode
|
||||||
|
PERMISSION_MODE=""
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#permission-prompt-tool
|
||||||
|
PERMISSION_PROMPT_TOOL=""
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#resume
|
||||||
|
RESUME_SESSION=""
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#continue
|
||||||
|
CONTINUE_SESSION=false
|
||||||
|
|
||||||
|
# https://docs.anthropic.com/en/docs/claude-code/cli-reference#dangerously-skip-permissions
|
||||||
|
SKIP_PERMISSIONS=false
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# SCRIPT FUNCTIONS
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
show_help() {
|
||||||
|
cat << EOF
|
||||||
|
Usage: $0 [OPTIONS] [QUERY]
|
||||||
|
|
||||||
|
A wrapper script for Claude Code CLI with configurable options.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h, --help Show this help message
|
||||||
|
--add-dir DIR Add additional working directory
|
||||||
|
--allowed-tools TOOLS Comma-separated list of tools to allow without prompting
|
||||||
|
--disallowed-tools TOOLS Comma-separated list of tools to disallow without prompting
|
||||||
|
-p, --print Print response without interactive mode
|
||||||
|
--output-format FORMAT Specify output format (text, json, stream-json)
|
||||||
|
--input-format FORMAT Specify input format (text, stream-json)
|
||||||
|
--verbose Enable detailed logging
|
||||||
|
--max-turns N Limit agentic turns in non-interactive mode
|
||||||
|
--model MODEL Set model for session (sonnet, opus, or full model name)
|
||||||
|
--permission-mode MODE Begin in specified permission mode
|
||||||
|
--permission-prompt-tool TOOL Specify MCP tool for permission prompts
|
||||||
|
-r, --resume SESSION_ID Resume specific session
|
||||||
|
-c, --continue Load most recent conversation
|
||||||
|
--skip-permissions Skip permission prompts (dangerous)
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
$0 # Start interactive REPL with defaults
|
||||||
|
$0 "Write a hello world" # Start REPL with initial prompt
|
||||||
|
$0 -p "What is 2+2?" # Print response and exit
|
||||||
|
$0 -c # Continue most recent conversation
|
||||||
|
$0 -r session123 "Continue" # Resume specific session
|
||||||
|
|
||||||
|
Environment Variables:
|
||||||
|
All configuration options can be overridden by environment variables:
|
||||||
|
CLAUDE_ADD_DIR, CLAUDE_ALLOWED_TOOLS, CLAUDE_DISALLOWED_TOOLS, etc.
|
||||||
|
|
||||||
|
Documentation:
|
||||||
|
https://docs.anthropic.com/en/docs/claude-code/cli-reference
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
log_info() {
|
||||||
|
echo "[INFO] $*" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error() {
|
||||||
|
echo "[ERROR] $*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
check_dependencies() {
|
||||||
|
if ! command -v claude >/dev/null 2>&1; then
|
||||||
|
log_error "Claude Code CLI not found. Please install it first."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
build_claude_command() {
|
||||||
|
local -a cmd_args=("claude")
|
||||||
|
|
||||||
|
# Add optional arguments
|
||||||
|
[[ -n "$ADD_DIR" ]] && cmd_args+=("--add-dir" "$ADD_DIR")
|
||||||
|
[[ -n "$ALLOWED_TOOLS" ]] && cmd_args+=("--allowedTools" "$ALLOWED_TOOLS")
|
||||||
|
[[ -n "$DISALLOWED_TOOLS" ]] && cmd_args+=("--disallowedTools" "$DISALLOWED_TOOLS")
|
||||||
|
[[ "$PRINT_MODE" == "true" ]] && cmd_args+=("--print")
|
||||||
|
[[ "$OUTPUT_FORMAT" != "text" ]] && cmd_args+=("--output-format" "$OUTPUT_FORMAT")
|
||||||
|
[[ "$INPUT_FORMAT" != "text" ]] && cmd_args+=("--input-format" "$INPUT_FORMAT")
|
||||||
|
[[ "$VERBOSE" == "true" ]] && cmd_args+=("--verbose")
|
||||||
|
[[ -n "$MAX_TURNS" ]] && cmd_args+=("--max-turns" "$MAX_TURNS")
|
||||||
|
[[ "$MODEL" != "sonnet" ]] && cmd_args+=("--model" "$MODEL")
|
||||||
|
[[ -n "$PERMISSION_MODE" ]] && cmd_args+=("--permission-mode" "$PERMISSION_MODE")
|
||||||
|
[[ -n "$PERMISSION_PROMPT_TOOL" ]] && cmd_args+=("--permission-prompt-tool" "$PERMISSION_PROMPT_TOOL")
|
||||||
|
[[ -n "$RESUME_SESSION" ]] && cmd_args+=("--resume" "$RESUME_SESSION")
|
||||||
|
[[ "$CONTINUE_SESSION" == "true" ]] && cmd_args+=("--continue")
|
||||||
|
[[ "$SKIP_PERMISSIONS" == "true" ]] && cmd_args+=("--dangerously-skip-permissions")
|
||||||
|
|
||||||
|
# Add any remaining arguments (query)
|
||||||
|
cmd_args+=("$@")
|
||||||
|
|
||||||
|
printf '%s\n' "${cmd_args[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# MAIN SCRIPT
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
main() {
|
||||||
|
# Override defaults with environment variables
|
||||||
|
ADD_DIR="${CLAUDE_ADD_DIR:-$ADD_DIR}"
|
||||||
|
ALLOWED_TOOLS="${CLAUDE_ALLOWED_TOOLS:-$ALLOWED_TOOLS}"
|
||||||
|
DISALLOWED_TOOLS="${CLAUDE_DISALLOWED_TOOLS:-$DISALLOWED_TOOLS}"
|
||||||
|
PRINT_MODE="${CLAUDE_PRINT_MODE:-$PRINT_MODE}"
|
||||||
|
OUTPUT_FORMAT="${CLAUDE_OUTPUT_FORMAT:-$OUTPUT_FORMAT}"
|
||||||
|
INPUT_FORMAT="${CLAUDE_INPUT_FORMAT:-$INPUT_FORMAT}"
|
||||||
|
VERBOSE="${CLAUDE_VERBOSE:-$VERBOSE}"
|
||||||
|
MAX_TURNS="${CLAUDE_MAX_TURNS:-$MAX_TURNS}"
|
||||||
|
MODEL="${CLAUDE_MODEL:-$MODEL}"
|
||||||
|
PERMISSION_MODE="${CLAUDE_PERMISSION_MODE:-$PERMISSION_MODE}"
|
||||||
|
PERMISSION_PROMPT_TOOL="${CLAUDE_PERMISSION_PROMPT_TOOL:-$PERMISSION_PROMPT_TOOL}"
|
||||||
|
RESUME_SESSION="${CLAUDE_RESUME_SESSION:-$RESUME_SESSION}"
|
||||||
|
CONTINUE_SESSION="${CLAUDE_CONTINUE_SESSION:-$CONTINUE_SESSION}"
|
||||||
|
SKIP_PERMISSIONS="${CLAUDE_SKIP_PERMISSIONS:-$SKIP_PERMISSIONS}"
|
||||||
|
|
||||||
|
# Parse command line arguments
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
-h|--help)
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--add-dir)
|
||||||
|
ADD_DIR="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--allowed-tools)
|
||||||
|
ALLOWED_TOOLS="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--disallowed-tools)
|
||||||
|
DISALLOWED_TOOLS="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-p|--print)
|
||||||
|
PRINT_MODE=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--output-format)
|
||||||
|
OUTPUT_FORMAT="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--input-format)
|
||||||
|
INPUT_FORMAT="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--verbose)
|
||||||
|
VERBOSE=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--max-turns)
|
||||||
|
MAX_TURNS="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--model)
|
||||||
|
MODEL="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--permission-mode)
|
||||||
|
PERMISSION_MODE="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--permission-prompt-tool)
|
||||||
|
PERMISSION_PROMPT_TOOL="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-r|--resume)
|
||||||
|
RESUME_SESSION="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-c|--continue)
|
||||||
|
CONTINUE_SESSION=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--skip-permissions)
|
||||||
|
SKIP_PERMISSIONS=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
log_error "Unknown option: $1"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check dependencies
|
||||||
|
check_dependencies
|
||||||
|
|
||||||
|
# Build and execute command
|
||||||
|
if [[ "$VERBOSE" == "true" ]]; then
|
||||||
|
log_info "Executing: $(build_claude_command "$@" | tr '\n' ' ')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Execute claude command
|
||||||
|
readarray -t cmd_array < <(build_claude_command "$@")
|
||||||
|
exec "${cmd_array[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Only run main if script is executed directly
|
||||||
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||||
|
main "$@"
|
||||||
|
fi
|
Reference in New Issue
Block a user