Built out of frustration — not a pitch deck

My AIs had no shared memory.
So I built one.

I'm Mukarram. I do research on Claude Web, run code on Claude Code. They don't talk to each other. Spent an hour designing architecture — then had to re-explain every decision from scratch. Zikra is the memory layer that connects them.

Get Zikra Lite — Free See the problem ↓
zikra — live memory
$ curl -s -X POST http://localhost:7723/webhook/zikra \ -H "Authorization: Bearer $ZIKRA_TOKEN" \ -d '{"command":"search","project":"myapp","query":"how does auth work"}' ────────────────────────────────────────────────── ✓ score 0.94 │ auth uses JWT tokens ✓ score 0.87 │ session expiry set to 7 days in prod 2 results · 38 tokens · your agent remembers

The problem, clearly

Claude Web and Claude Code are strangers. Every new session is a blank slate.

Without Zikra
Session 1 — Claude Web
M
CW
✓ auth: JWT, 7-day expiry ✓ DB: PostgreSQL + pgvector ✓ arch: microservices on Railway
— new session —
Session 2 — Claude Code
M
CC
? "What auth approach are you using?" ? "Can you describe the DB schema?" × Back to square one. Again.
With Zikra
M
Mukarram
T
Team
CW
Claude Web
CC
Claude Code
GPT
ChatGPT
↓  ↓  ↓  ↓  ↓
shared memory
✓ Every session starts with full context ✓ Any agent. Any machine. Any location. ✓ Doesn't matter which AI you're using

How we got here

No polished origin story. Just a real problem that kept getting worse.

M
The frustration

"I like doing my architecture and research on Claude Web. It can browse sites, do deep research, give real suggestions on system design. But when it came time to actually run the code — that's Claude Code's job. The problem? They don't talk to each other. Every new session, you're starting from scratch. Claude Code had no idea what Claude Web and I had just spent an hour designing."

— Mukarram, founder
M
The first build

Started with a simple webhook and SQLite. Then added vector search. Then wired it into Claude Code stop hooks so it ran automatically at the end of every session. You never had to type "save this" — it just happened. Months later it was saving hours a week. We called it Zikra — Arabic for memory.

M
A
R
The team joined

More people joined the project. Suddenly one person is on Claude Web doing research, another validating requirements and writing prompts, Claude Code just executing. Decisions made in one session were invisible to everyone else — two developers would build in opposite directions and not find out until a late-night code review argument. That's when Lite wasn't enough. We needed Postgres.

CW
CC
GPT
Agent agnostic

"We even use ChatGPT sometimes when Claude Web is being stubborn about writing a prompt. Doesn't matter. The same MCP server works for all of them. That's Zikra. Not built for a pitch deck. Built because we actually needed it."

— Mukarram
The core idea

One memory. Every agent reads from it.

Zikra is a small server that sits between your AI tools and a database. Every agent — Claude, Cursor, Gemini, ChatGPT — can save and search the same pool of context. Architecture decisions, error patterns, requirements, runbook prompts.

One POST to save. One POST to search. It's not magic — it's just memory that actually persists.

  • Hybrid vector + keyword search — finds things by meaning, not just exact words
  • Hooks fire automatically at session end — no manual saving
  • Token budget on results — never floods your context window
# Save something once { "command": "save_memory", "title": "auth uses JWT tokens", "content_md": "JWT with 7-day expiry. Refresh tokens in httpOnly cookies.", "project": "myapp" } → saved # Find it weeks later, in any session { "command": "search", "query": "how do users log in" } → score 0.91 auth uses JWT tokens
The part we're proudest of

Automatic. You don't think about it.

The hardest part of any memory system is using it consistently. Claude Code hooks solve that. A Stop hook fires the moment a session ends and logs everything automatically. You never type "save this" — it just happens.

The statusline shows your memory count and session stats right in your terminal. After a while you stop noticing it's there — you just notice Claude always seems to know your codebase.

  • Stop hook logs every Claude Code session on close
  • PreCompact hook saves context before the window resets
  • Neovim and Claude Code statusline — live memory stats
# What Claude sees at session start # (injected from CLAUDE.md automatically) ## Recent memory — myapp ▸ auth uses JWT tokens (0.94) JWT with 7-day expiry. Refresh in httpOnly cookie. ▸ payments use Stripe (0.88) Stripe Checkout. No card data on our servers. 17 runs · 847 memories · last sync 2m ago

Two versions, one API

Lite is where Zikra started — one developer, one machine, 60 seconds to set up. The full stack is what we built when the team joined. Same commands either way. Upgrade is just changing a URL.

Lite

Zikra Lite

SQLite · Python · MIT Free

Where it started. A single Python process, SQLite database, zero infrastructure. Works in 60 seconds on your laptop. This is what most solo developers need — and exactly what fixed my Claude Web ↔ Claude Code problem.

  • pip install zikra-lite
  • Zero Docker, zero PostgreSQL
  • All 8 commands, full API surface
  • sqlite-vec for vector search
Get Zikra Lite →
Pro

Zikra

Postgres + n8n · For Teams

What we built when the team joined. PostgreSQL + pgvector + n8n. Every developer on every machine shares the same memory pool. Requirements written in London visible in Singapore within seconds.

  • Multi-machine shared memory pool
  • Multi-user RBAC token management
  • n8n workflow integration + scheduling
  • pgvector at billions-of-rows scale
Explore Zikra →
Lite
SQLite · Free
Zikra
Postgres + n8n
Concurrent writes Limited Unlimited
Vector search sqlite-vec pgvector
Scale Millions of rows Billions of rows
n8n workflows Visual editor, scheduling
Decay scoring Manual Automated via n8n schedule
Admin UI Basic Django admin
Backup Copy one file pg_dump, managed
Setup time 60 seconds 30–60 minutes

Same API. Same commands. Same JSON shapes. Upgrade is just changing a URL.

Share with your team

Zikra Lite runs on your machine by default. Getting teammates connected takes one of three approaches depending on where they are.

🏠

Same network

Start Zikra with --host 0.0.0.0 and share your local IP. Anyone on the same wifi or office network connects to http://YOUR-IP:7723 and they're in. Nothing else to install.

🌐

Remote teammates — Cloudflare Tunnel

One-time setup, five minutes, free forever. Cloudflare gives your local Zikra a permanent public URL like zikra.yourteam.com — no ports to open, no router config, no commands to run each time. See the setup steps in the README.

🖥️

Real server — Zikra Full

When your team needs something that runs permanently without your laptop being on, Zikra Full runs on any VPS with one docker compose up. Same API, same commands, same Claude Code config — just a real server instead of your machine. See Zikra →

Get started in 3 steps

From zero to persistent memory across every Claude session — in under two minutes.

1

Install Zikra

Run one command and Zikra Lite is live on your machine. A single Python process, SQLite database, nothing else to install.

npx zikra-lite # or: pip install zikra-lite
2

Open the Web UI

Browse memories, manage tokens, invite teammates, and search everything your agents have saved — all in one place.

cd ui && npm run dev # opens http://localhost:5173
3

Connect Claude Code

Paste one prompt into Claude Code. It installs the Stop hook, context injection, and statusline automatically. Memory is active in every session from that point on.

Read onboarding guide →
M

This isn't a product pitch. It's a tool we use every day.

Zikra started as an internal tool. We weren't trying to build a product — we were just trying to stop wasting time. Zikra Lite is free and takes about a minute to set up. If it helps, great. If something's broken, open an issue.

We're actively using both versions ourselves, so issues get fixed fast.

— Mukarram

Install Zikra Lite Star on GitHub