REFERENCE

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

SymbolNameTypical formDescription
@Space@name[:TYPE]([params]) + vibe blockBounded computational context. TYPE is required: one of :UI, :IO, :DATA, :FUNC, :AGENTIC, plus :CHAT and :CALL. Parameters are optional.
#Agent#name:TYPE([params]) + vibe blockA reasoning unit inside a space. TYPE is DF (deterministic function) or AF (agentic function).
$Task$name([params]) + vibe blockA named operation — either built into a space type (e.g., $ui_reader) or author-defined.
%Data resource%name + optional vibe lineA 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 lineConnects two spaces. TYPE and semantics are optional.

Plus:

MarkerNameDescription
>>>Vibe lineA natural-language sentence. Multiple contiguous vibe lines form a vibe block.
>Continuation lineKeeps the current declaration open — allows additional vibe blocks or subordinate declarations (scoped to the parent).
(blank line)TerminatorCloses the current declaration and any nested ones.
$use()CompositionImports 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.