From deno-knowledge-patch
Provides knowledge of Deno 2.2-2.7 features: permission sets, deno audit, OpenTelemetry, Deno.spawn(), QUIC, test hooks, dx command. Use for Deno 2+ projects.
npx claudepluginhub nevaberry/nevaberry-plugins --plugin deno-knowledge-patchThis skill uses the workspace's default tool permissions.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Implements structured self-debugging workflow for AI agent failures: capture errors, diagnose patterns like loops or context overflow, apply contained recoveries, and generate introspection reports.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Claude Opus 4.6 knows Deno through 1.x. This skill provides features from Deno 2.2 (2025-02-19) through 2.7 (2026-02-25).
| Topic | Reference | Key features |
|---|---|---|
| Permissions | references/permissions.md | Permission sets in config, --ignore-read/--ignore-env, subdomain wildcards, CIDR |
| CLI commands | references/cli-commands.md | dx, deno bundle, deno audit, deno create, deno compile enhancements |
| Testing & benchmarks | references/testing.md | Setup/teardown hooks, coverage auto-report, bench iteration control |
| Package management | references/package-and-config.md | links, minimumDependencyAge, jsr: in package.json, --npm/--jsr flags |
| Developer tooling | references/developer-tooling.md | Lint plugin API, deno fmt tagged templates, new lint rules |
| Runtime APIs | references/runtime-apis.md | Deno.spawn(), FsFile.tryLock(), Brotli, SHA3, OTel, WebSocket headers, QUIC |
| Module system & compat | references/module-system.md | Import text/bytes, Wasm source phase, --preload, DENO_COMPAT=1, node globals |
Define named permission sets in deno.json:
{
"permissions": {
"default": {
"read": [
"./data"
],
"env": true
},
"dev": {
"read": true,
"write": true,
"net": true
}
}
}
deno run -P main.ts # uses "default" set
deno run -P=dev main.ts # uses "dev" set
Return NotFound/undefined instead of throwing for denied resources:
deno run --ignore-read=/etc --ignore-env=AWS_SECRET_KEY main.ts
OTEL_DENO=1 deno --allow-net server.ts
Auto-instruments console.log, Deno.serve, fetch. Custom spans via npm:@opentelemetry/api.
| Command | Version | Purpose |
|---|---|---|
dx / deno x | 2.6 | Run package binaries (like npx) |
deno bundle | 2.4 | esbuild-based bundler (restored) |
deno audit | 2.6 | Scan deps for CVEs |
deno create | 2.7 | Scaffold from templates |
deno approve-scripts | 2.6 | Approve npm lifecycle scripts |
Deno.test.beforeAll(() => { /* once before all tests */ });
Deno.test.beforeEach(() => { /* before each test */ });
Deno.test.afterEach(() => { /* after each test */ });
Deno.test.afterAll(() => { /* once after all tests */ });
Deno.spawn() subprocess shorthands (2.7, unstable)const child = Deno.spawn("deno", ["fmt", "--check"], { stdout: "inherit" });
const output = await Deno.spawnAndWait("git", ["status"]);
const result = Deno.spawnAndWaitSync("echo", ["done"]);
import message from "./hello.txt" with { type: "text" }; // string
import bytes from "./image.png" with { type: "bytes" }; // Uint8Array
import source addModule from "./add.wasm";
const { add } = WebAssembly.instantiate(addModule).exports;
| Feature | Version |
|---|---|
DENO_COMPAT=1 (enables all compat flags) | 2.4 |
Buffer, global, setImmediate always available | 2.4 |
@types/node included by default | 2.6 |
jsr: scheme in package.json | 2.7 |
package.json overrides field supported | 2.7 |
patch){ "links": ["../path/to/local_npm_package"] }
Requires "nodeModulesDir": "auto" or "manual". Renamed from "patch" in 2.4.
deno test --coverage now auto-generates the report. Ignore comments:
// deno-coverage-ignore — single line
// deno-coverage-ignore-start — block start
// deno-coverage-ignore-stop — block end
// deno-coverage-ignore-file — entire file
{ "lint": { "plugins": ["./my-plugin.ts", "jsr:@scope/plugin"] } }
export default {
name: "my-plugin",
rules: {
"no-foo": {
create(context) {
return {
VariableDeclarator(node) {
if (node.id.type === "Identifier" && node.id.name === "foo") {
context.report({ node, message: "Don't use foo" });
}
},
};
},
},
},
} satisfies Deno.lint.Plugin;
| File | Contents |
|---|---|
| permissions.md | Permission sets, --ignore-read/--ignore-env, subdomain wildcards, CIDR, --deny-import |
| cli-commands.md | dx, deno bundle, deno audit, deno create, deno compile, deno install --compile, deno approve-scripts, deno task |
| testing.md | Test hooks, coverage auto-report and ignore comments, bench iteration control |
| package-and-config.md | links, minimumDependencyAge, jsr: in package.json, overrides, --npm/--jsr flags, "publish": false |
| developer-tooling.md | Lint plugin API, deno fmt tagged templates, deno check no-args, new lint rules |
| runtime-apis.md | Deno.spawn(), FsFile.tryLock(), Brotli, SHA3, OTel, ChildProcess methods, Deno.bundle() API, WebSocket headers, QUIC/WebTransport |
| module-system.md | Import text/bytes, Wasm source phase imports, --preload, --require, DENO_COMPAT=1, node globals, @types/node |