Starphix
Agentic Engineering / Sources
The Lab / Sources / Agentic Engineering / Architectures/Cognitive-Architectures.md

Cognitive Architectures

From classic cognitive science to modern neural-symbolic agents.


Classic Cognitive Architectures

Soar (State, Operator, And Result)

Component Description
Working Memory Current state (symbolic)
Long-term Memory Procedural (rules), Semantic, Episodic
Decision Cycle Input → Propose → Decide → Apply → Output
Learning Chunking (compile sequences into rules)
Subgoaling Automatic when knowledge incomplete

Agent relevance: Explicit separation of memory systems, automatic subgoaling, chunking as skill acquisition.

ACT-R (Adaptive Control of Thought—Rational)

Module Function
Goal Current intention stack
Declarative Memory Facts (chunks with activation)
Procedural Memory Production rules (if-then)
Perceptual/Motor Interface to world
Subsymbolic Activation, utility, latency (quantitative)

Key equation: Activation = Base-level + Spread + Partial matching - Base-level = log(frequency × recency) - Explains human forgetting/practice curves

LIDA (Learning Intelligent Distribution Agent)

Cycle Phase Description
Understanding Perceive → activate memory
Attention Competition for consciousness (global workspace)
Action Selection Procedural memory matches conscious content
Learning Reinforcement, perceptual, episodic

Modern Neural-Symbolic Architectures

Neuro-Symbolic Integration Spectrum

Pure Neural ←────────────────────────────────────────→ Pure Symbolic
     │                                                      │
     ▼                                                      ▼
LLM only                                            Logic/Planner
     │                                                      │
     ▼                                                      ▼
LLM + Tools                                        LLM-guided search
     │                                                      │
     ▼                                                      ▼
Neural Theorem Prover                           Neurosymbolic DSL
     │                                                      │
     ▼                                                      ▼
AlphaGeometry                                   Program Synthesis

Integration Patterns

Pattern Neural Role Symbolic Role Example
Neural Guidance Propose actions, score Validate, execute, search AlphaGo, AlphaGeometry
Symbolic Grounding Perceive, embed Reason, plan LLM + PDDL planner
Hybrid Representation Vector + graph Explicit relations Knowledge Graph + LLM
Compilation Learn → distill to rules Execute fast Chunking (Soar), Distillation
Verification Generate candidates Prove/check correctness Lean + LLM, Prolog + LLM

Key Modern Architectures

1. LLM + Classical Planner

class NeuroSymbolicAgent:
    def __init__(self):
        self.llm = LLM()
        self.planner = PDDLPlanner()  # Fast Downward, etc.

    def act(self, goal, state):
        # LLM translates natural language → PDDL problem
        pddl_problem = self.llm.translate_to_pddl(goal, state)
        # Symbolic planner finds optimal plan
        plan = self.planner.solve(pddl_problem)
        # LLM translates plan → executable steps
        return self.llm.translate_plan(plan)

2. LLM + Constraint Solver / SAT

  • Use case: Scheduling, resource allocation, code synthesis
  • Pattern: LLM generates constraints → Z3/SAT solves → LLM interprets
  • Tools: Z3, OR-Tools, MiniZinc, Picat

3. Program Synthesis / Inductive Programming

  • DreamCoder — Wake-sleep: neural proposes, symbolic verifies, library learning
  • CrossBeam — Neural guides symbolic search
  • Applications: DSL synthesis, API sequence generation, SQL

4. Neural Theorem Proving

  • Lean + LLM — LLM suggests tactics, Lean verifies
  • Isabelle + LLM — Similar pattern
  • Autoformalization — Natural language → formal proof

5. Neuro-Symbolic DSLs

DSL Domain Neural Integration
PDDL Planning LLM → PDDL
SQL Databases Text-to-SQL
Regex/Grammars Parsing LLM → regex
GraphQL/REST APIs LLM → queries
Terraform/Pulumi Infra LLM → IaC

Memory in Cognitive Architectures

Architecture Working Memory Long-term Memory Learning
Soar Symbolic state graph Procedural (rules), Semantic, Episodic Chunking
ACT-R Buffers (goal, imaginal, etc.) Declarative (chunks), Procedural Base-level learning, production compilation
LIDA Workspace (conscious) Perceptual, Episodic, Procedural Reinforcement, Hebbian
Generative Agents Context window Vector store + reflection Reflection → importance → retrieval
MemGPT Context window (paged) Disk (SQLite/Vector) Virtual memory management

Reasoning Systems Comparison

System Paradigm Strengths Limitations
LLM CoT Neural Flexible, natural language Unreliable, no guarantees
PDDL Planner Symbolic Optimal, complete, verifiable Requires formalization
SAT/SMT Symbolic Exact, constraint solving NP-hard, modeling effort
Prolog/Datalog Logic Recursive, deductive Closed world, no uncertainty
Probabilistic Prog Bayesian Uncertainty, learning Inference complexity
Neural-Symbolic Hybrid Best of both Integration complexity

Implementing Neural-Symbolic Agents

Architecture Template

class NeuroSymbolicAgent:
    def __init__(self):
        # Neural components
        self.perception = MultimodalEncoder()
        self.reasoning = LLM()
        self.critic = LLM()  # For reflection/verification

        # Symbolic components
        self.planner = PDDLPlanner()
        self.solver = Z3Solver()
        self.knowledge_graph = GraphDB()
        self.skill_library = SkillRegistry()

        # Integration
        self.grounding = NeuralSymbolicGrounding()
        self.compiler = SkillCompiler()  # Neural → Symbolic

    def run(self, goal):
        # 1. Perceive & Ground
        state = self.perception.observe()
        symbolic_state = self.grounding.to_symbolic(state)

        # 2. Plan (Symbolic)
        plan = self.planner.solve(goal, symbolic_state)

        # 3. Execute with Neural Monitoring
        for step in plan:
            # Neural proposes concrete action
            action = self.reasoning.propose_action(step, state)
            # Symbolic validates
            if not self.solver.validate(action, symbolic_state):
                action = self.repair(action)
            # Execute
            result = self.execute(action)

            # Neural reflects
            critique = self.critic.reflect(step, result)
            if critique.learns_skill:
                self.compiler.compile(critique)  # Distill to skill

        return result

When to Use Neural-Symbolic

Use Neural-Symbolic When Pure LLM OK When
Correctness critical (finance, medical, safety) Creative, open-ended
Complex constraints (scheduling, logistics) Simple QA, chat
Verifiable reasoning needed Exploration, brainstorming
Long-horizon planning Short tasks
Skill reuse across tasks One-off tasks
Regulatory explainability required Internal tools


Sources: Soar (Laird), ACT-R (Anderson), LIDA (Franklin), "Neuro-Symbolic AI" (Garcez et al.), "AlphaGeometry" (Trinh et al.), "DreamCoder" (Ellis et al.), "Lean + LLM" (First et al.), "Generative Agents" (Park et al.), "MemGPT" (Packer et al.), PDDL, Z3, OR-Tools docs.

From the Agentic Engineering research vault · CC BY 4.0 · all notes · raw markdown