Three axes
Each thing has one name, on one axis. A definition is declared, resolved and planned; it never runs. An execution starts and ends; it is never declared.
DEFINITIONS
in settings
- workflow
- work defined by inputs, an output contract and children, each a step or a workflow, composed by sequence, parallel, branch or bounded repetition; its bindings carry data into each child, and its conditions choose a branch, accept a result and end a repetition
- step
- a process bound to an agent, the one leaf; its inputs and output contract are its process's
- process
- what a step does: its prompt, inputs, environment, output schema, permissions and limits
- agent
- who does it: a runtime mapping, and the model, effort and skills its runtime takes; a bash agent names only the runtime
- runtime mapping
- what its runtime grants with no option, and its options with what each grants; bash offers none
EXECUTIONS
in records; each names the definition it executes
- run
- executes a workflow
- call
- executes a step
- iteration
- one execution of a repetition's body; every other child executes once, as a call or a run
- turn
- one exchange of a call with its runtime
- session
- the conversation a call held, on a runtime that keeps one
MACHINERY
in code, as settings meet it
- runtime
- a program Agister drives through its wrapper; a runtime mapping names one
- runtime facts
- what a runtime can do; resolve refuses a step that needs what its runtime cannot do
What a workflow names
Documents name each other by kind and name, fixed in settings, so they resolve without a run. A workflow composes steps and other workflows. A step binds a process to an agent; nothing but a step chooses an agent. Bash is a runtime, planned like any other: its agent names only the runtime, and its prompt is a script.
Where settings live
Each kind has its folder in a layer, and a document is the file named after it. Nothing but kind and name joins files across layers.
- home~/.agister
- repository.agister at the worktree root, with blocks.yaml
- projectthe nearest .agister from the launch directory up to the root
- applied home first; the nearer wins
- maps merge by key
- lists and scalars replace whole
- nothing unsets
The launch directory is where the command is launched, or
--dir; the layers select settings, not the place of work. Each
layer is over its parent alone, and outside a git worktree only home is read.
Schemas, prompts and skills are taken whole from the nearest layer. A document
may name another of its kind in extends: the extended one is
composed first, the extending one over it.
The repository's blocks.yaml names documents it
refuses, each with a reason; whatever depends on a blocked document is refused,
naming the block.
From files to definitions
Resolve takes a request: a document by kind and name, such as a workflow with its parameters, or a step given as a process and an agent, which resolves as a workflow of that one step. Resolve is the gate before a run: what resolves may run; what does not never reaches core and leaves no run.
check is handed resolve and
resolves every document, by the names layout lists. Runtime facts and the
document source are resolve's ports; the composition answers runtime facts from
the wrappers.The parts
No settings package imports another; the composition connects them. Core takes the resolved workflow and every step's process, agent, runtime mapping and permission plan, and never reads a settings file.
What a run does with them
A workflow's items run in order: a step is one call; a parallel calls its
steps and workflows at once; a branch runs the first arm whose condition holds,
else its default; a repeat runs its body at least once, binds its next state,
and stops when until holds or after max passes; a
workflow item runs another workflow as a child run. Home's
code_review runs its tests lens as the workflow
tests_debate: one model drafts the review, another critiques it,
and the writer revises in its own session until the critique converges or two
passes have run; only the last review reaches the judge. Whatever this Agister does
not run yet, agister check refuses as agister run
would, before anything runs. The
run architecture follows a run
from the command to its record.