diff --git a/crates/goose/src/agents/extension_manager.rs b/crates/goose/src/agents/extension_manager.rs index abee7d7a2443..0bc242e2f7d6 100644 --- a/crates/goose/src/agents/extension_manager.rs +++ b/crates/goose/src/agents/extension_manager.rs @@ -1268,7 +1268,8 @@ impl ExtensionManager { } pub async fn collect_moim(&self) -> Option { - let timestamp = chrono::Local::now().format("%Y-%m-%d %H:%M:%S").to_string(); + // Use minute-level granularity to prevent conversation changes every second + let timestamp = chrono::Local::now().format("%Y-%m-%d %H:%M:00").to_string(); let mut content = format!("\nIt is currently {}\n", timestamp); let platform_clients: Vec<(String, McpClientBox)> = { @@ -1779,4 +1780,17 @@ mod tests { ); assert_eq!(result, "Authorization: Bearer secret123 and API key456"); } + + #[tokio::test] + async fn test_collect_moim_uses_minute_granularity() { + let em = ExtensionManager::new_without_provider(); + + if let Some(moim) = em.collect_moim().await { + // Timestamp should end with :00 (seconds fixed to 00) + assert!( + moim.contains(":00\n"), + "Timestamp should use minute granularity" + ); + } + } }