From 9a40d13a5c9823077293fc3b56689e01cfed5a6d Mon Sep 17 00:00:00 2001 From: ReachableCEO Date: Wed, 16 Jul 2025 10:13:47 -0500 Subject: [PATCH] feat: add LaunchClaudeCode.sh wrapper script MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- LaunchClaudeCode.sh | 250 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100755 LaunchClaudeCode.sh diff --git a/LaunchClaudeCode.sh b/LaunchClaudeCode.sh new file mode 100755 index 0000000..6150afe --- /dev/null +++ b/LaunchClaudeCode.sh @@ -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 \ No newline at end of file