Install
$ agentstack add skill-olaservo-mcp-agent-skills-claude-agent-ui-ts ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Claude Agent UI (TypeScript)
Add a web UI to your Claude Agent SDK agents. Includes real-time WebSocket communication, interactive tool approval, and SQLite persistence for chat history.
Prerequisites
- Node.js 18+
- Claude Agent SDK configured (see claude-agent-sdk-ts skill for setup)
Quick Start
- Copy the snippets to your project:
client.tsxfrom this skillwebsocket-server-sqlite.tsandwebsocket-types.tsfrom claude-agent-sdk-ts skill
- Install dependencies:
``bash npm install express cors ws @anthropic-ai/claude-agent-sdk better-sqlite3 react react-dom npm install -D @types/better-sqlite3 @types/express @types/cors @types/ws ``
- Edit the server CONFIG section (workingDirectory, model, allowedTools, dbPath)
- Start server:
npx tsx server.ts
- Add
client.tsxto your React app and open in browser
Architecture
React Client Express Server Claude Agent
(client.tsx) (server.ts)
|
v
SQLite DB
(chat.db)
Flow:
- User types message in React UI
- Message sent via WebSocket to server
- Server persists message to SQLite and forwards to Claude Agent SDK
- When agent wants to use a tool, server sends approval request to client
- User approves or rejects in UI
- Server continues or blocks tool based on response
- Agent responses persisted to SQLite and streamed back to UI
Snippets
| Snippet | Source | Description | |---------|--------|-------------| | client.tsx | This skill | React chat UI with WebSocket and tool approval buttons | | websocket-server-sqlite.ts | claude-agent-sdk-ts | Express + WebSocket + SQLite server with SDK integration | | websocket-types.ts | claude-agent-sdk-ts | Shared TypeScript types for messages |
Configuration
Edit the CONFIG object in the server:
const CONFIG = {
port: 3001,
workingDirectory: process.cwd(), // Scope file operations
model: "sonnet", // opus, sonnet, or haiku
allowedTools: ["Bash", "Read", "Write", "Edit", "Glob", "Grep"],
systemPrompt: "You are a helpful AI assistant.",
dbPath: "./chat.db", // SQLite database path
};
See claude-agent-sdk-ts skill for detailed configuration options.
Persistence
The server uses SQLite (via better-sqlite3) to persist:
- Chat messages: All user, assistant, and tool_use messages
- SDK session ID: Captured from
system/initmessage for session resumption
Database schema:
-- Sessions: stores SDK session ID for multi-turn resumption
CREATE TABLE sessions (
id TEXT PRIMARY KEY,
sdk_session_id TEXT,
created_at TEXT,
updated_at TEXT
);
-- Messages: stores all chat messages
CREATE TABLE messages (
id TEXT PRIMARY KEY,
session_id TEXT,
role TEXT, -- 'user' | 'assistant' | 'tool_use'
content TEXT,
tool_name TEXT, -- for tool_use messages
tool_input TEXT, -- JSON string for tool_use messages
timestamp TEXT
);
Session Resumption: When the server restarts, it:
- Loads existing messages from SQLite
- Retrieves the stored SDK session ID
- Passes
resume: sdkSessionIdto the SDK query options - Claude resumes with full conversation context
This follows the SDK best practice of capturing session_id from the system/init message and using resume for multi-turn conversations.
Styling
The client has no styling (functional HTML only). Options:
- Add your own CSS
- Use Tailwind CSS
- Use claude-agent-terminal-ts for a styled terminal theme
Production Notes
For production deployment, consider:
- Authentication: Add user auth (not included)
- Multi-chat: Extend from single session to
Mapfor multiple conversations - Containerization: Isolate SDK in separate container for security
- Backup: Add SQLite backup strategy (WAL mode already enabled for durability)
- Error handling: Add retry logic and graceful degradation
Related Skills
| Skill | Use When | |-------|----------| | claude-agent-sdk-ts | SDK API details, tools, hooks, configuration, shared server code | | claude-agent-terminal-ts | Terminal-styled UI with dark theme and keyboard shortcuts |
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: olaservo
- Source: olaservo/mcp-agent-skills
- License: Apache-2.0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.