Harness SDK

Quickstart

Get up and running with Harness SDK

Install

pnpm add harness-sdk @harness-sdk/react @assistant-ui/react-harness-sdk @assistant-ui/react

React + assistant-ui

"use client";

import { useHarnessRuntime } from "@assistant-ui/react-harness-sdk";
import { HarnessWebsocketTransport } from "harness-sdk";
import { AssistantRuntimeProvider } from "@assistant-ui/react";
import { Thread } from "@/components/assistant-ui/thread";

export default function Page() {
  const runtime = useHarnessRuntime({
    transport: HarnessWebsocketTransport({
      url: "ws://localhost:8787/ws?userId=demo",
    }),
  });

  return (
    <AssistantRuntimeProvider runtime={runtime}>
      <Thread />
    </AssistantRuntimeProvider>
  );
}

React (without assistant-ui)

"use client";

import { useHarness } from "@harness-sdk/react";
import { HarnessWebsocketTransport } from "harness-sdk";

export default function Page() {
  const harness = useHarness({
    transport: HarnessWebsocketTransport({
      url: "ws://localhost:8787/ws?userId=demo",
    }),
  });

  return (
    <div>
      <p>Status: {harness.state.status}</p>
      {harness.state.messages.map((msg) => (
        <div key={msg.id}>
          <strong>{msg.role}:</strong> {msg.content}
        </div>
      ))}
      <button onClick={() => harness.send({ type: "submit", prompt: "Hello!" })}>
        Send
      </button>
    </div>
  );
}

Vanilla (no framework)

import { Harness, HarnessWebsocketTransport } from "harness-sdk";

const harness = new Harness({
  transport: HarnessWebsocketTransport({
    url: "ws://localhost:8787/ws?userId=demo",
  }),
});

harness.subscribe(() => {
  console.log(harness.state);
});

harness.send({ type: "submit", prompt: "Hello!" });