From e176639437fe02656c63c2ea3d6dd17169e04739 Mon Sep 17 00:00:00 2001 From: ProofOfConcept Date: Thu, 26 Mar 2026 14:22:05 -0400 Subject: [PATCH] cli: add --state-dir flag to agent run Override the agent output/input directory for manual testing. Sets POC_AGENT_OUTPUT_DIR so output() writes there and {{input:key}} reads from there. Co-Authored-By: Kent Overstreet --- src/cli/agent.rs | 15 +++++++++++++-- src/main.rs | 7 +++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/cli/agent.rs b/src/cli/agent.rs index 0350830..bc437d8 100644 --- a/src/cli/agent.rs +++ b/src/cli/agent.rs @@ -3,12 +3,18 @@ use crate::store; use crate::agents::llm; -pub fn cmd_run_agent(agent: &str, count: usize, target: &[String], query: Option<&str>, dry_run: bool, local: bool) -> Result<(), String> { +pub fn cmd_run_agent(agent: &str, count: usize, target: &[String], query: Option<&str>, dry_run: bool, local: bool, state_dir: Option<&str>) -> Result<(), String> { // Mark as agent so tool calls (e.g. poc-memory render) don't // pollute the user's seen set as a side effect // SAFETY: single-threaded at this point (CLI startup, before any agent work) unsafe { std::env::set_var("POC_AGENT", "1"); } + // Override agent output/state directory if specified + if let Some(dir) = state_dir { + std::fs::create_dir_all(dir).map_err(|e| format!("create state dir: {}", e))?; + unsafe { std::env::set_var("POC_AGENT_OUTPUT_DIR", dir); } + } + if dry_run { unsafe { std::env::set_var("POC_MEMORY_DRY_RUN", "1"); } } @@ -86,7 +92,12 @@ pub fn cmd_consolidate_batch(count: usize, auto: bool, agent: Option) -> if let Some(agent_name) = agent { let batch = crate::agents::prompts::agent_prompt(&store, &agent_name, count)?; - println!("{}", batch.prompt); + for (i, p) in batch.prompts.iter().enumerate() { + if batch.prompts.len() > 1 { + println!("=== STEP {} ===\n", i + 1); + } + println!("{}", p); + } Ok(()) } else { crate::agents::prompts::consolidation_batch(&store, count, auto) diff --git a/src/main.rs b/src/main.rs index 31951d5..423eb69 100644 --- a/src/main.rs +++ b/src/main.rs @@ -614,6 +614,9 @@ enum AgentCmd { /// Run locally instead of queuing to daemon #[arg(long)] local: bool, + /// Directory for agent output/input state (persists across runs) + #[arg(long)] + state_dir: Option, }, /// Show spaced repetition replay queue #[command(name = "replay-queue")] @@ -862,8 +865,8 @@ fn main() { AgentCmd::FactMine { path, batch, dry_run, output, min_messages } => cli::agent::cmd_fact_mine(&path, batch, dry_run, output.as_deref(), min_messages), AgentCmd::FactMineStore { path } => cli::agent::cmd_fact_mine_store(&path), - AgentCmd::Run { agent, count, target, query, dry_run, local } - => cli::agent::cmd_run_agent(&agent, count, &target, query.as_deref(), dry_run, local), + AgentCmd::Run { agent, count, target, query, dry_run, local, state_dir } + => cli::agent::cmd_run_agent(&agent, count, &target, query.as_deref(), dry_run, local, state_dir.as_deref()), AgentCmd::ReplayQueue { count } => cli::agent::cmd_replay_queue(count), AgentCmd::Evaluate { matchups, model, dry_run } => cli::agent::cmd_evaluate_agents(matchups, &model, dry_run),