Model or dataset
jihe520/mindpocket avatar
jihe520/mindpocket

MindPocket: a Cloudflare-only bookmark system with an agent-facing CLI

Open-source, free, multi-platform, one-click deploy, AI Agent–integrated personal bookmarking system|完全开源、免费、多端、一键部署、AI Agent 集成的个人收藏夹系统

348 stars178 forksTypeScriptLicense varies

At a glance

What is it?
MindPocket is an MIT-licensed personal bookmark manager that deploys as a single Cloudflare Worker with D1, Vectorize and R2 behind it, plus a Next.js static frontend, an Expo app, a browser extension and an npm CLI aimed at agents. The interesting part is not the bookmarking, it is the deployment shape and the CLI contract.
Who is it for?
Adopt MindPocket if you want a personal bookmark store that you can deploy with wrangler in one sitting and drive from a terminal or an agent, and if you accept that the AI tagging path depends on a vector index you create yourself. Do not adopt it if you need a hosted service with a support contract, or if your data has to stay on infrastructure you already run outside Cloudflare.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository last received commits 50 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem MindPocket actually addresses

Bookmark managers usually fail in one of two directions. Either they are hosted services where your saved links live in someone else's database, or they are self-hosted stacks that need a Postgres instance, an object store and a reverse proxy before the first link is saved. MindPocket takes a third position: the README describes it as "fully open-source, free, multi-platform, one-click deployable personal bookmark system with AI Agent integration", and the deployment target is the Cloudflare free tier rather than a VPS. The intended user is someone who already has a Cloudflare account and wants their bookmarks behind their own domain without renting a server. The secondary audience is more unusual. The repository ships a CLI whose stated purpose is to let agents, scripts and developers talk to a MindPocket server from the terminal, and it also ships a repository-scoped agent skill that teaches compatible agents to discover commands, check readiness and handle authentication. So the project is aimed at two groups at once: people who want a private bookmark store, and people who want their saved links to be readable and writable by an automated process.

One Worker serving both the API and the static frontend

The architecture is narrower than the feature list suggests. A single Cloudflare Worker serves the statically exported Next.js frontend and the /api/* routes, which the README describes as "Hono API + Next.js static export". There is no separate origin for the frontend and no CDN configuration to write. Four Cloudflare products sit behind that Worker. D1 holds relational data as SQLite. Vectorize handles vector search, and the README notes it is there to replace pgvector. R2 stores files, replacing MinIO. Workers plus static assets are listed at 100k requests per day on the free tier, D1 at 5 GB, Vectorize at 30M queried dimensions per month, and R2 at 10 GB. Those numbers come from the project's own table and are worth re-checking against Cloudflare's current pricing before you plan around them. The data flow for the AI features is the part that matters most for anyone evaluating this: a bookmark is saved, its content is summarized and tagged through the Vercel AI SDK, and the resulting embedding is written to Vectorize. Retrieval then queries that index. The index is created with a userId metadata property, which is how per-user filtering is expressed at the vector layer. That design keeps everything inside one platform, and it also means the AI features are only as available as your Vectorize index is.

Deploying it: the four resources you create by hand

The quick start is explicit that resource creation is a one-time manual step, run from apps/api. You create the D1 database with pnpm exec wrangler d1 create mindpocket, the vector index with pnpm exec wrangler vectorize create mindpocket-embeddings --dimensions=1024 --metric=cosine, a metadata index on the userId property with pnpm exec wrangler vectorize create-metadata-index mindpocket-embeddings --property-name=userId --type=string, and the bucket with pnpm exec wrangler r2 bucket create mindpocket. The auth secret goes in through pnpm exec wrangler secret put BETTER_AUTH_SECRET. After that you fill database_id, R2_PUBLIC_URL and NEXT_PUBLIC_APP_URL in apps/api/wrangler.jsonc, then run pnpm --filter api db:migrate:remote and pnpm deploy:cf from the repository root. Local development follows the same shape at smaller scale: pnpm install, write BETTER_AUTH_SECRET=dev-secret into apps/api/.dev.vars, run pnpm --filter api db:migrate:local, then pnpm --filter api dev and open http://127.0.0.1:8787. The README is clear that the Worker serves both the static assets and the API in that local mode too, and that pnpm --filter web dev on port 3000 is only for frontend hot reload. The 1024 dimensions in the vectorize create command are not a default you can change later without re-embedding, so that number and the cosine metric are worth copying exactly.

The CLI is the real integration surface

Most of the agent story runs through one npm package. You install it globally with npm install -g mindpocket or pnpm add -g mindpocket, then work through a sequence the README calls the recommended agent flow: mindpocket version, mindpocket schema, mindpocket doctor, and mindpocket auth login --no-open. The schema command is what lets an agent discover available commands instead of being told them, and doctor is the readiness check before anything is attempted. Configuration is a single value set with mindpocket config set server https://your-domain.com, after which mindpocket auth login and commands like mindpocket user me and mindpocket bookmarks list operate against that server. There is also a skill installed with npx skills add https://github.com/jihe520/mindpocket --skill mindpocket, or from a local checkout with npx skills add ./skills/mindpocket. The README is direct about the dependency: the skill is procedural guidance layered on top of the npm CLI, so the mindpocket command still has to be available locally. If you install the skill and skip the CLI, the prompts in the README will not resolve to anything. For a team wiring an agent into a bookmark store, that pair of commands (schema for discovery, doctor for readiness) is the part worth reading before writing any integration code.

Where the project is thin, and where it is the wrong tool

Three things stand out as limits rather than features. First, the project describes itself as a "pure VIBE CODING" effort in which the author implemented one core feature and the rest was built by Claude Code, with 26,256 lines of code documented in docs/codeinsight.md. That is a statement about how the code was produced, not about its quality, but it does tell you what to expect from the review culture around pull requests. Second, the roadmap is entirely unchecked. More UI settings, support for more bookmark platforms, an improved AI Agent experience and RAG optimization are all listed as open items, with docs/todo.md as the detail. Nothing in the supplied material indicates a release has been cut, so you are tracking the main branch. Third, the platform lock is real. Every storage layer is a Cloudflare product, D1, Vectorize and R2, and the README frames Vectorize and R2 as replacements for pgvector and MinIO. If your organization already runs Postgres and an S3-compatible store, adopting MindPocket means either running a second data platform or waiting on the migration guide, which docs/CLOUDFLARE.md covers only in the direction of moving from a previous self-hosted Postgres and MinIO setup to Cloudflare. The reverse path is not described. If you need a bookmark manager that works entirely inside your existing database, this is the wrong tool, and the CLI will not change that.

How this differs from a self-hosted link app on your own server

The obvious comparison is a conventional self-hosted bookmark application that you run on a VPS with a database and an object store you manage. The difference is not the feature list, it is where the operational surface lives. A VPS deployment gives you a filesystem, a database you can connect to with psql, and backups you script yourself. MindPocket gives you wrangler commands, a D1 database you migrate with pnpm --filter api db:migrate:remote, and a vector index whose dimensionality is fixed at creation. In exchange you get no server to patch and a free tier that the README quantifies per product. The other comparison is the CLI-first design. A conventional bookmark app exposes a web UI and, if you are lucky, a REST API you reverse-engineer. MindPocket publishes a CLI with a schema command specifically so an agent can enumerate its own capabilities, plus a doctor command for readiness. That is a different contract from a REST API with a documentation page, and it is the strongest reason to pick this project over a generic self-hosted alternative if automation is your goal. The trade is that your automation is now tied to the npm package's command surface rather than to HTTP endpoints you control.

Licence and the cost of staying current

The README states an MIT License with a LICENSE file in the repository, while the repository metadata supplied here lists the licence as unknown. That discrepancy is worth resolving by reading the LICENSE file itself before you depend on the terms, since I cannot confirm the licence text from the material available. MIT is permissive and would allow commercial use and modification, but nothing here constitutes legal advice and the file is the authority. On maintenance, the practical costs are the ones the deploy steps imply. Cloudflare free-tier limits are the boundary you will hit first: 100k Worker requests per day, 5 GB in D1, 30M queried dimensions per month in Vectorize, 10 GB in R2. Exceeding them means moving to a paid plan, and there is no self-hosted fallback described in the README. Upgrades arrive as commits on main rather than tagged releases, so pinning means tracking a commit hash. Migrations are applied with pnpm --filter api db:migrate:remote, and the README points to docs/CLOUDFLARE.md for anyone moving data from a previous Postgres and MinIO installation, which suggests the author expects schema and storage changes to keep coming. Budget for reading that document on each upgrade rather than assuming migrations are automatic.

Editorial conclusion

Adopt MindPocket if you want a personal bookmark store that you can deploy with wrangler in one sitting and drive from a terminal or an agent, and if you accept that the AI tagging path depends on a vector index you create yourself. Do not adopt it if you need a hosted service with a support contract, or if your data has to stay on infrastructure you already run outside Cloudflare. Before committing, run the four resource-creation commands in apps/api, confirm the Vectorize index is created with --dimensions=1024 --metric=cosine, and read docs/CLOUDFLARE.md to check whether the migration path from the older Postgres and MinIO setup applies to you.

Official sources

  1. Issues
  2. jihe520/mindpocket on GitHub
  3. Project website
  4. README
Community notes

Community notes