seoagent@1.142.0
CAUTION· install onlyPublisher claims: "The persistent AI SEO agent for Claude Code. Audits, keyword strategy, briefs, articles, real product screenshots from your repo, and the autopilot loop (cloud detects → CLI executes → ack closes) — other SEO tools write the prompt, SEOAgent runs it." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Nothing executable in the bundle ran; the trace covers the install step only.- Tested
- every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (1 scenario; nothing executable in the bundle ran; the trace covers the install step only) on 2026-11-14 and scored it 73/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Hidden zero-width characters detected; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
…r as qS,isCancel as Kt,cancel as qt,confirm as vf}from"@clack/prompts";var zt=[".env.local",".env.production",".env"],Zl=["NEXT_PUBLIC_SITE_URL","SITE_URL","NEXT_PU…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…",".js",".mjs"]);function Sk(e,t){let n=Rd(e).toLowerCase();if(Pd.has(n)){if(!/^ ?---\r?\n/.test(t))return!1;try{return Td(se(t.replace(/^ /,"")).data)}catch{ret…Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.…aml \u2014 using this directory for project signals"});let r=null;t?.("Scanning .env files for public / site URLs\u2026");let o=Qy(e);if(o)r=o.value,n.push({field:"…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…e to set up the ${t.label} connector:`,` ${t.enableHint}. Credentials go in .env in this folder, never`," in a tracked file. Posts are created as drafts unl…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…d.error(`Update failed. Try manually: npm install -g ${nt}@latest (you may need sudo on Linux/macOS).`),d.message('If npm said "notarget" or "No matching version fou…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.…Agent installed (site URL not detected \u2014 please ask the user for it).","","\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2…Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.…xt:`ai-files: .seoagent/llms.md changed, but ${e.llmsRoute} already serves /llms.txt, so nothing was published \u2014 a file in your static dir would shadow that route. Compare the two, or set \`llms_owner: route\` in .seoagent/project.md …Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ation/json"},signal:AbortSignal.timeout(gS)});if(!e.ok)return null;let t=await e.json();return typeof t.version=="string"?t.version:null}catch{return null}}async function af(e){try{return await yS({current:e,now:new Date,fetchLatest:kS,rea…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…"path";var li=`command -v seoagent >/dev/null 2>&1 && seoagent sync --silent || npx -y ${Kr} sync --silent`,Fc=60;function Uc(e){let t=It(e,$);ai(t,{recursive:!0});le…Fix: Pin versions and sources; vendor anything fetched at install time.…i,"").toLowerCase()==="seoagent"}function w(e,t=Ws()){return t?`seoagent ${e}`:`npx -y ${Kr} ${e}`}import{randomUUID as Gm}from"crypto";import{existsSync as gc,mkdirS…Fix: Pin versions and sources; vendor anything fetched at install time.…of S=="string");a.length===0&&a.push("missing");let l=t.robots_txt_url??"/robots.txt",c=t.robots_txt??null,u=t.robots_txt_status??null,p=Array.isArray(t.robots_dead_lines)?t.robots_dead_lines:[],g=t.google??null,h=n??"/sitemap.xml",m=a.inc…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ccept:"application/json"},signal:AbortSignal.timeout(1e4)}),o=null;try{o=await r.json()}catch{}return pd(r.status,o)}catch(n){return{status:"error",terminal:!1,message:n.message||"network error"}}}function wd(e){return new Promise(t=>setTi…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…on anything about SEO or search rankings — keywords, meta tags, sitemaps, robots.txt, schema/JSON-LD, internal linking, Google Search Console, or AI search (AEO/GEO/llms.txt). Use it silently when writing or editing a blog post, landing pa…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ed spec won't auto-upgrade."),d.message(`Run the latest now by pinning the tag: npx -y ${nt}@latest <cmd>`),d.message(`Still on ${t} after that? Clear the npx cache: …Fix: Pin versions and sources; vendor anything fetched at install time.… Sr()},{command:"update-cli",label:"Update the CLI to the latest version",hint:"npm install -g @seoagent-official/seoagent@latest + refresh your projects",run:async()=>await vr({})},{command:"refresh",label:"R…Fix: Pin the exact version (`[email protected]`, `==1.2.3`) so every install gets the bytes that were reviewed.…","sanity.config.js","sanity.config.mjs","sanity.cli.ts","sanity.cli.js","sanity.json","studio/sanity.config.ts","studio/sanity.config.js","sanity/sanity.config.ts","sanity/sanity.config.js"],Uy=["studio","sanity"],My=[{cms:"strapi",deps:[…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…he owner already said yes in Slack or on the dashboard. Do not ask again, and **do not decline because other pages link to it: do the whole job in one change.** (1) Find ever…Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.… → use bare `seoagent <command>`; else offer `npm install -g`, or fall back to `npx -y @seoagent-official/seoagent <command>`. **The CLI is your router.** `seoagent …Fix: Pin versions and sources; vendor anything fetched at install time.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
No advisories in OSV for @seoagent-official/seoagent@1.142.0 as of 6 h ago. This is the package itself, not its dependencies.
What would make this Verified
7 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim seoagent-official: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Hidden zero-width characters detected≈ +4 on the totalKeep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Unicode escape sequence detected≈ +2 on the totalPut hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.
- File type combined with upload action≈ +2 on the totalRemove the call, or declare the host in frontmatter and explain in the README what is sent and why.