# Skill and Knowledge Learning System ## Overview The Skill and Knowledge Learning System automatically extracts learnings from completed tasks and QA passes, storing them in the shared knowledge graph for future skill recommendations and continuous decision-making improvements. This system enables Luzia to: - **Learn from successes**: Extract patterns from passing QA validations - **Build skill profiles**: Aggregate tool usage, patterns, and decision-making approaches - **Make recommendations**: Suggest effective approaches for similar future tasks - **Improve over time**: Store learnings persistently for cross-session learning ## Architecture ### Components ``` TaskExecution ↓ TaskAnalyzer → Patterns & Metadata ↓ SkillExtractor → Extracted Skills ↓ LearningEngine → Learning Objects ↓ KnowledgeGraph (research domain) ↓ SkillRecommender → Task Recommendations ``` ### Core Classes #### 1. **TaskAnalyzer** Analyzes task executions to extract patterns and metadata. ```python from lib.skill_learning_engine import TaskAnalyzer analyzer = TaskAnalyzer() # Analyze a single task execution = analyzer.analyze_task({ "task_id": "task_001", "prompt": "Refactor database schema", "project": "overbits", "status": "success", "tools_used": ["Bash", "Read", "Edit"], "duration": 45.2, "result_summary": "Schema refactored successfully", "qa_passed": True, "timestamp": "2026-01-09T12:00:00" }) # Extract patterns from multiple executions patterns = analyzer.extract_patterns(executions) # Returns: success_rate, average_duration, common_tools, etc. ``` #### 2. **SkillExtractor** Extracts skills from task executions and QA results. ```python from lib.skill_learning_engine import SkillExtractor extractor = SkillExtractor() # Extract skills from task skills = extractor.extract_from_task(execution) # Extract skills from QA results qa_skills = extractor.extract_from_qa_results(qa_results) # Aggregate multiple skill extractions aggregated = extractor.aggregate_skills(all_skills) ``` **Skill Categories:** - `tool_usage`: Tools used in task (Read, Bash, Edit, etc.) - `pattern`: Task patterns (optimization, debugging, testing, etc.) - `decision`: Decision-making approaches - `architecture`: Project/system knowledge #### 3. **LearningEngine** Processes and stores learnings in the knowledge graph. ```python from lib.skill_learning_engine import LearningEngine engine = LearningEngine() # Extract a learning from successful task learning = engine.extract_learning(execution, skills, qa_results) # Store in knowledge graph learning_id = engine.store_learning(learning) # Create skill entities skill_id = engine.create_skill_entity(skill) ``` #### 4. **SkillRecommender** Recommends skills for future tasks based on stored learnings. ```python from lib.skill_learning_engine import SkillRecommender recommender = SkillRecommender() # Get recommendations for a task recommendations = recommender.recommend_for_task( task_prompt="Optimize database performance", project="overbits" ) # Get overall skill profile profile = recommender.get_skill_profile() ``` #### 5. **SkillLearningSystem** Unified orchestrator for the complete learning pipeline. ```python from lib.skill_learning_engine import SkillLearningSystem system = SkillLearningSystem() # Process a completed task with QA results result = system.process_task_completion(task_data, qa_results) # Result includes: skills_extracted, learning_created, learning_id # Get recommendations recommendations = system.get_recommendations(prompt, project) # Get learning summary summary = system.get_learning_summary() ``` ## Integration with QA Validator The learning system integrates seamlessly with the QA validator: ### Manual Integration ```python from lib.qa_learning_integration import QALearningIntegrator integrator = QALearningIntegrator() # Run QA with automatic learning extraction result = integrator.run_qa_and_sync_with_learning(sync=True, verbose=True) ``` ### Via CLI ```bash # Standard QA validation python3 lib/qa_validator.py # QA validation with learning extraction python3 lib/qa_validator.py --learn --sync --verbose # Get statistics on learning integration python3 lib/qa_learning_integration.py --stats ``` ## Knowledge Graph Storage Learnings are stored in the `research` domain of the knowledge graph: ``` Entity Type: finding Name: learning_20260109_120000_Refactor_Database_Schema Content: - Title: Refactor Database Schema - Description: Task execution details - Skills Used: tool_bash, tool_read, tool_edit, ... - Pattern: refactoring_pattern - Applicability: overbits, tool_bash, decision, ... - Confidence: 0.85 Metadata: - skills: [list of skill names] - pattern: refactoring_pattern - confidence: 0.85 - applicability: [projects, tools, categories] - extraction_time: ISO timestamp ``` ### Accessing Stored Learnings ```python from lib.knowledge_graph import KnowledgeGraph kg = KnowledgeGraph("research") # Search for learnings learnings = kg.search("database optimization", limit=10) # Get specific learning learning = kg.get_entity("learning_20260109_120000_Refactor_Database_Schema") # Get related skills relations = kg.get_relations("learning_20260109_120000_...") # List all learnings all_learnings = kg.list_entities(entity_type="finding") ``` ## Usage Examples ### Example 1: Extract Learnings from Task Completion ```python from lib.skill_learning_engine import SkillLearningSystem system = SkillLearningSystem() # Task data from execution task_data = { "task_id": "deploy_overbits_v2", "prompt": "Deploy new frontend build to production with zero downtime", "project": "overbits", "status": "success", "tools_used": ["Bash", "Read", "Edit"], "duration": 120.5, "result_summary": "Successfully deployed with no downtime, 100% rollback verified", "qa_passed": True, "timestamp": "2026-01-09T15:30:00" } # QA validation results qa_results = { "passed": True, "results": { "syntax": True, "routes": True, "command_docs": True, }, "summary": { "errors": 0, "warnings": 0, "info": 5, } } # Process and extract learnings result = system.process_task_completion(task_data, qa_results) print(f"Skills extracted: {result['skills_extracted']}") print(f"Learning created: {result['learning_id']}") ``` ### Example 2: Get Recommendations for Similar Task ```python # Later, for a similar deployment task new_prompt = "Deploy database migration to production" recommendations = system.get_recommendations(new_prompt, project="overbits") for rec in recommendations: print(f"Skill: {rec['skill']}") print(f"From learning: {rec['source_learning']}") print(f"Confidence: {rec['confidence']:.1%}") ``` ### Example 3: Build Skill Profile ```python # Get overview of learned skills profile = system.get_learning_summary() print(f"Total learnings: {profile['total_learnings']}") print(f"Skills by category: {profile['by_category']}") print(f"Top 5 skills:") for skill, count in profile['top_skills'][:5]: print(f" {skill}: {count} occurrences") ``` ## Testing Run the comprehensive test suite: ```bash python3 -m pytest tests/test_skill_learning.py -v ``` **Test Coverage:** - Task analysis and pattern extraction - Skill extraction from tasks and QA results - Decision pattern recognition - Skill aggregation - Learning extraction and storage - Skill recommendations - Full integration pipeline All tests pass with mocked knowledge graph to avoid dependencies. ## Configuration The system is configured in the QA validator integration: **File:** `lib/qa_learning_integration.py` Key settings: - **Knowledge Graph Domain**: `research` (all learnings stored here) - **Learning Extraction Trigger**: QA pass with all validations successful - **Skill Categories**: tool_usage, pattern, decision, architecture - **Confidence Calculation**: Weighted average of skill confidence and QA pass rate ## Data Flow ``` Task Execution ↓ Task Analysis ├─→ Success rate: 85% ├─→ Average duration: 45 min ├─→ Common tools: [Bash, Read, Edit] └─→ Project distribution: {overbits: 60%, dss: 40%} ↓ Skill Extraction ├─→ Tool skills (from tools_used) ├─→ Decision patterns (from prompt) ├─→ Project knowledge (from project) └─→ QA validation skills ↓ Learning Creation ├─→ Title & description ├─→ Skill aggregation ├─→ Pattern classification ├─→ Confidence scoring └─→ Applicability determination ↓ Knowledge Graph Storage └─→ Entity: finding Relations: skill → learning Metadata: skills, pattern, confidence, applicability ↓ Future Recommendations └─→ Search similar tasks Extract applicable skills Rank by confidence ``` ## Performance Considerations **Learning Extraction:** - Runs only on successful QA passes (not a bottleneck) - Async-ready (future enhancement) - Minimal overhead (~100ms per extraction) **Recommendation:** - Uses FTS5 full-text search on KG - Limited to top 10 results - Confidence-ranked sorting **Storage:** - SQLite with FTS5 (efficient) - Automatic indexing and triggers - Scales to thousands of learnings ## Future Enhancements 1. **Async Extraction**: Background learning extraction during deployment 2. **Confidence Evolution**: Learnings gain/lose confidence based on outcomes 3. **Skill Decay**: Unused skills decrease in relevance over time 4. **Cross-Project Learning**: Share learnings between similar projects 5. **Decision Tracing**: Link recommendations back to specific successful tasks 6. **Feedback Loop**: Update learning confidence based on task outcomes 7. **Skill Trees**: Build hierarchies of related skills 8. **Collaborative Learning**: Share learnings across team instances ## Troubleshooting ### Learnings Not Being Created Check: 1. QA validation passes (`qa_results["passed"] == True`) 2. Knowledge graph is accessible and writable 3. No errors in `qa_learning_integration.py` output ```bash python3 lib/qa_validator.py --learn --verbose ``` ### Recommendations Are Empty Possible causes: 1. No learnings stored yet (run a successful task with `--learn`) 2. Task prompt doesn't match stored learning titles 3. Knowledge graph search not finding results Test with: ```bash python3 lib/skill_learning_engine.py recommend --task-prompt "Your task" --project overbits ``` ### Knowledge Graph Issues Check knowledge graph status: ```bash python3 lib/knowledge_graph.py stats python3 lib/knowledge_graph.py search "learning" ``` ## API Reference See inline documentation in: - `lib/skill_learning_engine.py` - Main system classes - `lib/qa_learning_integration.py` - QA integration - `tests/test_skill_learning.py` - Usage examples via tests ## Contributing To add new skill extraction patterns: 1. Add pattern to `SkillExtractor._extract_decision_patterns()` 2. Update test cases in `TestSkillExtractor.test_extract_decision_patterns()` 3. Test with: `python3 lib/skill_learning_engine.py test` 4. Document pattern in this guide ## License Part of Luzia Orchestrator. See parent project license.