Meta-characters
The five symbols that carry the whole grammar, plus the syntactic markers that surround them.
Anglish reserves exactly five meta-characters for structure, plus three syntactic markers that frame declarations.
Cheat sheet
| Symbol | Name | Typical form | Description |
|---|---|---|---|
@ | Space | @name[:TYPE]([params]) + vibe block | Bounded computational context. TYPE is required: one of :UI, :IO, :DATA, :FUNC, :AGENTIC, plus :CHAT and :CALL. Parameters are optional. |
# | Agent | #name:TYPE([params]) + vibe block | A reasoning unit inside a space. TYPE is DF (deterministic function) or AF (agentic function). |
$ | Task | $name([params]) + vibe block | A named operation — either built into a space type (e.g., $ui_reader) or author-defined. |
% | Data resource | %name + optional vibe line | A structured object that flows between spaces and tasks. Declaration is optional; the data line in a vibe block is enough to introduce it. |
= | Path | =name[:TYPE](@sA, @sB) + optional vibe line | Connects two spaces. TYPE and semantics are optional. |
Plus:
| Marker | Name | Description |
|---|---|---|
>>> | Vibe line | A natural-language sentence. Multiple contiguous vibe lines form a vibe block. |
> | Continuation line | Keeps the current declaration open — allows additional vibe blocks or subordinate declarations (scoped to the parent). |
| (blank line) | Terminator | Closes the current declaration and any nested ones. |
$use() | Composition | Imports an independently declared space or agent into a parent. $use(@SpaceName) or $use(\#AgentName). |
Why >>> is required
Vibe prose can reference Anglish identifiers (@, #, $, %, =), sometimes at the start of a line. Without a marker, those lines could be misread as new declarations. The >>> prefix separates narrative from structure, and the small cost of typing it discourages indiscriminate copy-paste — it keeps vibe blocks focused.
How identifiers compose
Once a thing has been declared, you reference it by writing its meta-character and name. Identifiers are globally referenceable inside the program scope, and globally hash-addressable in the assembled MEX archive. Dotted names (@userSettings.profile) create hierarchy without new syntax — the compiler treats the dotted path as a single distributed unit sharing queues, state, and scratchpads with its parent.
What gets compiled
Each declaration becomes a node in the Space–Path Graph (SPG):
@declarations create space nodes.#declarations create agent nodes inside spaces.$declarations attach tasks to their containing space.%declarations describe data resources whose schema flows through binding.=declarations create edges between space nodes.
From the SPG, the compiler emits the Anglish Intermediate Representation (AIR) and packages it into a signed .mex archive.