YABUMI docs
Browse documentation

Single-file language for Agent Skills

Scripts agents can get right the first time.

Yabumi replaces fragile bash and oversized Python helpers with one typed, self-contained file. Effects, failures, mutability, and concurrency stay visible in the source.

release.ybm
# Fetch two manifests concurrently. Effects stay visible.
def manifest(url: str): Result[str, Error] uses {net}
    response = http.get(url)?
    return response.body

urls = ["https://api.example.com/a", "https://api.example.com/b"]
results = urls.par_map((url) => manifest(url))
results.each((result) => print(result.unwrap_or("failed")))
1 fileScript and types travel together
0 depsSingle native binary distribution
6 effectsfs · net · env · proc · time · rand
4 commandsrun · check · test · lsp

Install

One binary. No runtime setup.

Choose Homebrew or the shell installer. Both install the ybm command.

Homebrew

macOS and Linux

Install from the SmartCrab tap.

brew install smartcrabai/tap/yabumi

Shell installer

Latest release

Download the platform binary from GitHub Releases.

curl --proto '=https' --tlsv1.2 -LsSf \
  https://github.com/smartcrabai/yabumi/releases/latest/download/yabumi-installer.sh | sh

Agent Skill: install the bundled skill with npx skills add smartcrabai/yabumi --skill yabumi.

Quick start

From empty file to checked script.

Create hello.ybm

Top-level code runs from top to bottom. No entry-point ceremony.

name = env.get("USER").unwrap_or("agent")
print(f"hello, {name}")

Check before execution

Type checking, formatting diff, lint, and doc-test type checking run together.

$ ybm check hello.ybm

Run only after a clean check

ybm always type-checks first, then executes on success.

$ ybm hello.ybm
hello, agent

Language model

What you see is what happens.

Yabumi removes the invisible behavior that makes generated scripts hard to audit. Four rules carry most of the language.

State

Immutable by default

Reassignment requires var. The first binding fixes the type.

x = 5 var retries = 0 retries = retries + 1

Auditability

Effects in every signature

Pure is the default. Filesystem, network, environment, process, time, and random access must be declared.

def save(path: str, body: str): Option[Error] uses {fs}

Failure

Typed errors, explicit propagation

Result and Option cannot be silently ignored. ? returns failure early.

n = input.parse_int()? return n * 2

Concurrency

Parallel only when written

par, par_map, and par_each make fan-out visible and preserve input order.

pages = urls.par_map((url) => http.get(url))

CLI reference

Four commands, one diagnostic format.

Every failure uses file:line:col [E0000] message. Stable error codes let agents recover without parsing prose.

CommandBehaviorSuccess
ybm <file>Type-check, then run only on success.Exit 0
ybm checkType-check, read-only format diff, lint, and doc-test type checking.Clean file
ybm testExecute fenced examples in declaration doc comments.All pass
ybm lspStart the Language Server Protocol server over stdio.Clean shutdown

Use ybm check --apply <file> to rewrite formatting in place. Without --apply, formatting stays read-only.

Standard library

Useful without imports.

Core types and namespaces are globally available. Effectful functions declare the same effect vocabulary as user code.

jsoncsvyamltomlfshttpenvproctimerandregexmath

Safe and direct APIs coexist. Indexing may terminate on an invalid key; .get() returns Option. The choice stays visible at the call site.

Open complete stdlib reference →

Editor support

Diagnostics while you write.

ybm lsp speaks LSP over stdio and analyzes open files without executing them.

Feedback

Live diagnostics

Parse, type, effect, and lint errors use the same stable diagnostic codes as the CLI.

Navigation

Language-aware editing

Live diagnostics, type hover, go to definition, and whole-document formatting over full-document synchronization.

Editor setup and capability matrix →

Full reference

Go deeper without losing the source of truth.

The language specification is canonical. Decisions record resolved design details; verified samples double as acceptance tests.