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

# `tool`

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

The constant parts of a tool combo defines: whether an agent asked for it,
and the two shapes of answer a model reads.

Three tools - the verdict, the board, the subagent - each wrote these three
lines for themselves, once identically and twice inline. A tool body should
be the decision it records or the act it performs, and nothing else.

## `declares`

*function*

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

Whether an agent's `tools:` names `name`.

The agent's file is the allowlist: pi enables a custom tool only when the
definition names it, so a tool is offered to whoever declares it and costs
nothing to offer otherwise. What an agent can do stays readable in its file.

## `refuse`

*function*

```typescript
export function refuse(text: string) { /* … */ }
```

A refusal the model can act on, rather than a failure it has to guess at.

## `said`

*function*

```typescript
export function said(text: string) { /* … */ }
```

An answer the model reads as an answer.
