Packages
claude_code
0.32.2
0.36.5
0.36.4
0.36.3
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.1
0.32.2
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Claude Agent SDK for Elixir – Build AI agents with Claude Code
Current section
Files
Jump to
Current section
Files
lib/claude_code/plugin/cli.ex
defmodule ClaudeCode.Plugin.CLI do
@moduledoc false
alias ClaudeCode.Adapter.Port.Resolver
@doc """
Runs a `claude` CLI command and parses the output.
Resolves the CLI binary via `ClaudeCode.Adapter.Port.Resolver`, executes the
command through `ClaudeCode.System`, and applies the parse function on success.
Returns `{:error, output}` on non-zero exit codes.
"""
@spec run(
args :: [String.t()],
opts :: keyword(),
parse_fn :: (String.t() -> {:ok, term()} | {:error, String.t()})
) :: {:ok, term()} | {:error, term()}
def run(args, opts, parse_fn) do
with {:ok, binary} <- Resolver.find_binary(opts) do
case ClaudeCode.System.cmd(binary, args, stderr_to_stdout: true) do
{output, 0} -> parse_fn.(output)
{error_output, _exit_code} -> {:error, String.trim(error_output)}
end
end
end
@doc """
Builds `--scope <scope>` args from opts.
"""
@spec scope_args(keyword()) :: [String.t()]
def scope_args(opts) do
case Keyword.get(opts, :scope) do
nil -> []
scope -> ["--scope", to_string(scope)]
end
end
@doc """
Wraps trimmed output in an ok tuple.
"""
@spec ok_trimmed(String.t()) :: {:ok, String.t()}
def ok_trimmed(output), do: {:ok, String.trim(output)}
end