All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.6.1 - 2026-04-09
Changed
- Bumped the published
agent_session_managerdependency to~> 0.9.2. - Updated the standalone example runners to install
agent_session_manager ~> 0.9.2. - Refreshed README and guide version references for
prompt_runner_sdk ~> 0.6.1.
0.6.0 - 2026-04-09
Changed
- Removed direct provider SDK package requirements from
prompt_runner_sdk. Host projects now install onlyprompt_runner_sdk, while provider CLI execution flows throughagent_session_managercore lane pluscli_subprocess_core. - Prompt Runner now starts ASM sessions with
lane: :coreexplicitly instead of inheriting ASM's default:autolane selection. - Replaced provider-SDK runtime preflight with provider/core-lane preflight based on ASM provider metadata and common CLI discovery facts.
- Updated README, guides, scaffolding, and shipped examples to use provider names as the standard config surface and to stop installing provider SDK packages.
Fixed
- Standalone scaffold output and shipped example
run_prompts.exsfiles no longer declare unnecessary provider SDK dependencies. - Prompt Runner now behaves consistently whether provider SDK packages happen to be installed locally or not, because the runner always stays on ASM core lane.
0.5.1 - 2026-04-09
Changed
- Bumped the published Codex dependency guidance and package spec to
codex_sdk ~> 0.16.1. - Refreshed README, getting-started, provider docs, scaffolded dependency
output, and example
Mix.installsnippets for the0.5.1/0.16.1release pair.
Fixed
- Codex CLI confirmation auditing now falls back to the actual launched
run_startedcommand args when hidden confirmation metadata does not include model or reasoning details, socli_confirmation: :requireno longer fails falsely on otherwise-correct Codex runs. - Hidden Codex confirmation events now merge event metadata with raw
thread.startedmetadata before Prompt Runner evaluates the confirmation payload.
0.5.0 - 2026-04-08
Changed
- Aligned the published dependency matrix with the current Hex releases:
agent_session_manager ~> 0.9.1claude_agent_sdk ~> 0.17.0codex_sdk ~> 0.16.0gemini_cli_sdk ~> 0.2.0amp_sdk ~> 0.5.0
- Updated runtime missing-provider guidance to point at the current SDK ranges.
PromptRunner.Scaffoldnow derives provider dependencies from the configured provider plus any per-prompt provider overrides instead of hardcoding a stale provider list into generatedrun_prompts.exsfiles.- Synced Prompt Runner's config/session surface to the current ASM and SDK
contracts:
- normalizes provider-native and legacy permission aliases onto the shared
runner modes
:default | :auto | :bypass | :plan - rejects stale provider-specific inputs such as Codex
sandboxandask_for_approvalat config load instead of failing later during runtime - preserves inherited root
timeoutandpermission_modevalues when a prompt override switches providers without redefining those fields
- normalizes provider-native and legacy permission aliases onto the shared
runner modes
- Refreshed README, provider docs, getting-started docs, and example docs to reflect the 0.5.0 provider matrix and current install instructions.
- Expanded the shipped example packs and standalone
run_prompts.exsscripts to exercise all four providers: Claude, Codex, Amp, and Gemini. - Example setup scripts now reset their workspaces before seeding, so repeated example runs start from a deterministic clean repo state.
- Local sibling-repo development now requires explicit opt-in via
PROMPT_RUNNER_USE_LOCAL_DEPS=1, and Hex packaging tasks ignore that opt-in so release builds never emitpath:dependencies. - Hex package builds now exclude generated example runtime artifacts such as seeded repos, workspaces, logs, and progress files.
Fixed
- Removed stale Prompt Runner Claude model remapping so current short aliases
such as
sonnetresolve throughclaude_agent_sdkinstead of an outdated hardcoded model id. - Aligned recovery-related prompt-control behavior with the actual current
runtime support in the local ASM/SDK stack:
- Claude no longer defaults
max_turnsto1when the runner does not set it - Amp rejects unsupported prompt controls such as
system_promptandmax_turnsinstead of silently accepting dead config - Gemini SDK startup now uses
approval_mode: :yolowithout duplicating the deprecatedyolo: trueflag
- Claude no longer defaults
- Corrected the live example provider contracts:
- Codex now stays on the supported ASM shared permission modes
(
:default | :bypass | :plan) instead of the invalid shared:autopath - Amp examples now use the current
amp-1model instead of a Claude model id - Gemini examples allow the current provider-native shell tool name
run_shell_command - multi-repo prompts now describe the real working-directory and sibling-repo layout used at runtime
- Codex now stays on the supported ASM shared permission modes
(
0.4.0 - 2026-02-11
Added
- Studio rendering mode (
log_mode: :studio) — CLI-grade interactive output using AgentSessionManager's newStudioRenderer- Human-readable tool summaries instead of raw JSON token streams
- Status symbols:
◐(running),✓(success),✗(failure),●(info) - Three tool output verbosity levels via
tool_output:config::summary(default),:preview,:full - Automatic non-TTY fallback for piped/redirected output
- New
--tool-outputCLI flag for runtime verbosity override (summary,preview,full) - New
tool_outputconfig key in runner configuration - Redesigned prompt header with box-drawing characters and aligned layout in studio mode
- New guide:
guides/rendering.mddocumenting all three rendering modes - Codex CLI confirmation and model auditing — verify that the Codex CLI is actually using the model and reasoning effort you configured
- New
cli_confirmationconfig key (:off,:warn,:require) — controls response to confirmation mismatches - New
--cli-confirmation MODECLI flag for runtime override - New
--require-cli-confirmationCLI flag (shortcut for--cli-confirmation require) - Machine-readable audit lines written to session logs (
LLM_AUDIT,LLM_AUDIT_CONFIRMED,LLM_AUDIT_RESULT) - Mismatch and missing-confirmation warnings printed to console when
cli_confirmation: :warn(default for Codex) - Hard failure when
cli_confirmation: :requireand CLI does not confirm reasoning effort - Per-prompt
cli_confirmationoverride viaprompt_overrides
- New
- Unbounded and infinite timeout support —
timeoutnow accepts:unbounded,:infinity,"unbounded","infinity", and"infinite"in addition to positive integers- Sentinel values resolve to a 7-day emergency cap in the session layer
- Works in both top-level config and per-prompt
prompt_overrides
- LLM SDK preflight checks — Runner verifies that the required SDK module is loaded before starting a prompt (currently Codex only), with clear error messages including the missing package name
- Stream error handling —
Rendering.stream/2failures (exceptions, throws) are now caught and returned as{:error, {:stream_failed, message}}instead of crashing the runner - Codex
reasoning_effortdisplayed in prompt plan output when configured viacodex_thread_opts
Changed
- Default
log_moderemains:compact(studio is opt-in for this release) - Default
cli_confirmationis:warnfor Codex prompts, effectively a no-op for other providers - Modularized
Runnerinternals — extracted helper functions for prompt header printing, permission mode display, adapter option display, and codex thread options - Stream error tracking now preserves structured
provider_errorpayloads from:error_occurred/:run_failedevents instead of flattening to generic strings return_errornow renders concise summaries by default and prints provider stderr detail only whenlog_meta: :full- Updated
guides/configuration.mdwith new rendering, timeout, and CLI confirmation options - Updated
guides/providers.mdwith Codex reasoning effort and CLI confirmation details - Updated
guides/getting-started.mdwith studio mode and new CLI flags - Updated README with rendering modes section, new CLI options, and error detail behavior
Dependencies
- Requires
agent_session_manager ~> 0.8.0(StudioRenderer module) claude_agent_sdkupdated to~> 0.12.0codex_sdkupdated to~> 0.8.0
0.3.0 - 2026-02-09
Changed
- Migrated rendering to
AgentSessionManager.Rendering—Runnernow builds a renderer/sink pipeline from config instead of callingStreamRenderer.stream/4. UsesCompactRendererorVerboseRendererwithTTYSink,FileSink,JSONLSink, andCallbackSink. - Migrated session lifecycle to
AgentSessionManager.StreamSession—Sessionnow delegates stream creation, task management, and cleanup toStreamSession.start/1instead of hand-rolling ~200 lines ofStream.resource, receive loop, error event constructors, task shutdown, and child cleanup. - Canonical event format —
Sessionno longer normalizes ASM events. Canonical events (:run_started,:message_streamed,:tool_call_started,:tool_call_completed,:run_completed, etc.) pass through directly to the rendering pipeline. Session.start_stream/2signature and return type unchanged — existing callers work without modification.start_adapterreplaced withbuild_adapter_specreturning{Module, opts}tuples instead of starting processes directly.PromptRunner.Applicationsimplified — removedPromptRunner.TaskSupervisorandPromptRunner.SessionSupervisor(StreamSession manages its own lifecycle).- Error tracking changed from
StreamRendererreturn value toCallbackSinkwith process dictionary (Process.put/:prompt_runner_stream_result). - Session header now written directly to log file IO device via
IO.binwriteinstead of throughStreamRenderer.emit_line. - Tests updated to emit canonical ASM events instead of previously-normalized types.
- Examples now use isolated workspace directories — each example has
setup.sh/cleanup.shscripts and a standalonerun_prompts.exsusingMix.install, so examples no longer operate within the SDK repository itself. - Updated documentation (providers.md, getting-started.md, configuration.md, README) to reflect canonical event format, removed supervisors, new rendering pipeline, and example isolation.
Removed
- Deleted
PromptRunner.StreamRenderer(935 lines) — all rendering now handled byAgentSessionManager.Rendering. - Removed
normalize_event/1and all event normalization functions fromSession(:message_start,:text_delta,:tool_use_start,:tool_complete,:message_stop, etc. mappings). - Removed
build_stream_session,build_event_stream,next_stream_events,done_error_events,run_once,start_store,stop_task,await_task_exit,cleanup_children,terminate_child,start_supervised_child,ensure_runtime_startedfromSession(all replaced by StreamSession). - Removed
PromptRunner.TaskSupervisorandPromptRunner.SessionSupervisorprocess tree entries. - Removed
examples/simple/claude-output.txt(examples now write to workspace directories).
Added
- Standalone
run_prompts.exsscripts for simple and multi-repo-dummy examples (useMix.installfor self-contained execution). setup.shandcleanup.shfor the simple example to manage an isolated git workspace.workspace/added to.gitignorefor example directories.
Dependencies
- Requires
agent_session_manager ~> 0.7.0(StreamSession and Rendering modules).
0.2.0 - 2026-02-08
Added
- Added
PromptRunner.ApplicationOTP supervision tree with:PromptRunner.TaskSupervisorfor run execution tasks.PromptRunner.SessionSupervisorfor adapter/store process lifecycle.
- Added
PromptRunner.Sessionas the AgentSessionManager bridge layer. - Added support for provider alias
amp(amp_sdk) in LLM normalization. - Added
adapter_optsconfig support at both root andllmscopes. - Normalized adapter options passthrough — Session now forwards these config keys to all adapters:
permission_mode—:default,:accept_edits,:plan,:full_auto, or:dangerously_skip_permissionsmax_turns— integer turn limit (Claude: unlimited by default, Codex: SDK default 10, Amp: no-op)system_prompt— system-level instructions (Claude:system_prompt, Codex:base_instructions, Amp: stored only)sdk_opts— keyword list of arbitrary provider-specific SDK options (normalized options take precedence)
- Claude
cwdpassthrough — Session passesproject_dirascwdto the Claude adapter, so the Claude CLI runs in the correct working directory.
Changed
- Migrated runtime execution from direct SDK integration to
agent_session_manager. - Reworked
PromptRunner.LLMFacadeinto a thin delegator toPromptRunner.Session. - Updated config normalization to accept both
providerand legacysdkkeys. - Updated examples and CLI help text to use
providerin config snippets. - Updated README guidance from dual-SDK to multi-provider terminology.
Removed
- Removed direct
PromptRunner.LLM.CodexNormalizerintegration and tests. - Removed direct
claude_agent_sdkandcodex_sdkdependency declarations.
Dependencies
- Added
agent_session_manager ~> 0.6.0(now~> 0.7.0as of 0.3.0).
0.1.2 - 2026-01-26
Added
- New
RepoTargetsmodule for expanding repo group references in target_repos. Groups are defined in config asrepo_groups: %{"pipeline" => ["command", "flowstone"]}and referenced in prompts.txt as@pipeline. - Support for nested group references (e.g.,
@portfoliocontaining@pipeline). - Cycle detection for repo group definitions with clear error messages.
- Validator now checks repo-specific commit messages for default repo when prompt has no explicit target_repos.
- Test suites for
RepoTargetsandValidatormodules.
Changed
Runnernow expands repo group references before resolving target repositories.Validatorexpands repo groups when checking commit messages and repo references.- Improved error handling when target repos cannot be resolved.
0.1.1 - 2026-01-26
Fixed
- Fixed single-repo commit path bug where
commit_single_repoalways committed toconfig.project_dirinstead of the resolved target repository path. Now correctly passes repo name and path fromrunner.extogit.ex.
Changed
- Added
:inetsto extra_applications for OTP HTTP client support. commit_single_repo/2now accepts optionalrepo_nameandrepo_pathparameters for explicit targeting.
Dependencies
- Updated
ex_docfrom 0.39.3 to 0.40.0. - Updated
finchfrom 0.20.0 to 0.21.0.
0.1.0 - 2026-01-18
- Initial release.
- Prompt runner CLI with streaming output.
- Claude Agent SDK and Codex SDK support via a unified facade.
- Multi-repo prompt execution with per-repo commit messages.
- Example prompt sets for single-repo and multi-repo workflows.