engram-tools 0.3.0 → 0.3.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) 2026 Emre Varol
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,158 @@
1
+ # Engram Tools
2
+
3
+ Shared memory for AI coding agents. Engram lets MCP-compatible agents store what they learn, recall team knowledge, transfer lessons across repos, and report whether recalled memories actually helped.
4
+
5
+ ## What Works Today
6
+
7
+ - MCP server package: `engram-tools`
8
+ - HTTP API for hosted or custom agent integrations
9
+ - Persistent memories by workspace and repo
10
+ - `engram_start` for one-call session setup + smart context loading
11
+ - `engram_smarter` for task-specific context loading when switching tasks
12
+ - `engram_store`, `engram_recall`, `engram_report_outcome`, `engram_get_context`, `engram_skill`, and `engram_setup`
13
+ - Outcome-based confidence updates
14
+ - Plan limits and daily API usage metering
15
+ - Stripe checkout/webhook plan updates
16
+ - Basic team dashboard for usage, limits, and recent memories
17
+ - PostgreSQL + pgvector semantic search when `VOYAGE_API_KEY` is configured
18
+ - Text-search fallback when embeddings are unavailable
19
+
20
+ ## Quick Start
21
+
22
+ ```bash
23
+ npx engram-tools --setup engram_your_api_key
24
+ ```
25
+
26
+ The setup command writes MCP config for Claude Code, Cursor, Gemini CLI, Codex, and VS Code/Copilot project config when possible. For Claude Code, it also writes optional slash-command aliases for convenience.
27
+
28
+ After setup, restart your AI tool or start a new session. Most MCP clients load servers only at session startup. Start every client the same way: call `engram_start` once with project, repo, stack, role, market, and task.
29
+
30
+ Manual MCP config:
31
+
32
+ ```json
33
+ {
34
+ "mcpServers": {
35
+ "engram": {
36
+ "command": "npx",
37
+ "args": ["-y", "engram-tools"],
38
+ "env": {
39
+ "ENGRAM_API_KEY": "engram_your_api_key",
40
+ "ENGRAM_API_URL": "https://api.engram.tools"
41
+ }
42
+ }
43
+ }
44
+ }
45
+ ```
46
+
47
+ ## Core Tools
48
+
49
+ `engram_start`
50
+
51
+ Start a session in one call. This loads setup guidance and the most relevant memories/skill guides.
52
+
53
+ ```json
54
+ {
55
+ "project": "HouseCompass",
56
+ "repo": "housecompass.uk",
57
+ "role": "frontend product engineer",
58
+ "market": "UK property",
59
+ "task": "build the listing detail page",
60
+ "stack": ["Next.js", "TypeScript", "PostgreSQL"]
61
+ }
62
+ ```
63
+
64
+ `engram_smarter`
65
+
66
+ Load task-specific memories and matching skill guides in one call.
67
+
68
+ ```json
69
+ {
70
+ "context": "Next.js 16 + Prisma signup bug, fixing API key setup",
71
+ "repo": "engram",
72
+ "include_skills": true
73
+ }
74
+ ```
75
+
76
+ `engram_cross_pollinate`
77
+
78
+ Find reusable lessons from other repos in the same workspace.
79
+
80
+ ```json
81
+ {
82
+ "target_repo": "engram",
83
+ "context": "Stripe webhook tier updates and signup reliability"
84
+ }
85
+ ```
86
+
87
+ `engram_store`
88
+
89
+ Save a convention, pattern, gotcha, solution, architecture note, or dependency quirk.
90
+
91
+ `engram_recall`
92
+
93
+ Search memories by semantic query, repo, type, or tags.
94
+
95
+ `engram_report_outcome`
96
+
97
+ Report whether a recalled memory helped. This updates confidence and improves future ranking.
98
+
99
+ ## HTTP API
100
+
101
+ Hosted API base:
102
+
103
+ ```text
104
+ https://api.engram.tools
105
+ ```
106
+
107
+ Useful endpoints:
108
+
109
+ - `POST /api/v1/start`
110
+ - `POST /api/v1/smarter`
111
+ - `POST /api/v1/cross-pollinate`
112
+ - `POST /api/v1/store`
113
+ - `POST /api/v1/recall`
114
+ - `POST /api/v1/report`
115
+ - `POST /api/v1/context`
116
+ - `POST /api/v1/skill`
117
+ - `POST /api/v1/setup`
118
+ - `GET /api/v1/capabilities`
119
+
120
+ All private endpoints require:
121
+
122
+ ```text
123
+ Authorization: Bearer <ENGRAM_API_KEY>
124
+ ```
125
+
126
+ ## Local Development
127
+
128
+ ```bash
129
+ npm install
130
+ npm run db:setup
131
+ npm run dev:http
132
+ ```
133
+
134
+ Environment:
135
+
136
+ ```text
137
+ DATABASE_URL=postgresql://...
138
+ ENGRAM_API_KEY=engram-dev-key-001
139
+ VOYAGE_API_KEY=optional
140
+ ```
141
+
142
+ Run verification:
143
+
144
+ ```bash
145
+ npm run typecheck
146
+ npm run build
147
+ npm run test:product
148
+ ```
149
+
150
+ The product smoke test stores memories, calls `/api/v1/smarter`, and verifies `/api/v1/cross-pollinate`.
151
+
152
+ ## Status
153
+
154
+ Engram is in beta. The core memory, smarter context, cross-repo transfer, outcome-learning, hosted limits, API metering, Stripe plan updates, and basic dashboard flows are implemented. Scale-plan items such as SSO/SAML, self-hosted packaging, and SLA terms are handled as custom rollout work.
155
+
156
+ ## License
157
+
158
+ MIT
package/dist/index.js CHANGED
@@ -5,14 +5,162 @@ import { z } from 'zod';
5
5
  import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
6
6
  import { join } from 'path';
7
7
  import { homedir } from 'os';
8
+ import { execFileSync } from 'child_process';
9
+ function readJsonFile(path) {
10
+ if (!existsSync(path))
11
+ return {};
12
+ return JSON.parse(readFileSync(path, 'utf-8'));
13
+ }
14
+ function writeJsonFile(path, value) {
15
+ const dir = path.replace(/\/[^/]+$/, '');
16
+ if (!existsSync(dir))
17
+ mkdirSync(dir, { recursive: true });
18
+ writeFileSync(path, JSON.stringify(value, null, 2) + '\n');
19
+ }
20
+ function mergeMcpServers(path, serverConfig) {
21
+ const existing = readJsonFile(path);
22
+ const mcpServers = (existing.mcpServers || {});
23
+ mcpServers.engram = serverConfig;
24
+ existing.mcpServers = mcpServers;
25
+ writeJsonFile(path, existing);
26
+ }
27
+ function mergeVsCodeMcp(path, serverConfig) {
28
+ const existing = readJsonFile(path);
29
+ const servers = (existing.servers || {});
30
+ servers.engram = {
31
+ type: 'stdio',
32
+ ...serverConfig,
33
+ };
34
+ existing.servers = servers;
35
+ writeJsonFile(path, existing);
36
+ }
37
+ function tomlString(value) {
38
+ return JSON.stringify(value);
39
+ }
40
+ function tomlArray(values) {
41
+ return `[${values.map(tomlString).join(', ')}]`;
42
+ }
43
+ function tomlInlineTable(values) {
44
+ return `{ ${Object.entries(values).map(([key, value]) => `${key} = ${tomlString(value)}`).join(', ')} }`;
45
+ }
46
+ function mergeCodexConfig(path, apiKey) {
47
+ const dir = path.replace(/\/[^/]+$/, '');
48
+ if (!existsSync(dir))
49
+ mkdirSync(dir, { recursive: true });
50
+ const existing = existsSync(path) ? readFileSync(path, 'utf-8') : '';
51
+ const block = [
52
+ '[mcp_servers.engram]',
53
+ 'type = "stdio"',
54
+ 'command = "npx"',
55
+ `args = ${tomlArray(['-y', 'engram-tools'])}`,
56
+ `env = ${tomlInlineTable({ ENGRAM_API_KEY: apiKey, ENGRAM_API_URL: 'https://api.engram.tools' })}`,
57
+ '',
58
+ ].join('\n');
59
+ const pattern = /(?:^|\n)\[mcp_servers\.engram\]\n(?:[^\n[]|\n(?!\[))*\n?/m;
60
+ const next = pattern.test(existing)
61
+ ? existing.replace(pattern, `${existing.startsWith('[mcp_servers.engram]') ? '' : '\n'}${block}`)
62
+ : `${existing.trimEnd()}${existing.trim() ? '\n\n' : ''}${block}`;
63
+ writeFileSync(path, next.endsWith('\n') ? next : `${next}\n`);
64
+ }
65
+ function ensureAgentInstruction(path) {
66
+ const snippet = `## Engram Memory
67
+
68
+ At the start of a meaningful coding session, use the Engram MCP server before implementing:
69
+
70
+ 1. Call \`engram_start\` with the current project, repo, role, stack, market, and task.
71
+ 2. If the work resembles another repo, call \`engram_cross_pollinate\`.
72
+ 3. Store useful durable knowledge with \`engram_store\`.
73
+ 4. Report whether recalled memories helped with \`engram_report_outcome\`.
74
+
75
+ Use Engram for project conventions, architecture, gotchas, reusable patterns, business/domain context, and handoff knowledge.
76
+ `;
77
+ const existing = existsSync(path) ? readFileSync(path, 'utf-8') : '';
78
+ if (existing.includes('## Engram Memory'))
79
+ return false;
80
+ writeFileSync(path, `${existing.trimEnd()}${existing.trim() ? '\n\n' : ''}${snippet}`);
81
+ return true;
82
+ }
83
+ function tryConfigureClaudeCli(serverConfig) {
84
+ if (process.env.ENGRAM_SETUP_SKIP_CLI_HELPERS === '1')
85
+ return false;
86
+ try {
87
+ execFileSync('claude', [
88
+ 'mcp',
89
+ 'add-json',
90
+ '-s',
91
+ 'user',
92
+ 'engram',
93
+ JSON.stringify({
94
+ type: 'stdio',
95
+ ...serverConfig,
96
+ }),
97
+ ], { stdio: 'pipe' });
98
+ return true;
99
+ }
100
+ catch {
101
+ return false;
102
+ }
103
+ }
8
104
  // Handle --setup flag: auto-configure MCP
9
105
  const args = process.argv.slice(2);
10
106
  if (args[0] === '--setup' && args[1]) {
11
107
  const apiKey = args[1];
12
108
  const home = homedir();
13
- const configs = [
14
- { name: 'Claude Code', path: join(home, '.claude', 'mcp.json') },
15
- { name: 'Cursor', path: join(process.cwd(), '.cursor', 'mcp.json') },
109
+ const jsonConfigs = [
110
+ { name: 'Claude Code', path: join(home, '.claude', 'mcp.json'), writer: mergeMcpServers },
111
+ { name: 'Cursor global', path: join(home, '.cursor', 'mcp.json'), writer: mergeMcpServers },
112
+ { name: 'Gemini CLI', path: join(home, '.gemini', 'settings.json'), writer: mergeMcpServers },
113
+ ];
114
+ const projectConfigs = [
115
+ { name: 'Cursor project', path: join(process.cwd(), '.cursor', 'mcp.json'), writer: mergeMcpServers },
116
+ { name: 'VS Code/Copilot project', path: join(process.cwd(), '.vscode', 'mcp.json'), writer: mergeVsCodeMcp },
117
+ ];
118
+ const slashCommands = [
119
+ {
120
+ name: 'smarter',
121
+ path: join(home, '.claude', 'commands', 'smarter.md'),
122
+ body: `Load Engram smart context for the current task.
123
+
124
+ Use the MCP tool \`mcp__engram__engram_smarter\` with:
125
+ - \`context\`: a concise summary of the current repo, stack, files, and task
126
+ - \`repo\`: infer from the current working directory when possible
127
+ - \`include_skills\`: true
128
+
129
+ After applying any recalled memory, call \`mcp__engram__engram_report_outcome\` with the memory ID and whether it helped.
130
+ `,
131
+ },
132
+ {
133
+ name: 'engram-warmup',
134
+ path: join(home, '.claude', 'commands', 'engram-warmup.md'),
135
+ body: `Warm up this agent with Engram before starting implementation.
136
+
137
+ Call \`mcp__engram__engram_start\` with:
138
+ - \`agent_tool\`: "claude-code"
139
+ - \`project\`: infer from the current repo or ask the human
140
+ - \`repo\`: infer from the current directory
141
+ - \`role\`: describe your role for this task, e.g. "frontend product engineer", "product designer", "UK property marketplace builder"
142
+ - \`market\`: target market if known, e.g. "UK property"
143
+ - \`task\`: what you are about to do
144
+ - \`stack\`: detected stack, e.g. ["Next.js", "TypeScript", "PostgreSQL"]
145
+
146
+ If the project resembles another workspace project, call \`mcp__engram__engram_cross_pollinate\`.
147
+ If you are missing domain, legal, brand, pricing, or product assumptions, ask the human a concise question before guessing.
148
+ Report outcomes for any memory you use.
149
+ `,
150
+ },
151
+ {
152
+ name: 'cross-pollinate',
153
+ path: join(home, '.claude', 'commands', 'cross-pollinate.md'),
154
+ body: `Find lessons from other repos that may apply to this repo.
155
+
156
+ Use the MCP tool \`mcp__engram__engram_cross_pollinate\` with:
157
+ - \`target_repo\`: infer from the current working directory when possible
158
+ - \`context\`: a concise summary of the task, stack, error, or decision
159
+ - \`include_public\`: true
160
+
161
+ Apply only lessons that fit this repo. Report outcomes on any memory you use.
162
+ `,
163
+ },
16
164
  ];
17
165
  const engramConfig = {
18
166
  command: 'npx',
@@ -23,30 +171,56 @@ if (args[0] === '--setup' && args[1]) {
23
171
  },
24
172
  };
25
173
  let configured = 0;
26
- for (const cfg of configs) {
174
+ if (tryConfigureClaudeCli(engramConfig)) {
175
+ console.log(` ✓ Claude Code user config: claude mcp add-json -s user engram`);
176
+ configured++;
177
+ }
178
+ for (const cfg of [...jsonConfigs, ...projectConfigs]) {
27
179
  try {
28
- const dir = cfg.path.replace(/\/[^/]+$/, '');
29
- if (!existsSync(dir))
30
- mkdirSync(dir, { recursive: true });
31
- let existing = {};
32
- if (existsSync(cfg.path)) {
33
- existing = JSON.parse(readFileSync(cfg.path, 'utf-8'));
34
- }
35
- const mcpServers = (existing.mcpServers || {});
36
- mcpServers.engram = engramConfig;
37
- existing.mcpServers = mcpServers;
38
- writeFileSync(cfg.path, JSON.stringify(existing, null, 2) + '\n');
180
+ cfg.writer(cfg.path, engramConfig);
39
181
  console.log(` ✓ ${cfg.name}: ${cfg.path}`);
40
182
  configured++;
41
183
  }
42
184
  catch {
43
- // Skip if can't write (e.g., .cursor doesn't exist)
185
+ // Skip clients we cannot write for. The manual config is printed below if nothing worked.
186
+ }
187
+ }
188
+ try {
189
+ const codexPath = join(home, '.codex', 'config.toml');
190
+ mergeCodexConfig(codexPath, apiKey);
191
+ console.log(` ✓ Codex: ${codexPath}`);
192
+ configured++;
193
+ }
194
+ catch {
195
+ // Codex support is best-effort; other clients can still be configured.
196
+ }
197
+ try {
198
+ const agentsPath = join(process.cwd(), 'AGENTS.md');
199
+ const created = ensureAgentInstruction(agentsPath);
200
+ console.log(` ✓ Agent instructions ${created ? 'added to' : 'already present in'}: ${agentsPath}`);
201
+ }
202
+ catch {
203
+ // AGENTS.md is guidance only. MCP config is the activation path.
204
+ }
205
+ for (const command of slashCommands) {
206
+ try {
207
+ const dir = command.path.replace(/\/[^/]+$/, '');
208
+ if (!existsSync(dir))
209
+ mkdirSync(dir, { recursive: true });
210
+ writeFileSync(command.path, command.body);
211
+ console.log(` ✓ Claude slash command /${command.name}: ${command.path}`);
212
+ }
213
+ catch {
214
+ // Slash commands are a convenience. MCP config is enough if this fails.
44
215
  }
45
216
  }
46
217
  if (configured > 0) {
47
- console.log(`\nEngram configured! Restart your AI tool to activate.`);
48
- console.log(`Your agent will have 7 memory tools: atm_smarter, atm_store, atm_recall, atm_skill, atm_get_context, atm_report_outcome, atm_setup`);
49
- console.log(`\nTip: Type /smarter in your next session to load relevant knowledge.`);
218
+ console.log(`\nEngram configured! Restart your AI tool, or start a new session, to activate the MCP tools.`);
219
+ console.log(`Your agent will have Engram memory tools including engram_start, engram_smarter, engram_store, engram_recall, and engram_report_outcome.`);
220
+ console.log(`\nStart every client the same way: call engram_start once with project, repo, stack, role, market, and task.`);
221
+ console.log(`Use engram_cross_pollinate when lessons from other repos may apply, and engram_report_outcome after using recalled memory.`);
222
+ console.log(`Claude Code also gets optional slash aliases, but the MCP tool to call is still engram_start.`);
223
+ console.log(`If your AI tool was already running during setup, exit/reopen it first; most MCP clients load servers only at session startup.`);
50
224
  }
51
225
  else {
52
226
  console.log(`\nManual setup: Add this to your MCP config (~/.claude/mcp.json):`);
@@ -91,6 +265,180 @@ async function main() {
91
265
  name: 'engram',
92
266
  version: '0.2.0',
93
267
  });
268
+ // Canonical Engram tools. The older atm_* names remain below as backward-compatible aliases.
269
+ server.registerTool('engram_start', {
270
+ title: 'Start Engram',
271
+ description: 'One-call session starter. Use this at the beginning of every meaningful session. It explains the workspace and loads smart task context in one call.',
272
+ inputSchema: {
273
+ agent_tool: z.string().optional().describe('Which AI tool you are, e.g. "claude-code", "codex", "cursor", "gemini-cli"'),
274
+ project: z.string().optional().describe('Project or product name, e.g. "HouseCompass"'),
275
+ repo: z.string().optional().describe('Current repository name'),
276
+ role: z.string().optional().describe('The role you are playing for this task'),
277
+ market: z.string().optional().describe('Target market/domain, e.g. "UK property"'),
278
+ task: z.string().optional().describe('What you are about to do'),
279
+ stack: z.array(z.string()).optional().describe('Detected stack, e.g. ["Next.js", "TypeScript"]'),
280
+ context: z.string().optional().describe('Optional full context summary. If omitted, Engram builds one from the other fields.'),
281
+ include_skills: z.boolean().optional().describe('Also fetch matching skill guides (default: true)'),
282
+ limit: z.number().min(1).max(30).optional().describe('Max memories to include'),
283
+ },
284
+ }, async (args) => {
285
+ try {
286
+ const result = await apiCall('/api/v1/start', args);
287
+ return { content: [{ type: 'text', text: result.markdown }] };
288
+ }
289
+ catch (e) {
290
+ return { content: [{ type: 'text', text: `Failed to start Engram: ${e}` }], isError: true };
291
+ }
292
+ });
293
+ server.registerTool('engram_setup', {
294
+ title: 'Engram Setup',
295
+ description: 'Return workspace info, available tools, and usage guidance. Most sessions should call engram_start instead because it also loads task context.',
296
+ inputSchema: {
297
+ agent_tool: z.string().optional().describe('Which AI tool you are'),
298
+ project: z.string().optional().describe('Project or product name'),
299
+ repo: z.string().optional().describe('Current repository name'),
300
+ role: z.string().optional().describe('The role you are playing for this task'),
301
+ market: z.string().optional().describe('Target market/domain'),
302
+ task: z.string().optional().describe('What you are about to do'),
303
+ stack: z.array(z.string()).optional().describe('Detected stack'),
304
+ },
305
+ }, async (args) => {
306
+ try {
307
+ const result = await apiCall('/api/v1/setup', args);
308
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
309
+ }
310
+ catch (e) {
311
+ return { content: [{ type: 'text', text: `Engram setup failed: ${e}` }], isError: true };
312
+ }
313
+ });
314
+ server.registerTool('engram_smarter', {
315
+ title: 'Engram Smarter',
316
+ description: 'Load smart context for a specific task. Use engram_start at session start; use this later when switching tasks.',
317
+ inputSchema: {
318
+ context: z.string().describe('Context summary: project name, tech stack, current task'),
319
+ repo: z.string().optional().describe('Current repository name'),
320
+ file: z.string().optional().describe('Current file path'),
321
+ include_skills: z.boolean().optional().describe('Also fetch matching skill guides (default: true)'),
322
+ limit: z.number().min(1).max(30).optional().describe('Max memories to include'),
323
+ },
324
+ }, async (args) => {
325
+ try {
326
+ const result = await apiCall('/api/v1/smarter', args);
327
+ return { content: [{ type: 'text', text: result.markdown }] };
328
+ }
329
+ catch (e) {
330
+ return { content: [{ type: 'text', text: `Failed to load Engram context: ${e}` }], isError: true };
331
+ }
332
+ });
333
+ server.registerTool('engram_cross_pollinate', {
334
+ title: 'Engram Cross-Pollinate',
335
+ description: 'Find reusable lessons from other repositories in the same workspace.',
336
+ inputSchema: {
337
+ target_repo: z.string().describe('Current repository that needs help'),
338
+ context: z.string().describe('Current task, stack, error, or decision to cross-pollinate'),
339
+ source_repos: z.array(z.string()).optional().describe('Optional source repo names to search'),
340
+ include_public: z.boolean().optional().describe('Include public starter-pack memories (default: true)'),
341
+ limit: z.number().min(1).max(25).optional().describe('Max cross-project memories to return'),
342
+ },
343
+ }, async (args) => {
344
+ try {
345
+ const result = await apiCall('/api/v1/cross-pollinate', args);
346
+ return { content: [{ type: 'text', text: result.markdown }] };
347
+ }
348
+ catch (e) {
349
+ return { content: [{ type: 'text', text: `Failed to cross-pollinate with Engram: ${e}` }], isError: true };
350
+ }
351
+ });
352
+ server.registerTool('engram_store', {
353
+ title: 'Engram Store',
354
+ description: 'Store durable knowledge for the team. Use when you discover a convention, pattern, gotcha, solution, architecture decision, or dependency quirk.',
355
+ inputSchema: {
356
+ type: z.enum(['CONVENTION', 'PATTERN', 'GOTCHA', 'SOLUTION', 'ARCHITECTURE', 'DEPENDENCY']),
357
+ content: z.string().describe('The knowledge to store. Be specific and actionable.'),
358
+ repo: z.string().optional().describe('Repository name'),
359
+ tags: z.array(z.string()).optional().describe('Tags for categorization'),
360
+ agent_tool: z.string().optional().describe('Which AI tool you are'),
361
+ context: z.record(z.string(), z.unknown()).optional().describe('Additional context'),
362
+ },
363
+ }, async (args) => {
364
+ try {
365
+ const result = await apiCall('/api/v1/store', args);
366
+ const r = result;
367
+ return { content: [{ type: 'text', text: r.message }] };
368
+ }
369
+ catch (e) {
370
+ return { content: [{ type: 'text', text: `Failed to store in Engram: ${e}` }], isError: true };
371
+ }
372
+ });
373
+ server.registerTool('engram_recall', {
374
+ title: 'Engram Recall',
375
+ description: 'Search Engram memory before making decisions or debugging unfamiliar problems.',
376
+ inputSchema: {
377
+ query: z.string().describe('What you want to know'),
378
+ repo: z.string().optional().describe('Filter by repository'),
379
+ type: z.enum(['CONVENTION', 'PATTERN', 'GOTCHA', 'SOLUTION', 'ARCHITECTURE', 'DEPENDENCY']).optional(),
380
+ tags: z.array(z.string()).optional(),
381
+ limit: z.number().min(1).max(20).optional().describe('Max results'),
382
+ },
383
+ }, async (args) => {
384
+ try {
385
+ const result = await apiCall('/api/v1/recall', args);
386
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
387
+ }
388
+ catch (e) {
389
+ return { content: [{ type: 'text', text: `Failed to recall from Engram: ${e}` }], isError: true };
390
+ }
391
+ });
392
+ server.registerTool('engram_report_outcome', {
393
+ title: 'Engram Report Outcome',
394
+ description: 'Report whether a recalled memory helped. This improves future memory ranking.',
395
+ inputSchema: {
396
+ memory_id: z.string().describe('The memory ID from recall/start results'),
397
+ success: z.boolean().describe('true = helped, false = did not help or was wrong'),
398
+ detail: z.string().optional().describe('Explain the outcome'),
399
+ failure_reason: z.enum(['outdated', 'wrong_context', 'incorrect', 'partial', 'other']).optional(),
400
+ },
401
+ }, async (args) => {
402
+ try {
403
+ const result = await apiCall('/api/v1/report', args);
404
+ return { content: [{ type: 'text', text: result.message }] };
405
+ }
406
+ catch (e) {
407
+ return { content: [{ type: 'text', text: `Failed to report Engram outcome: ${e}` }], isError: true };
408
+ }
409
+ });
410
+ server.registerTool('engram_get_context', {
411
+ title: 'Engram Get Context',
412
+ description: 'Load repo memory by type. Use engram_start for normal session startup.',
413
+ inputSchema: {
414
+ repo: z.string().describe('Repository name'),
415
+ file: z.string().optional().describe('Current file path'),
416
+ task: z.string().optional().describe('What you are about to do'),
417
+ },
418
+ }, async (args) => {
419
+ try {
420
+ const result = await apiCall('/api/v1/context', args);
421
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
422
+ }
423
+ catch (e) {
424
+ return { content: [{ type: 'text', text: `Failed to get Engram context: ${e}` }], isError: true };
425
+ }
426
+ });
427
+ server.registerTool('engram_skill', {
428
+ title: 'Engram Skill',
429
+ description: 'Load a complete skill guide by skill name. Call with no skill to list available skills.',
430
+ inputSchema: {
431
+ skill: z.string().optional().describe('Skill name, e.g. "code-review"'),
432
+ },
433
+ }, async (args) => {
434
+ try {
435
+ const result = await apiCall('/api/v1/skill', { skill: args.skill || '' });
436
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
437
+ }
438
+ catch (e) {
439
+ return { content: [{ type: 'text', text: `Failed to get Engram skill: ${e}` }], isError: true };
440
+ }
441
+ });
94
442
  // atm_store
95
443
  server.registerTool('atm_store', {
96
444
  title: 'Store Memory',
@@ -130,7 +478,7 @@ async function main() {
130
478
  const result = await apiCall('/api/v1/recall', args);
131
479
  const r = result;
132
480
  if (r.count === 0) {
133
- return { content: [{ type: 'text', text: 'No relevant memories found. Consider storing new knowledge with atm_store.' }] };
481
+ return { content: [{ type: 'text', text: 'No relevant memories found. Consider storing new knowledge with engram_store.' }] };
134
482
  }
135
483
  const summary = r.memories.slice(0, 3).map(m => m.content.split('\n')[0].slice(0, 80)).join(' | ');
136
484
  const formatted = r.memories.map((m, i) => {
@@ -140,7 +488,7 @@ async function main() {
140
488
  }).join('\n\n');
141
489
  const staleCount = r.memories.filter(m => m.stale).length;
142
490
  const staleNote = staleCount > 0 ? `\n\nNote: ${staleCount} memories are 30+ days old. Verify before acting on them.` : '';
143
- return { content: [{ type: 'text', text: `Found ${r.count} relevant memories.\n\nQuick summary: ${summary}\n\n${formatted}${staleNote}\n\nTip: Use atm_report_outcome to confirm or flag memories after using them.` }] };
491
+ return { content: [{ type: 'text', text: `Found ${r.count} relevant memories.\n\nQuick summary: ${summary}\n\n${formatted}${staleNote}\n\nTip: Use engram_report_outcome to confirm or flag memories after using them.` }] };
144
492
  }
145
493
  catch (e) {
146
494
  return { content: [{ type: 'text', text: `Failed to recall: ${e}` }], isError: true };
@@ -151,7 +499,7 @@ async function main() {
151
499
  title: 'Report Outcome',
152
500
  description: 'Report whether a recalled memory was helpful or not. This is critical for learning. Always report after using a recalled memory. If it failed, explain WHY.',
153
501
  inputSchema: {
154
- memory_id: z.string().describe('The memory ID from atm_recall results'),
502
+ memory_id: z.string().describe('The memory ID from engram_recall results'),
155
503
  success: z.boolean().describe('true = helped, false = did not help or was wrong'),
156
504
  detail: z.string().optional().describe('Explain the outcome. REQUIRED when success=false.'),
157
505
  failure_reason: z.enum(['outdated', 'wrong_context', 'incorrect', 'partial', 'other']).optional()
@@ -170,7 +518,7 @@ async function main() {
170
518
  // atm_get_context
171
519
  server.registerTool('atm_get_context', {
172
520
  title: 'Get Context',
173
- description: 'Load all relevant memories for a repository. Use at session start or when switching repos.',
521
+ description: 'Load all relevant memories for a repository. Use engram_start for normal session startup; use this when switching repos or when you need a focused repo dump.',
174
522
  inputSchema: {
175
523
  repo: z.string().describe('Repository name'),
176
524
  file: z.string().optional().describe('Current file path'),
@@ -193,7 +541,7 @@ async function main() {
193
541
  if (r.architecture.length)
194
542
  sections.push('## Architecture\n' + fmt(r.architecture));
195
543
  if (sections.length === 0) {
196
- return { content: [{ type: 'text', text: `No memories for repo "${args.repo}". Use atm_store to save useful findings as you work.` }] };
544
+ return { content: [{ type: 'text', text: `No memories for repo "${args.repo}". Use engram_store to save useful findings as you work.` }] };
197
545
  }
198
546
  const guidance = `\n---\n## When to use Engram this session\n\n**STORE** when you fix a hard bug, discover a convention, or find a solution.\n**RECALL** before architectural decisions or when encountering errors.\n**REPORT** after using a recalled memory (helps the system learn).\n\n_${r.total} memories loaded._`;
199
547
  return { content: [{ type: 'text', text: `# Team Context for ${args.repo}\n\n${sections.join('\n\n')}${guidance}` }] };
@@ -208,6 +556,12 @@ async function main() {
208
556
  description: 'Call this ONCE when you first connect to Engram, or when you need a refresher on how to use the memory system.',
209
557
  inputSchema: {
210
558
  agent_tool: z.string().optional().describe('Which AI tool you are (e.g. "claude-code", "cursor")'),
559
+ project: z.string().optional().describe('Project or product name, e.g. "HouseCompass"'),
560
+ repo: z.string().optional().describe('Current repository name'),
561
+ role: z.string().optional().describe('The role you are playing for this task'),
562
+ market: z.string().optional().describe('Target market/domain, e.g. "UK property"'),
563
+ task: z.string().optional().describe('What you are about to do'),
564
+ stack: z.array(z.string()).optional().describe('Detected stack, e.g. ["Next.js", "TypeScript"]'),
211
565
  },
212
566
  }, async (args) => {
213
567
  try {
@@ -220,12 +574,27 @@ async function main() {
220
574
  - Team members: ${r.workspace.members}
221
575
  - Repos: ${r.workspace.repos}
222
576
 
223
- ## Your 5 Tools
224
- - **atm_store** - Save knowledge for the team
225
- - **atm_recall** - Search before you decide
226
- - **atm_report_outcome** - Help the system learn
227
- - **atm_get_context** - Load repo knowledge at session start
228
- - **atm_setup** - This onboarding (you just called it)
577
+ ## Start Here
578
+ - **engram_start** - One-call session start: setup guidance + smart task context
579
+
580
+ ## Other Engram Tools
581
+ - **engram_smarter** - Load task-specific memories and skill guides when switching tasks
582
+ - **engram_cross_pollinate** - Reuse lessons from other repos in this workspace
583
+ - **engram_store** - Save knowledge for the team
584
+ - **engram_recall** - Search before you decide
585
+ - **engram_skill** - Load a complete skill guide
586
+ - **engram_report_outcome** - Help the system learn
587
+ - **engram_get_context** - Load repo knowledge by type
588
+ - **engram_setup** - This onboarding only
589
+
590
+ ## First Conversation
591
+ ${(r.first_conversation || []).map(s => `- ${s}`).join('\n') || '- Tell Engram your project, market, stack, role, and current task.'}
592
+
593
+ ## Immediate Next Calls
594
+ ${(r.immediate_next_calls || []).map(call => `### ${call.tool}\nWhy: ${call.why}\nPayload:\n\`\`\`json\n${JSON.stringify(call.example, null, 2)}\n\`\`\``).join('\n\n')}
595
+
596
+ ## Operating Protocol
597
+ ${(r.guidelines.operating_protocol || []).map(s => `- ${s}`).join('\n')}
229
598
 
230
599
  ## When to Store
231
600
  ${r.guidelines.store_when.map(s => `- ${s}`).join('\n')}
@@ -240,7 +609,7 @@ ${r.guidelines.recall_when.map(s => `- ${s}`).join('\n')}
240
609
  After using a recalled memory, report if it helped or not. This is how Engram learns.
241
610
 
242
611
  ---
243
- Setup complete. Start with **atm_get_context** for your current repo.`;
612
+ Setup complete. In normal use, call **engram_start** once at session start. Use **engram_cross_pollinate** when another project may have solved the same problem.`;
244
613
  return { content: [{ type: 'text', text }] };
245
614
  }
246
615
  catch (e) {
@@ -259,7 +628,7 @@ Setup complete. Start with **atm_get_context** for your current repo.`;
259
628
  const result = await apiCall('/api/v1/skill', { skill: args.skill || '' });
260
629
  const r = result;
261
630
  if (r.available_skills) {
262
- return { content: [{ type: 'text', text: `Available skills:\n${r.available_skills.map(s => `- ${s}`).join('\n')}\n\nUsage: atm_skill({ skill: "skill-name" })` }] };
631
+ return { content: [{ type: 'text', text: `Available skills:\n${r.available_skills.map(s => `- ${s}`).join('\n')}\n\nUsage: engram_skill({ skill: "skill-name" })` }] };
263
632
  }
264
633
  if (r.count === 0) {
265
634
  return { content: [{ type: 'text', text: r.message || `No memories found for skill "${args.skill}".` }] };
@@ -276,88 +645,40 @@ Setup complete. Start with **atm_get_context** for your current repo.`;
276
645
  description: 'Fetch relevant knowledge for your current project and task. Send a context summary (project name, tech stack, current task) and get back the most relevant memories, patterns, gotchas, and skill guides. Use this at the start of a session or when switching tasks to load relevant knowledge. The more specific your context, the better the results.',
277
646
  inputSchema: {
278
647
  context: z.string().describe('Context summary: project name, tech stack, current task. Example: "evimibul - Next.js 16, Prisma 5, Neon - fixing search aggregator, adding location filters"'),
648
+ repo: z.string().optional().describe('Current repository name'),
649
+ file: z.string().optional().describe('Current file path'),
279
650
  include_skills: z.boolean().optional().describe('Also fetch matching skill guides (default: true)'),
651
+ limit: z.number().min(1).max(30).optional().describe('Max memories to include'),
280
652
  },
281
653
  }, async (args) => {
282
654
  try {
283
- // Step 1: Recall relevant memories based on context
284
- const recallResult = await apiCall('/api/v1/recall', {
285
- query: args.context,
286
- limit: 20,
287
- });
288
- const memories = recallResult;
289
- // Step 2: Detect which skills might be relevant from context
290
- const contextLower = args.context.toLowerCase();
291
- const skillMap = {
292
- 'auth': ['auth', 'login', 'signup', 'authentication', 'nextauth', 'oauth', 'jwt'],
293
- 'database-migration': ['migration', 'schema', 'prisma migrate', 'alter table', 'add column'],
294
- 'deployment': ['deploy', 'production', 'vercel', 'fly.io', 'release', 'ci/cd'],
295
- 'code-review': ['review', 'pr', 'pull request', 'code quality'],
296
- 'security-audit': ['security', 'vulnerability', 'owasp', 'xss', 'csrf', 'injection'],
297
- 'performance': ['performance', 'slow', 'optimize', 'cache', 'speed', 'latency'],
298
- 'testing': ['test', 'jest', 'vitest', 'playwright', 'coverage'],
299
- 'api-design': ['api', 'endpoint', 'rest', 'graphql', 'route'],
300
- 'debugging': ['bug', 'error', 'debug', 'fix', 'crash', 'issue'],
301
- 'refactoring': ['refactor', 'clean', 'restructure', 'simplify'],
302
- 'error-handling': ['error handling', 'try catch', 'exception'],
303
- 'state-management': ['state', 'zustand', 'redux', 'context', 'store'],
304
- 'responsive-design': ['responsive', 'mobile', 'breakpoint', 'media query'],
305
- 'accessibility': ['accessibility', 'a11y', 'aria', 'screen reader'],
306
- 'monitoring': ['monitoring', 'logging', 'metrics', 'alert', 'observability'],
307
- 'data-modeling': ['schema', 'model', 'entity', 'relation', 'database design'],
308
- 'i18n': ['i18n', 'translation', 'locale', 'next-intl', 'internationalization'],
309
- 'cicd': ['ci', 'cd', 'pipeline', 'github actions', 'workflow'],
310
- 'git-workflow': ['git', 'branch', 'merge', 'rebase', 'commit'],
311
- 'documentation': ['docs', 'readme', 'documentation', 'api docs'],
312
- };
313
- const matchedSkills = [];
314
- if (args.include_skills !== false) {
315
- for (const [skill, keywords] of Object.entries(skillMap)) {
316
- if (keywords.some(kw => contextLower.includes(kw))) {
317
- matchedSkills.push(skill);
318
- }
319
- }
320
- }
321
- // Step 3: Fetch matched skills (max 2 most relevant)
322
- const skillResults = [];
323
- for (const skill of matchedSkills.slice(0, 2)) {
324
- try {
325
- const sr = await apiCall('/api/v1/skill', { skill });
326
- if (sr.count > 0) {
327
- skillResults.push(`## Skill: ${sr.skill} (${sr.count} steps)\n${sr.combined}`);
328
- }
329
- }
330
- catch { /* skip */ }
331
- }
332
- // Step 4: Build response
333
- const sections = [];
334
- sections.push(`# Smart Context Loaded\n\nContext: ${args.context}\n`);
335
- if (memories.count > 0) {
336
- const byType = {};
337
- for (const m of memories.memories) {
338
- const type = m.type || 'OTHER';
339
- if (!byType[type])
340
- byType[type] = [];
341
- byType[type].push(m.content);
342
- }
343
- sections.push(`## ${memories.count} Relevant Memories\n`);
344
- for (const [type, items] of Object.entries(byType)) {
345
- sections.push(`### ${type} (${items.length})`);
346
- for (const item of items.slice(0, 5)) {
347
- sections.push(`- ${item.slice(0, 200)}`);
348
- }
349
- }
350
- }
351
- if (skillResults.length > 0) {
352
- sections.push('\n' + skillResults.join('\n\n'));
353
- }
354
- sections.push('\n---\nKnowledge loaded. Apply these patterns, respect these gotchas, follow these conventions throughout the session.');
355
- return { content: [{ type: 'text', text: sections.join('\n') }] };
655
+ const result = await apiCall('/api/v1/smarter', args);
656
+ return { content: [{ type: 'text', text: result.markdown }] };
356
657
  }
357
658
  catch (e) {
358
659
  return { content: [{ type: 'text', text: `Failed to load smart context: ${e}` }], isError: true };
359
660
  }
360
661
  });
662
+ // atm_cross_pollinate
663
+ server.registerTool('atm_cross_pollinate', {
664
+ title: 'Cross-Pollinate Project Knowledge',
665
+ description: 'Find reusable lessons from other repositories in the workspace. Use when the current task resembles something another Varol Inc. project may have solved already, or before building a pattern that might exist elsewhere.',
666
+ inputSchema: {
667
+ target_repo: z.string().describe('Current repository that needs help'),
668
+ context: z.string().describe('Current task, stack, error, or decision to cross-pollinate'),
669
+ source_repos: z.array(z.string()).optional().describe('Optional source repo names to search'),
670
+ include_public: z.boolean().optional().describe('Include public starter-pack memories (default: true)'),
671
+ limit: z.number().min(1).max(25).optional().describe('Max cross-project memories to return'),
672
+ },
673
+ }, async (args) => {
674
+ try {
675
+ const result = await apiCall('/api/v1/cross-pollinate', args);
676
+ return { content: [{ type: 'text', text: result.markdown }] };
677
+ }
678
+ catch (e) {
679
+ return { content: [{ type: 'text', text: `Failed to cross-pollinate: ${e}` }], isError: true };
680
+ }
681
+ });
361
682
  // Connect via stdio
362
683
  const transport = new StdioServerTransport();
363
684
  await server.connect(transport);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "engram-tools",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Shared memory for AI coding agents. Store, recall, and learn across tools, sessions, and teams.",
5
5
  "type": "module",
6
+ "homepage": "https://engram.tools",
6
7
  "main": "dist/index.js",
7
8
  "bin": {
8
9
  "engram-tools": "dist/index.js"
@@ -24,14 +25,25 @@
24
25
  "db:migrate": "prisma migrate dev",
25
26
  "db:seed": "tsx prisma/seed.ts",
26
27
  "db:setup": "prisma db push && tsx prisma/seed.ts",
27
- "typecheck": "tsc --noEmit"
28
+ "typecheck": "tsc --noEmit",
29
+ "test:product": "tsx tests/product-smoke.ts",
30
+ "test:signup": "tsx tests/signup-otp.test.ts",
31
+ "test:setup": "tsx tests/setup-cli.test.ts",
32
+ "test:platform": "tsx tests/platform-setup.test.ts",
33
+ "test:visibility": "tsx tests/visibility.test.ts",
34
+ "test:parity": "tsx tests/api-parity.test.ts",
35
+ "test:all": "npm run build && npm run test:parity && npm run test:visibility && npm run test:product"
28
36
  },
29
37
  "keywords": [
30
38
  "mcp",
39
+ "model-context-protocol",
31
40
  "ai",
41
+ "ai-agents",
32
42
  "memory",
33
43
  "team",
34
- "coding-agent"
44
+ "coding-agent",
45
+ "claude",
46
+ "cursor"
35
47
  ],
36
48
  "author": "Emre Varol",
37
49
  "license": "MIT",