pub trait AgentAdapter {
// Required methods
fn name(&self) -> &'static str;
fn exec_command(
&self,
phase: u32,
prompt: &str,
extra_writable_roots: &[PathBuf],
) -> (&'static str, Vec<String>);
fn completion_signal_detected(&self, output: &str) -> bool;
// Provided methods
fn extra_env(&self) -> Vec<(String, String)> { ... }
fn preflight(&self, _state: &State) -> Result<(), String> { ... }
}Expand description
Common behavior implemented by every supported coding-agent backend.
Required Methods§
Sourcefn exec_command(
&self,
phase: u32,
prompt: &str,
extra_writable_roots: &[PathBuf],
) -> (&'static str, Vec<String>)
fn exec_command( &self, phase: u32, prompt: &str, extra_writable_roots: &[PathBuf], ) -> (&'static str, Vec<String>)
Build the command and arguments to launch this agent headless with the
given prompt for phase. Returns (program, args).
extra_writable_roots are directories OUTSIDE the agent’s working
directory that its sandbox must still be allowed to write. Linked git
worktrees keep their git metadata under the main repo’s .git/ — and
Codex additionally read-only-mounts the cwd’s resolved git dir, so
BOTH the common .git and the worktree admin dir
(.git/worktrees/<name>) must be granted explicitly (13-06 dogfood
finding, verified with codex sandbox probes). Adapters without a
sandbox ignore it.
Sourcefn completion_signal_detected(&self, output: &str) -> bool
fn completion_signal_detected(&self, output: &str) -> bool
Detect an agent-specific completion signal in captured output.
Provided Methods§
Sourcefn extra_env(&self) -> Vec<(String, String)>
fn extra_env(&self) -> Vec<(String, String)>
Extra environment variables for the agent process tree. Codex uses
this to disable commit/tag signing inside its sandbox: the operator’s
signing agent (ssh-agent/gpg-agent) is unreachable there, so signed
commits fail headless with a passphrase error (13-06 dogfood finding
— same rationale as the unsigned VersionBump tags). GIT_CONFIG_*
env scoping keeps the override out of every repo/global config.
Sourcefn preflight(&self, _state: &State) -> Result<(), String>
fn preflight(&self, _state: &State) -> Result<(), String>
Adapter-specific pre-launch readiness check (D-13/D-14 adapter hook,
Phase 17c). The default is a no-op — most adapters have nothing extra
to check, mirroring Self::extra_env’s empty-default shape. The
Err variant is a human-readable failure reason that flows into the
preflight gate’s context (run_preflight in devflow-cli/src/main.rs).
This is the trait surface Phase 18’s Hermes adapter implements to
enforce a non-empty reviewer/receiver set — no built-in adapter
(Claude/Codex/OpenCode) overrides it in Phase 17 because no
reviewer-set storage exists yet in state.rs/config.rs (review
consensus #6).
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".