Hosted Runtime
Deploy a tool server to a sandboxed runtime that Convilyn operates — no infrastructure of your own to run. Pairs with rollback and logs for full lifecycle control.
The convilyn-author deploy --hosted, rollback, and logs CLI verbs target the Convilyn-Hosted Author Runtime.
If you prefer to run your own host (any HTTPS-reachable endpoint), use convilyn-author push --endpoint-url <url> instead — it's the BYO ("bring your own") path and stays unaffected by anything on this page.
Prerequisites
- Platform feature flag
AUTHOR_RUNTIME_ENABLED=trueon the target environment (platform-controlled; contact support if you get a 501). - A logged-in
convilyn-authorCLI:convilyn-author auth login. - A
server.pyexporting aToolServerinstance (see Tool Servers).
Quick deploy
convilyn-author deploy --hosted --region us-east-1Without --hosted, the command exits early with a pointer at push — deploy never silently means two different things.
Expected output:
Deploying to Convilyn-Hosted Runtime in us-east-1...
Runtime provisioned: art_3f1b9a2e (active)
Endpoint URL: https://abc123.lambda-url.us-east-1.on.aws/
Use 'convilyn-author logs <runtime_id>' to follow runtime logs,
'convilyn-author rollback <runtime_id>' to revert.What happens behind the scenes (each is owned by a stable backend contract — the SDK only consumes the result):
- The CLI calls
server.synth().to_dict()to build the manifest from yourToolServerdefinition. - The platform provisions a sandboxed runtime, registers it, and returns a 202 with
runtime_id,endpoint_url, andstatus. - The router URL (
endpoint_url) is now the public entry the Convilyn API forwards/mcptraffic to.
Options
| Flag | Default | Notes |
|---|---|---|
--hosted | off | Required — selects the platform-managed path |
--region <r> | us-east-1 | Region to deploy into; must be one the platform supports |
--server-file <path> | server.py | Path to the file that exports your ToolServer instance |
Response fields
The deploy response includes:
| Field | Type | Meaning |
|---|---|---|
runtime_id | str | Opaque platform ID (art_*). Use this on rollback / logs. |
endpoint_url | str | Public Function URL the Convilyn API proxies /mcp calls to. |
status | str | "active" on first deploy; "updating" while a redeploy lands. |
Inspecting logs
convilyn-author logs art_3f1b9a2e
convilyn-author logs art_3f1b9a2e --since 15m
convilyn-author logs art_3f1b9a2e --since 1h --limit 500The platform reads the runtime's logs and emits one line per entry:
[2026-05-28T09:14:22Z] INFO tool=analyze_text duration_ms=42
[2026-05-28T09:14:23Z] ERROR parse_document failed: encrypted PDF rejectedEmpty windows print a single notice (No log entries for art_3f1b9a2e in the requested window.) instead of an empty stream — so a quiet runtime is unambiguously different from a missing one.
Options
| Flag | Default | Notes |
|---|---|---|
--since <win> | none | Relative window (5m, 1h, 24h) or an ISO-8601 timestamp |
--limit <int> | 100 | Maximum log entries; the latest are returned first |
Rolling back
When a fresh deploy misbehaves:
convilyn-author rollback art_3f1b9a2eThe switch to the previously active image is atomic — there is no window in which the endpoint serves neither version. Subsequent rollbacks continue stepping back through retained versions (the platform retains the most recent 20 per author).
Expected output:
Rolling back art_3f1b9a2e...
Rollback complete: now-active version 3 (active)The traffic cutover is single-flip, not gradual — pair with logs immediately after to confirm the previous version is healthy on real traffic.
Manifest skeleton
The manifest is whatever server.synth().to_dict() produces; you do not edit it by hand. A typical server.py:
# server.py
from convilyn_author import ToolServer
server = ToolServer(
name="my-analyzer",
description="Document analysis tools",
version="0.1.0",
)
@server.tool(description="Analyze text length and word count")
async def analyze_text(text: str) -> dict:
return {"length": len(text), "words": len(text.split())}
if __name__ == "__main__":
server.run()The CLI imports this file, calls server.synth(), and includes the resulting image_uri field (resolved against the platform's per-author image registry) in the deploy payload.
Troubleshooting
| Symptom | Likely cause | Next step |
|---|---|---|
Error: hosted runtime not yet available on this platform (...) | AUTHOR_RUNTIME_ENABLED=false on the target environment | Confirm the feature flag with platform ops |
Error: deploy currently requires --hosted | You ran deploy without --hosted | Pass --hosted, or switch to convilyn-author push --endpoint-url ... for BYO |
Deploy succeeds but endpoint_url is unreachable for ~30s | Cold start plus DNS propagation on the new endpoint | Retry after 30s; if still failing, check logs <runtime_id> |
logs returns nothing immediately after deploy | Runtime has not received traffic yet | Trigger a workflow run through the Convilyn API; logs appear within a few seconds |
For anything you can't resolve with logs and rollback, contact support.
Related
- Tool Servers — what gets packaged into the deployed image
- Templates — start from a published starter instead of from scratch