{"_id":"@augmem/cortext-openclaw-plugin","_rev":"8-ab86dfab9b94ac4e2cba0002fdc36c9c","name":"@augmem/cortext-openclaw-plugin","dist-tags":{"latest":"0.2.4"},"versions":{"0.1.0":{"name":"@augmem/cortext-openclaw-plugin","version":"0.1.0","keywords":["openclaw","openclaw-plugin","memory","context-engine","cortext"],"license":"Apache-2.0","_id":"@augmem/cortext-openclaw-plugin@0.1.0","maintainers":[{"name":"gwillen","email":"gabewillen@gmail.com"}],"homepage":"https://github.com/augmem/cortext-openclaw-plugin#readme","bugs":{"url":"https://github.com/augmem/cortext-openclaw-plugin/issues"},"dist":{"shasum":"da1a796efa6526b5a24cd72cebc68caa560f8881","tarball":"https://registry.npmjs.org/@augmem/cortext-openclaw-plugin/-/cortext-openclaw-plugin-0.1.0.tgz","fileCount":19,"integrity":"sha512-d7zC4TshyrEyHwlXUQPGQttHDg2btfPJWBqrYpqMShB1bptNvFtYZQ2zeFwBzwqQpLqGaAwrMINfkAfAT2Rkmw==","signatures":[{"sig":"MEQCIBNpuZi1lpCGhuu0p7MtcMhL+4slAlrNA3aP0ZQXOJ/SAiBFhfy9a+dFm1v6foLwI+WoI68IUsjoPmTeJdpNy2QVIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53426},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"899dd1eabe118c113ee430dccccc9987377e7195","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"rm -rf dist","test:unit":"npm run build && node --test tests/store.test.mjs tests/cortext.test.mjs tests/config.test.mjs","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run clean && npm run build","test:integration":"npm run build && node bench/integration.mjs","test:integration:gateway":"npm run build && node bench/integration-gateway.mjs"},"_npmUser":{"name":"gwillen","email":"gabewillen@gmail.com"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/augmem/cortext-openclaw-plugin.git","type":"git"},"_npmVersion":"11.8.0","description":"Cortext memory for OpenClaw: a per-conversation-isolated context engine plus an interrupt gate over streaming reasoning.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@augmem/cortext":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.0.0"},"peerDependencies":{"openclaw":"*"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cortext-openclaw-plugin_0.1.0_1783981528605_0.25770822001170224","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@augmem/cortext-openclaw-plugin","version":"0.1.1","keywords":["openclaw","openclaw-plugin","memory","context-engine","cortext"],"license":"Apache-2.0","_id":"@augmem/cortext-openclaw-plugin@0.1.1","maintainers":[{"name":"gwillen","email":"gabewillen@gmail.com"}],"homepage":"https://github.com/augmem/cortext-openclaw-plugin#readme","bugs":{"url":"https://github.com/augmem/cortext-openclaw-plugin/issues"},"dist":{"shasum":"5244744b0ff09db2b08bb62fd00bb281ca99c51d","tarball":"https://registry.npmjs.org/@augmem/cortext-openclaw-plugin/-/cortext-openclaw-plugin-0.1.1.tgz","fileCount":19,"integrity":"sha512-GKFLCZ+/LOf7Pw0fVq3Pg8B+n3yw4tANpTAx20xBlqIObzNx2xSXh/kY8s7SMQ/AcKTEcttCFCss2xncgW/pug==","signatures":[{"sig":"MEQCIHd3qlXGWjrn1k07+dAboTL1WuuZwCCeg+60wBfxDv9lAiBygcp/Vifr1Ra6v7640VnYw4YpZ97VigKgEaVS6B1AWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53635},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"8cec1e1c6bf6e145e52d53e2c0d72714e0add499","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"rm -rf dist","test:unit":"npm run build && node --test tests/store.test.mjs tests/cortext.test.mjs tests/config.test.mjs","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run clean && npm run build","test:integration":"npm run build && node bench/integration.mjs","test:integration:gateway":"npm run build && node bench/integration-gateway.mjs"},"_npmUser":{"name":"gwillen","email":"gabewillen@gmail.com"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/augmem/cortext-openclaw-plugin.git","type":"git"},"_npmVersion":"11.8.0","description":"Cortext memory for OpenClaw: a per-conversation-isolated context engine plus an interrupt gate over streaming reasoning.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@augmem/cortext":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.0.0"},"peerDependencies":{"openclaw":"*"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cortext-openclaw-plugin_0.1.1_1783983083919_0.09009797096781069","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@augmem/cortext-openclaw-plugin","version":"0.1.2","keywords":["openclaw","openclaw-plugin","memory","context-engine","cortext"],"license":"Apache-2.0","_id":"@augmem/cortext-openclaw-plugin@0.1.2","maintainers":[{"name":"gwillen","email":"gabewillen@gmail.com"}],"homepage":"https://github.com/augmem/cortext-openclaw-plugin#readme","bugs":{"url":"https://github.com/augmem/cortext-openclaw-plugin/issues"},"dist":{"shasum":"39f0b20c0cd22c66151a52de0687516b5b20bc88","tarball":"https://registry.npmjs.org/@augmem/cortext-openclaw-plugin/-/cortext-openclaw-plugin-0.1.2.tgz","fileCount":19,"integrity":"sha512-AkNjGu7Vmly9MLoNaKS+qrWNj4eHnjqh3UEIE0lUxbZ9AXz1NfmHIdiGEJCpj/qBhm1uEnMimhvQmcn/j40dkQ==","signatures":[{"sig":"MEQCIBt+WStALGyf1z7/dOSAIMuR9t0KrPpwH1ZRtTgtOT4oAiAKEELrIro8ojST5AGwHHUMU7gAvAfmTXYOHa1nLXw3SQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54707},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"c303ae5fb3e956439e49f29f0d6ac7ec33ddc245","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"rm -rf dist","test:unit":"npm run build && node --test tests/store.test.mjs tests/cortext.test.mjs tests/config.test.mjs","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run clean && npm run build","test:integration":"npm run build && node bench/integration.mjs","test:integration:gateway":"npm run build && node bench/integration-gateway.mjs"},"_npmUser":{"name":"gwillen","email":"gabewillen@gmail.com"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/augmem/cortext-openclaw-plugin.git","type":"git"},"_npmVersion":"11.8.0","description":"Cortext memory for OpenClaw: a per-conversation-isolated context engine plus an interrupt gate over streaming reasoning.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@augmem/cortext":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.0.0"},"peerDependencies":{"openclaw":"*"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cortext-openclaw-plugin_0.1.2_1783983865735_0.8570910437954697","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@augmem/cortext-openclaw-plugin","version":"0.2.0","keywords":["openclaw","openclaw-plugin","memory","context-engine","cortext"],"license":"Apache-2.0","_id":"@augmem/cortext-openclaw-plugin@0.2.0","maintainers":[{"name":"gwillen","email":"gabewillen@gmail.com"}],"homepage":"https://github.com/augmem/cortext-openclaw-plugin#readme","bugs":{"url":"https://github.com/augmem/cortext-openclaw-plugin/issues"},"dist":{"shasum":"6894e15f9ea0f004a6e26718b2ad18a5117b2ef7","tarball":"https://registry.npmjs.org/@augmem/cortext-openclaw-plugin/-/cortext-openclaw-plugin-0.2.0.tgz","fileCount":21,"integrity":"sha512-YIC9+A8PDznAceWt1bBpZqeAoRe+VnBjWzuJqdJkFzNLrj5FCEyLvvONANEbaaCq+OUx3StNhm+4AYfJyJWPdQ==","signatures":[{"sig":"MEYCIQCjmgAQZoGRaYu5iO8uCtBNM50lDVJWrTVqHImSvtWeJwIhAP0OEvYeqiQE+EvXJZv0UKgUR5//ECathbwM59AQPsZm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69110},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"1f86fb6a098073936ec0c456d82986fb0e62b77b","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"rm -rf dist","test:unit":"npm run build && node --test tests/store.test.mjs tests/cortext.test.mjs tests/config.test.mjs","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run clean && npm run build","test:integration":"npm run build && node bench/integration.mjs","test:integration:gateway":"npm run build && node bench/integration-gateway.mjs"},"_npmUser":{"name":"gwillen","email":"gabewillen@gmail.com"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/augmem/cortext-openclaw-plugin.git","type":"git"},"_npmVersion":"11.8.0","description":"Cortext memory for OpenClaw: a per-conversation-isolated context engine plus an interrupt gate over streaming reasoning.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@augmem/cortext":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.0.0"},"peerDependencies":{"openclaw":"*"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cortext-openclaw-plugin_0.2.0_1783985285445_0.674718952875669","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@augmem/cortext-openclaw-plugin","version":"0.2.1","keywords":["openclaw","openclaw-plugin","memory","context-engine","cortext"],"license":"Apache-2.0","_id":"@augmem/cortext-openclaw-plugin@0.2.1","maintainers":[{"name":"gwillen","email":"gabewillen@gmail.com"}],"homepage":"https://github.com/augmem/cortext-openclaw-plugin#readme","bugs":{"url":"https://github.com/augmem/cortext-openclaw-plugin/issues"},"dist":{"shasum":"90928de75542ab13ec13a2770174fbc8762f826b","tarball":"https://registry.npmjs.org/@augmem/cortext-openclaw-plugin/-/cortext-openclaw-plugin-0.2.1.tgz","fileCount":21,"integrity":"sha512-nJACoWkkmVYVMODCH110RAiFrpo4JkmR+4RJkrY74ZgDwI+f8Nf0zRl/xKoapZnuRrGv8+1DsT1i1rh/g2a0KQ==","signatures":[{"sig":"MEQCIFz8w5xJCpLWwg0trCXaA3YTLGcnzAFlKLgxVkJazdrQAiA7V1JC7eYKDWv+flUEc9eza2FGnY0IFcdZTLJbsP+PNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71609},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"51c071817139ba6f113e3d570259912874be4bd9","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"rm -rf dist","test:unit":"npm run build && node --test tests/store.test.mjs tests/cortext.test.mjs tests/config.test.mjs","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run clean && npm run build","test:integration":"npm run build && node bench/integration.mjs","test:integration:gateway":"npm run build && node bench/integration-gateway.mjs","test:integration:compaction":"npm run build && node bench/integration-compaction.mjs"},"_npmUser":{"name":"gwillen","email":"gabewillen@gmail.com"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/augmem/cortext-openclaw-plugin.git","type":"git"},"_npmVersion":"11.8.0","description":"Cortext memory for OpenClaw: a per-conversation-isolated context engine plus an interrupt gate over streaming reasoning.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@augmem/cortext":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.0.0"},"peerDependencies":{"openclaw":"*"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cortext-openclaw-plugin_0.2.1_1784212146675_0.39968061853439907","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@augmem/cortext-openclaw-plugin","version":"0.2.2","keywords":["openclaw","openclaw-plugin","memory","context-engine","cortext"],"license":"Apache-2.0","_id":"@augmem/cortext-openclaw-plugin@0.2.2","maintainers":[{"name":"gwillen","email":"gabewillen@gmail.com"}],"homepage":"https://github.com/augmem/cortext-openclaw-plugin#readme","bugs":{"url":"https://github.com/augmem/cortext-openclaw-plugin/issues"},"dist":{"shasum":"d2c3e00df56ee32789a25df5467de72b870fdcdc","tarball":"https://registry.npmjs.org/@augmem/cortext-openclaw-plugin/-/cortext-openclaw-plugin-0.2.2.tgz","fileCount":21,"integrity":"sha512-HTWp7Rw48UTl+fQ9XCGsEO4mC9QAH/qleY1gynHLoOLla2LC9t07gedb7OMYH/HYQwCL8RInEWmQg3GzyO2u8w==","signatures":[{"sig":"MEYCIQCzccoMAU2Vyp8mYXSCmqyoCNZpnFnSI6EZAEZvx6VL0AIhAOmGGjl6dQFNjxaV7YnhKjc23Z6wUHqcYf6au3Xh74Jo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72306},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"1474ccff157285168aa1af83049f0922076b93ed","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"rm -rf dist","test:unit":"npm run build && node --test tests/store.test.mjs tests/cortext.test.mjs tests/config.test.mjs","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run clean && npm run build","test:integration":"npm run build && node bench/integration.mjs","test:integration:gateway":"npm run build && node bench/integration-gateway.mjs","test:integration:compaction":"npm run build && node bench/integration-compaction.mjs"},"_npmUser":{"name":"gwillen","email":"gabewillen@gmail.com"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/augmem/cortext-openclaw-plugin.git","type":"git"},"_npmVersion":"11.8.0","description":"Cortext memory for OpenClaw: a per-conversation-isolated context engine plus an interrupt gate over streaming reasoning.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@augmem/cortext":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.0.0"},"peerDependencies":{"openclaw":"*"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cortext-openclaw-plugin_0.2.2_1784215339950_0.9176793106729184","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@augmem/cortext-openclaw-plugin","version":"0.2.3","keywords":["openclaw","openclaw-plugin","memory","context-engine","cortext"],"license":"Apache-2.0","_id":"@augmem/cortext-openclaw-plugin@0.2.3","maintainers":[{"name":"gwillen","email":"gabewillen@gmail.com"}],"homepage":"https://github.com/augmem/cortext-openclaw-plugin#readme","bugs":{"url":"https://github.com/augmem/cortext-openclaw-plugin/issues"},"dist":{"shasum":"9b9dd2251f38352a71966dba9668df01b34c9291","tarball":"https://registry.npmjs.org/@augmem/cortext-openclaw-plugin/-/cortext-openclaw-plugin-0.2.3.tgz","fileCount":21,"integrity":"sha512-iGOJ7bDLljDCS0Ga3ocEafcIThnrCkDwfZ4AD5NVwpkAtDTCmDqaK/JIJ5wDJFixsJ25LNwgVYmVkEMo54Q30A==","signatures":[{"sig":"MEQCIQDImAh+lcV1uZNCAjIOBcS8oe7wT/ELoUlbkBjkURh/NwIfUgX0MCc/xqcSquE4cXoVFAXLXHP2tMk7n00ZPIQSnA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72006},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18"},"gitHead":"ea36c9db292446d55b5d35f316737eec65fb2984","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.json","clean":"rm -rf dist","test:unit":"npm run build && node --test tests/store.test.mjs tests/cortext.test.mjs tests/config.test.mjs","typecheck":"tsc -p tsconfig.json --noEmit","prepublishOnly":"npm run clean && npm run build","test:integration":"npm run build && node bench/integration.mjs","test:integration:gateway":"npm run build && node bench/integration-gateway.mjs","test:integration:compaction":"npm run build && node bench/integration-compaction.mjs"},"_npmUser":{"name":"gwillen","email":"gabewillen@gmail.com"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/augmem/cortext-openclaw-plugin.git","type":"git"},"_npmVersion":"11.8.0","description":"Cortext memory for OpenClaw: a per-conversation-isolated context engine plus an interrupt gate over streaming reasoning.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@augmem/cortext":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0","@types/node":"^20.0.0"},"peerDependencies":{"openclaw":"*"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/cortext-openclaw-plugin_0.2.3_1784219683885_0.12138033332921183","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@augmem/cortext-openclaw-plugin","version":"0.2.4","description":"Cortext memory for OpenClaw: a per-conversation-isolated context engine plus an interrupt gate over streaming reasoning.","license":"Apache-2.0","type":"module","main":"dist/index.js","types":"dist/index.d.ts","repository":{"type":"git","url":"git+https://github.com/augmem/cortext-openclaw-plugin.git"},"homepage":"https://github.com/augmem/cortext-openclaw-plugin#readme","bugs":{"url":"https://github.com/augmem/cortext-openclaw-plugin/issues"},"openclaw":{"extensions":["./dist/index.js"]},"engines":{"node":">=18"},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","test":"npm run build && node --test tests/*.test.mjs","test:integration":"npm run build && node bench/integration.mjs","test:integration:gateway":"npm run build && node bench/integration-gateway.mjs","test:integration:compaction":"npm run build && node bench/integration-compaction.mjs","test:unit":"npm run build && node --test tests/store.test.mjs tests/cortext.test.mjs tests/config.test.mjs","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"dependencies":{"@augmem/cortext":"^1.2.3"},"devDependencies":{"@types/node":"^20.0.0","typescript":"^5.4.0"},"peerDependencies":{"openclaw":"*"},"peerDependenciesMeta":{"openclaw":{"optional":true}},"keywords":["openclaw","openclaw-plugin","memory","context-engine","cortext"],"gitHead":"7d6d34b5eb1894b5add018c84a7f4baf1708f04f","_id":"@augmem/cortext-openclaw-plugin@0.2.4","_nodeVersion":"24.11.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-pK7DXtc+SQ3r6ZkHsyZV0UxoNJPu8CShcWDYNo4m2J2tULgIyy9DOvdBg/7bp8dljTuJV4UAh2jAgFSIs+zdLQ==","shasum":"43c2fe8ae96b8687e4c1704970f7d1c6edfa0d83","tarball":"https://registry.npmjs.org/@augmem/cortext-openclaw-plugin/-/cortext-openclaw-plugin-0.2.4.tgz","fileCount":21,"unpackedSize":73071,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCl9NLk9kFRoTHp/YZBtX+PyTM3V0bZHvG3LbnHFPD4awIgT1m9ULwZFS5DyjdI2v9d14tcGk944CLb1BmCLLpXbTo="}]},"_npmUser":{"name":"gwillen","email":"gabewillen@gmail.com"},"directories":{},"maintainers":[{"name":"gwillen","email":"gabewillen@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cortext-openclaw-plugin_0.2.4_1784671804141_0.3524906223193349"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-13T22:25:28.483Z","modified":"2026-07-21T22:10:04.520Z","0.1.0":"2026-07-13T22:25:28.766Z","0.1.1":"2026-07-13T22:51:24.056Z","0.1.2":"2026-07-13T23:04:25.890Z","0.2.0":"2026-07-13T23:28:05.589Z","0.2.1":"2026-07-16T14:29:06.805Z","0.2.2":"2026-07-16T15:22:20.087Z","0.2.3":"2026-07-16T16:34:44.019Z","0.2.4":"2026-07-21T22:10:04.366Z"},"bugs":{"url":"https://github.com/augmem/cortext-openclaw-plugin/issues"},"license":"Apache-2.0","homepage":"https://github.com/augmem/cortext-openclaw-plugin#readme","keywords":["openclaw","openclaw-plugin","memory","context-engine","cortext"],"repository":{"type":"git","url":"git+https://github.com/augmem/cortext-openclaw-plugin.git"},"description":"Cortext memory for OpenClaw: a per-conversation-isolated context engine plus an interrupt gate over streaming reasoning.","maintainers":[{"name":"gwillen","email":"gabewillen@gmail.com"}],"readme":"# Cortext for OpenClaw\n\nDurable local memory for [OpenClaw](https://openclaw.ai), built on the native\n[`@augmem/cortext`](https://github.com/augmem/cortext) engine. It plugs into two\nOpenClaw surfaces (verified against the installed `openclaw` package's types, not\ndocs):\n\n1. **Context engine** (`api.registerContextEngine`) — Cortext owns the exclusive\n   `plugins.slots.contextEngine` slot. It writes each message to memory on\n   `ingest`, and prepends recalled long-term memory to the system prompt on\n   `assemble`. Memory is **isolated per conversation** by default (see\n   [Isolation](#isolation)).\n2. **Streaming gate** (`api.agent.events.registerAgentEventSubscription`) —\n   subscribes to the agent event stream and feeds `thinking` (reasoning) and\n   `assistant` deltas through Cortext's interrupt gate as they stream. When\n   Cortext reports `should_interrupt` / `at_boundary`, the recalled memory is\n   staged (keyed by the session's scope) for the next assembly, and — via\n   `api.on(\"before_agent_finalize\")` — a **revise of the current answer** is\n   requested (see the limits note below).\n\n## Isolation\n\nCortext keeps one SQLite store **per isolation scope** — source ids are metadata\nwithin a store, so distinct scopes are distinct databases (staged gate memory is\nkeyed by the same scope, so it can't cross the boundary either). `memoryScope`:\n\n- **`session`** (default) — one store per conversation. Safe when an agent serves\n  multiple people (a shared channel bot): memory never crosses conversations.\n  Verified live: a fresh session cannot recall a prior session's fact.\n- **`agent`** — one store per agent identity; memory persists across that agent's\n  sessions. Use only for **single-user** agents — it shares memory across every\n  conversation the agent handles. Verified live: agent `bob` cannot see agent\n  `main`'s memory (isolation is across agents, not sessions).\n- **`global`** — a single shared store.\n\nSession keys always fold into the scope key (sessionId alone is not unique across\nagents), and an absent/non-canonical agent normalizes to `main` like OpenClaw.\n\n## Requirements\n\n- Node.js ≥ 18.\n- `@augmem/cortext` with a native prebuild for your platform — installed as a\n  dependency. **On first use Cortext downloads its local model assets once**\n  (one network fetch); after that, memory runs fully offline with no per-turn\n  network and no LLM calls.\n- OpenClaw with the context-engine slot (`plugins.slots.contextEngine`).\n\n## Install\n\n```bash\nopenclaw plugins install @augmem/cortext-openclaw-plugin\n```\n\n```jsonc\n// openclaw.json\n{\n  \"plugins\": {\n    \"slots\": { \"contextEngine\": \"cortext\" },\n    \"entries\": {\n      \"cortext\": {\n        \"config\": { \"memoryScope\": \"session\", \"focus\": 0.45 },\n        // Only needed for the interrupt re-pass (forceRepass). OpenClaw blocks\n        // the before_agent_finalize hook for non-bundled plugins without it.\n        \"hooks\": { \"allowConversationAccess\": true }\n      }\n    }\n  }\n}\n```\n\nIf no engine is selected, OpenClaw runs its built-in `legacy` engine and this\nplugin is not used.\n\n## Configuration\n\nUnder `plugins.entries.cortext.config`:\n\n| Key | Default | Meaning |\n|-----|---------|---------|\n| `dbPath` | `cortext` | Directory (under the agent dir) for Cortext stores |\n| `memoryScope` | `session` | Isolation boundary: `session` / `agent` / `global` |\n| `focus` | `0.45` | F knob: retrieval breadth vs precision |\n| `sensitivity` | `0.5` | S knob: affective relaxation of the gate |\n| `stability` | `0.5` | T knob: gate refractory + boundary pacing |\n| `recallLimit` | `12` | max memories injected per assembly |\n| `interruptGate` | `true` | run the streaming gate |\n| `ingestReasoning` | `true` | feed `thinking` deltas, not just answer text |\n| `forceRepass` | `true` | request a revise on interrupt (see limits — may be a no-op) |\n| `autoConsolidate` | `true` | consolidate on compaction |\n| `compactionMode` | `hybrid` | `hybrid`: system + recall + verbatim tail; `full`: system + recall + working memory only |\n| `protectTail` | `6` | hybrid: trailing messages kept verbatim (exchange-aligned) |\n\n## Design and limits\n\n- **Recalled memory is untrusted input.** A prior turn could have ingested a\n  prompt-injection payload. Before injection, recalled text is stripped of\n  data-fence breakouts and fake system markers, and wrapped in a block that\n  explicitly labels it as reference data, not instructions. This is a mitigation,\n  not a guarantee.\n- **No cross-turn recall cache.** Recall queries Cortext live every assembly, so\n  a correction ingested this turn is reflected immediately (an earlier caching\n  bug returned stale facts).\n- **Compaction is a window, not surgery.** Cortext owns compaction\n  (`ownsCompaction: true`) and never calls a summarizer LLM: every message is\n  already in the durable store, so `compact` picks an exchange-aligned cut,\n  and each `assemble` drops the archived prefix from the model context and\n  bridges it with recalled memory. The on-disk transcript is never mutated —\n  nothing is destroyed, and archived content comes back through query-relevant\n  recall each turn (fresher than a frozen summary). The cut anchor is\n  content-based and self-healing: if the host rotates the transcript, the\n  window clears rather than over-dropping. Two modes (`compactionMode`):\n  - **`hybrid`** (default): keep system prompt + long-term recall + a verbatim\n    tail of the last `protectTail` messages, walked back to a user-message\n    boundary so the tail is a self-contained exchange.\n  - **`full`**: keep system prompt + Cortext memory only; the verbatim window\n    shrinks to the current exchange. Maximum savings — memory IS the context.\n\n  After compaction, both modes also inject the live working-memory snapshot\n  (it arrives with the same recall call — no extra query), deduplicated\n  against anything the kept tail already carries verbatim. This covers the\n  early-session gap where a just-archived fact is not yet surfaced by\n  query-relevant recall.\n\n  Verified live (gateway + budget-pressure compaction): 16 messages archived\n  with no LLM call, and a fact that existed *only* behind the window was\n  answered correctly from memory injection on the next turn. Reproduce with\n  `npm run test:integration:compaction` — the script seeds a needle the model\n  never repeats, forces budget compaction, asserts from the transcript that\n  the needle is only in the archived prefix, then probes recall.\n\n  Measured against the alternative (offline replay of a real ~345k-token,\n  ~1,900-message Claude Code transcript; LLM-judged QA on archived-only\n  content; see `bench/replay-judged.mjs`): a real summarizer running\n  OpenClaw's own structured-summary compaction contract compressed 345k\n  tokens into a ~910-token summary at 14 LLM calls per compaction and scored\n  **0/30** on archived-detail questions. Cortext compaction used **0** LLM\n  calls, and every archived-detail point scored in any arm came from Cortext\n  memory injection. Recall of fine-grained archived detail is a work in\n  progress (needle-probe hit rate on that transcript: 3/7 on\n  `@augmem/cortext` 1.2.2, up from 1/7 on 1.2.1) — but the alternative is a\n  summary that retains none of it.\n- **The gate cannot splice into a live decode**, but it requests a re-pass.\n  The agent event stream is one-way (observe only). On `should_interrupt` the\n  plugin (a) stages the recalled memory for the next assembly and (b) via\n  `api.on(\"before_agent_finalize\")` returns `{ action: \"revise\" }` so the harness\n  reconsiders the *current* answer. Requires\n  `plugins.entries.cortext.hooks.allowConversationAccess: true` (OpenClaw blocks\n  the hook otherwise). **Verified against a running gateway** (`openclaw gateway\n  run` + a routed turn, `bench/integration-gateway.mjs`): the automated test\n  asserts the hook fires; a returned `revise` triggering a second model pass was\n  additionally verified in a live manual gateway session (the interrupt that\n  requests a revise is not deterministic per turn). It does **not** fire in the\n  `openclaw agent --local` embedded runner — only the full gateway path. It is a\n  no-op when it doesn't apply; disable with `forceRepass: false`.\n\n## Validated live\n\nRun in a real OpenClaw gateway (`openclaw agent --local`, `gpt-5.4-mini`) — see\n[`bench/integration.mjs`](bench/integration.mjs), a scripted integration test\nagainst the actual `openclaw` binary:\n\n- The plugin loads and the gate registers with **no error** (an earlier build\n  called a non-existent `api.runtime.events.onAgentEvent` and crashed).\n- **Default session scope isolates conversations**: a fresh session answers \"I\n  don't know\" for a fact stored in another session; the same session recalls it.\n- **Cross-agent isolation**: agent `bob` cannot see agent `main`'s memory, while\n  `main` itself still recalls the fact (positive control in the same run; the\n  needle is a nonsense token the model cannot guess from priors).\n- **No stale recall** — after correcting a fact, a fresh query returns the new\n  value.\n\n```bash\ncd bench && OPENAI_API_KEY=sk-... node integration.mjs   # real gateway, ~6 turns\n```\n\nSee [bench/](bench/) for cold-start recall and LongMemEval comparison harnesses.\n\n## Develop\n\n```bash\nnpm install\nnpm run build       # tsc → dist/\nnpm run typecheck\nnpm test            # build + unit tests (native engine; fast, offline)\n```\n\n`npm test` uses a test double that mirrors the **real** injected api surface, so\nan unsupported call fails tests. For end-to-end coverage against the actual\ngateway (the thing a double can't prove), run `bench/integration.mjs`.\n`src/openclaw.d.ts` is transcribed from the **installed** `openclaw` package's\ntypes.\n\n## License\n\nApache-2.0. See [LICENSE](./LICENSE) and [NOTICE](./NOTICE).\n","readmeFilename":"README.md"}