Show HN: Willder, an open source context layer that syncs apps, agents and teams Willder, an open source context layer from the team behind willder.ai, launched as a Show HN project that syncs apps, agents and teams so that what one agent writes, others read on their next call. Each agent holds its own scoped, expiring token, and its memory reads and writes pass a single check and land in an audit log; a revoked token is refused on its next call. Willder connects Claude Code, Codex and Cursor agents over MCP, with connectors for GitHub, Google Drive, Slack, Figma and PostHog syncing into scopes, backed by Postgres with pgvector and Neo4j via Graphiti using BGE-384 embeddings. Apps, Agents, Teams Synced. Willder is a context layer that syncs your apps, agents and teams, with access control on every call and real-time coordination: what one agent writes, the others read on their next call. Each agent holds its own scoped, expiring token; its memory reads and writes pass one check and land in the audit log; revoke a token and its next call is refused. Connect your Claude Code or Cursor agent over MCP in five minutes. Website https://willder.ai · Docs https://github.com/willderai/willder-core/blob/main/docs/README.md · Architecture https://github.com/willderai/willder-core/blob/main/docs/architecture.md · Connect a client https://github.com/willderai/willder-core/blob/main/docs/connect/README.md · Discussions https://github.com/willderai/willder-core/discussions 1. The right context, unasked. At the start of a task an agent gets a short brief of what matters for it: the scope's rules, decisions and recent writes, ranked by the task's words. Queries search by words, by meaning and by links in the graph. Task-start briefs https://github.com/willderai/willder-core/blob/main/docs/architecture.md change-notices-and-task-start-briefs , hybrid retrieval https://github.com/willderai/willder-core/blob/main/docs/architecture.md hybrid-retrieval . 2. One memory across every agent. What Claude Code saves, Codex reads on its next call, with who wrote it. Change a fact once and every agent reads the new version. Versions and conflicts https://github.com/willderai/willder-core/blob/main/docs/architecture.md versions-and-conflicts . 3. Connectors into scopes. GitHub, Google Drive, Slack, Figma and PostHog sync into a scope you choose, under that scope's rules. services/connectors/ https://github.com/willderai/willder-core/blob/main/services/connectors . 4. Access control. Each agent holds its own scoped, expiring token. Its memory reads and writes pass one check and land in the audit log; a revoked token is refused on its next call. What the check does not cover is listed under Limits limits . The single check https://github.com/willderai/willder-core/blob/main/docs/architecture.md access-model-and-the-single-check . 5. Set up in minutes. One command connects Claude Code; Codex, Cursor and other clients have a page each. Connect a client https://github.com/willderai/willder-core/blob/main/docs/connect/README.md . 6. Memory you can see. Every fact keeps who wrote it, where it came from, what it replaced and which agents first read it. Audit and provenance https://github.com/willderai/willder-core/blob/main/docs/architecture.md audit-and-provenance . flowchart LR accTitle: The parts of Willder and how a request moves through them. accDescr: An MCP client with a capability token and a person in the web app both reach the memory operations. check decides each guarded operation against Postgres and writes an audit row. Allowed operations read and write the Postgres stores, including pgvector, and the graph through the memory service, which owns Neo4j and the embedding model. mcp "MCP client: agent token" -- ops "Memory operations" web "Web app: signed-in person" -- ops ops -- chk{"check "} chk -- pg "Postgres: scopes, grants, tokens, audit log, versions, pgvector chunks" chk -- allow -- pg chk -- allow -- ms "Memory service: FastAPI, BGE-384 embeddings" ms -- neo "Neo4j via Graphiti: facts and relations" Deep dives: architecture https://github.com/willderai/willder-core/blob/main/docs/architecture.md , hybrid retrieval https://github.com/willderai/willder-core/blob/main/docs/willder memory hybrid.md , conflict resolution https://github.com/willderai/willder-core/blob/main/docs/willder conflict resolution.md , database https://github.com/willderai/willder-core/blob/main/docs/willder database.md , API https://github.com/willderai/willder-core/blob/main/docs/willder api.md , export format https://github.com/willderai/willder-core/blob/main/docs/export-format.md , self-hosting https://github.com/willderai/willder-core/blob/main/docs/self-host.md . You run several agents on real work: a coding agent in the repo, a research agent on a schedule, a side project's agent. Nothing decides what each may see, tells the others when one changes something, or records what was read. Willder is the memory they share and the fence between them: scopes, per-agent tokens, a change feed and an audit, with no model in any access decision. This repository is the engine: Postgres with pgvector, Neo4j, the memory service and the MCP server. It runs on your own machine with no willder.ai account and no call to willder.ai. You need Docker with Compose v2, Node 20.19+, 22.12+ or 24+, and a few GB of disk. Without Docker, docs/self-host.md https://github.com/willderai/willder-core/blob/main/docs/self-host.md without-docker says what to run instead. git clone https://github.com/willderai/willder-core.git && cd willder-core npm install cp .env.selfhost.example .env then set GRAPHITI SERVICE API KEY to any string docker compose up -d --wait Postgres, Neo4j, the memory service; the first build takes minutes npx prisma migrate deploy create the tables npm run selfhost:smoke write, scoped read, refusal, export, no outside calls The smoke ends with 9 of 9 steps passed . docs/self-host.md https://github.com/willderai/willder-core/blob/main/docs/self-host.md describes each line it prints and what to do when one fails. Mint a token for your agent. One per agent, scoped and expiring: npm run selfhost:token -- --scope team --agent claude-code It prints a wcap ... token once. Put it in an environment variable and nowhere else: printf 'Willder token: ' stty -echo; read -r WILLDER TOKEN; stty echo printf '\n' export WILLDER TOKEN Connect Claude Code to the local stdio MCP server, from this directory: claude mcp add -s user willder-local -e WILLDER CAPABILITY TOKEN="$WILLDER TOKEN" \ -- npm --prefix "$PWD" run --silent mcp Then tell the agent: Save this to Willder: we store sessions in Postgres, not Redis, so they survive a restart. Then ask Willder where we store sessions and why. It calls memory ingest with two required arguments, content the fact and name what the fact is about , and gets back the id a later update passes as baseVersion : Stored and readable now; graph extraction continues in the background. Version: