Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Concepts

Seven words, three steps, and one idea that makes the rest follow.

The idea

The classifier evoke uses is never trained. It answers closed questions: which of these? is this stated? yes or no? It answers with calibrated probabilities. Everything it knows about a reflex comes from the reflex's own description, sent in the request. So the wording is the tuning, and one line —

"kill the lights" = { state = "off" }

— is documentation, tuning, test and customization at once. A reflex is a package of such wording plus the program it describes. evoke fetches, versions and refines that wording, and runs the program.

The words

ConceptMeaning
ReflexA directory: reflex.toml and the file or program it names. Its identity is its location, owner/repo[/dir] at a git tag.
Manifestreflex.toml: what the classifier reads and what the program receives. Its wording is yours to override. Its contract is not: argument names, option keys, sources, ranges, what it runs.
ProjectA directory of files you own: evoke.toml, evoke.lock, overlays/, vocab/. Your home project lives in ~/.config/evoke/. An application has its own at its root.
OverlayYour wording for one reflex, in one file, laid over the shipped manifest. It adds and replaces. It never deletes.
VocabularyYour word = "meaning" list, shared by every argument that names it. A package never ships or writes one.
AdapterThe classifier behind a decision. Jev is the first. The tool names no engine in its files or its core.
RuntimeWhat runs a program: Node for a .mts or .mjs file, nothing for an argv. Chosen from the manifest. Authors never see it.

Two more words come up everywhere. A call is a reflex with its arguments filled in, on one line: lights room="den" state="off". An effect is what running a reflex does to the world: read, write or destructive. The effect decides how sure evoke must be before it runs without asking.

A tag is a word a manifest carries, so --tag can narrow a decision. A collection is a repository of reflex directories. The Hub is where reflexes are found. For now, that is the first-party collection, evoke-build/reflexes.

The three steps

evoke "mute the office lights"
  1. Decide. Every active reflex's manifest becomes questions. Which reflex does the input ask for? For each argument, which value, or was it left unstated? One request carries all the questions. The adapter answers each with a probability.
  2. Gate. Confidence is the weakest of those answers. Each effect has a bar. Against that bar, the outcome is settled: run, confirm, ask for a missing argument, or abstain. A destructive reflex always confirms. Code stays in control: the classifier proposes, the gate disposes.
  3. Run. The reflex's program runs with its arguments, a clean environment and a deadline. Its one line of text comes back.

What the classifier can and cannot do

It selects. It never writes. An argument's value is one of three things: one of the author's options, one of your vocabulary words, or a piece of what you typed, taken word for word. That piece can be a number, a duration, an email address, a URL, or a quoted phrase, and it is checked against its range. So a sentence can choose a call, but it can never invent a value. And what it chooses still passes the gate. That is the shape of every guarantee in Security.

Next: Saying things.