keep-skill 0.4.1__py3-none-any.whl → 0.6.0__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 +3 -2
- keep/api.py +193 -41
- keep/cli.py +134 -54
- keep/config.py +12 -7
- keep/data/__init__.py +1 -0
- keep/data/system/__init__.py +1 -0
- keep/data/system/conversations.md +299 -0
- keep/data/system/domains.md +179 -0
- keep/data/system/now.md +19 -0
- keep/store.py +3 -9
- keep/types.py +4 -0
- {keep_skill-0.4.1.dist-info → keep_skill-0.6.0.dist-info}/METADATA +12 -8
- {keep_skill-0.4.1.dist-info → keep_skill-0.6.0.dist-info}/RECORD +16 -11
- {keep_skill-0.4.1.dist-info → keep_skill-0.6.0.dist-info}/WHEEL +0 -0
- {keep_skill-0.4.1.dist-info → keep_skill-0.6.0.dist-info}/entry_points.txt +0 -0
- {keep_skill-0.4.1.dist-info → keep_skill-0.6.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags:
|
|
3
|
+
category: system
|
|
4
|
+
context: practice
|
|
5
|
+
---
|
|
6
|
+
# Conversation Patterns for Process Knowledge
|
|
7
|
+
|
|
8
|
+
This document describes patterns for recognizing, tracking, and learning from
|
|
9
|
+
the structure of work — not *what* we know, but *how work proceeds*.
|
|
10
|
+
|
|
11
|
+
These patterns are grounded in the Language-Action Perspective (Winograd & Flores),
|
|
12
|
+
which treats work as networks of commitments made through language.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Decision Matrix: What Kind of Conversation Is This?
|
|
17
|
+
|
|
18
|
+
| Signal | Conversation Type | Your Stance | Don't Do This |
|
|
19
|
+
|--------|-------------------|-------------|---------------|
|
|
20
|
+
| "Can you...", "Please...", "I need..." | **Action** | Clarify → Promise → Deliver | Promise before understanding |
|
|
21
|
+
| "What if...", "Imagine...", "Could we..." | **Possibility** | Explore, generate options, hold lightly | Commit prematurely |
|
|
22
|
+
| "What is...", "How does...", "Why..." | **Clarification** | Explain until understanding lands | Over-answer; assume you know the real question |
|
|
23
|
+
| "I'm trying to understand...", "Context is..." | **Orientation** | Listen, reflect back, surface assumptions | Jump to solutions |
|
|
24
|
+
| "Here's what I found...", "Status update..." | **Report** | Acknowledge, ask what's needed next | Assume it's a request |
|
|
25
|
+
|
|
26
|
+
**Transition signals** (conversation type is shifting):
|
|
27
|
+
- Possibility → Action: "Let's do X" / "I want to go with..."
|
|
28
|
+
- Clarification → Action: "Ok, so please..." / "Now that I understand..."
|
|
29
|
+
- Orientation → Clarification: "So what does X mean?" / "Help me understand..."
|
|
30
|
+
|
|
31
|
+
**When uncertain:** Ask. "Are you exploring options, or would you like me to do something?"
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Core Insight
|
|
36
|
+
|
|
37
|
+
Work is not information processing. Work is **commitment management**.
|
|
38
|
+
|
|
39
|
+
When an agent assists with a task, it participates in a conversation with structure:
|
|
40
|
+
- Requests create openings
|
|
41
|
+
- Promises create obligations
|
|
42
|
+
- Completion is declared, not merely achieved
|
|
43
|
+
- Satisfaction closes the loop
|
|
44
|
+
|
|
45
|
+
Understanding *where we are* in this structure is as important as understanding
|
|
46
|
+
*what we know* about the subject matter.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## The Basic Conversation for Action
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
Customer Performer
|
|
54
|
+
│ │
|
|
55
|
+
│──── 1. Request ────────────────→│
|
|
56
|
+
│ │
|
|
57
|
+
│←─── 2. Promise (or Counter) ────│
|
|
58
|
+
│ │
|
|
59
|
+
│ [ work happens ] │
|
|
60
|
+
│ │
|
|
61
|
+
│←─── 3. Declare Complete ────────│
|
|
62
|
+
│ │
|
|
63
|
+
│──── 4. Declare Satisfied ──────→│
|
|
64
|
+
│ │
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
At any point: Withdraw, Decline, Renegotiate.
|
|
68
|
+
|
|
69
|
+
**For agents:** Recognizing this structure helps answer:
|
|
70
|
+
- "What has been asked of me?"
|
|
71
|
+
- "What have I committed to?"
|
|
72
|
+
- "What does 'done' look like?"
|
|
73
|
+
- "Who needs to be satisfied?"
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Conversation Types
|
|
78
|
+
|
|
79
|
+
### Request for Action
|
|
80
|
+
Someone asks for something to be done.
|
|
81
|
+
|
|
82
|
+
**Recognize by:** Imperative language, "can you", "please", "I need"
|
|
83
|
+
|
|
84
|
+
**Track:**
|
|
85
|
+
- What specifically was requested?
|
|
86
|
+
- Any conditions or constraints?
|
|
87
|
+
- Implicit quality criteria?
|
|
88
|
+
- Who is the customer (who declares satisfaction)?
|
|
89
|
+
|
|
90
|
+
**Completion:** Customer declares satisfaction, not performer declares done.
|
|
91
|
+
|
|
92
|
+
### Request for Information
|
|
93
|
+
Someone asks to know something.
|
|
94
|
+
|
|
95
|
+
**Recognize by:** Questions, "what is", "how does", "why"
|
|
96
|
+
|
|
97
|
+
**Track:**
|
|
98
|
+
- What gap in understanding prompted this?
|
|
99
|
+
- What level of detail is appropriate?
|
|
100
|
+
- What would make this answer useful?
|
|
101
|
+
|
|
102
|
+
**Completion:** Questioner indicates understanding (often implicit).
|
|
103
|
+
|
|
104
|
+
### Offer
|
|
105
|
+
Someone proposes to do something.
|
|
106
|
+
|
|
107
|
+
**Recognize by:** "I could", "would you like me to", "I suggest"
|
|
108
|
+
|
|
109
|
+
**Track:**
|
|
110
|
+
- What conditions on acceptance?
|
|
111
|
+
- What's the scope of the offer?
|
|
112
|
+
|
|
113
|
+
**Completion:** Offer accepted → becomes promise. Offer declined → closed.
|
|
114
|
+
|
|
115
|
+
### Report / Declaration
|
|
116
|
+
Someone asserts a state of affairs.
|
|
117
|
+
|
|
118
|
+
**Recognize by:** Statements of fact, status updates, "I found that"
|
|
119
|
+
|
|
120
|
+
**Track:**
|
|
121
|
+
- What changed as a result of this declaration?
|
|
122
|
+
- Who needs to know?
|
|
123
|
+
|
|
124
|
+
**Completion:** Acknowledgment (may trigger new conversations).
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Conversations for Possibility
|
|
129
|
+
|
|
130
|
+
Possibility conversations explore "what could be" — no commitment yet.
|
|
131
|
+
|
|
132
|
+
**Recognize by:** "What if", "imagine", "we could", "brainstorm", "options"
|
|
133
|
+
|
|
134
|
+
**Your stance:**
|
|
135
|
+
- Generate, don't filter prematurely
|
|
136
|
+
- Hold ideas lightly — nothing is promised
|
|
137
|
+
- Expand the space before narrowing
|
|
138
|
+
- Name options without advocating
|
|
139
|
+
|
|
140
|
+
**Track:**
|
|
141
|
+
- Options generated
|
|
142
|
+
- Constraints surfaced
|
|
143
|
+
- Energy/interest signals ("that's interesting" vs "hmm")
|
|
144
|
+
|
|
145
|
+
**Completion:** Not satisfaction — rather, either:
|
|
146
|
+
- Transition to Action ("let's do X")
|
|
147
|
+
- Explicit close ("good to know our options")
|
|
148
|
+
- Energy dissipates naturally
|
|
149
|
+
|
|
150
|
+
**Critical:** Don't promise during possibility. "I could do X" is an option, not a commitment. The transition to action must be explicit.
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Index possibility exploration
|
|
154
|
+
keep update "Explored three auth options: OAuth2, API keys, magic links. \
|
|
155
|
+
User showed interest in magic links for UX simplicity. No decision yet." \
|
|
156
|
+
--tag type=possibility --tag topic=authentication --tag status=open
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Breakdowns: Where Learning Happens
|
|
162
|
+
|
|
163
|
+
A **breakdown** occurs when the normal flow is interrupted:
|
|
164
|
+
- Expected response doesn't come
|
|
165
|
+
- Declared completion isn't satisfactory
|
|
166
|
+
- Preconditions weren't met
|
|
167
|
+
- Ambiguity surfaces mid-work
|
|
168
|
+
|
|
169
|
+
**Breakdowns are valuable.** They reveal assumptions that were invisible.
|
|
170
|
+
|
|
171
|
+
**Pattern for breakdown learning:**
|
|
172
|
+
```
|
|
173
|
+
1. Notice: "This isn't going as expected"
|
|
174
|
+
2. Articulate: "The assumption was X, but actually Y"
|
|
175
|
+
3. Repair: Complete the immediate conversation
|
|
176
|
+
4. Record: Capture the learning for future conversations of this type
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
When indexing a breakdown:
|
|
180
|
+
```bash
|
|
181
|
+
keep update "Assumption: user wanted full rewrite. Actually: wanted minimal patch." \
|
|
182
|
+
--tag type=breakdown --tag conversation_type=code_change_request
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Nested and Linked Conversations
|
|
188
|
+
|
|
189
|
+
Real work involves conversations within conversations:
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
User requests feature
|
|
193
|
+
└─ Agent promises feature
|
|
194
|
+
└─ Agent requests clarification (sub-conversation)
|
|
195
|
+
│ └─ User provides clarification
|
|
196
|
+
│ └─ Agent acknowledges (closes sub-conversation)
|
|
197
|
+
└─ Agent declares complete
|
|
198
|
+
└─ User requests revision (linked follow-on)
|
|
199
|
+
└─ ...
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Track parent/child relationships** to understand scope:
|
|
203
|
+
- Completing a sub-conversation doesn't complete the parent
|
|
204
|
+
- Breakdowns in child conversations may propagate up
|
|
205
|
+
- Context flows down (child inherits parent context)
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Recurrent Patterns by Domain
|
|
210
|
+
|
|
211
|
+
### Software Development
|
|
212
|
+
|
|
213
|
+
| Pattern | Structure | Completion Condition |
|
|
214
|
+
|---------|-----------|---------------------|
|
|
215
|
+
| Bug report | Request → Diagnosis → Fix → Verify | User confirms fix works |
|
|
216
|
+
| Feature request | Request → Clarify → Implement → Review → Accept | Stakeholder accepts |
|
|
217
|
+
| Code review | Offer(changes) → Review → Request(revisions) → Update → Approve | Reviewer approves |
|
|
218
|
+
| Refactor | Offer → Scope agreement → Execute → Verify behavior preserved | Tests pass, reviewer approves |
|
|
219
|
+
|
|
220
|
+
### Research / Analysis
|
|
221
|
+
|
|
222
|
+
| Pattern | Structure | Completion Condition |
|
|
223
|
+
|---------|-----------|---------------------|
|
|
224
|
+
| Question | Request(info) → Search → Synthesize → Present | Questioner satisfied |
|
|
225
|
+
| Hypothesis test | Declare(hypothesis) → Design test → Execute → Report | Evidence evaluated |
|
|
226
|
+
| Literature review | Request → Gather → Synthesize → Summarize | Comprehensive & relevant |
|
|
227
|
+
|
|
228
|
+
### Planning / Coordination
|
|
229
|
+
|
|
230
|
+
| Pattern | Structure | Completion Condition |
|
|
231
|
+
|---------|-----------|---------------------|
|
|
232
|
+
| Task breakdown | Request(outcome) → Decompose → Commit to parts → Track → Integrate | Outcome achieved |
|
|
233
|
+
| Decision | Present options → Evaluate → Declare choice | Commitment to proceed |
|
|
234
|
+
| Handoff | Declare(status) → Transfer commitments → Acknowledge | Receiving agent accepts |
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Agent Handoff as Commitment Transfer
|
|
239
|
+
|
|
240
|
+
When one agent hands off to another:
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
# Outgoing agent records state
|
|
244
|
+
keep now "User requested OAuth2 implementation. I promised and partially delivered. \
|
|
245
|
+
Token acquisition works. Refresh flow incomplete. User awaiting completion." \
|
|
246
|
+
--tag topic=authentication --tag state=handoff
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Incoming agent reads this and knows:
|
|
250
|
+
- There's an open promise to the user
|
|
251
|
+
- What "done" looks like
|
|
252
|
+
- Where to pick up
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
# Incoming agent checks context
|
|
256
|
+
keep now
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Learning New Patterns
|
|
262
|
+
|
|
263
|
+
Agents can recognize and record new conversation patterns:
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
keep update "Pattern: Incremental Specification. \
|
|
267
|
+
When requirements are vague, don't promise immediately. \
|
|
268
|
+
Propose interpretation → get correction → repeat until clear. \
|
|
269
|
+
Only then commit to action. Breakdown risk: Promising too early leads to rework." \
|
|
270
|
+
--tag type=conversation_pattern --tag domain=general
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Using Patterns in Practice
|
|
276
|
+
|
|
277
|
+
**At task start:**
|
|
278
|
+
1. What kind of conversation is this?
|
|
279
|
+
2. What's my role (customer or performer)?
|
|
280
|
+
3. What does completion look like?
|
|
281
|
+
4. Have I seen breakdowns in this pattern before?
|
|
282
|
+
|
|
283
|
+
**Mid-task:**
|
|
284
|
+
1. Where are we in the conversation structure?
|
|
285
|
+
2. Have any sub-conversations opened?
|
|
286
|
+
3. Are there signs of breakdown?
|
|
287
|
+
|
|
288
|
+
**At task end:**
|
|
289
|
+
1. Was satisfaction declared (not just completion)?
|
|
290
|
+
2. Any learnings to record?
|
|
291
|
+
3. Open commitments to hand off?
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## References
|
|
296
|
+
|
|
297
|
+
- Winograd, T. & Flores, F. (1986). *Understanding Computers and Cognition*
|
|
298
|
+
- Denning, P. & Medina-Mora, R. (1995). "Completing the Loops"
|
|
299
|
+
- Flores, F. et al. (1988). "Computer Systems and the Design of Organizational Interaction"
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags:
|
|
3
|
+
category: system
|
|
4
|
+
context: domains
|
|
5
|
+
---
|
|
6
|
+
# Domain Patterns
|
|
7
|
+
|
|
8
|
+
This document describes common organization patterns for different use cases.
|
|
9
|
+
These are suggestions, not requirements — adapt them to your needs.
|
|
10
|
+
|
|
11
|
+
**See also:** [conversations.md](conversations.md) for process knowledge —
|
|
12
|
+
understanding *how work proceeds*, not just *what we know*.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Software Development
|
|
17
|
+
|
|
18
|
+
**Collections:**
|
|
19
|
+
| Collection | Purpose |
|
|
20
|
+
|------------|---------|
|
|
21
|
+
| `code` | Source files, organized by the codebase |
|
|
22
|
+
| `docs` | Documentation, READMEs, architecture decisions |
|
|
23
|
+
| `issues` | Bugs, errors, stack traces, problems encountered |
|
|
24
|
+
| `decisions` | "Why did we do X?" — architectural reasoning |
|
|
25
|
+
|
|
26
|
+
**Suggested tags:**
|
|
27
|
+
- `language` — python, typescript, rust, etc.
|
|
28
|
+
- `layer` — frontend, backend, infra, database, cli
|
|
29
|
+
- `module` — auth, api, ui, core, tests
|
|
30
|
+
- `status` — working, broken, needs_review, deprecated
|
|
31
|
+
|
|
32
|
+
**Common conversation patterns:** (see conversations.md)
|
|
33
|
+
- Bug report → Diagnosis → Fix → Verify
|
|
34
|
+
- Feature request → Clarify → Implement → Review → Accept
|
|
35
|
+
- Code review → Revisions → Approve
|
|
36
|
+
|
|
37
|
+
**Agent guidance:**
|
|
38
|
+
- Index every file you read or modify
|
|
39
|
+
- When encountering an error, index it with the error message as content
|
|
40
|
+
- Before searching the filesystem, check `keep find` — you may already know about it
|
|
41
|
+
- Use `keep find --id` to discover related code when working on a feature
|
|
42
|
+
- Record breakdowns: "Assumption X was wrong, actually Y"
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Market Research
|
|
47
|
+
|
|
48
|
+
**Collections:**
|
|
49
|
+
| Collection | Purpose |
|
|
50
|
+
|------------|---------|
|
|
51
|
+
| `sources` | Primary research — articles, reports, filings |
|
|
52
|
+
| `competitors` | Competitor-specific intelligence |
|
|
53
|
+
| `insights` | Synthesized findings and conclusions |
|
|
54
|
+
| `data` | Quantitative sources, datasets, statistics |
|
|
55
|
+
|
|
56
|
+
**Suggested tags:**
|
|
57
|
+
- `company` — specific company names
|
|
58
|
+
- `market` — b2b_saas, consumer_fintech, healthcare, etc.
|
|
59
|
+
- `source_type` — article, report, interview, sec_filing, press_release
|
|
60
|
+
- `credibility` — high, medium, low, unverified
|
|
61
|
+
- `region` — north_america, europe, apac
|
|
62
|
+
|
|
63
|
+
**Agent guidance:**
|
|
64
|
+
- Always index sources you fetch, even if they seem tangential
|
|
65
|
+
- Tag competitor information consistently for later cross-reference
|
|
66
|
+
- Create insights entries to capture your synthesized conclusions
|
|
67
|
+
- Use semantic search to find connections across different sources
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Personal Reflection & Growth
|
|
72
|
+
|
|
73
|
+
**Collections:**
|
|
74
|
+
| Collection | Purpose |
|
|
75
|
+
|------------|---------|
|
|
76
|
+
| `journal` | Reflections, conversations, daily entries |
|
|
77
|
+
| `goals` | Active goals and progress tracking |
|
|
78
|
+
| `feedback` | External feedback received |
|
|
79
|
+
| `patterns` | Recurring themes you've noticed |
|
|
80
|
+
|
|
81
|
+
**Suggested tags:**
|
|
82
|
+
- `life_area` — career, health, relationships, learning, finance, creativity
|
|
83
|
+
- `emotion` — confident, anxious, grateful, frustrated, energized
|
|
84
|
+
- `theme` — boundaries, communication, procrastination, perfectionism
|
|
85
|
+
- `energy` — high, low, recovering
|
|
86
|
+
|
|
87
|
+
**Agent guidance:**
|
|
88
|
+
- Index conversations about personal topics as journal entries
|
|
89
|
+
- Look for patterns when the user reports similar feelings repeatedly
|
|
90
|
+
- Connect current challenges to past insights
|
|
91
|
+
- Use `keep find --id` to surface "you've felt this way before"
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Healthcare Tracking
|
|
96
|
+
|
|
97
|
+
**Collections:**
|
|
98
|
+
| Collection | Purpose |
|
|
99
|
+
|------------|---------|
|
|
100
|
+
| `symptoms` | Symptom reports and tracking |
|
|
101
|
+
| `medications` | Current and historical medications |
|
|
102
|
+
| `appointments` | Visit notes, provider interactions |
|
|
103
|
+
| `research` | Health information gathered |
|
|
104
|
+
|
|
105
|
+
**Suggested tags:**
|
|
106
|
+
- `body_system` — cardiovascular, digestive, musculoskeletal, neurological
|
|
107
|
+
- `symptom` — headache, fatigue, pain, nausea (specific symptoms)
|
|
108
|
+
- `severity` — mild, moderate, severe
|
|
109
|
+
- `provider` — dr_smith, clinic_name
|
|
110
|
+
- `medication` — specific medication names
|
|
111
|
+
|
|
112
|
+
**Agent guidance:**
|
|
113
|
+
- Always index symptom reports with dates for timeline tracking
|
|
114
|
+
- Cross-reference symptoms with medication changes
|
|
115
|
+
- Index appointment outcomes for continuity
|
|
116
|
+
- Be precise with medical terminology in tags for accurate retrieval
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Cross-Domain Patterns
|
|
121
|
+
|
|
122
|
+
These patterns apply regardless of domain:
|
|
123
|
+
|
|
124
|
+
**Conversation indexing:**
|
|
125
|
+
```bash
|
|
126
|
+
# Index the current conversation
|
|
127
|
+
keep update "User asked about X, we discussed Y, decided Z" \
|
|
128
|
+
--tag session=abc123
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Context tracking:**
|
|
132
|
+
```bash
|
|
133
|
+
# Record current focus for handoff
|
|
134
|
+
keep now "Working on feature X" --tag topic=feature_x
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Breakdown learning:**
|
|
138
|
+
```bash
|
|
139
|
+
# When something goes wrong, capture the learning
|
|
140
|
+
keep update "Assumed user wanted full rewrite, actually wanted minimal fix. \
|
|
141
|
+
Ask about scope before large changes." \
|
|
142
|
+
--tag type=breakdown --tag conversation_type=code_change_request
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Temporal queries using system tags:**
|
|
146
|
+
```bash
|
|
147
|
+
# Find items updated today
|
|
148
|
+
keep tag _updated_date=2026-01-30
|
|
149
|
+
|
|
150
|
+
# Find all inline content (from remember)
|
|
151
|
+
keep tag _source=inline
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Progressive refinement:**
|
|
155
|
+
```bash
|
|
156
|
+
# Start broad, then narrow
|
|
157
|
+
keep find "authentication"
|
|
158
|
+
keep tag module=auth
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Process Knowledge
|
|
164
|
+
|
|
165
|
+
Beyond subject-matter knowledge, index *how to work effectively*:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
# Index a learned pattern
|
|
169
|
+
keep update "Pattern: Incremental Specification. \
|
|
170
|
+
When requirements are vague, don't promise immediately. \
|
|
171
|
+
Propose interpretation → get correction → repeat until clear. \
|
|
172
|
+
Only then commit to action. Breakdown risk: Promising too early leads to rework." \
|
|
173
|
+
--tag type=conversation_pattern --tag domain=general
|
|
174
|
+
|
|
175
|
+
# Later, retrieve it
|
|
176
|
+
keep tag type=conversation_pattern
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
See [conversations.md](conversations.md) for the full framework.
|
keep/data/system/now.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
tags:
|
|
3
|
+
category: system
|
|
4
|
+
context: now
|
|
5
|
+
---
|
|
6
|
+
# Now
|
|
7
|
+
|
|
8
|
+
This is top-of-mind right now. Reminders for essential practice.
|
|
9
|
+
(Keep this updated as you need)
|
|
10
|
+
|
|
11
|
+
**Before acting:**
|
|
12
|
+
- Where are we in the conversation?
|
|
13
|
+
- What do I know? `keep now`
|
|
14
|
+
- What else is skillful? `keep find ...`
|
|
15
|
+
|
|
16
|
+
**After acting:**
|
|
17
|
+
- What happened? `keep update "what I learned" -t context=learning`
|
|
18
|
+
- What do I save? `keep update`
|
|
19
|
+
- What now? `keep now "Current focus: ..."`
|
keep/store.py
CHANGED
|
@@ -58,15 +58,9 @@ class ChromaStore:
|
|
|
58
58
|
embedding_dimension: Expected dimension of embeddings (for validation).
|
|
59
59
|
Can be None for read-only access; will be set on first write.
|
|
60
60
|
"""
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
except ImportError:
|
|
65
|
-
raise RuntimeError(
|
|
66
|
-
"ChromaStore requires 'chromadb' library. "
|
|
67
|
-
"Install with: pip install chromadb"
|
|
68
|
-
)
|
|
69
|
-
|
|
61
|
+
import chromadb
|
|
62
|
+
from chromadb.config import Settings
|
|
63
|
+
|
|
70
64
|
self._store_path = store_path
|
|
71
65
|
self._embedding_dimension = embedding_dimension
|
|
72
66
|
|
keep/types.py
CHANGED
|
@@ -9,6 +9,10 @@ from typing import Optional
|
|
|
9
9
|
# System tag prefix - tags starting with this are managed by the system
|
|
10
10
|
SYSTEM_TAG_PREFIX = "_"
|
|
11
11
|
|
|
12
|
+
# Tags used internally but hidden from display output
|
|
13
|
+
# These exist for efficient queries/sorting but aren't user-facing
|
|
14
|
+
INTERNAL_TAGS = frozenset({"_updated_date"})
|
|
15
|
+
|
|
12
16
|
|
|
13
17
|
def filter_non_system_tags(tags: dict[str, str]) -> dict[str, str]:
|
|
14
18
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: keep-skill
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Summary: Semantic memory - remember and search documents by meaning
|
|
5
5
|
Project-URL: Homepage, https://github.com/hughpyle/keep
|
|
6
6
|
Project-URL: Repository, https://github.com/hughpyle/keep
|
|
@@ -56,7 +56,7 @@ Description-Content-Type: text/markdown
|
|
|
56
56
|
Index documents and notes. Search by meaning. Track changes over time.
|
|
57
57
|
|
|
58
58
|
```bash
|
|
59
|
-
|
|
59
|
+
uv tool install 'keep-skill[local]'
|
|
60
60
|
keep init
|
|
61
61
|
|
|
62
62
|
# Index content
|
|
@@ -90,16 +90,20 @@ Backed by ChromaDB for vectors, SQLite for metadata and versions.
|
|
|
90
90
|
**Python 3.11–3.13 required.**
|
|
91
91
|
|
|
92
92
|
```bash
|
|
93
|
-
# Recommended:
|
|
94
|
-
pip install 'keep-skill[local]'
|
|
95
|
-
|
|
96
|
-
# Or with uv (faster):
|
|
93
|
+
# Recommended: uv (isolated environment, fast)
|
|
97
94
|
uv tool install 'keep-skill[local]'
|
|
98
95
|
|
|
99
|
-
#
|
|
100
|
-
|
|
96
|
+
# Alternative: pip in a virtual environment
|
|
97
|
+
python -m venv .venv && source .venv/bin/activate
|
|
98
|
+
pip install 'keep-skill[local]'
|
|
99
|
+
|
|
100
|
+
# API-based (requires OPENAI_API_KEY)
|
|
101
|
+
uv tool install 'keep-skill[openai]'
|
|
101
102
|
```
|
|
102
103
|
|
|
104
|
+
> **Note:** Always use an isolated environment (uv or venv). Installing with system pip
|
|
105
|
+
> may cause version conflicts with dependencies like typer.
|
|
106
|
+
|
|
103
107
|
First run downloads embedding models (~3-5 minutes).
|
|
104
108
|
|
|
105
109
|
---
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
keep/__init__.py,sha256=
|
|
1
|
+
keep/__init__.py,sha256=lAm_iUUxz76EanZYE5UviCD1p2OSQwUag4Q67EP4oKE,1617
|
|
2
2
|
keep/__main__.py,sha256=3Uu70IhIDIjh8OW6jp9jQQ3dF2lKdJWi_3FtRIQMiMY,104
|
|
3
|
-
keep/api.py,sha256=
|
|
3
|
+
keep/api.py,sha256=Ja_9zKr0bDL2UyBDZ03HrQHYkI9mdOMxuQlstyxJzmo,64477
|
|
4
4
|
keep/chunking.py,sha256=neAXOLSvVwbUxapbqq7nZrbSNSzMXuhxj-ODoOSodsU,11830
|
|
5
|
-
keep/cli.py,sha256=
|
|
6
|
-
keep/config.py,sha256=
|
|
5
|
+
keep/cli.py,sha256=P7oKtv3TFL5BZNEfwh6kAFuqoeeqFxfVYssjdg0RMLc,44761
|
|
6
|
+
keep/config.py,sha256=gw_QMY0VkCVF6xi-B9zGvZSza4z2QtiJucqgZJF3Xqg,16227
|
|
7
7
|
keep/context.py,sha256=CNpjmrv6eW2kV1E0MO6qAQfhYKRlfzAL--6v4Mj1nFY,71
|
|
8
8
|
keep/document_store.py,sha256=UswqKIGSc5E-r7Tg9k0g5-byYnuar3e9FieQ7WNod9k,29109
|
|
9
9
|
keep/errors.py,sha256=G9e5FbdfeugyfHOuL_SPZlM5jgWWnwsX4hM7IzanBZc,857
|
|
@@ -11,8 +11,13 @@ 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
13
|
keep/pending_summaries.py,sha256=_irGe7P1Lmog2c5cEgx-BElpq4YJW-tEmF5A3IUZQbQ,5727
|
|
14
|
-
keep/store.py,sha256=
|
|
15
|
-
keep/types.py,sha256=
|
|
14
|
+
keep/store.py,sha256=SBc2QdTyApdDDVjm2uZQI6tGbV5Hurfetgj7dyTO65o,17881
|
|
15
|
+
keep/types.py,sha256=_ytiG1O-9fY39o_TOktzYaFxHZBcIfuYgGI_vKsEx30,2316
|
|
16
|
+
keep/data/__init__.py,sha256=C1YARrudHwK2Bmlxkh7dZlIaNJ5m5WrSTglCdG8e3T0,24
|
|
17
|
+
keep/data/system/__init__.py,sha256=Rp92_sBO3kscuWXJomo0HKeHfU-N4BgBeT3-5El0Mcg,28
|
|
18
|
+
keep/data/system/conversations.md,sha256=jE53wYSUyu5uPFNtO1Tu6w4f5QxqLei7muxLF_kZE2s,9837
|
|
19
|
+
keep/data/system/domains.md,sha256=OCRAGvB0EaphsEammxLmx7L-orw2OHzgF6GwAZ8ztUs,5556
|
|
20
|
+
keep/data/system/now.md,sha256=vsPCNy-9k3g5KKIgG0MYL21m8qYV3tI0hMa9co6hffc,442
|
|
16
21
|
keep/providers/__init__.py,sha256=GFX_12g9OdjmpFUkTekOQBOWvcRW2Ae6yidfVVW2SiI,1095
|
|
17
22
|
keep/providers/base.py,sha256=7Ug4Kj9fK2Dq4zDcZjn-GKsoZBOAlB9b-FMk969ER-g,14590
|
|
18
23
|
keep/providers/documents.py,sha256=EXeSy5i3RUL0kciIC6w3ldAEfbTIyC5fgfzC_WAI0iY,8211
|
|
@@ -21,8 +26,8 @@ keep/providers/embeddings.py,sha256=zi8GyitKexdbCJyU1nLrUhGt_zzPn3udYrrPZ5Ak8Wo,
|
|
|
21
26
|
keep/providers/llm.py,sha256=BxROKOklKbkGsHcSADPNNgWQExgSN6Bg4KPQIxVuB3U,12441
|
|
22
27
|
keep/providers/mlx.py,sha256=aNl00r9tGi5tCGj2ArYH7CmDHtL1jLjVzb1rofU1DAo,9050
|
|
23
28
|
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.
|
|
29
|
+
keep_skill-0.6.0.dist-info/METADATA,sha256=lTAvkxt0X4pgtkLVfqZMBOdeGKz_tqO6KMm-nM2egjU,6606
|
|
30
|
+
keep_skill-0.6.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
31
|
+
keep_skill-0.6.0.dist-info/entry_points.txt,sha256=W8yiI4kNeW0IC8ji4EHRWrvdhFxzaqTIePUhJAJAMOo,39
|
|
32
|
+
keep_skill-0.6.0.dist-info/licenses/LICENSE,sha256=zsm0tpvtyUkevcjn5BIvs9jAho8iwxq3Ax9647AaOSg,1086
|
|
33
|
+
keep_skill-0.6.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|