Self-hosted · no telemetry · no phone-home

Capture the web. Own your copy.

As plain Markdown, on your disk.

Khiip captures X, Reddit, YouTube, web articles, and Wikipedia — self-hosted core, plain-Markdown vault, no account.

  • free core
  • lands in your vault
  • typed payloads · REST + MCP
  • Obsidian · agents · terminal

The AGPL-3.0 core is free and self-hosted; Khiip Plus (also self-hosted) adds enriched capture and platform-styled renders. Two parts: a small local engine + an Obsidian plugin.

Install Read the docs

The web forgets

Nearly 1 in 5 tweets are gone within months of being posted (Pew Research Center, 2024). More than a third of the webpages that existed in 2013 had vanished a decade later. Pocket — the read-it-later app a generation leaned on — shut down in 2025; archives there survived only if you exported in time. You don't notice until you go looking — and it's gone.

Khiip keeps what you capture: the full text, typed, offline, on your machine. Save it while you can still see it.

Capture

Five sources, saved as files

Five source types. Every capture returns a typed payload, not raw HTML.

Captured now

  • X
  • Reddit
  • Wikipedia
  • Web
  • YouTube

On the roadmap

  • PDF (coming soon)
  • Instagram (coming soon)
  • TikTok (coming soon)
  • Threads (coming soon)
  • Bluesky (coming soon)

The extractor protocol is open — the same contract lives at src/khiip/extractors/base.py. Substack via the web extractor today; native handlers when the engagement gap matters.

Source Khiip free core Khiip Plus deeper capture and styled renders, from the same captured bytes — no re-fetch
X Tweet text, author, date, base engagement (likes, reposts, replies), community notes, polls, reply context Quote-tweet embeds, X-Article bodies, the complete engagement set (views, bookmarks, quotes)
Reddit The post and every top-level comment, crosspost lineage and removed-status preserved — over OAuth2 with your own credentials The deep recursive comment tree with scores and authority; the crosspost-rich parent embed
YouTube Metadata — including chapters — and the full transcript via a yt-dlp + youtube-transcript-api fallback chain Chapter-aligned, timestamped transcript segments
Web Full body text via a Trafilatura + Readability fallback chain, OG/JSON-LD metadata Inline media woven into the body — hero image, captioned + credited figures, video embeds — plus the styled render
Wikipedia The article via the MediaWiki API, with references and infobox The styled render, hero image embedded
Khiip Plus also embeds media across all sources — then renders each capture in Khiip's own platform-reminiscent style: the styled artifact in the window above.

Each capture lands as a structured object — TweetPayload, RedditPayload, WebPayload, WikiPayload, YouTubePayload. The shape that was captured is the shape that comes back, six months later, to whatever surface you point at it. Typed payloads, in depth →

  • .md + YAML frontmatter
  • Obsidian-compatible vault
  • raw bytes kept alongside — a best-effort cache

Compare

Same link, three outcomes

A plain fetch, the free Khiip render, and Khiip Plus — the identical post, side by side.

Raw fetch no tool · excerpt
<!DOCTYPE html><html lang="en" dir="ltr" data-app-env="prod" data-app-version="793a0fd0fd2bb2bd44166dce182f600eea8bcd51"><head><meta charSet="utf-8" nonce="LBuiZYAFYEKS/ky0pWUnlg=="/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0,viewport-fit=cover" nonce="LBuiZYAFYEKS/ky0pWUnlg=="/><meta name="color-scheme" content="light dark"/><meta name="theme-color" media="(prefers-color-scheme: light)" content="#FFFFFF"/><meta name="theme-color" media="(prefers-color-scheme: dark)" content="#000000"/><meta property="csp-nonce" content="LBuiZYAFYEKS/ky0pWUnlg=="/><title>Andrej Karpathy on X: &quot;Wow, this tweet went very viral!

I wanted share a possibly slightly improved version of the tweet in an &quot;idea file&quot;. The idea of the idea file is that in this era of LLM agents, there is less of a point/need of sharing the specific code/app, you
Khiip free · base render
X · Tweet

Andrej Karpathy @karpathy · Apr 4, 2026

Wow, this tweet went very viral!

I wanted share a possibly slightly improved version of the tweet in an “idea file”. The idea of the idea file is that in this era of LLM agents, there is less of a point/need of sharing the specific code/app, you just share the idea, then the other person’s agent customizes & builds it for your specific needs.

So here’s the idea in a gist format: https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f

You can give this to your agent and it can build you your own LLM wiki and guide you on how to use it etc. It’s intentionally kept a little bit abstract/vague because there are so many directions to take this in. And ofc, people can adjust the idea or contribute their own in the Discussion which is cool.

1.1K replies · 2.8K reposts · 26.8K likes

Khiip · Plus styled + full depth
X · Quote

Andrej Karpathy@karpathy3.2M followers · 1.1K following

Wow, this tweet went very viral!

I wanted share a possibly slightly improved version of the tweet in an “idea file”. The idea of the idea file is that in this era of LLM agents, there is less of a point/need of sharing the specific code/app, you just share the idea, then the other person’s agent customizes & builds it for your specific needs.

So here’s the idea in a gist format: https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f

You can give this to your agent and it can build you your own LLM wiki and guide you on how to use it etc. It’s intentionally kept a little bit abstract/vague because there are so many directions to take this in. And ofc, people can adjust the idea or contribute their own in the Discussion which is cool.

@karpathy
Andrej Karpathy@karpathy3.2M followers · 1.1K following

LLM Knowledge Bases

Something I’m finding very useful recently: using LLMs to build personal knowledge bases for various topics of research interest. In this way, a large fraction of my recent token throughput is going less into manipulating code, and more into manipulating knowledge (stored as markdown and images). The latest LLMs are quite good at it. So:

Data ingest: I index source documents (articles, papers, repos, datasets, images, etc.) into a raw/ directory, then I use an LLM to incrementally “compile” a wiki, which is just a collection of .md files in a directory structure. The wiki includes summaries of all the data in raw/, backlinks, and then it categorizes data into concepts, writes articles for them, and links them all. To convert web articles into .md files I like to use the Obsidian Web Clipper extension, and then I also use a hotkey to download all the related images to local so that my LLM can easily reference them.

IDE: I use Obsidian as the IDE “frontend” where I can view the raw data, the the compiled wiki, and the derived visualizations. Important to note that the LLM writes and maintains all of the data of the wiki, I rarely touch it directly. I’ve played with a few Obsidian plugins to render and view data in other ways (e.g. Marp for slides).

Q&A: Where things get interesting is that once your wiki is big enough (e.g. mine on some recent research is ~100 articles and ~400K words), you can ask your LLM agent all kinds of complex questions against the wiki, and it will go off, research the answers, etc. I thought I had to reach for fancy RAG, but the LLM has been pretty good about auto-maintaining index files and brief summaries of all the documents and it reads all the important related data fairly easily at this ~small scale.

Output: Instead of getting answers in text/terminal, I like to have it render markdown files for me, or slide shows (Marp format), or matplotlib images, all of which I then view again in Obsidian. You can imagine many other visual output formats depending on the query. Often, I end up “filing” the outputs back into the wiki to enhance it for further queries. So my own explorations and queries always “add up” in the knowledge base.

Linting: I’ve run some LLM “health checks” over the wiki to e.g. find inconsistent data, impute missing data (with web searchers), find interesting connections for new article candidates, etc., to incrementally clean up the wiki and enhance its overall data integrity. The LLMs are quite good at suggesting further questions to ask and look into.

Extra tools: I find myself developing additional tools to process the data, e.g. I vibe coded a small and naive search engine over the wiki, which I both use directly (in a web ui), but more often I want to hand it off to an LLM via CLI as a tool for larger queries.

Further explorations: As the repo grows, the natural desire is to also think about synthetic data generation + finetuning to have your LLM “know” the data in its weights instead of just context windows.

TLDR: raw data from a given number of sources is collected, then compiled by an LLM into a .md wiki, then operated on by various CLIs by the LLM to do Q&A and to incrementally enhance the wiki, and all of it viewable in Obsidian. You rarely ever write or edit the wiki manually, it’s the domain of the LLM. I think there is room here for an incredible new product instead of a hacky collection of scripts.

8:42 PM · Apr 2, 2026 · 21.6M Views
2.9K7.3K60.3K108K
4:45 PM · Apr 4, 2026 · 7.2M Views
1.1K2.8K26.8K46.7K

Real daemon output — a Karpathy quote-tweet: the free tier sees the outer tweet; Plus renders the quoted one too.

Raw fetchKhiipKhiip Plus
Readable Markdown, not markup soup
Your files — local, offline, greppable ~
No ads, no trackers, no app shell
Typed data your agents can query (MCP + REST)
Platform-styled cards in Obsidian
Full depth — quote chains, comment trees, media ~

See the full comparison eleven real captures across X, Reddit, YouTube and the web — re-rendered from current code on every build, never hand-adjusted

Substrate

The archive outlives the app

Khiip is a substrate, not a destination.

Most save-it-for-later tools — Pocket, Evernote, Notion's Web Clipper, Raindrop — couple capture and consumption in one place. You save into the destination. You read from the destination. When the destination goes away, your archive goes with it.

Destination — the old way

You capture → ← recall Pocket · Evernote · Raindrop

One box both holds and serves your captures. It shuts down → your archive shuts down with it.

Substrate — Khiip

You Khiip your vault your tools

Khiip writes to a vault you own. Khiip shuts down → the vault stays — still Markdown, still readable by anything.

  • Independence. Swap the application without rebuilding the archive.
  • Knowability. Every capture has a type and a schema; other software can read the substrate without negotiation.
  • Preservation. The raw bytes are kept on disk beside the typed extraction — a best-effort cache a smarter extractor can re-run on years from now.

Surfaces come and go. The substrate stays.

Surfaces

Read it where you work: vault, agent, terminal

Your Obsidian vault

Captures land as Markdown with structured frontmatter: wiki-links across captures, search at the vault level.

The plugin ships a capture command and a recall sidebar today; richer in-editor surfaces — per-source visual indicators and refetch controls — land in a later release.

Your agent or your script

khiipd exposes a REST API and an MCP server. An agent points at the substrate, asks structured questions — "what did I save about substrate design last quarter" — and gets typed answers back.

Your terminal

  • khiipd capture <url>
  • khiipd refetch <id>
  • khiipd validate

The daemon is local, the CLI is direct, the data root is yours.

The breadth isn’t a roadmap — it’s the architecture. The contract is open (REST + MCP + plain Markdown), so any tool can read Khiip. Surfaces that read it today:

  • Obsidian vault
  • Obsidian plugin
  • Terminal (CLI)
  • REST API
  • MCP server
  • LLM agents
  • Local recall
  • grep & editors
  • Markdown tools
  • Your scripts & vector store

Coming soon Browser extension · Mobile · Official SDK · Destinations via the open contract (Notion, …)

Want a surface we don’t have? Suggest one on GitHub Discussions →

Uses

What people do with it

Save it before it’s gone

The post you’ll need next year is one deletion away from a 404.

A read-it-later that can’t shut down

Your reading queue is plain files in your vault. There’s no service behind it to sunset.

Feed your agent a real corpus

Typed captures over REST + MCP. Your agent quotes what you actually saved, not what it half-remembers.

Keep the receipts

Capture, then refetch later: what it said the day you saved it, beside what it says now.

Open core

Free core. Exact paid line.

The substrate is AGPL-3.0 and free. The enriched layer — Khiip Plus — is the paid product.

Khiip

AGPL-3.0 · self-hosted · $0

  • Capture across all five sources
  • Typed payloads
  • Local recall
  • REST API + MCP server
  • Plain-Markdown renders

Free, self-hosted, no account, no telemetry. Yours, portable, git-versioned, exportable. You never pay to read your own data.

Install Khiip

Khiip Plus

$7/mo · $59/yr — founding price

The enriched, platform-styled renders and the deeper per-source capture, delivered as one product.

It runs on your own machine under a license key; nothing phones home.

Captures outlive the subscription. Everything Plus captured stays on your disk if you stop paying — the styled files and the enriched data, fully readable. How that works

See pricing

To be exact about the line: Plus itself isn't open source — it's licensed under the Elastic License 2.0, the paid layer that funds the core. Every released free-tier version ships under AGPL-3.0; Plus is the part you pay for.

The proven open-core path — Plausible · PostHog · Cal.com · Sentry · GitLab. The SDKs — a separate repo, when published — will be Apache-2.0 so they can be embedded freely in downstream applications.

Own what you save.

Install