01 01/hey

> bay 01 // hello

hey, i'm simai. i help you ship agents that actually work.

02 02/kit

> bay 02 // the kit

three SDKs. one shape.

pick your stack. the surface area is identical across runtimes — same primitives, same defaults, same telemetry hooks.

typescript v 1.4
> npm i @simai/sdk

node 18+, edge runtimes, bun.

python v 1.4
> pip install simai

async first. 3.10+.

rust v 0.9
> cargo add simai

zero-cost wrappers. tokio.

03 03/chat

> bay 03 // chat

say hi in six lines.

recipe chat.basic.ts
1import { simai } from "@simai/sdk";
2
3const agent = simai.chat({
4  model: "simai-1",
5});
6await agent.say("hey there.");
04 04/tools

> bay 04 // tools

give it hands.

register typed functions. simai picks them, argues with itself, and only calls the one that fits.

fn()
recipe tools.fn.ts
1const weather = simai.tool({
2  name: "weather",
3  args: { city: z.string() },
4  run: async ({ city }) => fetchWx(city),
5});
6
7const reply = await agent.use([weather])
8  .ask("is seoul warm tomorrow?");
05 05/memory

> bay 05 // memory

it remembers.

persistence is a single line. you hand simai a store — redis, sqlite, a flat file, whatever — and it threads context across sessions, prunes cold entries on a schedule you control, and never silently truncates. no vector-database ceremony for cases that don't need one.

06 06/eval

> bay 06 // eval

show your work.

every run produces a row. pass, fail, drift — all rendered as a spec sheet, not a dashboard.

run #1842 / regression suite 12s · simai-1 · 5 cases
  • handles empty prompt 0.18s pass
  • retries on tool timeout 1.42s pass
  • streams partial json 2.10s fail
  • memory threading 0.74s pass
  • refuses unsafe write 0.31s pass
07 07/play

> bay 07 // playground

> open the playground