Skip to content

Creating Agents

This guide covers everything you need to know about creating and configuring cognitive agents in Cognito Simulation Engine.

Quick Start: Creating Your First Agent

from cognito_sim_engine import CognitiveAgent, Goal

# Create a basic cognitive agent
agent = CognitiveAgent(
    agent_id="my_first_agent",
    personality_traits={
        "openness": 0.7,
        "conscientiousness": 0.8,
        "extraversion": 0.6,
        "agreeableness": 0.9,
        "neuroticism": 0.3
    }
)

# Set a goal for the agent
goal = Goal(
    description="Learn about machine learning",
    priority=0.8,
    target_facts=["understand_ml_basics", "apply_ml_algorithms"]
)

agent.add_goal(goal)

print(f"Created agent: {agent.agent_id}")
print(f"Agent goals: {[g.description for g in agent.goals]}")

Agent Types and Selection

1. CognitiveAgent - General Purpose

Best for: Balanced cognitive tasks, social interaction, general problem-solving

from cognito_sim_engine import CognitiveAgent

# General-purpose cognitive agent
general_agent = CognitiveAgent(
    agent_id="general_assistant",
    personality_traits={
        "openness": 0.7,
        "conscientiousness": 0.6,
        "extraversion": 0.5,
        "agreeableness": 0.8,
        "neuroticism": 0.4
    },
    cognitive_config={
        "memory_capacity": 1000,
        "reasoning_depth": 8,
        "learning_rate": 0.1,
        "attention_span": 50
    }
)

# Configure capabilities
general_agent.enable_capabilities([
    "logical_reasoning",
    "social_interaction", 
    "learning_adaptation",
    "goal_management"
])

2. ReasoningAgent - Logical Analysis

Best for: Mathematical proofs, logical puzzles, systematic analysis

from cognito_sim_engine import ReasoningAgent

# Specialized reasoning agent
logic_agent = ReasoningAgent(
    agent_id="logic_specialist",
    reasoning_config={
        "inference_strategy": "exhaustive",
        "proof_generation": True,
        "uncertainty_handling": True,
        "max_reasoning_depth": 20
    }
)

# Add domain-specific rules
from cognito_sim_engine import Rule, Fact

mathematical_rules = [
    Rule(
        conditions=[Fact("number", ["?x"]), Fact("even", ["?x"])],
        conclusion=Fact("divisible_by_two", ["?x"]),
        confidence=1.0,
        name="even_number_rule"
    ),
    Rule(
        conditions=[Fact("triangle", ["?t"]), Fact("sides_equal", ["?t", "3"])],
        conclusion=Fact("equilateral", ["?t"]),
        confidence=1.0,
        name="equilateral_triangle_rule"
    )
]

for rule in mathematical_rules:
    logic_agent.add_reasoning_rule(rule)

3. LearningAgent - Adaptive Intelligence

Best for: Dynamic environments, pattern recognition, skill acquisition

from cognito_sim_engine import LearningAgent, LearningStrategy

# Adaptive learning agent
adaptive_agent = LearningAgent(
    agent_id="adaptive_learner",
    learning_config={
        "strategy": LearningStrategy.REINFORCEMENT,
        "exploration_rate": 0.2,
        "learning_rate": 0.15,
        "memory_consolidation": True,
        "transfer_learning": True
    }
)

# Configure learning objectives
adaptive_agent.set_learning_objectives([
    "optimize_task_performance",
    "minimize_error_rate",
    "adapt_to_changes",
    "generalize_knowledge"
])

# Set up reward function
def custom_reward_function(action, outcome, context):
    """Define how the agent learns from outcomes"""
    reward = 0.0

    if outcome.success:
        reward += 1.0

    # Efficiency bonus
    if outcome.execution_time < action.expected_time:
        reward += 0.5

    # Error penalty
    reward -= 0.2 * len(outcome.errors)

    # Context-specific adjustments
    if context.get("difficulty") == "high" and outcome.success:
        reward += 0.3

    return reward

adaptive_agent.set_reward_function(custom_reward_function)

4. MetaCognitiveAgent - Strategic Thinking

Best for: Planning, strategy selection, self-monitoring

from cognito_sim_engine import MetaCognitiveAgent, MetaStrategy

# Meta-cognitive agent
meta_agent = MetaCognitiveAgent(
    agent_id="strategic_planner",
    meta_config={
        "self_monitoring": True,
        "strategy_selection": True,
        "cognitive_control": True,
        "reflection_depth": 5
    }
)

# Add meta-cognitive strategies
planning_strategy = MetaStrategy(
    name="task_planning",
    trigger_conditions=["new_complex_task", "multiple_goals"],
    meta_actions=[
        "decompose_task",
        "prioritize_subtasks", 
        "allocate_resources",
        "monitor_progress"
    ]
)

error_recovery_strategy = MetaStrategy(
    name="error_recovery",
    trigger_conditions=["task_failure", "unexpected_outcome"],
    meta_actions=[
        "analyze_failure_cause",
        "adjust_approach",
        "revise_expectations",
        "learn_from_mistake"
    ]
)

meta_agent.add_meta_strategy(planning_strategy)
meta_agent.add_meta_strategy(error_recovery_strategy)

Personality Configuration

Big Five Personality Traits

Configure agent personality using the scientifically validated Big Five model:

def create_personality_profiles():
    """Create different personality archetypes"""

    # Creative researcher profile
    creative_profile = {
        "openness": 0.9,        # High creativity, curiosity
        "conscientiousness": 0.6, # Moderately organized
        "extraversion": 0.7,    # Social, energetic
        "agreeableness": 0.8,   # Cooperative, trusting
        "neuroticism": 0.4      # Some anxiety drives creativity
    }

    # Methodical analyst profile
    analytical_profile = {
        "openness": 0.6,        # Open but focused
        "conscientiousness": 0.95, # Extremely organized
        "extraversion": 0.3,    # More introverted
        "agreeableness": 0.7,   # Cooperative but assertive
        "neuroticism": 0.2      # Very stable
    }

    # Social facilitator profile
    social_profile = {
        "openness": 0.7,        # Open to others' ideas
        "conscientiousness": 0.7, # Well-organized
        "extraversion": 0.9,    # Highly social
        "agreeableness": 0.9,   # Very cooperative
        "neuroticism": 0.3      # Stable under social pressure
    }

    return {
        "creative": creative_profile,
        "analytical": analytical_profile,
        "social": social_profile
    }

# Use personality profiles
profiles = create_personality_profiles()

creative_agent = CognitiveAgent(
    "creative_researcher",
    personality_traits=profiles["creative"]
)

analytical_agent = CognitiveAgent(
    "methodical_analyst", 
    personality_traits=profiles["analytical"]
)

social_agent = CognitiveAgent(
    "team_facilitator",
    personality_traits=profiles["social"]
)

Personality Effects on Behavior

Personality traits influence all aspects of agent behavior:

def demonstrate_personality_effects():
    """Show how personality affects agent behavior"""

    # Create agents with different personalities
    cautious_agent = CognitiveAgent(
        "cautious",
        personality_traits={"neuroticism": 0.8, "conscientiousness": 0.9}
    )

    adventurous_agent = CognitiveAgent(
        "adventurous", 
        personality_traits={"openness": 0.9, "neuroticism": 0.2}
    )

    # Same task, different approaches
    risky_task = Task(
        description="Explore new research direction",
        risk_level=0.7,
        novelty=0.8,
        time_pressure=0.6
    )

    # Cautious agent approach
    cautious_plan = cautious_agent.plan_approach(risky_task)
    print("🛡️ Cautious Agent Plan:")
    print(f"  Strategy: {cautious_plan.strategy}")  # Likely: "systematic_validation"
    print(f"  Risk mitigation: {cautious_plan.risk_mitigation}")
    print(f"  Preparation time: {cautious_plan.preparation_time}")

    # Adventurous agent approach  
    adventurous_plan = adventurous_agent.plan_approach(risky_task)
    print("\n🚀 Adventurous Agent Plan:")
    print(f"  Strategy: {adventurous_plan.strategy}")  # Likely: "rapid_exploration"
    print(f"  Risk tolerance: {adventurous_plan.risk_tolerance}")
    print(f"  Innovation focus: {adventurous_plan.innovation_focus}")

demonstrate_personality_effects()

Cognitive Configuration

Memory Settings

Configure memory systems for optimal performance:

from cognito_sim_engine import MemoryConfig

# Configure memory systems
memory_config = MemoryConfig(
    # Working memory settings
    working_memory_capacity=7,
    working_memory_decay=0.1,

    # Long-term memory settings
    episodic_capacity=10000,
    semantic_capacity=50000,
    procedural_capacity=1000,

    # Consolidation settings
    consolidation_threshold=0.7,
    sleep_consolidation=True,

    # Forgetting curves
    episodic_forgetting="power_law",
    semantic_forgetting="exponential",

    # Retrieval settings
    retrieval_noise=0.1,
    spreading_activation=True
)

# Apply to agent
configured_agent = CognitiveAgent(
    "memory_optimized",
    memory_config=memory_config
)

Reasoning Configuration

Tune reasoning capabilities:

from cognito_sim_engine import ReasoningConfig

# Configure reasoning engine
reasoning_config = ReasoningConfig(
    # Inference settings
    max_inference_depth=10,
    confidence_threshold=0.6,
    uncertainty_propagation=True,

    # Strategy settings
    default_strategy="mixed",
    strategy_selection="adaptive",

    # Performance settings
    timeout_seconds=5.0,
    parallel_processing=True,
    caching_enabled=True,

    # Bias settings
    confirmation_bias=0.1,
    availability_bias=0.05,
    anchoring_bias=0.08
)

reasoning_agent = ReasoningAgent(
    "tuned_reasoner",
    reasoning_config=reasoning_config
)

Learning Configuration

Optimize learning parameters:

from cognito_sim_engine import LearningConfig

# Configure learning system
learning_config = LearningConfig(
    # Algorithm settings
    learning_algorithm="q_learning",
    learning_rate=0.1,
    discount_factor=0.95,

    # Exploration settings
    exploration_strategy="epsilon_greedy",
    initial_epsilon=0.3,
    epsilon_decay=0.995,
    min_epsilon=0.05,

    # Experience settings
    experience_replay=True,
    replay_buffer_size=10000,
    batch_size=32,

    # Transfer settings
    transfer_learning=True,
    similarity_threshold=0.7,

    # Meta-learning settings
    meta_learning=True,
    adaptation_rate=0.05
)

learning_agent = LearningAgent(
    "optimized_learner",
    learning_config=learning_config
)

Goal Management

Setting Agent Goals

from cognito_sim_engine import Goal, GoalType

# Create different types of goals
achievement_goal = Goal(
    description="Master machine learning fundamentals",
    goal_type=GoalType.ACHIEVEMENT,
    priority=0.9,
    deadline="2024-12-31",
    target_facts=[
        "understand_supervised_learning",
        "understand_unsupervised_learning", 
        "apply_ml_algorithms",
        "evaluate_model_performance"
    ]
)

maintenance_goal = Goal(
    description="Stay updated with latest research",
    goal_type=GoalType.MAINTENANCE,
    priority=0.6,
    recurring=True,
    interval="weekly",
    target_facts=["read_recent_papers", "track_conferences"]
)

avoidance_goal = Goal(
    description="Avoid overfitting in models",
    goal_type=GoalType.AVOIDANCE,
    priority=0.8,
    conditions=["building_ml_models"],
    target_facts=["use_regularization", "validate_properly"]
)

# Add goals to agent
agent.add_goal(achievement_goal)
agent.add_goal(maintenance_goal) 
agent.add_goal(avoidance_goal)

# Goal prioritization and management
agent.prioritize_goals()  # Automatic prioritization
agent.schedule_goal_pursuit()  # Plan goal achievement

Dynamic Goal Adaptation

class AdaptiveGoalSystem:
    def __init__(self, agent):
        self.agent = agent
        self.goal_history = []
        self.adaptation_rules = []

    def monitor_goal_progress(self):
        """Monitor and adapt goals based on progress"""

        for goal in self.agent.goals:
            progress = self.agent.evaluate_goal_progress(goal)

            # Adapt based on progress
            if progress.completion_rate < 0.3 and progress.time_elapsed > 0.7:
                # Poor progress - simplify or extend deadline
                self.adapt_struggling_goal(goal, progress)

            elif progress.completion_rate > 0.8 and progress.time_remaining > 0.5:
                # Ahead of schedule - increase ambition
                self.enhance_successful_goal(goal, progress)

    def adapt_struggling_goal(self, goal, progress):
        """Adapt goals that are struggling"""

        # Option 1: Break into smaller subgoals
        if goal.complexity > 0.7:
            subgoals = self.decompose_goal(goal)
            for subgoal in subgoals:
                self.agent.add_goal(subgoal)
            self.agent.remove_goal(goal)

        # Option 2: Extend deadline
        elif goal.deadline:
            extended_deadline = self.calculate_extended_deadline(goal, progress)
            goal.deadline = extended_deadline

        # Option 3: Reduce scope
        else:
            simplified_goal = self.simplify_goal(goal)
            self.agent.replace_goal(goal, simplified_goal)

    def enhance_successful_goal(self, goal, progress):
        """Enhance goals that are succeeding"""

        # Add stretch objectives
        stretch_targets = self.generate_stretch_targets(goal)
        goal.target_facts.extend(stretch_targets)

        # Increase priority for high-performing goals
        goal.priority = min(1.0, goal.priority * 1.2)

# Apply adaptive goal management
adaptive_goals = AdaptiveGoalSystem(agent)
adaptive_goals.monitor_goal_progress()

Agent Capabilities and Skills

Enabling Specific Capabilities

from cognito_sim_engine import Capability

# Define custom capabilities
research_capability = Capability(
    name="research_methodology",
    required_skills=["literature_review", "experiment_design", "data_analysis"],
    knowledge_domains=["scientific_method", "statistics", "domain_expertise"],
    cognitive_requirements={"reasoning_depth": 8, "memory_capacity": 2000}
)

collaboration_capability = Capability(
    name="team_collaboration",
    required_skills=["communication", "coordination", "conflict_resolution"],
    knowledge_domains=["social_dynamics", "project_management"],
    cognitive_requirements={"social_awareness": 0.8, "empathy": 0.7}
)

# Enable capabilities for agent
agent.enable_capability(research_capability)
agent.enable_capability(collaboration_capability)

# Check agent capabilities
print("🎯 Agent Capabilities:")
for capability in agent.get_capabilities():
    print(f"  • {capability.name}: {capability.proficiency_level:.2f}")

Skill Development

from cognito_sim_engine import Skill, SkillLevel

def develop_agent_skills(agent, target_skills):
    """Develop specific skills through practice"""

    for skill_name in target_skills:
        # Start with basic skill level
        skill = Skill(
            name=skill_name,
            level=SkillLevel.NOVICE,
            experience_points=0,
            practice_history=[]
        )

        agent.add_skill(skill)

        # Practice skill through exercises
        exercises = generate_skill_exercises(skill_name)

        for exercise in exercises:
            # Practice exercise
            result = agent.practice_skill(skill_name, exercise)

            # Update skill based on performance
            if result.success:
                skill.experience_points += result.points_earned
                skill.update_level()

            # Track practice history
            skill.practice_history.append({
                "exercise": exercise,
                "result": result,
                "timestamp": time.time()
            })

# Develop skills for research agent
research_skills = [
    "literature_review",
    "hypothesis_formation", 
    "experimental_design",
    "statistical_analysis",
    "scientific_writing"
]

develop_agent_skills(agent, research_skills)

Multi-Agent Coordination

Creating Agent Teams

from cognito_sim_engine import AgentTeam, TeamRole

def create_research_team():
    """Create a coordinated research team"""

    # Define team roles
    roles = {
        "leader": TeamRole(
            name="research_leader",
            responsibilities=["coordination", "decision_making", "oversight"],
            authority_level=0.9
        ),
        "theorist": TeamRole(
            name="theorist", 
            responsibilities=["theory_development", "conceptual_analysis"],
            authority_level=0.7
        ),
        "experimentalist": TeamRole(
            name="experimentalist",
            responsibilities=["experiment_design", "data_collection"],
            authority_level=0.7
        ),
        "analyst": TeamRole(
            name="data_analyst",
            responsibilities=["data_analysis", "statistical_modeling"],
            authority_level=0.6
        )
    }

    # Create team members
    team_members = {}

    # Research leader (MetaCognitive for strategic planning)
    team_members["leader"] = MetaCognitiveAgent(
        "research_leader",
        personality_traits={
            "conscientiousness": 0.9,
            "extraversion": 0.8,
            "openness": 0.7
        },
        role=roles["leader"]
    )

    # Theorist (Reasoning agent for logical analysis)
    team_members["theorist"] = ReasoningAgent(
        "theorist",
        personality_traits={
            "openness": 0.9,
            "conscientiousness": 0.8,
            "neuroticism": 0.3
        },
        role=roles["theorist"]
    )

    # Experimentalist (Cognitive agent for balanced skills)
    team_members["experimentalist"] = CognitiveAgent(
        "experimentalist",
        personality_traits={
            "conscientiousness": 0.9,
            "openness": 0.7,
            "agreeableness": 0.8
        },
        role=roles["experimentalist"]
    )

    # Data analyst (Learning agent for pattern recognition)
    team_members["analyst"] = LearningAgent(
        "data_analyst",
        personality_traits={
            "conscientiousness": 0.8,
            "openness": 0.6,
            "neuroticism": 0.4
        },
        role=roles["analyst"]
    )

    # Create team
    research_team = AgentTeam(
        team_id="cognitive_research_team",
        members=list(team_members.values()),
        coordination_strategy="hierarchical",
        communication_protocol="formal"
    )

    return research_team

# Create and configure team
team = create_research_team()

# Set team goals
team_goal = Goal(
    description="Develop new cognitive architecture",
    goal_type=GoalType.ACHIEVEMENT,
    priority=1.0,
    collaborative=True,
    required_roles=["leader", "theorist", "experimentalist", "analyst"]
)

team.set_shared_goal(team_goal)

Agent Monitoring and Debugging

Performance Monitoring

from cognito_sim_engine import AgentMonitor, PerformanceMetrics

# Create agent monitor
monitor = AgentMonitor(
    metrics_to_track=[
        "goal_achievement_rate",
        "memory_utilization",
        "reasoning_accuracy",
        "learning_progress",
        "social_effectiveness"
    ],
    monitoring_interval=10,  # Every 10 actions
    alert_thresholds={
        "goal_achievement_rate": 0.3,  # Alert if below 30%
        "memory_utilization": 0.9,     # Alert if above 90%
        "reasoning_accuracy": 0.5      # Alert if below 50%
    }
)

# Attach monitor to agent
monitor.attach_to_agent(agent)

# View real-time metrics
def display_agent_metrics(agent):
    """Display current agent performance metrics"""

    metrics = monitor.get_current_metrics(agent)

    print(f"📊 Agent Performance Metrics for {agent.agent_id}:")
    print(f"  🎯 Goal Achievement: {metrics['goal_achievement_rate']:.2f}")
    print(f"  🧠 Memory Usage: {metrics['memory_utilization']:.2f}")
    print(f"  🤔 Reasoning Accuracy: {metrics['reasoning_accuracy']:.2f}")
    print(f"  📈 Learning Progress: {metrics['learning_progress']:.2f}")
    print(f"  👥 Social Effectiveness: {metrics['social_effectiveness']:.2f}")

    # Show alerts if any
    alerts = monitor.get_alerts(agent)
    if alerts:
        print("⚠️ Performance Alerts:")
        for alert in alerts:
            print(f"    • {alert.metric}: {alert.message}")

# Monitor agent during simulation
def run_monitored_simulation(agent, tasks):
    """Run simulation with continuous monitoring"""

    for i, task in enumerate(tasks):
        # Execute task
        result = agent.execute_task(task)

        # Check metrics every 10 tasks
        if i % 10 == 0:
            display_agent_metrics(agent)

            # Auto-adjust if needed
            alerts = monitor.get_alerts(agent)
            for alert in alerts:
                if alert.metric == "memory_utilization":
                    agent.memory_manager.cleanup_old_memories()
                elif alert.metric == "goal_achievement_rate":
                    agent.revise_goal_strategies()

Debugging Agent Behavior

from cognito_sim_engine import AgentDebugger

# Create debugger with detailed logging
debugger = AgentDebugger(
    log_level="detailed",
    trace_components=[
        "reasoning_steps",
        "memory_access",
        "goal_processing",
        "decision_making"
    ]
)

# Attach debugger to agent
debugger.attach(agent)

# Debug specific agent behavior
def debug_agent_decision(agent, decision_context):
    """Debug why agent made specific decision"""

    # Enable detailed tracing
    debugger.start_trace("decision_analysis")

    # Let agent make decision
    decision = agent.make_decision(decision_context)

    # Stop tracing and analyze
    trace = debugger.stop_trace("decision_analysis")

    print("🔍 Decision Analysis:")
    print(f"  Decision: {decision.action}")
    print(f"  Confidence: {decision.confidence:.2f}")

    print("\n🧠 Reasoning Steps:")
    for step in trace.reasoning_steps:
        print(f"    {step.step_number}: {step.description}")
        print(f"      Confidence: {step.confidence:.2f}")

    print("\n💾 Memory Accesses:")
    for access in trace.memory_accesses:
        print(f"    {access.memory_type}: {access.query}")
        print(f"      Retrieved: {len(access.results)} items")

    print("\n🎯 Goal Considerations:")
    for goal_eval in trace.goal_evaluations:
        print(f"    {goal_eval.goal.description}")
        print(f"      Relevance: {goal_eval.relevance:.2f}")
        print(f"      Progress impact: {goal_eval.progress_impact:.2f}")

# Example debugging session
decision_context = {
    "situation": "Multiple research directions available",
    "time_pressure": 0.6,
    "resources": ["literature", "lab_access", "collaborators"],
    "constraints": ["budget_limited", "deadline_approaching"]
}

debug_agent_decision(agent, decision_context)

Best Practices

1. Agent Selection

  • Match agent type to task: Use ReasoningAgent for logical tasks, LearningAgent for adaptive scenarios
  • Consider personality fit: Align personality traits with role requirements
  • Balance team composition: Mix complementary personalities and capabilities

2. Configuration Optimization

  • Start with defaults: Begin with standard configurations and tune based on performance
  • Monitor resource usage: Track memory and processing utilization
  • Iterative refinement: Adjust parameters based on observed behavior

3. Goal Management

  • Clear, specific goals: Define measurable objectives with success criteria
  • Appropriate complexity: Match goal complexity to agent capabilities
  • Regular review: Monitor and adapt goals based on progress

4. Performance Tuning

  • Profile bottlenecks: Identify performance limitations using monitoring tools
  • Optimize memory: Tune memory configurations for task requirements
  • Balance accuracy vs speed: Adjust reasoning depth and timeout values

Creating effective cognitive agents requires understanding both the technical capabilities and the cognitive science principles underlying the system. This guide provides the foundation for building sophisticated agents tailored to your specific research or application needs.

Next: Learn about Environment Setup to create rich contexts for your agents, or explore Memory Management for optimizing agent knowledge systems.