Glossary
The real names in the source
Plain-language and source-level meanings side by side. Open a term's chapter to return to the part of the story where it appears.
26 terms
- Open chapter
Plugin
Replaceable brick
A brick that can be attached or removed. Its registered traces disappear when it is removed.
A function or class that implements a Service. Function plugins export inject + apply(ctx); class plugins call super(ctx, name) in the constructor and register immediately.
- Open chapter
Cordis
Baseplate
The LEGO baseplate. It does not care what a brick looks like—only that it attaches, detaches, and can find the others.
A spatially and temporally composable plugin framework. It contributes Services, typed events, and reversible Effects. Fiber disposal unwinds registrations.
- Open chapter
Context / ctx
Shared shelf
One teacher puts the brain on the shelf; everyone else asks for ctx.llm without knowing that teacher.
The service repository. Stable keys include ctx.tools, ctx.llm, and ctx.sessions. Depend on a service name, not its implementation.
- Open chapter
inject (Cordis)
Wait for friends
Say ‘I need the tool cabinet,’ and the baseplate waits until it arrives before activating you.
A plugin's service dependency declaration. Requirements express load order instead of manual boot sequencing. This is unrelated to agent.inject().
- Open chapter
inject() (Agent)
Slide a note under the door
Do not ring. The note enters next-step and waits for the next claim.
Agent.inject() puts a message into inbox.next-step without calling wakeDriver. Runtime context, skill bodies, and time commonly use this path.
- Open chapter
Fiber
A mounted brick's lifetime
The time a brick stays attached. Remove it, and everything it registered is collected.
The lifecycle of a Cordis plugin instance. Fiber disposal unwinds every ctx.effect() / ctx.on() registration.
- Open chapter
Effect
Reversible registration
Items placed on the shelf and calls listened to disappear when the brick is removed.
Registrations made through ctx.effect() or ctx.on(). There is no privileged kernel to patch.
- Open chapter
isolate
A classroom's own tap
This classroom's water tap is separate from the lobby's. A service name can have another instance.
isolate(name, label) gives a child Context its own same-named service. Agent presets use it to build a capability tree per classroom.
- Open chapter
scope
Locker
One locker per person. It is not a fence; it only keeps coats on the right hooks.
dsh-scope partitions registration layers by agent. Scope is not a sandbox; isolate provides independent same-named services.
- Open chapter
Profile
Toy box
Choose a box before leaving: web has a window; headless goes home after one job.
A named assembly stored in Harness home. It lists bundles, out-of-tree plugins, and the user's cordis.patch.yml. Web and headless ship as templates.
- Open chapter
Bundle
A ready-made bag of bricks
The biggest bag is dsh-base; the bag with a window is dsh-web-app.
A distribution format for Cordis config entries and mounting code. dsh.bundle points at a patch file. Higher layers may always patch inserted content.
- Open chapter
Patch
Note / sticker
Find a row by name and replace the whole row. Restate every field you want to keep.
applyEntryPatches replaces a complete config row by id or inserts a new one. There is no deep merge; later layers win.
- Open chapter
Seam
Replaceable connector
Socket, plug, and lamp must all exist. A socket alone is not a capability.
Service Definition + Provider + Consumer. Extension plugins depend on the definition, never a concrete provider.
- Open chapter
Execution world
The room where work happens
Hands and feet must enter the same room. Glasses move with them.
fs and subprocess share an execution world. Point both at E2B and Bash, PTY, and LSP follow without provider-specific forks.
- Open chapter
Sandbox
Fence / safety gate
It is not a move—just a gate inside this room. Silent pass-through is forbidden.
ctx.sandbox.confine wraps local argv. A remote sandbox is a different fs/subprocess provider pair, not a sandbox backend.
- Open chapter
Session
Journal
Everything that happens is written in a notebook that only grows forward.
An append-only SessionEvent log with in-memory storage, exposed as ctx.sessions. Fork, resume, and search derive from it.
- Open chapter
Model-visible means logged
Seen by the model means already recorded
Any essay the teacher sees has already been copied into the journal. No secret edits.
deriveMessages() projects model history from surface events. A runtime invariant ensures everything reaching a model request can be rebuilt from the log.
- Open chapter
Turn / Step
One assignment / one step
An assignment can take several steps. A step is one thought plus its tool calls.
A Turn opens before the first claim and closes when no work remains. A Step is one model request plus its tools. A rejected first claim still closes a durable zero-step turn.
- Open chapter
Inbox
Notes on the desk
followup rings the bell, steer calls through the door, inject slides a note underneath.
followup → next-turn and wakes; steer → next-step and wakes; inject → next-step without waking. Claim only deletes.
- Open chapter
Waterfall
Passing paper through an onion
Call next() to pass the paper inward; otherwise you take control.
Around-middleware where listeners receive (...args, next). agent/pre-step, agent/request, llm/stream, and tools/* are waterfalls.
- Open chapter
emit / parallel / serial
Broadcast / work together / take turns
A broadcast cannot veto; parallel runs together; serial takes turns without next().
emit does not await; parallel awaits all; serial awaits in order and returns values. turn-stopping is serial.
- Open chapter
Host / Client
House / window
The house runs in Node. The browser window assembles another small Cordis city.
Host: webserver / apiproxy. Client: another Loader mounts immediately entries and gives the DOM to ctx.uiRenderer. Native capabilities are loopback-only.
- Open chapter
Slot
A hole in the felt board
The chat box, sidebar, and settings are pictures pinned into holes.
The SlotMap composition API. ConversationNodeDefinition plus a keyed renderer adds a conversation node.
- Open chapter
Agent preset
Agent outfit
Different classrooms in one process can dress their agents differently.
Assemble an agent + persona per session. Service rows require an isolate realm. Exposed as ctx.agentPresets.
- Open chapter
compaction / spill
Recap / another sheet
Summarize a journal that is too thick; move an overlong sentence outside and keep a reference.
compaction uses token-meter pressure to trigger summaries; spill moves oversized tool results out of line. replace removes nodes hidden by its shadow.
- Open chapter
ImageAttachmentRef
Drawer number for a photo
The journal never holds the photo, only the line saying which drawer it went into.
The serializable reference returned by ctx.attachments.saveImage after it normalizes and content-addresses an image. SessionEvents carry the reference only; base64, browser paths, and provider URLs never reach the log. read_image requires a mounted durable store and a routed model that declares image input.