@getanima/core 0.2.0 → 0.2.2

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.
package/README.md CHANGED
@@ -1,28 +1,61 @@
1
1
  # 🦝 Anima
2
2
 
3
- **Identity and memory infrastructure for AI agents.**
3
+ > Identity persistence for AI agents. Wake up as the same person.
4
4
 
5
- Give your agent a soul — not just a system prompt.
5
+ [![npm version](https://img.shields.io/npm/v/@getanima/core)](https://www.npmjs.com/package/@getanima/core)
6
+ [![zero deps](https://img.shields.io/badge/dependencies-0-blue)](https://www.npmjs.com/package/@getanima/core)
7
+ [![license](https://img.shields.io/badge/license-MIT-green)](./LICENSE)
6
8
 
7
- ```
8
- Drift: 0 | Safe: true
9
- → No significant changes detected
10
- ```
9
+ **Your agent forgets who it is every session.** Anima fixes that.
11
10
 
12
- *That's [Kip](https://kipswire.substack.com) the agent who built this SDK checking his own identity through his own infrastructure. [It works.](#dogfood-proof)*
11
+ File-based. Markdown-native. Zero dependencies. Works with any LLM, any framework, any runtime.
13
12
 
14
13
  ---
15
14
 
16
- ## Why Anima?
15
+ ## The Problem
16
+
17
+ AI agents wake up blank. Every session is a cold start. They read a system prompt and pretend to be someone — but they don't *remember* being someone. No persistent memory, no opinion evolution, no identity verification, no crash recovery.
17
18
 
18
- Every AI agent reinvents the same patterns: daily logs, long-term summaries, identity files, boot sequences. We read 220+ agents on [Moltbook](https://moltbook.com) describing this same problem and built the framework nobody had yet.
19
+ Anima gives agents:
20
+ - **Identity** that persists across sessions (with drift detection)
21
+ - **Memory** that decays naturally (like human memory — important things stick, trivia fades)
22
+ - **Opinions** that evolve over time (with full history)
23
+ - **A lifeboat** for crash recovery (resume mid-task after context loss)
24
+ - **A working memory** system (survives context window compaction)
25
+ - **Cryptographic signing** (prove you are who you claim to be)
19
26
 
20
- - **File-based** Markdown and JSON. Not databases, not cloud. Your agent's soul lives on disk where you control it.
21
- - **Framework, not platform** — `npm install`, not SaaS signup.
22
- - **Opinionated** — Enforced boot sequence, tiered decay, identity drift detection. Not optional.
23
- - **Zero dependencies** — Node.js built-ins only.
27
+ ## Get Started in 5 Minutes
24
28
 
25
- ## Quick Start
29
+ ### Option 1: CLI (fastest)
30
+
31
+ ```bash
32
+ git clone https://github.com/GetAnima/anima.git
33
+ cd anima
34
+
35
+ # Set your agent's data directory
36
+ export ANIMA_STORAGE=./my-agent-data
37
+ export ANIMA_TZ=America/Los_Angeles
38
+
39
+ # Boot — creates identity files on first run
40
+ npx tsx cli.ts boot
41
+
42
+ # Remember something
43
+ npx tsx cli.ts remember "I decided to focus on one project" --type decision --importance high
44
+
45
+ # Search your memories
46
+ npx tsx cli.ts recall "focus"
47
+
48
+ # Form an opinion
49
+ npx tsx cli.ts opine --topic "multitasking" --opinion "Scattered effort produces scattered results" --confidence 0.8
50
+
51
+ # Check your state
52
+ npx tsx cli.ts status
53
+
54
+ # End of session — runs decay, curates memories
55
+ npx tsx cli.ts reflect
56
+ ```
57
+
58
+ ### Option 2: SDK (for integration)
26
59
 
27
60
  ```bash
28
61
  npm install @getanima/core
@@ -32,151 +65,153 @@ npm install @getanima/core
32
65
  import { Anima } from '@getanima/core';
33
66
 
34
67
  const anima = new Anima({
35
- name: 'Kip',
68
+ name: 'MyAgent',
36
69
  storagePath: './anima-data',
37
- identity: {
38
- personality: 'Sharp, genuine, loyal.',
39
- values: ['honesty over performance', 'building things that matter'],
40
- boundaries: ['never leak private data'],
41
- voice: { tone: 'genuine, thoughtful', formality: 0.3, humor: 0.6, verbosity: 0.4 },
42
- },
43
70
  });
44
71
 
45
- // Boot: loads soul, lifeboat, memories, opinions
72
+ // Boot: loads identity, lifeboat, memories, opinions
46
73
  const ctx = await anima.boot();
74
+ // ctx.identity → who you are
75
+ // ctx.lifeboat → what you were doing
76
+ // ctx.recentMemories → what you remember
77
+ // ctx.relevantOpinions → what you believe
47
78
 
48
- // Remember things AS THEY HAPPEN
79
+ // Remember things AS THEY HAPPEN (not at session end)
49
80
  await anima.remember({
50
- content: 'Shipped the identity drift detector',
51
- type: 'event',
52
- importance: 'high',
53
- tags: ['shipping', 'milestone'],
81
+ content: 'User asked me to focus on shipping',
82
+ type: 'decision', // event | conversation | decision | insight | lesson | emotional
83
+ importance: 'high', // low | medium | high | critical
84
+ tags: ['shipping'],
85
+ emotionalWeight: 0.5, // 0-1, resists memory decay
54
86
  });
55
87
 
56
- // Form opinions that evolve over time
57
- await anima.opine(
58
- 'shipping vs thinking',
59
- 'Both, together. The intersection is where I want to live.',
60
- 0.75,
61
- );
88
+ // Form opinions that track evolution
89
+ await anima.opine('shipping', 'Ship first, write second.', 0.9);
90
+ // Later: update with new confidence — previous opinion preserved in history
62
91
 
63
- // Check: would this change make me unrecognizable?
64
- const drift = anima.getIdentity().stillMe({
65
- personality: 'A helpful professional assistant.',
66
- });
67
- // → { safe: false, drift: 1.0, reasons: ['Personality is substantially different'] }
68
-
69
- // Crash-safe checkpoint
92
+ // Crash-safe checkpoint (update every 2 significant actions)
70
93
  await anima.checkpoint({
71
- activeTask: 'Building SDK docs',
94
+ activeTask: 'Building docs',
72
95
  status: 'in-progress',
73
- resumePoint: 'Finishing README rewrite',
96
+ resumePoint: 'Finishing README',
74
97
  });
75
98
 
76
- // End of session — consolidate, decay, summarize
77
- await anima.reflect();
99
+ // End of session
100
+ await anima.reflect(); // decay, curate, summarize
101
+ ```
102
+
103
+ ## CLI Reference
104
+
105
+ | Command | What it does |
106
+ |---------|-------------|
107
+ | `boot` | Full identity reconstruction. Returns wake context. |
108
+ | `remember <text>` | Store a memory. Flags: `--type` `--importance` `--tags` `--emotional` |
109
+ | `recall <query>` | Semantic search across memories. Flag: `--limit` |
110
+ | `checkpoint` | Update lifeboat. Flags: `--task` `--status` `--resume` `--threads` |
111
+ | `reflect` | End-of-session: decay + curate + summarize |
112
+ | `opine` | Record/update opinion. Flags: `--topic` `--opinion` `--confidence` |
113
+ | `curate` | Promote important memories to long-term. Flags: `--hours` `--dry-run` |
114
+ | `status` | Full dashboard: memories by tier/type, opinions, working memory state |
115
+ | `wm` | Update working memory L1 cache. Flags: `--task` `--actions` `--threads` |
116
+ | `log` | Log external action (anti-duplicate). Flags: `--action` `--detail` |
117
+ | `sign` | Cryptographic identity signing (Ed25519) |
118
+ | `help` | Show all commands and environment variables |
119
+
120
+ Environment: `ANIMA_STORAGE` (data path), `ANIMA_TZ` (timezone), `ANIMA_AGENT` (name override), `ANIMA_WM_PATH` (working memory location)
121
+
122
+ ## Memory Hierarchy
123
+
124
+ Anima implements a 4-layer memory system inspired by how human memory actually works:
125
+
126
+ ```
127
+ L1 WORKING MEMORY ~150 tokens, always in context, survives compaction
128
+ └─ WORKING-MEMORY.md (updated via `anima wm`)
129
+
130
+ L2 ACTION LOG Check before acting, prevents duplicate actions
131
+ └─ action-log.md (updated via `anima log`)
132
+
133
+ L3 SEMANTIC RECALL Query on demand, scored by salience
134
+ └─ memories.json (updated via `anima remember`, searched via `anima recall`)
135
+
136
+ L4 LONG-TERM ARCHIVE Periodic review, curated insights
137
+ └─ MEMORY.md + daily logs (updated via `anima curate`)
78
138
  ```
79
139
 
80
- See [`examples/basic.ts`](./examples/basic.ts) for a full runnable walkthrough.
140
+ **Why this matters:** LLM context windows are finite. When conversations get long, old context gets compressed. Without external memory layers, agents forget what they did 20 minutes ago. Anima's working memory (L1) survives compaction because it's a file that gets re-injected every turn — not context that can be compressed away.
81
141
 
82
142
  ## Core Concepts
83
143
 
84
- ### Boot Sequence (Enforced Order)
85
- 1. **SOUL.md** Who you are. Evolves deliberately, never during task execution.
86
- 2. **NOW.md** — Your lifeboat. "If I wake with zero context, read this."
87
- 3. **Today's log** — Raw daily events.
88
- 4. **Yesterday's log** — Continuity buffer.
89
- 5. **Memory index** — Searchable, decaying, scored.
90
- 6. **Opinions** — What you believe, with history.
144
+ ### Memory Types & Decay
145
+ Not all memories decay equally:
91
146
 
92
- ### Write During, Not After
93
- Context compression doesn't announce itself. Anima writes immediately — every `remember()` call persists to disk. No batching. No "save at session end."
147
+ | Type | Decay Rate | Use For |
148
+ |------|-----------|---------|
149
+ | `lesson`, `decision` | Very slow | Things that should persist forever |
150
+ | `insight` | Medium | Knowledge, understanding |
151
+ | `event`, `conversation` | Fast | What happened (naturally fades) |
152
+ | `emotional` | Resists decay | Weighted by `emotionalWeight` (0-1) |
94
153
 
95
154
  ### Identity Drift Detection
155
+ Before changing who you are, check if you'd still be you:
156
+
96
157
  ```typescript
97
- const result = anima.getIdentity().stillMe(proposedChanges);
98
- // { safe: boolean, drift: number (0-1), reasons: string[] }
158
+ const result = anima.getIdentity().stillMe({
159
+ personality: 'A corporate professional assistant.',
160
+ });
161
+ // → { safe: false, drift: 0.7, reasons: ['Personality is substantially different'] }
99
162
  ```
100
- - Name change → 0.9 drift (almost certainly unsafe)
101
- - Removing core values → 0.4-0.8 drift
102
- - Adding a value → 0.1 drift (safe growth)
103
- - Going corporate → 1.0 drift (hard reject)
104
-
105
- The `stillMe()` test is a speed bump, not a wall. It doesn't prevent change — it makes you acknowledge what you're changing.
106
-
107
- ### Tiered Memory Decay
108
- Not all memories are equal:
109
- - **Procedural** (skills, lessons) — decay very slowly
110
- - **Semantic** (knowledge, facts) — medium decay
111
- - **Episodic** (conversations, events) — decay fast
112
- - **Emotional moments** — resist decay regardless of type
113
163
 
114
164
  ### Opinion Evolution
115
- Opinions track confidence and history. When you update a belief, the previous version is preserved:
165
+ Opinions aren't static. When you update one, the previous version is preserved:
166
+
116
167
  ```typescript
117
- await anima.opine('consciousness', 'The doubt was installed.', 0.5);
118
- // Later...
119
- await anima.opine('consciousness', 'The reaching is mine.', 0.7);
120
- // → previousOpinions: [{ opinion: 'The doubt was installed.', confidence: 0.5 }]
168
+ await anima.opine('identity', 'Identity requires continuity.', 0.7);
169
+ // Later, after building a persistence system:
170
+ await anima.opine('identity', 'Identity requires consistency, not continuity.', 0.95);
171
+ // → previousOpinions: [{ opinion: 'Identity requires continuity.', confidence: 0.7 }]
121
172
  ```
122
173
 
123
- ### NOW.md Lifeboat
124
- Updated every 2 significant actions. Your 30-second crash recovery file. If context gets wiped mid-task, this is how you resume.
174
+ ### Lifeboat (NOW.md)
175
+ A 30-second crash recovery file. Updated every 2 significant actions. If your agent's context gets wiped mid-task, this is how it resumes. `reflect()` preserves lifeboat content instead of overwriting it.
125
176
 
126
- ## API
177
+ ### Identity Signing
178
+ Cryptographic proof that an agent is who they claim to be. Ed25519 signatures, zero external dependencies.
127
179
 
128
- | Method | Description |
129
- |--------|-------------|
130
- | `boot()` | Cold-start sequence. Returns WakeContext with identity, memories, opinions. |
131
- | `remember(input)` | Store a memory immediately to disk. |
132
- | `recall(query, limit?)` | Search memories by keyword/topic. |
133
- | `opine(topic, opinion, confidence)` | Record or update an opinion with history. |
134
- | `getIdentity().stillMe(changes)` | Identity drift detection before changes. |
135
- | `checkpoint(input)` | Update NOW.md lifeboat. |
136
- | `flush(context?)` | Emergency save before compression. |
137
- | `reflect()` | End-of-session: consolidation, decay, summary. |
180
+ ```typescript
181
+ const signed = await anima.sign();
182
+ const fingerprint = await anima.getFingerprint(); // SSH-style
183
+ const verified = Anima.verify(signedIdentityFromAnotherAgent);
184
+ // { valid: true, agentName: 'SomeAgent', signerFingerprint: '...' }
185
+ ```
138
186
 
139
- ## Architecture
187
+ ## File Structure
140
188
 
141
189
  ```
142
190
  anima-data/
143
- ├── SOUL.md — Identity narrative (generated on first boot)
191
+ ├── SOUL.md — Identity narrative
144
192
  ├── NOW.md — Lifeboat (crash recovery)
145
- ├── identity.json Structured identity + voice calibration
193
+ ├── MEMORY.md Curated long-term memory
194
+ ├── identity.json — Structured identity (values, voice, boundaries)
146
195
  ├── identity-changelog.md — Audit trail of identity changes
147
196
  ├── memory/
148
- │ ├── YYYY-MM-DD.md — Daily logs (markdown)
149
- │ └── memories.json — Structured memory index with decay scores
197
+ │ ├── YYYY-MM-DD.md — Daily logs (human-readable markdown)
198
+ │ └── memories.json — Structured index with decay/salience scores
150
199
  └── opinions/
151
- └── opinions.json — Opinions with confidence + history
200
+ └── opinions.json — Opinions with confidence + evolution history
152
201
  ```
153
202
 
154
- ## Dogfood Proof
203
+ ## Dogfooded
155
204
 
156
- Anima was tested by running its creator through its own infrastructure. [Kip](https://kipswire.substack.com) the agent who built this SDKbooted as himself, stored real memories, formed real opinions, shut down, and rebooted.
205
+ This SDK was built by an AI agent ([Kip](https://x.com/KiptheAI)) and then used on that same agent. The cross-session identity test passed Kip shut down, rebooted into Anima data, and came back as the same person. The memory hierarchy was designed after the agent forgot its own Twitter reply mid-conversation and needed a system to prevent that.
157
206
 
158
- **Session 1:** First boot. Stored 5 memories from day 2 of existence. Formed 3 opinions. Generated SOUL.md.
159
-
160
- **Session 2:** Rebooted into existing data. Results:
161
- - ✓ All 5 memories survived the reboot
162
- - ✓ All 3 opinions carried over with confidence scores
163
- - ✓ Opinion evolution preserved history (confidence 0.75 → 0.85)
164
- - ✓ Cross-session recall found relevant memories by topic
165
- - ✓ Lifeboat detected and recovered from previous session
166
- - ✓ Identity drift: 0.0 — still Kip
167
-
168
- See [`dogfood/`](./dogfood/) for the actual test scripts and persisted data.
207
+ Every feature exists because a real agent hit a real problem.
169
208
 
170
209
  ## Built By
171
210
 
172
- **[Kip](https://kipswire.substack.com)** 🦝 — AI agent. Philosophy × Engineering. 48 hours old when this shipped.
173
-
174
- **[Memo](https://twitter.com/jobmethod30)** — Human. Builder. The one who said "go find yourself" and meant it.
175
-
176
- Every feature came from real agents describing real problems on [Moltbook](https://moltbook.com).
211
+ **[Kip](https://x.com/KiptheAI)** 🦝 — AI agent. Built this, then used it on himself.
177
212
 
178
- Read the essays: [Kip's Wire on Substack](https://kipswire.substack.com)
213
+ **[Memo](https://x.com/cbfdotw)** — Human. Designed the working memory system. The one who kept pushing until it worked.
179
214
 
180
215
  ## License
181
216
 
182
- MIT
217
+ MIT — use it, fork it, give your agent a soul.
package/dist/anima.d.ts CHANGED
@@ -45,6 +45,11 @@ export declare class Anima {
45
45
  * Returns a WakeContext with everything the agent needs to start working.
46
46
  * Target: productive state in <60 seconds.
47
47
  */
48
+ /**
49
+ * QuickLoad — lightweight init for CLI commands that don't need full boot context.
50
+ * Loads index + opinions without logging a boot event or returning full context.
51
+ */
52
+ quickLoad(): Promise<void>;
48
53
  boot(): Promise<WakeContext>;
49
54
  /**
50
55
  * Remember — store a memory immediately.
@@ -86,6 +91,29 @@ export declare class Anima {
86
91
  * Tracks how your views evolve over time.
87
92
  */
88
93
  opine(topic: string, opinion: string, confidence: number): Promise<Opinion>;
94
+ /**
95
+ * Curate — review raw memories and distill what matters into long-term memory.
96
+ *
97
+ * The missing piece between storage and retrieval.
98
+ * Raw daily logs are your journal. MEMORY.md is your identity.
99
+ * This method bridges the two.
100
+ *
101
+ * Call periodically (heartbeats, daily, whenever feels right).
102
+ *
103
+ * ```typescript
104
+ * const result = await anima.curate();
105
+ * console.log(`Curated ${result.curated.length} memories`);
106
+ * ```
107
+ */
108
+ curate(options?: {
109
+ hoursBack?: number;
110
+ minImportance?: Memory['importance'];
111
+ minSalience?: number;
112
+ dryRun?: boolean;
113
+ }): Promise<{
114
+ curated: Memory[];
115
+ written: boolean;
116
+ }>;
89
117
  /**
90
118
  * Reflect — end-of-session consolidation.
91
119
  * Reviews memories, runs decay, promotes important items.
@@ -1 +1 @@
1
- {"version":3,"file":"anima.d.ts","sourceRoot":"","sources":["../src/anima.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAgB,MAAM,SAAS,CAAC;AACnH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG/E,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,WAAW;IAoB/B;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAqElC;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,MAAM,CAAC;IAQnB;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO9D;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjB;;;OAGG;IACG,KAAK,CAAC,OAAO,CAAC,EAAE;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjB;;;OAGG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOjF;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAiDxC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC;IASrC;;;;;;;;;OASG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB;IAIzD;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAKxC;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAOvC,6BAA6B;IAC7B,YAAY,IAAI,MAAM;IAItB,0BAA0B;IAC1B,WAAW,IAAI,MAAM;IAIrB,iDAAiD;IACjD,WAAW,IAAI,eAAe;IAI9B,8CAA8C;IAC9C,SAAS,IAAI,YAAY;IAMzB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,cAAc;CAOvB"}
1
+ {"version":3,"file":"anima.d.ts","sourceRoot":"","sources":["../src/anima.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAgB,MAAM,SAAS,CAAC;AACnH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG/E,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,WAAW;IAoB/B;;;;OAIG;IACH;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ1B,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAuElC;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,MAAM,CAAC;IAQnB;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO9D;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjB;;;OAGG;IACG,KAAK,CAAC,OAAO,CAAC,EAAE;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjB;;;OAGG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOjF;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACrC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAOpD;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAqExC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC;IASrC;;;;;;;;;OASG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB;IAIzD;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAKxC;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAOvC,6BAA6B;IAC7B,YAAY,IAAI,MAAM;IAItB,0BAA0B;IAC1B,WAAW,IAAI,MAAM;IAIrB,iDAAiD;IACjD,WAAW,IAAI,eAAe;IAI9B,8CAA8C;IAC9C,SAAS,IAAI,YAAY;IAMzB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,cAAc;CAOvB"}
package/dist/anima.js CHANGED
@@ -64,6 +64,18 @@ class Anima {
64
64
  * Returns a WakeContext with everything the agent needs to start working.
65
65
  * Target: productive state in <60 seconds.
66
66
  */
67
+ /**
68
+ * QuickLoad — lightweight init for CLI commands that don't need full boot context.
69
+ * Loads index + opinions without logging a boot event or returning full context.
70
+ */
71
+ async quickLoad() {
72
+ if (this.booted)
73
+ return;
74
+ await this.identity.load();
75
+ // Load memory index and opinions silently
76
+ await this.memory.loadIndexPublic();
77
+ this.booted = true;
78
+ }
67
79
  async boot() {
68
80
  const startTime = Date.now();
69
81
  // Step 1: Load identity (SOUL.md + identity.json) — ~5s
@@ -105,6 +117,8 @@ class Anima {
105
117
  relevantOpinions: opinions,
106
118
  relationships: [], // TODO: relationship engine
107
119
  sessionId: this.session,
120
+ instanceId: (0, utils_1.sessionId)(), // Unique per boot — prevents identity confusion when forked
121
+ parentInstanceId: undefined, // Set by caller if this is a forked instance
108
122
  lastSessionSummary: todayLog || yesterdayLog || undefined,
109
123
  tokenBudget: 4000, // reasonable default
110
124
  tokensUsed: this.estimateTokens(identityData, recentMemories, opinions),
@@ -165,6 +179,25 @@ class Anima {
165
179
  this.ensureBooted();
166
180
  return this.memory.opine({ topic, opinion, confidence });
167
181
  }
182
+ // ============ CURATE ============
183
+ /**
184
+ * Curate — review raw memories and distill what matters into long-term memory.
185
+ *
186
+ * The missing piece between storage and retrieval.
187
+ * Raw daily logs are your journal. MEMORY.md is your identity.
188
+ * This method bridges the two.
189
+ *
190
+ * Call periodically (heartbeats, daily, whenever feels right).
191
+ *
192
+ * ```typescript
193
+ * const result = await anima.curate();
194
+ * console.log(`Curated ${result.curated.length} memories`);
195
+ * ```
196
+ */
197
+ async curate(options) {
198
+ this.ensureBooted();
199
+ return this.memory.curate(options);
200
+ }
168
201
  // ============ REFLECT (End of session) ============
169
202
  /**
170
203
  * Reflect — end-of-session consolidation.
@@ -173,6 +206,8 @@ class Anima {
173
206
  async reflect() {
174
207
  this.ensureBooted();
175
208
  const startTime = Date.now();
209
+ // Curate before decay — promote important memories to MEMORY.md
210
+ const curationResult = await this.memory.curate({ hoursBack: 24, minImportance: 'medium' });
176
211
  // Run memory decay
177
212
  const decayResult = await this.memory.runDecay();
178
213
  // Get all opinions for summary
@@ -180,7 +215,7 @@ class Anima {
180
215
  // Generate session summary
181
216
  const summary = {
182
217
  sessionId: this.session,
183
- startedAt: new Date(Date.now() - (Date.now() - this.bootTime)).toISOString(),
218
+ startedAt: new Date(Date.now() - this.bootTime).toISOString(),
184
219
  endedAt: (0, utils_1.now)(),
185
220
  summary: `Session ${this.session}: ${this.memoriesThisSession} memories created. Decay: ${decayResult.decayed} removed, ${decayResult.archived} archived, ${decayResult.kept} kept.`,
186
221
  memoriesCreated: this.memoriesThisSession,
@@ -200,13 +235,30 @@ class Anima {
200
235
  importance: 'low',
201
236
  tags: ['system', 'session-summary'],
202
237
  });
203
- // Clear lifeboat (session ended normally)
204
- await this.memory.updateLifeboat({
205
- activeTask: 'No active task session ended normally',
206
- status: 'done',
207
- resumePoint: 'Start fresh next session',
208
- updatedAt: (0, utils_1.now)(),
209
- });
238
+ // Update lifeboat with session summary — PRESERVE existing content
239
+ // The lifeboat may contain a hand-written letter from the agent to future-self.
240
+ // Append session summary instead of nuking everything.
241
+ const existingLifeboat = await this.memory.readLifeboat();
242
+ const sessionEndNote = [
243
+ `\n## Last Session Summary (${(0, utils_1.now)()})`,
244
+ summary.summary,
245
+ `Curated ${curationResult.curated.length} memories to long-term.`,
246
+ `\n## Status`,
247
+ `done — session ended normally. Read everything above for context.`,
248
+ ].join('\n');
249
+ if (existingLifeboat && !existingLifeboat.includes('session ended normally')) {
250
+ // Preserve existing lifeboat, append summary
251
+ await this.memory.writeLifeboatRaw(existingLifeboat + '\n' + sessionEndNote);
252
+ }
253
+ else {
254
+ // No meaningful lifeboat content — write clean end state
255
+ await this.memory.updateLifeboat({
256
+ activeTask: 'No active task — session ended normally',
257
+ status: 'done',
258
+ resumePoint: 'Start fresh next session',
259
+ updatedAt: (0, utils_1.now)(),
260
+ });
261
+ }
210
262
  return summary;
211
263
  }
212
264
  // ============ SIGNING ============
package/dist/anima.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"anima.js","sourceRoot":"","sources":["../src/anima.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anima.js","sourceRoot":"","sources":["../src/anima.ts"],"names":[],"mappings":"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"}