use std::io;
use std::path::PathBuf;
use crate::sandbox;
pub(crate) fn run_guard(marker: Option<String>) -> anyhow::Result<()> {
let marker_path = marker
.map(PathBuf::from)
.unwrap_or_else(default_marker_path);
let payload = io::read_to_string(io::stdin()).unwrap_or_default();
if let Some(verdict) = sandbox::guard_decision(&payload, sandbox::read_marker(&marker_path)) {
print!("{verdict}");
}
Ok(())
}
pub(crate) fn run_guard_codex(marker: Option<String>) -> anyhow::Result<()> {
let marker_path = marker
.map(PathBuf::from)
.unwrap_or_else(default_codex_marker_path);
let payload = io::read_to_string(io::stdin()).unwrap_or_default();
if let Some(verdict) =
sandbox::codex_guard_decision(&payload, sandbox::read_marker(&marker_path))
{
print!("{verdict}");
}
Ok(())
}
pub(crate) fn run_teardown_guard() -> anyhow::Result<()> {
let torn = sandbox::teardown_guard(&std::env::current_dir()?);
println!(
"{}",
if torn {
"🛡 Write guard removed."
} else {
"No write guard was installed — nothing to remove."
}
);
Ok(())
}
fn default_marker_path() -> PathBuf {
std::env::current_dir()
.unwrap_or_default()
.join(".claude")
.join("skills")
.join(sandbox::GUARD_MARKER)
}
fn default_codex_marker_path() -> PathBuf {
std::env::current_dir()
.unwrap_or_default()
.join(".agents")
.join("skills")
.join(sandbox::GUARD_MARKER)
}