EN·ES·DE·PT·FR
⌘K

Konfiguration

Vollständige Referenz für config.toml. Alle Abschnitte und ihre Standardwerte.

[provider]

KeyTypeDefaultDescription
kindstring"google_genai"Anbietertyp: google_genai, openai_compatible oder anthropic
api_keystringAPI-Schlüssel für den Anbieter (erforderlich)
gateway_tokenstringnullOptionales Cloudflare-AI-Gateway-Token, gesendet als cf-aig-authorization
base_urlstringAPI-Basis-URL (erforderlich für openai_compatible, nicht verwendet für native Anbieter)

[provider.models]

KeyTypeDefaultDescription
primarystring(provider default)Standardmodell für allgemeine Anfragen
faststring(same as primary)Modell für einfache/schnelle Anfragen
smartstring(same as primary)Modell für komplexe Reasoning-Aufgaben
Modell-Standardwerte
Anbieterbezogene Standardwerte: google_genai → primary=gemini-3-flash-preview, fast=gemini-2.5-flash-lite, smart=gemini-3-pro-preview. openai_compatible → alle Stufen standardmäßig openai/gpt-5-mini. anthropic → alle Stufen standardmäßig claude-sonnet-4-5. Wenn alle drei Stufen zum gleichen Modell aufgelöst werden, wird Auto-Routing deaktiviert. Siehe Modell-Routing.

[telegram]

KeyTypeDefaultDescription
bot_tokenstringTelegram-Bot-Token von @BotFather (erforderlich)
allowed_user_idsarray[]Numerische Telegram-Benutzer-IDs, die chatten dürfen. Leer = keine Einschränkung.

[slack]

Erfordert das slack-Feature-Flag zur Kompilierzeit. Siehe Slack für die vollständige Einrichtungsanleitung.

KeyTypeDefaultDescription
enabledboolfalseSlack-Channel aktivieren
app_tokenstringSlack App-Level Token für Socket Mode (xapp-...)
bot_tokenstringSlack Bot Token für Web API (xoxb-...)
allowed_user_idsarray[]Slack-Benutzer-IDs, die interagieren dürfen. Leer = keine Einschränkung.
use_threadsbooltrueStandardmäßig in Threads antworten

[discord]

Erfordert das discord-Feature-Flag zur Kompilierzeit. Siehe Discord für die vollständige Einrichtungsanleitung.

KeyTypeDefaultDescription
bot_tokenstringDiscord-Bot-Token vom Developer Portal
allowed_user_idsarray[]Discord-Benutzer-IDs, die interagieren dürfen. Leer = keine Einschränkung.
guild_idintegernullOptionale Guild/Server-ID, um den Bot auf einen einzelnen Server zu beschränken

[state]

KeyTypeDefaultDescription
db_pathstring"aidaemon.db"Pfad zur SQLite-Datenbankdatei
working_memory_capinteger50Maximale Nachrichten pro Sitzung im Arbeitsspeicher
consolidation_interval_hoursinteger6Stunden zwischen Speicherkonsolidierungsläufen
max_factsinteger100Maximale Anzahl von Fakten, die in den System-Prompt eingefügt werden
daily_token_budgetintegernullMaximale Tokens (Eingabe+Ausgabe) pro Tag. Null = unbegrenzt. Wird um Mitternacht UTC zurückgesetzt.
encryption_keystringnullSQLCipher-Verschlüsselungsschlüssel (erfordert encryption-Feature). AES-256 im Ruhezustand.

[terminal]

KeyTypeDefaultDescription
allowed_prefixesarray(see below)Befehlspräfixe, die ohne Benutzerbestätigung automatisch genehmigt werden
initial_timeout_secsinteger30Zeitlimit in Sekunden für die initiale Befehlsausführung
max_output_charsinteger4000Befehlsausgabe über diese Länge hinaus abschneiden
permission_modestring"default"Risiko-Berechtigungsmodus: default, cautious oder yolo. Siehe Befehlsrisiko.

Standardmäßig erlaubte Präfixe:

text
ls, cat, head, tail, echo, date, whoami, pwd, find, wc,
grep, tree, file, stat, uname, df, du, ps, which, env, printenv
Shell-Operatoren
Befehle, die ; | && || $() oder Backticks enthalten, erfordern immer eine Genehmigung, auch wenn das Präfix auf der Whitelist steht.

[daemon]

KeyTypeDefaultDescription
health_portinteger8080Port für den Health-Check-HTTP-Endpunkt
health_bindstring"127.0.0.1"Bind-Adresse. Verwende "0.0.0.0" für externen Zugriff.

[triggers.email]

KeyTypeDefaultDescription
hoststringIMAP-Server-Hostname (z.B. imap.gmail.com)
portintegerIMAP-Port (typischerweise 993 für TLS)
usernamestringE-Mail-Konto-Benutzername
passwordstringE-Mail-Konto-Passwort oder App-spezifisches Passwort
folderstring"INBOX"Zu überwachender IMAP-Ordner

[mcp.<name>]

KeyTypeDefaultDescription
commandstringPfad oder Name der ausführbaren Datei für den MCP-Server
argsarray[]Kommandozeilenargumente

[browser]

KeyTypeDefaultDescription
enabledboolfalseBrowser-Automatisierungstool aktivieren
headlessbooltrueChrome ohne sichtbares Fenster ausführen
screenshot_widthinteger1280Browser-Viewport-Breite in Pixeln
screenshot_heightinteger720Browser-Viewport-Höhe in Pixeln
user_data_dirstring~/.aidaemon/chrome-profileChrome-Profilverzeichnis für persistente Sitzungen
profilestringDefaultChrome-Profilname innerhalb von user_data_dir
remote_debugging_portintegernullMit bestehendem Chrome auf diesem Port verbinden (fortgeschritten)

[skills]

KeyTypeDefaultDescription
dirstring"skills"Verzeichnis mit Skill-Markdown-Dateien
enabledbooltrueSkills-System aktivieren
registriesarray[]URLs von Skill-Registry-JSON-Manifesten zum Durchsuchen/Installieren von Skills

[subagents]

KeyTypeDefaultDescription
enabledbooltrueDem Agenten erlauben, Sub-Agenten zu starten
max_depthinteger3Maximale Verschachtelungstiefe für Sub-Agent-Rekursion
max_iterationsinteger10Maximale agentische Schleifenschritte pro Sub-Agent-Aufruf
max_response_charsinteger8000Sub-Agent-Antworten über diese Länge hinaus abschneiden
timeout_secsinteger300Sub-Agent-Ausführungs-Zeitlimit in Sekunden

[cli_agents]

KeyTypeDefaultDescription
enabledboolfalseCLI-Agent-Delegierungstool aktivieren
timeout_secsinteger600Globales Zeitlimit für CLI-Agent-Ausführung
max_output_charsinteger16000Globale maximale Ausgabelänge von CLI-Agenten

[cli_agents.tools.<name>]

KeyTypeDefaultDescription
commandstringAuszuführender Befehl
argsarray[]Standardargumente, die dem Befehl übergeben werden
descriptionstringTool-Beschreibung, die dem LLM angezeigt wird
timeout_secsintegernullGlobales Zeitlimit für dieses Tool überschreiben
max_output_charsintegernullGlobale maximale Ausgabe für dieses Tool überschreiben

[search]

KeyTypeDefaultDescription
backendstring"duckduckgo"Such-Backend: duckduckgo (kein Schlüssel nötig) oder brave
api_keystring""API-Schlüssel für Brave-Suche (unterstützt "keychain")

[scheduler]

KeyTypeDefaultDescription
enabledbooltrueSystem für geplante Aufgaben aktivieren
tick_interval_secsinteger30Wie oft der Scheduler nach fälligen Aufgaben prüft

[[scheduler.tasks]]

Vordefinierte geplante Aufgaben, die beim Start aus der Konfiguration geladen werden:

KeyTypeDefaultDescription
namestringMenschenlesbares Aufgabenlabel
schedulestringNatürlichsprachlicher oder Cron-Ausdruck (siehe Scheduler)
promptstringWas der Agent tun soll, wenn die Aufgabe ausgelöst wird
oneshotboolfalseEinmal auslösen, dann automatisch löschen
trustedboolfalseMit voller Autonomie ausführen (keine Terminal-Genehmigung nötig)

[files]

KeyTypeDefaultDescription
enabledbooltrueDateiübertragungs-Tools aktivieren (senden/empfangen)
inbox_dirstring"~/.aidaemon/files/inbox"Verzeichnis für empfangene Dateien von Telegram
outbox_dirsarray["~"]Verzeichnisse, aus denen der Agent Dateien senden darf
max_file_size_mbinteger10Maximale Dateigröße für Übertragungen in MB
retention_hoursinteger24Stunden, die empfangene Dateien vor der Bereinigung aufbewahrt werden

Secrets-Verwaltung

Sensible Konfigurationswerte unterstützen neben Klartext zwei Auflösungsmethoden sowie einen optionalen Nur-Umgebungsmodus:

OS-Schlüsselbund

Setze jedes geheime Feld auf "keychain", um es aus dem OS-Schlüsselbund aufzulösen (macOS Keychain, Linux secret-service):

toml
[provider]
api_key = "keychain"    # Resolved from keychain entry "api_key"

[telegram]
bot_token = "keychain"  # Resolved from keychain entry "bot_token"

Speichere Werte mit dem keychain-CLI-Befehl vor dem ersten Start:

bash
# Store a secret (prompts interactively)
aidaemon keychain set api_key
aidaemon keychain set bot_token

# Verify a stored secret (shows masked value)
aidaemon keychain get api_key

# Remove a secret
aidaemon keychain delete api_key
Sicherheit
Der set-Befehl fragt den Wert interaktiv mit Bestätigung ab und hält Geheimnisse aus deiner Shell-History heraus.

Umgebungsvariablen

Verwende ${VAR_NAME}-Syntax überall in Konfigurationswerten:

toml
[provider]
api_key = "${GOOGLE_API_KEY}"

[telegram]
bot_token = "${TELEGRAM_BOT_TOKEN}"

Nur-Umgebungsmodus (ohne Schlüsselbund)

Wenn du den OS-Schlüsselbund nicht verwenden möchtest, setze diese Laufzeit-Umgebungsvariablen:

bash
# Deaktiviere OS-Schlüsselbundspeicher und nutze env-dateibasierte Secrets
export AIDAEMON_NO_KEYCHAIN=1

# Optional: spezifischen Pfad zur env-Datei setzen (Standard: ./.env)
export AIDAEMON_ENV_FILE=/absoluter/pfad/zur/.env

In diesem Modus liest aidaemon Secrets aus der gewählten env-Datei (oder aus Prozess-Umgebungsvariablen, wenn keine env-Datei existiert) und schreibt Secret-Updates zurück in diese env-Datei — einschließlich OAuth Access/Refresh Token Rotation.

Sicherheit im Nur-Umgebungsmodus
Halte die env-Datei privat (chmod 600) und außerhalb der Versionskontrolle.
Unterstützte Schlüsselbund-Felder
Felder, die "keychain" unterstützen: provider.api_key, provider.gateway_token, telegram.bot_token, slack.app_token, slack.bot_token, discord.bot_token, triggers.email.password, state.encryption_key, search.api_key und http_auth.*-Profilfelder.

[health]

Gesundheitsüberwachungssystem. Siehe Gesundheitsüberwachung.

KeyTypeDefaultDescription
enabledbooltrueGesundheitsüberwachungssystem aktivieren
tick_interval_secsinteger30Wie oft nach fälligen Probes geprüft wird
result_retention_daysinteger7Tage, die Health-Check-Ergebnisse aufbewahrt werden

[[health.probes]]

KeyTypeDefaultDescription
namestringProbe-Name
probe_typestringTyp: http, command, file oder port
targetstringZiel-URL, Befehl, Dateipfad oder host:port
schedulestringCron-Ausdruck oder Intervall
consecutive_failures_alertinteger3Alarm nach N aufeinanderfolgenden Fehlschlägen
alert_session_idsarray[]Sitzungs-IDs, die bei Alarm benachrichtigt werden

[updates]

Selbst-Update-System. Siehe Selbst-Updater.

KeyTypeDefaultDescription
modestring"check_only"Update-Modus: enable, check_only oder disable
check_interval_hoursinteger24Stunden zwischen Update-Prüfungen
check_at_utc_hourintegernullBestimmte UTC-Stunde (0-23) für die tägliche Prüfung
confirmation_timeout_minsinteger60Minuten, die auf Benutzerbestätigung gewartet wird

[people]

Personen-Intelligenz — ein persönliches Kontaktbuch, das von deinem Assistenten verwaltet wird. Siehe Personen-Intelligenz.

KeyTypeDefaultDescription
enabledboolfalseAnfangsstatus für Personen-Intelligenz (kann zur Laufzeit per Chat umgeschaltet werden)
auto_extractbooltrueAutomatisch Fakten über Personen aus Gesprächen lernen
auto_extract_categoriesstring[]["birthday", "preference", "interest", "work", "family", "important_date"]Faktenkategorien, die automatisch extrahiert werden können
restricted_categoriesstring[]["health", "finance", "political", "religious"]Kategorien, die niemals automatisch extrahiert werden
fact_retention_daysinteger180Tage, bevor unbestätigte automatisch extrahierte Fakten bereinigt werden
reconnect_reminder_daysinteger30Tage der Inaktivität, bevor eine Wiederverbindung vorgeschlagen wird

Beispielkonfiguration

config.toml
[provider]
kind = "google_genai"
api_key = "AIza..."

[provider.models]
primary = "gemini-3-flash-preview"
fast = "gemini-2.5-flash-lite"
smart = "gemini-3-pro-preview"

[telegram]
bot_token = "123456:ABC-DEF..."
allowed_user_ids = [123456789]

# Slack (requires --features slack)
# [slack]
# enabled = true
# app_token = "xapp-..."
# bot_token = "xoxb-..."
# allowed_user_ids = ["U123456789"]
# use_threads = true

[state]
db_path = "aidaemon.db"
working_memory_cap = 50
max_facts = 100

[terminal]
allowed_prefixes = ["ls", "cat", "head", "tail", "echo", "date", "whoami"]

[daemon]
health_port = 8080

[mcp.filesystem]
command = "npx"
args = ["-y", "@anthropic/mcp-filesystem"]

[browser]
enabled = true
headless = true

[skills]
dir = "skills"
enabled = true

[search]
backend = "duckduckgo"

[scheduler]
enabled = true

[[scheduler.tasks]]
name = "Morning check-in"
schedule = "weekdays at 9am"
prompt = "Check system health and summarize any overnight alerts"
trusted = true

[files]
enabled = true
inbox_dir = "~/.aidaemon/files/inbox"
outbox_dirs = ["~"]

# Discord (requires --features discord)
# [discord]
# bot_token = "MTIz..."
# allowed_user_ids = [123456789012345678]

# Health monitoring
[health]
enabled = true

[[health.probes]]
name = "API Server"
probe_type = "http"
target = "https://api.example.com/health"
schedule = "every 5m"

# People intelligence (opt-in, can also enable via chat)
# [people]
# enabled = true

# Self-updater
[updates]
mode = "check_only"