diff --git a/cheddahbot/__main__.py b/cheddahbot/__main__.py index 7c1ad3c..8acc07d 100644 --- a/cheddahbot/__main__.py +++ b/cheddahbot/__main__.py @@ -51,6 +51,17 @@ def main(): except Exception as e: log.warning("Memory system not available: %s", e) + # Skill registry (markdown skills from skills/ directory) + try: + from .skills import SkillRegistry + + log.info("Initializing skill registry...") + skills_registry = SkillRegistry(config.skills_dir) + agent.set_skills_registry(skills_registry) + log.info("Loaded %d skills", len(skills_registry.list_skills())) + except Exception as e: + log.warning("Skill registry not available: %s", e) + # Phase 3+: Tool system try: from .tools import ToolRegistry diff --git a/cheddahbot/agent.py b/cheddahbot/agent.py index 96643c6..30a6f6e 100644 --- a/cheddahbot/agent.py +++ b/cheddahbot/agent.py @@ -70,6 +70,7 @@ class Agent: self.conv_id: str | None = None self._memory = None # set by app after memory system init self._tools = None # set by app after tool system init + self._skills_registry = None # set by app after skills init def set_memory(self, memory): self._memory = memory @@ -77,6 +78,9 @@ class Agent: def set_tools(self, tools): self._tools = tools + def set_skills_registry(self, registry): + self._skills_registry = registry + def ensure_conversation(self) -> str: if not self.conv_id: self.conv_id = uuid.uuid4().hex[:12] @@ -106,10 +110,15 @@ class Agent: tools_schema = self._tools.get_tools_schema() tools_description = self._tools.get_tools_description() + skills_context = "" + if self._skills_registry: + skills_context = self._skills_registry.get_prompt_section() + system_prompt = build_system_prompt( identity_dir=self.config.identity_dir, memory_context=memory_context, tools_description=tools_description, + skills_context=skills_context, ) # Load conversation history diff --git a/cheddahbot/router.py b/cheddahbot/router.py index fd426dc..df239db 100644 --- a/cheddahbot/router.py +++ b/cheddahbot/router.py @@ -9,8 +9,9 @@ def build_system_prompt( identity_dir: Path, memory_context: str = "", tools_description: str = "", + skills_context: str = "", ) -> str: - """Build the system prompt from identity files + memory + tools.""" + """Build the system prompt from identity files + memory + skills + tools.""" parts = [] # 1. Identity: SOUL.md @@ -27,7 +28,11 @@ def build_system_prompt( if memory_context: parts.append(f"# Relevant Memory\n{memory_context}") - # 4. Available tools + # 4. Skills context (injected by skill registry) + if skills_context: + parts.append(skills_context) + + # 5. Available tools if tools_description: parts.append(f"# Available Tools\n{tools_description}")