# `SquidMesh.Tools`
[🔗](https://github.com/ccarvalho-eng/squid_mesh/blob/main/lib/squid_mesh/tools.ex#L1)

Public boundary for invoking external tools from workflow steps.

Tool adapters provide a stable integration layer for steps that need to talk
to external systems without leaking transport-specific response or error
shapes into workflow code.

# `adapter`

```elixir
@type adapter() :: module()
```

# `context`

```elixir
@type context() :: map()
```

# `invoke_error`

```elixir
@type invoke_error() ::
  {:invalid_request, :expected_map}
  | {:invalid_context, :expected_map}
  | {:invalid_adapter, module()}
```

# `request`

```elixir
@type request() :: map()
```

# `invoke`

```elixir
@spec invoke(adapter(), request(), context(), keyword()) ::
  {:ok, SquidMesh.Tools.Result.t()} | {:error, SquidMesh.Tools.Error.t()}
```

Invokes a tool adapter through the shared contract.

---

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