@technomoron/agent-run 0.99.8 → 0.99.10

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/CHANGES CHANGED
@@ -4,6 +4,15 @@ CHANGES
4
4
  Unreleased (2026-04-24)
5
5
  -----------------------
6
6
 
7
+ Version 0.99.10 (2026-04-27)
8
+ ----------------------------
9
+ * Add `paths.globalMemoryDir` to render context and expose it from default Codex, Claude, AGENTS, and CLAUDE templates.
10
+
11
+ Version 0.99.9 (2026-04-26)
12
+ ---------------------------
13
+ * Add `{config-root}/notes/memory` as an optional shared memory directory passed with `--add-dir` to Codex and Claude when it exists.
14
+ * Add a starter `skills/personal-memory.md` file to the packaged config skeleton.
15
+
7
16
  Version 0.99.8 (2026-04-26)
8
17
  ---------------------------
9
18
  * Skip stale `codex` or `claude` PATH redirect shims that print `Run agent-run instead` when locating the real underlying tool binary.
package/README.md CHANGED
@@ -169,8 +169,9 @@ Per-profile override templates can be placed in:
169
169
 
170
170
  A complete starter lives in `examples/basic-config`. It includes a minimal
171
171
  project, `.agent-run.env`, a config root with global templates and snippets,
172
- profile-local templates, skill templates, profile skill overrides, tool config
173
- overrides, guardrails, checks, and generated runtime paths.
172
+ profile-local templates, skill templates, a personal memory skill, profile
173
+ skill overrides, tool config overrides, guardrails, checks, and generated
174
+ runtime paths.
174
175
 
175
176
  To copy the packaged starter config root into your default config location:
176
177
 
package/dist/agent-run.js CHANGED
@@ -482,10 +482,10 @@ function runTool(parsed) {
482
482
  ensureRunnableProfile(configRoot, agentDir, profile);
483
483
  syncAgentProfile(projectRoot, agentDir);
484
484
  if (command === 'codex') {
485
- runCodex(realBinary, permissionArgs, agentDir, args, projectRoot, wrapperArgs);
485
+ runCodex(realBinary, permissionArgs, agentDir, configRoot, args, projectRoot, wrapperArgs);
486
486
  return;
487
487
  }
488
- runClaude(realBinary, permissionArgs, agentDir, args, projectRoot);
488
+ runClaude(realBinary, permissionArgs, agentDir, configRoot, args, projectRoot);
489
489
  }
490
490
  function runInit(parsed) {
491
491
  const projectRoot = findProjectRoot(parsed.targetPath);
@@ -972,6 +972,7 @@ function buildRenderContext(projectRoot, agentDir, configRoot, manifest, env) {
972
972
  reviewDir: resolveRuntimePath(configRoot, manifest.paths.reviewDir, env, baseContext),
973
973
  reviewFile: resolveRuntimePath(configRoot, manifest.paths.reviewFile, env, baseContext),
974
974
  memoriesDir: resolveRuntimePath(configRoot, manifest.paths.memoriesDir, env, baseContext),
975
+ globalMemoryDir: globalMemoryDir(configRoot),
975
976
  codexHomeDir: path.join(resolveRuntimePath(configRoot, manifest.paths.memoriesDir, env, baseContext), 'codex-home'),
976
977
  overridesDir: path.join(agentDir, 'overrides'),
977
978
  codexSkillsDir: path.join(agentDir, '.agents', 'skills'),
@@ -1459,7 +1460,7 @@ function countWarnings(findings) {
1459
1460
  function formatError(error) {
1460
1461
  return error instanceof Error ? error.message : String(error);
1461
1462
  }
1462
- function runCodex(realBinary, permissionArgs, agentDir, args, projectRoot, wrapperArgs) {
1463
+ function runCodex(realBinary, permissionArgs, agentDir, configRoot, args, projectRoot, wrapperArgs) {
1463
1464
  const agentsPath = path.join(agentDir, 'AGENTS.md');
1464
1465
  if (!fs.existsSync(agentsPath)) {
1465
1466
  failMissingConfig('codex', agentDir);
@@ -1482,6 +1483,7 @@ function runCodex(realBinary, permissionArgs, agentDir, args, projectRoot, wrapp
1482
1483
  `system_prompt_file=${agentsPath}`,
1483
1484
  '--config',
1484
1485
  'project_doc_max_bytes=65536',
1486
+ ...globalMemoryArgs(configRoot),
1485
1487
  '-C',
1486
1488
  projectRoot,
1487
1489
  ...(wrapperArgs.codexSandboxMode === 'sandboxed' && wrapperArgs.codexNetwork
@@ -1497,7 +1499,7 @@ function buildCodexRuntimeArgs(wrapperArgs) {
1497
1499
  }
1498
1500
  return ['-a', 'never', '-s', 'danger-full-access'];
1499
1501
  }
1500
- function runClaude(realBinary, permissionArgs, agentDir, args, projectRoot) {
1502
+ function runClaude(realBinary, permissionArgs, agentDir, configRoot, args, projectRoot) {
1501
1503
  const claudePath = path.join(agentDir, 'CLAUDE.md');
1502
1504
  if (!fs.existsSync(claudePath)) {
1503
1505
  failMissingConfig('claude', agentDir);
@@ -1519,9 +1521,17 @@ function runClaude(realBinary, permissionArgs, agentDir, args, projectRoot) {
1519
1521
  projectRoot,
1520
1522
  '--add-dir',
1521
1523
  agentDir,
1524
+ ...globalMemoryArgs(configRoot),
1522
1525
  ...args
1523
1526
  ], shouldUseShell(realBinary), env, projectRoot, (code) => postflightProjectCheck(projectRoot, agentDir, code));
1524
1527
  }
1528
+ function globalMemoryArgs(configRoot) {
1529
+ const memoryDir = globalMemoryDir(configRoot);
1530
+ return fs.existsSync(memoryDir) ? ['--add-dir', memoryDir] : [];
1531
+ }
1532
+ function globalMemoryDir(configRoot) {
1533
+ return path.join(configRoot, 'notes', 'memory');
1534
+ }
1525
1535
  function postflightProjectCheck(projectRoot, agentDir, code) {
1526
1536
  const localAiFiles = findLocalAiFiles(projectRoot, agentDir);
1527
1537
  if (localAiFiles.length === 0) {
@@ -2210,6 +2220,12 @@ function defaultToolInstructionsTemplate(isClaude) {
2210
2220
  '{{ paths.memoriesDir }}',
2211
2221
  '```',
2212
2222
  '',
2223
+ 'Global memory directory:',
2224
+ '',
2225
+ '```text',
2226
+ '{{ paths.globalMemoryDir }}',
2227
+ '```',
2228
+ '',
2213
2229
  'Changes file:',
2214
2230
  '',
2215
2231
  '```text',
@@ -2245,7 +2261,8 @@ function defaultCodexConfigTemplate() {
2245
2261
  '[sandbox_workspace_write]',
2246
2262
  'writable_roots = [',
2247
2263
  ' "{{ projectRoot }}",',
2248
- ' "{{ agentDir }}"',
2264
+ ' "{{ agentDir }}",',
2265
+ ' "{{ paths.globalMemoryDir }}"',
2249
2266
  ']',
2250
2267
  'network_access = false',
2251
2268
  ''
@@ -2256,7 +2273,8 @@ function defaultClaudeSettingsTemplate() {
2256
2273
  '{',
2257
2274
  ' "env": {',
2258
2275
  ' "AGENT_DIR": "{{ agentDir }}",',
2259
- ' "AGENT_RUN_PROJECT_ROOT": "{{ projectRoot }}"',
2276
+ ' "AGENT_RUN_PROJECT_ROOT": "{{ projectRoot }}",',
2277
+ ' "AGENT_GLOBAL_MEMORY_DIR": "{{ paths.globalMemoryDir }}"',
2260
2278
  ' }',
2261
2279
  '}',
2262
2280
  ''
@@ -2272,7 +2290,8 @@ function defaultCodexConfigContent(context) {
2272
2290
  '[sandbox_workspace_write]',
2273
2291
  'writable_roots = [',
2274
2292
  ` ${jsonString(context.projectRoot)},`,
2275
- ` ${jsonString(context.agentDir)}`,
2293
+ ` ${jsonString(context.agentDir)},`,
2294
+ ` ${jsonString(context.paths.globalMemoryDir)}`,
2276
2295
  ']',
2277
2296
  'network_access = false',
2278
2297
  ''
@@ -2282,7 +2301,8 @@ function defaultClaudeSettingsContent(context) {
2282
2301
  return `${JSON.stringify({
2283
2302
  env: {
2284
2303
  AGENT_DIR: context.agentDir,
2285
- AGENT_RUN_PROJECT_ROOT: context.projectRoot
2304
+ AGENT_RUN_PROJECT_ROOT: context.projectRoot,
2305
+ AGENT_GLOBAL_MEMORY_DIR: context.paths.globalMemoryDir
2286
2306
  }
2287
2307
  }, null, 2)}\n`;
2288
2308
  }
@@ -8,8 +8,8 @@ It contains two pieces:
8
8
  - `project/`: a minimal project with `.agent-run.env` pointing at the bundled
9
9
  config root.
10
10
  - `agent-config/`: a complete config root with global templates, snippets,
11
- skill templates, a profile manifest, profile-local instructions, and profile
12
- overrides.
11
+ skill templates, a personal memory skill, a profile manifest, profile-local
12
+ instructions, and profile overrides.
13
13
 
14
14
  Try it from this repository after building:
15
15
 
@@ -12,6 +12,7 @@ Do not edit this generated file. Edit `agent-run.jsonc` and `local.md.njk`.
12
12
  - agentDir: `{{ agentDir }}`
13
13
  - reviewFile: `{{ paths.reviewFile }}`
14
14
  - memoriesDir: `{{ paths.memoriesDir }}`
15
+ - globalMemoryDir: `{{ paths.globalMemoryDir }}`
15
16
 
16
17
  ## Skills
17
18
 
@@ -5,3 +5,5 @@
5
5
 
6
6
  {% endfor %}
7
7
  Claude reads this file from the private agent directory.
8
+
9
+ globalMemoryDir: `{{ paths.globalMemoryDir }}`
@@ -2,6 +2,7 @@
2
2
  "env": {
3
3
  "AGENT_DIR": "{{ agentDir }}",
4
4
  "AGENT_RUN_PROJECT_ROOT": "{{ projectRoot }}",
5
+ "AGENT_GLOBAL_MEMORY_DIR": "{{ paths.globalMemoryDir }}",
5
6
  "STARTER_PROFILE": "{{ profile }}"
6
7
  }
7
8
  }
@@ -6,6 +6,7 @@ sandbox_mode = "workspace-write"
6
6
  writable_roots = [
7
7
  "{{ projectRoot }}",
8
8
  "{{ agentDir }}",
9
- "{{ paths.memoriesDir }}"
9
+ "{{ paths.memoriesDir }}",
10
+ "{{ paths.globalMemoryDir }}"
10
11
  ]
11
12
  network_access = false
@@ -0,0 +1 @@
1
+ Read `./notes/memory/README.md` first. Follow its file index and read only the files relevant to the current task. Do not edit memory files unless the user explicitly asks.
@@ -2,6 +2,7 @@
2
2
  "env": {
3
3
  "AGENT_DIR": "{{ agentDir }}",
4
4
  "AGENT_RUN_PROJECT_ROOT": "{{ projectRoot }}",
5
+ "AGENT_GLOBAL_MEMORY_DIR": "{{ paths.globalMemoryDir }}",
5
6
  "STARTER_PROFILE": "{{ profile }}",
6
7
  "STARTER_OVERRIDE": "true"
7
8
  }
@@ -6,6 +6,7 @@ sandbox_mode = "workspace-write"
6
6
  writable_roots = [
7
7
  "{{ projectRoot }}",
8
8
  "{{ agentDir }}",
9
- "{{ paths.memoriesDir }}"
9
+ "{{ paths.memoriesDir }}",
10
+ "{{ paths.globalMemoryDir }}"
10
11
  ]
11
12
  network_access = false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@technomoron/agent-run",
3
- "version": "0.99.8",
3
+ "version": "0.99.10",
4
4
  "packageManager": "pnpm@10.28.1",
5
5
  "bin": {
6
6
  "agent-run": "dist/agent-run.js"