> ## Documentation Index
> Fetch the complete documentation index at: https://phaseo.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Werkzeuge

> Definiere validierte lokale Tools, manuelle Tools und Tools, die ihren Fortschritt melden.

Verwende Tools, wenn ein Agent Anwendungsdaten lesen, einen internen Dienst aufrufen oder eine Aktion ausführen muss. Das Agent SDK validiert Tool-Grenzen und führt den Tool-Code in deiner Anwendung aus.

## Ein lokales Tool definieren

`defineTool()` akzeptiert eine Beschreibung, optionale JSON-Parameter, Laufzeitprüfungen, ein Zeitlimit und eine `execute()`-Funktion.

```typescript theme={null}
import { defineTool } from "@phaseo/agent-sdk";

const fetchTicket = defineTool({
  id: "fetch-ticket",
  description: "Load one internal support ticket.",
  parameters: {
    type: "object",
    properties: {
      ticketId: { type: "string" },
    },
    required: ["ticketId"],
    additionalProperties: false,
  },
  timeoutMs: 3_000,
  async execute(input: { ticketId: string }, context) {
    const response = await fetch(
      `https://internal.example/tickets/${input.ticketId}`,
      { signal: context.signal },
    );

    return response.json();
  },
});
```

Läuft das Zeitlimit ab, bricht die Laufzeit `context.signal` ab, markiert den Lauf als fehlgeschlagen und gibt den Zeitüberschreitungsfehler erneut aus.

Schemas können Funktionen oder Objekte mit `parse()` oder `safeParse()` sein. Ungültige Modellargumente und Tool-Ergebnisse schlagen fehl, bevor sie die Tool-Grenze überschreiten.

## Arbeit in deiner Anwendung ausführen

Setze `execute: false`, wenn deine Anwendung statt des SDK-Prozesses die Arbeit ausführt. Setze den pausierten Lauf mit dem Ergebnis in `toolOutputs` fort.

Gib bei einem interaktiven Tool `null` aus `onToolCalled` zurück. Nach der Fortsetzung kann `onResponseReceived` die bereitgestellte Antwort prüfen oder umwandeln.

## Fortschritt melden

Ein asynchroner Generator kann vor dem endgültigen Ergebnis vorläufige Ergebnisse zurückgeben:

```typescript theme={null}
const indexRepository = defineTool({
  id: "index-repository",
  async *execute(input: { path: string }) {
    yield { phase: "scan" };
    yield { phase: "embed" };
    return { indexed: 248 };
  },
});
```

Der Fortschritt ist über `tool.preliminary_result`-Ereignisse und `preliminaryResults` des Schritts verfügbar.

## Unabhängige Tools parallel ausführen

Wenn ein Modell-Turn mehrere unabhängige Tools sicher aufrufen kann, konfiguriere eine Parallelitätsgrenze:

```typescript theme={null}
const agent = createAgent({
  id: "research-agent",
  toolExecution: {
    toolConcurrency: 3,
  },
  tools: [fetchDocs, fetchStatus, fetchIncidents],
});
```

Die Laufzeit behält die Reihenfolge der Tool-Ergebnismeldungen bei, auch wenn sich lokale Ausführungen überschneiden.

## Weiterführende Anleitungen

* [Läufe anhalten, freigeben und fortsetzen](./agent-sdk-state-and-approval.mdx)
* [Agent-Ergebnisse streamen](./agent-sdk-streaming.mdx)
* [Lokale Tools parallel aufrufen](../../cookbook/agent-sdk-parallel-tools.mdx)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.