ignarucli@0.4.0
CAUTION· install onlyPublisher claims: "Ignaru Studio from your terminal: give your coding agent a design canvas and taste. `npx -y ignarucli mcp --root .` serves the canvas, the design rules and skills, real fonts and screenshots over MCP; `ignaru connect <agent>` adds it to Claude Code, Codex" 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-10 and scored it 77/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: URL with embedded credentials; URL with embedded credentials; URL with embedded credentials. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
…still:n.still,query:n.query,audit:n.audit,full:n.full,out:n.out,url:n.url,json:n.json,help:n.help},positionals:r})}catch(t){return u(p(t))}}function G(e,t){if(t===void 0)return h(void 0);let n=Number(t);return!Number.isInteger(n)||n<1||n>_…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…cutable doesn't exist/i.test(t)?"Chromium for Playwright is not installed. Run `npx playwright-core install chromium` (in a checkout: `npm run install-browser` in harness/)":`Chro…Fix: Pin versions and sources; vendor anything fetched at install time.…or a serif, say so in DESIGN.md and list `serif-display` in `.ignaru/tells-allow.json` with that reason (`{"allow": ["serif-display"], "why": "the brief asks for a serif"}`).',headlineLines:"Shorten the copy until the headline (an h1, an h…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…cutable doesn't exist/i.test(t)?"Chromium for Playwright is not installed. Run `npx playwright-core install chromium` (in a checkout: `npm run install-browser` in harness/)":`Chro…Fix: Pin versions and sources; vendor anything fetched at install time.…\]]*)?/gi;Ha=/\bgenerated:\s*[a-z0-9][\w./-]*\s+run\s+[\w-]{4,}|\(gen\/[\w./-]+\.json\)/i,Cr=e=>Fr(e).length>0||Ha.test(e);_u=e=>{let t=e.toLowerCase();return/^(refs?|references?|reference screenshots?)\b/.test(t)?"refs":/^logo/.test(t)?"l…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ng"}catch{return"missing"}}}function Ip(e,t,n){return n?`not rendered: no render.json in ${t} (run ad render ${e})`:`not rendered: no render.json in ${t}, and this machine has no browser to render with (run \`ignaru browser install\`, then…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.throw new Error(`could not start Chrome at ${chrome} (${why.replace(/npx playwright[^.]*\.?/gi, "").trim()}). ${NO_CHROME}`);Fix: Pin versions and sources; vendor anything fetched at install time."css": "https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&display=swap",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.examples: ["ignaru mcp", "claude mcp add ignaru-studio -- npx -y ignarucli mcp --root /path/to/project"],Fix: Pin versions and sources; vendor anything fetched at install time.…eval score "$(pwd)" --ads-root "${t.adsRoot}"`].join(` `)+` `),ge(V.join(s,"plan.json"),{at:new Date().toISOString(),adsRoot:t.adsRoot,brands:i,routing:n}),{run:s,jobs:r}}var ci={system:"You are the head of growth at this company choosing …Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…{JSON.stringify(E,null,2)} `),{direction:T(a,"DIRECTION.md"),json:T(a,"direction.json"),tokens:T(a,"tokens.css"),cards:O,used:x}}function _e(t,e={}){if(!Array.isArray(t)||t.length!==3)throw new Error("pickCard needs exactly three cards");l…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ry(t=>typeof t=="string")}function ra(){let e=JSON.parse(qi(V(ea,"tells-defaults.json"),"utf8")),t=[];if(typeof e!="object"||e===null)return t;for(let[n,r]of[["neutrals","neutral"],["accents","accent"]]){let o=e[n];if(!(typeof o!="object"|…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."css": "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."css": "https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700&display=swap",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…cutable doesn't exist/i.test(n)?"Chromium for Playwright is not installed. Run `npx playwright-core install chromium` (in a checkout: `npm run install-browser` in harness/)":`Chro…Fix: Pin versions and sources; vendor anything fetched at install time."css": "https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700&display=swap",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.ignaru video "<prompt>" [--seconds <n>] [--aspect <a>] [--dry-run]Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.…a list"}function Ra(e,t){if(e!==void 0){let p=vr(e);if(p)throw new Error(`canvas.json cannot be merged: ${p}`)}let n=e??{},o=[...n.pages??[]],s=p=>typeof p.section=="string"&&p.section.trim()?p.section.trim():void 0,r=p=>p?o.map(s).find(h=…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.- `image gen "<prompt>" --out <path>` / `image photo "<query>"`: generated art or a licence-safe photo.Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.…a!==null)for(let l of yf(a))r(l,`DESIGN.md (${s(i)})`);for(let l of[hn(o,"tokens.json"),hn(o,".ignaru","tokens.json")]){let c=await Qo(l);if(c===null)continue;let u;try{u=JSON.parse(c)}catch{continue}for(let d of bf(u))r(d.family,`tokens.j…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…` `)[0]:String(g);throw new Error(`could not start Chrome at ${m} (${b.replace(/npx playwright[^.]*\.?/gi,"").trim()}). ${un}`)}op(ce.join(o,"feed"),{recursive:!0});for(let g of l){let b=Dt(ce.join(n…Fix: Pin versions and sources; vendor anything fetched at install time."css": "https://fonts.googleapis.com/css2?family=Instrument+Sans:wght@400;500;600;700&display=swap",Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.examples: ["npx ignarucli init", "npx ignarucli init --site acme.com", "ignaru init --no-open"],Fix: Pin versions and sources; vendor anything fetched at install time.ignaru ask "<prompt>" [--thread <id>] [--model <id>] Ask the agentFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.…u Studio from your terminal: give your coding agent a design canvas and taste. `npx -y ignarucli mcp --root .` serves the canvas, the design rules and skills, real fo…Fix: Pin versions and sources; vendor anything fetched at install time.…d:!1},messages:[{role:"system",content:s},{role:"user",content:d}]})}),S=await w.json().catch(()=>({})),$=S.choices?.[0]?.message?.content,v=a??600,E=S.usage?.completion_tokens;if(w.ok&&S.choices?.[0]?.finish_reason==="length"&&typeof E=="…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.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 ignarucli@0.4.0 as of 4d ago. This is the package itself, not its dependencies.
What would make this Verified
3 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim jawadjalal: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- URL with embedded credentials≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- New publisher≈ +3 on the totalTime clears this on its own after 14 and 30 days. Claiming the handle (+50) is the fastest way past it.
- 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.
- npx invocation of non-well-known package≈ +2 on the totalPin versions and sources; vendor anything fetched at install time.