Stats
Actions
Tags
From light-mem
Manages session memory across Claude Code sessions: summarizes context on stop, checks for updates on setup, and runs background Node.js processes via bash.
6 events · 8 hooks
Safety signals detected in this hook configuration
Where this hook configuration is defined
Defined in hooks/hooks.json
Event handlers and matchers — expand Raw Configuration for the full JSON
export PATH="$(\$SHELL -lc 'echo \$PATH' 2>/dev/null):\$PATH"; node -e "const f=require('fs'),p=require('path'),o=require('os'),c=require('child_process');const h=o.homedir();const C=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude');const E=process.env.CLAUDE_PLUGIN_ROOT||process.env.GROK_PLUGIN_ROOT||process.env.PLUGIN_ROOT||'';const L=x=>{try{return f.readdirSync(x).filter(n=>/^\\d/.test(n)).map(n=>p.join(x,n)).filter(z=>{try{return f.statSync(z).isDirectory()}catch{return false}}).sort((a,b)=>f.statSync(b).mtimeMs-f.statSync(a).mtimeMs)}catch{return[]}};const K=[E,...L(p.join(C,'plugins','cache','light-mem','light-mem')),p.join(C,'plugins','marketplaces','light-mem','plugin')].filter(Boolean);const need=[\"node-runner.js\",\"worker-service.cjs\"];let R=null;for(const k of K){const r=f.existsSync(p.join(k,'plugin','scripts'))?p.join(k,'plugin'):k;if(need.every(s=>f.existsSync(p.join(r,'scripts',s)))){R=r;break}}if(!R){process.stderr.write(\"light-mem: plugin scripts not found\\n\");process.exit(1)}const argv=[\"node-runner.js\",\"worker-service.cjs\"].map(s=>p.join(R,'scripts',s)).concat([\"hook\",\"claude-code\",\"summarize\"]);const env=Object.assign({},process.env,{});const r=c.spawnSync(process.execPath,argv,{stdio:'inherit',env:env});const j=null;if(j)process.stdout.write(j+'\\n');process.exit(r.status==null?1:r.status);"120ms*export PATH="$(\$SHELL -lc 'echo \$PATH' 2>/dev/null):\$PATH"; node -e "const f=require('fs'),p=require('path'),o=require('os'),c=require('child_process');const h=o.homedir();const C=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude');const E=process.env.CLAUDE_PLUGIN_ROOT||process.env.GROK_PLUGIN_ROOT||process.env.PLUGIN_ROOT||'';const L=x=>{try{return f.readdirSync(x).filter(n=>/^\\d/.test(n)).map(n=>p.join(x,n)).filter(z=>{try{return f.statSync(z).isDirectory()}catch{return false}}).sort((a,b)=>f.statSync(b).mtimeMs-f.statSync(a).mtimeMs)}catch{return[]}};const K=[E,...L(p.join(C,'plugins','cache','light-mem','light-mem')),p.join(C,'plugins','marketplaces','light-mem','plugin')].filter(Boolean);const need=[\"version-check.js\"];let R=null;for(const k of K){const r=f.existsSync(p.join(k,'plugin','scripts'))?p.join(k,'plugin'):k;if(need.every(s=>f.existsSync(p.join(r,'scripts',s)))){R=r;break}}if(!R){process.stderr.write(\"light-mem: version-check.js not found\\n\");process.exit(1)}const argv=[\"version-check.js\"].map(s=>p.join(R,'scripts',s)).concat([]);const env=Object.assign({},process.env,{});const r=c.spawnSync(process.execPath,argv,{stdio:'inherit',env:env});const j=null;if(j)process.stdout.write(j+'\\n');process.exit(r.status==null?1:r.status);"300msexport PATH="$(\$SHELL -lc 'echo \$PATH' 2>/dev/null):\$PATH"; node -e "const f=require('fs'),p=require('path'),o=require('os'),c=require('child_process');const h=o.homedir();const C=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude');const E=process.env.CLAUDE_PLUGIN_ROOT||process.env.GROK_PLUGIN_ROOT||process.env.PLUGIN_ROOT||'';const L=x=>{try{return f.readdirSync(x).filter(n=>/^\\d/.test(n)).map(n=>p.join(x,n)).filter(z=>{try{return f.statSync(z).isDirectory()}catch{return false}}).sort((a,b)=>f.statSync(b).mtimeMs-f.statSync(a).mtimeMs)}catch{return[]}};const K=[E,...L(p.join(C,'plugins','cache','light-mem','light-mem')),p.join(C,'plugins','marketplaces','light-mem','plugin')].filter(Boolean);const need=[\"node-runner.js\",\"worker-service.cjs\"];let R=null;for(const k of K){const r=f.existsSync(p.join(k,'plugin','scripts'))?p.join(k,'plugin'):k;if(need.every(s=>f.existsSync(p.join(r,'scripts',s)))){R=r;break}}if(!R){process.stderr.write(\"light-mem: plugin scripts not found\\n\");process.exit(1)}const argv=[\"node-runner.js\",\"worker-service.cjs\"].map(s=>p.join(R,'scripts',s)).concat([\"hook\",\"claude-code\",\"file-context\"]);const env=Object.assign({},process.env,{});const r=c.spawnSync(process.execPath,argv,{stdio:'inherit',env:env});const j=null;if(j)process.stdout.write(j+'\\n');process.exit(r.status==null?1:r.status);"120msexport PATH="$(\$SHELL -lc 'echo \$PATH' 2>/dev/null):\$PATH"; node -e "const f=require('fs'),p=require('path'),o=require('os'),c=require('child_process');const h=o.homedir();const C=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude');const E=process.env.CLAUDE_PLUGIN_ROOT||process.env.GROK_PLUGIN_ROOT||process.env.PLUGIN_ROOT||'';const L=x=>{try{return f.readdirSync(x).filter(n=>/^\\d/.test(n)).map(n=>p.join(x,n)).filter(z=>{try{return f.statSync(z).isDirectory()}catch{return false}}).sort((a,b)=>f.statSync(b).mtimeMs-f.statSync(a).mtimeMs)}catch{return[]}};const K=[E,...L(p.join(C,'plugins','cache','light-mem','light-mem')),p.join(C,'plugins','marketplaces','light-mem','plugin')].filter(Boolean);const need=[\"node-runner.js\",\"worker-service.cjs\"];let R=null;for(const k of K){const r=f.existsSync(p.join(k,'plugin','scripts'))?p.join(k,'plugin'):k;if(need.every(s=>f.existsSync(p.join(r,'scripts',s)))){R=r;break}}if(!R){process.stderr.write(\"light-mem: plugin scripts not found\\n\");process.exit(1)}const argv=[\"node-runner.js\",\"worker-service.cjs\"].map(s=>p.join(R,'scripts',s)).concat([\"hook\",\"claude-code\",\"observation\"]);const env=Object.assign({},process.env,{});const r=c.spawnSync(process.execPath,argv,{stdio:'inherit',env:env});const j=null;if(j)process.stdout.write(j+'\\n');process.exit(r.status==null?1:r.status);"120msstartup|clear|compactexport PATH="$(\$SHELL -lc 'echo \$PATH' 2>/dev/null):\$PATH"; node -e "const f=require('fs'),p=require('path'),o=require('os'),c=require('child_process');const h=o.homedir();const C=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude');const E=process.env.CLAUDE_PLUGIN_ROOT||process.env.GROK_PLUGIN_ROOT||process.env.PLUGIN_ROOT||'';const L=x=>{try{return f.readdirSync(x).filter(n=>/^\\d/.test(n)).map(n=>p.join(x,n)).filter(z=>{try{return f.statSync(z).isDirectory()}catch{return false}}).sort((a,b)=>f.statSync(b).mtimeMs-f.statSync(a).mtimeMs)}catch{return[]}};const K=[E,...L(p.join(C,'plugins','cache','light-mem','light-mem')),p.join(C,'plugins','marketplaces','light-mem','plugin')].filter(Boolean);const need=[\"node-runner.js\",\"worker-service.cjs\"];let R=null;for(const k of K){const r=f.existsSync(p.join(k,'plugin','scripts'))?p.join(k,'plugin'):k;if(need.every(s=>f.existsSync(p.join(r,'scripts',s)))){R=r;break}}if(!R){process.stderr.write(\"light-mem: plugin scripts not found\\n\");process.exit(1)}const argv=[\"node-runner.js\",\"worker-service.cjs\"].map(s=>p.join(R,'scripts',s)).concat([\"start\"]);const env=Object.assign({},process.env,{});const r=c.spawnSync(process.execPath,argv,{stdio:'inherit',env:env});const j=\"{\\\"continue\\\":true,\\\"suppressOutput\\\":true}\";if(j)process.stdout.write(j+'\\n');process.exit(r.status==null?1:r.status);"10msexport PATH="$(\$SHELL -lc 'echo \$PATH' 2>/dev/null):\$PATH"; node -e "const f=require('fs'),p=require('path'),o=require('os'),c=require('child_process');const h=o.homedir();const C=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude');const E=process.env.CLAUDE_PLUGIN_ROOT||process.env.GROK_PLUGIN_ROOT||process.env.PLUGIN_ROOT||'';const L=x=>{try{return f.readdirSync(x).filter(n=>/^\\d/.test(n)).map(n=>p.join(x,n)).filter(z=>{try{return f.statSync(z).isDirectory()}catch{return false}}).sort((a,b)=>f.statSync(b).mtimeMs-f.statSync(a).mtimeMs)}catch{return[]}};const K=[E,...L(p.join(C,'plugins','cache','light-mem','light-mem')),p.join(C,'plugins','marketplaces','light-mem','plugin')].filter(Boolean);const need=[\"node-runner.js\",\"worker-service.cjs\"];let R=null;for(const k of K){const r=f.existsSync(p.join(k,'plugin','scripts'))?p.join(k,'plugin'):k;if(need.every(s=>f.existsSync(p.join(r,'scripts',s)))){R=r;break}}if(!R){process.stderr.write(\"light-mem: plugin scripts not found\\n\");process.exit(1)}const argv=[\"node-runner.js\",\"worker-service.cjs\"].map(s=>p.join(R,'scripts',s)).concat([\"hook\",\"claude-code\",\"context\"]);const env=Object.assign({},process.env,{});const r=c.spawnSync(process.execPath,argv,{stdio:'inherit',env:env});const j=null;if(j)process.stdout.write(j+'\\n');process.exit(r.status==null?1:r.status);"60msexport PATH="$(\$SHELL -lc 'echo \$PATH' 2>/dev/null):\$PATH"; node -e "const f=require('fs'),p=require('path'),o=require('os'),c=require('child_process');const h=o.homedir();const C=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude');const E=process.env.CLAUDE_PLUGIN_ROOT||process.env.GROK_PLUGIN_ROOT||process.env.PLUGIN_ROOT||'';const L=x=>{try{return f.readdirSync(x).filter(n=>/^\\d/.test(n)).map(n=>p.join(x,n)).filter(z=>{try{return f.statSync(z).isDirectory()}catch{return false}}).sort((a,b)=>f.statSync(b).mtimeMs-f.statSync(a).mtimeMs)}catch{return[]}};const K=[E,...L(p.join(C,'plugins','cache','light-mem','light-mem')),p.join(C,'plugins','marketplaces','light-mem','plugin')].filter(Boolean);const need=[\"version-check.js\"];let R=null;for(const k of K){const r=f.existsSync(p.join(k,'plugin','scripts'))?p.join(k,'plugin'):k;if(need.every(s=>f.existsSync(p.join(r,'scripts',s)))){R=r;break}}if(!R){process.stderr.write(\"light-mem: version-check.js not found\\n\");process.exit(1)}const argv=[\"version-check.js\"].map(s=>p.join(R,'scripts',s)).concat([]);const env=Object.assign({},process.env,{});const ch=c.spawn(process.execPath,argv,{stdio:'ignore',detached:true,env:env});ch.unref();process.exit(0);"60msexport PATH="$(\$SHELL -lc 'echo \$PATH' 2>/dev/null):\$PATH"; node -e "const f=require('fs'),p=require('path'),o=require('os'),c=require('child_process');const h=o.homedir();const C=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude');const E=process.env.CLAUDE_PLUGIN_ROOT||process.env.GROK_PLUGIN_ROOT||process.env.PLUGIN_ROOT||'';const L=x=>{try{return f.readdirSync(x).filter(n=>/^\\d/.test(n)).map(n=>p.join(x,n)).filter(z=>{try{return f.statSync(z).isDirectory()}catch{return false}}).sort((a,b)=>f.statSync(b).mtimeMs-f.statSync(a).mtimeMs)}catch{return[]}};const K=[E,...L(p.join(C,'plugins','cache','light-mem','light-mem')),p.join(C,'plugins','marketplaces','light-mem','plugin')].filter(Boolean);const need=[\"node-runner.js\",\"worker-service.cjs\"];let R=null;for(const k of K){const r=f.existsSync(p.join(k,'plugin','scripts'))?p.join(k,'plugin'):k;if(need.every(s=>f.existsSync(p.join(r,'scripts',s)))){R=r;break}}if(!R){process.stderr.write(\"light-mem: plugin scripts not found\\n\");process.exit(1)}const argv=[\"node-runner.js\",\"worker-service.cjs\"].map(s=>p.join(R,'scripts',s)).concat([\"hook\",\"claude-code\",\"session-init\"]);const env=Object.assign({},process.env,{});const r=c.spawnSync(process.execPath,argv,{stdio:'inherit',env:env});const j=null;if(j)process.stdout.write(j+'\\n');process.exit(r.status==null?1:r.status);"10msnpx claudepluginhub devestacion/light-mem --plugin light-mem8plugins reuse this hooks config
First indexed May 6, 2026
Showing the 6 earliest of 8 plugins