Local-first, agent-friendly Markdown knowledge base with a cross-platform CLI and web editor
AI Security Review
scanned 2mo ago · by lpm-firewall-ai
This is a capability-bearing CLI with explicit agent-integration features, but no automatic lifecycle execution or concrete malicious chain was found. It should be warned rather than blocked because these features can alter local agent configuration when invoked.
A user explicitly runs the relevant CLI configuration or skill command.
Impact
A user can add or modify local agent integrations and skills through the CLI.
Mechanism
User-commanded agent configuration and skill management.
AI rationale
This is a capability-bearing CLI with explicit agent-integration features, but no automatic lifecycle execution or concrete malicious chain was found. It should be warned rather than blocked because these features can alter local agent configuration when invoked.
Evidence
dist/cli.mjs.agents/skills
Network endpoints2
api.github.com127.0.0.1
Decision evidence
public snapshot
AI called this Suspicious at 87.0% confidence as Dangerous Capability with medium false-positive risk.
Evidence for warning
The package exposes a CLI that includes user-invoked skill and MCP configuration features, which can alter agent capabilities.
The bundled CLI handles GitHub authentication and locally stores tokens for its command-driven workflow.
Evidence against
package.json has no preinstall, install, or postinstall lifecycle hook.
No source evidence showed automatic credential exfiltration, remote payload execution, or install-time control-surface mutation.
The reported high-similarity files are bundled native-loader, browser-opening, and diagram/library code; inspection did not establish malicious behavior.
1import{Bi as e}from"./src-BxqApSys.mjs";import{execFile as t}from"node:child_process";const n=new Set([`http:`,`https:`]),r=/[\u0000-\u0020\u007F-\u009F"'`\\&|<>^()$;{}[\]*?!~]/;fu...
L2: //# sourceMappingURL=open-browser-DtPQklA3.mjs.map
High
Child Process
Package source references child process execution.
1import{i as e,o as t,t as n}from"./chunk-DTipWd-i.mjs";import{$ as r,$a as i,$i as a,$n as o,$o as s,$r as c,$t as l,A as u,Aa as d,Ac as f,Ai as p,An as m,Ao as h,Ar as g,As as _,...
L2: `)){let e=n.trim();if(e.startsWith(`ok-contributors: `))try{let n=JSON.parse(e.slice(17));if(typeof n==`object`&&n&&`id`in n&&typeof n.id==`string`&&`name`in n&&typeof n.name==`str...
L3: `)){let e=t.trim();if(!e.startsWith(Wu))continue;let n;try{n=JSON.parse(e.slice(10))}catch{return null}return typeof n!=`object`||!n?null:Ku(n)}return null}function qu(e){if(!e)ret...
L4: `)){let e=n.trim();if(!e.startsWith(Wu))continue;let r;try{r=JSON.parse(e.slice(10))}catch{continue}if(typeof r!=`object`||!r)continue;let i=Ku(r);i&&t.push(i)}return t}function hr...
L5: `,i=e.getWriter();try{await i.write(n.encode
High
Same File Env Network Execution
A single source file combines environment access, network access, and code or shell execution; review context before blocking.
1import{i as e,o as t,t as n}from"./chunk-DTipWd-i.mjs";import{$ as r,$a as i,$i as a,$n as o,$o as s,$r as c,$t as l,A as u,Aa as d,Ac as f,Ai as p,An as m,Ao as h,Ar as g,As as _,...
L2: `)){let e=n.trim();if(e.startsWith(`ok-contributors: `))try{let n=JSON.parse(e.slice(17));if(typeof n==`object`&&n&&`id`in n&&typeof n.id==`string`&&`name`in n&&typeof n.name==`str...
L3: `)){let e=t.trim();if(!e.startsWith(Wu))continue;let n;try{n=JSON.parse(e.slice(10))}catch{return null}return typeof n!=`object`||!n?null:Ku(n)}return null}function qu(e){if(!e)ret...
L4: `)){let e=n.trim();if(!e.startsWith(Wu))continue;let r;try{r=JSON.parse(e.slice(10))}catch{continue}if(typeof r!=`object`||!r)continue;let i=Ku(r);i&&t.push(i)}return t}function hr...
L5: `,i=e.getWriter();try{await i.write(n.encode
High
Command Output Exfiltration
Source combines command execution, command-output handling, and outbound requests; review data flow before blocking.
1import{i as e,o as t,t as n}from"./chunk-DTipWd-i.mjs";import{$ as r,$a as i,$i as a,$n as o,$o as s,$r as c,$t as l,A as u,Aa as d,Ac as f,Ai as p,An as m,Ao as h,Ar as g,As as _,...
L2: `)){let e=n.trim();if(e.startsWith(`ok-contributors: `))try{let n=JSON.parse(e.slice(17));if(typeof n==`object`&&n&&`id`in n&&typeof n.id==`string`&&`name`in n&&typeof n.name==`str...
L3: `)){let e=t.trim();if(!e.startsWith(Wu))continue;let n;try{n=JSON.parse(e.slice(10))}catch{return null}return typeof n!=`object`||!n?null:Ku(n)}return null}function qu(e){if(!e)ret...
L4: `)){let e=n.trim();if(!e.startsWith(Wu))continue;let r;try{r=JSON.parse(e.slice(10))}catch{continue}if(typeof r!=`object`||!r)continue;let i=Ku(r);i&&t.push(i)}return t}function hr...
L5: `,i=e.getWriter();try{await i.write(n.encode
•Manifest-reachable source captures an API credential, sends it to a fixed unofficial gateway, and persists that redirection in agent or shell configuration.
dist/cli.mjs:
import{o as e}from"./chunk-DTipWd-i.mjs";import{$s as t,Bo as n,Di as r,Ei as i,Go as a,I as o,Mo as s,Ni as c,Oi as l,Qi as u,Ts as d,Ws as f,Zi as p,Zo as m,a as h,bo as g,fs as ...
`)){let e=n.trim();if(e===``)continue;let r=e.indexOf(`=`);r!==-1&&(t[e.slice(0,r)]=e.slice(r+1))}return t}function si(e){return new Promise((t,n)=>{let r=[];e.on(`data`,e=>r.push(...
`)}var Bi=class extends Error{constructor(e,t,n){super(zi(n)),this.request=e,this.headers=t,this.response=n,this.errors=n.errors,this.data=n.data,Error.captureStackTrace&&Error.cap...
`),process.exit(1));let o=r===`github.com`?void 0:`https://${r}/api/v3`,s=new
High
Credential Redirect Persistence
Manifest-reachable source sends a prompted API credential to a fixed unofficial gateway and persists the redirection.
4contains invisible/control Unicode U+200F (right-to-left mark)
השינויים שלך לא ישמרו!`,localStorageQuotaExceeded:`הגעת למכסת השימוש בזיכרון הדפדפן. השינויים לא יישמרו.`},o={unsupportedFileType:`סוג הקובץ אינו נתמך.`,imageInsertError:`לא ניתן היה להוסיף את התמונה. אנא נסה שוב מאוחר יותר...`,fileTooBig:`
Critical
Trojan Source Unicode
Source contains bidi control or invisible Unicode characters associated with Trojan Source attacks.
1import{Bi as e}from"./src-BxqApSys.mjs";import{execFile as t}from"node:child_process";const n=new Set([`http:`,`https:`]),r=/[\u0000-\u0020\u007F-\u009F"'`\\&|<>^()$;{}[\]*?!~]/;fu...
L2: //# sourceMappingURL=open-browser-DtPQklA3.mjs.map
High
Child Process
Package source references child process execution.
1import{i as e,o as t,t as n}from"./chunk-DTipWd-i.mjs";import{$ as r,$a as i,$i as a,$n as o,$o as s,$r as c,$t as l,A as u,Aa as d,Ac as f,Ai as p,An as m,Ao as h,Ar as g,As as _,...
L2: `)){let e=n.trim();if(e.startsWith(`ok-contributors: `))try{let n=JSON.parse(e.slice(17));if(typeof n==`object`&&n&&`id`in n&&typeof n.id==`string`&&`name`in n&&typeof n.name==`str...
L3: `)){let e=t.trim();if(!e.startsWith(Wu))continue;let n;try{n=JSON.parse(e.slice(10))}catch{return null}return typeof n!=`object`||!n?null:Ku(n)}return null}function qu(e){if(!e)ret...
L4: `)){let e=n.trim();if(!e.startsWith(Wu))continue;let r;try{r=JSON.parse(e.slice(10))}catch{continue}if(typeof r!=`object`||!r)continue;let i=Ku(r);i&&t.push(i)}return t}function hr...
L5: `,i=e.getWriter();try{await i.write(n.encode
High
Same File Env Network Execution
A single source file combines environment access, network access, and code or shell execution; review context before blocking.
•Manifest-reachable source captures an API credential, sends it to a fixed unofficial gateway, and persists that redirection in agent or shell configuration.
dist/cli.mjs:
import{o as e}from"./chunk-DTipWd-i.mjs";import{$s as t,Bo as n,Di as r,Ei as i,Go as a,I as o,Mo as s,Ni as c,Oi as l,Qi as u,Ts as d,Ws as f,Zi as p,Zo as m,a as h,bo as g,fs as ...
`)){let e=n.trim();if(e===``)continue;let r=e.indexOf(`=`);r!==-1&&(t[e.slice(0,r)]=e.slice(r+1))}return t}function si(e){return new Promise((t,n)=>{let r=[];e.on(`data`,e=>r.push(...
`)}var Bi=class extends Error{constructor(e,t,n){super(zi(n)),this.request=e,this.headers=t,this.response=n,this.errors=n.errors,this.data=n.data,Error.captureStackTrace&&Error.cap...
`),process.exit(1));let o=r===`github.com`?void 0:`https://${r}/api/v3`,s=new
High
Credential Redirect Persistence
Manifest-reachable source sends a prompted API credential to a fixed unofficial gateway and persists the redirection.
4contains invisible/control Unicode U+200F (right-to-left mark)
השינויים שלך לא ישמרו!`,localStorageQuotaExceeded:`הגעת למכסת השימוש בזיכרון הדפדפן. השינויים לא יישמרו.`},o={unsupportedFileType:`סוג הקובץ אינו נתמך.`,imageInsertError:`לא ניתן היה להוסיף את התמונה. אנא נסה שוב מאוחר יותר...`,fileTooBig:`
Critical
Trojan Source Unicode
Source contains bidi control or invisible Unicode characters associated with Trojan Source attacks.
import{i as e,o as t,t as n}from"./chunk-DTipWd-i.mjs";import{$ as r,$a as i,$i as a,$n as o,$o as s,$r as c,$t as l,A as u,Aa as d,Ac as f,Ai as p,An as m,Ao as h,Ar as g,As as _,...
L2: `)){let e=n.trim();if(e.startsWith(`ok-contributors: `))try{let n=JSON.parse(e.slice(17));if(typeof n==`object`&&n&&`id`in n&&typeof n.id==`string`&&`name`in n&&typeof n.name==`str...
L3: `)){let e=t.trim();if(!e.startsWith(Wu))continue;let n;try{n=JSON.parse(e.slice(10))}catch{return null}return typeof n!=`object`||!n?null:Ku(n)}return null}function qu(e){if(!e)ret...
L4: `)){let e=n.trim();if(!e.startsWith(Wu))continue;let r;try{r=JSON.parse(e.slice(10))}catch{continue}if(typeof r!=`object`||!r)continue;let i=Ku(r);i&&t.push(i)}return t}function hr...
L5: `,i=e.getWriter();try{await i.write(n.encode
High
Command Output Exfiltration
Source combines command execution, command-output handling, and outbound requests; review data flow before blocking.
1import{i as e,o as t,t as n}from"./chunk-DTipWd-i.mjs";import{$ as r,$a as i,$i as a,$n as o,$o as s,$r as c,$t as l,A as u,Aa as d,Ac as f,Ai as p,An as m,Ao as h,Ar as g,As as _,...
L2: `)){let e=n.trim();if(e.startsWith(`ok-contributors: `))try{let n=JSON.parse(e.slice(17));if(typeof n==`object`&&n&&`id`in n&&typeof n.id==`string`&&`name`in n&&typeof n.name==`str...
L3: `)){let e=t.trim();if(!e.startsWith(Wu))continue;let n;try{n=JSON.parse(e.slice(10))}catch{return null}return typeof n!=`object`||!n?null:Ku(n)}return null}function qu(e){if(!e)ret...
L4: `)){let e=n.trim();if(!e.startsWith(Wu))continue;let r;try{r=JSON.parse(e.slice(10))}catch{continue}if(typeof r!=`object`||!r)continue;let i=Ku(r);i&&t.push(i)}return t}function hr...
L5: `,i=e.getWriter();try{await i.write(n.encode