pub struct Claude { /* private fields */ }Expand description
The Claude CLI client. Holds shared configuration applied to all commands.
Create one via Claude::builder() and reuse it across commands.
Implementations§
Source§impl Claude
impl Claude
Sourcepub fn builder() -> ClaudeBuilder
pub fn builder() -> ClaudeBuilder
Create a new builder for configuring the Claude client.
Sourcepub fn working_dir(&self) -> Option<&Path>
pub fn working_dir(&self) -> Option<&Path>
Get the working directory, if set.
Sourcepub fn with_working_dir(&self, dir: impl Into<PathBuf>) -> Self
pub fn with_working_dir(&self, dir: impl Into<PathBuf>) -> Self
Create a clone of this client with a different working directory.
Sourcepub async fn cli_version(&self) -> Result<CliVersion>
pub async fn cli_version(&self) -> Result<CliVersion>
Query the installed CLI version.
Runs claude --version and parses the output into a CliVersion.
§Example
let claude = claude_wrapper::Claude::builder().build()?;
let version = claude.cli_version().await?;
println!("Claude CLI {version}");Sourcepub async fn check_version(&self, minimum: &CliVersion) -> Result<CliVersion>
pub async fn check_version(&self, minimum: &CliVersion) -> Result<CliVersion>
Check that the installed CLI version meets a minimum requirement.
Returns the detected version on success, or an error if the version is below the minimum.
§Example
use claude_wrapper::CliVersion;
let claude = claude_wrapper::Claude::builder().build()?;
let version = claude.check_version(&CliVersion::new(2, 1, 0)).await?;
println!("CLI version {version} meets minimum requirement");Sourcepub fn cli_version_sync(&self) -> Result<CliVersion>
pub fn cli_version_sync(&self) -> Result<CliVersion>
Blocking mirror of Claude::cli_version. Requires the
sync feature.
Sourcepub fn check_version_sync(&self, minimum: &CliVersion) -> Result<CliVersion>
pub fn check_version_sync(&self, minimum: &CliVersion) -> Result<CliVersion>
Blocking mirror of Claude::check_version. Requires the
sync feature.
Sourcepub fn tested_cli_version_range(&self) -> Option<(CliVersion, CliVersion)>
pub fn tested_cli_version_range(&self) -> Option<(CliVersion, CliVersion)>
The tested-against [min, max] range declared at build time
via ClaudeBuilder::tested_cli_version_range, if any.
None means no override was set, in which case version checks
use the crate’s own TESTED_CLI_VERSION_MIN /
TESTED_CLI_VERSION_MAX; see Self::effective_tested_range.
Sourcepub fn effective_tested_range(&self) -> (CliVersion, CliVersion)
pub fn effective_tested_range(&self) -> (CliVersion, CliVersion)
The range version checks actually use: the caller’s override when one was set, otherwise the crate’s own declared range.
Sourcepub async fn cli_version_status(&self) -> Result<CliVersionStatus>
pub async fn cli_version_status(&self) -> Result<CliVersionStatus>
Classify the installed CLI against the tested-against range.
Logs a tracing::warn! when outside the range; returns the
typed status either way.
The range defaults to the crate’s own
TESTED_CLI_VERSION_MIN / TESTED_CLI_VERSION_MAX,
because only the crate knows what it was built and tested
against. ClaudeBuilder::tested_cli_version_range overrides
it for hosts that have verified a different range themselves.
Intended for one-shot use at startup, not on every command.
Sourcepub fn cli_version_status_sync(&self) -> Result<CliVersionStatus>
pub fn cli_version_status_sync(&self) -> Result<CliVersionStatus>
Blocking mirror of Claude::cli_version_status. Requires
the sync feature.
Sourcepub async fn ensure_tested_cli_version(&self) -> Result<CliVersion>
pub async fn ensure_tested_cli_version(&self) -> Result<CliVersion>
Refuse to proceed against a CLI outside the tested range.
The opt-in hard gate. Claude::cli_version_status is the
reporting path and keeps its behavior: it returns a typed
status and warns. This one turns the same condition into
Error::UntestedCliVersion, for hosts that would rather fail
at startup than run on an unverified binary.
Returns the detected version on success. The drift warning still fires on the failure path, so a host that logs and a host that gates see the same line.
§Why this is a method and not a builder option
ClaudeBuilder::build is synchronous and never spawns the
binary. Enforcing a version there would mean running a
subprocess inside a constructor, so the check lives where the
caller can await it.
§Example
let claude = claude_wrapper::Claude::builder().build()?;
// Run once at startup; returns Err on an untested CLI.
let version = claude.ensure_tested_cli_version().await?;
println!("running against {version}");Sourcepub fn ensure_tested_cli_version_sync(&self) -> Result<CliVersion>
pub fn ensure_tested_cli_version_sync(&self) -> Result<CliVersion>
Blocking mirror of Claude::ensure_tested_cli_version.
Requires the sync feature.