@kranth/sdk
v0.3.0
Published
Stress-test ideas with hundreds of AI personas. Adversarial multi-bias debate. API-first.
Maintainers
Readme
Kranth — TypeScript SDK
npm install @kranth/sdk
pnpm add @kranth/sdk
yarn add @kranth/sdkimport { Kranth } from "@kranth/sdk";
const client = new Kranth({ apiKey: "kr_live_…" });
const sim = await client.sims.create({
idea_text: "We're launching a paid Rust devtool. $29/mo, hosted, no self-host.",
persona_count: 50,
model_id: "claude-sonnet-4-6",
});
for await (const ev of client.sims.stream(sim.sim_id)) {
if (ev.kind === "persona.ready") {
console.log(`persona ${ev.data.persona_id} ready`);
} else if (ev.kind === "reaction.complete") {
console.log(` → ${ev.data.sentiment} ${ev.data.persona_id}`);
} else if (ev.kind === "sim.complete") {
const r = ev.data.report as any;
console.log("verdict:", r?.sentiment_score);
break;
}
}Works in Node 18+ (native fetch) and in the browser. For Workers / Deno
pass fetch and a baseUrl to the constructor.
Resources
client.sims.create({ idea_text, persona_count, model_id, training_opt_in? }, { idempotencyKey? })client.sims.get(simId)client.sims.list({ status?, cursor?, limit? })client.sims.stream(simId)— async iterator ofSimEventclient.sims.cancel(simId)client.sims.export(simId)client.recon.create({ idea_text, tier, ... })/.get(id)/.list()/.tiers()/.export(id)/.stream(id)— web-grounded research swarmclient.debates.create({ topic, mode, ... })/.get(id)/.list()/.turns(id)/.setPublic(id, isPublic)/.cancel(id)/.export(id)/.stream(id)— adversarial panelclient.apiKeys.create(name, { env: "live"|"test" })client.apiKeys.list()/client.apiKeys.revoke(id)client.models.list()client.billing.usage()client.billing.checkoutUrl("pro", { billingPeriod: "monthly" })client.billing.portalUrl(returnUrl?)
Errors
import { KranthPaymentRequired, KranthRateLimited } from "@kranth/sdk";
try {
await client.sims.create({ ... });
} catch (e) {
if (e instanceof KranthPaymentRequired) {
// out of credits — top up via client.billing.checkoutUrl("pro")
} else if (e instanceof KranthRateLimited) {
// back off for e.retryAfter seconds
} else {
throw e;
}
}License
Apache-2.0
