File Tools
Agents behalten Dateien über Runs hinweg. Sie legen Berichte und Downloads in Ordnern ab, finden sie über Metadaten wieder und geben sie an den Browser oder andere Agents weiter.
Auf dieser Seite
Schnellstart
Füge einem Agent die File Tools hinzu. Agents wählen den Pfad beim Speichern, und Ordner erscheinen, sobald eine Datei darin liegt. Datenmodell und Limits stehen unter Dateien.
version: "1.0"
name: invoice-collector
model: connic/gpt-5.6-luna
description: "Lädt Rechnungen aus Lieferantenportalen und legt sie ab"
system_prompt: |
Lade die Rechnung dieses Monats aus dem Lieferantenportal und speichere
sie unter invoices/<lieferant>/. Markiere neue Rechnungen mit status "new".
tools:
- web_browser_open
- web_browser_observe
- web_browser_act
- web_browser_download
- file_list
- file_update
files:
folders: [invoices]
prevent_delete: trueZugriffskontrolle
Der Block files legt fest, was ein Agent sehen und ändern darf. Ohne ihn nutzt der Agent den ganzen Dateibaum.
foldersumfasst jeden Ordner samt allem darunter:invoicesschließtinvoices/2026/acme.pdfein. Mit gesetzten Ordnern sind Dateien außerhalb für den Agent unsichtbar.prevent_writeblockiert file_write und file_update. Zum Verschieben braucht der Agent Schreibzugriff auf beide Ordner.prevent_deleteblockiert file_delete.session_onlyzeigt dem Agent nur Dateien aus seiner aktuellen Session, damit die Dateien eines Endnutzers bei keinem anderen auftauchen. Setzt session voraus.- Eine Ordner-Einstellung ersetzt die Einstellung auf oberster Ebene, und der spezifischste Ordner gewinnt.
session:
key: context.customer_id
files:
session_only: true # jeder Kunde sieht nur seine eigenen Uploads
prevent_delete: true
folders:
uploads: {}
templates:
session_only: false # von allen Sessions geteilt
prevent_write: trueEine Datei, die der Agent nicht sieht, wird nie ersetzt. Ist ihr Pfad belegt, wird die neue Datei unter einem nummerierten Namen gespeichert.
In eigenen Tools nutzen
Eigene Tools importieren dieselben Funktionen aus connic.tools. Die Zugriffskontrolle des Agents gilt auch für diese Aufrufe.
from connic.tools import file_list, file_read, file_update
async def next_pending_invoice() -> dict:
"""Gibt die älteste noch offene Rechnung zurück."""
result = await file_list(
"invoices",
recursive=True,
filter={"status": "new", "_mime_type": "application/pdf"},
sort={"_created_at": 1},
limit=1,
)
if not result["files"]:
return {"done": True}
invoice = result["files"][0]
await file_update(invoice["_path"], metadata={"status": "processing"})
return invoiceBrowser-Downloads und -Uploads
Die Browser-Tools verschieben Dateien in die und aus den Projektdateien. Ein save_to mit / am Ende ist ein Ordner, der den Namen des Downloads behält.
# Download direkt in die Dateien speichern (bis 100 MiB)
await web_browser_download("e12", include_content=False, save_to="invoices/acme/")
# Eine gespeicherte Datei in ein Upload-Feld laden
await web_browser_upload("e7", path="contracts/signed/acme.pdf")Tool-Referenz
file_list
Listet Dateien und Unterordner eines Ordners oder alle Dateien darunter. Filter nutzen die Filteroperatoren der Datenbank auf eigenen Metadaten und den Systemfeldern _name, _path, _folder, _mime_type, _size, _source, _agent, _run_id, _session_id, _created_at und _updated_at.
result = await file_list("invoices/2026")
# {"folder": "invoices/2026", "folders": ["acme"], "files": [...], "count": 3, "total": 3}
# Alles, was diese Session geschrieben hat, im ganzen Baum
result = await file_list(recursive=True, scope="session")| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
| folder | str | "" | Ordner, der gelistet wird. Leer für die oberste Ebene. |
| recursive | bool | False | Alle Dateien unter dem Ordner zurückgeben statt Unterordner zu listen. |
| filter | dict | None | Filter auf Metadaten. |
| scope | str | "all" | "session" oder "run" behält nur Dateien aus der aktuellen Session oder dem aktuellen Run. |
| sort | dict | {"_name": 1} | Sortierung. 1 aufsteigend, -1 absteigend. |
| limit | int | 100 | Maximale Anzahl Dateien, bis 1000. |
| skip | int | 0 | Übersprungene Dateien für Paginierung. |
file_read
Liest eine Datei. Das Modell bekommt bei Textdateien den vollständigen Text und PDFs und Bilder als Anhang, den es lesen kann, für Dateien bis 20 MiB. Andere Formate und größere Dateien liefern die Metadaten und einen Fehler; gib ihren Pfad stattdessen an den Browser oder ein eigenes Tool weiter. In eigenen Tools liefert file_read die Rohbytes jeder Datei als content.
# In einem eigenen Tool
result = await file_read("reports/summary.md")
# {"file": {"_path": "reports/summary.md", ...}, "content": b"# Summary ..."}
text = result["content"].decode("utf-8")| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
| path | str | erforderlich | Dateipfad. |
file_write
Schreibt eine Textdatei. Fehlende Ordner werden angelegt. Gibt die gespeicherte Datei zurück, einschließlich ihres endgültigen _path. In eigenen Tools darf content auch Bytes enthalten, etwa für PDFs oder Bilder.
result = await file_write(
"reports/2026-10/summary.md",
"# Zusammenfassung Oktober\n...",
metadata={"status": "draft", "customer": "acme"},
)
# result["_path"] ist der gespeicherte Pfad, z. B. "reports/2026-10/summary (2).md", falls der Name belegt war| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
| path | str | erforderlich | Dateipfad. |
| content | str | bytes | erforderlich | Textinhalt. Bytes nur in eigenen Tools. |
| mime_type | str | None | Content-Type. Wird aus dem Dateinamen abgeleitet, wenn er fehlt. |
| metadata | dict | None | Eigene Felder. Schlüssel dürfen nicht mit einem Unterstrich beginnen. |
| overwrite | bool | False | Eine vorhandene Datei am Pfad ersetzen. Sonst bekommt die neue Datei einen nummerierten Namen. |
file_update
Verschiebt oder benennt eine Datei oder einen Ordner um, oder ergänzt die Metadaten einer Datei. Ein Wert None entfernt ein Feld. Das Verschieben auf einen belegten Pfad schlägt fehl.
# Datei umbenennen und als erledigt markieren
await file_update("inbox/acme.pdf", new_path="done/acme.pdf", metadata={"status": "processed"})
# Einen ganzen Ordner verschieben
await file_update("inbox/2026-09", new_path="archive/2026-09")| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
| path | str | erforderlich | Pfad der Datei oder des Ordners. |
| new_path | str | None | Neuer Pfad. Beim Verschieben eines Ordners wandert alles darin mit. |
| metadata | dict | None | Felder, die in die Metadaten einer Datei übernommen werden. |
file_delete
Löscht eine Datei oder einen Ordner samt Inhalt. Gibt die Zahl der gelöschten Dateien zurück.
await file_delete("tmp/scratch.txt")
await file_delete("tmp", recursive=True)| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
| path | str | erforderlich | Pfad der Datei oder des Ordners. |
| recursive | bool | False | Erforderlich, um einen Ordner zu löschen. |