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
.tmrcauch 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 (unterdocs/handbook/)- Skelette:
apis.php,public.php,llm.php,widget.php,conversation_tests.php assistants/undtools/(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 sync → tm 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ß!