custom_quote_from_positionsUser diktiert Positionen → Angebot
Open App Platform · Phase 2 alpha
Schreib Code in Python oder TypeScript, wir hosten ihn pro Tenant, isoliert, mit Audit-Log und Kosten-Attribution. Der Rest des Linkworld-Stacks — Mail, Kalender, ERP, Reports — steht dir als ctx.tools.call(...) zur Verfügung.
pip install linkworldlinkworld init my-app --lang typescript --github-owner youLiefert dir Manifest, Handler-Skelett, Dockerfile und GitHub-Actions-CI.
cd my-app
npm install
npm run devMock-Backends für ctx.tools und ctx.secrets kommen direkt mit. Kein Cloud-Account beim Coden nötig.
linkworld logingit tag v0.1.0 && git push --tagsCI baut das Image, pusht zu GHCR, registriert die Version. Sofort in der Dev-Console sichtbar.
Jeder Tenant kriegt einen eigenen Container deiner App-Version. Cross-Tenant-Lecks sind im DB-Layer ausgeschlossen. Sleep-on-idle nach 15min.
Zwei Tiers: Dev-Default (du seedst es einmal) und Tenant-Override (Tenant überschreibt). AES-256-GCM at rest, fail-closed bei Netzfehlern. Keine Anzeige nach Erstellung.
Jeder Tool-Call landet im Audit-Log. LLM-Tokens und Compute-Sekunden werden pro App pro Tenant in Grafana attribuiert. Bezahl nicht für Code, den du nicht geschrieben hast.
on_install, on_inbound (opt-in fan-out), on_schedule (cron-precision), on_user_added. Handler bleiben async und idempotent — der Rest ist Plattform-Job.
Manifest deklariert required_scopes (mail.send, files.read, ...). Tenant grantet beim Install. ToolCallError(scope_denied) ist die einzige Failure-Mode, die du selbst behandelst.
Versions, Logs, Errors, Usage-Charts (per App), Secrets-CRUD — alles unter /dev/* in Linkworld. GitHub-OAuth-Login, Token-Paste als Fallback für CI.
from linkworld_sdk import App
app = App.from_manifest("linkworld.app.yaml")
@app.on_inbound
async def on_inbound(ctx, env):
await ctx.tools.call(
"email_send",
to=env.from_,
body="Got it.",
)Python-Reference →import { App } from '@linkworld/sdk'
const app = App.fromManifest('linkworld.app.yaml')
app.onInbound(async (ctx, env) => {
await ctx.tools.call('email_send', {
to: env.from,
body: 'Got it.',
})
})
await app.run()TypeScript-Reference →Beide SDKs teilen sich Manifest-Schema und Handler-Vertrag. CI-Tests stellen sicher, dass kein Drift entsteht — was die eine SDK akzeptiert, akzeptiert die andere auch.
hello-world-tsTypeScriptMinimaler Einstieg — eine Tool, ein on_inbound, ein email_send-Reply.
tax-classifier-pyPythonTriagiert E-Mails in Steuerkategorien, schreibt Records in Odoo, antwortet dem Sender. Demonstriert ToolCallError(scope_denied) graceful handling.
meeting-prep-bot-tsTypeScriptWochentag-Cron 07:30 — pullt Kalender-Events, sucht Mails pro Attendee, schickt Prep-Digest. Zeigt schedule + ctx.secrets + multi-tool composition.
Deine App hier?
Open-Source-Beispiel vorschlagen →Anatomie einer Linkworld App
Eine App ist kein Chatbot. Sie ist eine Stack aus deklarativem Manifest, Signature-Workflows, skill-gegateten Tools und einer Channel-/ERP-Abstraktion — der Agent darüber führt aus.
Deklaration in einer Datei: was die App ist, welche Triggers/Intents sie kennt, welche Skills sie braucht. Daten, kein Code.
Signature-Flows als Daten — Tool-Sequenzen mit harten Regeln (z. B. „NIE Preis halluzinieren, IMMER zuerst lookup“). In den System-Prompt injiziert.
Intent-level Tools wie create_document, render_pdf, deliver_file. Skill-gegated — der Agent sieht nur Tools, für die der Tenant Credentials hat.
Abstrahiert WhatsApp/Web/Voice und internal/Odoo/Business Central/lexoffice. Workflows haben kein channel- oder ERP-spezifisches Verhalten.
Status-Übergänge (Draft → sent) sind explizite Tool-Calls, keine zentrale State-Machine. Der Orchestrator routet per Intent zum Specialist; der Specialist führt den Flow aus. Harte Regeln stehen im specifics-Feld jedes Workflows.
Beispiel
Ein konkretes Manifest aus der Plattform. Fünf Geschäftsprozesse, deklarativ. Keine Halluzination, kein Engine-Code — Tool-Choreographie mit klaren Regeln.
custom_quote_from_positionsUser diktiert Positionen → Angebot
photo_or_sketch_to_quoteFoto/Skizze → Schadens-Erkennung → Angebot
letter_or_protocolBriefe/Protokolle, rein Template-basiert
show_existing_documentBestehendes Dokument im aktuellen Channel zeigen
send_document_via_emailDokument an Email schicken — mit Approval-Gate
Phase-2-Alpha. Wir werfen 0.x-API-Anpassungen ein, bevor der erste externe Partner in Production geht — danach ist es stabil.