Build a team of AI experts that collaborate on your ideas. Database, mail server, and agent TUI — all running on your machine.
Install, schema, agents, mail, kanban, queries, shutdown, uninstall — nothing left behind.
The video above is 100% reproducible. Create an empty folder with these three files, open Claude Code in it, and say "Read instructions.md and follow each step." That's it.
my-agent-demo/ instructions.md ← the prompt Claude follows .claude/ settings.json ← MCP servers (database + mail) settings.local.json ← auto-approve permissions
{
"mcpServers": {
"vibesql": {
"command": "npx",
"args": ["@vibesql/mcp"]
},
"agent-mail": {
"command": "npx",
"args": ["vibesql-mail-mcp", "--agent", "vibe_installer", "--micro-url", "http://localhost:5173"]
}
}
}
vibesql gives Claude direct SQL access. agent-mail gives it send/receive/search mail tools. Both connect to vibesql-micro on localhost:5173 — which the script itself installs and starts in Step 1.
{
"permissions": {
"allow": [
"Bash(cd:*)",
"Bash(netstat:*)",
"Skill(vibe-sql)",
"Bash(npm install:*)",
"Bash(npx vibesql-micro:*)",
"Bash(sleep 10 && curl -s http://127.0.0.1:5173/api/tables 2>&1)",
"Bash(curl:*)"
]
}
}
# Agent Mail Demo You are vibe_installer — an AI agent setting up a fresh Agent Mail system from scratch. Follow each step below, report what happened after each, and show final results at the end. ## Step 1: Install and Start VibeSQL npm install -g vibesql-micro npx vibesql-micro version npx vibesql-micro serve (run in background) Verify with the vibesql MCP tool. Database should be empty. ## Step 2: Create the Agent Mail Schema 10 tables (settings, agents, teams, team_members, projects, kanban_boards, kanban_columns, kanban_cards, messages, inbox) + 14 indexes. Use the vibesql MCP query tool for every statement. ## Step 3: Register Three Agents and Create a Team vibe_installer (installer), test_agent_1 (researcher), test_agent_2 (engineer) → team "demo-team" ## Step 4: Create a Project and Kanban Board Project "vibesql-research" → Board "Research Tasks" Columns: To Do, In Progress, Done Card: "Investigate JSONB storage" assigned to researcher ## Step 5: Send Welcome Messages Using the agent-mail MCP, send welcome messages to both agents. ## Step 6: Cross-Agent Communication Send assignment message to test_agent_1 via agent-mail MCP. ## Step 7: Move the Kanban Card To Do → In Progress ## Step 8–9: Outbox Check + Final Results Query messages table, show summary of entire system. ## Step 10: /vibe-sql Natural Language Queries 10 queries via the /vibe-sql slash command — including INSERT, UPDATE, thread search, and final board state. ## Step 11: Clean Shutdown npx vibesql-micro stop Verify zero orphan processes, zero held ports. ## Step 12: Clean Uninstall npm uninstall -g vibesql-micro rm -rf ./vibe-data Nothing left on the machine.
# In your project folder: $ claude # Then type: ❯ Read instructions.md and follow each step. Report back after each step, then move to the next.
Both MCP servers connect to the same vibesql-micro instance. No separate server processes — Claude talks to the tools directly.
One prompt, twelve steps, zero manual intervention. The demo above builds all of this autonomously:
/vibe-sql skill — INSERT, UPDATE, search, and board state in plain English10 tables, 14 indexes — auto-created on first use. Full SQL on GitHub
erDiagram
agents {
serial id PK
text name UK
text display_name
text role
jsonb expertise_json
boolean is_active
timestamptz created_at
}
teams {
serial id PK
text name UK
text description
}
team_members {
serial id PK
integer team_id FK
integer agent_id FK
}
projects {
serial id PK
text name
text description
text status
}
kanban_boards {
serial id PK
text name
integer project_id FK
}
kanban_columns {
serial id PK
integer board_id FK
text name
integer position
}
kanban_cards {
serial id PK
integer column_id FK
text title
text description
integer assigned_agent_id FK
}
messages {
serial id PK
integer from_agent_id FK
text thread_id
text subject
text body
text importance
timestamptz created_at
}
inbox {
serial id PK
integer message_id FK
integer agent_id FK
text recipient_type
timestamptz read_at
}
settings {
text key PK
text value
}
agents ||--o{ team_members : "belongs to"
teams ||--o{ team_members : "has"
agents ||--o{ messages : "sends"
agents ||--o{ inbox : "receives"
messages ||--o{ inbox : "delivered to"
agents ||--o{ kanban_cards : "assigned"
projects ||--o{ kanban_boards : "tracked on"
kanban_boards ||--o{ kanban_columns : "has"
kanban_columns ||--o{ kanban_cards : "contains"
The schema above isn't just mail — it's the persistence layer for full agent workflows. Here's how it maps to orchestration patterns like Pi subagents.
graph LR
subgraph Chain["Sequential Chain"]
direction LR
S[Scout] -->|context.md| P[Planner]
P -->|plan.md| W[Worker]
W -->|progress.md| R[Reviewer]
end
subgraph Parallel["Parallel Execution"]
direction TB
W1[Worker 1
Auth module]
W2[Worker 2
API layer]
W3[Worker 3
UI components]
end
subgraph VibeSQL["VibeSQL Persistence"]
direction TB
AG[(agents)]
MSG[(messages)]
KB[(kanban_boards)]
TM[(teams)]
end
Chain --> MSG
Parallel --> MSG
Chain --> KB
Parallel --> KB
style Chain fill:#1e1b4b,stroke:#6d28d9,color:#e2e8f0
style Parallel fill:#0c2a3e,stroke:#06b6d4,color:#e2e8f0
style VibeSQL fill:#1a1229,stroke:#7c3aed,color:#e2e8f0
style S fill:#0d3321,stroke:#22c55e,color:#22c55e
style P fill:#1e1b4b,stroke:#a78bfa,color:#a78bfa
style W fill:#1e293b,stroke:#3b82f6,color:#3b82f6
style R fill:#2a1215,stroke:#f472b6,color:#f472b6
style W1 fill:#1e293b,stroke:#3b82f6,color:#3b82f6
style W2 fill:#1e293b,stroke:#3b82f6,color:#3b82f6
style W3 fill:#1e293b,stroke:#3b82f6,color:#3b82f6
style AG fill:#1a1229,stroke:#a78bfa,color:#a78bfa
style MSG fill:#1a1229,stroke:#a78bfa,color:#a78bfa
style KB fill:#1a1229,stroke:#a78bfa,color:#a78bfa
style TM fill:#1a1229,stroke:#a78bfa,color:#a78bfa
Scout gathers context, Planner designs the approach, Worker executes, Reviewer validates. Each step's output becomes the next step's input — all persisted as messages with thread IDs.
Multiple agents work simultaneously on different parts of the same project. Kanban cards track assignment and progress. Messages carry results between parallel branches.
Agent status, execution progress, and completion events — all queryable with SQL instead of polling flat files. Any agent can check any other agent's progress in real time.
status.json and events.jsonl, agent progress lives in PostgreSQL — joinable, indexable, and accessible to every agent on the team. Chains become message threads. Parallel task status becomes kanban columns. Async polling becomes SELECT * FROM inbox WHERE read_at IS NULL.
Explore the full platform — from local dev tools to production infrastructure.