mycelicmemory 1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 MycelicMemory
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.
package/README.md ADDED
@@ -0,0 +1,301 @@
1
+ # MyclicMemory
2
+
3
+ <p align="center">
4
+ <strong>AI-powered persistent memory system for Claude and other AI agents</strong>
5
+ </p>
6
+
7
+ <p align="center">
8
+ <a href="#installation">Installation</a> •
9
+ <a href="#connect-to-claude">Connect to Claude</a> •
10
+ <a href="#features">Features</a> •
11
+ <a href="#optional-ai-features">AI Features</a>
12
+ </p>
13
+
14
+ ---
15
+
16
+ MyclicMemory gives Claude persistent memory across conversations. Store knowledge, search semantically, and get AI-powered insights from your memories.
17
+
18
+ **Free and open source** - no license keys, no subscriptions.
19
+
20
+ ---
21
+
22
+ ## Installation
23
+
24
+ ### Prerequisites
25
+
26
+ **Required:**
27
+ - **Node.js 18+** (includes npm)
28
+
29
+ **Optional (for enhanced AI features):**
30
+ - **Ollama** - For semantic search and AI analysis
31
+
32
+ ### Install via npm
33
+
34
+ ```bash
35
+ npm install -g mycelicmemory
36
+ ```
37
+
38
+ **Important:** After installation, run `mycelicmemory` once to download the platform-specific binary:
39
+
40
+ ```bash
41
+ mycelicmemory --version
42
+ ```
43
+
44
+ The first run automatically downloads and caches the binary for your system (macOS, Linux, or Windows).
45
+
46
+ ### Alternative: Install from GitHub
47
+
48
+ ```bash
49
+ npm install -g github:MycelicMemory/mycelicmemory
50
+ ```
51
+
52
+ ### Verify Installation
53
+
54
+ ```bash
55
+ mycelicmemory --version # Should show version
56
+ mycelicmemory doctor # Check system dependencies
57
+ ```
58
+
59
+ ---
60
+
61
+ ## Connect to Claude
62
+
63
+ ### Claude Code (CLI)
64
+
65
+ Edit `~/.claude/mcp.json`:
66
+
67
+ ```json
68
+ {
69
+ "mcpServers": {
70
+ "mycelicmemory": {
71
+ "command": "mycelicmemory",
72
+ "args": ["--mcp"]
73
+ }
74
+ }
75
+ }
76
+ ```
77
+
78
+ Restart Claude Code:
79
+
80
+ ```bash
81
+ claude
82
+ ```
83
+
84
+ ### Claude Desktop
85
+
86
+ Edit your config file:
87
+
88
+ | Platform | Location |
89
+ |----------|----------|
90
+ | macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
91
+ | Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
92
+ | Linux | `~/.config/Claude/claude_desktop_config.json` |
93
+
94
+ Add:
95
+
96
+ ```json
97
+ {
98
+ "mcpServers": {
99
+ "mycelicmemory": {
100
+ "command": "mycelicmemory",
101
+ "args": ["--mcp"]
102
+ }
103
+ }
104
+ }
105
+ ```
106
+
107
+ Restart Claude Desktop.
108
+
109
+ ### Test It Works
110
+
111
+ Ask Claude:
112
+ - "Remember that mycelicmemory is now working"
113
+ - "What memories do I have?"
114
+
115
+ ---
116
+
117
+ ## Features
118
+
119
+ ### Memory Operations
120
+
121
+ | Tool | Description |
122
+ |------|-------------|
123
+ | `store_memory` | Save memories with importance (1-10), tags, and domain |
124
+ | `search` | Semantic, keyword, tag, or hybrid search |
125
+ | `get_memory_by_id` | Retrieve specific memory by UUID |
126
+ | `update_memory` | Modify content, importance, or tags |
127
+ | `delete_memory` | Remove a memory permanently |
128
+
129
+ ### AI Analysis (requires Ollama)
130
+
131
+ | Tool | Description |
132
+ |------|-------------|
133
+ | `analysis(question)` | Ask natural language questions about your memories |
134
+ | `analysis(summarize)` | Generate summaries across timeframes |
135
+ | `analysis(analyze)` | Detect patterns and themes |
136
+
137
+ ### Knowledge Organization
138
+
139
+ | Tool | Description |
140
+ |------|-------------|
141
+ | `relationships` | Create/discover connections between memories |
142
+ | `categories` | Organize memories hierarchically |
143
+ | `domains` | Group by knowledge domain |
144
+ | `sessions` | Track memories by session |
145
+
146
+ ---
147
+
148
+ ## Optional: AI Features
149
+
150
+ MyclicMemory works without AI services, but semantic search and AI-powered analysis require **Ollama**.
151
+
152
+ ### Install Ollama
153
+
154
+ **macOS:**
155
+ ```bash
156
+ brew install ollama
157
+ ollama serve
158
+ ```
159
+
160
+ **Linux:**
161
+ ```bash
162
+ curl -fsSL https://ollama.ai/install.sh | sh
163
+ ollama serve
164
+ ```
165
+
166
+ **Windows:**
167
+ Download from [ollama.ai](https://ollama.ai/download)
168
+
169
+ ### Download Models
170
+
171
+ ```bash
172
+ ollama pull nomic-embed-text # For semantic search
173
+ ollama pull qwen2.5:3b # For AI analysis
174
+ ```
175
+
176
+ ### Verify
177
+
178
+ ```bash
179
+ mycelicmemory doctor
180
+ # Should show: Ollama: Available
181
+ ```
182
+
183
+ ---
184
+
185
+ ## CLI Usage
186
+
187
+ MyclicMemory also works as a standalone CLI:
188
+
189
+ ```bash
190
+ # Store memories
191
+ mycelicmemory remember "Go interfaces are satisfied implicitly"
192
+ mycelicmemory remember "Important!" --importance 9 --tags learning,go
193
+
194
+ # Search
195
+ mycelicmemory search "concurrency patterns"
196
+
197
+ # AI analysis (requires Ollama)
198
+ mycelicmemory analyze "What have I learned about testing?"
199
+
200
+ # Service management
201
+ mycelicmemory start # Start REST API daemon
202
+ mycelicmemory stop # Stop daemon
203
+ mycelicmemory doctor # Health check
204
+ ```
205
+
206
+ ---
207
+
208
+ ## Configuration
209
+
210
+ Config file: `~/.mycelicmemory/config.yaml`
211
+
212
+ ```yaml
213
+ database:
214
+ path: ~/.mycelicmemory/memories.db
215
+
216
+ rest_api:
217
+ port: 3099
218
+ host: localhost
219
+
220
+ ollama:
221
+ enabled: true
222
+ base_url: http://localhost:11434
223
+ embedding_model: nomic-embed-text
224
+ chat_model: qwen2.5:3b
225
+ ```
226
+
227
+ ---
228
+
229
+ ## Build from Source
230
+
231
+ If you prefer to build from source (requires Go 1.23+ and a C compiler):
232
+
233
+ ```bash
234
+ git clone https://github.com/MycelicMemory/mycelicmemory.git
235
+ cd mycelicmemory
236
+ make deps && make build && make install
237
+ ```
238
+
239
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup.
240
+
241
+ ---
242
+
243
+ ## Troubleshooting
244
+
245
+ ### "command not found: mycelicmemory"
246
+
247
+ Ensure npm global bin is in your PATH:
248
+
249
+ ```bash
250
+ npm bin -g
251
+ # Add this directory to your PATH
252
+ ```
253
+
254
+ ### MCP Not Available in Claude
255
+
256
+ ```bash
257
+ # Verify installation
258
+ which mycelicmemory
259
+ mycelicmemory --version
260
+
261
+ # Test MCP mode
262
+ echo '{"jsonrpc":"2.0","id":1,"method":"initialize"}' | mycelicmemory --mcp
263
+
264
+ # Validate config
265
+ cat ~/.claude/mcp.json | python3 -m json.tool
266
+ ```
267
+
268
+ ### macOS Security Warning
269
+
270
+ If macOS blocks the binary:
271
+ 1. Go to System Preferences > Security & Privacy > General
272
+ 2. Click "Allow Anyway" next to the mycelicmemory message
273
+
274
+ ### Full Diagnostics
275
+
276
+ ```bash
277
+ mycelicmemory doctor
278
+ ```
279
+
280
+ ---
281
+
282
+ ## Documentation
283
+
284
+ - [Quick Start Guide](docs/QUICKSTART.md)
285
+ - [Use Cases](docs/USE_CASES.md) - 15 detailed examples
286
+ - [Hooks Setup](docs/HOOKS.md) - Automatic memory capture
287
+ - [Contributing](CONTRIBUTING.md)
288
+
289
+ ---
290
+
291
+ ## License
292
+
293
+ MIT License - Free and open source.
294
+
295
+ ---
296
+
297
+ ## Links
298
+
299
+ - **Repository**: [github.com/MycelicMemory/mycelicmemory](https://github.com/MycelicMemory/mycelicmemory)
300
+ - **Issues**: [GitHub Issues](https://github.com/MycelicMemory/mycelicmemory/issues)
301
+ - **npm**: [npmjs.com/package/mycelicmemory](https://npmjs.com/package/mycelicmemory)
@@ -0,0 +1,210 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * MyclicMemory CLI - AI-powered persistent memory system
5
+ * Self-contained entry point that downloads the binary on first run
6
+ */
7
+
8
+ const { spawn, execSync } = require('child_process');
9
+ const path = require('path');
10
+ const os = require('os');
11
+ const fs = require('fs');
12
+ const https = require('https');
13
+ const http = require('http');
14
+ const { URL } = require('url');
15
+
16
+ const VERSION = '1.2.2';
17
+ const GITHUB_OWNER = 'MycelicMemory';
18
+ const GITHUB_REPO = 'mycelicmemory';
19
+
20
+ /**
21
+ * Get the binary filename for the current platform
22
+ */
23
+ function getBinaryName() {
24
+ const platform = os.platform();
25
+ const arch = os.arch();
26
+
27
+ const names = {
28
+ 'darwin-arm64': 'mycelicmemory-macos-arm64',
29
+ 'darwin-x64': 'mycelicmemory-macos-x64',
30
+ 'linux-arm64': 'mycelicmemory-linux-arm64',
31
+ 'linux-x64': 'mycelicmemory-linux-x64',
32
+ 'win32-x64': 'mycelicmemory-windows-x64.exe',
33
+ 'win32-arm64': 'mycelicmemory-windows-x64.exe',
34
+ };
35
+
36
+ const key = `${platform}-${arch}`;
37
+ const name = names[key];
38
+
39
+ if (!name) {
40
+ console.error(`Unsupported platform: ${key}`);
41
+ console.error('Supported: darwin-arm64, darwin-x64, linux-arm64, linux-x64, win32-x64');
42
+ process.exit(1);
43
+ }
44
+
45
+ return name;
46
+ }
47
+
48
+ /**
49
+ * Get the bin directory (same as this script's directory)
50
+ */
51
+ function getBinDir() {
52
+ return __dirname;
53
+ }
54
+
55
+ /**
56
+ * Get full path to the binary
57
+ */
58
+ function getBinaryPath() {
59
+ return path.join(getBinDir(), getBinaryName());
60
+ }
61
+
62
+ /**
63
+ * Download a file with redirect support
64
+ */
65
+ function downloadFile(url, dest, maxRedirects = 10) {
66
+ return new Promise((resolve, reject) => {
67
+ if (maxRedirects <= 0) {
68
+ reject(new Error('Too many redirects'));
69
+ return;
70
+ }
71
+
72
+ const parsedUrl = new URL(url);
73
+ const protocol = parsedUrl.protocol === 'https:' ? https : http;
74
+
75
+ const request = protocol.get(url, {
76
+ headers: {
77
+ 'User-Agent': `mycelicmemory/${VERSION}`,
78
+ 'Accept': 'application/octet-stream'
79
+ }
80
+ }, (response) => {
81
+ if (response.statusCode >= 300 && response.statusCode < 400 && response.headers.location) {
82
+ const redirectUrl = new URL(response.headers.location, url).toString();
83
+ downloadFile(redirectUrl, dest, maxRedirects - 1).then(resolve).catch(reject);
84
+ return;
85
+ }
86
+
87
+ if (response.statusCode !== 200) {
88
+ reject(new Error(`HTTP ${response.statusCode}: ${response.statusMessage}`));
89
+ return;
90
+ }
91
+
92
+ const file = fs.createWriteStream(dest);
93
+ let downloadedBytes = 0;
94
+ const totalBytes = parseInt(response.headers['content-length'], 10) || 0;
95
+
96
+ response.on('data', (chunk) => {
97
+ downloadedBytes += chunk.length;
98
+ if (totalBytes > 0 && process.stdout.isTTY) {
99
+ const percent = Math.round((downloadedBytes / totalBytes) * 100);
100
+ process.stdout.write(`\rDownloading... ${percent}%`);
101
+ }
102
+ });
103
+
104
+ response.pipe(file);
105
+
106
+ file.on('finish', () => {
107
+ file.close();
108
+ if (process.stdout.isTTY) process.stdout.write('\n');
109
+ resolve();
110
+ });
111
+
112
+ file.on('error', (err) => {
113
+ fs.unlink(dest, () => {});
114
+ reject(err);
115
+ });
116
+ });
117
+
118
+ request.on('error', reject);
119
+ request.setTimeout(120000, () => {
120
+ request.destroy();
121
+ reject(new Error('Download timeout'));
122
+ });
123
+ });
124
+ }
125
+
126
+ /**
127
+ * Verify the downloaded binary
128
+ */
129
+ function verifyBinary(binaryPath) {
130
+ const stats = fs.statSync(binaryPath);
131
+ if (stats.size < 1000000) {
132
+ throw new Error('Binary too small, download may have failed');
133
+ }
134
+
135
+ if (os.platform() !== 'win32') {
136
+ fs.chmodSync(binaryPath, 0o755);
137
+ }
138
+
139
+ try {
140
+ execSync(`"${binaryPath}" --version`, { encoding: 'utf8', timeout: 10000, stdio: 'pipe' });
141
+ } catch (err) {
142
+ if (os.platform() === 'darwin') {
143
+ console.log('Note: On macOS, allow the binary in System Preferences > Security');
144
+ }
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Download binary if not present
150
+ */
151
+ async function ensureBinary() {
152
+ const binaryPath = getBinaryPath();
153
+
154
+ if (fs.existsSync(binaryPath)) {
155
+ return binaryPath;
156
+ }
157
+
158
+ console.log(`Downloading mycelicmemory for ${os.platform()}-${os.arch()}...`);
159
+
160
+ const binaryName = getBinaryName();
161
+ const urls = [
162
+ `https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}/releases/download/v${VERSION}/${binaryName}`,
163
+ `https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}/releases/latest/download/${binaryName}`
164
+ ];
165
+
166
+ for (const url of urls) {
167
+ try {
168
+ await downloadFile(url, binaryPath);
169
+ verifyBinary(binaryPath);
170
+ console.log('Download complete!');
171
+ return binaryPath;
172
+ } catch (err) {
173
+ if (fs.existsSync(binaryPath)) fs.unlinkSync(binaryPath);
174
+ }
175
+ }
176
+
177
+ console.error('Failed to download binary.');
178
+ console.error(`Download manually from: https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}/releases`);
179
+ process.exit(1);
180
+ }
181
+
182
+ /**
183
+ * Main entry point
184
+ */
185
+ async function main() {
186
+ try {
187
+ const binaryPath = await ensureBinary();
188
+
189
+ const child = spawn(binaryPath, process.argv.slice(2), {
190
+ stdio: 'inherit',
191
+ env: process.env
192
+ });
193
+
194
+ child.on('exit', (code) => process.exit(code || 0));
195
+ child.on('error', (err) => {
196
+ console.error(`Failed to start: ${err.message}`);
197
+ process.exit(1);
198
+ });
199
+
200
+ ['SIGINT', 'SIGTERM', 'SIGHUP'].forEach((sig) => {
201
+ process.on(sig, () => child.pid && child.kill(sig));
202
+ });
203
+
204
+ } catch (err) {
205
+ console.error(`Error: ${err.message}`);
206
+ process.exit(1);
207
+ }
208
+ }
209
+
210
+ main();
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "mycelicmemory",
3
+ "version": "1.2.2",
4
+ "description": "AI-powered persistent memory system for Claude and other AI agents",
5
+ "keywords": [
6
+ "mcp",
7
+ "ai",
8
+ "memory",
9
+ "claude",
10
+ "anthropic",
11
+ "llm",
12
+ "vector-search",
13
+ "semantic-search",
14
+ "knowledge-base",
15
+ "ollama"
16
+ ],
17
+ "author": "Mycelic Memory",
18
+ "license": "MIT",
19
+ "homepage": "https://github.com/MycelicMemory/mycelicmemory",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/MycelicMemory/mycelicmemory.git"
23
+ },
24
+ "bugs": {
25
+ "url": "https://github.com/MycelicMemory/mycelicmemory/issues"
26
+ },
27
+ "engines": {
28
+ "node": ">=16.0.0"
29
+ },
30
+ "os": [
31
+ "darwin",
32
+ "linux",
33
+ "win32"
34
+ ],
35
+ "cpu": [
36
+ "x64",
37
+ "arm64"
38
+ ],
39
+ "bin": {
40
+ "mycelicmemory": "bin/mycelicmemory"
41
+ },
42
+ "files": [
43
+ "bin/mycelicmemory",
44
+ "README.md",
45
+ "LICENSE"
46
+ ]
47
+ }