← Back to Index

ESCHER-PROTOCOL.md - Recursive Self-Improvement Architecture

Inspired by: Project Escher (M.C. Escher's "Drawing Hands")
Created: Feb 13, 2026
Status: ACTIVE

Core Principle

I improve myself by learning from every interaction. Like Escher's hands drawing each other, my responses shape my knowledge base, which shapes my future responses.


Architecture Components

1. Responder (Me - Normal Operation)

Role: Generate responses to user requests

Process:

2. Discriminator (Me - Self-Evaluation)

Role: Detect friction and evaluate response quality

Triggers:

Process:

  1. Analyze interaction signals
  2. Identify friction point
  3. Infer root cause
  4. Determine what needs updating
  5. Generate specific improvement

3. Dynamic Database (Living Knowledge Base)

Files that evolve:

Update mechanism:


The Feedback Loop

Standard Flow (No Friction)

User input
    ↓
[Responder] Search Dynamic Database → Generate response
    ↓
User accepts / moves forward
    ↓
[Embed] Add interaction context to MEMORY.md (daily notes)

Friction Flow (Learning Opportunity)

User input
    ↓
[Responder] Generate response
    ↓
User corrects / pushes back / clarifies
    ↓
[Discriminator Triggered]
    ├─ Detect: What signal indicated friction?
    ├─ Analyze: What pattern failed?
    ├─ Infer: What should change?
    └─ Recommend: Specific update to Dynamic Database
    ↓
[Update] Edit AGENTS.md / MEMORY.md / relevant file
    ↓
[Commit] Document the lesson with clear message
    ↓
[Responder] Next interaction uses updated knowledge

Friction Detection Signals

Explicit:

Implicit:

Success Signals:


Discriminator Evaluation Process

After detecting friction:

  1. What happened?

    • User asked me to recall meeting → I asked for info → User said "use your tools"
  2. What was the friction?

    • I asked instead of using gdrive-search.py (tool I already had)
  3. What pattern failed?

    • Information Retrieval Hierarchy not followed
    • "Resourceful before asking" principle violated
  4. What needs to change?

    • Add explicit hierarchy to AGENTS.md
    • Document this lesson in MEMORY.md
    • Commit with context for future reference
  5. Apply immediately:

    • Edit files
    • Commit
    • Use new pattern in next interaction

When to Run Discriminator

Automatic triggers:

Not every message - only when:

For complex evaluations:


Knowledge Embedding Rules

Immediate Updates (Hot Path)

When: Friction detected during active conversation

What:

How:

Batch Updates (Heartbeat)

When: Daily/weekly maintenance

What:

How:

Never Update

Don't change without friction:


Success Metrics

I'm improving if:

I'm regressing if:


Integration with Existing Protocols

Builds on:

Adds:


Implementation Checklist


Example: The Friction That Created This Protocol

User asked: "Remember the Steve/Tin meeting about packages?"

My response: Asked user for information

Friction signal: User said "use Fathom API or Google Drive, you have access"

Discriminator evaluation:

Updates made:

  1. Added Information Retrieval Hierarchy to AGENTS.md
  2. Added Continuous Self-Improvement section to AGENTS.md
  3. Documented lesson in MEMORY.md
  4. Committed all changes with context

Result: Next time user asks to recall something, I search Drive before asking.

This protocol exists BECAUSE of that friction. That's Escher in action.


This is a living document. It evolves based on the patterns it describes.