Skip to main content

compute-over-bash

Reach for the `compute` tool (sandboxed JavaScript) instead of shelling out to `python3 -c`, `node -e`, `bc`, `expr`, or `jq` whenever the task is pure calculation or data transformation - arithmetic, big-number math, base/radix conversion, date math, string/regex work, reshaping JSON, hashing (sha256), base64, or UTF-8 byte work. Skip it - and use bash - the moment the task needs files, network, environment, subprocesses, or anything asynchronous.

Ir a la instalación

Datos de origen

Repositorio
weikinhuang/dotfiles
Última actividad en el origen
1 de junio de 2026 a las 00:22
Idioma detectado de SKILL.md
inglés
Estrellas
21
Forks
3

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
compute-over-bash
description
Reach for the `compute` tool (sandboxed JavaScript) instead of shelling out to `python3 -c`, `node -e`, `bc`, `expr`, or `jq` whenever the task is pure calculation or data transformation - arithmetic, big-number math, base/radix conversion, date math, string/regex work, reshaping JSON, hashing (sha256), base64, or UTF-8 byte work. Skip it - and use bash - the moment the task needs files, network, environment, subprocesses, or anything asynchronous.
# Compute over bash Models reflexively compute by shelling out (`python3 -c "print(2**64)"`, `node -e`, `bc`, `echo $((...))`). In pi, the `compute` tool is the better default for pure computation: it runs JavaScript in a sandboxed WASM VM, returns the value of the final expression, and - because it has no filesystem, network, or process access - never triggers a permission prompt. Use it as your first move for calculation and data shaping; reserve bash for work that genuinely touches the system. ## When to use `compute` Route to `compute` when the task is self-contained computation over values you already have: - **Arithmetic and big numbers** - exact integer math, `BigInt`, modular arithmetic, combinatorics. - **Base / radix conversion** - hex/binary/decimal, parsing or formatting numbers. - **Date and time math** - day/second differences, ISO formatting, "N days from X" (`Date` is available). - **String and regex work** - parsing, reformatting, counting matches, slicing. - **Reshaping data** - map/filter/reduce/group over an array or object; pass the data in via the `input` argument. - **Hashing** - `sha256(string | bytes)` returns a hex digest. - **Encoding** - `btoa` / `atob` for base64; `TextEncoder` / `TextDecoder` for UTF-8 byte work. ## When NOT to use `compute` (use bash instead) `compute` is pure compute only. Use bash the moment the task needs anything outside the sandbox: - Reading or writing **files**, listing directories, globbing. - **Network** access (HTTP, DNS, sockets) - use `ai-fetch-web` or `curl`. - **Environment** variables, **subprocesses**, or installed CLIs. - Running the **project's own code or tests** (`npm test`, `pytest`, a build). - Anything **asynchronous** - `compute` is synchronous only (no `await`, no dynamic `import`). If you find yourself wanting `require('fs')`, `fetch`, or `process.env` inside `compute`, that is the signal to switch to bash. ## How `compute` behaves - **Returns the last expression.** `const n = 2 ** 16; n * n` returns `4294967296`. Use `console.log(...)` for intermediate output - it is captured alongside the value. - **Pass data via `input`.** Large or structured inputs go in the `input` argument and appear inside the sandbox as the global `input` (already parsed - no `JSON.parse` needed). - **Bounded.** Calls are capped on wall-clock time, memory, and output size; an infinite loop is killed, not hung. - **Deterministic and prompt-free.** No approval dialog, no side effects. ## Before / after **Before (shells out, hits the permission dialog):** ```bash python3 -c "import hashlib; print(hashlib.sha256(b'hello').hexdigest())" ``` **After (one `compute` call, no prompt):** ```js sha256('hello'); ``` **Before:** ```bash node -e "const xs=[3,1,2]; console.log(xs.reduce((a,b)=>a+b,0))" ``` **After** - call `compute` with `code: "input.reduce((a, b) => a + b, 0)"` and `input: [3, 1, 2]`. ## Anti-patterns - **Shelling out to an interpreter purely to calculate.** `python3 -c`, `node -e`, `bc`, `expr`, `echo $((...))` for a value with no I/O is exactly what `compute` is for. - **Reaching for `compute` to do I/O.** It has no filesystem or network; do not try to read a file or fetch a URL through it. Use bash / `ai-fetch-web`. - **Re-deriving a hash or base64 by hand** when `sha256`, `btoa`, or `atob` are already available in the sandbox. - **Asking `compute` to run the project's tests or build.** That is bash's job - `compute` cannot spawn processes.
Ver en GitHub