Packages

Run Codex jobs on an Oban queue, with validated args, result helpers, telemetry, and an optional long-lived agent lifecycle.

Current section

Files

Jump to
oban_codex examples console.exs
Raw

examples/console.exs

# Load from iex:
#
# iex -S mix
# c "examples/console.exs"
# ObanCodex.Console.run("summarize this repository")
# ObanCodex.Console.continue("thread-id", "now list the risks")
#
# These are real, queueless Codex turns.
defmodule ObanCodex.Console do
@moduledoc false
def run(prompt, opts \\ []) do
opts =
Keyword.merge(
[
prompt: prompt,
working_dir: File.cwd!(),
sandbox: :read_only,
approval_policy: :never,
timeout: :timer.minutes(5)
],
opts
)
opts |> ObanCodex.Args.new() |> execute()
end
def continue(thread_id, prompt, opts \\ []) do
run(prompt, Keyword.put(opts, :session_id, thread_id))
end
defp execute(args) do
case ObanCodex.run(args) do
{:ok, result} ->
IO.puts(ObanCodex.text(result) || "")
IO.puts(
"\nthread=#{ObanCodex.session_id(result)} usage=#{inspect(ObanCodex.usage(result))}"
)
{:ok, result}
{verdict, payload} ->
IO.puts("Codex failed: #{inspect(verdict)}")
{:error, payload}
end
end
end