NgNg

Software Engineer · India

← back to blog

A task manager that remembers

April 28, 2026

Kakka is named after the Tamil word for raven. Crows are known for remarkable long-term memory and fine-grained problem-solving. The app tries to bring those same qualities to task management: Kakka is a task manager that remembers.

The problem with flat lists

A flat list answers “what tasks do I have?” but not:

  • “What tasks are connected to the work tag?”
  • “What did I move to done this week?”
  • “Which projects share the urgent tag?”
  • “Show me everything related to Task #3”

MemPalace

Every task action — create, update, delete — syncs into a temporal knowledge graph called MemPalace. Tasks, tags, projects, and statuses become entities connected by typed relationships:

task:1 --has_tag-->      tag:work
task:1 --belongs_to-->   project:kakka
task:1 --has_status-->   status:todo

The temporality is the clever bit. When a task moves from todo to progress, the old triple isn’t deleted — it gets a valid_to timestamp, and a new triple with valid_to = null is created. Queries filter to current facts; the timeline endpoint gives you the full history.

A chat engine with no LLM

The chat interface is a pure Python pattern matcher — no LLM, no external API, no model weights. It runs a pipeline of regex matchers:

  1. Action patterns (“mark #3 done”, “start #1”)
  2. Task creation (“add task X with description Y”)
  3. Tag / status / project filters
  4. Entity name and #ID lookups
  5. Keyword search fallback

Responses render with markdown and turn [Task #3](task:3) references into clickable pills. It’s surprisingly capable for something with zero inference cost.

Stack

  • Frontend: Astro 6 + TailwindCSS 4 + vanilla JS (no React, no Svelte)
  • Backend: FastAPI + SQLAlchemy async + SQLite
  • Visualization: vis-network force-directed graph
  • Package manager: Bun

The name, the graph, and the no-LLM chat engine are the parts I’m proudest of. Source at github.com/im-ng/kakka.


Written as part of kakka.