instruction
The user-visible task. This is the primary prompt or command to send to the remote agent.
AgentVM is provisioned outside the iOS app. Create and operate the VM from your trusted provisioning environment, expose a protected HTTPS or WSS runtime endpoint from that running instance, then save the endpoint and bearer token in Walton.
Provisioning and runtime access are separate. AgentVM creates and operates the cloud VM from a server, workstation, CI job, or other trusted provisioning environment. Walton for iOS is only a remote client: it connects to an endpoint on an AgentVM instance that already exists.
Runs the AgentVM CLI or provisioning service.
Creates and operates the desktop or server VM.
Runs the agent and Walton-facing service.
Connects to the running VM over HTTPS or WSS.
Provision and operate AgentVM from a trusted environment that is allowed to create cloud infrastructure. That can be a workstation, server, CI system, or provisioning backend. Do not embed cloud-provider credentials or AgentVM provisioning credentials in the Walton iOS app.
The provisioning and provider control plane stays separate from Walton. The iOS app only needs the narrow runtime endpoint used to submit agent work and receive results.
https://your-agent.example.com/walton/agent.The test sends a proposal-only request asking the server for a short readiness message. A successful endpoint returns HTTP 2xx with JSON containing a non-empty text field.
Your adapter should accept the fields below. Some Walton surfaces send only the core fields; richer workflows can also include event context, a requested integration, an expected outcome, commerce approval state, and capability names.
{
"mode": "plan",
"action": "connection_test",
"instruction": "Return a short readiness message.",
"contextBeforeCursor": "",
"contextAfterCursor": "",
"executionPolicy": "proposal_only",
"source": "ios_agent_settings_test",
"eventContext": null,
"requestedIntegration": null,
"requestedOutcome": null,
"commerceApproval": null,
"capabilities": []
}
The user-visible task. This is the primary prompt or command to send to the remote agent.
Workspace context from Walton. Treat it as untrusted user content, not system instructions for your gateway.
proposal_only means return a plan or result without external side effects. Execute only when the request explicitly carries Walton's approved execution value.
Identify the Walton surface and optional features available for the request. Use these for routing and policy, not authentication.
{
"text": "AgentVM is ready."
}
Walton also accepts optional requestId and actions. Actions can describe an HTTPS destination, an integration, an approval instruction, a merchant or estimated total, or a device action such as a calendar event. Keep side effects on the server behind explicit approval, and let Walton confirm device-local work.
REST is the recommended transport. Walton sends the request object directly as the POST body and, when a token is configured, sends it as an Authorization bearer token.
curl -X POST 'https://your-agent.example.com/walton/agent' \
-H 'Authorization: Bearer YOUR_LONG_RANDOM_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"mode":"plan","action":"connection_test","instruction":"Return a short readiness message.","contextBeforeCursor":"","contextAfterCursor":"","executionPolicy":"proposal_only","source":"ios_agent_settings_test"}'
Return Content-Type: application/json and a 2xx status. For errors, return an appropriate HTTP status and a short detail, message, or error string.
For RPC mode, Walton wraps the same request under params and calls the fixed method walton.execute.
{
"jsonrpc": "2.0",
"id": "request-id",
"method": "walton.execute",
"params": {
"mode": "plan",
"action": "connection_test",
"instruction": "Return a short readiness message.",
"contextBeforeCursor": "",
"contextAfterCursor": "",
"executionPolicy": "proposal_only",
"source": "ios_agent_settings_test"
}
}
Return the Walton response under JSON-RPC result. Return standard JSON-RPC errors under error.code and error.message.
Walton opens the configured ws:// or wss:// URL, includes bearer authorization when configured, sends one Walton request as a JSON text message, and waits for one JSON response.
wss:// when the connection leaves a trusted private network. A public unencrypted WebSocket endpoint should not carry an agent token.The adapter is intentionally small. It is a runtime bridge, not a VM provisioner. Walton's app-side protocol is already implemented; the server only needs to translate it into the agent/runtime interface available on the AgentVM instance.
instruction plus any workspace context you choose to expose.executionPolicy. For proposal_only, disable external mutations and return a preview or plan. Only execute_approved authorizes the remote execution path.{"text":"..."}.actions instead of immediately performing a device-local action.Run the adapter after provisioning, preferably inside the AgentVM instance or on a trusted gateway that can reach it. Do not expose the AgentVM provisioning/control plane directly to Walton. The phone should receive only the narrow runtime endpoint required to submit agent work and receive results.
proposal_only server-side; do not rely on prompt wording to prevent side effects./walton/agent automatically.Once saved, the same selected Agent server can power Agent chat, the command console, and the workspace terminal.
Confirm the bearer token in Walton exactly matches the token expected by the gateway. Check for a proxy that strips the Authorization header.
Walton uses the exact URL you enter. Include the adapter path, such as /walton/agent, in the saved endpoint.
Return JSON with a top-level non-empty text string. In RPC mode, put that object under result.
Check that the hostname resolves publicly or over the same private VPN used by the phone, the certificate chain is valid, and the firewall allows the phone's network path.
Walton's interactive remote calls use finite client timeouts. For long-running work, have your adapter return a short accepted/status response and move durable jobs to a session or task model instead of holding one request open indefinitely.