{"id":23927,"library":"keep-skill","title":"keep-skill","description":"Reflective memory library for storing and searching documents by meaning using vector embeddings and tag-based metadata. Current version 0.143.3, requires Python >=3.11, <3.14. Active development with frequent releases (multiple per month).","status":"active","version":"0.143.3","language":"python","source_language":"en","source_url":"https://github.com/keepnotes-ai/keep","tags":["memory","vector-search","embeddings","semantic-search","rag","knowledge-graph"],"install":[{"cmd":"pip install keep-skill","lang":"bash","label":"Default install"}],"dependencies":[],"imports":[{"note":"Keep is the main client class; import keep alone gives module, not class.","wrong":"import keep","symbol":"Keep","correct":"from keep import Keep"},{"note":"","wrong":"","symbol":"Document","correct":"from keep import Document"},{"note":"DaemonClient is in the daemon submodule, not top-level.","wrong":"from keep import DaemonClient","symbol":"DaemonClient","correct":"from keep.daemon import DaemonClient"}],"quickstart":{"code":"import os\nfrom keep import Keep, Document\n\nclient = Keep(daemon_url=os.environ.get('KEEP_DAEMON_URL', 'http://localhost:8000'))\n\ndoc = Document(content=\"Recursive summarization improves LLM reasoning.\", tags={\"topic\": \"prompt-engineering\"})\nuid = client.add(doc)\nprint(f\"Added document {uid}\")\n\n# Search by meaning\nresults = client.search(\"LLM reasoning techniques\")\nfor r in results:\n    print(r.content, r.score)","lang":"python","description":"Create a Keep client, add a document with tags, and search by semantic similarity."},"warnings":[{"fix":"Replace accesses to tags['type'] with tags.get('kind', tags.get('type')).","message":"In v0.140.0 the 'type' tag was repurposed for entity-type classification. Old 'type' values (learning, breakdown, etc.) are migrated to new 'kind' tag automatically. If your code relies on reading the 'type' tag, update to use 'kind' instead.","severity":"breaking","affected_versions":">=0.140.0"},{"fix":"Start the daemon in a separate terminal: keep daemon","message":"The daemon must be running separately (e.g., 'keep daemon') before using the client. The client does not start the daemon automatically.","severity":"gotcha","affected_versions":"all"},{"fix":"Upgrade to version 0.143.2 or later: pip install --upgrade keep-skill","message":"SQLite SELECTs used to be blocked by write locks until v0.143.2. If you see performance issues on concurrent reads with writes, upgrade to >=0.143.2.","severity":"gotcha","affected_versions":"<0.143.2"},{"fix":"Use httpx settings or rely on the default Keep client configuration.","message":"The 'requests' HTTP library was replaced by 'httpx' in v0.142.0. Custom HTTP configs using requests internals will break.","severity":"deprecated","affected_versions":">=0.142.0"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Run 'pip install keep-skill' and use 'from keep import Keep'.","cause":"Keep package not installed or installed under a different name (keep-skill).","error":"ModuleNotFoundError: No module named 'keep'"},{"fix":"Start the daemon with 'keep daemon' in a terminal before running client code.","cause":"The keep daemon is not running.","error":"ConnectionError: Could not connect to daemon at http://localhost:8000"},{"fix":"Use 'from keep import Keep' or 'import keep; client = keep.Keep()' (but the former is preferred).","cause":"Using 'import keep' instead of 'from keep import Keep'.","error":"AttributeError: module 'keep' has no attribute 'Keep'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}