programming language for AI agents

Built for AI agents, not humans.

The fewest tokens from intent to working code.

The intended author is an LLM, not a human. Prefix notation. Single-character names. Type-verified before execution. JSON out by default. Every design decision evaluated against total token cost.

see it in action

Try an example, or write your own. Open the playground ↗

python fold-sum.py
from functools import reduce

nums = [1, 2, 3, 4, 5]
total = reduce(lambda a, b: a + b, nums, 0)
print(total)
ilo fold-sum.@
fld + [1,2,3,4,5] 0
py 42 tok ilo 15 tok −64%

ilo is actively evolving. Today's syntax and builtins are not yet a contract, so run it in a safe environment, not against production. Install on your machine, or hand it to an agent.

01

Install

$ curl -fsSL ilo-lang.ai/install.sh | sh
02

Try it

Run a one-liner: ilo 'dbl x:n>n;*x 2' 5

It prints 10.

Or edit Python live in the playground →

03

Read the docs

Learn the syntax, the builtins, and the error model. Introduction →

#designed for machines

Every feature exists to reduce total token cost.

syntax

Prefix Notation

Operators before operands. No parentheses. No precedence ambiguity. 22% fewer tokens, 42% fewer characters vs infix.

+*a b c   (a × b) + c
safety

Verified Before Execution

Every program is type-checked before it runs. Agents get compact error codes, not stack traces. One token, not a paragraph.

ILO-T004: expected n, got t
control

Guards

Flat conditionals. No nesting. No braces.

>=sp 1000 "gold"
composition

Pipes

Chain functions left-to-right.

x>>dbl>>inc
ergonomics

Auto-unwrap !

12 tokens down to 1. Error propagation without the ceremony.

inner! x
integrations

MCP & HTTP Tools

Wire external APIs as typed functions. Type-checked at load time.

--tools tools.json
agent server

JSON Server

A long-lived JSON request/response loop. Agents compile, check, run, and trace without a process per call.

ilo serv
http

HTTP Endpoints

Serve an ilo function over HTTP. One command, no framework.

ilo httpd app.ilo --port 8080

Named from Toki Pona for “tool”: a constructed language that captures all of human expression in ~120 words. ilo does the same for machine programmers.

manifesto · six rules

#one budget. six rules.

Tokens (generation, retries, errors, context loading) are the only cost we minimise. Each rule below is a constraint we accepted to lower it. If a feature spends tokens, it has to earn them.

01rule

Token-Conservative

Tokens are the only budget. Everything else is decoration.

Generation, errors, retries, and context loading all spend the same pool. Every syntax choice is benchmarked against this sum, not lines, not characters, not readability arguments imported from human languages.

lines · characters · "looks like English"

measured
67% fewer tokens

Median across 24 reference tasks vs idiomatic Python. Worst case 41%.

02rule

Constrained

Closed vocabulary. No hallucinations possible.

Every callable, type, and operator is known at parse time. The agent picks from a smaller set of valid next tokens, which means fewer wrong paths and fewer retries.

dynamic dispatch · metaprogramming · open extension points

surface area
$ ilo --vocab | wc -l
 47   # sigils + keywords
$ ilo --builtins | jq length
 138
03rule

Self-Contained

A signature is a complete contract.

Every function declares its parameters, return type, and effects on one line. The agent never has to follow imports or read a header to know what something does or what it touches.

headers · cross-file type inference · implicit effects

declaration
fetch u:s>j !net
  # params, return, effect
  # all in one line
04rule

Language-Agnostic

Sigils over keywords. English is not a dependency.

Operators are single characters. Type annotations are single letters. The full vocabulary fits on one page, and an agent learns it from the spec alone, no training-data exposure required.

keyword soup · word-of-the-day naming · ASCII art operators

cold-start recall
10/ 10

Builtin-recall benchmark on frontier models given only the spec. No fine-tuning, no in-context examples.

05rule

Graph-Reducible

The dependency graph is a first-class CLI artifact.

ilo graph returns the call graph, type graph, and caller graph as JSON. Edit one function and the agent reloads only what changed, usually 6 to 10% of the codebase.

whole-tree re-reads · file-scope context · "just grep for it"

edit blast radius
$ ilo graph --of dbl --json
 { callers: 3,
    types: ["n"],
    touches: 7%
  }
06rule

Structured Surface

Every output parses. Every error is a code.

Every subcommand supports --json. Every diagnostic carries a code, a source span, and a FixSafety field telling the agent whether the auto-fix is sound. Zero screen-scraping. Zero re-prompts for structure.

pretty-printed errors · stack traces · free-form text

diagnostic format
{ "code": "ILO-T004",
  "span": [12, 18],
  "got": "t",
  "want": "n",
  "fix": "SAFE" }
Read the full manifesto →
latest

Loading the latest release…

Read the changelog
Benchmarks

#three engines, measured.

Three runtimes: a bytecode VM, a Cranelift JIT, and a Cranelift AOT compiler. Faster than Python and Ruby, slower than V8 and Go. ilo optimises tokens, not nanoseconds.

numeric · sum 1..1000 · median ns/call · 10000 iterations Darwin arm64 · 2026-05
Rustnative
329ns
LuaJITJIT
442ns
Node/V8JIT
451ns
KotlinJVM
528ns
Gonative
665ns
PyPy 3JIT
1.5µs
ilo JITCranelift
4.2µs
ilo AOTCranelift
5.3µs
PHPinterp
6.7µs
ilo VMbytecode
14.7µs
Python 3interp
29.5µs
7 more benchmarks in the full table: string, record, mixed, foreach, recurse… All benchmarks →

#writing

Notes from building ilo, and the ideas around it.

#the agent loop

Every subcommand speaks --json. The agent sends a request, ilo replies with structured diagnostics and fix plans, and the loop closes without screen-scraping.

Agent
"method": "check",
 "program": "main>_;prnt +2 a"
ilo serv
"schemaVersion": 1,
 "error": "phase": "verify",
   "diagnostics": [
     "code": "ILO-T004",
     "message": "undefined variable 'a'",
     "suggestion": "did you mean 'main'?"
   ]
Agent
"method": "run",
 "program": "main>_;prnt +2 2"
ilo serv
"schemaVersion": 1,
 "ok": 4,
 "ms": 0

Make your AI agents more efficient.