# `ClaudeWrapper.Config`
[🔗](https://github.com/joshrotenberg/claude_wrapper_ex/blob/main/lib/claude_wrapper/config.ex#L1)

Shared client configuration for the Claude CLI.

Equivalent to the Rust `Claude` struct — holds binary path, working directory,
environment variables, and default options that apply across all commands.

## Usage

    config = ClaudeWrapper.Config.new()
    config = ClaudeWrapper.Config.new(working_dir: "/path/to/project")

# `t`

```elixir
@type t() :: %ClaudeWrapper.Config{
  binary: String.t(),
  debug: boolean(),
  env: [{String.t(), String.t()}],
  timeout: pos_integer() | nil,
  verbose: boolean(),
  working_dir: String.t() | nil
}
```

# `base_args`

```elixir
@spec base_args(t()) :: [String.t()]
```

Build the base command args from config (global flags).

# `cmd_opts`

```elixir
@spec cmd_opts(t()) :: keyword()
```

Build the cmd options (working dir, env) for System.cmd/Port.

# `find_binary`

```elixir
@spec find_binary() :: String.t()
```

Find the claude binary path.

Checks in order:
1. `CLAUDE_CLI` environment variable
2. System PATH

# `new`

```elixir
@spec new(keyword()) :: t()
```

Create a new config from keyword options.

## Options

  * `:binary` - Path to the claude binary (default: auto-discover)
  * `:working_dir` - Working directory for the subprocess
  * `:env` - List of `{key, value}` environment variable tuples
  * `:timeout` - Command timeout in milliseconds
  * `:verbose` - Enable verbose output
  * `:debug` - Enable debug output

---

*Consult [api-reference.md](api-reference.md) for complete listing*
