social-inbox@0.1.0
CAUTION· static onlyPublisher claims: "Enables AI assistants to triage and act on Instagram DMs, comments, and mentions with token-light overviews, unread lists, search, thread summaries, drafting replies or moderation actions, and human-approved sending." Observed in sandbox: static analysis only — behavior not yet observed.
Coverage
Static only; nothing was run yet.The label rests on the code, the instruction files and the publisher. The honeypot run replaces this verdict when it completes.
Before you give it your token
- It will ask for
MAILERLITE_API_KEYMETA_APP_SECRETMETA_WEBHOOKS_ENABLEDPLUNK_API_KEYTOKEN_ENC_KEYWEBHOOK_VERIFY_TOKENConfiguration, not credentials: APPROVAL, AUTOMATIONS_AUTOSEND, AUTOMATIONS_COOLDOWN_HOURS, AUTOMATIONS_ENABLED, DB_PATH, FAKE_CONNECTOR, MAILERLITE_API_URL, MAILERLITE_GROUP_ID, MAX_SENDS_PER_HOUR, META_APP_ID, META_BACKFILL_DAYS, META_GRAPH_BASE, META_GRAPH_VERSION, META_HUMAN_AGENT, META_LOGIN_CONFIG_ID, META_PAGE_ID, PLUNK_API_URL, POLL_ENABLED, PRIVACY_CONTACT, PRIVACY_OPERATOR, PUBLIC_URL, RETENTION_RAW_DAYS, RETENTION_TEXT_DAYS, SEND_ALLOWLIST, SEND_MODE, SENDING_ENABLED, SINBOX_ADMIN_KEY, SINBOX_AGENT_KEY, SINBOX_HOME, SINBOX_KEY, SINBOX_URL- Where it talks to
- no vendor host named in the codeAlso facebook.com, useplunk.com, mailerlite.com, instagram.com — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- nothing has run yet
- What we could not test
- everything: the server has not run yet
Run it before you trust it. Nothing has run yet: the code was read, the server was not. `vet-skills try` runs this exact version in the honeypot in about a minute.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills analysed it statically (a sandbox run is pending) on 2026-11-11 and scored it 57/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; Access to sensitive file paths; Access to sensitive file paths. Summary: static analysis only — behavior not yet observed.
Behavior trace
Queued for honeypot run · static analysis onlyThis version has not been detonated yet. The score above counts behavior as unknown (50/100), so it cannot read Verified until the honeypot run completes and replaces this verdict.
Static findings
- Never commit secrets or `.env*` files (only `.env.example` with fake values).Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.&& ln -s /app/dist/cli/index.js /usr/local/bin/sinbox && chmod +x /app/dist/cli/index.jsFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.if (c.req.query("send") === "1") return c.json({ ...res, send: await svc.sendApproved(c.req.param("d"), actor) });Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.// Runtime configuration from environment variables. See .env.example.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.RUN mkdir -p /data && chown node:node /data \Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.- Env vars come from Cursor secrets; use `.env.example` for names only.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return this.db.prepare("SELECT id, native_id, permalink, net FROM posts WHERE id = ?").get(id) as never;Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.this.db.prepare(`SELECT * FROM flow_runs WHERE ${sql} AND state IN ('active','waiting_input')`).all(...args) as (Omit<Run, "vars"> & { vars: string })[]Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.// Pushing to a list is an external write: same kill switch as platform sends.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.const ex = this.db.prepare("SELECT id FROM posts WHERE net = ? AND native_id = ?").get(net, p.nativeId) asFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.it("kill switch: SENDING_ENABLED=false keeps approved drafts unsent", async () => {Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.if (n) this.log.warn({ n }, "drafts interrupted during send marked failed");Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.return c.json(await svc.sendApproved(c.req.param("d"), actor));Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why./** Global kill switch: when false the engine evaluates nothing. */Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell....env,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const claimed = this.db.prepare("UPDATE drafts SET status = 'sending', attempts = attempts + 1 WHERE id = ? AND status = 'approved'").run(d).changes;Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.this.db.prepare(`UPDATE flow_runs SET state = 'stopped', updated_at = ? WHERE ${sql} AND state IN ('active','waiting_input')`).run(now, ...args);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.const s = fakeSetup({ ...ON, ...env }, { email: { plunk } });Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const s = metaSetup({ AUTOMATIONS_ENABLED: "true", ...env }, [...extraRoutes, ...igRoutes()], { email: { plunk } });Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.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
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
23 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim wojtekwoz: 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.
- File permission modification command≈ +2 on the totalRequest the narrowest permission that works; replace wildcards with the exact paths or hosts.
- 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.
- Process kill command≈ +2 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.