<!-- Generated by scripts/gen-docs.ts from the TSDoc in src/. Do not edit by hand. -->

# `board/tool`

Source: [`src/board/tool.ts`](https://github.com/AI-for-dev/combo/blob/main/src/board/tool.ts)

How a member reaches the board.

One tool, `board`, built per member and closing over two things it therefore
never has to be told: which board, and who is calling. An agent whose `tools:`
does not name `board` is not given it by pi, so what a member can say stays
readable in its own file, the same way delegation does.

**The member's id is in the closure, not in the parameters.** That is the
whole reason this file exists rather than the board being handed round: a
`from` a model can write is a `from` a model can borrow, and a medium where
anybody can post as anybody is not a record of anything.

The tool announces nothing itself. The board and the claims it is handed do
that, whoever acts on them - see `announced.ts` - so what a member did through
this tool and what the workflow did for it land in the same record.

When the caller gives it a {@link Claims}, the tool also grants and returns
things. That is a different act from posting a `claim`: a post announces into
a medium that was empty when the member looked, and a take is decided. Both
are offered, because a member still has to say what it is doing, and only one
of them settles who does it.

## `BoardToolOptions`

*type*

```typescript
export type BoardToolOptions = {
	/** The one everybody is posting to. Shared; the cursor into it is not. */
	board: Board;
	/**
	 * The member holding this tool.
	 *
	 * Stamped on everything it posts. It is a parameter of the *builder*, never
	 * of the tool: whoever builds the tool knows who is holding it, and a model
	 * cannot reach a closure.
	 */
	from: string;
	/**
	 * What there is to take, when anything is.
	 *
	 * Absent, the tool offers `post` and `read` only, and says so in its
	 * description: a member is never shown an action that would be refused
	 * whatever it asked for.
	 */
	claims?: Claims;
	/**
	 * Where this member has read to. Pass the one the workflow hands out from,
	 * so a `read` never hands back what the top of the turn already did. Left
	 * out, the tool keeps its own.
	 */
	reader?: Reader;
};
```

Which board, on whose behalf.

## `declaresBoard`

*function*

```typescript
export function declaresBoard(tools: readonly string[] | undefined): boolean { /* … */ }
```

Whether an agent's definition asks to be allowed on the board.
