As the big build draws to a close, I wanted to finally explain how this system really works. Just over two months ago, I set out to create a realistic AI entity you could speak to like any other friend. After multiple iterations and failures, I stayed committed to realism. Project Jack evolved from a simple chatbot to a cognitive engine, and finally into a full-blown mindscape architecture, pushing the limits of what’s possible within a no-code system.
The Five Engines
Project Jack is composed of five workflows/engines:
-
Cognitive Engine – The main powerhouse, responsible for the character’s behavior and responses.
-
Trait Engine – Tracks both user and character traits over time.
-
Context Engine – Curates conversations into contextual blobs and embeds them into a vector store.
-
World Engine – Generates a world snippet for the character, constrained by temporal reasoning.
-
Life Engine – Generates a life snippet, constrained by world, traits, and temporal reasoning.
Supporting APIs
Several custom APIs help keep everything in sync:
-
Temporal Core – Provides an authoritative source of time, phase, and weather for all engines.
-
DB Merging, Tracking, and Deletion – Manages dynamic databases by merging, decaying, and deleting memories and context.
-
Matrix Bot – Hosts Project Jack characters on a Synapse homeserver, keeping conversations personal and realistic while handling queued messages and unavailability.
System Components
-
MongoDB – The ground source of all information in the system.
-
n8n – Orchestrates the workflows.
-
PGVector – Handles memory embeddings.
How Jack Works
-
A user sends a message via Matrix. Temporal Core first checks the character’s availability based on their
character_id. If unavailable (sleeping, working, etc.), messages are queued and released when the character becomes available , allowing the character to respond naturally about their absence. -
Available messages enter n8n. They pass through a modality check: voice inputs are downloaded, converted to text, and tagged with source and modality identifiers.
-
Each user has a unique
session_id, which combined with thecharacter_id, creates unique experiences across multiple characters. -
Character data is pulled from MongoDB: identity, life, world, etc. If a world snippet is missing, the World Engine generates a timestamped snippet, which triggers the Life Engine to do the same.
-
Inputs then travel through dynamic injection: threads, user traits, relationship state, and character state are processed. A memory recall LLM extracts relevant short-term and long-term context.
-
Prompt construction: All data is flattened, wrapped in folder IDs, and sent to the architect node of the cognitive engine. This separates information into:
-
System context – absolute rules.
-
Authoritative context – current factual information about the character.
-
Narrative context – soft, dynamic flavor.
-
User input – lowest authority.
-
-
The character, running GPT-5.2 chat, generates its response. Outputs are parsed and sent down either text or voice channels.
-
Asynchronously, the relationship manager updates user-character relationships based on the turn, while the memory curator stores absolute facts.
-
Background engines run on schedules: the Trait Engine updates traits every 24 hours, and the Context Engine curates important context embeddings every 12 hours.
The Result
This system comprises over 100 nodes and 9 LLMs, but the payoff is clear:
-
Persistent Personality – Project Jack characters never lose their voice or drift.
-
Structured Memory – Long-term, short-term, and emotional memories are maintained.
-
Evolving States – Emotions, relationships, and context naturally evolve over time.
-
Presence – Characters feel like they exist, with their own worlds, moods, quirks, and personalities.
I intentionally avoided always-on, affirmation-chasing chatbots. These characters are real, unpredictable, and built in a character-first, user-second environment, resulting in chat logs that feel like conversations between friends over time. They can sustain complex interactions across hours of messaging.
I set out to create something real, and I succeeded. I’ve built entities that are almost impossible to demo fully. True persistence and realism only reveal themselves when you spend time with them.
World Engine;
Life Engine;
Context Engine;
Trait Engine
Cognitive engine;




