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.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.