Inbound triage bots
Subscribe to a tenant’s email channel, classify with an LLM, drop a
record into their ERP, ack the sender — all from one on_inbound
handler.
Inbound triage bots
Subscribe to a tenant’s email channel, classify with an LLM, drop a
record into their ERP, ack the sender — all from one on_inbound
handler.
Cron-driven assistants
Run a daily 07:30 prep digest, a weekly summary, an hourly poll — declarative cron in the manifest, one handler per schedule.
Tool extensions for the agent
Expose a custom tool the tenant’s chat agent can call. Your code runs in a per-tenant container, secrets stay in the platform vault.
Per-tenant integrations
Pull from the tenant’s connected services (M365, Odoo, Slack…) via
ctx.tools.call(...) — scope checks, audit logs, and rate limits
are handled for you.
Your code Linkworld platform ───────── ────────────────── linkworld.app.yaml ─────► Manifest v2 (validated) app.tool('classify') Tenant agent's tool registry app.onInbound(...) Inbound channel events app.onSchedule('daily', …) Cron dispatcher (1-min precision)
ctx.tools.call('email_send', {...}) ──► /api/mcp/app-tools ctx.secrets.get('OPENAI_KEY') ──► /api/mcp/app-secretsYour app runs in a per-(tenant, app, version) container that wakes on demand and sleeps after 15 minutes idle. The SDK handles the HTTP shape; you write handlers.
# Pythonpip install linkworldlinkworld init my-app --lang pythoncd my-app && pip install -r requirements.txtLINKWORLD_LOCAL=1 python main.py# TypeScriptnpm install -g @linkworld/clilinkworld init my-app --lang typescriptcd my-app && npm installnpm run devBoth share the same manifest schema, the same handler signatures, and
the same ctx.tools / ctx.secrets API. Cross-SDK CI tests assert
they stay in lockstep.
The Open App Platform is in alpha (Phase 2). The wire format is stable and the security review has shipped — partner apps in production work today. We’re still iterating on developer tooling and may break 0.x APIs until the first external partner ships.