Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
5deaa5a
refactor(platform,cli): uniform org-first config layout
larryro May 27, 2026
bddf863
fix(platform,cli,rag,crawler): error-reporting chain + org-aware RAG/…
larryro May 27, 2026
2d421ec
fix(crawler,platform,rag,cli): close P0 gaps from org-aware review
larryro May 28, 2026
b2db316
fix(platform,cli,crawler,rag,docs): close P0/P1 gaps from second-roun…
larryro May 28, 2026
68bffa6
docs(docs): remove version-specific org-first migration runbook
larryro May 28, 2026
14f8001
chore(platform,cli): drop unused exports flagged by knip
larryro May 28, 2026
7cb91db
feat(rag,platform): enforce per-tenant org_slug at the RAG data layer
larryro May 28, 2026
ee5a6d1
fix(cli): inline migrate-config-layout script so it survives bun --co…
larryro May 28, 2026
4ac82a3
fix(cli): stop admin-key leaking via reseed stdout + drop dead JSON p…
larryro May 28, 2026
2fb41df
fix(platform): auth + per-org filter on /events/file SSE
larryro May 28, 2026
6e7cc68
fix(platform): close cross-tenant gaps on workflow + websites actions
larryro May 28, 2026
97917fd
fix(platform): workflow + transcription correctness fixes
larryro May 28, 2026
20aec34
fix(platform,cli): auth + scaffold + deploy data-safety fixes
larryro May 28, 2026
48fc1ce
fix(rag,crawler): lifecycle + LRU + dim contract hardening
larryro May 28, 2026
956d633
fix(platform,rag,crawler,docs): polish + lightweight correctness fixes
larryro May 28, 2026
d0878b8
build(crawler,rag): bump uv HTTP timeout to 300s for large wheels
larryro May 28, 2026
b2e840a
fix(platform): close cross-tenant writes in agents knowledge mutations
larryro May 28, 2026
77ae1bd
fix(platform): close P1 cross-org gaps in governance, SSE, and history
larryro May 28, 2026
f74b1b8
fix(crawler): close P1 cross-tenant race + scan_interval contract drift
larryro May 28, 2026
bf9ad85
fix(platform): align org-slug length cap across TS / Convex / UI
larryro May 28, 2026
a38244a
fix(cli): migrate-config-layout now also reorganizes host project layout
larryro May 28, 2026
025fde8
fix(cli): admin-key redactor leaks pipe-delimited Convex payload
larryro May 28, 2026
38c47cf
fix(platform): p2 hardening — auth, http, lib, cascade, errors
larryro May 28, 2026
7722068
fix(platform): p2 hardening — file_metadata, branding, documents
larryro May 28, 2026
5070ea4
fix(platform): p2 hardening — agent_tools rag and web error paths
larryro May 28, 2026
3968fd7
fix(platform): p2 hardening — websites and workflow document action
larryro May 28, 2026
5251320
fix(platform): p2 hardening — governance, scaffold, integration consi…
larryro May 28, 2026
a941604
fix(platform): p2 hardening — server URL parsing, config-watcher, doc…
larryro May 28, 2026
2307493
fix(rag): p2 hardening — dead code, fullmatch, dim-pin cache, shutdown
larryro May 28, 2026
25a68dc
fix(crawler): p2 hardening — indexing, vision, lifespan
larryro May 28, 2026
0b6f38a
fix(cli,convex): p2 hardening — migrate, deploy, entrypoint, volume s…
larryro May 28, 2026
8ee1851
fix(rag,crawler,platform): satisfy check — lint + test fixups for the…
larryro May 28, 2026
62b1876
fix(platform): round-3 — close cross-tenant gaps in workflows, doc ge…
larryro May 29, 2026
569dceb
refactor(platform): round-3 — typed orgSlugUnresolvable + RAG strip c…
larryro May 29, 2026
d2d74a6
fix(platform): round-3 — migrate orgSlugFromId callers + upload-then-…
larryro May 29, 2026
283ff91
fix(platform): round-3 — websites REST/action alignment + sync deboun…
larryro May 29, 2026
257fd75
fix(platform): round-3 — agent file_actions logs, SSE rate-limit, sca…
larryro May 29, 2026
2b5b0e9
feat(cli): round-3 — auto-detect + interactive legacy-layout migration
larryro May 29, 2026
217b1d5
fix(convex): round-3 — surface migration cp errors, snapshot before f…
larryro May 29, 2026
76c612e
fix(rag,crawler): round-3 — shutdown reset, fullmatch, vision drain +…
larryro May 29, 2026
0d7541c
fix(cli): drop export on unused preflight interfaces (knip)
larryro May 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 6 additions & 2 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ services/platform/.env*.local
# Provider secrets
# ============================================================================
# *.secrets.json carries credentials in either form (SOPS-encrypted or
# plaintext). The convex image ships seeds from examples/providers/, but
# plaintext). The convex image ships seeds from examples/default/providers/, but
# the secrets siblings should never bake into a layer — the entrypoint
# already filters them at seed time, but exclude them from the build
# context entirely so they cannot leak via image inspection.
Expand Down Expand Up @@ -55,7 +55,7 @@ services/platform/.env*.local
# ============================================================================
# NOTE: keep tools/, examples/, and patches/ — Dockerfiles reference them:
# - platform image copies tools/cli/package.json and patches/
# - convex image copies examples/{agents,workflows,integrations,providers,branding}
# - convex image copies examples/default/{agents,workflows,integrations,providers,branding,skills}
tests/
designs/
scripts/
Expand All @@ -69,6 +69,10 @@ knip-results.json
docs/
!docs/package.json
README.md
# Skill bundles ship their SKILL.md alongside the scripts; without
# this carve-out the convex image's COPY of examples/default/ would
# drop every skill's README and break runtime skill discovery.
!examples/**/*.md

# ============================================================================
# IDE and Editor Files
Expand Down
2 changes: 1 addition & 1 deletion README.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ tale cleanup # Inaktive Container entfernen
tale reset --force # Alle Container entfernen
```

In der [CLI-Referenz](tools/cli/README.md) findest du alle Optionen und Flags. Anstehende Daten-Migrationen werden beim nächsten `tale start` oder `tale deploy` automatisch erkannt und angewendet.
In der [CLI-Referenz](tools/cli/README.md) findest du alle Optionen und Flags. Das Aktualisieren einer bestehenden Installation erfordert eine einmalige manuelle Migration: führe `tale migrate config-layout` aus, danach `tale deploy --override-all -y`. Das vollständige Runbook findest du in [Self-hosted Upgrades](docs/de/self-hosted/operate/upgrades.md).

## In Produktion deployen

Expand Down
2 changes: 1 addition & 1 deletion README.fr.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ tale cleanup # Supprimer les conteneurs inactifs
tale reset --force # Supprimer tous les conteneurs
```

Voir la [référence du CLI](tools/cli/README.md) pour toutes les options et flags. Les migrations de données en attente sont détectées et appliquées automatiquement au prochain `tale start` ou `tale deploy`.
Voir la [référence du CLI](tools/cli/README.md) pour toutes les options et flags. Mettre à jour un déploiement existant nécessite une migration manuelle unique : exécute `tale migrate config-layout` puis `tale deploy --override-all -y`. Le runbook complet se trouve dans [Mises à niveau auto-hébergées](docs/fr/self-hosted/operate/upgrades.md).

## Déployer en production

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ tale cleanup # Remove inactive containers
tale reset --force # Remove all containers
```

See the [CLI reference](tools/cli/README.md) for all options and flags. Pending data migrations are detected and applied automatically on the next `tale start` or `tale deploy`.
See the [CLI reference](tools/cli/README.md) for all options and flags. Upgrading an existing deployment requires a one-time manual migration: run `tale migrate config-layout` then `tale deploy --override-all -y`. See [Self-hosted upgrades](docs/en/self-hosted/operate/upgrades.md) for the full runbook.

## Deploy to production

Expand Down
9 changes: 5 additions & 4 deletions compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -688,10 +688,11 @@ volumes:
rag-data:
driver: local

# Persistent storage for all platform data (Convex DB, agents, workflows, integrations)
# LEGACY: once `tale migrate split-convex` has run, data lives in convex-data.
# This volume is preserved in case users need to rollback; safe to remove
# manually after a successful Phase 2 upgrade.
# LEGACY (pre-0.3.0): platform data used to live here before the
# split-convex transition. Today everything lives in `convex-data`; the
# volume is retained as an unused stub so detect() in start.ts can
# identify pre-0.3.0 deployments and produce a coherent diff. Operators
# can delete it by hand once they're past the upgrade window.
platform-data:
driver: local

Expand Down
2 changes: 1 addition & 1 deletion docs/de/develop/integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ Die Operation taucht auf Agents als Tool-Familie auf, sobald die Org Credentials
| MCP-Server | Die Brücke muss ein langlebiger Prozess sein — lokale Dateien, eine eigene CLI, ein System, das aus dem Netz von Tale unerreichbar ist. |
| Connector-TS | Das REST-Manifest deckt 80 % der API ab, aber eine Operation braucht Response-Formung, die das Manifest nicht deklarieren kann. |

Die ausgelieferten Integrations unter [Platform > Integrations](/de/platform/integrations/overview) sind der Katalog der REST-Manifeste, die Tale ausliefert — lies ihre Configs in `examples/integrations/` für die Muster, die du kopierst.
Die ausgelieferten Integrations unter [Platform > Integrations](/de/platform/integrations/overview) sind der Katalog der REST-Manifeste, die Tale ausliefert — lies ihre Configs in `examples/default/integrations/` für die Muster, die du kopierst.

## SQL-Adapter

Expand Down
4 changes: 2 additions & 2 deletions docs/de/platform/integrations/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: Drittsysteme, aus denen Tale liest und in die es schreibt — Kommu

Integrationen sind die Brücken zwischen Tale und dem Rest deines Stacks. Agents rufen sie als Tools auf, Workflows triggern sie an Schritten, und die Dokumenten-Pipeline zieht Dateien aus ihnen. Jede Integration ist eine einzige JSON-Konfiguration plus eine Credential, die die Org einmal speichert; einmal verbunden, kann alles in Tale sie ohne erneute Authentifizierung nutzen. Diese Übersicht benennt die ausgelieferten Integrationen, gruppiert danach, was sie tun.

Die Form einer Integration ist über jeden Eintrag unten gleich — eine OpenAI-kompatible REST-Oberfläche oder ein OAuth2-Tanz, mit in einer JSON-Konfiguration unter `examples/integrations/` deklarierten Operationen. Benutzerdefinierte Integrationen folgen derselben Form; eine Code-Änderung brauchst du nicht, um eine hinzuzufügen.
Die Form einer Integration ist über jeden Eintrag unten gleich — eine OpenAI-kompatible REST-Oberfläche oder ein OAuth2-Tanz, mit in einer JSON-Konfiguration unter `examples/default/integrations/` deklarierten Operationen. Benutzerdefinierte Integrationen folgen derselben Form; eine Code-Änderung brauchst du nicht, um eine hinzuzufügen.

## Wie Integrationen sich von MCP unterscheiden

Expand Down Expand Up @@ -65,7 +65,7 @@ Microsoft 365 deckt auch Identität ab. Sie unter **Einstellungen > Integratione

## Eine eigene Integration hinzufügen

Eigene Integrationen folgen derselben JSON-Form wie die oben. Leg eine Konfiguration in `TALE_CONFIG_DIR/integrations/<slug>/config.json` ab, die die Operationen, die Auth-Methode und die erlaubten Hosts deklariert; die Integration erscheint in **Einstellungen > Integrationen**, damit User sie verbinden können. Die Form und die Validierungsregeln leben neben den ausgelieferten Konfigurationen in `examples/integrations/`.
Eigene Integrationen folgen derselben JSON-Form wie die oben. Leg eine Konfiguration in `TALE_CONFIG_DIR/<orgSlug>/integrations/<slug>/config.json` ab, die die Operationen, die Auth-Methode und die erlaubten Hosts deklariert; unter dem org-first Layout ist jeder `integrations/`-Unterbaum der Org unabhängig. Die Integration erscheint in **Einstellungen > Integrationen**, damit User sie verbinden können. Die Form und die Validierungsregeln leben neben den ausgelieferten Konfigurationen in `examples/default/integrations/`.

Für reichere oder selbst gehostete Brücken sind [MCP-Server](/de/platform/integrations/mcp-servers) die alternative Oberfläche — jeder MCP-Server, den du registrierst, fügt seine Tools dem Agent-Werkzeuggürtel hinzu mit pro-Tool-Genehmigung.

Expand Down
10 changes: 5 additions & 5 deletions docs/de/platform/models.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ title: Modelle out of the box
description: Welche Provider und Modelle eine frische Tale-Instanz mitbringt — OpenRouter für Chat und Vision, OpenAI für Sprache, Vercel AI Gateway für Bildgenerierung.
---

Eine frische Tale-Instanz bringt drei konfigurierte Provider mit: OpenRouter für Chat, Vision und Embeddings; OpenAI für Speech-to-Text und Text-to-Speech; Vercel AI Gateway für Bildgenerierung. Die Default-Agents in `examples/agents/` greifen auf Modelle in einem dieser drei Buckets zu, und die meisten Teams bleiben wochenlang bei den Defaults, bevor sie etwas tauschen. Diese Seite listet, was ausgeliefert wird, und verlinkt auf den vollen Katalog jedes Providers.
Eine frische Tale-Instanz bringt drei konfigurierte Provider mit: OpenRouter für Chat, Vision und Embeddings; OpenAI für Speech-to-Text und Text-to-Speech; Vercel AI Gateway für Bildgenerierung. Die Default-Agents in `examples/default/agents/` greifen auf Modelle in einem dieser drei Buckets zu, und die meisten Teams bleiben wochenlang bei den Defaults, bevor sie etwas tauschen. Diese Seite listet, was ausgeliefert wird, und verlinkt auf den vollen Katalog jedes Providers.

Modelle driften schneller als Docs. Die Listen unten stimmen zum Zeitpunkt, an dem `examples/providers/*.json` geschrieben wurde; die kanonische Wahrheit sind die JSON-Dateien, und das kanonische „was heute erreichbar ist" zeigt die Seite **Einstellungen > Provider** auf deiner Instanz.
Modelle driften schneller als Docs. Die Listen unten stimmen zum Zeitpunkt, an dem `examples/default/providers/*.json` geschrieben wurde; die kanonische Wahrheit sind die JSON-Dateien, und das kanonische „was heute erreichbar ist" zeigt die Seite **Einstellungen > Provider** auf deiner Instanz.

## Die drei Provider

Expand All @@ -15,7 +15,7 @@ Modelle driften schneller als Docs. Die Listen unten stimmen zum Zeitpunkt, an d
| **OpenAI** | Speech-to-Text, Text-to-Speech | Whisper ist die praktische Baseline für Transkription; gpt-4o-mini-tts ist das billigste verlässliche TTS | [platform.openai.com/docs/models](https://platform.openai.com/docs/models) |
| **Vercel AI Gateway** | Bildgenerierung | Ein OpenAI-kompatibler Endpunkt deckt FLUX, Imagen und Nano Banana ab, ohne pro-Anbieter-Keys | [vercel.com/docs/ai-gateway/models](https://vercel.com/docs/ai-gateway/models) |

Jeder Provider oben ist ein OpenAI-kompatibler Endpunkt, den Tale per HTTPS mit Bearer-Token aufruft. Du kannst jeden durch einen anderen Provider ersetzen (auch einen lokalen Ollama- oder vLLM-Server), indem du die passende JSON unter `TALE_CONFIG_DIR/providers/` deiner Instanz bearbeitest.
Jeder Provider oben ist ein OpenAI-kompatibler Endpunkt, den Tale per HTTPS mit Bearer-Token aufruft. Du kannst jeden durch einen anderen Provider ersetzen (auch einen lokalen Ollama- oder vLLM-Server), indem du die passende JSON unter `TALE_CONFIG_DIR/<orgSlug>/providers/` deiner Instanz bearbeitest — unter dem org-first Layout sind Provider-Kataloge pro Org (jede Org hat ihren eigenen `providers/`-Unterbaum).

## OpenRouter — Chat, Vision, Embeddings

Expand All @@ -35,7 +35,7 @@ OpenRouter ist ein Multi-Modell-Gateway. Die ausgelieferte Konfiguration wählt
- **Meta** — LLaMA 4 Maverick, LLaMA 4 Scout.
- **Black Forest Labs** — FLUX.2 [max], FLUX.2 [pro], FLUX.2 [flex].

Der volle und aktuelle Katalog lebt auf [openrouter.ai/models](https://openrouter.ai/models). Jedes Modell, das OpenRouter exponiert, kannst du auf deiner Instanz hinzufügen, indem du das `models`-Array in `providers/openrouter.json` unter `TALE_CONFIG_DIR` bearbeitest.
Der volle und aktuelle Katalog lebt auf [openrouter.ai/models](https://openrouter.ai/models). Jedes Modell, das OpenRouter exponiert, kannst du auf deiner Instanz hinzufügen, indem du das `models`-Array in `<orgSlug>/providers/openrouter.json` unter `TALE_CONFIG_DIR` bearbeitest (pro Org unter dem org-first Layout).

## OpenAI — Speech-to-Text und Text-to-Speech

Expand All @@ -57,7 +57,7 @@ Der breitere Katalog liegt auf [vercel.com/docs/ai-gateway/models](https://verce

## Provider tauschen oder hinzufügen

Die drei oben genannten Provider sind Defaults, keine Vorgaben. Ersetz jeden durch einen anderen OpenAI-kompatiblen Endpunkt, indem du die JSON in `TALE_CONFIG_DIR/providers/` bearbeitest — richt sie auf deine eigene API, ändere das `models`-Array, und Tale lädt beim nächsten Start neu. Eine lokale Ollama-Instanz, ein privater vLLM-Cluster oder ein Bedrock-Proxy passen alle in dieselbe Form. Die Mechanik lebt unter [Konfiguration → Provider](/de/self-hosted/configuration/providers); das Admin-UI-Formular für dieselbe Konfiguration liegt auf [Provider](/de/platform/admin/providers).
Die drei oben genannten Provider sind Defaults, keine Vorgaben. Ersetz jeden durch einen anderen OpenAI-kompatiblen Endpunkt, indem du die JSON in `TALE_CONFIG_DIR/<orgSlug>/providers/` bearbeitest — richt sie auf deine eigene API, ändere das `models`-Array, und Tale lädt beim nächsten Start neu. Eine lokale Ollama-Instanz, ein privater vLLM-Cluster oder ein Bedrock-Proxy passen alle in dieselbe Form. Die Mechanik lebt unter [Konfiguration → Provider](/de/self-hosted/configuration/providers); das Admin-UI-Formular für dieselbe Konfiguration liegt auf [Provider](/de/platform/admin/providers).

## Wo das hineinpasst

Expand Down
2 changes: 1 addition & 1 deletion docs/de/self-hosted/configuration/providers.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Die Referenz ist das Dateiformat auf Platte und die Reihenfolge der Operationen,
}
```

Die vollständige Menge der Felder lebt in [`examples/providers/`](https://github.com/tale-project/tale/tree/main/examples/providers) — `openai.json`, `openrouter.json` und `vercel-gateway.json` decken die drei Formen ab, die du wahrscheinlich brauchst.
Die vollständige Menge der Felder lebt in [`examples/default/providers/`](https://github.com/tale-project/tale/tree/main/examples/default/providers) — `openai.json`, `openrouter.json` und `vercel-gateway.json` decken die drei Formen ab, die du wahrscheinlich brauchst.

## Die Secrets-Datei

Expand Down
2 changes: 1 addition & 1 deletion docs/de/self-hosted/configuration/retention.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Die mitgelieferten Defaults sind locker; zieh sie an, je nach deiner Compliance-

## Wo du Grenzen setzt

Die Grenzen leben in der Operator-Config-Datei, nicht in Env-Vars. Editiere `governance/retention-bounds.json` unter `TALE_CONFIG_DIR` (default `/app/data/platform-config/` im Plattform-Container):
Unter dem Org-first-Layout sind Retention-Grenzen **pro Org**: editiere `retention.json` direkt im Unterbaum einer Org unter `TALE_CONFIG_DIR` (default `/app/data/` im Plattform-Container, also liegt die Datei unter `/app/data/<org>/retention.json`, z. B. `/app/data/default/retention.json`). Jede Org hat ihre eigene Datei; die `default`-Datei ist die Vorlage, die eine neue Installation beim ersten Start aufgreift.

```json
{
Expand Down
4 changes: 2 additions & 2 deletions docs/de/self-hosted/operate/upgrades.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Zwei Dinge sind es wert, zuerst zu bestätigen:

## Die zwei Kommandos

`tale upgrade` aktualisiert das CLI-Binary selbst. Die deployte Plattform-Version stimmt mit der Version des CLI überein — diese Kopplung ist Absicht, damit das CLI, das du läufst, nicht eine Version deployen kann, die es nicht kennt.
`tale upgrade` aktualisiert das CLI-Binary selbst. Die deployte Plattform-Version stimmt mit der Version des CLI überein — diese Kopplung ist Absicht, damit das CLI, das du ausführst, nicht eine Version deployen kann, die es nicht kennt.

```bash
# Bewege das CLI auf das letzte Release
Expand Down Expand Up @@ -79,4 +79,4 @@ Minor-Versionen zu überspringen (von 0.9 auf 0.11 zu gehen) ist unterstützt, s

## Wo das hingehört

Der Upgrade-Flow knüpft jede andere Operate-Seite an — Backups sind das, was ein gescheitertes Upgrade wiederherstellbar macht, Observability ist das, was dir sagt, dass die neue Farbe healthy ist, Hardening ist das, was du nach einer Major-Version neu walkst. Setzt du das CLI zum ersten Mal auf, deckt [Tale-CLI installieren](/de/self-hosted/install/cli-install) das workstationseitige Setup ab; nimmst du den Pager mitten im Rollout auf, nennt [Troubleshooting](/de/self-hosted/operate/observability/troubleshooting) die Symptome.
Der Upgrade-Flow knüpft jede andere Operate-Seite an — Backups sind das, was ein gescheitertes Upgrade wiederherstellbar macht, Observability ist das, was dir sagt, dass die neue Farbe healthy ist, Hardening ist das, was du nach einer Major-Version neu durchgehst. Setzt du das CLI zum ersten Mal auf, deckt [Tale-CLI installieren](/de/self-hosted/install/cli-install) das workstationseitige Setup ab; nimmst du den Pager mitten im Rollout auf, nennt [Troubleshooting](/de/self-hosted/operate/observability/troubleshooting) die Symptome.
2 changes: 1 addition & 1 deletion docs/en/develop/integrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ The operation surfaces on agents as a tool family the moment the org connects cr
| MCP server | The bridge needs to be a long-lived process — local files, a CLI you own, a system that cannot be reached from Tale's network. |
| Connector TS | The REST manifest covers 80 % of the API but one operation needs response shaping the manifest cannot declare. |

The shipped integrations under [Platform > Integrations](/platform/integrations/overview) are the catalogue of REST manifests Tale ships — read their configs in `examples/integrations/` for the patterns you will copy.
The shipped integrations under [Platform > Integrations](/platform/integrations/overview) are the catalogue of REST manifests Tale ships — read their configs in `examples/default/integrations/` for the patterns you will copy.

## SQL adapters

Expand Down
4 changes: 2 additions & 2 deletions docs/en/platform/integrations/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: Third-party systems Tale can read from and write to — communicati

Integrations are the bridges between Tale and the rest of your stack. Agents call them as tools, workflows trigger them at steps, and the documents pipeline pulls files from them. Each integration is a single JSON config plus a credential the org stores once; once connected, anything in Tale can use it without re-authentication. This overview names the shipped integrations grouped by what they do.

The shape of an integration is the same across every entry below — an OpenAI-compatible REST surface or an OAuth2 dance, with operations declared in a JSON config under `examples/integrations/`. Custom integrations follow the same shape; you do not need a code change to add one.
The shape of an integration is the same across every entry below — an OpenAI-compatible REST surface or an OAuth2 dance, with operations declared in a JSON config under `examples/default/integrations/`. Custom integrations follow the same shape; you do not need a code change to add one.

## How integrations differ from MCP

Expand Down Expand Up @@ -65,7 +65,7 @@ Microsoft 365 also covers identity. Connecting it under **Settings > Integration

## Adding a custom integration

Custom integrations follow the same JSON shape as the ones above. Drop a config into `TALE_CONFIG_DIR/integrations/<slug>/config.json` declaring the operations, auth method, and allowed hosts; the integration appears in **Settings > Integrations** for users to connect. The shape and validation rules live alongside the shipped configs in `examples/integrations/`.
Custom integrations follow the same JSON shape as the ones above. Drop a config into `TALE_CONFIG_DIR/<orgSlug>/integrations/<slug>/config.json` declaring the operations, auth method, and allowed hosts; under the org-first layout each org's `integrations/` subtree is independent. The integration appears in **Settings > Integrations** for users to connect. The shape and validation rules live alongside the shipped configs in `examples/default/integrations/`.

For richer or self-hosted bridges, [MCP servers](/platform/integrations/mcp-servers) are the alternative surface — every MCP server you register adds its tools to the agent toolbelt with per-tool approval.

Expand Down
Loading
Loading