TaskMonkey Handbuch

Willkommen bei TaskMonkey

Dein kürzester Weg vom Login zum ersten funktionierenden Tool.

Du hast Login-Daten und liest das hier — wahrscheinlich auf einer der drei Test-Instanzen. Diese Seite bringt dich in 15 Minuten vom Login zum ersten eigenen Tool, das auf einen echten Chat antwortet.

Wenn dich danach etwas tiefer interessiert, springe ins Kapitel-Inhaltsverzeichnis links.

Was du bekommst

  • Web-UI unter https://app.taskmonkey.de — zum schnellen Testen im Browser
  • CLI (tm) — zum lokalen Entwickeln mit Editor + Auto-Sync
  • Workspace-Verzeichnis mit Skeletten, dem kompletten Handbuch und CLAUDE.md — sofort produktiv mit Claude Code im Editor

1. CLI installieren

Voraussetzung: Node.js ≥ 18.

npm install -g taskmonkey-cli
tm --version   # solltest 0.15+ sehen

2. Lokalen Workspace anlegen

Ein leeres Verzeichnis ist dein Workspace — die CLI legt da .tmrc ab und syncht deine Config-Dateien.

mkdir ~/my-taskmonkey-workspace
cd ~/my-taskmonkey-workspace

3. Login

tm login --server https://app.taskmonkey.de

Email + Passwort eingeben, Workspace wird automatisch erkannt.

Falls du den Login nicht-interaktiv brauchst (z.B. für CI oder Scripts): du kannst .tmrc auch direkt schreiben — die CLI nutzt nur Server-URL, Tenant-Code, JWT und Refresh-Token aus dieser Datei.

4. Workspace pullen

tm pull

Du siehst etwa 115 Dateien runterkommen. Im Verzeichnis liegen jetzt:

  • CLAUDE.md — Plattform-Erklärung für Claude Code (öffne den Ordner in deinem Editor mit Claude Code-Integration, schon weiß es Bescheid)
  • docs/ — Reference-Dokumentation + komplettes Handbuch (unter docs/handbook/)
  • Skelette: apis.php, public.php, llm.php, widget.php, conversation_tests.php
  • assistants/ und tools/ (leer)

5. Ersten Chat testen

Sofort, ohne irgendwas konfiguriert zu haben:

tm test-chat "Hallo"

Antwortet die Default-Plattform. Public-Chat mit dem Platform-Default-LLM.

6. Erstes Tool bauen

mkdir -p tools/util
cat > tools/util/getCurrentTime.php <<'PHP'
<?php
return [
    'tools' => [
        'getCurrentTime' => [
            'description' => 'Gibt die aktuelle Server-Zeit zurück.',
            'parameters' => ['type' => 'object', 'properties' => new \stdClass(), 'required' => []],
            'handler' => function (array $results, array $args, array $ctx): array {
                return ['success' => true, 'now' => date('c')];
            },
        ],
    ],
];
PHP

Sync + Test:

tm sync
tm test-tool getCurrentTime

Du siehst:

✓ getCurrentTime (22ms)
{ "success": true, "now": "2026-06-03T14:53:40+02:00" }

7. Tool im Chat verfügbar machen

In public.php die public.tools ergänzen:

'public.tools' => [
    'setSuggestions',
    'getCurrentTime',     // ← neu
],

Sync + Test:

tm sync
tm test-chat "Was ist gerade für eine Uhrzeit?"

Output:

✓ getCurrentTime
Die aktuelle Uhrzeit ist 14:54 Uhr (MESZ).

Geschafft. Du hast jetzt einen funktionierenden Workflow: Tool schreiben → tm synctm test-chat. Iterations-Zeit: 3-5 Sekunden.

Was du jetzt wahrscheinlich willst

Du willst… Lies…
Einen eigenen LLM-Key (z.B. Claude statt OpenAI-Default) llm.php konfigurieren
Ein Tool, das eine externe API aufruft Tools über apis.php
Ein Tool, das aus dem Handler heraus Claude aufruft AnthropicService in vendor-klassen.md
Eigene Assistenten (Tasks) Assistant-Setup
Live-Sync beim Speichern tm watch (in einem zweiten Terminal laufen lassen)

Wichtige Regeln (wirklich lesen)

Handler-Signatur

Tool-Handler haben immer drei Argumente:

'handler' => function (array $results, array $args, array $ctx): array { ... }

Wenn du nur 2 Argumente deklarierst, sagt dir die CLI:

Tool 'X' hat eine ungueltige Handler-Signatur (Parameter-Anzahl: 2)

Sandbox: was im Handler nicht geht

Tenant-Code läuft in einer Sandbox. Beim tm sync lehnt der Validator ab:

  • Direkte HTTP-Clients: Cake\Http\Client, GuzzleHttp\Client, curl_*, file_get_contents
  • Shell: exec, shell_exec, system, passthru
  • Code-Eval: eval, assert, create_function
  • Reflection-Klassen: ReflectionClass, ReflectionFunction, …

Wenn du HTTP brauchst: über apis.php deklarieren und das Tool referenziert die API per Name. Siehe API-Tools.

Wenn du Claude im Handler brauchst: \App\Service\AnthropicService::fromTenantConfig($ctx['config']) — Beispiel in vendor-klassen.md.

Named Args mit system: vorsichtig

PHP 8 Named Arguments wie $svc->message(system: 'Du bist...') matcht der Validator fälschlich als Aufruf der system()-Funktion (die er blockt). Workaround: positional args verwenden.

Wenn etwas hakt

Problem Wahrscheinliche Ursache / Fix
tm test-tool gibt HTTP 400 mit Fehlertext Lies den Text — Handler-Signatur oder Sandbox-Verstoß
Chat antwortet nichts Tool nicht in public.tools oder assistants.<slug>.tools
tm sync lehnt eine Klasse ab Siehe Sandbox-Regeln oben
Du brauchst Server-Logs tm logs — streamt live
Tools live anschauen tm monitor

Wenn du nicht weiterkommst: bei deinem Plattform-Kontakt melden, mit einem Screenshot des tm-Output. Stack-Traces im tm logs-Output helfen sehr.

Viel Spaß!

Zuletzt aktualisiert: 2026-06-03