Task mAIstro
2026A personalized AI task management assistant built with LangGraph. It maintains a persistent memory of your profile, to-do list, and custom preferences — deployed as a production service backed by Postgres and Redis via Docker Compose.
How It Works
The agent runs a continuous conversation loop. On every message it decides what (if anything) to remember, then responds naturally.
Memory Namespaces (per user)
- Profile — name, location, job, connections, interests
- ToDo list — tasks with deadlines, estimated time, solutions, and status
- Instructions — user-defined preferences for how the to-do list should be managed
On Each Turn
- The
task_mAIstronode loads all three memory namespaces and calls gpt-4o-mini - The model decides whether to call the UpdateMemory tool (user, todo, or instructions)
- A conditional edge routes to the appropriate update node
- Trustcall performs structured, patch-based extraction — updates existing records rather than overwriting
- After the update, control returns for a natural-language reply
Deployment Architecture
Three containers orchestrated via Docker Compose:
| Container | Purpose |
|---|---|
| langgraph-api | Serves the graph over HTTP via LangGraph Server |
| langgraph-postgres | Persists threads, checkpoints, store items, and assistants |
| langgraph-redis | Token streaming via pub/sub during graph execution |
Key Features
- Persistent long-term memory — profile, todos, and instructions stored in Postgres via LangGraph Store
- Trustcall extraction — structured patch-based updates instead of full overwrites
- Versioned assistants — create separate personal/work configurations from the same graph
- Double texting — handles concurrent messages with reject, enqueue, interrupt, or rollback strategies
- Multiple access methods — LangSmith Studio, REST API, LangGraph SDK, Remote Graph
- Repository
- GitHub
- Stack
- LangGraph, LangChain, OpenAI (gpt-4o-mini), Trustcall, Docker Compose, Postgres, Redis, LangSmith
- Platform
- Docker Compose (LangGraph Server + Postgres + Redis)
flowchart LR
START([START]) --> task_mAIstro
task_mAIstro -->|no tool call| END([END])
task_mAIstro -->|update_type=user| update_profile
task_mAIstro -->|update_type=todo| update_todos
task_mAIstro -->|update_type=instructions| update_instructions
update_profile --> task_mAIstro
update_todos --> task_mAIstro
update_instructions --> task_mAIstro
flowchart TD
%% Boundary for Docker Compose
subgraph DockerCompose [docker-compose env]
direction TB
%% Internal Services
Server[LangGraph Server
API :8123] subgraph Infrastructure [Data & Messaging Layer] direction LR Postgres[(Postgres
state + store)] Redis[(Redis
stream pub/sub)] end end %% Internal Connections Server <--> Postgres Server <--> Redis %% External Interface Clients([SDK Client / Remote Graph
LangSmith Studio / REST API]) %% External Connection Server <== " HTTP / REST "==> Clients %% Styling classDef docker fill:transparent,stroke:#2496ed,stroke-width:2px,stroke-dasharray: 5 5 classDef server fill:#f8fafc,stroke:#1e293b,stroke-width:2px,color:#1e293b classDef db fill:#f1f5f9,stroke:#475569,stroke-width:1px,color:#334155 classDef ext fill:#3b82f6,stroke:#1d4ed8,stroke-width:2px,color:#fff class DockerCompose docker class Server server class Postgres,Redis db class Clients ext
API :8123] subgraph Infrastructure [Data & Messaging Layer] direction LR Postgres[(Postgres
state + store)] Redis[(Redis
stream pub/sub)] end end %% Internal Connections Server <--> Postgres Server <--> Redis %% External Interface Clients([SDK Client / Remote Graph
LangSmith Studio / REST API]) %% External Connection Server <== " HTTP / REST "==> Clients %% Styling classDef docker fill:transparent,stroke:#2496ed,stroke-width:2px,stroke-dasharray: 5 5 classDef server fill:#f8fafc,stroke:#1e293b,stroke-width:2px,color:#1e293b classDef db fill:#f1f5f9,stroke:#475569,stroke-width:1px,color:#334155 classDef ext fill:#3b82f6,stroke:#1d4ed8,stroke-width:2px,color:#fff class DockerCompose docker class Server server class Postgres,Redis db class Clients ext