keep-skill 0.2.0__tar.gz → 0.3.0__tar.gz

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.
Files changed (34) hide show
  1. {keep_skill-0.2.0 → keep_skill-0.3.0}/.gitignore +2 -0
  2. keep_skill-0.3.0/PKG-INFO +218 -0
  3. keep_skill-0.3.0/README.md +167 -0
  4. {keep_skill-0.2.0 → keep_skill-0.3.0}/SKILL.md +45 -12
  5. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/__init__.py +1 -1
  6. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/api.py +265 -10
  7. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/cli.py +254 -19
  8. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/config.py +2 -2
  9. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/document_store.py +351 -12
  10. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/pending_summaries.py +6 -0
  11. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/providers/embedding_cache.py +6 -0
  12. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/store.py +111 -11
  13. {keep_skill-0.2.0 → keep_skill-0.3.0}/pyproject.toml +1 -1
  14. keep_skill-0.2.0/PKG-INFO +0 -304
  15. keep_skill-0.2.0/README.md +0 -253
  16. {keep_skill-0.2.0 → keep_skill-0.3.0}/LICENSE +0 -0
  17. {keep_skill-0.2.0 → keep_skill-0.3.0}/docs/system/conversations.md +0 -0
  18. {keep_skill-0.2.0 → keep_skill-0.3.0}/docs/system/domains.md +0 -0
  19. {keep_skill-0.2.0 → keep_skill-0.3.0}/docs/system/now.md +0 -0
  20. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/__main__.py +0 -0
  21. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/chunking.py +0 -0
  22. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/context.py +0 -0
  23. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/errors.py +0 -0
  24. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/indexing.py +0 -0
  25. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/logging_config.py +0 -0
  26. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/paths.py +0 -0
  27. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/providers/__init__.py +0 -0
  28. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/providers/base.py +0 -0
  29. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/providers/documents.py +0 -0
  30. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/providers/embeddings.py +0 -0
  31. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/providers/llm.py +0 -0
  32. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/providers/mlx.py +0 -0
  33. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/providers/summarization.py +0 -0
  34. {keep_skill-0.2.0 → keep_skill-0.3.0}/keep/types.py +0 -0
@@ -61,3 +61,5 @@ coverage.xml
61
61
  .keep/
62
62
  test_extraction_store/
63
63
  .DS_Store
64
+ .claude/
65
+ .agents/
@@ -0,0 +1,218 @@
1
+ Metadata-Version: 2.4
2
+ Name: keep-skill
3
+ Version: 0.3.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
+ **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 --history # All versions
124
+
125
+ # Tags
126
+ keep tag project=myapp # Find by tag
127
+ keep tag --list # List all tags
128
+
129
+ # Current context
130
+ keep now # Show what you're working on
131
+ keep now "Fixing login bug" # Update context
132
+ ```
133
+
134
+ ### Python API
135
+
136
+ ```python
137
+ from keep import Keeper
138
+
139
+ kp = Keeper()
140
+
141
+ # Index
142
+ kp.update("file:///path/to/doc.md", tags={"project": "myapp"})
143
+ kp.remember("Rate limit is 100 req/min", tags={"topic": "api"})
144
+
145
+ # Search
146
+ results = kp.find("rate limit", limit=5)
147
+ for r in results:
148
+ print(f"[{r.score:.2f}] {r.summary}")
149
+
150
+ # Version history
151
+ prev = kp.get_version("doc:1", offset=1)
152
+ versions = kp.list_versions("doc:1")
153
+ ```
154
+
155
+ See [docs/QUICKSTART.md](docs/QUICKSTART.md) for configuration and more examples.
156
+
157
+ ---
158
+
159
+ ## Documentation
160
+
161
+ - **[docs/QUICKSTART.md](docs/QUICKSTART.md)** — Setup, configuration, lazy summarization
162
+ - **[docs/REFERENCE.md](docs/REFERENCE.md)** — Complete CLI and API reference
163
+ - **[docs/AGENT-GUIDE.md](docs/AGENT-GUIDE.md)** — Working session patterns
164
+ - **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)** — How it works under the hood
165
+ - **[SKILL.md](SKILL.md)** — The reflective practice (for AI agents)
166
+
167
+ ---
168
+
169
+ ## For AI Agents
170
+
171
+ This library was designed as an agent skill — persistent memory that helps agents reflect before acting and learn from experience.
172
+
173
+ **The practice:**
174
+ - Pause before acting — `keep find` what you already know
175
+ - Notice breakdowns — when assumptions surface, index them
176
+ - Reflect after — `keep update` learnings for future sessions
177
+
178
+ See **[SKILL.md](SKILL.md)** for the full practice guide.
179
+
180
+ ---
181
+
182
+ ## Status
183
+
184
+ **Current:** v0.3.0
185
+
186
+ **Working:**
187
+ - ✅ Semantic search with embeddings
188
+ - ✅ Document versioning (all updates retain history)
189
+ - ✅ Content-addressed IDs for text (same content = same ID)
190
+ - ✅ Tag queries and full-text search
191
+ - ✅ Current context tracking (`keep now`)
192
+ - ✅ Recency decay (recent items rank higher)
193
+ - ✅ Lazy summarization (background processing)
194
+ - ✅ Provider abstraction (local or API-based)
195
+
196
+ **Planned** (see [later/](later/)):
197
+ - ⏳ Private/shared routing
198
+ - ⏳ Relationship graphs between items
199
+ - ⏳ LLM-based auto-tagging
200
+
201
+ ---
202
+
203
+ ## License
204
+
205
+ MIT
206
+
207
+ ---
208
+
209
+ ## Contributing
210
+
211
+ Published on [PyPI as `keep-skill`](https://pypi.org/project/keep-skill/).
212
+
213
+ Issues and PRs welcome:
214
+ - Provider implementations
215
+ - Performance improvements
216
+ - Documentation clarity
217
+
218
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
@@ -0,0 +1,167 @@
1
+ # keep
2
+
3
+ **Semantic memory with version history.**
4
+
5
+ Index documents and notes. Search by meaning. Track changes over time.
6
+
7
+ ```bash
8
+ pip install 'keep-skill[local]'
9
+ keep init
10
+
11
+ # Index content
12
+ keep update path/to/document.md -t project=myapp
13
+ keep update "Rate limit is 100 req/min" -t topic=api
14
+
15
+ # Search by meaning
16
+ keep find "what's the rate limit?"
17
+
18
+ # Track what you're working on
19
+ keep now "Debugging auth flow"
20
+ keep now -V 1 # Previous context
21
+ ```
22
+
23
+ ---
24
+
25
+ ## What It Does
26
+
27
+ - **Semantic search** — Find by meaning, not just keywords
28
+ - **Version history** — All documents retain history on update
29
+ - **Tag organization** — Filter and navigate with key=value tags
30
+ - **Recency decay** — Recent items rank higher in search
31
+ - **Works offline** — Local embedding models by default
32
+
33
+ Backed by ChromaDB for vectors, SQLite for metadata and versions.
34
+
35
+ ---
36
+
37
+ ## Installation
38
+
39
+ **Python 3.11–3.13 required.**
40
+
41
+ ```bash
42
+ # Recommended: local models (works offline)
43
+ pip install 'keep-skill[local]'
44
+
45
+ # Or with uv (faster):
46
+ uv tool install 'keep-skill[local]'
47
+
48
+ # API-based alternative (requires OPENAI_API_KEY)
49
+ pip install 'keep-skill[openai]'
50
+ ```
51
+
52
+ First run downloads embedding models (~3-5 minutes).
53
+
54
+ ---
55
+
56
+ ## Quick Start
57
+
58
+ ```bash
59
+ keep init # Creates .keep/ at repo root
60
+
61
+ # Index files and notes
62
+ keep update file:///path/to/doc.md -t project=myapp
63
+ keep update "Important insight" -t type=note
64
+
65
+ # Search
66
+ keep find "authentication flow" --limit 5
67
+ keep find "auth" --since P7D # Last 7 days
68
+
69
+ # Retrieve
70
+ keep get file:///path/to/doc.md
71
+ keep get ID -V 1 # Previous version
72
+ keep get ID --history # All versions
73
+
74
+ # Tags
75
+ keep tag project=myapp # Find by tag
76
+ keep tag --list # List all tags
77
+
78
+ # Current context
79
+ keep now # Show what you're working on
80
+ keep now "Fixing login bug" # Update context
81
+ ```
82
+
83
+ ### Python API
84
+
85
+ ```python
86
+ from keep import Keeper
87
+
88
+ kp = Keeper()
89
+
90
+ # Index
91
+ kp.update("file:///path/to/doc.md", tags={"project": "myapp"})
92
+ kp.remember("Rate limit is 100 req/min", tags={"topic": "api"})
93
+
94
+ # Search
95
+ results = kp.find("rate limit", limit=5)
96
+ for r in results:
97
+ print(f"[{r.score:.2f}] {r.summary}")
98
+
99
+ # Version history
100
+ prev = kp.get_version("doc:1", offset=1)
101
+ versions = kp.list_versions("doc:1")
102
+ ```
103
+
104
+ See [docs/QUICKSTART.md](docs/QUICKSTART.md) for configuration and more examples.
105
+
106
+ ---
107
+
108
+ ## Documentation
109
+
110
+ - **[docs/QUICKSTART.md](docs/QUICKSTART.md)** — Setup, configuration, lazy summarization
111
+ - **[docs/REFERENCE.md](docs/REFERENCE.md)** — Complete CLI and API reference
112
+ - **[docs/AGENT-GUIDE.md](docs/AGENT-GUIDE.md)** — Working session patterns
113
+ - **[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)** — How it works under the hood
114
+ - **[SKILL.md](SKILL.md)** — The reflective practice (for AI agents)
115
+
116
+ ---
117
+
118
+ ## For AI Agents
119
+
120
+ This library was designed as an agent skill — persistent memory that helps agents reflect before acting and learn from experience.
121
+
122
+ **The practice:**
123
+ - Pause before acting — `keep find` what you already know
124
+ - Notice breakdowns — when assumptions surface, index them
125
+ - Reflect after — `keep update` learnings for future sessions
126
+
127
+ See **[SKILL.md](SKILL.md)** for the full practice guide.
128
+
129
+ ---
130
+
131
+ ## Status
132
+
133
+ **Current:** v0.3.0
134
+
135
+ **Working:**
136
+ - ✅ Semantic search with embeddings
137
+ - ✅ Document versioning (all updates retain history)
138
+ - ✅ Content-addressed IDs for text (same content = same ID)
139
+ - ✅ Tag queries and full-text search
140
+ - ✅ Current context tracking (`keep now`)
141
+ - ✅ Recency decay (recent items rank higher)
142
+ - ✅ Lazy summarization (background processing)
143
+ - ✅ Provider abstraction (local or API-based)
144
+
145
+ **Planned** (see [later/](later/)):
146
+ - ⏳ Private/shared routing
147
+ - ⏳ Relationship graphs between items
148
+ - ⏳ LLM-based auto-tagging
149
+
150
+ ---
151
+
152
+ ## License
153
+
154
+ MIT
155
+
156
+ ---
157
+
158
+ ## Contributing
159
+
160
+ Published on [PyPI as `keep-skill`](https://pypi.org/project/keep-skill/).
161
+
162
+ Issues and PRs welcome:
163
+ - Provider implementations
164
+ - Performance improvements
165
+ - Documentation clarity
166
+
167
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: keep
3
- version: 0.1.0
3
+ version: 0.3.0
4
4
  description: Associative memory for reflection and skillful action
5
5
  homepage: https://github.com/hughpyle/keep
6
6
  runtime: python:3.12-slim
@@ -106,7 +106,7 @@ Then retrieve and read it:
106
106
  keep get "file://$PWD/docs/library/mn61.html"
107
107
  ```
108
108
 
109
- This teaching (MN 61) uses the mirror metaphor: "What is a mirror for?" "For reflection." Actions — bodily, verbal, mental — are to be done with repeated reflection. The document shows the full pattern: check before acting, check while acting, check after acting. If unskillful, confess and adjust. If skillful, stay refreshed and continue training.
109
+ This teaching ([MN 61](docs/library/mn61.html)) uses the mirror metaphor: "What is a mirror for?" "For reflection." Actions — bodily, verbal, mental — are to be done with repeated reflection. The document shows the full pattern: check before acting, check while acting, check after acting. If unskillful, confess and adjust. If skillful, stay refreshed and continue training.
110
110
 
111
111
  ### Breakdowns Are Valuable
112
112
 
@@ -140,7 +140,7 @@ These aren't test fixtures. They're seed wisdom:
140
140
 
141
141
  - **[true_person_no_rank.md](docs/library/true_person_no_rank.md)** — A Zen teaching with layers of commentary. Notice how each commentator re-enacts the pointing from a different angle — not explaining, not accumulating facts, but each responding to what students in that era needed. This is how knowledge in your memory should relate: organic, not hierarchical.
142
142
 
143
- For the full bootstrap list, see [docs/QUICKSTART.md](docs/QUICKSTART.md#bootstrap-your-memory).
143
+ The [docs/library/](docs/library/) directory contains additional seed material.
144
144
 
145
145
  ---
146
146
 
@@ -158,8 +158,29 @@ Update it as your focus changes:
158
158
  keep now "Working on authentication bug in login flow"
159
159
  ```
160
160
 
161
+ Check previous context if needed:
162
+ ```bash
163
+ keep now -V 1 # Previous context
164
+ keep now --history # All versions
165
+ ```
166
+
161
167
  This helps future you (and other agents) pick up where you left off.
162
168
 
169
+ ### Version History
170
+
171
+ All documents retain history on update. Use this to see how understanding evolved:
172
+
173
+ ```bash
174
+ keep get ID -V 1 # Previous version
175
+ keep get ID --history # All versions
176
+ ```
177
+
178
+ Text updates use content-addressed IDs — same content = same ID. This enables versioning through tag changes:
179
+ ```bash
180
+ keep update "auth decision" -t status=draft # Creates ID from content
181
+ keep update "auth decision" -t status=final # Same ID, new version
182
+ ```
183
+
163
184
  ### Summaries Are Your Recall Mechanism
164
185
 
165
186
  Memory stores **summaries**, not full content. This is intentional:
@@ -180,8 +201,8 @@ keep update "Token refresh fails if clock skew > 30s" -t domain=auth -t type=fin
180
201
 
181
202
  Later:
182
203
  ```bash
183
- keep tag domain auth # Everything about auth
184
- keep tag type decision # All decisions made
204
+ keep tag domain=auth # Everything about auth
205
+ keep tag type=decision # All decisions made
185
206
  ```
186
207
 
187
208
  **Suggested tag dimensions:**
@@ -219,13 +240,21 @@ Don't dump everything into context. Navigate the tree:
219
240
  | Command | Purpose | Example |
220
241
  |---------|---------|---------|
221
242
  | `now` | Get/set current context | `keep now` or `keep now "status"` |
222
- | `find` | Semantic search | `keep find "authentication flow" --limit 5` |
243
+ | `now -V N` | Previous context versions | `keep now -V 1` or `keep now --history` |
244
+ | `find` | Semantic similarity search | `keep find "authentication flow" --limit 5` |
245
+ | `find --id` | Find similar to existing item | `keep find --id "docid" --limit 3` |
246
+ | `search` | Full-text search in summaries | `keep search "OAuth"` |
247
+ | `list` | List recent items by update time | `keep list` or `keep list -n 20` |
223
248
  | `update` | Index content (URI, text, or stdin) | `keep update "note" -t key=value` |
224
- | `get` | Retrieve by ID | `keep get "file:///path/to/doc.md"` |
225
- | `find --id` | Find similar items | `keep find --id "docid" --limit 3` |
226
- | `tag` | Query by tag | `keep tag domain auth` or `keep tag --list` |
227
- | `tag-update` | Modify tags only | `keep tag-update "id" --tag key=value` |
228
- | `exists` | Check if indexed | `keep exists "id"` |
249
+ | `get` | Retrieve item by ID | `keep get "file:///path/to/doc.md"` |
250
+ | `get -V N` | Previous versions | `keep get ID -V 1` or `keep get ID --history` |
251
+ | `tag` | List tag values or find by tag | `keep tag domain=auth` or `keep tag --list` |
252
+ | `tag-update` | Modify tags on existing item | `keep tag-update "id" --tag key=value` |
253
+ | `exists` | Check if item is indexed | `keep exists "id"` |
254
+ | `system` | List system documents | `keep system` |
255
+ | `collections` | List all collections | `keep collections` |
256
+ | `init` | Initialize or verify store | `keep init` |
257
+ | `config` | Show configuration and store path | `keep config` |
229
258
  | `process-pending` | Process lazy summaries | `keep process-pending --all` |
230
259
 
231
260
  ### Fast Indexing with `--lazy`
@@ -251,11 +280,14 @@ Default output uses YAML frontmatter format:
251
280
  ```yaml
252
281
  ---
253
282
  id: file:///path/to/doc.md
254
- summary: Document summary here...
255
283
  tags:
256
284
  project: myapp
257
285
  score: 0.823
286
+ prev:
287
+ - 1: 2026-01-15 Previous summary...
288
+ - 2: 2026-01-14 Older summary...
258
289
  ---
290
+ Document summary here...
259
291
  ```
260
292
 
261
293
  Global flags (before the command):
@@ -310,6 +342,7 @@ This is the practice. Not once, but every time.
310
342
  ## See Also
311
343
 
312
344
  - [docs/AGENT-GUIDE.md](docs/AGENT-GUIDE.md) — Detailed patterns for working sessions
345
+ - [docs/REFERENCE.md](docs/REFERENCE.md) — Complete CLI and API reference
313
346
  - [docs/QUICKSTART.md](docs/QUICKSTART.md) — Installation and setup
314
347
  - [docs/system/conversations.md](docs/system/conversations.md) — Full conversation framework
315
348
  - [docs/system/domains.md](docs/system/domains.md) — Domain-specific organization
@@ -40,7 +40,7 @@ if not os.environ.get("KEEP_VERBOSE"):
40
40
  from .api import Keeper, NOWDOC_ID
41
41
  from .types import Item, filter_non_system_tags, SYSTEM_TAG_PREFIX
42
42
 
43
- __version__ = "0.2.0"
43
+ __version__ = "0.3.0"
44
44
  __all__ = [
45
45
  "Keeper",
46
46
  "Item",