From 00d3d435e2ce2947a8df70d127c6fc56076c2c49 Mon Sep 17 00:00:00 2001 From: Greyson Lalonde Date: Thu, 5 Mar 2026 20:17:09 -0500 Subject: [PATCH] feat: support str for paths --- .../src/crewai/agents/agent_builder/base_agent.py | 12 ++++++++++-- lib/crewai/src/crewai/crew.py | 11 ++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/crewai/src/crewai/agents/agent_builder/base_agent.py b/lib/crewai/src/crewai/agents/agent_builder/base_agent.py index 1f8e77654..162768b3d 100644 --- a/lib/crewai/src/crewai/agents/agent_builder/base_agent.py +++ b/lib/crewai/src/crewai/agents/agent_builder/base_agent.py @@ -215,11 +215,19 @@ class BaseAgent(BaseModel, ABC, metaclass=AgentMeta): "If not set, falls back to crew memory." ), ) - skills: list[Path | Skill] | None = Field( + skills: list[str | Path | Skill] | None = Field( default=None, - description="Agent Skills. Accepts Paths for discovery or pre-loaded Skill objects.", + description="Agent Skills. Accepts paths (str or Path) for discovery or pre-loaded Skill objects.", ) + @field_validator("skills", mode="before") + @classmethod + def coerce_skill_paths(cls, v: list[Any] | None) -> list[Path | Skill] | None: + """Coerce string entries to Path objects.""" + if not v: + return v + return [Path(item) if isinstance(item, str) else item for item in v] + @model_validator(mode="before") @classmethod def process_model_config(cls, values: Any) -> dict[str, Any]: diff --git a/lib/crewai/src/crewai/crew.py b/lib/crewai/src/crewai/crew.py index 2f9fd5aad..6a5c623a2 100644 --- a/lib/crewai/src/crewai/crew.py +++ b/lib/crewai/src/crewai/crew.py @@ -292,10 +292,19 @@ class Crew(FlowTrackable, BaseModel): default=None, description="Knowledge for the crew.", ) - skills: list[Path] | None = Field( + skills: list[str | Path] | None = Field( default=None, description="Skill search paths applied to all agents in the crew.", ) + + @field_validator("skills", mode="before") + @classmethod + def coerce_skill_paths(cls, v: list[Any] | None) -> list[Path] | None: + """Coerce string entries to Path objects.""" + if not v: + return v + return [Path(item) if isinstance(item, str) else item for item in v] + security_config: SecurityConfig = Field( default_factory=SecurityConfig, description="Security configuration for the crew, including fingerprinting.",