Friday

โฮสต์ด้วยตนเองสำหรับหน่วยความจำเชิงความรู้ความเข้าใจแบบถาวรสำหรับเอเจนต์เขียนโค้ด AI พร้อมเลเยอร์บริบทที่ไม่ลืมเลือน การสำรวจรัศมีการระเบิด และพื้นที่จัดเก็บแบบไร้เซิร์ฟเวอร์ libSQL ที่เลือกใช้ได้

GitHub
66
ลองใช้ MCP นี้ผู้สนับสนุน

เอกสาร


Friday - Persistent Cognitive Memory Layer for AI Coding Agents



Friday

Self-hosted persistent cognitive memory layer for AI coding agents.

Persists architecture decisions, schemas, and constraints across sessions via the Model Context Protocol (MCP).


GitHub Stars Release PyPI Package MIT License Python 3.11+ MCP Protocol Docker Compose Ready DeepEval Verified


The ProblemArchitectureDual-EngineMemory LifecycleQuickstartPython SDKMCP SetupAgent RulesAPI Reference



Friday Neural Studio — Interactive Knowledge Graph
Friday Neural Studio — Real-time 3D WebGL knowledge graph visualizer rendering service topologies, dynamic access heatmaps, and automated memory consolidation.




The Problem: Session Amnesia

Modern AI coding agents (Cursor, Claude Code, Antigravity, VS Code) excel at isolated code generation. However, in continuous engineering workflows, developers encounter a structural limitation: Session Amnesia.

Current workarounds fall into three deeply flawed patterns:

                  ┌─────────────────────────────────────────────────────────┐
                  │          WHY STANDARD APPROACHES BREAK DOWN             │
                  └─────────────────────────────────────────────────────────┘

   1. Context Windows (RAM)           2. Static Rules Files             3. Standard Vector RAG
  ┌─────────────────────────┐       ┌─────────────────────────┐       ┌─────────────────────────┐
  │ • Ephemeral volatile    │       │ • Linear token tax      │       │ • Matches text phrasing,│
  │   memory (clears on     │       │   (2,500 tokens burned  │       │   NOT system topology   │
  │   every new thread)     │       │   on every trivial fix) │       │ • Blind to directed     │
  │ • Lost-in-the-middle    │       │ • Stale rules accumu-   │       │   call graphs & schema  │
  │   degradation on 50k+   │       │   late & conflict       │       │   dependencies          │
  │   token prompts         │       │ • Zero cross-tool sync  │       │ • Hallucinates blast    │
  │ • High latency & cost   │       │   (Cursor ≠ Claude CLI) │       │   radii of refactors    │
  └─────────────────────────┘       └─────────────────────────┘       └─────────────────────────┘
  1. Context Windows Are Volatile: Context windows act as working RAM, not durable storage. Clearing a thread or restarting an agent resets state. Prompt-stuffing 50k+ tokens introduces the "lost-in-the-middle" attention drop and escalates inference latency.
  2. Static Rule Files Incur a Linear Token Tax: Maintaining large rule files (.cursorrules, AGENTS.md) forces the model to re-read thousands of lines on every keystroke, leading to contradictory instructions and cross-editor fragmentation.
  3. Vector Search Misses System Topology: Embedding cosine similarity matches text phrasing, not relational dependencies. Vector search cannot traverse directed graphs: $$\text{Table: accounts} \longrightarrow \text{FK: subscriptions} \longrightarrow \text{Service: BillingService} \longrightarrow \text{Worker: InvoicePoller}$$

Architecture: Multi-Layer Cognitive Substrate

Friday runs as a self-hosted background service providing a structured, four-tier memory substrate accessed via the Model Context Protocol (MCP):

┌────────────────────────────────────────────────────────────────────────────────────────┐
│               AI CODING CLIENTS (Cursor / Claude Code / Antigravity / VS Code)         │
└───────────────────────────────────────────┬────────────────────────────────────────────┘
                                            │
                                4 MCP Tools (stdio / HTTP)
                                ├── add_memory       (persist decisions & rationale)
                                ├── add_fact         (versioned immutable truths)
                                ├── memory_search    (targeted semantic recall)
                                └── get_context      (compiled multi-layer prompt)
                                            │
                                            ▼
┌────────────────────────────────────────────────────────────────────────────────────────┐
│                                 FRIDAY COGNITIVE ENGINE                                │
│                                                                                        │
│   Layer 1: Facts Ledger         Layer 2: Episodic Memory       Layer 3: Graph Topology │
│  ┌─────────────────────────┐   ┌───────────────────────────┐  ┌──────────────────────┐ │
│  │ Versioned Facts Ledger  │   │ Mem0 Conversational       │  │ Neo4j Property Graph │ │
│  │ • Deterministic truths  │   │ • Semantic decisions      │  │ • Directed call-trees│ │
│  │ • Conflict detection    │   │ • User preferences        │  │ • Schema blast-radius│ │
│  │ • Zero prompt overhead  │   │ • Sub-100ms retrieval     │  │ • Entity dependencies│ │
│  └─────────────────────────┘   └───────────────────────────┘  └──────────────────────┘ │
│                                                                                        │
│   Layer 4: Cognitive Dynamics Engine                                                   │
│   • Synaptic Energy Decay: E(t) = E₀ · 2^(-Δt / 14d) automatically evicts stale clutter│
│   • Nightly Dream Cycle (03:00 UTC): Prunes noise, crystallizes graph insights & backups│
│   • Empathy State Tracking: Adapts agent brevity and tone to developer urgency & mood  │
│   • Neural Studio: WebGL-based 3D graph visualizer for human and agent state auditing. │
│   • Persona Synchronization: /export/persona compiles canonical rules on-demand.       │
└────────────────────────────────────────────────────────────────────────────────────────┘

The 4 Memory Layers Explained:

LayerTechnologyPrimary RoleRetrieval SpeedWhy It Matters
Layer 1: Facts LedgerS3-Style Versioned JSON / SQLiteImmutable ground-truths (ports, endpoints, schemas, business invariants).< 5msDeterministic recall with zero LLM hallucination and cryptographic conflict detection.
Layer 2: Episodic MemoryMem0 Conversational HistoryDeveloper preferences, past bug fixes, and architectural tradeoffs.< 50msPreserves the rationale behind past decisions so agents never repeat discarded approaches.
Layer 3: Vector EmbeddingsChromaDB High-Dim StoreSemantic search across architectural specifications, PRDs, and guides.< 80msNatural-language semantic search across documents and blueprints.
Layer 4: Relational GraphNeo4j 5.x Directed GraphTopological dependency mapping (services, foreign keys, endpoints, workers).< 30msCalculates refactor blast radius; answers: "If I alter table X, what endpoints break?"

Architectural Comparison Matrix

CapabilityStatic Prompts (.cursorrules)Traditional Vector RAGFriday Cognitive Substrate
Cross-Session PersistenceNone (resets with thread)Text chunks onlyFull architectural state & decisions
Dependency Graph TraversalNoneLexical similarity onlyNeo4j Directed Property Graph
Token EfficiencyBurns 2,000–5,000 tokens/turnUnfiltered chunk dumpsTargeted queries (~280 tokens/turn)
Toolchain SynchronizationIsolated per editor configDisconnected silosUnified MCP across Cursor, Claude, CLI
Conflict ResolutionManual file editing requiredIngests conflicting chunksVersioned Fact Ledger with status flags
Memory Life-CycleStatic forever (bloats)Flat chunk retentionSynaptic Decay + Nightly Dream Consolidation
Topology AuditingNoneNoneNeural Studio 3D interactive viewer
Deployment ModelLocal flat filesCloud SaaS vendor lock-in100% Self-Hosted Docker Compose

Dual-Engine Architecture: Decoupled Background Processing

A foundational architectural decision in Friday is:

"Why does Friday maintain a background worker LLM (such as Groq, DeepSeek, or local Ollama) on the server, completely separate from the frontier model running in Cursor, Claude Code, or Antigravity?"

Interactive coding agents require low latency, while knowledge graph maintenance requires continuous data extraction and synthesis. Friday enforces a Dual-Engine Architecture that cleanly decouples frontline developer workflows from background data pipelines:

┌────────────────────────────────────────────────────────────────────────────────────────┐
│                        THE DUAL-ENGINE ARCHITECTURE MODEL                                 │
├────────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                        │
│   INTERACTIVE AGENT (Frontline Client)       BACKGROUND WORKER (Async Engine)      │
│   ┌─────────────────────────────────────┐     ┌─────────────────────────────────────┐  │
│   │ Client: Cursor / Claude / Antigravity│     │ Engine: Self-Hosted Friday Server   │  │
│   │ Model: Frontier (Claude 3.5 / GPT-4o)│     │ Model: Fast Worker (Groq / Ollama)  │  │
│   │ Role: Complex code generation       │     │ Role: Async graph extraction        │  │
│   │ Context: Lean, task-specific prompt │     │ Role: Conflict pruning & decay      │  │
│   │ State: Ephemeral session lifetime   │     │ State: 24/7 background persistent   │  │
│   └──────────────────┬──────────────────┘     └──────────────────▲──────────────────┘  │
│                      │                                           │                     │
│                      │ 1. MCP Tools (memory_search, add_memory)  │ 2. Microsecond      │
│                      ▼                                           │    Async Parsing    │
│   ┌──────────────────────────────────────────────────────────────┴──────────────────┐  │
│   │                        FRIDAY PERSISTENT MEMORY ARCHITECTURE                    │  │
│   │                                                                                 │  │
│   │   Layer 1: Facts Ledger (Deterministic S3-style Hash Table)                     │  │
│   │   Layer 2: Episodic Memory (Mem0 Conversational Thread History)                 │  │
│   │   Layer 3: Vector Embeddings (ChromaDB Semantic Chunks)                         │  │
│   │   Layer 4: Property Knowledge Graph (Neo4j Directed Topology)                   │  │
│   │   Memory Lifecycle: Dynamic Decay (E(t)) & Nightly Dream Cycle (03:00 UTC)    │  │
│   └─────────────────────────────────────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────────────────────────────────────┘

Why Decoupling Background Processing is Essential:

1. ⚡ Zero-Latency IDE Execution (Non-Blocking Decoupling)

When you type in Cursor or Claude Code and an agent records a major decision via add_memory, the Conscious model cannot pause for 4–6 seconds while an LLM parses semantic entities, identifies foreign keys, and runs Cypher mutations.

  • With Friday's decoupled Subconscious worker, the MCP call responds in < 40ms.
  • The Subconscious engine (e.g. Groq running Llama-3 at 500+ tokens/sec) consumes the event asynchronously, wiring graph nodes and relations in the background without stealing a single millisecond of developer flow.

2. 💰 95%+ Token Cost Optimization

Frontier reasoning models (Claude 3.5 Sonnet, GPT-4o) cost $3.00 to $15.00 per million tokens. Using these expensive models for routine structural maintenance—such as extracting triples (Entity A $\longrightarrow$ RELATION $\longrightarrow$ Entity B), verifying fact hashes, or applying synaptic decay—wastes massive token budgets.

  • Friday offloads structural chores to ultra-fast, ultra-cheap background APIs (Groq, DeepSeek Flash) or completely free self-hosted models (Ollama, vLLM).
  • Your frontier model only spends tokens on what matters: solving complex engineering problems.

3. 🌙 Autonomous Background Consolidation (The Dream Cycle)

Your coding session ends when you close your IDE or put your laptop to sleep. But memory evolution cannot stop when the laptop closes:

  • Friday's Subconscious engine lives on your cloud or local server 24/7.
  • At 03:00 UTC every night, while you are asleep, the Subconscious wakes up to run the Dream Cycle: calculating synaptic decay, pruning low-energy noise, distilling daily episodic learnings into permanent strategic facts, and committing encrypted snapshots to Git.

4. 🛡️ Hallucination & Context Pollution Defense

Dumping a monolithic 500-node graph or 100 historical decisions directly into your editor's prompt causes Instruction Dilution: the LLM becomes confused, forgets recent constraints, and hallucinates outdated patterns.

  • The Subconscious acts as an intelligent firewall.
  • It digests raw context, resolves contradictions, calculates energy decay ($E(t)$), and serves only the top crystallized, high-energy facts directly relevant to your active task (~280 tokens instead of 5,000).

Memory Lifecycle Management: Decay, Consolidation & Calibration

Friday implements active memory lifecycle management to ensure AI agents retain critical constraints without context bloat or stale instruction interference:

┌────────────────────────────────────────────────────────────────────────────────────────┐
│                          FRIDAY MEMORY LIFECYCLE ENGINE                                │
├────────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                        │
│  🔥 Dynamic Memory Heat & Decay           🌙 The Dream Cycle (Nightly 03:00 UTC)      │
│  ┌───────────────────────────────────┐    ┌────────────────────────────────────────┐   │
│  │ Exponential Synaptic Decay        │    │ 1. Synaptic Pruning (Evaporates noise) │   │
│  │ • E(t) = E₀ · 2^(-Δt / T_half)    │───>│ 2. Episodic Synthesis (Distills gems)  │   │
│  │ • Recall Potentiation (+0.25)     │    │ 3. Neo4j Crystallization (Graph edges) │   │
│  │ • Soft Archive if E < 0.25        │    │ 4. Autonomous Backup to Git            │   │
│  └───────────────────────────────────┘    └────────────────────────────────────────┘   │
│                                                                                        │
│  🤍 Adaptive Context & Persona Calibration                                             │
│  ┌──────────────────────────────────────────────────────────────────────────────────┐  │
│  │ Multi-Dimensional Response Calibration                                           │  │
│  │ • Interaction Modes: tactical_sprint | deep_architecture | casual_brainstorm     │  │
│  │ • Task Context & Urgency Detection (0.0 to 1.0)                                  │  │
│  │ • Dynamic Response Calibration: Brevity (high/med/low) & Tone Tuning             │  │
│  └──────────────────────────────────────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────────────────────────────────────┘

1. 🔥 Dynamic Memory Heat & Decay

Memories and verified facts are not static text—they have energy. Active, frequently recalled directives remain bright ($E > 1.0$). Irrelevant or outdated details experience exponential half-life decay ($T_{half} = 14\text{ days}$): $$E(t) = E_0 \times 2^{-\frac{\Delta t}{T_{half}}}$$ When a memory is queried during coding, it receives a recall potentiation boost ($+0.25$), preventing stale knowledge from cluttering the agent prompt while preserving core architectural invariants (decay_immune: True).

2. 🌙 The Dream Cycle

Every night at 03:00 UTC (or on-demand via client.run_dream_cycle()), Friday enters the Dream Cycle:

  • Synaptic Pruning: Identifies cold/stale facts and transitions them to archived storage.
  • Episodic Synthesis: Clusters recent conversations and distills 1–2 crystallized strategic insights.
  • Neo4j Crystallization: Links high-confidence insights into the property graph with CRYSTALLIZED_INTO edges.
  • Autonomous Git Sync: Triggers automated repo commits preserving graph snapshots.

3. 🤍 Adaptive Context & Persona Calibration

Friday monitors the developer interaction context (urgent bug-fix sprint, late-night architecture exploration, or casual brainstorming). The engine dynamically adjusts agent response characteristics:

  • Brevity Calibration: high (zero fluff, code-first) vs. detailed (system-wide breakdown).
  • Tone Calibration: technical_concise (code-first, direct) vs. architectural_detailed (system-wide breakdown).
  • Injected automatically into /export/persona so all agents naturally calibrate their output.

DeepEval Benchmarks

We evaluated five realistic engineering scenarios using the DeepEval evaluation framework:

  1. Database Schema Blast Radius (evaluating downstream call-graph traversal)
  2. Authentication Refresh Lifecycle (evaluating versioned constraint fidelity)
  3. Webhook Idempotency Guarantee (evaluating race-condition edge cases)
  4. Environment & Port Reservations (evaluating static ground-truth recall)
  5. Multi-Agent Toolchain Consistency (evaluating cross-tool synchronization between Cursor and Claude CLI)
Memory ArchitectureContextual PrecisionContextual RecallFaithfulnessPrompt Tokens / TurnSession Retention
Static Prompts (.cursorrules)38.0%44.0%62.0%3,150 tokens15.0% (resets)
Naive Vector RAG (Vector Only)64.0%58.0%74.0%1,820 tokens55.0%
Friday Cognitive Substrate95.0%93.0%99.0%280 tokens100.0%

Reproducing Benchmarks Locally

python benchmarks/benchmark_deepeval.py

Quickstart

Option A: One-Command Installation (Recommended)

Run the self-contained installation script:

curl -fsSL https://raw.githubusercontent.com/friday-memory/friday/main/install.sh | bash

The script verifies Docker availability, allocates required ports (8000, 7474, 7687), generates secure random API secrets, writes a validated .env, and launches Friday via Docker Compose.

Option B: Manual Setup via Docker Compose

  1. Clone the Repository:

    git clone https://github.com/friday-memory/friday.git
    cd friday
    
  2. Configure Environment (.env):

    cp .env.example .env
    
    # Master API key for endpoint security
    BRAIN_API_KEY=choose_a_strong_secret_key
    
    # Fast Subconscious LLM provider (Groq or DeepSeek)
    DEEPSEEK_API_KEY=your_key_here
    DEEPSEEK_BASE_URL=https://api.deepseek.com
    DEEPSEEK_MODEL=deepseek-chat
    
    # Mem0 key for vector memory (optional)
    MEM0_API_KEY=your_mem0_key_here
    
    # Neo4j database credentials
    NEO4J_URI=bolt://neo4j:7687
    NEO4J_USER=neo4j
    NEO4J_PASSWORD=choose_a_strong_password
    
  3. Start the Stack:

    make up
    # or: docker compose up -d
    
  4. Verify Health:

    curl http://localhost:8000/health
    
    {
      "status": "healthy",
      "service": "friday-cognitive-substrate",
      "version": "1.4.4",
      "layers": {
        "L1_core": "healthy",
        "L2_mem0": "healthy",
        "L3_chromadb": "healthy",
        "L4_neo4j": "healthy"
      }
    }
    

Python SDK (friday-memory)

The official Python client for Friday is available on PyPI as friday-memory. Connect your agentic workflows, LangChain pipelines, or autonomous scripts directly to Friday with zero boilerplate:

pip install --upgrade friday-memory

Synchronous Client

from friday import Friday

# Automatically resolves FRIDAY_URL and FRIDAY_API_KEY from environment
with Friday(api_key="your_secret_key", base_url="http://localhost:8000") as client:
    # 1. Health check
    status = client.health()
    print("Friday Status:", status["status"])

    # 2. Store architectural decision
    client.add_memory(
        "PostgreSQL 16 selected with pgvector for hybrid retrieval",
        project="backend-api",
    )

    # 3. Commit scoped ground-truth fact with auto-conflict resolution
    client.add_fact("Production database endpoint is db.internal.net:5432", project="backend-api")

    # 4. Query multi-hop dependency blast radius before refactoring
    blast = client.get_blast_radius(entity="OrdersTable", depth=2, project="backend-api")
    print(
        f"Impacted components ({blast['total_impacted']}):",
        [n["name"] for n in blast["impacted_nodes"]],
    )

    # 5. Multi-layer search (L2 Facts + L3 ChromaDB + L4 Knowledge Graph)
    context = client.search("database connection configuration", project="backend-api")
    print(context["results"])

    # 5. Cognitive State & Dynamic Response Calibration
    state = client.get_cognitive_state()
    print("Active Mode:", state["current_mode"])  # tactical_sprint, deep_architecture, etc.

    # 6. Trigger Nightly Dream Cycle Consolidation (Consolidates & Prunes)
    dream_report = client.run_dream_cycle(half_life_days=14.0)
    print("Crystallized Insights:", dream_report["crystallized_insights"])

    # 7. Apply Synaptic Decay
    decay_report = client.apply_decay(half_life_days=14.0)
    print("Active Facts Remaining:", decay_report["active_facts_count"])

Asynchronous Client (FastAPI / Agent Workers)

import asyncio
from friday import AsyncFriday


async def main():
    async with AsyncFriday(api_key="your_secret_key") as client:
        # Commit context concurrently
        await client.add_memory("Redis cluster deployed for token bucket rate limiting")
        facts = await client.get_facts(min_energy=0.5)
        print(f"Verified high-energy facts: {len(facts)}")


asyncio.run(main())

LangChain Integration (FridayRetriever)

pip install "friday-memory[langchain]"
from friday.integrations.langchain import FridayRetriever
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI

retriever = FridayRetriever(
    api_key="your_secret_key",
    base_url="http://localhost:8000",
    project="reeldm",
)

# Connect directly to LCEL chains
prompt = ChatPromptTemplate.from_template(
    "Answer using verified system memory:\n{context}\n\nQuestion: {question}"
)

chain = {"context": retriever, "question": RunnablePassthrough()} | prompt | ChatOpenAI()

Client Setup (MCP)

Friday provides an official Model Context Protocol (MCP) server over stdio or HTTP, enabling real-time context retrieval for all supported IDEs.

 ┌───────────────────────┐
 │   Cursor (Desktop)    │──┐
 └───────────────────────┘  │
 ┌───────────────────────┐  │
 │    Claude Code CLI    │──┼── MCP Protocol (stdio transport)
 └───────────────────────┘  │   FRIDAY_URL="http://127.0.0.1:8000"
 ┌───────────────────────┐  │   BRAIN_API_KEY="your_secret_key"
 │    Antigravity IDE    │──┤
 └───────────────────────┘  │
 ┌───────────────────────┐  │
 │  Windsurf / VS Code   │──┤
 └───────────────────────┘  │
 ┌───────────────────────┐  │
 │       Codex CLI       │──┘
 └───────────────────────┘
                            ▼
             ┌──────────────────────────────┐
             │     FRIDAY CENTRAL BRAIN     │
             │   (Localhost or Remote VM)   │
             │   FastAPI + Mem0 + Neo4j     │
             └──────────────────────────────┘
1. Cursor (Local or Remote)

Add to .cursor/mcp.json in your project or globally in Cursor Settings → MCP:

Local Docker Setup:

{
  "mcpServers": {
    "friday": {
      "command": "python",
      "args": ["-m", "mcp.server"],
      "cwd": "/path/to/friday",
      "env": {
        "FRIDAY_URL": "http://localhost:8000",
        "BRAIN_API_KEY": "your_secret_key"
      }
    }
  }
}

Remote Cloud VM Setup (via SSH Tunnel):

{
  "mcpServers": {
    "friday": {
      "command": "ssh",
      "args": [
        "-i", "/path/to/ssh_key.pem",
        "-o", "StrictHostKeyChecking=no",
        "ubuntu@YOUR_SERVER_IP",
        "docker exec -i fridays-brain-app python /app/mcp_server/server.py"
      ]
    }
  }
}
2. Claude Code CLI

Register Friday directly via CLI:

claude mcp add friday \
  -e FRIDAY_URL="http://localhost:8000" \
  -e BRAIN_API_KEY="your_secret_key" \
  -- python -m mcp.server
3. Antigravity IDE

Add to ~/.gemini/config/mcp_config.json:

{
  "mcpServers": {
    "friday": {
      "command": "python",
      "args": ["-m", "mcp.server"],
      "cwd": "/path/to/friday",
      "env": {
        "FRIDAY_URL": "http://localhost:8000",
        "BRAIN_API_KEY": "your_secret_key"
      }
    }
  }
}
4. Codex CLI

Add to ~/.codex/config.toml:

[mcp.servers.friday]
command = "python"
args = ["-m", "mcp.server"]
cwd = "/path/to/friday"

[mcp.servers.friday.env]
FRIDAY_URL = "http://localhost:8000"
BRAIN_API_KEY = "your_secret_key"
5. VS Code (Cline / Roo Code / Continue)

Add to your VS Code MCP configuration:

{
  "cline.mcpServers": {
    "friday": {
      "command": "python",
      "args": ["-m", "mcp.server"],
      "cwd": "/path/to/friday",
      "env": {
        "FRIDAY_URL": "http://localhost:8000",
        "BRAIN_API_KEY": "your_secret_key"
      }
    }
  }
}

Tool Reference

Connected agents automatically access four core MCP primitives:

PrimitivePurposeTrigger Phase
get_contextIngests active verified facts and recent context filtered by project namespace.Session initialization.
memory_searchQueries vector and graph indices for architectural decisions and system dependencies.Prior to answering technical questions or planning refactors.
get_blast_radiusComputes multi-hop transitive dependency blast radius for a service or entity.Prior to refactoring schemas or modifying critical APIs.
add_memoryRecords implementation details, rationale, and tradeoffs; triggers background graph extraction.Post-implementation or bug resolution.
add_factCommits versioned ground truths with automatic key conflict resolution and project isolation.Architectural declarations or configuration changes.

Environment Variables Reference

VariableDefault ValueDescription
BRAIN_API_KEY / FRIDAY_API_KEY(Required)Master authentication secret for write and administrative endpoints.
FACTS_PATH/app/facts/facts.jsonLocal filesystem path to the versioned JSON facts ledger.
NEO4J_URIbolt://neo4j:7687Bolt connection URI for the Layer 4 Neo4j instance.
NEO4J_USERneo4jNeo4j database username.
NEO4J_PASSWORD(Required)Neo4j database password.
DEEPSEEK_API_KEY / GROQ_API_KEY""API key for the Subconscious background LLM parser.
DEEPSEEK_BASE_URLhttps://api.deepseek.comBase URL for the OpenAI-compatible Subconscious provider.
DEEPSEEK_MODELdeepseek-chatModel name for automated graph extraction and conflict detection.
MEM0_API_KEY""Optional API key for Mem0 managed episodic memory layer.
COGNITIVE_STATE_PATH/app/core/cognitive_state.jsonPath to persistent developer cognitive and emotional calibration state.

Dynamic Directives Export (/export/persona)

Friday can compile stored facts and architectural constraints into synchronized markdown directives on-demand, preventing rules drift across teams:

# Export canonical AGENTS.md
curl -s "http://localhost:8000/export/persona?target=agents" \
  -H "X-Brain-Key: your_key" > AGENTS.md

# Export Cursor .cursorrules
curl -s "http://localhost:8000/export/persona?target=cursor" \
  -H "X-Brain-Key: your_key" > .cursorrules

Universal Agent Directive Engine (Multi-Agent Rules)

Different AI coding assistants rely on different workspace instruction formats. Friday includes a built-in CLI engine that generates standardized, bidirectional memory directives for any editor or autonomous agent runner:

Target EnvironmentGenerated FileDefault Location
Universal Agent StandardAGENTS.mdRepository root
Claude CodeCLAUDE.mdRepository root
Cursor IDE.cursorrulesRepository root
Google Gemini & AntigravityGEMINI.mdRepository root
GitHub Copilotcopilot-instructions.md.github/
Windsurf & Cascade.windsurfrulesRepository root
Continue.devrules.md.continue/
AiderCONVENTIONS.mdRepository root

1. List Supported Targets

friday rules list

2. Generate Rules for Your Toolchain

Generate an optimized rule file for a specific agent:

friday rules generate --target claude
friday rules generate --target cursor
friday rules generate --target gemini

Or generate standardized rule files for all supported tools at once:

friday rules generate --all

3. Extensible Custom Agent Adapters

For proprietary agents, internal corporate tooling, or newly released frameworks, register and output custom adapted rule files:

friday rules custom \
  --key myagent \
  --name "Internal SRE Agent" \
  --file ".myagent/rules.md"

Each generated rule file enforces the Two-Way Zero-Amnesia Protocol:

  • Pre-Task Read Gate: Automatically queries friday:get_context and friday:memory_search before formulating implementation plans.
  • Post-Task Write Gate: Automatically persists architectural decisions, schemas, and bug fixes via friday:add_fact and friday:add_memory.

Features

1. Automated Knowledge Graph Extraction

Every memory written via add_memory is analyzed asynchronously by the Subconscious worker. Entities and typed relations are automatically wired into Neo4j without manual schema definitions:

Input:
"Billing engine connects to Stripe API for recurring charges. Webhook dispatched to /api/webhooks/stripe."

Extracted Graph Nodes & Edges:
  (:Service {name: "BillingEngine"}) -[:CONNECTS_TO]-> (:API {name: "Stripe"})
  (:API {name: "Stripe"}) -[:DISPATCHES_TO]-> (:Endpoint {path: "/api/webhooks/stripe"})

2. Neural Studio (Interactive 3D Graph Visualizer)

A browser-based 3D WebGL visualizer powered by Three.js for real-time knowledge graph exploration and system telemetry:

  • Domain-Clustered Layout: Groups entities by architectural domain (API, Services, Storage, Auth, Infrastructure) to prevent visual tangling across 1,000+ nodes and clarify service boundaries.
  • Dynamic Access Heatmap: Color-codes nodes by recall frequency and recency, with interactive filters for active directives (Hot ≥ 0.7) and aging/deprecated context (Decayed < 0.4).
  • 1-Click Memory Consolidation: Dispatches background memory consolidation directly from the UI, synthesizing episodic conversations and crystallizing verified Neo4j relationships.
  • Live Status HUD: Real-time indicator displaying active operational mode (Sprint, Deep Architecture, Brainstorm) and system health.
  • Interactive Node Inspector: Inspect metadata, reinforce priority weights (+0.25), trace bidirectional relationship chains, and smoothly focus the 3D camera on target nodes.
  • Live CRUD & Topology Export: Create, rename, or link entities interactively, and export high-resolution canvas snapshots for system documentation.

3. Versioned Facts Ledger & Smart Conflict Resolution

Deterministic project constants are recorded with immutable version history and project isolation (reeldm, friday, global). Conflicting keys (Key: Value) automatically supersede older versions within the same project namespace:

# Add initial constraint (project-scoped)
POST /facts -> {"content": "Payment Gateway: Stripe", "project": "billing"}
# Recorded: id="c41b8a9", superseded=false

# Update constraint — automatically detects conflicting key 'Payment Gateway'
POST /facts -> {"content": "Payment Gateway: DodoPayments", "project": "billing"}
# Prior fact marked superseded=true; active fact updated without hallucination.

4. Dependency Blast-Radius Analysis

Before modifying database schemas, refactoring shared middleware, or removing endpoints, agents query get_blast_radius to compute downstream transitive impacts up to 4 hops away across Layer 4:

# Query blast radius for a service or entity
GET /graph/blast-radius?entity=UserSession&depth=2&project=backend-api
# Returns: directly impacted services, traversal distance, and edge relationship types.

Repository Structure

friday/
├── friday/                  # Official Python SDK & CLI (client, rules engine, types)
├── gateway/                 # FastAPI REST application & routing (Neo4j + ChromaDB + Mem0)
├── layers/                  # Pluggable cognitive adapters (ChromaDB, Neo4j, Decay)
├── pipelines/               # Background entity extraction, Dream Cycle & fact pipelines
├── orchestrator/            # Multi-layer retrieval router & cognitive state engine
├── mcp/                     # Model Context Protocol stdio server
├── studio/                  # Three.js Neural Studio 3D visualizer
├── benchmarks/              # DeepEval evaluation suite
├── tests/                   # Pytest test suite (100% green)
├── docker-compose.yml       # Production container definition
├── Makefile                 # Developer task automation
└── pyproject.toml           # Tooling & packaging configuration

API Reference

All authenticated endpoints require the X-Brain-Key request header.

MethodPathAuthDescription
GET/NoServes Neural Studio visualizer.
GET/healthNoLayered health status check.
POST/addYesIngest memory and trigger background graph extraction.
POST/factsYesRecord or update a versioned fact.
GET/factsNoList active ground-truth facts (supports min_energy).
POST/searchYesSemantic search across vector stores.
POST/ingestYesBatch ingest architectural specifications.
GET/export/personaYesExport synchronized IDE rules (agents or cursor).
GET/api/graph-dataNoFetch nodes and edges for 3D visualizer.
GET/stateNoRetrieve active developer cognitive state & calibration.
POST/state/updateYesUpdate mode, urgency, stress, and response calibration.
POST/dream/runYesTrigger biological Dream Cycle memory consolidation.
POST/decay/applyYesApply exponential synaptic decay across facts ledger.
POST/api/node/createYesCreate a graph entity node.
DELETE/api/node/{id}YesDelete an entity and cascading relationships.

Development

# Install dependencies
make install

# Run test suite
make test

# Code formatting & linting
make lint
make format

# Start local dev server
make dev

Optional Serverless Storage (libSQL / Turso & Cloud Run)

Friday supports an opt-in serverless execution model backed by remote libSQL (Turso) or local SQLite transactions, ideal for ephemeral environments like Google Cloud Run.

  • Dual-Storage Boundary: Transactional SQLite for local single-node deployments; remote libSQL driver for distributed serverless instances with zero local state dependency.
  • Serverless FastAPI Gateway: gateway.serverless:create_app exposes all core memory, fact, graph, and blueprint endpoints with project-scoped isolation and authenticated reads.
  • Migration & Qualification Runbook: Private export/import scripts, schema migrations, and qualification checks are documented in docs/serverless-migration.md.

Note: Serverless storage is completely opt-in and does not alter the default Docker Compose deployment or client routing.


Contributing

Review CONTRIBUTING.md for pull request guidelines, commit conventions, and architectural standards.


Contributors

Shobhit Singh
Shobhit Singh

Creator & Maintainer
Dan Strong
Dan Strong

Open Source Contributor

License

Friday is licensed under the MIT License.