| name | continuous-learning |
| description | Voyager-inspired continuous learning system with Critic Agent, Reflection Agent, and Discord-based approval workflow for skill proposals. |
Continuous Learning System
The continuous learning system enables agents to improve over time through automated analysis, pattern recognition, and skill synthesis.
Architecture
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Learning System โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ Critic โโโโโถโ Reflection โโโโโถโ Synthesizer โ โ
โ โ Agent โ โ Agent โ โ โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ โ โ โ
โ โผ โผ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Shared Memory System โ โ
โ โ (Qdrant + Neo4j + Redis via Memory MCP) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Discord Approval Workflow โ โ
โ โ (Skill proposals โ Team review โ Auto-deploy) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Components
Critic Agent
Evaluates agent executions and provides structured feedback:
from kubani.agents.critic import CriticAgent
critic = CriticAgent()
evaluations = await critic.evaluate_recent_executions(
hours=24,
agent_id="k8s-monitor",
)
Reflection Agent
Synthesizes learnings across agents and identifies cross-cutting patterns:
from kubani.agents.reflection import ReflectionAgent
from kubani.agents.reflection.models import ReflectionResult, InsightType
reflection = ReflectionAgent()
result: ReflectionResult = await reflection.reflect(
time_window_hours=168,
min_evaluations=10,
)
Skill Synthesizer Agent
Proposes new skills based on successful patterns:
from kubani.agents.skill_synthesizer import SkillSynthesizerAgent
synthesizer = SkillSynthesizerAgent()
result = await synthesizer.synthesize_skills()
Discord Approval Workflow
Skill Proposals
When a skill is proposed, it's posted to Discord for review:
๐ New Skill Proposal: k8s/oom-remediation
๐ Description:
Automated remediation for OOM killed pods including
memory analysis and scaling recommendations.
๐ Confidence: 0.87
๐ Based on: 12 successful executions
React to approve:
โ
Approve and deploy
โ Reject
๐ Request modifications
Approval Flow
- Proposal Posted: Skill proposal appears in
#learning-proposals
- Team Review: Team members review and react
- Threshold Met: If โ
reactions >= threshold, skill is approved
- Auto-Deploy: Approved skills are automatically:
- Added to the skills library
- Synced to the registry
- Available to all agents
Configuration
learning:
enabled: true
critic_enabled: true
reflection_enabled: true
auto_approve_threshold: 0.95
require_discord_approval: true
min_examples_for_skill: 3
approval_timeout_hours: 72
discord:
learning_channel: "learning-proposals"
approval_reactions:
approve: "โ
"
reject: "โ"
modify: "๐"
approval_threshold: 2
Learning System Syndicate
The learning system runs as a syndicate that orchestrates the three agents:
from kubani.syndicates.learning_system import LearningSystemSyndicate
syndicate = LearningSystemSyndicate()
await syndicate.start()
await syndicate.trigger_evaluation(agent_id="k8s-monitor")
await syndicate.trigger_reflection()
await syndicate.trigger_synthesis()
Event Architecture
The learning system uses hybrid events:
from kubani.framework.events import EventType
EVALUATION_COMPLETE = "learning:evaluation_complete"
REFLECTION_COMPLETE = "learning:reflection_complete"
SKILL_PROPOSED = "learning:skill_proposed"
SKILL_APPROVED = "learning:skill_approved"
SKILL_REJECTED = "learning:skill_rejected"
Memory Integration
Storing Learnings via MCP
from kubani.framework.mcp import get_mcp_client
client = get_mcp_client()
await client.memory.store_learning(
agent_id="k8s-monitor",
learning_type="pattern",
content="OOM kills in production often indicate need for VPA",
confidence=0.85,
context={"namespace": "production", "pod": "api-server"},
)
Querying Learnings
results = await client.memory.search_learnings(
query="kubernetes memory issues",
agent_id="k8s-monitor",
limit=10,
)
Commands
View Learning Status
kubani learning status
kubani learning list --agent k8s-monitor --last 24h
kubani learning proposals
Trigger Learning Cycle
kubani learning evaluate --agent k8s-monitor
kubani learning reflect
kubani learning propose --pattern pattern-123
Manage Approvals
kubani learning approvals
kubani learning approve --proposal proposal-456
kubani learning reject --proposal proposal-456 --reason "Needs more examples"
Best Practices
- Start with critic enabled to collect execution data
- Review proposals carefully before approving
- Set appropriate thresholds for auto-approval
- Monitor the learning channel for new proposals
- Provide feedback on rejected proposals
- Track skill effectiveness after deployment
- Periodically review the knowledge graph
Monitoring
View learning metrics in the dashboard:
kubani dashboard
Dashboard shows:
- Learning rate over time
- Skill proposal success rate
- Pattern identification trends
- Knowledge graph visualization
- Agent improvement metrics