# `Gralkor.Message`
[🔗](https://github.com/elimydlarz/gralkor/blob/main/lib/gralkor/message.ex#L1)

Canonical message shape that Gralkor expects at its port boundary.

One shape, three roles. Adapters normalise their harness's events into this
form before calling `Gralkor.Client.capture/3`.

  * `:role` — `"user" | "assistant" | "behaviour"`. `behaviour` collapses
    thinking, tool calls, tool results, and any other harness-internal
    activity into a single role; Gralkor does not branch on interior shape
    beyond role.
  * `:content` — a string. Adapters choose how to render their events;
    Gralkor passes the content through to the distillation LLM and to the
    interpret prompt, labelled only by role.

# `role`

```elixir
@type role() :: String.t()
```

# `t`

```elixir
@type t() :: %Gralkor.Message{content: String.t(), role: role()}
```

# `new`

```elixir
@spec new(role(), String.t()) :: t()
```

---

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