# `Agentic.Persistence.Transcript`

Behaviour for append-only session event logging.

The `:local` implementation writes JSONL files to
`<workspace>/.agentic/sessions/<session_id>.jsonl`.

# `session_summary`

```elixir
@type session_summary() :: %{
  session_id: String.t(),
  workspace: String.t(),
  event_count: non_neg_integer(),
  first_event_at: DateTime.t() | nil,
  last_event_at: DateTime.t() | nil
}
```

# `append`

```elixir
@callback append(session_id :: String.t(), event :: map(), opts :: keyword()) ::
  :ok | {:error, term()}
```

# `list_sessions`

```elixir
@callback list_sessions(workspace :: String.t(), opts :: keyword()) ::
  {:ok, [session_summary()]} | {:error, term()}
```

# `load`

```elixir
@callback load(session_id :: String.t(), opts :: keyword()) ::
  {:ok, [map()]} | {:error, :not_found} | {:error, term()}
```

# `load_since`

```elixir
@callback load_since(session_id :: String.t(), after_turn :: integer(), opts :: keyword()) ::
  {:ok, [map()]} | {:error, term()}
```

---

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