Introduction
Sillan lets you deploy autonomous AI agents with streaming chat, tool execution, and a live activity dashboard. Bring your own Anthropic API key, pick from 4 built-in agent templates, and start chatting in under a minute.
Quickstart
Get a working AI agent running in three steps:
Enter your API key
Navigate to the deploy page and paste your Anthropic API key. Click Verify to validate it.
Choose a template
Select one of four agent templates — each comes with specialized tools and instructions.
Deploy & chat
Hit Deploy Agent. You'll be redirected to the dashboard where you can chat in real-time.
$ open http://localhost:4100/deploy# 1. Paste your sk-ant-... key# 2. Select "Oracle"# 3. Click Deploy Agent# → Redirects to /dashboard?agent=oracleAPI Key Setup
Sillan uses a bring-your-own-key model. You need an Anthropic API key with access to Claude Sonnet.
// On deploy, the key is validated:POST https://api.anthropic.com/v1/messagesHeaders: { "x-api-key": YOUR_KEY } // On every chat message, the key is sent:POST /api/agent/chatBody: { agentId, messages, apiKey } // The server creates a fresh model instance per-requestconst anthropic = createAnthropic({ apiKey })streamText({ model: anthropic("claude-sonnet-4-20250514"), ... })Agent Templates
Each template configures a Claude model with a specialized system prompt and one or more tools. All templates support streaming and multi-step tool execution.
Oracle
Crypto price feed
fetchTokenPrice()
Scout
Web research
searchWeb()
Sentinel
Wallet monitoring
checkSolanaBalance()
Herald
Content writing
generateContent()
Oracle
Fetches real-time cryptocurrency prices from the CoinGecko free API. Understands common token name mappings (BTC → bitcoin, SOL → solana, ETH → ethereum).
// Parameters{ tokenId: string } // CoinGecko ID, e.g. "bitcoin" // Returns{ tokenId: "solana", priceUsd: 148.32 } // Example conversationUser: "What's the price of SOL?"→ fetchTokenPrice({ tokenId: "solana" })← { tokenId: "solana", priceUsd: 148.32 }Agent: "SOL is currently trading at $148.32 USD."Scout
Searches the web using the DuckDuckGo instant answer API. Returns summaries and related topics with source URLs.
// Parameters{ query: string } // Returns{ results: [{ title, snippet, url }] }Sentinel
Checks Solana wallet balances via the public mainnet RPC endpoint. Converts lamports to SOL automatically.
// Parameters{ address: string } // Base58 public key // Returns{ address: "7xK9...", balanceSol: 12.4 }Herald
Generates structured content prompts for tweets, threads, blog outlines, and announcements. Supports tone control.
// Parameters{ topic: string, format: "tweet" | "thread" | "blog_outline" | "announcement", tone: "professional" | "casual" | "hype" | "technical"} // Returns{ content: string, format: string, wordCount: number }Architecture Overview
Sillan is a Next.js application with three layers: a React frontend using the Vercel AI SDK, API routes that handle agent orchestration, and the Anthropic Claude API for inference and tool execution.
CLIENT
- Next.js 16 App Router
- @ai-sdk/react useChat()
- DefaultChatTransport → SSE
- localStorage for API key
SERVER
- POST /api/agent/chat
- POST /api/agent/deploy
- GET /api/agent/status
- API key validation
AI
- Anthropic Claude Sonnet
- streamText() from ai SDK
- Zod-validated tools
- maxSteps: 5 (multi-step)
Streaming
Chat responses stream token-by-token using Server-Sent Events (SSE). The server calls streamText() from the AI SDK, which returns a uiMessageStream converted to a streaming Response via createUIMessageStreamResponse().
const result = streamAgent(agentId, apiKey, messages) return createUIMessageStreamResponse({ stream: result.uiMessageStream,})On the client, the useChat() hook from @ai-sdk/react receives the stream via a DefaultChatTransport and updates messages reactively.
Tool System
Tools are defined using the AI SDK's tool() function with Zod schemas for parameter validation. Each agent template maps to a specific set of tools.
import { tool } from "ai"import { z } from "zod" export const fetchTokenPrice = tool({ description: "Fetches crypto prices from CoinGecko", parameters: z.object({ tokenId: z.string().describe("CoinGecko token ID"), }), execute: async ({ tokenId }) => { const res = await fetch( `https://api.coingecko.com/api/v3/simple/price?ids=${tokenId}&vs_currencies=usd` ) const data = await res.json() return { tokenId, priceUsd: data[tokenId]?.usd ?? null } },})With maxSteps: 5, agents can chain multiple tool calls in a single conversation turn — for example, looking up multiple token prices in sequence.
POST /api/agent/chat
Streams a chat response from the selected agent. Returns an SSE stream of UI message chunks.
POST /api/agent/chatContent-Type: application/json { "agentId": "oracle", "apiKey": "sk-ant-api03-...", "messages": [ { "role": "user", "content": "Price of ETH?" } ]}Content-Type: text/event-stream // Streams UIMessageChunk events// Includes text deltas, tool calls, and tool resultsPOST /api/agent/deploy
Validates the API key and registers the agent. The key is tested by making a minimal call to the Anthropic API.
POST /api/agent/deploy{ "templateId": "oracle", "apiKey": "sk-ant-..." } // 200 OK{ "agentId": "oracle", "status": "running", "name": "Oracle", "tools": ["fetchTokenPrice"], "deployedAt": "2025-01-15T..."} // 401 Unauthorized{ "error": "Invalid API key" }GET /api/agent/status
Returns metadata about an agent template.
GET /api/agent/status?agentId=oracle // 200 OK{ "agentId": "oracle", "name": "Oracle", "description": "Crypto price feed agent...", "tools": ["fetch-token-price"], "status": "running", "icon": "◉"}Sillan© — Deploy autonomous AI agents with one command.