From 51d358f9d92da5674115c32be92be1fc8259ad35 Mon Sep 17 00:00:00 2001 From: vigneshnrfs Date: Sun, 29 Mar 2026 09:03:51 +0530 Subject: [PATCH 1/2] fix: detect skills and mcp_servers changes in agent config reload The agent config reload logic was missing skills and mcp_servers from the change detection, so edits to these fields in agent.toml weren't being picked up when loading agents from SQLite. Added both fields to the comparison to ensure proper hot-reload. --- crates/openfang-kernel/src/kernel.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crates/openfang-kernel/src/kernel.rs b/crates/openfang-kernel/src/kernel.rs index 3bb4a3fc..af72349d 100644 --- a/crates/openfang-kernel/src/kernel.rs +++ b/crates/openfang-kernel/src/kernel.rs @@ -1089,7 +1089,11 @@ impl OpenFangKernel { || disk_manifest.tool_allowlist != entry.manifest.tool_allowlist || disk_manifest.tool_blocklist - != entry.manifest.tool_blocklist; + != entry.manifest.tool_blocklist + || disk_manifest.skills + != entry.manifest.skills + || disk_manifest.mcp_servers + != entry.manifest.mcp_servers; if changed { info!( agent = %name, From a428b1cd662a061975589c43939df651b21b1c6f Mon Sep 17 00:00:00 2001 From: vigneshnrfs Date: Sun, 29 Mar 2026 09:12:25 +0530 Subject: [PATCH 2/2] test: add test for agent skills/mcp_servers TOML parsing The skills and mcp_servers fields must be at the top level of the agent.toml, not after [capabilities], due to TOML implicit table ordering rules. --- .../openfang-kernel/tests/integration_test.rs | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/crates/openfang-kernel/tests/integration_test.rs b/crates/openfang-kernel/tests/integration_test.rs index f546ff17..2a6cd44e 100644 --- a/crates/openfang-kernel/tests/integration_test.rs +++ b/crates/openfang-kernel/tests/integration_test.rs @@ -161,3 +161,39 @@ memory_write = ["self.*"] kernel.kill_agent(id2).unwrap(); kernel.shutdown(); } + +#[test] +fn test_agent_manifest_skills_parsing() { + let toml_str = r#" +name = "skills-test-agent" +version = "0.1.0" +description = "Test agent with skills" +author = "test" +module = "builtin:chat" + +skills = ["Productivity", "web-search"] +mcp_servers = ["github"] + +[model] +provider = "groq" +model = "llama-3.3-70b-versatile" + +[capabilities] +tools = ["file_read"] + +[resources] +max_llm_tokens_per_hour = 100000 +"#; + + let manifest: AgentManifest = toml::from_str(toml_str).unwrap(); + assert_eq!( + manifest.skills, + vec!["Productivity", "web-search"], + "Skills should be parsed correctly (must be at top level, not after [capabilities])" + ); + assert_eq!( + manifest.mcp_servers, + vec!["github"], + "MCP servers should be parsed correctly (must be at top level)" + ); +}