Exec & Eval
The first word in a fence info string is the language. The remaining words form a middleware chain read left-to-right. Standard renderers only read the first word, so the modifiers stay invisible everywhere else.
```bash silent timeout=30s exec
git diff --stat
```Built-in modifiers
exec— run the block as a subprocess and render stdout.eval— run JavaScript/TypeScript in-process as an Effection operation.silent— execute but suppress rendered output.persist— keep resources created by an eval block alive for the component invocation.timeout=30s— cancel a long-running block.daemon— start an arbitrary fixed-configuration subprocess tied to the component invocation.service=name— start an attached service and publish its invocation-local endpoint.ephemeral— reconstruct live eval state without writing a journal event.
LLM sampling is not a fence modifier — it happens through the <Sample> component installed by provider middleware.
Durable and live bindings
Plain eval blocks run in a shared durable binding environment for the current component. Top-level bindings export automatically to later blocks, and bare {name} interpolation inside any executable block reads from them.ephemeral eval reruns during partial replay and can also read invocation-local live bindings such as service endpoints; those bindings are never interpolated or journaled.
```bash service=server exec
node handshake-compatible-server.js
```
```ts persist ephemeral eval
import { callService } from "./client.ts";
const endpoint = server;
yield* Sample.around({
*sample([request]) { return yield* callService(endpoint, request); },
});
```Rendering from eval
output("...")renders text into the document from an eval block.renderChildren()andrender(markdown)render nested content intentionally.
Daemons
daemon exec starts a long-lived process, returns control immediately, and is torn down by structured concurrency when the component invocation completes — no manual cleanup. It remains the primitive for processes whose fixed configuration the document or host manages explicitly. Dynamic service endpoints use service=name with a handshake-compatible command and the XMD service handshake protocol.