Help us improve
Share bugs, ideas, or general feedback.
From totto2727
This skill should be used when creating single-file CLI tools with Deno and TypeScript. Relevant when the user asks to build a CLI tool, create a command-line utility, or set up argument parsing with Effect CLI. Common triggers: "create CLI tool", "build command-line app", "deno CLI", "Effect CLI", "argument parsing".
npx claudepluginhub totto2727-org/monorepo --plugin totto2727How this skill is triggered — by the user, by Claude, or both
Slash command
/totto2727:deno-cli-toolThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Rules for building single-file CLI tools with Deno.
Creates p5.js generative art with seeded randomness, noise fields, and interactive parameter exploration. Use for algorithmic art, flow fields, or particle systems.
Share bugs, ideas, or general feedback.
Rules for building single-file CLI tools with Deno. For general scripting rules (imports, built-in API preference, prohibited technologies), see script-rules.
.ts file unless explicitly told otherwisechmod +xAlways use Effect CLI for argument parsing:
| Purpose | Package | Registry |
|---|---|---|
| CLI framework | @effect/cli | jsr:@totto2727/fp@3.0/effect/cli |
| Core / Schema | effect | jsr:@totto2727/fp@3.0/effect |
| HTTP client | @effect/platform | jsr:@totto2727/fp@3.0/effect/platform |
| Node runtime | @effect/platform-node | jsr:@totto2727/fp@3.0/effect/platform/node |
| Purpose | Package | Registry |
|---|---|---|
| Terminal spinner | ora | npm:ora |
| Terminal colors | ansis | npm:ansis |
| YAML parsing | @std/yaml | jsr:@std/yaml |
| Path utilities | @std/path | jsr:@std/path |
Only request the minimum permissions needed:
#!/usr/bin/env -S deno run --allow-read --allow-write --allow-net
Common flags: --allow-read, --allow-write, --allow-net, --allow-env, --allow-run, --allow-ffi
chmod +x my-tool.ts
A minimal Effect CLI tool with a single command:
#!/usr/bin/env -S deno run --allow-read
import { Console, Effect } from 'jsr:@totto2727/fp@3.0/effect'
import { Args, Command } from 'jsr:@totto2727/fp@3.0/effect/cli'
import { NodeContext, NodeRuntime } from 'jsr:@totto2727/fp@3.0/effect/platform/node'
import * as process from 'node:process'
const name = Args.text({ name: 'name' })
const main = Command.make('greet', { name }, ({ name }) => Console.log(`Hello, ${name}!`))
const cli = Command.run(main, { name: 'greet', version: '0.1.0' })
cli(process.argv).pipe(Effect.provide(NodeContext.layer), NodeRuntime.runMain)