---
title: ChainLink
description: "One reply since the pick, as the author reads it: an invoked actor's output, typed by its slot (`src`); or an event that answered a state below the Agent's — a Gate's answer, a nested Agent's pick — typed by the Machine's events."
---

# `ChainLink`

Type, in `@jr2/orchestrator/src/pick.ts`. The signature of an export, or a type that it names, names this type. The [Authoring surface](../authoring-surface.md) page lists each export. This type is not an export of `@jr2/orchestrator`, so a workflow module does not import it by name.

```ts
type ChainLink<TActor extends ProvidedActor, TEvent extends EventObject> =
  | (TActor extends unknown ? { kind: "output"; src: TActor["src"]; output: OutputFrom<TActor["logic"]> } : never)
  | { kind: "event"; event: Exclude<TEvent, { type: `${string}.${string}` }> };
```

One reply since the pick, as the author reads it: an invoked actor's output, typed by its slot
(`src`); or an event that answered a state below the Agent's — a Gate's answer, a nested Agent's
pick — typed by the Machine's events. A reply is from outside the Machine: the events it sends
itself are not links.
