UrslyDevelopersBack to experienceExperience

Ursly SDK · 4 maintained · any language by prompt

Your language.
One prompt.

Pick a language and hand the prompt to your coding agent. It installs, verifies and wires the SDK, then shows you a live 200.

Liveawait client.capabilities()GET /api/v1/capabilities

Waiting for the first live response.

// The response payload appears here.

Node 22+ · browsersMaintained SDK

Download, verify, install and call it once.

Add the Ursly TypeScript SDK to this project.
1. Read https://ursly.io/downloads/manifest.json and find the "sdk-typescript" file (an npm .tgz package). If none is listed, stop and tell me the TypeScript package is not published yet.
2. Download it from https://ursly.io followed by its path. Compute its SHA-256; if it differs from the manifest, delete the file and stop.
3. Install that local file with this project's package manager (for npm: npm install ./<file>.tgz) so the exact version is recorded in the lockfile.
4. Create a client with base URL https://ursly.io, call await client.capabilities() and show me the 200 response.
Keep the defaults: no automatic retries, no redirects, no logging of request bodies, and never send health or personal data.
Paste it into your coding agent. That is the whole install.

What every SDK does

Input in. Intent out. You decide.

  1. InputA transcript or gesture your app already has
  2. ResolveYour rules, matched by the API
  3. 200Intents in the payload. Nothing executed
  4. Your handlerOnly actions you registered run
Under the hoodFor your agent, not for you.

The code and the error catalogue are here for your agent. You don't need them: the prompts already ask for the safe defaults.

TypeScript

import { UrslyClient } from "@ursly/sdk";
const client = new UrslyClient({ baseUrl: "https://ursly.io" });
client.registerHandler("navigation.open", ({ target }) => router.push(target));
await client.resolveAndDispatch(rule);

TypeScript manual ↓

Python

from ursly import UrslyClient
client = UrslyClient(base_url="https://ursly.io")
client.register_handler("navigation.open", lambda action, intent: router.push(action["target"]))
client.resolve_and_dispatch(rule)

Python manual ↓

Go

client, err := ursly.New("https://ursly.io")
client.RegisterHandler("navigation.open", openRoute)
result, err := client.ResolveAndDispatch(ctx, rule)

Go manual ↓

Rust

let client = ursly::Client::new("https://ursly.io")?;
client.register_handler(ActionType::NavigationOpen, open_route);
let outcome = client.resolve_and_dispatch(&rule)?;

Rust manual ↓

Every SDK distinguishes API rejection (HTTP status and server code), timeout, cancellation, transport or invalid response, missing handler and handler failure. Responses are validated before any handler runs; no SDK retries, follows redirects or executes an action on its own.