Skip to content

For developers

You’re building an app that runs inside someone else’s Linkworld tenant — a per-tenant container that wakes on demand, exposes tools to the tenant’s agents, and talks to other apps via grants and wires.

Pick a starting point:

  • Quickstart — scaffold, run locally, deploy to the platform. Five minutes.
  • Concepts — the mental model: manifest, scopes, lifecycle, trust boundaries.
  • Install the CLIpip install linkworld, verify, configure.

One CLI scaffolds both — it ships on PyPI and writes a Python or a TypeScript app depending on the flag.

Terminal window
pip install linkworld
linkworld init my-app --lang python
linkworld init my-app --lang typescript

Same manifest schema, same handler signatures, same ctx API (ctx.tools, ctx.secrets, ctx.team, ctx.apps, ctx.events, ctx.rooms, ctx.commitments, ctx.kv). Cross-SDK CI tests assert they stay in lockstep.

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.

Multi-agent collaborations — Ship a multi-department app — CMO + Researcher + Replier — that delegates internally and meets humans in group rooms.

Cross-app workflows — Marketing emits lead_qualified, Sales subscribes — bilateral grants + pub/sub wires you wire up in the workspace UI.

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-secrets
ctx.team.delegate('researcher', ...) ──► /api/mcp/agent-invoke (intra-app)
ctx.apps.invoke('sales', 'bdr', ...) ──► /api/mcp/cross-app-invoke
ctx.events.emit('lead_qualified', ...) ──► /api/mcp/events-emit
ctx.rooms.post(room_id, ...) ──► /api/mcp/rooms-post
ctx.commitments.add(...) ──► /api/mcp/commitments-add

Your 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.

Eight complete apps — manifests, handlers, in-app UI, eval suites — are in the example apps repository. Start with tax-classifier-py for the smallest complete app, or office-assistant to see every surface at once.

The Open App Platform is in alpha. The wire format is stable and the cross-app collaboration stack is live in production, but 0.x SDK APIs may break until the first external partner ships. Pin your SDK version and watch the release history.