A toolkit to create local-first human-friendly agents in the browser or terminal
| Feature | Description |
|---|---|
| 🧠 Think | LLM inference via any OpenAI-compatible backend, first class Llama.cpp support |
| 🔧 Work | Execute tools recursively — actions, workflows, commands, agents |
| 💾 Remember | Semantic memory (LanceDB) + transient memory (IndexedDB/localForage) |
| 💻 Interact | Terminal REPL (lm), WebSocket client, or Koa server API |
- Composable — limited responsibilities, packages work together
- Declarative — focus on business logic, express features simply
- Explicit — simple and under user control, no hidden magic
- Codebase Summary — Architecture, key files, and patterns
- Documentation map — Complete documentation and usage guide
📚 Documentation | 🧩 Plugins | 🎨 UI
Plugins extend the CLI with additional capabilities. Browse all plugins at agent-smith-plugins.
| Category | Plugin | Package | Description |
|---|---|---|---|
| 💻 Code Management | git | @agent-smith/feat-git |
AI-powered commit messages, diff analysis |
| sqlite | @agent-smith/feat-sqlite |
Database operations, schema extraction | |
| ⚙️ System | fs | @agent-smith/feat-fs |
Filesystem read/write with path authorization |
| shell | @agent-smith/feat-shell |
Sandboxed Docker execution (shell + Python) | |
| 🌐 Web | search | @agent-smith/feat-search |
Multi-backend web search (DuckDuckGo, Wikipedia, crawl4ai) |
| video | @agent-smith/feat-video |
YouTube transcript extraction and chat | |
| 📝 Docs | autodoc | @agent-smith/autodoc |
AI-powered documentation Q&A |
Install a plugin: npm i -g @agent-smith/feat-shell, then add it to your config.yml.
- SQLite-driven runtime: All configuration (backends, features, settings) lives in SQLite — zero hardcoded defaults
- Feature discovery: Agents, actions, workflows, and commands are YAML/JS files on disk, auto-discovered and registered
- MCP support: Connect to external Model Context Protocol servers and use their tools within agents
- Unified tool abstraction: Actions, agents, workflows, and commands are all
ToolSpecobjects — interchangeable in any context
# Simple inference query
lm q "Say hello in three words"
# Generate a commit message (git plugin)
lm commit
# Execute shell command via agent (shell plugin)
lm shell "ls -la"import { Agent, Lm } from "@agent-smith/agent";
const lm = new Lm({
name: "openai",
serverUrl: "http://localhost:8080/v1",
apiKey: "",
onToken: (t) => process.stdout.write(t),
});
const agent = new Agent({
name: "my-agent",
lm,
onToken: (t) => process.stdout.write(t),
});
await agent.run("Hello, how are you?", {
system: "You are a helpful assistant",
tools: [weatherTool, trafficTool],
});import { useWsServer } from "@agent-smith/wscli";
const ws = useWsServer({
url: "ws://localhost:5184/ws",
onToken: (t) => process.stdout.write(t),
});
await ws.connect();
await ws.executeAgent("my-agent", "Translate to German: Hello world");Supported inference backends:
- Llama.cpp: the first class citizen
- Any OpenAI-compatible API server (OpenAI, LM Studio, etc.)
| Repository | Description |
|---|---|
| agent-smith-plugins | Plugin extensions: git, sqlite, fs, shell, search, video, autodoc |
| agent-smith-ui | Web interface for Agent Smith |
Agents processing a real-world job, thinking, working and adapting.

