MCPcopy Index your code
hub / github.com/AI45Lab/Code / parse_agent_md

Function parse_agent_md

core/src/subagent.rs:857–900  ·  view source on GitHub ↗

Parse an agent definition from Markdown with YAML frontmatter The frontmatter contains agent metadata, and the body becomes the prompt.

(content: &str)

Source from the content-addressed store, hash-verified

855///
856/// The frontmatter contains agent metadata, and the body becomes the prompt.
857pub fn parse_agent_md(content: &str) -> anyhow::Result<AgentDefinition> {
858 // Parse frontmatter (YAML between --- markers)
859 let parts: Vec<&str> = content.splitn(3, "---").collect();
860
861 if parts.len() < 3 {
862 return Err(anyhow::anyhow!(
863 "Invalid markdown format: missing YAML frontmatter"
864 ));
865 }
866
867 let frontmatter = parts[1].trim();
868 let body = parts[2].trim();
869
870 // Parse the frontmatter as YAML. A `kind` field selects WorkerAgentSpec.
871 let value: serde_yaml::Value = serde_yaml::from_str(frontmatter)
872 .map_err(|e| anyhow::anyhow!("Failed to parse agent frontmatter: {}", e))?;
873
874 if yaml_value_has_key(&value, "kind") {
875 let tools = yaml_get_any(&value, &["tools", "allowedTools", "allowed_tools"])
876 .map(parse_tools_field)
877 .unwrap_or_default();
878 let disallowed_tools = yaml_get_any(
879 &value,
880 &["disallowedTools", "disallowed-tools", "disallowed_tools"],
881 )
882 .map(parse_tools_field)
883 .unwrap_or_default();
884 let mut spec = parse_worker_yaml_value(value, "frontmatter")?;
885 if spec.prompt.is_none() && !body.is_empty() {
886 spec.prompt = Some(body.to_string());
887 }
888 apply_claude_style_tools_to_spec(&mut spec, &tools, &disallowed_tools);
889 return Ok(spec.into_agent_definition());
890 }
891
892 let mut agent = parse_agent_yaml_value(value, "agent frontmatter")?;
893
894 // Use body as prompt if not already set in frontmatter.
895 if agent.prompt.is_none() && !body.is_empty() {
896 agent.prompt = Some(body.to_string());
897 }
898
899 Ok(agent)
900}
901
902/// Load all agent definitions from a directory
903///

Calls 8

yaml_value_has_keyFunction · 0.85
yaml_get_anyFunction · 0.85
parse_worker_yaml_valueFunction · 0.85
parse_agent_yaml_valueFunction · 0.85
into_agent_definitionMethod · 0.80
lenMethod · 0.45
is_emptyMethod · 0.45