- Durable workflows (
<Workflow>,<Task>,<Sequence>,<Parallel>,<Loop>) - SDK agents with custom tool objects
- CLI agents with skills, plugins, or MCP config
- Compute tasks for deterministic CLI or API calls
Popular Integrations
| Service | Common actions | Best Smithers wiring |
|---|---|---|
| Linear | getIssue, listIssues, comment, updateState | SDK tool, CLI skill, or task calling your linear CLI |
| Notion | search, getPage, createPage, appendBlock | SDK tool, CLI skill, or task calling your notion CLI |
| Slack | postMessage, replyInThread, listChannelHistory | SDK tool, CLI MCP/server, or deterministic publish task |
| Telegram | sendMessage, sendPhoto, pollUpdates | SDK tool or deterministic bot task |
listInbox, getThread, sendEmail | SDK tool or deterministic task against your mail provider | |
| SMS | sendSms, listMessages, lookupNumber | SDK tool or deterministic task against Twilio or another provider |
Pattern 1: Pass tools to an SDK agent
Use this when the agent needs judgment, but the external system calls should stay explicit and reviewable../integrations/linear.ts or ./integrations/slack.ts. Do not give the agent a full provider SDK if it only needs two or three actions.
Pattern 2: Pass a skill, plugin, or MCP config to a CLI agent
Use this when your CLI agent already supports external integrations and Smithers should only orchestrate the task.Pattern 3: Run the linear or notion CLI in a task
Use this when the step is deterministic and you do not need the model involved.
linear or notion commands your team already uses. The point is the pattern: compute task in, structured JSON out.
React Hook Libraries
If you are building a React frontend on top of Smithers-backed routes or your own AI endpoints, these libraries fit well:| Library | Use it for | Notes |
|---|---|---|
@ai-sdk/react | Chat, completion, streamed objects, assistant-style UIs | Best default if your app already uses the Vercel AI SDK transport and UI stream format |
@tanstack/ai-react | Typed chat clients, SSE adapters, tool approval flows, client tools, generation hooks | Good fit if you want TanStack-style client state and typed tool execution |
@tanstack/react-query | Thread lists, run history, side panels, metadata, optimistic mutations | Complementary cache/query layer, not a replacement for chat streaming hooks |
@tambo-ai/react | Generative React UI with provider-based hooks and thread state | Worth considering if your frontend is more component-generation than plain chat |
Vercel AI SDK React Hooks
Use@ai-sdk/react when the client speaks the AI SDK UI protocol and you want batteries-included hooks such as useChat, useCompletion, useObject, and useAssistant.
TanStack AI
Use@tanstack/ai-react when you want a typed chat client with connection adapters, tool approval support, and TanStack-style generation hooks beyond chat.
TanStack Query and Beads
@tanstack/react-queryis useful alongside the chat hooks above for fetching Smithers runs, approvals, ticket metadata, user settings, and other non-streaming resources.- Beads is not a React hook library. It is a persistent task and memory system for coding agents, so it belongs in agent/runtime tooling, not your React chat-hook layer.
Choosing the Right Pattern
| If you need | Prefer |
|---|---|
| AI judgment over a small integration surface | SDK agent with narrow tools |
| Existing CLI ecosystem support | CLI agent with skills, plugins, or MCP |
| Deterministic sync or publish steps | Compute task calling the external CLI or API |
Non-Existent APIs
Smithers does not ship:smithers-orchestrator/linearsmithers-orchestrator/notion- Built-in Slack, Telegram, email, or SMS clients
- Built-in webhook helpers for those services