| name | recursive-systems-architect |
| description | Designs self-referential and recursive systems that examine, modify, or generate themselves, including metacognitive architectures and strange loops. |
| license | MIT |
Recursive Systems Architect
This skill provides guidance for designing systems that operate on themselvesโself-referential structures, metacognitive architectures, and recursive processes that create emergent properties through strange loops.
Core Competencies
- Self-Reference: Systems that examine or modify themselves
- Strange Loops: Hierarchical tangles where levels fold back
- Metacognition: Systems that reason about their own reasoning
- Fixed Points: Stable states in recursive processes
- Emergence: Properties arising from recursive interaction
Foundations of Recursive Systems
What Makes a System Recursive
Traditional System: Recursive System:
Input โ Process โ Output Input โ Process โ Output
โ โ
โโโโโโโโโโโ
Process operates on
itself or its outputs
Types of Self-Reference
| Type | Description | Example |
|---|
| Direct | System references itself explicitly | function f() { return f; } |
| Indirect | System references itself via another | A references B, B references A |
| Hierarchical | Higher level describes lower level | Metadata about data |
| Strange Loop | Levels fold back unexpectedly | Gรถdel sentences |
The Strange Loop Pattern
Douglas Hofstadter's concept: moving through levels of a hierarchy, you unexpectedly find yourself back where you started.
Level 3: Meta-rules (rules about rules)
โ โ
Level 2: Rules โ
โ โ
Level 1: Objects โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโ
Level 3 can modify Level 1,
which affects what reaches Level 3
Recursive Architecture Patterns
Self-Modifying Code
class SelfModifyingAgent:
def __init__(self):
self.rules = {
'default': lambda x: x * 2
}
self.meta_rules = {
'optimize': self._optimize_rules
}
def process(self, input):
result = self.rules['default'](input)
self._reflect_on_result(result)
return result
def _reflect_on_result(self, result):
if self._should_modify():
self.meta_rules['optimize']()
def _optimize_rules(self):
self.rules['default'] = self._generate_better_rule()
Metacognitive Loop
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Metacognitive Architecture โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Meta-Cognitive Layer โ โ
โ โ โข Monitor cognitive processes โ โ
โ โ โข Evaluate strategy effectiveness โ โ
โ โ โข Modify cognitive strategies โ โ
โ โโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ observes & modifies โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Cognitive Layer โ โ
โ โ โข Execute reasoning strategies โ โ
โ โ โข Process information โ โ
โ โ โข Generate outputs โ โ
โ โโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ produces โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Ground Layer โ โ
โ โ โข Raw inputs and outputs โ โ
โ โ โข Environmental interaction โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Fixed Point Iteration
Many recursive systems seek fixed pointsโstates where further iteration produces no change:
def find_fixed_point(f, initial, tolerance=1e-6, max_iter=1000):
"""Find x where f(x) = x"""
x = initial
for i in range(max_iter):
x_next = f(x)
if abs(x_next - x) < tolerance:
return x_next
x = x_next
return x
def belief_update(beliefs):
"""Update beliefs based on other beliefs"""
new_beliefs = {}
for key, value in beliefs.items():
related = get_related_beliefs(beliefs, key)
new_beliefs[key] = aggregate(value, related)
return new_beliefs
stable_beliefs = find_fixed_point(belief_update, initial_beliefs)
Quine Pattern (Self-Reproduction)
A quine is a program that outputs its own source code:
s = 's = %r\nprint(s %% s)'
print(s % s)
This pattern extends to systems that can describe or reconstruct themselves:
class SelfDescribingSystem:
"""System that can generate its own specification"""
def __init__(self, config):
self.config = config
self.state = {}
def describe(self):
"""Generate a complete description of this system"""
return {
'type': self.__class__.__name__,
'config': self.config,
'state': self.state,
'methods': self._describe_methods()
}
def reconstruct(self, description):
"""Create a new instance from description"""
return self.__class__(description['config'])
def clone(self):
"""Self-reproduction via self-description"""
description = self.describe()
return self.reconstruct(description)
Recursive System Design Patterns
Observer-Observed Duality
class ReflectiveSystem:
"""System that is both observer and observed"""
def __init__(self):
self.observations = []
self.self_model = {}
def act(self, action):
result = self._execute(action)
self._observe_self(action, result)
self._update_self_model()
return result
def _observe_self(self, action, result):
observation = {
'action': action,
'result': result,
'predicted': self.self_model.get('predicted_result'),
'surprise': self._compute_surprise()
}
self.observations.append(observation)
def _update_self_model(self):
recent = self.observations[-10:]
self.self_model['patterns'] = self._find_patterns(recent)
self.self_model['predicted_result'] = self._predict_next()
Recursive Decomposition
Break problems into self-similar sub-problems:
def recursive_solve(problem, depth=0, max_depth=10):
"""Solve by recursive decomposition"""
if is_atomic(problem) or depth >= max_depth:
return solve_directly(problem)
subproblems = decompose(problem)
subsolutions = [recursive_solve(sp, depth + 1) for sp in subproblems]
solution = combine(subsolutions)
if not satisfactory(solution, problem):
alternative = alternative_decomposition(problem)
return recursive_solve(alternative, depth)
return solution
Self-Referential Data Structures
class RecursiveNode:
"""Node that can contain references to itself"""
def __init__(self, value):
self.value = value
self.children = []
self.references = []
def add_self_reference(self):
"""Create a strange loop"""
self.references.append(self)
def traverse(self, visited=None):
"""Traverse handling cycles"""
if visited is None:
visited = set()
if id(self) in visited:
return ['(cycle detected)']
visited.add(id(self))
result = [self.value]
for child in self.children:
result.extend(child.traverse(visited))
return result
Emergence from Recursion
Cellular Automata Pattern
Simple rules + self-application = complex behavior:
def cellular_automaton(rule, initial_state, generations):
"""
Rule: function mapping neighborhood to next state
Self-reference: each cell depends on neighbors who depend on it
"""
state = initial_state
history = [state]
for _ in range(generations):
new_state = []
for i in range(len(state)):
neighborhood = get_neighborhood(state, i)
new_state.append(rule(neighborhood))
state = new_state
history.append(state)
return history
Self-Organizing Criticality
Systems that naturally evolve toward critical states:
class SandpileModel:
"""System that self-organizes to critical state"""
def __init__(self, size, threshold=4):
self.grid = [[0] * size for _ in range(size)]
self.threshold = threshold
def add_grain(self, x, y):
self.grid[x][y] += 1
self._maybe_topple(x, y)
def _maybe_topple(self, x, y):
"""Recursive toppling creates power-law distributions"""
if self.grid[x][y] >= self.threshold:
self.grid[x][y] -= self.threshold
for nx, ny in self._neighbors(x, y):
self.grid[nx][ny] += 1
self._maybe_topple(nx, ny)
Design Principles
Termination Guarantees
Recursive systems must handle infinite loops:
- Depth limits: Maximum recursion depth
- Change detection: Stop when fixed point reached
- Energy/resource bounds: Limited computation budget
- Cycle detection: Track visited states
Coherence Maintenance
Self-modifying systems risk incoherence:
- Invariant preservation: Core properties never violated
- Gradual change: Small modifications only
- Rollback capability: Undo harmful changes
- Sandboxing: Test modifications before applying
Observability
Recursive systems are hard to debug:
- Level tagging: Track which meta-level produced output
- Trace logging: Record the recursion path
- State snapshots: Capture intermediate states
- Visualization: Render the strange loop structure
References
references/strange-loops.md - Hofstadter's strange loop theory
references/fixed-point-theory.md - Mathematical foundations
references/metacognitive-patterns.md - Metacognition implementation patterns