[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-85104":3},{"id":4,"name":5,"fullName":6,"owner":5,"repo":5,"description":7,"homepage":8,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":17,"hasPages":17,"topics":19,"createdAt":9,"pushedAt":9,"updatedAt":30,"readmeContent":31,"aiSummary":9,"trendingCount":14,"starSnapshotCount":14,"syncStatus":12,"lastSyncTime":32,"discoverSource":33},85104,"clarilayer","clarilayer\u002Fclarilayer","Stop re-explaining your data to your AI every session. The individual-analyst context layer, delivered over MCP (Claude Code \u002F Cursor \u002F Codex).","https:\u002F\u002Fclarilayer.com",null,"TypeScript",124,2,1,0,37.43,"Other",false,"main",[20,21,22,23,24,25,26,27,28,29],"ai-agents","analytics","claude-code","context-engineering","cursor","data-engineering","dbt","llm","mcp","model-context-protocol","2026-06-15 10:04:20","[![MseeP.ai Security Assessment Badge](https:\u002F\u002Fmseep.net\u002Fpr\u002Fclarilayer-clarilayer-badge.png)](https:\u002F\u002Fmseep.ai\u002Fapp\u002Fclarilayer-clarilayer)\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fassets\u002Flogomark.svg\" alt=\"ClariLayer\" width=\"84\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">ClariLayer\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cb>Stop re-explaining your data to your AI every session.\u003C\u002Fb>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  The individual-analyst \u003Cb>context layer\u003C\u002Fb>, delivered over \u003Cb>MCP\u003C\u002Fb>.\u003Cbr\u002F>\n  Connect it to Claude Code, Cursor, or Codex — your agent stops making the same data mistakes.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fclarilayer.com\">Website\u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fclarilayer.com\u002Fdocs\">Docs\u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fclarilayer.com\u002Fauth\u002Fsign-up\">Get started (free)\u003C\u002Fa> ·\n  \u003Ca href=\"https:\u002F\u002Fclarilayer.com\u002Fuse-cases\">Use cases\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FMCP-server-5b46f5\" alt=\"MCP server\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FClaude_Code_·_Cursor_·_Codex-supported-1f883d\" alt=\"Clients\" \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Findividuals-free-1f883d\" alt=\"Free for individuals\" \u002F>\n\u003C\u002Fp>\n\n---\n\n> ClariLayer is an individual-analyst context layer, delivered over MCP. Connect it to Claude Code, Cursor, or Codex and it bootstraps your real working context from the SQL and dbt you already have, reconciles your definitions against your warehouse, and remembers your corrections — so your agent stops re-explaining your data and stops making the same mistakes every session.\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fassets\u002Fdemo-walkthrough.gif\" alt=\"ClariLayer in Claude Code: the agent recalls a saved net-revenue definition, reconciles it against the warehouse, finds refunds the definition excludes, and flags the entry with a caveat that's waiting in the next session\" width=\"900\" \u002F>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Csub>\u003Ci>A seeded demo warehouse: your agent \u003Cb>recalls\u003C\u002Fb> a saved definition, \u003Cb>reconciles\u003C\u002Fb> it against real results, and the mismatch is flagged as a \u003Ccode>caveat\u003C\u002Fcode> that's waiting next session. Statuses are \u003Ccode>asserted\u003C\u002Fcode> \u002F \u003Ccode>caveat\u003C\u002Fcode> — never \"verified\".\u003C\u002Fi>\u003C\u002Fsub>\n\u003C\u002Fp>\n\n## The problem\n\nEvery new session, your AI coding agent starts from zero about *your* data. So it makes the same mistakes — queries the wrong table, picks the wrong join, counts refunds in revenue, uses a churn definition you deprecated months ago. You correct it. Next session, it forgets, and you correct it again.\n\nA hand-written `CLAUDE.md` of definitions helps a little — but it has the *same trust problem as the original numbers*: it's just asserted text. Nobody checked it against your warehouse.\n\n## What ClariLayer does\n\nIt gives your agent a durable, **reconciled** memory of your data context — and it lives **inside the agent you already use**, over [MCP](https:\u002F\u002Fmodelcontextprotocol.io). Four verbs, all live:\n\n| Verb | What it does |\n|---|---|\n| **recall** | Before writing SQL or defining a metric, your agent pulls the most relevant saved context — each with its provenance and status. Read-only, in-flow. |\n| **remember** | Saves one durable fact — a definition, schema note, reusable query, assumption, caveat, or decision — so it survives across sessions. |\n| **bootstrap** | Bulk-imports context from artifacts you already have, across **five source kinds**: a SQL `SELECT` (deterministically structured), a **data dictionary** \u002F codebook (structured into one schema-note per variable), dbt models, `CLAUDE.md` \u002F freeform notes, and a governed **semantic-layer model** (a Databricks Metric View, dbt semantic model, … imported as canonical metric definitions). No cold empty store. |\n| **reconcile** | Grounds a saved definition against your **real** warehouse result. Your agent runs the SQL with its own access and reports back, so a declared-vs-actual mismatch surfaces as a **caveat**. |\n\nThe context you build **compounds** across sessions and is **portable** across Claude Code, Cursor, and Codex.\n\nThese four verbs are the in-flow core loop. The full contract today is **18 MCP tools at capability v32** (the four above plus `propose` \u002F `propose_batch`, the entry and reasoning lifecycle, `supersede`, the read-only `suggest_links`, `capabilities`, and a health check). The canonical, live list is always discoverable by your client at connect — via the `initialize` response or a `capabilities` call — so you never have to trust a doc over the wire. See [`CAPABILITIES.md`](.\u002FCAPABILITIES.md) for what each recent capability bump added.\n\n## Install\n\n**Fastest — one command.** Auto-detects Claude Code, Cursor, and Codex, writes the right config, and offers to add the standing-orders block to your `CLAUDE.md`:\n\n```bash\nnpx clarilayer init\n```\n\nYou'll need a free context key — sign up at **[clarilayer.com](https:\u002F\u002Fclarilayer.com\u002Fauth\u002Fsign-up)**, then open **Connect your AI** to mint one. The CLI prompts for it and validates it. Full options: **[CLI.md](.\u002FCLI.md)**.\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Prefer to wire it up by hand?\u003C\u002Fb>\u003C\u002Fsummary>\n\n\u003Cbr\u002F>\n\nReplace `cl_YOUR_CONTEXT_KEY` with your key.\n\n**Claude Code** — run in your terminal:\n\n```bash\nclaude mcp add --transport http clarilayer https:\u002F\u002Fclarilayer.com\u002Fapi\u002Fmcp\u002Fmcp --header \"Authorization: Bearer cl_YOUR_CONTEXT_KEY\"\n```\n\n**Cursor** — add to `~\u002F.cursor\u002Fmcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"clarilayer\": {\n      \"url\": \"https:\u002F\u002Fclarilayer.com\u002Fapi\u002Fmcp\u002Fmcp\",\n      \"headers\": { \"Authorization\": \"Bearer cl_YOUR_CONTEXT_KEY\" }\n    }\n  }\n}\n```\n\n**Codex** — add to `~\u002F.codex\u002Fconfig.toml`. Recent Codex connects to the URL directly, **no Node\u002F`npx` needed** (same as Claude Code and Cursor):\n\n```toml\n[mcp_servers.clarilayer]\nurl = \"https:\u002F\u002Fclarilayer.com\u002Fapi\u002Fmcp\u002Fmcp\"\nhttp_headers = { \"Authorization\" = \"Bearer cl_YOUR_CONTEXT_KEY\" }\n```\n\nOnly on older Codex without direct-HTTP support, bridge it via `mcp-remote` instead — this route **requires Node.js** (`npx`):\n\n```toml\n[mcp_servers.clarilayer]\ncommand = \"npx\"\nargs = [\"-y\", \"mcp-remote\", \"https:\u002F\u002Fclarilayer.com\u002Fapi\u002Fmcp\u002Fmcp\", \"--header\", \"Authorization: Bearer cl_YOUR_CONTEXT_KEY\"]\n```\n\n\u003C\u002Fdetails>\n\nSee **[QUICKSTART.md](.\u002FQUICKSTART.md)** for the full walkthrough and troubleshooting.\n\n## Then tell your agent to actually use it\n\nPaste this into your project's `CLAUDE.md` (or `AGENTS.md`) so your agent reaches for ClariLayer proactively instead of waiting to be asked. The full file is in [`examples\u002FCLAUDE.md`](.\u002Fexamples\u002FCLAUDE.md):\n\n```markdown\n## ClariLayer — your data context layer (use it proactively)\n\nClariLayer is connected over MCP and holds this project's durable data context: definitions, schema notes, reusable SQL, assumptions, caveats, and decisions. Use it WITHOUT waiting to be asked.\n\n- Recall first: before writing SQL, defining or computing a metric, or answering a question about this data, call `get_analysis_context` (pass a `use_case`). Build on what is already known instead of re-deriving it.\n- Write back as you learn: when you establish a durable fact — a definition, schema note, reusable query (attach the SELECT as `sql`), assumption, caveat, or decision — save it with `remember`. Use `propose` for suggestions (they go to the human's review inbox).\n- Reconcile on drift: if a definition's SQL changed or staleness is flagged, call `reconcile` to check it against the warehouse.\n- Stay honest: treat status as `asserted`\u002F`caveat`, never `verified`.\n```\n\n## Propose before you save, and harvest a working session\n\nNot every fact should write straight to your context. Two verbs put a human in the loop:\n\n- **propose** stages *one* suggested entry in your **Context Inbox**. It stays pending until you accept it — it is never auto-saved and never recalled while it sits there.\n- **propose_batch** is the bulk form: up to ~25 candidate entries in a single call, all landing in the same inbox for review.\n\n**Conversation harvest** builds on `propose_batch`. When you *explicitly ask*, your agent distills the durable facts from a working conversation — the definitions, gotchas, and decisions you settled during the session — into a handful of candidates and stages them for your review. The guardrails are deliberate:\n\n- **Explicit request only** — harvesting never runs in the background or ambiently; you have to ask for it.\n- **You approve each candidate** — nothing enters your context until you accept it from the inbox.\n- **Your transcript is never sent to ClariLayer** — only the distilled candidate facts cross the boundary, not the conversation itself.\n- Harvested candidates carry provenance **`agent`** (they're the agent's suggestion, not your authorship) and remain `asserted`\u002F`caveat` once accepted — never \"verified\".\n\n`propose`, `propose_batch`, and harvest are all on the **free** single-player tier, alongside recall, remember, bootstrap, and reconcile.\n\n## Tidy the reasoning on an entry — reversibly\n\nCaveats and assumptions attached to an entry have their own lifecycle, so you can quietly retire a note without losing the history:\n\n- **archive_reasoning** reversibly hides an attached caveat\u002Fassumption — it stops being recalled but is kept as history.\n- **restore_reasoning** brings an archived one back.\n- **forget_reasoning** deletes one permanently.\n\n(Entries themselves have the matching `archive` \u002F `restore` \u002F `forget`.)\n\n## What makes it different from a plain `CLAUDE.md`\n\n`reconcile`. A saved definition isn't just trusted — your agent runs its SQL against your warehouse and reports the result shape back, and ClariLayer compares declared-vs-actual. A mismatch becomes a **caveat** so you and your agent know exactly what to trust.\n\n> **On trust language — we keep it honest.** Today ClariLayer's two statuses are **`asserted`** and **`caveat`**. A stronger **`verified`** status is *not* shipped yet — it's the documented fast-follow. We reconcile and flag caveats; we don't claim your context is \"verified.\" ([why](https:\u002F\u002Fclarilayer.com\u002Fdocs))\n\n## Your data stays yours\n\n**ClariLayer never holds your warehouse credentials and never executes SQL server-side.** Your agent is the connector — it runs queries with its own access and sends back result metadata plus any optional preview rows *it* chooses to include. ClariLayer stores the context, not your warehouse keys.\n\n## Pricing\n\n**Free for individuals** — install, recall, remember, bootstrap, reconcile, propose \u002F propose_batch, and conversation harvest are unmetered for single-player use. Team-merge, governance, and the Contract API are the secondary *for teams* expansion strand. See **[clarilayer.com\u002Fpricing](https:\u002F\u002Fclarilayer.com\u002Fpricing)**.\n\n## Get started\n\n1. **[Sign up free →](https:\u002F\u002Fclarilayer.com\u002Fauth\u002Fsign-up)**\n2. Open **Connect your AI** and mint a context key\n3. Paste the install command for your agent (above)\n4. In your next session, ask your agent to `bootstrap` from your `.\u002Fsql` folder — then watch the first `reconcile`\n\n## FAQ\n\n**Is this open source?**\nThis repo — the docs, examples, and (soon) a thin setup CLI — is MIT licensed. The **ClariLayer service itself is hosted and proprietary**; you connect to it with a free account. This repo is the front door, not the product source.\n\n**Where does my data go?**\nYour context (definitions, notes, SQL you choose to save) is stored in your ClariLayer account. Your warehouse credentials are never sent to ClariLayer, and ClariLayer never runs SQL against your warehouse — your agent does that locally. See [Your data stays yours](#your-data-stays-yours).\n\n**Which agents are supported?**\nClaude Code, Cursor, and Codex today — anything that speaks MCP over Streamable HTTP.\n\n**I have a team \u002F need governance.**\nThat's the *for teams* strand — ownership, approvals, the one right metric, and the Contract API. Start [here](https:\u002F\u002Fclarilayer.com\u002Fuse-cases).\n\n---\n\n\u003Cp align=\"center\">\n  \u003Csub>Built for analysts who live in their AI agent. · \u003Ca href=\"https:\u002F\u002Fclarilayer.com\">clarilayer.com\u003C\u002Fa>\u003C\u002Fsub>\n\u003C\u002Fp>\n","2026-06-15 02:30:02","CREATED_QUERY"]