atelier@1.1.0
VERIFIED· install onlyPublisher claims: "Enables coding agents to call a check that flags invented specifics, copied passages, and rule breaks in drafts against an approved, versioned standard. Returns actionable tool results so agents can identify and rewrite offending spans." 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
What this means for the label: Verified here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
- no credential variables read in the code
- Where it talks to
- no vendor host named in the code
- What the honeypot saw
- no credential files read · no network
- What we could not test
- use of the skill by an agent
Connect it under the guard. Nothing executable in the bundle ran; the trace covers the install step only. The code names no credential variable; the guard pins the network to what the honeypot saw and logs every call.
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 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-11 and scored it 85/100 (Verified). In what ran, nothing we could detect went wrong: no undeclared network egress, no credential reads, no persistent instruction writes. What it does with a real credential was not observed; the static findings and the publisher carry the rest of the score. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
console.log(` atelier revert puts every one of those files back exactly as it was\n`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.if (consequenceAsked !== undefined) console.log(`What is done with an output, by what was found (after repair):\n${describeTable(body).join('\n')}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(`Put ${paths.length} file(s) back as they were, in ${undo.packageRoot}:`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(`\nA repair needs a real output to repair. Run the skill, then point at what went wrong:`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.… jsonWritten = true; process.stdout.write(`${JSON.stringify({ ...fixed.json, output: o.refused ? null : fixed.output, answer: o.refused ? null : fixed.output, ...(strictFix ? { delivered: !o.refused } : {}) }, null, 1)}\n`); } else…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(bRec.output);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…h your reading (furthest from your range):'); for (const r of worth) console.log(` ${r.invocationId} ${r.reading.outside.length} feature(s) outside${r.reading.detector ? `, detector ${r.reading.detector.p}` : ''} "${r.input.split('\n')[0].…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.if (!kept.written) console.log(` (this complaint about this output was already recorded at ${kept.record.at}; that record stands and is not counted twice)`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log('\nA check reads one of your rules, so it is put right through the rule:');Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(`the output tells us anything about it. Rebuild so the installed artefact matches what was approved:`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.… ${name} --yes` }); return; } if (disputed.length && !confirmed) console.log(` ${disputed.length} of your steps ${disputed.length === 1 ? 'is' : 'are'} not what your own examples do (marked ! above). ${disputed.length === 1 ? 'It is' : 'Th…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(` atelier invoke --skill ${name} --candidate ${candidate.skillVersionHash} --task ${JSON.stringify(inv.input)}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(` ${spots.computed ? spots.why : spots.why}`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(`\nNothing here is earned by a file existing. A DELIVERED row names the mechanism that puts the`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(`\n${records.length} output(s) recorded with a reading.`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(`\nThis model's output did not pass every deterministic check:\n`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ength) { console.log('\nBy release:'); for (const o of outcomes) console.log(` ${o.releaseId}: ${o.n} output(s), ${Math.round(o.meanInBandShare * 100)}% of measured features in range, ${o.inventedPerOutput.toFixed(2)} invented claim(s) cut…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…es('--no-cut')) { store.setClaimsCut(L, argv.includes('--cut')); console.log(argv.includes('--cut') ? `Invented specifics in ${name}'s output are cut where a qualified claim reader finds them; elsewhere they are blocked, …Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…that vary across them.`); fstore.setTypicality(L, profileHash, cal); console.log(`Typicality calibrated on ${pieces.length} piece(s) over ${cal.features.length} feature(s) (calibration ${cal.hash}, shrinkage ${cal.shrinkage}). Every output…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(' source can carry. Judge the output, and make a rule bind in your own words: atelier fix "<what was wrong>" --always');Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.else if (!o.refused) console.log(`\n${o.head}${fixed.output}\n`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(aRec.output);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log('If a REQUIRED rule is really about the SHAPE of the output, pass a `shape` with it and the');Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(`That is one draft on one input and says nothing about what the rules do not count, so it is not installed on its own (${gate.unmet[0]}).`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.if (!kept.written) console.log(` (this complaint about this output was already recorded at ${kept.record.at}; that record stands and is not counted twice)`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.if (recent.length) { console.log(`\nRecent invocations:`); for (const r of recent) console.log(` ${r.invocationId} ${r.at} "${r.input.slice(0, 58)}"`); }Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.else if (!machine) console.log(`\n${head}${d.rec.output}\n`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(` cost median $${c.cost.p50.toFixed(2)} · 90th $${c.cost.p90.toFixed(2)}${c.cost.perUsable !== null ? ` · $${c.cost.perUsable.toFixed(2)} per output you would ship` : ''}`);Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.if (!machine && !refused) console.log(`\n${head}${strict ? rec.output : shipped}\n`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.if (outside.length) console.log(`Material named outside the folder you pointed at, not read: ${outside.join(', ')}. Put it inside the folder.`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.console.log(`(--drafts ${nDrafts} does not apply here: ${!std ? 'the standard is missing' : 'this skill has an output contract, so there is one shape to produce'}; writing one draft.)`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.… (profile.detector) { const w = topWeights(profile.detector, 5); console.log(`Style detector ${profile.detector.version} (a monitor): cross-validated AUC ${profile.detector.cvAuc ?? 'not computed'}; the model leans on ${w.model.map((x) => …Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.kill a command whose single argument is that long. `--decisions '<json>'` still works for a short batch.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.console.log(r.output);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…s your decision.'); const c = pset.checks?.[p.statement]; if (c) console.log(c.how === 'measure' ? ` checked by code on every output: ${c.means}` : ' a check was written for it: it reports and blocks nothing…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.// NOT npx's own scratch install, and not a project's node_modules: under `npx … setup` the binary is on PATHFix: Pin versions and sources; vendor anything fetched at install time.* absolute path of this install's own entry file. Not `npx <package>`: that fetches the package from the registry onFix: Pin versions and sources; vendor anything fetched at install time.kill a command whose single argument is that long. `--decisions '<json>'` still works for a short batch.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.kill a command whose single argument is that long. `--decisions '<json>'` still works for a short batch.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.kill a command whose single argument is that long. `--decisions '<json>'` still works for a short batch.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.console.log(`\n${byCode} of ${pset.rules.length} checked by code on every output; the rest ${pset.rules.length - byCode === 1 ? 'is' : 'are'} yours to judge.`);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
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.