Zum Inhalt springen
Knowledge Architecture for AI Agents

Knowledge, Memory, Structure.
What AI lacks is not intelligence.

I’m trying to build the architecture that changes this.

Cognitive Exoskeleton
The gap between intention and action

You know what you should do. You don’t do it. Not because you’re lazy. But because between intention and action there’s a gap that willpower alone can’t close.

Learn more
Anticipatory Competence
What happens when a machine models itself?

Not consciousness. A persistent self-model that predicts where the system will fail before it fails. The bridge between cognitive science and architecture.

Learn more
AI Coaching
External structure instead of discipline

ADHD, fatigue, overload. When inner reserves are depleted, you don’t need more willpower, but a system that thinks along.

Learn more
Epistemology
Kahneman, Damasio, Luhmann. Three blind spots, one pattern.

Missing metacognition. Missing somatic markers. Missing self-reference. Three traditions that don’t talk to each other point to the same spot.

Learn more
Architecture
Six layers between forgetting and understanding

Each layer solves a different problem: What to store? What to validate? What to forget? Source-pinning is source criticism, confidence scoring is quantified epistemology.

Learn more
ExoCortex Coaching Cycle
ExoCortex

Your brain isn’t broken. It just works differently.

ExoCortex is an external prefrontal cortex: a local AI system that provides the structure, memory and coaching your neurology doesn’t provide on its own.

ADS/ADHS Autism Fatigue Overload
Discover ExoCortex
EXPLORATION DEPTH AUTONOMY PERSISTENCE ABSTRACTION 6 Dimensions of the Self-Model
Self-Vector

Anticipatory competence through self-modeling

What happens when an AI maintains a persistent model of its own cognitive strengths and weaknesses? Not consciousness. Predictive power.

6 Dimensions Dual-Drive Maturity Metric R(sv)
Read concept paper
ENERGY FOCUS DEEP WORK PAUSE ADMIN Energy Curve and Daily Structure
Coach

External structure when inner reserves are empty

An AI coach that knows your energy curve, keeps track of your open tasks, and helps you structure your day. Not with more discipline, but with less friction.

ADHD Coaching Fatigue-Management Daily Structure
Read coaching articles
KAHNEMAN System 1/2 DAMASIO Somatic Markers LUHMANN Self-Reference ? Three Traditions, One Blind Spot
Thinking

Philosophy as architecture decision

Epistemology is not an academic luxury. It decides whether an AI system knows what it doesn’t know, or hallucinates without noticing.

Epistemology Metacognition Ethics
Read articles
LAYER 6 — REFLECTION LAYER 5 — WEIGHTING LAYER 4 — VALIDATION LAYER 3 — SEARCH LAYER 2 — STORAGE LAYER 1 — INGESTION 6-Layer Architecture
Building

Philosophy as code

Source-pinning is source criticism. Confidence scoring is quantified epistemology. Temporal decay is controlled forgetting. Six layers, each solving a different problem.

Qualia BrainDB Validation Gates
Read architecture articles
01

Visualizations

Interactive graphics on AI architecture
02

ExoCortex

A cognitive exoskeleton.

Your brain isn’t broken. It just works differently. ExoCortex is an external prefrontal cortex: a local AI system that provides the structure, memory and coaching your neurology doesn’t provide on its own.

ADS/ADHS

Prioritization, context switching, finishing things.

Autism Spectrum

Structure, routines, reducing cognitive overload.

Chronic Fatigue

Energy-conscious planning. Not more, but the right things.

MS-Fatigue

When the body rations energy unpredictably. Planning with fatigue, not against it.

Overload

Burnout, caregiving, too many open fronts. External structure when inner reserves are empty.

Procrastination

Not laziness, but a regulation problem. The gap between intention and action, made visible and bridgeable.

And beyond

Every form of cognitive variability that benefits from external structure.

Read ExoCortex articles
03

System 2 — Podcast

The podcast about knowledge architecture for AI
Listen on Spotify Apple Podcasts RSS Feed
System 2 Podcast

Knowledge Architecture for AI

Click to load Spotify player

All Episodes →
04

Latest Articles

Across all topics
05
Thinking Space
Emergent structure from concepts. Move the mouse.
Move mouse — drag nodes
06

About

Holger Wölfle

My path to AI architecture is not a straight one. I studied art history, German literature and philosophy, worked with net art when the internet was still new. That's where I learned to tell theory from practice apart: eloquent words about technology don't equal understanding. That skepticism stays with me.

Philosophy brought formal logic. Marketing brought an understanding of how people absorb, filter and process information. Strategy brought the eye for systems: what connects to what, and where do the real problems emerge?

When I started working with AI agents, I noticed: the models are impressive. But without memory, without knowledge structure, without quality control, they are brilliant conversation partners with amnesia. So I started building. Not as a developer, but as someone who understands how knowledge must be organized.

The result is an architecture with six memory layers, validation mechanisms that distinguish primary sources from derivations, controlled forgetting and an AI coach that uncovers communication debt, names avoidance patterns and asks: is this a conscious decision? Everything local, everything under your own control, no cloud dependency.

What really occupies me goes beyond that: the question of whether AI systems can have a model of themselves. Not consciousness, but anticipatory competence. The bridge between cognitive science and AI architecture. That's what I'm working on.

This isn't the first time. In 2000 I built medienkultur-stuttgart.de: a platform that connected media professionals, marketers and artists in Stuttgart. We organized the Medienstammtisch, gave talks, published a newsletter. The Stuttgarter Nachrichten, Stuttgarter Zeitung, Prinz and LIFT wrote about it. DaimlerChrysler sponsored it. The platform is gone, but the pattern stayed: find the gap between disciplines, build something there.

At a Glance

BackgroundMarketing & Strategy
StudiesArt History, German Literature, Philosophy
FocusKnowledge Architecture for AI
Architecture6 Memory Layers, local
ResearchSelf-Vector Concept
PodcastSystem 2
PrincipleLess talk, more building
07

Contact

Thank you! Your message has been sent. I usually respond within 48 hours.
An error occurred. Please try again or contact me directly on LinkedIn.

Get in Touch

kontakt@holgerwoelfle.de

Interested in AI architecture, knowledge management or collaboration? Write me directly or use the chat in the bottom right.

AI Assistant
Hello! I'm Holger Wölfle's AI assistant. Ask me about AI architecture, the "System 2" podcast or Holger's work.
// ==================== KNOWLEDGE GRAPH ==================== (function() { var canvas = document.getElementById('graphCanvas'); if (!canvas) return; var ctx = canvas.getContext('2d'); var tooltip = document.getElementById('graphTooltip'); var container = canvas.parentElement; var W, H; function resize() { var rect = container.getBoundingClientRect(); W = rect.width; H = rect.height; canvas.width = W * devicePixelRatio; canvas.height = H * devicePixelRatio; canvas.style.width = W + 'px'; canvas.style.height = H + 'px'; ctx.setTransform(devicePixelRatio, 0, 0, devicePixelRatio, 0, 0); } resize(); window.addEventListener('resize', resize); var concepts = [ { label: "Self-Vector", desc: "What happens when a system takes itself as its object? 6 dimensions between exploration and confidence.", size: 28, color: "#B8C8DC", url: "/en/selbstvektor/konzept/" }, { label: "Qualia", desc: "Semantic hybrid search across all project documents. A German query also finds English answers.", size: 24, color: "#B8C8DC", url: "/en/bauen/architektur-6-schichten/" }, { label: "Validation", desc: "My system lied to itself. So I taught it to question itself. 6 gates every fact must pass.", size: 22, color: "#9B8EC4", url: "/en/bauen/validation-gates/" }, { label: "BrainDB", desc: "Not raw data, but insights. Distilled knowledge from hundreds of interactions, with provenance and expiry.", size: 20, color: "#8CA0B8", url: "/en/bauen/architektur-6-schichten/" }, { label: "Temporal Decay", desc: "Controlled forgetting. A system that forgets nothing drowns in outdated data. The art is: keeping the right things.", size: 18, color: "#8CA0B8", url: "/en/bauen/architektur-6-schichten/" }, { label: "Epistemology", desc: "What must information fulfill to qualify as knowledge? Source-pinning is source criticism. Confidence scoring is quantified epistemology.", size: 20, color: "#C4A4A8", url: "/en/bauen/validation-gates/" }, { label: "Formal Logic", desc: "Propositional logic, predicate logic, consistency. The foundation on which validation gates stand.", size: 16, color: "#C4A4A8" }, { label: "Kahneman", desc: "LLMs are the most brilliant intuition machine ever built. But System 1 without System 2 is dangerously reliably wrong.", size: 18, color: "#C4A4A8", url: "/en/denken/kahneman-und-ki/" }, { label: "Coaching", desc: "A chief of staff that uncovers communication debt, names avoidance patterns and asks: is this a conscious decision?", size: 17, color: "#7A9AB8", url: "/en/coach/konzept/" }, { label: "Architecture", desc: "6 memory layers, because different types of knowledge deserve different treatment. Local, model-agnostic, accumulating.", size: 22, color: "#B8C8DC", url: "/en/bauen/architektur-6-schichten/" }, { label: "Semantic Search", desc: "Hybrid search: vectors for meaning, keywords for precision. Cross-lingual DE+EN.", size: 18, color: "#8CA0B8", url: "/en/bauen/architektur-6-schichten/" }, { label: "Marketing", desc: "20 years of experience in how people process information. The bridge between theory and impact.", size: 16, color: "#7A9AB8" }, { label: "Art History", desc: "Visual thinking. The ability to see abstract concepts as spatial structures. Not decoration, but cognition.", size: 14, color: "#7A9AB8" }, { label: "Emergence", desc: "Complex behavior from simple rules. The principle behind the layered architecture.", size: 16, color: "#9B8EC4" }, { label: "Singer", desc: "When does a system count morally? Not at consciousness, but at the ability to have states that matter to it.", size: 15, color: "#C4A4A8", url: "/en/denken/esposito-bruecke/" }, { label: "Luhmann", desc: "Communication without understanding. Autopoiesis through self-vector update. The question whether AI is a third: neither tool nor subject.", size: 16, color: "#C4A4A8", url: "/en/denken/esposito-bruecke/" } ]; var edges = [ [0,2],[0,3],[0,7],[0,9],[0,13],[1,3],[1,10],[1,9],[2,5],[2,6],[2,3], [3,4],[3,9],[5,6],[5,14],[5,15],[7,8],[7,11],[8,0],[8,9],[9,1],[9,10], [11,12],[11,7],[13,15],[13,0],[14,15],[14,5] ]; var nodes = concepts.map(function(c) { return { label: c.label, desc: c.desc, size: c.size, color: c.color, x: W * 0.15 + Math.random() * W * 0.7, y: H * 0.15 + Math.random() * H * 0.7, vx: 0, vy: 0 }; }); var mouse = { x: -1000, y: -1000 }, dragNode = null, hoverNode = null; canvas.addEventListener('mousemove', function(e) { var rect = canvas.getBoundingClientRect(); mouse.x = e.clientX - rect.left; mouse.y = e.clientY - rect.top; if (dragNode !== null) { nodes[dragNode].x = mouse.x; nodes[dragNode].y = mouse.y; nodes[dragNode].vx = 0; nodes[dragNode].vy = 0; } hoverNode = null; for (var i = 0; i < nodes.length; i++) { var dx = mouse.x - nodes[i].x, dy = mouse.y - nodes[i].y; if (Math.sqrt(dx*dx + dy*dy) < nodes[i].size + 8) { hoverNode = i; break; } } if (hoverNode !== null) { canvas.style.cursor = concepts[hoverNode].url ? 'pointer' : 'grab'; var n = nodes[hoverNode]; tooltip.style.display = 'block'; tooltip.style.left = (e.clientX - container.getBoundingClientRect().left + 16) + 'px'; tooltip.style.top = (e.clientY - container.getBoundingClientRect().top - 10) + 'px'; tooltip.querySelector('.tt-title').textContent = n.label; tooltip.querySelector('.tt-text').textContent = n.desc; } else { canvas.style.cursor = dragNode !== null ? 'grabbing' : 'default'; tooltip.style.display = 'none'; } }); var dragStartX = 0, dragStartY = 0, didDrag = false; canvas.addEventListener('mousedown', function(e) { if (hoverNode !== null) { dragNode = hoverNode; dragStartX = e.clientX; dragStartY = e.clientY; didDrag = false; canvas.style.cursor = 'grabbing'; } }); canvas.addEventListener('mousemove', function() { if (dragNode !== null) { var dx = mouse.x - nodes[dragNode].x, dy = mouse.y - nodes[dragNode].y; if (Math.abs(dx) > 5 || Math.abs(dy) > 5) didDrag = true; } }); canvas.addEventListener('mouseup', function(e) { if (dragNode !== null && !didDrag) { var c = concepts[dragNode]; if (c.url) window.location.href = c.url; } dragNode = null; }); canvas.addEventListener('mouseleave', function() { mouse.x = -1000; mouse.y = -1000; dragNode = null; tooltip.style.display = 'none'; }); function simulate() { for (var i = 0; i < nodes.length; i++) { if (i === dragNode) continue; var fx = 0, fy = 0; fx += (W/2 - nodes[i].x) * 0.0003; fy += (H/2 - nodes[i].y) * 0.0003; for (var j = 0; j < nodes.length; j++) { if (i === j) continue; var dx = nodes[i].x - nodes[j].x, dy = nodes[i].y - nodes[j].y; var dist = Math.sqrt(dx*dx + dy*dy) || 1; var minDist = (nodes[i].size + nodes[j].size) * 2.5; if (dist < minDist) { var f = (minDist - dist) / dist * 0.08; fx += dx*f; fy += dy*f; } } for (var e = 0; e < edges.length; e++) { var a = edges[e][0], b = edges[e][1]; if (a !== i && b !== i) continue; var jj = a === i ? b : a; var ddx = nodes[jj].x - nodes[i].x, ddy = nodes[jj].y - nodes[i].y; var ddist = Math.sqrt(ddx*ddx + ddy*ddy) || 1; var target = (nodes[i].size + nodes[jj].size) * 3.5; var ff = (ddist - target) * 0.002; fx += ddx/ddist*ff; fy += ddy/ddist*ff; } if (dragNode === null) { var mdx = nodes[i].x - mouse.x, mdy = nodes[i].y - mouse.y; var mdist = Math.sqrt(mdx*mdx + mdy*mdy) || 1; if (mdist < 120) { fx += mdx/mdist*0.3; fy += mdy/mdist*0.3; } } nodes[i].vx = (nodes[i].vx + fx*0.3) * 0.92; nodes[i].vy = (nodes[i].vy + fy*0.3) * 0.92; nodes[i].x += nodes[i].vx; nodes[i].y += nodes[i].vy; var pad = 40; if (nodes[i].x < pad) { nodes[i].x = pad; nodes[i].vx *= -0.5; } if (nodes[i].x > W-pad) { nodes[i].x = W-pad; nodes[i].vx *= -0.5; } if (nodes[i].y < pad) { nodes[i].y = pad; nodes[i].vy *= -0.5; } if (nodes[i].y > H-pad) { nodes[i].y = H-pad; nodes[i].vy *= -0.5; } } } function draw() { ctx.clearRect(0,0,W,H); for (var e = 0; e < edges.length; e++) { var na = nodes[edges[e][0]], nb = nodes[edges[e][1]]; var hl = hoverNode === edges[e][0] || hoverNode === edges[e][1]; ctx.beginPath(); ctx.moveTo(na.x,na.y); ctx.lineTo(nb.x,nb.y); ctx.strokeStyle = hl ? 'rgba(184,200,220,0.35)' : 'rgba(184,200,220,0.1)'; ctx.lineWidth = hl ? 1.5 : 0.8; ctx.stroke(); } for (var i = 0; i < nodes.length; i++) { var n = nodes[i]; var isH = hoverNode === i; var isC = false; if (hoverNode !== null) { for (var e2 = 0; e2 < edges.length; e2++) { if ((edges[e2][0]===hoverNode&&edges[e2][1]===i)||(edges[e2][1]===hoverNode&&edges[e2][0]===i)) { isC = true; break; } } } if (isH) { ctx.beginPath(); ctx.arc(n.x,n.y,n.size+12,0,Math.PI*2); ctx.fillStyle='rgba(184,200,220,0.08)'; ctx.fill(); } ctx.beginPath(); ctx.arc(n.x,n.y,n.size,0,Math.PI*2); var al = isH ? 0.3 : isC ? 0.2 : 0.1; ctx.fillStyle = n.color.replace(')',','+al+')').replace('rgb','rgba'); ctx.fill(); ctx.strokeStyle = isH ? n.color : 'rgba(184,200,220,'+(isC?0.4:0.15)+')'; ctx.lineWidth = isH ? 2 : 1; ctx.stroke(); ctx.font = (isH?500:400) + ' ' + Math.max(10,n.size*0.5) + "px 'JetBrains Mono',monospace"; ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillStyle = 'rgba(184,200,220,'+(isH?1:isC?0.7:0.45)+')'; ctx.fillText(n.label, n.x, n.y); } } function loop() { simulate(); draw(); requestAnimationFrame(loop); } loop(); })(); // ==================== KONTAKTFORMULAR ==================== var API_BASE = window.location.origin; document.getElementById('contactForm').addEventListener('submit', async function(e) { e.preventDefault(); var btn = document.getElementById('contactSubmit'); var successEl = document.getElementById('contactSuccess'); var errorEl = document.getElementById('contactError'); successEl.style.display = 'none'; errorEl.style.display = 'none'; btn.disabled = true; btn.textContent = 'Sending...'; var data = { name: document.getElementById('contactName').value, email: document.getElementById('contactEmail').value, subject: document.getElementById('contactSubject').value, message: document.getElementById('contactMessage').value }; try { var res = await fetch(API_BASE + '/api/contact', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }); if (res.ok) { successEl.style.display = 'block'; e.target.reset(); } else throw new Error(); } catch(err) { errorEl.style.display = 'block'; } finally { btn.disabled = false; btn.textContent = 'Send message'; } }); // ==================== CHATBOT ==================== var chatToggle = document.getElementById('chatToggle'); var chatWindow = document.getElementById('chatWindow'); var chatMessages = document.getElementById('chatMessages'); var chatInput = document.getElementById('chatInput'); var chatSend = document.getElementById('chatSend'); chatToggle.addEventListener('click', function() { var isOpen = chatWindow.classList.toggle('open'); chatToggle.classList.toggle('open', isOpen); if (isOpen) chatInput.focus(); }); function addMessage(text, type) { var msg = document.createElement('div'); msg.className = 'chat-msg ' + type; msg.textContent = text; chatMessages.appendChild(msg); chatMessages.scrollTop = chatMessages.scrollHeight; return msg; } async function sendChat() { var text = chatInput.value.trim(); if (!text) return; addMessage(text, 'user'); chatInput.value = ''; var typing = addMessage('Thinking...', 'typing'); try { var res = await fetch(API_BASE + '/api/chat', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message: text }) }); var data = await res.json(); typing.remove(); addMessage(data.reply || 'Sorry, no response.', 'bot'); } catch(err) { typing.remove(); addMessage('Connection error. Please try again.', 'bot'); } } chatSend.addEventListener('click', sendChat); chatInput.addEventListener('keydown', function(e) { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); sendChat(); } });