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);Ursly SDK · 4 maintained · any language by 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.
await client.capabilities()GET /api/v1/capabilities// 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.
Compare versions, verify and replace.
Update the Ursly TypeScript SDK in this project. 1. Find the installed version in the @ursly/sdk entry in package.json and the lockfile and compare it with release.version in https://ursly.io/downloads/manifest.json. 2. If they match, tell me it is current and change nothing. 3. Otherwise download the new "sdk-typescript" file, verify its SHA-256 against the manifest and replace the old package the same way it was installed. 4. Run this project's tests, call await client.capabilities() against https://ursly.io and show me the 200 response. Summarize any SDK change that affects my code.
Register handlers and dispatch intents.
Wire Ursly actions into this TypeScript app.
1. Read https://ursly.io/developers/artifacts/reference.md for the action contract.
2. Register handlers only for actions this app already supports, for example navigation.open through my router or text.insert into my editor.
3. Take the transcript or gesture my code already receives, resolve it with my rules and dispatch the intents only through the registered handlers.
4. Add a test with an injected transport. Never execute an intent that has no handler, and never send health or personal data.Python 3.11+ · no dependenciesMaintained SDK
Download, verify, install and call it once.
Add the Ursly Python SDK to this project. 1. Read https://ursly.io/downloads/manifest.json and find the "sdk-python" file (prefer the .whl wheel). If none is listed, stop and tell me the Python 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 the wheel into this project's environment (python -m pip install ./<file>.whl, or the uv or Poetry equivalent) and pin the exact version. 4. Create a client with base URL https://ursly.io, call 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.
Compare versions, verify and replace.
Update the Ursly Python SDK in this project. 1. Find the installed version in python -m pip show ursly-sdk and compare it with release.version in https://ursly.io/downloads/manifest.json. 2. If they match, tell me it is current and change nothing. 3. Otherwise download the new "sdk-python" file, verify its SHA-256 against the manifest and replace the old package the same way it was installed. 4. Run this project's tests, call client.capabilities() against https://ursly.io and show me the 200 response. Summarize any SDK change that affects my code.
Register handlers and dispatch intents.
Wire Ursly actions into this Python app.
1. Read https://ursly.io/developers/artifacts/reference.md for the action contract.
2. Register handlers only for actions this app already supports, for example navigation.open through my router or text.insert into my editor.
3. Take the transcript or gesture my code already receives, resolve it with my rules and dispatch the intents only through the registered handlers.
4. Add a test with an injected transport. Never execute an intent that has no handler, and never send health or personal data.Go 1.23+ · standard libraryMaintained SDK
Download, verify, install and call it once.
Add the Ursly Go SDK to this project. 1. Read https://ursly.io/downloads/manifest.json and find the "sdk-go" file (a Go module .zip). If none is listed, stop and tell me the Go 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. Extract the archive into third_party/ursly-go, then run go mod edit -require=ursly.io/sdk/go@v<version> -replace=ursly.io/sdk/go=./third_party/ursly-go. Run go mod tidy only after this project's code imports ursly.io/sdk/go; run earlier, it drops the requirement and later re-adds it without the release version. 4. Create a client with base URL https://ursly.io, call client.Capabilities(ctx) 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.
Compare versions, verify and replace.
Update the Ursly Go SDK in this project. 1. Find the installed version in const Version in third_party/ursly-go/version.go and compare it with release.version in https://ursly.io/downloads/manifest.json. 2. If they match, tell me it is current and change nothing. 3. Otherwise download the new "sdk-go" file, verify its SHA-256 against the manifest and replace the old package the same way it was installed. 4. Run this project's tests, call client.Capabilities(ctx) against https://ursly.io and show me the 200 response. Summarize any SDK change that affects my code.
Register handlers and dispatch intents.
Wire Ursly actions into this Go app.
1. Read https://ursly.io/developers/artifacts/reference.md for the action contract.
2. Register handlers only for actions this app already supports, for example navigation.open through my router or text.insert into my editor.
3. Take the transcript or gesture my code already receives, resolve it with my rules and dispatch the intents only through the registered handlers.
4. Add a test with an injected transport. Never execute an intent that has no handler, and never send health or personal data.Rust 1.85+ · rustlsMaintained SDK
Download, verify, install and call it once.
Add the Ursly Rust SDK to this project. 1. Read https://ursly.io/downloads/manifest.json and find the "sdk-rust" file (a .crate source package). If none is listed, stop and tell me the Rust 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. Extract the .crate (a gzip tarball) into vendor/ and add ursly-sdk = { path = "vendor/ursly-sdk-<version>" } to Cargo.toml. 4. Create a client with base URL https://ursly.io, call 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.
Compare versions, verify and replace.
Update the Ursly Rust SDK in this project. 1. Find the installed version in the ursly-sdk entry in Cargo.toml and Cargo.lock and compare it with release.version in https://ursly.io/downloads/manifest.json. 2. If they match, tell me it is current and change nothing. 3. Otherwise download the new "sdk-rust" file, verify its SHA-256 against the manifest and replace the old package the same way it was installed. 4. Run this project's tests, call client.capabilities()? against https://ursly.io and show me the 200 response. Summarize any SDK change that affects my code.
Register handlers and dispatch intents.
Wire Ursly actions into this Rust app.
1. Read https://ursly.io/developers/artifacts/reference.md for the action contract.
2. Register handlers only for actions this app already supports, for example navigation.open through my router or text.insert into my editor.
3. Take the transcript or gesture my code already receives, resolve it with my rules and dispatch the intents only through the registered handlers.
4. Add a test with an injected transport. Never execute an intent that has no handler, and never send health or personal data.Written by your agentNot an Ursly package
Your coding agent writes a small client from the published contract. Ursly does not maintain, package or test these clients; the prompt labels the code accordingly.
Your agent writes a client from the contract.
Generate a minimal Ursly v1 client in Swift for this project. 1. Read https://ursly.io/developers/artifacts/openapi.json and https://ursly.io/developers/artifacts/reference.md. 2. Implement capabilities, actions, templates, validate and resolve against base URL https://ursly.io with a 10-second default timeout, no automatic retries, no redirects and requests under 32 KiB. 3. Validate every response against the contract before returning it and reject unknown action fields. 4. Add an explicit handler registry: check that every intent has a handler before running any, run them in order and stop at the first failure. 5. Add tests with an injected transport, call capabilities and show me the 200 response. Label the code as generated from the Ursly v1 contract, not an official Ursly package.
Re-check the generated client against the contract.
Refresh the generated Ursly client in this Swift project. 1. Download https://ursly.io/developers/artifacts/openapi.json and compare it with the contract the client was generated from. 2. If nothing changed, tell me and change nothing. 3. Otherwise update only the affected types, validation and calls, keeping the no-retry, no-redirect and handler-registry rules. 4. Run the tests, call capabilities against https://ursly.io and show me the 200 response.
Register handlers and dispatch intents.
Wire Ursly actions into this Swift app. 1. Read https://ursly.io/developers/artifacts/reference.md for the action contract. 2. Register handlers only for actions this app already supports, for example navigation.open through my router or text.insert into my editor. 3. Take the transcript or gesture my code already receives, resolve it with my rules and dispatch the intents only through the registered handlers. 4. Add a test with an injected transport. Never execute an intent that has no handler, and never send health or personal data.
What every SDK does
The code and the error catalogue are here for your agent. You don't need them: the prompts already ask for the safe defaults.
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);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)client, err := ursly.New("https://ursly.io")
client.RegisterHandler("navigation.open", openRoute)
result, err := client.ResolveAndDispatch(ctx, rule)let client = ursly::Client::new("https://ursly.io")?;
client.register_handler(ActionType::NavigationOpen, open_route);
let outcome = client.resolve_and_dispatch(&rule)?;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.