# `Codex.Tools`
[🔗](https://github.com/nshkrdotcom/codex_sdk/blob/v0.16.1/lib/codex/tools.ex#L1)

Public API for registering and invoking Codex tools.

# `tool_info`

```elixir
@type tool_info() :: %{name: String.t(), module: module(), metadata: map()}
```

# `deregister`

```elixir
@spec deregister(Codex.Tools.Handle.t()) :: :ok
```

Deregisters a tool using the handle returned from `register/2`.

# `invoke`

```elixir
@spec invoke(String.t(), map(), map()) :: {:ok, map()} | {:error, term()}
```

Invokes a registered tool, passing argument and contextual data.

# `lookup`

```elixir
@spec lookup(String.t()) :: {:ok, tool_info()} | {:error, :not_found}
```

Looks up a registered tool by name.

# `metrics`

```elixir
@spec metrics() :: %{optional(String.t()) =&gt; map()}
```

Returns a snapshot of accumulated tool invocation metrics keyed by tool name.

# `register`

```elixir
@spec register(
  module(),
  keyword()
) :: {:ok, Codex.Tools.Handle.t()} | {:error, term()}
```

Registers a tool module with optional overrides.

Options:
  * `:name` – tool identifier (defaults to metadata `name` or module name)
  * `:description` – human readable description
  * `:schema` – optional structured output schema metadata

# `reset_metrics`

```elixir
@spec reset_metrics() :: :ok
```

Clears all recorded metrics. Primarily used in test setups.

---

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