A step is one model request plus the tool executions its response causes. A turn is one drain of admitted input, ending after the model and its tools stop. A round is an outer policy iteration containing a turn. Everything else in the harness — seams, scopes, goals, Ralph loops — is defined against that hierarchy.
The harness's documentation is unusually precise about vocabulary, and the precision is load-bearing: several terms that sound interchangeable are not. This page collects the definitions that actually change how you use the tool.
The loop hierarchy
Three nested units, smallest first:
step — one model request plus the tool executions caused by its response.
turn — one drain of admitted input in a session, ending after the model and its tools stop. A turn contains one or more steps.
round — an outer policy iteration containing a turn.
The practical consequence: when a limit or a cap is described, check which unit it counts. A cap on rounds and a cap on steps bound very different things. A single turn can contain many steps, and one round contains a turn.
Capability seams
seam — a swappable capability comprising three roles: a Service Definition (an abstract class
or concrete registry owning ctx.<key>), one or more Service Providers, and Consumers that
inject the service.
The documentation adds the sentence that matters: "The seam is the complete capability, never one role."
This is the architectural reason "everything is a plugin" is more than a slogan. A capability is not
an implementation you might swap — it is a definition, its providers, and its consumers considered
together. Swapping the web-search backend means replacing a provider behind ctx.web, and nothing
that consumes it needs to know.
Agent scope
scope — the unit of per-agent registration for contributions such as tools and prompts. Either global, or scoped to one agent.
scope key — the opaque identity a scope is keyed by, compared by object identity. A live agent serves as its own scope key.
agent context (agent.ctx) — the agent's scoped context, where registrations are scope-visible
and scope-lifetime.
scope carrier — the thisArg a scope-filtered dispatch carries; it admits untagged listeners
plus the subject's own.
scoped dispatch — an event about one agent's activity dispatches with that agent's carrier.
shadowing — most-specific-wins name resolution. A scoped item replaces a same-named global item for that scope alone.
restriction / scope-local registration — a restriction filters the global tool set for one scope by intersection.
setup window — the creation slot in which a creator composes an agent's scoped world, before publishing it.
lineage — parent/child facts carried as data. The documentation is emphatic that lineage "affects visibility never" — a child does not see something because it is a child; it sees it because its scope registers it.
That last point is worth pausing on. Delegation hierarchies in many systems leak: a child inherits the parent's capabilities by virtue of being a child. Here, visibility comes from scope alone and lineage is only a recorded fact. It is what makes "a reviewer that can read but never write" a reliable restriction rather than a hopeful instruction.
Goals
goal — one durable completion objective attached to an existing session, with a phase and a round cap.
goal round — one continuation cycle admitted for the current goal.
goal activation — process-local permission for a continuation consumer to admit another goal round. Either armed or disarmed.
Three separate ideas: what you are trying to achieve, one attempt at continuing toward it, and the permission that allows another attempt. A goal with a round cap and an explicit activation state is a bounded autonomous loop — bounded being the operative word.
Human commands
human command — a slash-prefixed instruction interpreted and executed by a human-facing adapter, without becoming a model message.
command plane — discovery, parsing, dispatch, cancellation and result rendering, owned by UI adapters.
goal command — the /goal command, for observing or mutating the current goal.
The design point is the phrase "without becoming a model message". A human command is not a prompt that the model interprets; it is executed by the adapter. That is a cleaner separation than most agent interfaces manage, where slash commands are just prompt text with a convention on top.
Ralph
Ralph loop — one foreground fresh-agent workflow run toward an immutable objective.
Ralph round — one fresh child session in a Ralph loop, with no parent conversation seed.
Ralph handoff — the normalised bounded structured report passed from one continuing Ralph round to the next.
Covered in more depth in sub-agents and workflows, but the three definitions read together already tell the story: fixed objective, no context inheritance, bounded structured continuity.
Frequently asked
What is the difference between a turn, a step and a round?
A step is one model request plus the tool executions caused by its response. A turn is one drain of admitted input in a session, ending after the model and its tools stop — so a turn contains one or more steps. A round is an outer policy iteration containing a turn.
What is a capability seam?
A swappable capability made of three roles: a Service Definition owning ctx.<key>, one or more Service Providers, and Consumers that inject the service. The seam is the complete capability, never one role.
What does shadowing mean in dsh?
Most-specific-wins name resolution. A scoped item replaces a same-named global item for that scope alone, which is how one agent can have a different version of a tool without affecting any other.