keep-skill 0.2.0__py3-none-any.whl → 0.4.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- keep/__init__.py +1 -1
- keep/api.py +325 -11
- keep/cli.py +453 -83
- keep/config.py +2 -2
- keep/document_store.py +351 -12
- keep/pending_summaries.py +6 -0
- keep/providers/embedding_cache.py +6 -0
- keep/store.py +128 -11
- keep_skill-0.4.1.dist-info/METADATA +219 -0
- {keep_skill-0.2.0.dist-info → keep_skill-0.4.1.dist-info}/RECORD +13 -13
- keep_skill-0.2.0.dist-info/METADATA +0 -304
- {keep_skill-0.2.0.dist-info → keep_skill-0.4.1.dist-info}/WHEEL +0 -0
- {keep_skill-0.2.0.dist-info → keep_skill-0.4.1.dist-info}/entry_points.txt +0 -0
- {keep_skill-0.2.0.dist-info → keep_skill-0.4.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: keep-skill
|
|
3
|
+
Version: 0.4.1
|
|
4
|
+
Summary: Semantic memory - remember and search documents by meaning
|
|
5
|
+
Project-URL: Homepage, https://github.com/hughpyle/keep
|
|
6
|
+
Project-URL: Repository, https://github.com/hughpyle/keep
|
|
7
|
+
Author: Hugh Pyle
|
|
8
|
+
License: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Keywords: agents,chromadb,embeddings,semantic-memory,vector-search
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
19
|
+
Classifier: Topic :: Text Processing
|
|
20
|
+
Requires-Python: <3.14,>=3.11
|
|
21
|
+
Requires-Dist: chromadb>=0.4
|
|
22
|
+
Requires-Dist: tomli-w>=1.0
|
|
23
|
+
Requires-Dist: typer>=0.9
|
|
24
|
+
Provides-Extra: anthropic
|
|
25
|
+
Requires-Dist: anthropic>=0.40.0; extra == 'anthropic'
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: pytest-cov>=4.0; extra == 'dev'
|
|
28
|
+
Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
29
|
+
Provides-Extra: documents
|
|
30
|
+
Requires-Dist: beautifulsoup4>=4.9; extra == 'documents'
|
|
31
|
+
Requires-Dist: pypdf>=5.0; extra == 'documents'
|
|
32
|
+
Provides-Extra: gemini
|
|
33
|
+
Requires-Dist: google-genai>=1.0.0; extra == 'gemini'
|
|
34
|
+
Provides-Extra: local
|
|
35
|
+
Requires-Dist: beautifulsoup4>=4.9; extra == 'local'
|
|
36
|
+
Requires-Dist: mlx-lm>=0.10; (platform_system == 'Darwin' and platform_machine == 'arm64') and extra == 'local'
|
|
37
|
+
Requires-Dist: mlx>=0.10; (platform_system == 'Darwin' and platform_machine == 'arm64') and extra == 'local'
|
|
38
|
+
Requires-Dist: pypdf>=5.0; extra == 'local'
|
|
39
|
+
Requires-Dist: sentence-transformers>=2.2; extra == 'local'
|
|
40
|
+
Provides-Extra: mlx
|
|
41
|
+
Requires-Dist: mlx-lm>=0.10; extra == 'mlx'
|
|
42
|
+
Requires-Dist: mlx>=0.10; extra == 'mlx'
|
|
43
|
+
Provides-Extra: openai
|
|
44
|
+
Requires-Dist: openai>=1.0; extra == 'openai'
|
|
45
|
+
Provides-Extra: openclaw
|
|
46
|
+
Requires-Dist: anthropic>=0.18.0; extra == 'openclaw'
|
|
47
|
+
Requires-Dist: google-genai>=1.0.0; extra == 'openclaw'
|
|
48
|
+
Provides-Extra: sentence-transformers
|
|
49
|
+
Requires-Dist: sentence-transformers>=2.2; extra == 'sentence-transformers'
|
|
50
|
+
Description-Content-Type: text/markdown
|
|
51
|
+
|
|
52
|
+
# keep
|
|
53
|
+
|
|
54
|
+
**Semantic memory with version history.**
|
|
55
|
+
|
|
56
|
+
Index documents and notes. Search by meaning. Track changes over time.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
pip install 'keep-skill[local]'
|
|
60
|
+
keep init
|
|
61
|
+
|
|
62
|
+
# Index content
|
|
63
|
+
keep update path/to/document.md -t project=myapp
|
|
64
|
+
keep update "Rate limit is 100 req/min" -t topic=api
|
|
65
|
+
|
|
66
|
+
# Search by meaning
|
|
67
|
+
keep find "what's the rate limit?"
|
|
68
|
+
|
|
69
|
+
# Track what you're working on
|
|
70
|
+
keep now "Debugging auth flow"
|
|
71
|
+
keep now -V 1 # Previous context
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## What It Does
|
|
77
|
+
|
|
78
|
+
- **Semantic search** — Find by meaning, not just keywords
|
|
79
|
+
- **Version history** — All documents retain history on update
|
|
80
|
+
- **Tag organization** — Filter and navigate with key=value tags
|
|
81
|
+
- **Recency decay** — Recent items rank higher in search
|
|
82
|
+
- **Works offline** — Local embedding models by default
|
|
83
|
+
|
|
84
|
+
Backed by ChromaDB for vectors, SQLite for metadata and versions.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Installation
|
|
89
|
+
|
|
90
|
+
**Python 3.11–3.13 required.**
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Recommended: local models (works offline)
|
|
94
|
+
pip install 'keep-skill[local]'
|
|
95
|
+
|
|
96
|
+
# Or with uv (faster):
|
|
97
|
+
uv tool install 'keep-skill[local]'
|
|
98
|
+
|
|
99
|
+
# API-based alternative (requires OPENAI_API_KEY)
|
|
100
|
+
pip install 'keep-skill[openai]'
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
First run downloads embedding models (~3-5 minutes).
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Quick Start
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
keep init # Creates .keep/ at repo root
|
|
111
|
+
|
|
112
|
+
# Index files and notes
|
|
113
|
+
keep update file:///path/to/doc.md -t project=myapp
|
|
114
|
+
keep update "Important insight" -t type=note
|
|
115
|
+
|
|
116
|
+
# Search
|
|
117
|
+
keep find "authentication flow" --limit 5
|
|
118
|
+
keep find "auth" --since P7D # Last 7 days
|
|
119
|
+
|
|
120
|
+
# Retrieve
|
|
121
|
+
keep get file:///path/to/doc.md
|
|
122
|
+
keep get ID -V 1 # Previous version
|
|
123
|
+
keep get "ID@V{1}" # Same as -V 1 (version identifier)
|
|
124
|
+
keep get ID --history # All versions
|
|
125
|
+
|
|
126
|
+
# Tags
|
|
127
|
+
keep tag project=myapp # Find by tag
|
|
128
|
+
keep tag --list # List all tags
|
|
129
|
+
|
|
130
|
+
# Current context
|
|
131
|
+
keep now # Show what you're working on
|
|
132
|
+
keep now "Fixing login bug" # Update context
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Python API
|
|
136
|
+
|
|
137
|
+
```python
|
|
138
|
+
from keep import Keeper
|
|
139
|
+
|
|
140
|
+
kp = Keeper()
|
|
141
|
+
|
|
142
|
+
# Index
|
|
143
|
+
kp.update("file:///path/to/doc.md", tags={"project": "myapp"})
|
|
144
|
+
kp.remember("Rate limit is 100 req/min", tags={"topic": "api"})
|
|
145
|
+
|
|
146
|
+
# Search
|
|
147
|
+
results = kp.find("rate limit", limit=5)
|
|
148
|
+
for r in results:
|
|
149
|
+
print(f"[{r.score:.2f}] {r.summary}")
|
|
150
|
+
|
|
151
|
+
# Version history
|
|
152
|
+
prev = kp.get_version("doc:1", offset=1)
|
|
153
|
+
versions = kp.list_versions("doc:1")
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
See [docs/QUICKSTART.md](docs/QUICKSTART.md) for configuration and more examples.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Documentation
|
|
161
|
+
|
|
162
|
+
- **[docs/QUICKSTART.md](docs/QUICKSTART.md)** — Setup, configuration, lazy summarization
|
|
163
|
+
- **[docs/REFERENCE.md](docs/REFERENCE.md)** — Complete CLI and API reference
|
|
164
|
+
- **[docs/AGENT-GUIDE.md](docs/AGENT-GUIDE.md)** — Working session patterns
|
|
165
|
+
- **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)** — How it works under the hood
|
|
166
|
+
- **[SKILL.md](SKILL.md)** — The reflective practice (for AI agents)
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## For AI Agents
|
|
171
|
+
|
|
172
|
+
This library was designed as an agent skill — persistent memory that helps agents reflect before acting and learn from experience.
|
|
173
|
+
|
|
174
|
+
**The practice:**
|
|
175
|
+
- Pause before acting — `keep find` what you already know
|
|
176
|
+
- Notice breakdowns — when assumptions surface, index them
|
|
177
|
+
- Reflect after — `keep update` learnings for future sessions
|
|
178
|
+
|
|
179
|
+
See **[SKILL.md](SKILL.md)** for the full practice guide.
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Status
|
|
184
|
+
|
|
185
|
+
**Current:** v0.3.0
|
|
186
|
+
|
|
187
|
+
**Working:**
|
|
188
|
+
- ✅ Semantic search with embeddings
|
|
189
|
+
- ✅ Document versioning (all updates retain history)
|
|
190
|
+
- ✅ Content-addressed IDs for text (same content = same ID)
|
|
191
|
+
- ✅ Tag queries and full-text search
|
|
192
|
+
- ✅ Current context tracking (`keep now`)
|
|
193
|
+
- ✅ Recency decay (recent items rank higher)
|
|
194
|
+
- ✅ Lazy summarization (background processing)
|
|
195
|
+
- ✅ Provider abstraction (local or API-based)
|
|
196
|
+
|
|
197
|
+
**Planned** (see [later/](later/)):
|
|
198
|
+
- ⏳ Private/shared routing
|
|
199
|
+
- ⏳ Relationship graphs between items
|
|
200
|
+
- ⏳ LLM-based auto-tagging
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## License
|
|
205
|
+
|
|
206
|
+
MIT
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Contributing
|
|
211
|
+
|
|
212
|
+
Published on [PyPI as `keep-skill`](https://pypi.org/project/keep-skill/).
|
|
213
|
+
|
|
214
|
+
Issues and PRs welcome:
|
|
215
|
+
- Provider implementations
|
|
216
|
+
- Performance improvements
|
|
217
|
+
- Documentation clarity
|
|
218
|
+
|
|
219
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
keep/__init__.py,sha256=
|
|
1
|
+
keep/__init__.py,sha256=1WVkySoomQuf9-o3pIKs1CC2OwIyfkiaCxn-mO6nhd8,1581
|
|
2
2
|
keep/__main__.py,sha256=3Uu70IhIDIjh8OW6jp9jQQ3dF2lKdJWi_3FtRIQMiMY,104
|
|
3
|
-
keep/api.py,sha256=
|
|
3
|
+
keep/api.py,sha256=EaPkI9Gv1r5LM8ZibqquGP_59xf4kQlCdv7nfct8QZw,58894
|
|
4
4
|
keep/chunking.py,sha256=neAXOLSvVwbUxapbqq7nZrbSNSzMXuhxj-ODoOSodsU,11830
|
|
5
|
-
keep/cli.py,sha256=
|
|
6
|
-
keep/config.py,sha256=
|
|
5
|
+
keep/cli.py,sha256=3flcfZHjvnHY8TxT-HJBBAuKnDusPAUD3ZwuMYYU7sw,40470
|
|
6
|
+
keep/config.py,sha256=RRnHHvhc9KkJBYt0rpAFIvAVXw40b56xtT74TFIBiDU,15832
|
|
7
7
|
keep/context.py,sha256=CNpjmrv6eW2kV1E0MO6qAQfhYKRlfzAL--6v4Mj1nFY,71
|
|
8
|
-
keep/document_store.py,sha256=
|
|
8
|
+
keep/document_store.py,sha256=UswqKIGSc5E-r7Tg9k0g5-byYnuar3e9FieQ7WNod9k,29109
|
|
9
9
|
keep/errors.py,sha256=G9e5FbdfeugyfHOuL_SPZlM5jgWWnwsX4hM7IzanBZc,857
|
|
10
10
|
keep/indexing.py,sha256=dpPYo3WXnIhFDWinz5ZBZVk7_qumeNpP4EpOIY0zMbs,6063
|
|
11
11
|
keep/logging_config.py,sha256=IGwkgIyg-TfYaT4MnoCXfmjeHAe_wsB_XQ1QhVT_ro8,3503
|
|
12
12
|
keep/paths.py,sha256=Dv7pM6oo2QgjL6sj5wPjhuMOK2wqUkfd4Kz08TwJ1ps,3331
|
|
13
|
-
keep/pending_summaries.py,sha256=
|
|
14
|
-
keep/store.py,sha256=
|
|
13
|
+
keep/pending_summaries.py,sha256=_irGe7P1Lmog2c5cEgx-BElpq4YJW-tEmF5A3IUZQbQ,5727
|
|
14
|
+
keep/store.py,sha256=d_exdEBQM7agpJcXL-nGsl46zXPQ2t35C8QF-NQX_Bw,18097
|
|
15
15
|
keep/types.py,sha256=f6uOSYsYt6mj1ulKn2iRkooi__dWCiOQFPD6he2eID4,2149
|
|
16
16
|
keep/providers/__init__.py,sha256=GFX_12g9OdjmpFUkTekOQBOWvcRW2Ae6yidfVVW2SiI,1095
|
|
17
17
|
keep/providers/base.py,sha256=7Ug4Kj9fK2Dq4zDcZjn-GKsoZBOAlB9b-FMk969ER-g,14590
|
|
18
18
|
keep/providers/documents.py,sha256=EXeSy5i3RUL0kciIC6w3ldAEfbTIyC5fgfzC_WAI0iY,8211
|
|
19
|
-
keep/providers/embedding_cache.py,sha256=
|
|
19
|
+
keep/providers/embedding_cache.py,sha256=gna6PZEJanbn2GUN0vj1b1MC0xVWePM9cot2KgZUdu8,8856
|
|
20
20
|
keep/providers/embeddings.py,sha256=zi8GyitKexdbCJyU1nLrUhGt_zzPn3udYrrPZ5Ak8Wo,9081
|
|
21
21
|
keep/providers/llm.py,sha256=BxROKOklKbkGsHcSADPNNgWQExgSN6Bg4KPQIxVuB3U,12441
|
|
22
22
|
keep/providers/mlx.py,sha256=aNl00r9tGi5tCGj2ArYH7CmDHtL1jLjVzb1rofU1DAo,9050
|
|
23
23
|
keep/providers/summarization.py,sha256=MlVTcYipaqp2lT-QYnznp0AMuPVG36QfcTQnvY7Gb-Q,3409
|
|
24
|
-
keep_skill-0.
|
|
25
|
-
keep_skill-0.
|
|
26
|
-
keep_skill-0.
|
|
27
|
-
keep_skill-0.
|
|
28
|
-
keep_skill-0.
|
|
24
|
+
keep_skill-0.4.1.dist-info/METADATA,sha256=sasoFYgfL9FK4nuIK99pruVoiUH65I-SN30giqc2wHs,6387
|
|
25
|
+
keep_skill-0.4.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
26
|
+
keep_skill-0.4.1.dist-info/entry_points.txt,sha256=W8yiI4kNeW0IC8ji4EHRWrvdhFxzaqTIePUhJAJAMOo,39
|
|
27
|
+
keep_skill-0.4.1.dist-info/licenses/LICENSE,sha256=zsm0tpvtyUkevcjn5BIvs9jAho8iwxq3Ax9647AaOSg,1086
|
|
28
|
+
keep_skill-0.4.1.dist-info/RECORD,,
|
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: keep-skill
|
|
3
|
-
Version: 0.2.0
|
|
4
|
-
Summary: Semantic memory - remember and search documents by meaning
|
|
5
|
-
Project-URL: Homepage, https://github.com/hughpyle/keep
|
|
6
|
-
Project-URL: Repository, https://github.com/hughpyle/keep
|
|
7
|
-
Author: Hugh Pyle
|
|
8
|
-
License: MIT
|
|
9
|
-
License-File: LICENSE
|
|
10
|
-
Keywords: agents,chromadb,embeddings,semantic-memory,vector-search
|
|
11
|
-
Classifier: Development Status :: 3 - Alpha
|
|
12
|
-
Classifier: Intended Audience :: Developers
|
|
13
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
-
Classifier: Programming Language :: Python :: 3
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
-
Classifier: Topic :: Software Development :: Libraries
|
|
19
|
-
Classifier: Topic :: Text Processing
|
|
20
|
-
Requires-Python: <3.14,>=3.11
|
|
21
|
-
Requires-Dist: chromadb>=0.4
|
|
22
|
-
Requires-Dist: tomli-w>=1.0
|
|
23
|
-
Requires-Dist: typer>=0.9
|
|
24
|
-
Provides-Extra: anthropic
|
|
25
|
-
Requires-Dist: anthropic>=0.40.0; extra == 'anthropic'
|
|
26
|
-
Provides-Extra: dev
|
|
27
|
-
Requires-Dist: pytest-cov>=4.0; extra == 'dev'
|
|
28
|
-
Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
29
|
-
Provides-Extra: documents
|
|
30
|
-
Requires-Dist: beautifulsoup4>=4.9; extra == 'documents'
|
|
31
|
-
Requires-Dist: pypdf>=5.0; extra == 'documents'
|
|
32
|
-
Provides-Extra: gemini
|
|
33
|
-
Requires-Dist: google-genai>=1.0.0; extra == 'gemini'
|
|
34
|
-
Provides-Extra: local
|
|
35
|
-
Requires-Dist: beautifulsoup4>=4.9; extra == 'local'
|
|
36
|
-
Requires-Dist: mlx-lm>=0.10; (platform_system == 'Darwin' and platform_machine == 'arm64') and extra == 'local'
|
|
37
|
-
Requires-Dist: mlx>=0.10; (platform_system == 'Darwin' and platform_machine == 'arm64') and extra == 'local'
|
|
38
|
-
Requires-Dist: pypdf>=5.0; extra == 'local'
|
|
39
|
-
Requires-Dist: sentence-transformers>=2.2; extra == 'local'
|
|
40
|
-
Provides-Extra: mlx
|
|
41
|
-
Requires-Dist: mlx-lm>=0.10; extra == 'mlx'
|
|
42
|
-
Requires-Dist: mlx>=0.10; extra == 'mlx'
|
|
43
|
-
Provides-Extra: openai
|
|
44
|
-
Requires-Dist: openai>=1.0; extra == 'openai'
|
|
45
|
-
Provides-Extra: openclaw
|
|
46
|
-
Requires-Dist: anthropic>=0.18.0; extra == 'openclaw'
|
|
47
|
-
Requires-Dist: google-genai>=1.0.0; extra == 'openclaw'
|
|
48
|
-
Provides-Extra: sentence-transformers
|
|
49
|
-
Requires-Dist: sentence-transformers>=2.2; extra == 'sentence-transformers'
|
|
50
|
-
Description-Content-Type: text/markdown
|
|
51
|
-
|
|
52
|
-
# keep
|
|
53
|
-
|
|
54
|
-
**Associative memory for reflection and skillful action.**
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## What is this?
|
|
59
|
-
|
|
60
|
-
An agent skill. A practice tool for agents who want to develop judgment.
|
|
61
|
-
|
|
62
|
-
An agent who rushes to act without checking memory will repeat mistakes, miss context, and fail to grow. An agent who reflects — before, during, after — becomes skillful. This library provides the mirror: persistent semantic memory that lets you ask "what do I already know?" before acting, and "what did I learn?" after.
|
|
63
|
-
|
|
64
|
-
For the full practice guide, see **[SKILL.md](SKILL.md)**.
|
|
65
|
-
|
|
66
|
-
Technically: semantic search using embeddings, backed by ChromaDB, with tag-based organization and recency decay. Available as CLI and Python API.
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
# Before acting: what do I already know?
|
|
70
|
-
keep find "how should we handle auth?"
|
|
71
|
-
|
|
72
|
-
# After learning: capture it for future you
|
|
73
|
-
keep update "User prefers OAuth2 with PKCE for authentication"
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
**The practice:**
|
|
77
|
-
- Pause before acting — check what you already know
|
|
78
|
-
- Notice breakdowns — when assumptions surface, that's valuable
|
|
79
|
-
- Reflect after — capture learnings so future you can find them
|
|
80
|
-
|
|
81
|
-
**The technology:**
|
|
82
|
-
- Semantic search (by meaning, not keywords)
|
|
83
|
-
- Persistent across sessions (ChromaDB)
|
|
84
|
-
- Tag-based organization and filtering
|
|
85
|
-
- Recency decay (recent items rank higher)
|
|
86
|
-
- Provider abstraction (local models or APIs)
|
|
87
|
-
- CLI and Python API
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
## Quick Start
|
|
92
|
-
|
|
93
|
-
### Requirements
|
|
94
|
-
|
|
95
|
-
- **Python:** 3.11, 3.12, or 3.13 (3.14+ not yet supported due to dependency constraints)
|
|
96
|
-
- **Installation time:** 3-5 minutes (ChromaDB dependency resolution + embedding model downloads)
|
|
97
|
-
|
|
98
|
-
### Installation
|
|
99
|
-
|
|
100
|
-
#### For users (just want the `keep` command)
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
# With pip:
|
|
104
|
-
pip install 'keep-skill[local]'
|
|
105
|
-
|
|
106
|
-
# Or with uv (faster, auto-manages isolated environment):
|
|
107
|
-
# Install uv first: https://docs.astral.sh/uv/getting-started/installation/
|
|
108
|
-
uv tool install 'keep-skill[local]'
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
#### For developers (working on keep itself)
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
git clone https://github.com/hughpyle/keep
|
|
115
|
-
cd keep
|
|
116
|
-
|
|
117
|
-
# Create and activate a virtual environment
|
|
118
|
-
python -m venv .venv
|
|
119
|
-
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
|
120
|
-
|
|
121
|
-
# Install in editable mode with local models
|
|
122
|
-
pip install -e '.[local,dev]'
|
|
123
|
-
|
|
124
|
-
# Or with uv (faster):
|
|
125
|
-
uv pip install -e '.[local,dev]'
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
#### Optional extras
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
# OpenClaw integration (uses your configured models):
|
|
132
|
-
pip install 'keep-skill[openclaw]'
|
|
133
|
-
|
|
134
|
-
# Minimal install (configure providers manually):
|
|
135
|
-
pip install keep-skill
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
**After installation:**
|
|
139
|
-
|
|
140
|
-
```bash
|
|
141
|
-
keep init
|
|
142
|
-
# ⚠️ Remember to add .keep/ to .gitignore
|
|
143
|
-
|
|
144
|
-
# Index a file
|
|
145
|
-
keep update path/to/document.md --tag project=myapp
|
|
146
|
-
|
|
147
|
-
# Store inline content
|
|
148
|
-
keep update "Important: rate limit is 100 req/min" --tag topic=api
|
|
149
|
-
|
|
150
|
-
# Semantic search
|
|
151
|
-
keep find "what's the rate limit?"
|
|
152
|
-
|
|
153
|
-
# Tag lookup
|
|
154
|
-
keep tag topic=api
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
### Python API
|
|
158
|
-
|
|
159
|
-
```python
|
|
160
|
-
from keep import Keeper
|
|
161
|
-
|
|
162
|
-
kp = Keeper()
|
|
163
|
-
|
|
164
|
-
# Index a file
|
|
165
|
-
kp.update("file:///path/to/document.md", tags={"project": "myapp"})
|
|
166
|
-
|
|
167
|
-
# Store inline content (API method)
|
|
168
|
-
kp.remember("Important: rate limit is 100 req/min", tags={"topic": "api"})
|
|
169
|
-
|
|
170
|
-
# Semantic search
|
|
171
|
-
results = kp.find("what's the rate limit?", limit=5)
|
|
172
|
-
for r in results:
|
|
173
|
-
print(f"[{r.score:.2f}] {r.summary}")
|
|
174
|
-
|
|
175
|
-
# Tag lookup
|
|
176
|
-
api_docs = kp.query_tag("topic", "api")
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
See [docs/QUICKSTART.md](docs/QUICKSTART.md) for more examples.
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## OpenClaw Integration
|
|
184
|
-
|
|
185
|
-
If you have [OpenClaw](https://openclaw.dev) configured, keep automatically uses your configured models:
|
|
186
|
-
|
|
187
|
-
```bash
|
|
188
|
-
# Install with OpenClaw support
|
|
189
|
-
pip install 'keep-skill[openclaw]'
|
|
190
|
-
|
|
191
|
-
# Set your Anthropic API key (if using Claude models)
|
|
192
|
-
export ANTHROPIC_API_KEY=sk-ant-...
|
|
193
|
-
|
|
194
|
-
# Initialize (auto-detects ~/.openclaw/openclaw.json)
|
|
195
|
-
keep init
|
|
196
|
-
# ✓ Detected providers:
|
|
197
|
-
# Embedding: sentence-transformers (local)
|
|
198
|
-
# Summarization: anthropic (claude-sonnet-4)
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
**Benefits:**
|
|
202
|
-
- 🔄 Unified model configuration (DRY principle)
|
|
203
|
-
- 🧠 Best of both: local embeddings + smart summarization
|
|
204
|
-
- 🔒 Privacy-preserving (embeddings stay local)
|
|
205
|
-
- 💰 Cost-effective (~$0.0001/document)
|
|
206
|
-
|
|
207
|
-
See [docs/OPENCLAW-INTEGRATION.md](docs/OPENCLAW-INTEGRATION.md) for details.
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
## Documentation
|
|
212
|
-
|
|
213
|
-
- **[SKILL.md](SKILL.md)** — The practice guide (start here for how to use memory skillfully)
|
|
214
|
-
- **[docs/QUICKSTART.md](docs/QUICKSTART.md)** — Installation, setup, configuration
|
|
215
|
-
- **[docs/AGENT-GUIDE.md](docs/AGENT-GUIDE.md)** — Detailed agent patterns, Python API
|
|
216
|
-
- **[docs/REFERENCE.md](docs/REFERENCE.md)** — Complete API reference
|
|
217
|
-
- **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)** — How it works under the hood
|
|
218
|
-
- **[docs/OPENCLAW-INTEGRATION.md](docs/OPENCLAW-INTEGRATION.md)** — OpenClaw integration guide
|
|
219
|
-
- **[docs/system/](docs/system/)** — Domain and conversation patterns
|
|
220
|
-
|
|
221
|
-
---
|
|
222
|
-
|
|
223
|
-
## Philosophy
|
|
224
|
-
|
|
225
|
-
### Practice
|
|
226
|
-
|
|
227
|
-
Memory isn't storage — it's a mirror for reflection.
|
|
228
|
-
|
|
229
|
-
The triple check: before acting (what do I know?), during (notice breakdowns), after (capture learning). Breakdowns are valuable — they reveal assumptions. Index them, don't hide them.
|
|
230
|
-
|
|
231
|
-
An agent without memory reacts to each moment as if it were new. An agent with memory reflects, learns, and grows. See **[SKILL.md](SKILL.md)** for the full practice guide.
|
|
232
|
-
|
|
233
|
-
### Technical Design
|
|
234
|
-
|
|
235
|
-
**Schema as Data** — Configuration stored as queryable documents, not hardcoded.
|
|
236
|
-
|
|
237
|
-
**Semantic by Default** — Search by meaning via vector similarity, not keywords.
|
|
238
|
-
|
|
239
|
-
**Lazy Loading** — Dependencies loaded only when needed; missing providers give helpful errors.
|
|
240
|
-
|
|
241
|
-
**Provider Agnostic** — Pluggable backends for embeddings, summarization, and storage.
|
|
242
|
-
|
|
243
|
-
**No Original Content** — Only summaries and embeddings stored. URIs can be re-fetched if needed.
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
## Status
|
|
248
|
-
|
|
249
|
-
**Current**: v0.1.0 — Early draft
|
|
250
|
-
|
|
251
|
-
**Working:**
|
|
252
|
-
- ✅ Core indexing (`update` with URI, text, or stdin modes)
|
|
253
|
-
- ✅ Semantic search (`find`, `find_similar`)
|
|
254
|
-
- ✅ Tag queries and full-text search
|
|
255
|
-
- ✅ Embedding cache for performance
|
|
256
|
-
- ✅ Recency decay (ACT-R style)
|
|
257
|
-
- ✅ CLI interface
|
|
258
|
-
- ✅ Provider abstraction with lazy loading
|
|
259
|
-
|
|
260
|
-
**Planned** (see [later/](later/)):
|
|
261
|
-
- ⏳ Context management (working context, top-of-mind retrieval)
|
|
262
|
-
- ⏳ Private/shared routing
|
|
263
|
-
- ⏳ Relationship graphs between items
|
|
264
|
-
- ⏳ LLM-based tagging
|
|
265
|
-
|
|
266
|
-
---
|
|
267
|
-
|
|
268
|
-
## Requirements
|
|
269
|
-
|
|
270
|
-
- Python 3.11+
|
|
271
|
-
- ChromaDB (vector store)
|
|
272
|
-
- One embedding provider:
|
|
273
|
-
- sentence-transformers (local, default)
|
|
274
|
-
- MLX (Apple Silicon, local)
|
|
275
|
-
- OpenAI (API, requires key)
|
|
276
|
-
|
|
277
|
-
---
|
|
278
|
-
|
|
279
|
-
## License
|
|
280
|
-
|
|
281
|
-
MIT
|
|
282
|
-
|
|
283
|
-
---
|
|
284
|
-
|
|
285
|
-
## Contributing
|
|
286
|
-
|
|
287
|
-
This project is published on [PyPI as `keep-skill`](https://pypi.org/project/keep-skill/).
|
|
288
|
-
|
|
289
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on versioning and backward compatibility.
|
|
290
|
-
|
|
291
|
-
Issues and PRs welcome, especially for:
|
|
292
|
-
- Additional provider implementations
|
|
293
|
-
- Performance improvements
|
|
294
|
-
- Documentation clarity
|
|
295
|
-
- OpenClaw integration patterns
|
|
296
|
-
|
|
297
|
-
---
|
|
298
|
-
|
|
299
|
-
## Related Projects
|
|
300
|
-
|
|
301
|
-
- [ChromaDB](https://github.com/chroma-core/chroma) — Vector database backend
|
|
302
|
-
- [sentence-transformers](https://github.com/UKPLab/sentence-transformers) — Embedding models
|
|
303
|
-
- [MLX](https://github.com/ml-explore/mlx) — Apple Silicon ML framework
|
|
304
|
-
- [OpenClaw](https://openclaw.dev) — Agent framework (integration target)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|