@rnsk/bot
v0.0.4
Published
Embeddable Runstack chat widget with gooey UI, API-key auth, and toolkit/agent scoping.
Readme
@rnsk/bot
Embeddable Runstack chat widget with gooey expand/collapse UI, API-key authentication, and optional Studio agent / toolkit scoping.
Install
npm install @rnsk/botPeer dependencies: react, react-dom, ai, @ai-sdk/react.
Usage
import { RunstackBot } from '@rnsk/bot';
import '@rnsk/bot/styles/bot.css';
export function SupportBot() {
return (
<RunstackBot
apiKey={process.env.NEXT_PUBLIC_RUNSTACK_API_KEY!}
position="right"
placeholder="Ask anything…"
agentIds={['agent_xxx']}
toolkits={['github']}
systemPrompt="You are a helpful support assistant."
/>
);
}Props
| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| apiKey | string | required | Runstack API key (rnsk_…) |
| position | 'left' \| 'right' | 'right' | Corner anchor |
| placeholder | string | 'Ask anything…' | Input placeholder |
| agentIds | string[] | — | Scope tools to Studio agents |
| toolkits | string[] | — | Scope tools to toolkit ids |
| systemPrompt | string | — | Extra system instructions |
| apiBase | string | https://app.runstack.engineer | API base URL |
| theme | 'light' \| 'dark' \| 'system' | 'system' | Widget theme |
| toolkitIndex | ToolkitIndexEntry[] | — | Extra toolkit display metadata (logo, name, tools) merged over the bundled index. Needed only when the backend serves toolkits newer than this package. |
Testing unreleased toolkits
The bot only renders the chat; tools run on whatever server apiBase points at. The rnsk-toolkits sandbox serves the same /api/bot/* contract backed by local toolkit source:
// toolkitIndex comes from the sandbox's GET /api/toolkit-index
<RunstackBot
apiKey="sandbox"
apiBase="http://localhost:5173"
toolkits={['mathematics']}
toolkitIndex={toolkitIndex}
/>Model selection
The bot uses the workspace Bot model configured in Runstack settings (LLM Providers). It falls back to the workspace default model, then Runstack auto-default providers.
Security
API keys in browser bundles are visible to users. For production, proxy requests through your backend.
