---
title: WorkspaceHandles
description: "What the body of a `workspace()` gets as `input.workspace`: the path of each Worktree, and the branch."
---

# `WorkspaceHandles`

Type, in `@jr2/orchestrator/src/workspace.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 WorkspaceHandles<TSlots extends string> = [TSlots] extends [never]
  ? { repos: Record<never, string> }
  : SlotHandles<TSlots>;
```

What the body of a `workspace()` gets as `input.workspace`: the path of each Worktree, and the
branch. A path is correct in each Instance that registers the Machine.

`TSlots` is the names of the Repo Slots that the body reads. `workspace()` refuses a body that
names a slot that the Workspace does not have. Write `string` for a body that names no slot and
reads the Worktrees in the order of `repos`, as under `repos: open`. Write `never` for a
Workspace with no Repo Slot: its handles are `{ repos: {} }`, with no branch, and its Agents work
in `/work`.
