{
  "markdown": "<p align=\"center\">\n  <img src=\"docs/assets/images/kenkeep-hero.png\" alt=\"kenkeep: AI coding sessions are curated into a reviewed, git-tracked knowledge library\" width=\"100%\">\n</p>\n\n<h1 align=\"center\">kenkeep</h1>\n\n<p align=\"center\">\n  <strong>A team-shared, git-native knowledge base for AI coding sessions.</strong><br>\n  Built up in your repo, reviewed and versioned like code, with no extra infrastructure to run.\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/kenkeep\"><img src=\"https://img.shields.io/npm/v/kenkeep?style=flat-square&label=npm&color=D14781&labelColor=2b2230\" alt=\"npm version\"></a>\n  <a href=\"https://github.com/e0ipso/kenkeep/actions/workflows/test.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/e0ipso/kenkeep/test.yml?style=flat-square&label=tests&color=D14781&labelColor=2b2230\" alt=\"tests\"></a>\n  <a href=\"package.json\"><img src=\"https://img.shields.io/node/v/kenkeep?style=flat-square&color=D14781&labelColor=2b2230\" alt=\"node version\"></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/npm/l/kenkeep?style=flat-square&color=D14781&labelColor=2b2230\" alt=\"MIT license\"></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://kenkeep.canpicasoft.com/how-it-works.html\">How it works</a> &nbsp;·&nbsp;\n  <a href=\"https://kenkeep.canpicasoft.com/installation.html\">Installation</a> &nbsp;·&nbsp;\n  <a href=\"https://kenkeep.canpicasoft.com/daily-use.html\">Daily use</a> &nbsp;·&nbsp;\n  <a href=\"https://kenkeep.canpicasoft.com/knowledge-packs.html\">Knowledge packs</a> &nbsp;·&nbsp;\n  <a href=\"https://kenkeep.canpicasoft.com/troubleshooting.html\">Troubleshooting</a>\n</p>\n\n---\n\nCoding assistants forget about everything in past sessions. Kenkeep creates a system that **salvages the gold nuggets in your past conversations**, and discards the rest. This way, the assistant can use that important detail you shared two weeks ago, without you even worrying about it.\n\nKenkeep is a **team-shared, git-native knowledge base** for AI coding assistants.\n\nYour AI conversations produce a steady stream of project-specific knowledge (conventions, gotchas, named modules, decision rationale), and most of it evaporates when the session ends. This tool captures it, asks a human to curate it, commits it to the repo, and injects it back into every future session.\n\n## Overview\n\n<table>\n<tr>\n<td width=\"33%\" valign=\"top\">\n<a href=\"docs/assets/images/kenkeep-slide-01.png\">\n<img src=\"docs/assets/images/kenkeep-slide-01.png\" alt=\"Your AI sessions have value. Don't lose it.\" width=\"100%\" />\n</a>\n</td>\n<td width=\"33%\" valign=\"top\">\n<a href=\"docs/assets/images/kenkeep-slide-02.png\">\n<img src=\"docs/assets/images/kenkeep-slide-02.png\" alt=\"How Kenkeep captures knowledge in three simple ways.\" width=\"100%\" />\n</a>\n</td>\n<td width=\"33%\" valign=\"top\">\n<a href=\"docs/assets/images/kenkeep-slide-03.png\">\n<img src=\"docs/assets/images/kenkeep-slide-03.png\" alt=\"Right knowledge at the right time through progressive disclosure.\" width=\"100%\" />\n</a>\n</td>\n</tr>\n<tr>\n<td width=\"33%\" valign=\"top\">\n<a href=\"docs/assets/images/kenkeep-slide-04.png\">\n<img src=\"docs/assets/images/kenkeep-slide-04.png\" alt=\"Why teams love Kenkeep.\" width=\"100%\" />\n</a>\n</td>\n<td width=\"33%\" valign=\"top\">\n<a href=\"docs/assets/images/kenkeep-slide-05.png\">\n<img src=\"docs/assets/images/kenkeep-slide-05.png\" alt=\"Privacy-first and open-source.\" width=\"100%\" />\n</a>\n</td>\n<td width=\"33%\" valign=\"top\">\n<a href=\"docs/assets/images/kenkeep-slide-06.png\">\n<img src=\"docs/assets/images/kenkeep-slide-06.png\" alt=\"Turn AI interactions into long-term advantage.\" width=\"100%\" />\n</a>\n</td>\n</tr>\n</table>\n\n## Why kenkeep\n\n<table>\n<tr>\n<td width=\"50%\" valign=\"top\">\n\n<img src=\"docs/assets/icons/users.svg\" width=\"28\" height=\"28\" alt=\"\" />\n\n### Built up and shared across your team\n\nThe knowledge base grows in your repo as plain markdown, one node per fact, accumulated from real coding sessions. The `nodes/` tree is a conformant [Open Knowledge Format (OKF v0.1)](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md) bundle — an open, vendor-neutral format any OKF tool can read — with kenkeep's own fields carried under the self-describing `kk_` extension namespace. It travels with the project through `git pull`, so every teammate works from the same conventions instead of rediscovering them on their own laptop.\n\n</td>\n<td width=\"50%\" valign=\"top\">\n\n<img src=\"docs/assets/icons/git-pull-request.svg\" width=\"28\" height=\"28\" alt=\"\" />\n\n### Reviewed and versioned like code\n\nNothing reaches the knowledge base without a human approving it. Every addition or change is an ordinary git diff you review in a commit or PR, with the full history there to inspect, blame, or revert like any other code.\n\n</td>\n</tr>\n<tr>\n<td width=\"50%\" valign=\"top\">\n\n<img src=\"docs/assets/icons/server-off.svg\" width=\"28\" height=\"28\" alt=\"\" />\n\n### No extra infrastructure\n\nNo daemons, services, databases, or vector stores. kenkeep is just Node and git, so there is nothing to provision, host, or keep alive, and nothing new to secure.\n\n</td>\n<td width=\"50%\" valign=\"top\">\n\n<img src=\"docs/assets/icons/key-round.svg\" width=\"28\" height=\"28\" alt=\"\" />\n\n### No API keys\n\nIt all runs from within the assistant of your choice, on the subscription you already pay for. There is no separate API key to obtain, store, or rotate.\n\n</td>\n</tr>\n</table>\n\n## How it works\n\n<p align=\"center\">\n  <img src=\"docs/assets/images/kenkeep-infography.png\" alt=\"kenkeep knowledge lifecycle: capture transcripts, curate them into reviewed notes, and inject them back into every session\" width=\"100%\">\n</p>\n\nkenkeep runs a loop around your AI sessions. Capture and recall happen on their own; you trigger curation, and you decide what to keep:\n\n- **Capture** (automatic): when a session ends, a hook saves the transcript.\n- **Curate** (you run `/kk-curate`): the AI drafts proposed notes under `nodes/`, then walks you through any contradictions with an existing note.\n- **Review** (you decide): inspect the notes with `git diff`, then commit the ones you want to keep.\n- **Recall** (automatic): at the start of every session a hook injects only the root index; the assistant descends by relevance, opening just the notes it needs (**progressive disclosure**), so the payload stays small as the base grows.\n\n<p align=\"center\">\n  <img src=\"docs/assets/images/progressive-disclosure.png\" alt=\"kenkeep progressive disclosure: load the root index node, select relevant branches by intent and tags, descend into those branch indexes, then open only the confirmed-relevant leaf nodes and follow their cross-edges\" width=\"100%\">\n</p>\n\nFull walkthrough: [How it works](https://kenkeep.canpicasoft.com/how-it-works.html).\n\n## Quick start\n\n```sh\nnpx kenkeep init --harnesses claude\nnpx kenkeep doctor\n```\n\nSwap `claude` for `codex`, `cursor`, `opencode`, or `copilot` (or pass a comma-separated list). For GitHub Copilot CLI, `npx kenkeep init --harnesses copilot` installs the skills under `.github/skills/` (Copilot's documented project skill location) and keeps the adapter's hook scripts under the project-local `.copilot/` directory, registering them in the repo-level `.github/hooks/kk.json` (Copilot loads repo-level hooks before user-level; nothing is written to `~/.copilot/`).\n\nThen code normally. When you want to turn captured material into knowledge nodes, run `/kk-curate` inside your harness session (also `/kk-add`, `/kk-bootstrap`). The skills are context-aware and walk you through conflict resolution. New nodes appear in `nodes/`; review with `git diff` and commit the ones you want to keep.\n\n<table>\n<tr>\n<td width=\"50%\" valign=\"top\">\n\n<img src=\"docs/assets/icons/sprout.svg\" width=\"28\" height=\"28\" alt=\"\" />\n\n### Seed from existing docs\n\nIf your repo already has READMEs, ADRs, or module docs, seed the knowledge base from them. Inside a harness session:\n\n```\n/kk-bootstrap\n```\n\nThe scan walks the repo root, filtered by `.kkignore` (generated by `init`, uses [gitignore-style syntax](https://git-scm.com/docs/gitignore)). Edit `.kkignore` to exclude directories you don't want scanned. Review the resulting nodes under `nodes/` with `git diff` and commit the ones you want to keep.\n\n</td>\n<td width=\"50%\" valign=\"top\">\n\n<img src=\"docs/assets/icons/message-square-plus.svg\" width=\"28\" height=\"28\" alt=\"\" />\n\n### Add knowledge manually\n\nAt any time during a session you can use `/kk-add` to make sure the assistant remembers a message. Just casually mention it, and you're done:\n\nExample:\n\n```\nNo, you got that wrong.\n\nThis project aims to maximize code\nre-use, instead of duplication. Adapt\nand extend the abstractions to fit\nthis use case. Also, /kk-add this.\n```\n\n</td>\n</tr>\n</table>\n\n## Knowledge packs\n\nKnowledge packs let teams publish a reviewed `.ai/kenkeep/nodes/` tree for a\nframework, platform, or shared domain and graft it into another project as one\nisolated branch:\n\n```sh\nnpx kenkeep pack import e0ipso/kenkeep-pack-drupal\nnpx kenkeep pack import https://github.com/e0ipso/kenkeep-pack-drupal --as drupal\n```\n\nImports are deterministic and LLM-free. Colliding node ids are skipped with a\nwarning, and any structural rebalancing happens later through the normal\ncuration workflow. See the full guide: **[Knowledge packs](https://kenkeep.canpicasoft.com/knowledge-packs.html)**.\n\n## Documentation\n\nFull documentation: **<https://kenkeep.canpicasoft.com>**\n\nFor maintainers of this package itself, see [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\n[MIT](LICENSE)\n",
  "bytes": 9498,
  "sha": "d3265eaae60889a9777409e0cae6eb6a51f2d094064b1904e6d0636397236d18",
  "repo_slug": "e0ipso/kenkeep",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_e0ipso_kenkeep_ai_kenkeep_nodes_index_md_fb51ad85/readme"
}