The public API is centered on four functions:
PromptRunner.plan/2
PromptRunner.validate/2
PromptRunner.run/2
PromptRunner.run_prompt/2Input Shapes
PromptRunner.run/2 accepts:
- a prompt directory
- a legacy config path
- a list of
%PromptRunner.Prompt{} - a raw prompt string via
run_prompt/2
Planning
{:ok, plan} =
PromptRunner.plan("./prompts",
target: "/path/to/repo",
provider: :claude,
model: "haiku"
)Useful fields on plan:
plan.promptsplan.sourceplan.runtime_storeplan.committerplan.state_dirplan.config
Running
{:ok, run} =
PromptRunner.run("./prompts",
target: "/path/to/repo",
provider: :claude,
model: "haiku"
)Single prompt:
{:ok, run} =
PromptRunner.run_prompt(
"Create hello.txt with a greeting.",
target: "/path/to/repo",
provider: :claude,
model: "haiku"
)Defaults In API Mode
API mode defaults to:
- in-memory runtime state
NoopCommitter- no implicit
.prompt_runner/directory
That makes it suitable for workers, web requests, and background jobs.
Observer Callbacks
Supported callbacks:
on_eventon_prompt_startedon_prompt_completedon_prompt_failedon_run_completed
Example:
{:ok, run} =
PromptRunner.run("./prompts",
target: "/repo",
provider: :claude,
model: "haiku",
on_event: fn event -> IO.inspect(event.type) end
)Raw streaming events and PromptRunner lifecycle events are both delivered to
on_event.
PubSub Bridge
callback = PromptRunner.Observer.PubSub.callback(MyApp.PubSub, "prompt_runner:runs")
{:ok, run} =
PromptRunner.run("./prompts",
target: "/repo",
provider: :claude,
model: "haiku",
on_event: callback
)Explicit Prompt Structs
prompts = [
%PromptRunner.Prompt{
num: "01",
phase: 1,
sp: 3,
name: "Schema",
body: "Add the missing schema field.",
commit_message: "feat: add missing schema field"
}
]
{:ok, run} =
PromptRunner.run(prompts,
target: "/repo",
provider: :claude,
model: "haiku"
)