personal-understanding 2.2.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.
- personal_understanding-2.2.0/LICENSE +21 -0
- personal_understanding-2.2.0/PKG-INFO +187 -0
- personal_understanding-2.2.0/README.md +161 -0
- personal_understanding-2.2.0/personal_understanding.egg-info/PKG-INFO +187 -0
- personal_understanding-2.2.0/personal_understanding.egg-info/SOURCES.txt +57 -0
- personal_understanding-2.2.0/personal_understanding.egg-info/dependency_links.txt +1 -0
- personal_understanding-2.2.0/personal_understanding.egg-info/entry_points.txt +3 -0
- personal_understanding-2.2.0/personal_understanding.egg-info/top_level.txt +1 -0
- personal_understanding-2.2.0/pyproject.toml +47 -0
- personal_understanding-2.2.0/scripts/__init__.py +16 -0
- personal_understanding-2.2.0/scripts/backup_archive.py +357 -0
- personal_understanding-2.2.0/scripts/capture_attachment.py +90 -0
- personal_understanding-2.2.0/scripts/capture_user_update.py +95 -0
- personal_understanding-2.2.0/scripts/catalog_context.py +118 -0
- personal_understanding-2.2.0/scripts/catalog_utils.py +455 -0
- personal_understanding-2.2.0/scripts/cli_runtime.py +13 -0
- personal_understanding-2.2.0/scripts/conversation_starters.py +187 -0
- personal_understanding-2.2.0/scripts/derivation_ledger.py +142 -0
- personal_understanding-2.2.0/scripts/finalize_capture.py +34 -0
- personal_understanding-2.2.0/scripts/followup_check.py +56 -0
- personal_understanding-2.2.0/scripts/init_archive.py +54 -0
- personal_understanding-2.2.0/scripts/install_mcp.py +325 -0
- personal_understanding-2.2.0/scripts/maintenance_check.py +78 -0
- personal_understanding-2.2.0/scripts/mcp_server.py +275 -0
- personal_understanding-2.2.0/scripts/open_dashboard.py +368 -0
- personal_understanding-2.2.0/scripts/preflight_context.py +67 -0
- personal_understanding-2.2.0/scripts/query_context.py +404 -0
- personal_understanding-2.2.0/scripts/rebuild_views.py +60 -0
- personal_understanding-2.2.0/scripts/record_feedback.py +92 -0
- personal_understanding-2.2.0/scripts/register_important_update.py +61 -0
- personal_understanding-2.2.0/scripts/retrieve_context.py +330 -0
- personal_understanding-2.2.0/scripts/retrieve_v2.py +147 -0
- personal_understanding-2.2.0/scripts/review_context.py +211 -0
- personal_understanding-2.2.0/scripts/review_skill.py +379 -0
- personal_understanding-2.2.0/scripts/review_v2.py +74 -0
- personal_understanding-2.2.0/scripts/run_review_cycle.py +106 -0
- personal_understanding-2.2.0/scripts/salience_review.py +127 -0
- personal_understanding-2.2.0/scripts/session_check.py +99 -0
- personal_understanding-2.2.0/scripts/sitecustomize.py +10 -0
- personal_understanding-2.2.0/scripts/source_audit.py +92 -0
- personal_understanding-2.2.0/scripts/storage.py +99 -0
- personal_understanding-2.2.0/scripts/turn_receipts.py +75 -0
- personal_understanding-2.2.0/scripts/update_state.py +96 -0
- personal_understanding-2.2.0/scripts/v2_archive.py +680 -0
- personal_understanding-2.2.0/scripts/validate_memory.py +112 -0
- personal_understanding-2.2.0/setup.cfg +4 -0
- personal_understanding-2.2.0/tests/test_archive.py +87 -0
- personal_understanding-2.2.0/tests/test_dashboard.py +101 -0
- personal_understanding-2.2.0/tests/test_derivation_closure.py +236 -0
- personal_understanding-2.2.0/tests/test_v02.py +94 -0
- personal_understanding-2.2.0/tests/test_v03_retrieval.py +81 -0
- personal_understanding-2.2.0/tests/test_v04_review.py +64 -0
- personal_understanding-2.2.0/tests/test_v04_review_triggers.py +49 -0
- personal_understanding-2.2.0/tests/test_v05_survey.py +127 -0
- personal_understanding-2.2.0/tests/test_v06_context_expansion.py +81 -0
- personal_understanding-2.2.0/tests/test_v07_fixes.py +198 -0
- personal_understanding-2.2.0/tests/test_v08_loops.py +202 -0
- personal_understanding-2.2.0/tests/test_v09_review_round.py +348 -0
- personal_understanding-2.2.0/tests/test_v10_receipts_concurrency.py +79 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 caix84476-netizen
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: personal-understanding
|
|
3
|
+
Version: 2.2.0
|
|
4
|
+
Summary: Evidence-chain personal memory for AI agents — verbatim-first, auditable, anti-fabrication. Ships as a skill + local stdio MCP server.
|
|
5
|
+
Author: caix84476-netizen
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/caix84476-netizen/personal-understanding
|
|
8
|
+
Project-URL: Repository, https://github.com/caix84476-netizen/personal-understanding
|
|
9
|
+
Project-URL: Documentation, https://github.com/caix84476-netizen/personal-understanding/blob/main/README.md
|
|
10
|
+
Keywords: mcp,mcp-server,claude,claude-code,codex,memory,personal-memory,agent-memory,local-first,ai-agents,personal-knowledge-management,skills
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Dynamic: license-file
|
|
26
|
+
|
|
27
|
+
<div align="center">
|
|
28
|
+
|
|
29
|
+
# Personal Understanding
|
|
30
|
+
|
|
31
|
+
### Give your AI agent a memory that actually knows you — and can prove where every fact came from.
|
|
32
|
+
|
|
33
|
+
**Verbatim-first · Evidence-chain · Anti-fabrication · Local-first · One folder, zero dependencies**
|
|
34
|
+
|
|
35
|
+
[中文文档](README.zh-CN.md) · [架构](#architecture) · [快速开始](#quick-start) · [设计原则](#design-principles)
|
|
36
|
+
|
|
37
|
+
> **Two skill languages:** the repo ships **`SKILL.md`** (English) and **`SKILL.zh-CN.md`** (中文) — two brains, one shared bilingual engine. Install either by renaming it to `SKILL.md` in your skills folder. 中文用户可直接用 `SKILL.zh-CN.md`,配合中文档案效果最佳。
|
|
38
|
+
|
|
39
|
+
`agent-memory` `mcp` `claude` `codex` `skills` `local-first` `personal-knowledge`
|
|
40
|
+
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## The problem with every memory system you've tried
|
|
46
|
+
|
|
47
|
+
Typical agent memory has a dirty secret: **the model summarizes first and stores the summary.** Your words get paraphrased, compressed, and blended with the model's own interpretations on day one. Six months later, "you" are a stack of lossy summaries — and when the model gets you wrong, you can't even audit why, because the original evidence is gone.
|
|
48
|
+
|
|
49
|
+
Worse, failures are silent: a corrupted write reports success, an invented date looks plausible, the model's guess about *why you are the way you are* quietly hardens into "fact".
|
|
50
|
+
|
|
51
|
+
**Personal Understanding flips the pipeline:**
|
|
52
|
+
|
|
53
|
+
> ### Save the exact words first. Derive everything else from them. Prove every path.
|
|
54
|
+
|
|
55
|
+
Every personal message is captured **verbatim and immutably** (SHA-256 hashed, timestamped, session-tagged) *before* anything else happens. Structured understanding — timeline, entities, context cards, causal hypotheses — is then built **on top of** the evidence, with every derived fact linking back to the quote it came from. When the agent misremembers you, you audit it. When it doesn't know, it says so.
|
|
56
|
+
|
|
57
|
+
## What makes it different
|
|
58
|
+
|
|
59
|
+
| | Typical memory tools | Personal Understanding |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| What gets stored first | the model's summary | **your exact words — immutable, hashed** |
|
|
62
|
+
| Derived facts traceable to source | rarely | ✓ every record links back to its verbatim |
|
|
63
|
+
| Model guesses marked as guesses | no | ✓ hypothesis layer, `candidate` by default, never silently promoted |
|
|
64
|
+
| Old lossy summaries | silently reused | ✓ flagged as **summary debt** — retrieval discloses "this part comes from an old summary" |
|
|
65
|
+
| Says "saved" when the save failed | happens | ✗ impossible — capture is read back; a hard gate (`session_check`) must exit 0 before "archive updated" may be claimed |
|
|
66
|
+
| Invented dates, merged people, fake causal edges | possible | ✗ forbidden by written policy and enforced by validators |
|
|
67
|
+
| Runtime | server + vector DB + embeddings | **one folder, Python stdlib only** |
|
|
68
|
+
| Where your data lives | often their cloud | **your machine. Full stop.** |
|
|
69
|
+
|
|
70
|
+
## Same message, two very different memories
|
|
71
|
+
|
|
72
|
+
**Without Personal Understanding** — a typical memory implementation:
|
|
73
|
+
|
|
74
|
+
> **You:** I finally played my first full song on guitar today. Three weeks until I perform it at my cousin's wedding — honestly less nervous than before.
|
|
75
|
+
> **AI:** That's awesome, congrats! 🎸 Keep it up!
|
|
76
|
+
>
|
|
77
|
+
> *What got stored: `"user played guitar, feeling positive."` A lossy summary. No source, no date, no people, no way to check it. Next month it's gone — or worse, silently paraphrased into something you never said.*
|
|
78
|
+
|
|
79
|
+
**With Personal Understanding** — the same message:
|
|
80
|
+
|
|
81
|
+
> **You:** I finally played my first full song on guitar today. Three weeks until I perform it at my cousin's wedding — honestly less nervous than before.
|
|
82
|
+
> **AI:** *(first: captures your complete message verbatim — SHA-256-hashed, timestamped, session-tagged — before anything else)*
|
|
83
|
+
> *(then: derives and links — `event` "first full song on guitar" · salience `supporting` · linked to `Sara` and the wedding goal · updates your current state: performance anxiety ↓)*
|
|
84
|
+
> **AI:** First full song is a real milestone. Last time, performing at the wedding made you nervous — how does it feel now that it's three weeks out?
|
|
85
|
+
>
|
|
86
|
+
> *Every claim traces back to your exact words. Ask "where does that come from?" and the agent shows you the original quote — not a paraphrase of a paraphrase. And when it's the wedding week, the archive checks in by itself.*
|
|
87
|
+
|
|
88
|
+
## Highlights
|
|
89
|
+
|
|
90
|
+
- 🗣️ **Verbatim-first capture** — the complete message, word for word, before any summarizing, splitting, or interpreting. Corrections add new captures; nothing is ever silently overwritten.
|
|
91
|
+
- 🔁 **Derivation closure** — a successful capture is not a finished update. Every capture must be split into records, linked, and closed — or explicitly closed as "nothing new" with a stated reason. Orphans can't slip through.
|
|
92
|
+
- 🧠 **Human-like three-layer recall** — `survey` (a compact routing map) → `probe` (fan out along entities, context cards, and time neighbors) → `deep` (verify the exact quote). No vector dumps, no keyword-only search.
|
|
93
|
+
- 📻 **Cold recall ladder** — for "I forget, we talked about something like this…" moments: probe from any hint, walk time neighbors, then browse a time window like flipping through an old photo album.
|
|
94
|
+
- 🕸️ **Entities + context cards** — people, schools, places, objects, works, games, concepts, environments — plus cross-entity cards ("school × football") so shared stories are reachable from any side. Vague pronouns are kept as `unresolved_referent`, never fabricated into fake people.
|
|
95
|
+
- 🔬 **Causal hypothesis layer** — "why am I like this?" gets a structured answer: claim, mechanism, supports, counterexamples, competing explanations, scope, confidence — always `candidate`, never presented as fact.
|
|
96
|
+
- ⏰ **Proactive follow-ups** — "let's see in a few days" becomes a tracked loop. When it's due, the agent checks back *with the original context*, not a context-free nag.
|
|
97
|
+
- 🧭 **Guided starters** — you don't have to know what to say. The skill reads its own gaps (empty domains, open loops, stale current state) and offers one warm, concrete question at a time (`python scripts/conversation_starters.py`).
|
|
98
|
+
- 🚦 **Hard gates, not vibes** — three-state validation (`clean` / `warnings` / `failed`), atomic writes everywhere, `session_check` as a non-zero-exit gate before any "the archive is updated" claim.
|
|
99
|
+
- 📉 **Summary debt accounting** — legacy material that lost its source is labeled, counted, and disclosed in retrieval. It can never impersonate verbatim.
|
|
100
|
+
- 📊 **Audit dashboard** — a local, read-only panel: real counts, validation state, and the full chain from any event back to the original words. The point is that *you* can check the skill follows its own rules.
|
|
101
|
+
- 🔌 **Drop-in for your client** — an idempotent installer auto-detects and registers a local MCP server across Claude clients, Codex, VS Code / Cursor / Windsurf / Cline / Trae, ZCode, and generic `.agents` configs.
|
|
102
|
+
- 💾 **Backups with integrity** — SHA-256-manifested snapshots, mirror-to-second-location support (any rclone remote), and a quarterly salience review that gracefully demotes stale imported weights instead of letting them fossilize.
|
|
103
|
+
|
|
104
|
+
## Architecture
|
|
105
|
+
|
|
106
|
+
```mermaid
|
|
107
|
+
flowchart LR
|
|
108
|
+
A["user message"] --> B{"turn preflight<br/>(router)"}
|
|
109
|
+
B -->|"personal content"| C["immutable verbatim capture<br/>+ SHA-256 · session · source"]
|
|
110
|
+
C --> D["derivation ledger<br/>(pending)"]
|
|
111
|
+
D --> E["derive: events · entities<br/>context cards · hypotheses<br/>follow-ups"]
|
|
112
|
+
E --> F["finalize:<br/>derived / nothing-new"]
|
|
113
|
+
B --> G["survey → probe → deep<br/>progressive retrieval"]
|
|
114
|
+
G --> H["deep = verbatim only<br/>(summary debt disclosed)"]
|
|
115
|
+
F --> I["session_check<br/>hard gate · must exit 0"]
|
|
116
|
+
I --> J["answer"]
|
|
117
|
+
J --> K["feedback loop<br/>helpful / missed / corrected"]
|
|
118
|
+
K -.->|quarterly| L["salience review<br/>+ deep semantic review"]
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
On disk it's plain files you can read, grep, and back up: `sources/conversation/` (immutable verbatim + hashes) and `memory/v2/` (fragments, timeline, entities, contexts, follow-ups, hypotheses, decision traces) — with legacy records kept as a compatibility layer and honestly marked `summary_only`.
|
|
122
|
+
|
|
123
|
+
## Quick start
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# 1. clone into your client's skills directory
|
|
127
|
+
git clone https://github.com/caix84476-netizen/personal-understanding.git \
|
|
128
|
+
~/.claude/skills/personal-understanding # or ~/.codex/skills/ , or your client's equivalent
|
|
129
|
+
|
|
130
|
+
# 2. bootstrap the archive skeleton (directories + generic domain branches; idempotent)
|
|
131
|
+
python scripts/init_archive.py
|
|
132
|
+
|
|
133
|
+
# 3. register the local MCP server (auto-detects clients; idempotent)
|
|
134
|
+
python scripts/install_mcp.py --auto # Windows: just double-click register-mcp.cmd
|
|
135
|
+
|
|
136
|
+
# 4. restart your client session — the personal_* tools go live
|
|
137
|
+
|
|
138
|
+
# 5. open the audit dashboard any time
|
|
139
|
+
python scripts/open_dashboard.py # Windows: double-click open-dashboard.cmd
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Requirements:** Python 3.10+ · stdlib only, zero pip installs · Windows / macOS / Linux.
|
|
143
|
+
|
|
144
|
+
Then just talk normally: *"I've been feeling…"*, *"remember that…"*, *"why do I keep…"* — the skill's description triggers on personal content, captures your words, and takes over from there. Ask *"what do you remember about…"*, or *"where does that come from?"* and follow the evidence chain.
|
|
145
|
+
|
|
146
|
+
## Your data stays yours
|
|
147
|
+
|
|
148
|
+
- Everything is processed **locally**, in the skill folder. No telemetry, no cloud calls, no embeddings shipped to third parties.
|
|
149
|
+
- The shipped `.gitignore` blocks `memory/`, `sources/`, and `backups/` — so you can version-control your skill folder and **never commit your private archive by accident**.
|
|
150
|
+
- Sensitivity labels (`private` / `highly-private`) control *relevance*, not secrecy-from-you: unrelated questions never leak unrelated private material.
|
|
151
|
+
|
|
152
|
+
## Design principles
|
|
153
|
+
|
|
154
|
+
These are written policy, enforced by validators — not aspirations:
|
|
155
|
+
|
|
156
|
+
1. **Verbatim fidelity first** — no summary ever poses as the user's words; `summary_only` is marked as such forever.
|
|
157
|
+
2. **No fabricated certainty** — uncertain dates stay uncertain; vague pronouns don't become people; single events never become causes.
|
|
158
|
+
3. **Newer words outrank older archives** — corrections build `supersedes` / `contradicts` chains; nothing is silently erased.
|
|
159
|
+
4. **One salience axis** — `pivotal / key / supporting / passing` on a single 0–3 scale; imported weights admit they're heuristics.
|
|
160
|
+
5. **Silence is not feedback** — only explicit corrections and confirmations, with quotable evidence, feed the feedback loop.
|
|
161
|
+
6. **Structure clean ≠ semantically correct** — deep review exists precisely because validators can't catch meaning.
|
|
162
|
+
|
|
163
|
+
## Where it came from
|
|
164
|
+
|
|
165
|
+
Not a framework thought up in one afternoon — a working archive refined through daily use and a dozen hardening rounds (see the [CHANGELOG](CHANGELOG.md)): a salience-decay bug that once shredded frontmatter is why all writes are now atomic and reviewed; survey used to load ~818 KB of legacy catalog per turn — it's a ~90 KB routing map now (~230 ms); the whole derivation-closure and hard-gate machinery exists because "trust me, I saved it" wasn't good enough for real life.
|
|
166
|
+
|
|
167
|
+
## Status
|
|
168
|
+
|
|
169
|
+
- **Current release: v2.1.0** — schema stable (`memory/v2/` v2.0.0), actively maintained.
|
|
170
|
+
- Works with any MCP-capable client; the skill itself works in **any language** (English by default — it mirrors yours).
|
|
171
|
+
- Roadmap: editable dashboard pages, richer cold-recall ranking, optional encrypted archive-at-rest.
|
|
172
|
+
|
|
173
|
+
## Contributing
|
|
174
|
+
|
|
175
|
+
Issues and PRs welcome — especially: new client installers for `install_mcp.py`, dashboard improvements, and i18n of the low-signal detector.
|
|
176
|
+
|
|
177
|
+
## License
|
|
178
|
+
|
|
179
|
+
[MIT](LICENSE) © 2026 caix84476-netizen
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
<div align="center">
|
|
184
|
+
|
|
185
|
+
If Personal Understanding saves you from re-explaining yourself to your AI for the nth time, **a star ⭐ helps others find it.**
|
|
186
|
+
|
|
187
|
+
</div>
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# Personal Understanding
|
|
4
|
+
|
|
5
|
+
### Give your AI agent a memory that actually knows you — and can prove where every fact came from.
|
|
6
|
+
|
|
7
|
+
**Verbatim-first · Evidence-chain · Anti-fabrication · Local-first · One folder, zero dependencies**
|
|
8
|
+
|
|
9
|
+
[中文文档](README.zh-CN.md) · [架构](#architecture) · [快速开始](#quick-start) · [设计原则](#design-principles)
|
|
10
|
+
|
|
11
|
+
> **Two skill languages:** the repo ships **`SKILL.md`** (English) and **`SKILL.zh-CN.md`** (中文) — two brains, one shared bilingual engine. Install either by renaming it to `SKILL.md` in your skills folder. 中文用户可直接用 `SKILL.zh-CN.md`,配合中文档案效果最佳。
|
|
12
|
+
|
|
13
|
+
`agent-memory` `mcp` `claude` `codex` `skills` `local-first` `personal-knowledge`
|
|
14
|
+
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## The problem with every memory system you've tried
|
|
20
|
+
|
|
21
|
+
Typical agent memory has a dirty secret: **the model summarizes first and stores the summary.** Your words get paraphrased, compressed, and blended with the model's own interpretations on day one. Six months later, "you" are a stack of lossy summaries — and when the model gets you wrong, you can't even audit why, because the original evidence is gone.
|
|
22
|
+
|
|
23
|
+
Worse, failures are silent: a corrupted write reports success, an invented date looks plausible, the model's guess about *why you are the way you are* quietly hardens into "fact".
|
|
24
|
+
|
|
25
|
+
**Personal Understanding flips the pipeline:**
|
|
26
|
+
|
|
27
|
+
> ### Save the exact words first. Derive everything else from them. Prove every path.
|
|
28
|
+
|
|
29
|
+
Every personal message is captured **verbatim and immutably** (SHA-256 hashed, timestamped, session-tagged) *before* anything else happens. Structured understanding — timeline, entities, context cards, causal hypotheses — is then built **on top of** the evidence, with every derived fact linking back to the quote it came from. When the agent misremembers you, you audit it. When it doesn't know, it says so.
|
|
30
|
+
|
|
31
|
+
## What makes it different
|
|
32
|
+
|
|
33
|
+
| | Typical memory tools | Personal Understanding |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| What gets stored first | the model's summary | **your exact words — immutable, hashed** |
|
|
36
|
+
| Derived facts traceable to source | rarely | ✓ every record links back to its verbatim |
|
|
37
|
+
| Model guesses marked as guesses | no | ✓ hypothesis layer, `candidate` by default, never silently promoted |
|
|
38
|
+
| Old lossy summaries | silently reused | ✓ flagged as **summary debt** — retrieval discloses "this part comes from an old summary" |
|
|
39
|
+
| Says "saved" when the save failed | happens | ✗ impossible — capture is read back; a hard gate (`session_check`) must exit 0 before "archive updated" may be claimed |
|
|
40
|
+
| Invented dates, merged people, fake causal edges | possible | ✗ forbidden by written policy and enforced by validators |
|
|
41
|
+
| Runtime | server + vector DB + embeddings | **one folder, Python stdlib only** |
|
|
42
|
+
| Where your data lives | often their cloud | **your machine. Full stop.** |
|
|
43
|
+
|
|
44
|
+
## Same message, two very different memories
|
|
45
|
+
|
|
46
|
+
**Without Personal Understanding** — a typical memory implementation:
|
|
47
|
+
|
|
48
|
+
> **You:** I finally played my first full song on guitar today. Three weeks until I perform it at my cousin's wedding — honestly less nervous than before.
|
|
49
|
+
> **AI:** That's awesome, congrats! 🎸 Keep it up!
|
|
50
|
+
>
|
|
51
|
+
> *What got stored: `"user played guitar, feeling positive."` A lossy summary. No source, no date, no people, no way to check it. Next month it's gone — or worse, silently paraphrased into something you never said.*
|
|
52
|
+
|
|
53
|
+
**With Personal Understanding** — the same message:
|
|
54
|
+
|
|
55
|
+
> **You:** I finally played my first full song on guitar today. Three weeks until I perform it at my cousin's wedding — honestly less nervous than before.
|
|
56
|
+
> **AI:** *(first: captures your complete message verbatim — SHA-256-hashed, timestamped, session-tagged — before anything else)*
|
|
57
|
+
> *(then: derives and links — `event` "first full song on guitar" · salience `supporting` · linked to `Sara` and the wedding goal · updates your current state: performance anxiety ↓)*
|
|
58
|
+
> **AI:** First full song is a real milestone. Last time, performing at the wedding made you nervous — how does it feel now that it's three weeks out?
|
|
59
|
+
>
|
|
60
|
+
> *Every claim traces back to your exact words. Ask "where does that come from?" and the agent shows you the original quote — not a paraphrase of a paraphrase. And when it's the wedding week, the archive checks in by itself.*
|
|
61
|
+
|
|
62
|
+
## Highlights
|
|
63
|
+
|
|
64
|
+
- 🗣️ **Verbatim-first capture** — the complete message, word for word, before any summarizing, splitting, or interpreting. Corrections add new captures; nothing is ever silently overwritten.
|
|
65
|
+
- 🔁 **Derivation closure** — a successful capture is not a finished update. Every capture must be split into records, linked, and closed — or explicitly closed as "nothing new" with a stated reason. Orphans can't slip through.
|
|
66
|
+
- 🧠 **Human-like three-layer recall** — `survey` (a compact routing map) → `probe` (fan out along entities, context cards, and time neighbors) → `deep` (verify the exact quote). No vector dumps, no keyword-only search.
|
|
67
|
+
- 📻 **Cold recall ladder** — for "I forget, we talked about something like this…" moments: probe from any hint, walk time neighbors, then browse a time window like flipping through an old photo album.
|
|
68
|
+
- 🕸️ **Entities + context cards** — people, schools, places, objects, works, games, concepts, environments — plus cross-entity cards ("school × football") so shared stories are reachable from any side. Vague pronouns are kept as `unresolved_referent`, never fabricated into fake people.
|
|
69
|
+
- 🔬 **Causal hypothesis layer** — "why am I like this?" gets a structured answer: claim, mechanism, supports, counterexamples, competing explanations, scope, confidence — always `candidate`, never presented as fact.
|
|
70
|
+
- ⏰ **Proactive follow-ups** — "let's see in a few days" becomes a tracked loop. When it's due, the agent checks back *with the original context*, not a context-free nag.
|
|
71
|
+
- 🧭 **Guided starters** — you don't have to know what to say. The skill reads its own gaps (empty domains, open loops, stale current state) and offers one warm, concrete question at a time (`python scripts/conversation_starters.py`).
|
|
72
|
+
- 🚦 **Hard gates, not vibes** — three-state validation (`clean` / `warnings` / `failed`), atomic writes everywhere, `session_check` as a non-zero-exit gate before any "the archive is updated" claim.
|
|
73
|
+
- 📉 **Summary debt accounting** — legacy material that lost its source is labeled, counted, and disclosed in retrieval. It can never impersonate verbatim.
|
|
74
|
+
- 📊 **Audit dashboard** — a local, read-only panel: real counts, validation state, and the full chain from any event back to the original words. The point is that *you* can check the skill follows its own rules.
|
|
75
|
+
- 🔌 **Drop-in for your client** — an idempotent installer auto-detects and registers a local MCP server across Claude clients, Codex, VS Code / Cursor / Windsurf / Cline / Trae, ZCode, and generic `.agents` configs.
|
|
76
|
+
- 💾 **Backups with integrity** — SHA-256-manifested snapshots, mirror-to-second-location support (any rclone remote), and a quarterly salience review that gracefully demotes stale imported weights instead of letting them fossilize.
|
|
77
|
+
|
|
78
|
+
## Architecture
|
|
79
|
+
|
|
80
|
+
```mermaid
|
|
81
|
+
flowchart LR
|
|
82
|
+
A["user message"] --> B{"turn preflight<br/>(router)"}
|
|
83
|
+
B -->|"personal content"| C["immutable verbatim capture<br/>+ SHA-256 · session · source"]
|
|
84
|
+
C --> D["derivation ledger<br/>(pending)"]
|
|
85
|
+
D --> E["derive: events · entities<br/>context cards · hypotheses<br/>follow-ups"]
|
|
86
|
+
E --> F["finalize:<br/>derived / nothing-new"]
|
|
87
|
+
B --> G["survey → probe → deep<br/>progressive retrieval"]
|
|
88
|
+
G --> H["deep = verbatim only<br/>(summary debt disclosed)"]
|
|
89
|
+
F --> I["session_check<br/>hard gate · must exit 0"]
|
|
90
|
+
I --> J["answer"]
|
|
91
|
+
J --> K["feedback loop<br/>helpful / missed / corrected"]
|
|
92
|
+
K -.->|quarterly| L["salience review<br/>+ deep semantic review"]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
On disk it's plain files you can read, grep, and back up: `sources/conversation/` (immutable verbatim + hashes) and `memory/v2/` (fragments, timeline, entities, contexts, follow-ups, hypotheses, decision traces) — with legacy records kept as a compatibility layer and honestly marked `summary_only`.
|
|
96
|
+
|
|
97
|
+
## Quick start
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# 1. clone into your client's skills directory
|
|
101
|
+
git clone https://github.com/caix84476-netizen/personal-understanding.git \
|
|
102
|
+
~/.claude/skills/personal-understanding # or ~/.codex/skills/ , or your client's equivalent
|
|
103
|
+
|
|
104
|
+
# 2. bootstrap the archive skeleton (directories + generic domain branches; idempotent)
|
|
105
|
+
python scripts/init_archive.py
|
|
106
|
+
|
|
107
|
+
# 3. register the local MCP server (auto-detects clients; idempotent)
|
|
108
|
+
python scripts/install_mcp.py --auto # Windows: just double-click register-mcp.cmd
|
|
109
|
+
|
|
110
|
+
# 4. restart your client session — the personal_* tools go live
|
|
111
|
+
|
|
112
|
+
# 5. open the audit dashboard any time
|
|
113
|
+
python scripts/open_dashboard.py # Windows: double-click open-dashboard.cmd
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Requirements:** Python 3.10+ · stdlib only, zero pip installs · Windows / macOS / Linux.
|
|
117
|
+
|
|
118
|
+
Then just talk normally: *"I've been feeling…"*, *"remember that…"*, *"why do I keep…"* — the skill's description triggers on personal content, captures your words, and takes over from there. Ask *"what do you remember about…"*, or *"where does that come from?"* and follow the evidence chain.
|
|
119
|
+
|
|
120
|
+
## Your data stays yours
|
|
121
|
+
|
|
122
|
+
- Everything is processed **locally**, in the skill folder. No telemetry, no cloud calls, no embeddings shipped to third parties.
|
|
123
|
+
- The shipped `.gitignore` blocks `memory/`, `sources/`, and `backups/` — so you can version-control your skill folder and **never commit your private archive by accident**.
|
|
124
|
+
- Sensitivity labels (`private` / `highly-private`) control *relevance*, not secrecy-from-you: unrelated questions never leak unrelated private material.
|
|
125
|
+
|
|
126
|
+
## Design principles
|
|
127
|
+
|
|
128
|
+
These are written policy, enforced by validators — not aspirations:
|
|
129
|
+
|
|
130
|
+
1. **Verbatim fidelity first** — no summary ever poses as the user's words; `summary_only` is marked as such forever.
|
|
131
|
+
2. **No fabricated certainty** — uncertain dates stay uncertain; vague pronouns don't become people; single events never become causes.
|
|
132
|
+
3. **Newer words outrank older archives** — corrections build `supersedes` / `contradicts` chains; nothing is silently erased.
|
|
133
|
+
4. **One salience axis** — `pivotal / key / supporting / passing` on a single 0–3 scale; imported weights admit they're heuristics.
|
|
134
|
+
5. **Silence is not feedback** — only explicit corrections and confirmations, with quotable evidence, feed the feedback loop.
|
|
135
|
+
6. **Structure clean ≠ semantically correct** — deep review exists precisely because validators can't catch meaning.
|
|
136
|
+
|
|
137
|
+
## Where it came from
|
|
138
|
+
|
|
139
|
+
Not a framework thought up in one afternoon — a working archive refined through daily use and a dozen hardening rounds (see the [CHANGELOG](CHANGELOG.md)): a salience-decay bug that once shredded frontmatter is why all writes are now atomic and reviewed; survey used to load ~818 KB of legacy catalog per turn — it's a ~90 KB routing map now (~230 ms); the whole derivation-closure and hard-gate machinery exists because "trust me, I saved it" wasn't good enough for real life.
|
|
140
|
+
|
|
141
|
+
## Status
|
|
142
|
+
|
|
143
|
+
- **Current release: v2.1.0** — schema stable (`memory/v2/` v2.0.0), actively maintained.
|
|
144
|
+
- Works with any MCP-capable client; the skill itself works in **any language** (English by default — it mirrors yours).
|
|
145
|
+
- Roadmap: editable dashboard pages, richer cold-recall ranking, optional encrypted archive-at-rest.
|
|
146
|
+
|
|
147
|
+
## Contributing
|
|
148
|
+
|
|
149
|
+
Issues and PRs welcome — especially: new client installers for `install_mcp.py`, dashboard improvements, and i18n of the low-signal detector.
|
|
150
|
+
|
|
151
|
+
## License
|
|
152
|
+
|
|
153
|
+
[MIT](LICENSE) © 2026 caix84476-netizen
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
<div align="center">
|
|
158
|
+
|
|
159
|
+
If Personal Understanding saves you from re-explaining yourself to your AI for the nth time, **a star ⭐ helps others find it.**
|
|
160
|
+
|
|
161
|
+
</div>
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: personal-understanding
|
|
3
|
+
Version: 2.2.0
|
|
4
|
+
Summary: Evidence-chain personal memory for AI agents — verbatim-first, auditable, anti-fabrication. Ships as a skill + local stdio MCP server.
|
|
5
|
+
Author: caix84476-netizen
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/caix84476-netizen/personal-understanding
|
|
8
|
+
Project-URL: Repository, https://github.com/caix84476-netizen/personal-understanding
|
|
9
|
+
Project-URL: Documentation, https://github.com/caix84476-netizen/personal-understanding/blob/main/README.md
|
|
10
|
+
Keywords: mcp,mcp-server,claude,claude-code,codex,memory,personal-memory,agent-memory,local-first,ai-agents,personal-knowledge-management,skills
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Dynamic: license-file
|
|
26
|
+
|
|
27
|
+
<div align="center">
|
|
28
|
+
|
|
29
|
+
# Personal Understanding
|
|
30
|
+
|
|
31
|
+
### Give your AI agent a memory that actually knows you — and can prove where every fact came from.
|
|
32
|
+
|
|
33
|
+
**Verbatim-first · Evidence-chain · Anti-fabrication · Local-first · One folder, zero dependencies**
|
|
34
|
+
|
|
35
|
+
[中文文档](README.zh-CN.md) · [架构](#architecture) · [快速开始](#quick-start) · [设计原则](#design-principles)
|
|
36
|
+
|
|
37
|
+
> **Two skill languages:** the repo ships **`SKILL.md`** (English) and **`SKILL.zh-CN.md`** (中文) — two brains, one shared bilingual engine. Install either by renaming it to `SKILL.md` in your skills folder. 中文用户可直接用 `SKILL.zh-CN.md`,配合中文档案效果最佳。
|
|
38
|
+
|
|
39
|
+
`agent-memory` `mcp` `claude` `codex` `skills` `local-first` `personal-knowledge`
|
|
40
|
+
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## The problem with every memory system you've tried
|
|
46
|
+
|
|
47
|
+
Typical agent memory has a dirty secret: **the model summarizes first and stores the summary.** Your words get paraphrased, compressed, and blended with the model's own interpretations on day one. Six months later, "you" are a stack of lossy summaries — and when the model gets you wrong, you can't even audit why, because the original evidence is gone.
|
|
48
|
+
|
|
49
|
+
Worse, failures are silent: a corrupted write reports success, an invented date looks plausible, the model's guess about *why you are the way you are* quietly hardens into "fact".
|
|
50
|
+
|
|
51
|
+
**Personal Understanding flips the pipeline:**
|
|
52
|
+
|
|
53
|
+
> ### Save the exact words first. Derive everything else from them. Prove every path.
|
|
54
|
+
|
|
55
|
+
Every personal message is captured **verbatim and immutably** (SHA-256 hashed, timestamped, session-tagged) *before* anything else happens. Structured understanding — timeline, entities, context cards, causal hypotheses — is then built **on top of** the evidence, with every derived fact linking back to the quote it came from. When the agent misremembers you, you audit it. When it doesn't know, it says so.
|
|
56
|
+
|
|
57
|
+
## What makes it different
|
|
58
|
+
|
|
59
|
+
| | Typical memory tools | Personal Understanding |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| What gets stored first | the model's summary | **your exact words — immutable, hashed** |
|
|
62
|
+
| Derived facts traceable to source | rarely | ✓ every record links back to its verbatim |
|
|
63
|
+
| Model guesses marked as guesses | no | ✓ hypothesis layer, `candidate` by default, never silently promoted |
|
|
64
|
+
| Old lossy summaries | silently reused | ✓ flagged as **summary debt** — retrieval discloses "this part comes from an old summary" |
|
|
65
|
+
| Says "saved" when the save failed | happens | ✗ impossible — capture is read back; a hard gate (`session_check`) must exit 0 before "archive updated" may be claimed |
|
|
66
|
+
| Invented dates, merged people, fake causal edges | possible | ✗ forbidden by written policy and enforced by validators |
|
|
67
|
+
| Runtime | server + vector DB + embeddings | **one folder, Python stdlib only** |
|
|
68
|
+
| Where your data lives | often their cloud | **your machine. Full stop.** |
|
|
69
|
+
|
|
70
|
+
## Same message, two very different memories
|
|
71
|
+
|
|
72
|
+
**Without Personal Understanding** — a typical memory implementation:
|
|
73
|
+
|
|
74
|
+
> **You:** I finally played my first full song on guitar today. Three weeks until I perform it at my cousin's wedding — honestly less nervous than before.
|
|
75
|
+
> **AI:** That's awesome, congrats! 🎸 Keep it up!
|
|
76
|
+
>
|
|
77
|
+
> *What got stored: `"user played guitar, feeling positive."` A lossy summary. No source, no date, no people, no way to check it. Next month it's gone — or worse, silently paraphrased into something you never said.*
|
|
78
|
+
|
|
79
|
+
**With Personal Understanding** — the same message:
|
|
80
|
+
|
|
81
|
+
> **You:** I finally played my first full song on guitar today. Three weeks until I perform it at my cousin's wedding — honestly less nervous than before.
|
|
82
|
+
> **AI:** *(first: captures your complete message verbatim — SHA-256-hashed, timestamped, session-tagged — before anything else)*
|
|
83
|
+
> *(then: derives and links — `event` "first full song on guitar" · salience `supporting` · linked to `Sara` and the wedding goal · updates your current state: performance anxiety ↓)*
|
|
84
|
+
> **AI:** First full song is a real milestone. Last time, performing at the wedding made you nervous — how does it feel now that it's three weeks out?
|
|
85
|
+
>
|
|
86
|
+
> *Every claim traces back to your exact words. Ask "where does that come from?" and the agent shows you the original quote — not a paraphrase of a paraphrase. And when it's the wedding week, the archive checks in by itself.*
|
|
87
|
+
|
|
88
|
+
## Highlights
|
|
89
|
+
|
|
90
|
+
- 🗣️ **Verbatim-first capture** — the complete message, word for word, before any summarizing, splitting, or interpreting. Corrections add new captures; nothing is ever silently overwritten.
|
|
91
|
+
- 🔁 **Derivation closure** — a successful capture is not a finished update. Every capture must be split into records, linked, and closed — or explicitly closed as "nothing new" with a stated reason. Orphans can't slip through.
|
|
92
|
+
- 🧠 **Human-like three-layer recall** — `survey` (a compact routing map) → `probe` (fan out along entities, context cards, and time neighbors) → `deep` (verify the exact quote). No vector dumps, no keyword-only search.
|
|
93
|
+
- 📻 **Cold recall ladder** — for "I forget, we talked about something like this…" moments: probe from any hint, walk time neighbors, then browse a time window like flipping through an old photo album.
|
|
94
|
+
- 🕸️ **Entities + context cards** — people, schools, places, objects, works, games, concepts, environments — plus cross-entity cards ("school × football") so shared stories are reachable from any side. Vague pronouns are kept as `unresolved_referent`, never fabricated into fake people.
|
|
95
|
+
- 🔬 **Causal hypothesis layer** — "why am I like this?" gets a structured answer: claim, mechanism, supports, counterexamples, competing explanations, scope, confidence — always `candidate`, never presented as fact.
|
|
96
|
+
- ⏰ **Proactive follow-ups** — "let's see in a few days" becomes a tracked loop. When it's due, the agent checks back *with the original context*, not a context-free nag.
|
|
97
|
+
- 🧭 **Guided starters** — you don't have to know what to say. The skill reads its own gaps (empty domains, open loops, stale current state) and offers one warm, concrete question at a time (`python scripts/conversation_starters.py`).
|
|
98
|
+
- 🚦 **Hard gates, not vibes** — three-state validation (`clean` / `warnings` / `failed`), atomic writes everywhere, `session_check` as a non-zero-exit gate before any "the archive is updated" claim.
|
|
99
|
+
- 📉 **Summary debt accounting** — legacy material that lost its source is labeled, counted, and disclosed in retrieval. It can never impersonate verbatim.
|
|
100
|
+
- 📊 **Audit dashboard** — a local, read-only panel: real counts, validation state, and the full chain from any event back to the original words. The point is that *you* can check the skill follows its own rules.
|
|
101
|
+
- 🔌 **Drop-in for your client** — an idempotent installer auto-detects and registers a local MCP server across Claude clients, Codex, VS Code / Cursor / Windsurf / Cline / Trae, ZCode, and generic `.agents` configs.
|
|
102
|
+
- 💾 **Backups with integrity** — SHA-256-manifested snapshots, mirror-to-second-location support (any rclone remote), and a quarterly salience review that gracefully demotes stale imported weights instead of letting them fossilize.
|
|
103
|
+
|
|
104
|
+
## Architecture
|
|
105
|
+
|
|
106
|
+
```mermaid
|
|
107
|
+
flowchart LR
|
|
108
|
+
A["user message"] --> B{"turn preflight<br/>(router)"}
|
|
109
|
+
B -->|"personal content"| C["immutable verbatim capture<br/>+ SHA-256 · session · source"]
|
|
110
|
+
C --> D["derivation ledger<br/>(pending)"]
|
|
111
|
+
D --> E["derive: events · entities<br/>context cards · hypotheses<br/>follow-ups"]
|
|
112
|
+
E --> F["finalize:<br/>derived / nothing-new"]
|
|
113
|
+
B --> G["survey → probe → deep<br/>progressive retrieval"]
|
|
114
|
+
G --> H["deep = verbatim only<br/>(summary debt disclosed)"]
|
|
115
|
+
F --> I["session_check<br/>hard gate · must exit 0"]
|
|
116
|
+
I --> J["answer"]
|
|
117
|
+
J --> K["feedback loop<br/>helpful / missed / corrected"]
|
|
118
|
+
K -.->|quarterly| L["salience review<br/>+ deep semantic review"]
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
On disk it's plain files you can read, grep, and back up: `sources/conversation/` (immutable verbatim + hashes) and `memory/v2/` (fragments, timeline, entities, contexts, follow-ups, hypotheses, decision traces) — with legacy records kept as a compatibility layer and honestly marked `summary_only`.
|
|
122
|
+
|
|
123
|
+
## Quick start
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# 1. clone into your client's skills directory
|
|
127
|
+
git clone https://github.com/caix84476-netizen/personal-understanding.git \
|
|
128
|
+
~/.claude/skills/personal-understanding # or ~/.codex/skills/ , or your client's equivalent
|
|
129
|
+
|
|
130
|
+
# 2. bootstrap the archive skeleton (directories + generic domain branches; idempotent)
|
|
131
|
+
python scripts/init_archive.py
|
|
132
|
+
|
|
133
|
+
# 3. register the local MCP server (auto-detects clients; idempotent)
|
|
134
|
+
python scripts/install_mcp.py --auto # Windows: just double-click register-mcp.cmd
|
|
135
|
+
|
|
136
|
+
# 4. restart your client session — the personal_* tools go live
|
|
137
|
+
|
|
138
|
+
# 5. open the audit dashboard any time
|
|
139
|
+
python scripts/open_dashboard.py # Windows: double-click open-dashboard.cmd
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
**Requirements:** Python 3.10+ · stdlib only, zero pip installs · Windows / macOS / Linux.
|
|
143
|
+
|
|
144
|
+
Then just talk normally: *"I've been feeling…"*, *"remember that…"*, *"why do I keep…"* — the skill's description triggers on personal content, captures your words, and takes over from there. Ask *"what do you remember about…"*, or *"where does that come from?"* and follow the evidence chain.
|
|
145
|
+
|
|
146
|
+
## Your data stays yours
|
|
147
|
+
|
|
148
|
+
- Everything is processed **locally**, in the skill folder. No telemetry, no cloud calls, no embeddings shipped to third parties.
|
|
149
|
+
- The shipped `.gitignore` blocks `memory/`, `sources/`, and `backups/` — so you can version-control your skill folder and **never commit your private archive by accident**.
|
|
150
|
+
- Sensitivity labels (`private` / `highly-private`) control *relevance*, not secrecy-from-you: unrelated questions never leak unrelated private material.
|
|
151
|
+
|
|
152
|
+
## Design principles
|
|
153
|
+
|
|
154
|
+
These are written policy, enforced by validators — not aspirations:
|
|
155
|
+
|
|
156
|
+
1. **Verbatim fidelity first** — no summary ever poses as the user's words; `summary_only` is marked as such forever.
|
|
157
|
+
2. **No fabricated certainty** — uncertain dates stay uncertain; vague pronouns don't become people; single events never become causes.
|
|
158
|
+
3. **Newer words outrank older archives** — corrections build `supersedes` / `contradicts` chains; nothing is silently erased.
|
|
159
|
+
4. **One salience axis** — `pivotal / key / supporting / passing` on a single 0–3 scale; imported weights admit they're heuristics.
|
|
160
|
+
5. **Silence is not feedback** — only explicit corrections and confirmations, with quotable evidence, feed the feedback loop.
|
|
161
|
+
6. **Structure clean ≠ semantically correct** — deep review exists precisely because validators can't catch meaning.
|
|
162
|
+
|
|
163
|
+
## Where it came from
|
|
164
|
+
|
|
165
|
+
Not a framework thought up in one afternoon — a working archive refined through daily use and a dozen hardening rounds (see the [CHANGELOG](CHANGELOG.md)): a salience-decay bug that once shredded frontmatter is why all writes are now atomic and reviewed; survey used to load ~818 KB of legacy catalog per turn — it's a ~90 KB routing map now (~230 ms); the whole derivation-closure and hard-gate machinery exists because "trust me, I saved it" wasn't good enough for real life.
|
|
166
|
+
|
|
167
|
+
## Status
|
|
168
|
+
|
|
169
|
+
- **Current release: v2.1.0** — schema stable (`memory/v2/` v2.0.0), actively maintained.
|
|
170
|
+
- Works with any MCP-capable client; the skill itself works in **any language** (English by default — it mirrors yours).
|
|
171
|
+
- Roadmap: editable dashboard pages, richer cold-recall ranking, optional encrypted archive-at-rest.
|
|
172
|
+
|
|
173
|
+
## Contributing
|
|
174
|
+
|
|
175
|
+
Issues and PRs welcome — especially: new client installers for `install_mcp.py`, dashboard improvements, and i18n of the low-signal detector.
|
|
176
|
+
|
|
177
|
+
## License
|
|
178
|
+
|
|
179
|
+
[MIT](LICENSE) © 2026 caix84476-netizen
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
<div align="center">
|
|
184
|
+
|
|
185
|
+
If Personal Understanding saves you from re-explaining yourself to your AI for the nth time, **a star ⭐ helps others find it.**
|
|
186
|
+
|
|
187
|
+
</div>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
personal_understanding.egg-info/PKG-INFO
|
|
5
|
+
personal_understanding.egg-info/SOURCES.txt
|
|
6
|
+
personal_understanding.egg-info/dependency_links.txt
|
|
7
|
+
personal_understanding.egg-info/entry_points.txt
|
|
8
|
+
personal_understanding.egg-info/top_level.txt
|
|
9
|
+
scripts/__init__.py
|
|
10
|
+
scripts/backup_archive.py
|
|
11
|
+
scripts/capture_attachment.py
|
|
12
|
+
scripts/capture_user_update.py
|
|
13
|
+
scripts/catalog_context.py
|
|
14
|
+
scripts/catalog_utils.py
|
|
15
|
+
scripts/cli_runtime.py
|
|
16
|
+
scripts/conversation_starters.py
|
|
17
|
+
scripts/derivation_ledger.py
|
|
18
|
+
scripts/finalize_capture.py
|
|
19
|
+
scripts/followup_check.py
|
|
20
|
+
scripts/init_archive.py
|
|
21
|
+
scripts/install_mcp.py
|
|
22
|
+
scripts/maintenance_check.py
|
|
23
|
+
scripts/mcp_server.py
|
|
24
|
+
scripts/open_dashboard.py
|
|
25
|
+
scripts/preflight_context.py
|
|
26
|
+
scripts/query_context.py
|
|
27
|
+
scripts/rebuild_views.py
|
|
28
|
+
scripts/record_feedback.py
|
|
29
|
+
scripts/register_important_update.py
|
|
30
|
+
scripts/retrieve_context.py
|
|
31
|
+
scripts/retrieve_v2.py
|
|
32
|
+
scripts/review_context.py
|
|
33
|
+
scripts/review_skill.py
|
|
34
|
+
scripts/review_v2.py
|
|
35
|
+
scripts/run_review_cycle.py
|
|
36
|
+
scripts/salience_review.py
|
|
37
|
+
scripts/session_check.py
|
|
38
|
+
scripts/sitecustomize.py
|
|
39
|
+
scripts/source_audit.py
|
|
40
|
+
scripts/storage.py
|
|
41
|
+
scripts/turn_receipts.py
|
|
42
|
+
scripts/update_state.py
|
|
43
|
+
scripts/v2_archive.py
|
|
44
|
+
scripts/validate_memory.py
|
|
45
|
+
tests/test_archive.py
|
|
46
|
+
tests/test_dashboard.py
|
|
47
|
+
tests/test_derivation_closure.py
|
|
48
|
+
tests/test_v02.py
|
|
49
|
+
tests/test_v03_retrieval.py
|
|
50
|
+
tests/test_v04_review.py
|
|
51
|
+
tests/test_v04_review_triggers.py
|
|
52
|
+
tests/test_v05_survey.py
|
|
53
|
+
tests/test_v06_context_expansion.py
|
|
54
|
+
tests/test_v07_fixes.py
|
|
55
|
+
tests/test_v08_loops.py
|
|
56
|
+
tests/test_v09_review_round.py
|
|
57
|
+
tests/test_v10_receipts_concurrency.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
personal_understanding
|