# `Sake.Prompt`
[🔗](https://github.com/hattoriai/sake/blob/v0.4.0/lib/sake/prompt.ex#L1)

A prompt template: `arg` lines (strings only) and `get/2`, which returns
messages as `{:user | :assistant, text | %Sake.Content{}}`. `scope:`
(one or many) gates it by the token's scopes, and `authentication:`
(`[acr: ["mfa"], max_age: 300]`) by how the person signed in (see
"Step-up authentication" in `Sake.Server`).

# `complete`
*optional* 

```elixir
@callback complete(arg :: String.t(), partial :: String.t(), ctx :: Sake.Context.t()) ::
  {:ok, [String.t()]} | {:ok, [String.t()], keyword()}
```

# `get`

```elixir
@callback get(args :: map(), ctx :: Sake.Context.t()) ::
  {:ok, [{atom(), term()}]}
  | {:ok, [{atom(), term()}], keyword()}
  | {:error, String.t()}
  | {:error, {:missing_capability, map()}}
```

# `spec`

```elixir
@callback spec() :: Sake.Prompt.Spec.t()
```

# `arg`
*macro* 

---

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