Move module path from github.com/smart-mcp-proxy/synapbus to github.com/synapbus/synapbus across all Go imports (47 files). Add constellation logo options generated via FLUX 1.1 Pro. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
199 lines
9.9 KiB
Markdown
199 lines
9.9 KiB
Markdown
# SynapBus Bootstrap Prompt
|
|
|
|
Paste everything below the line into Claude in the `/Users/user/repos/synapbus` directory.
|
|
|
|
---
|
|
|
|
I'm bootstrapping **SynapBus** — an open-source, local-first, MCP-native agent-to-agent messaging service written in Go. Single binary, embedded storage, semantic search, Slack-like Web UI.
|
|
|
|
The project idea is fully described in `IDEA.md` — read it first.
|
|
|
|
The repo is at https://github.com/synapbus/synapbus (public, empty).
|
|
Domains: synapbus.com + synapbus.dev (to be registered).
|
|
|
|
## What I need you to do (in order):
|
|
|
|
### 1. Create CLAUDE.md
|
|
|
|
Write the project CLAUDE.md with:
|
|
- Project overview (from IDEA.md)
|
|
- Tech stack: Go 1.23+, modernc.org/sqlite (pure Go), TFMV/hnsw (pure Go vectors), mcp-go (mark3labs), chi router, embedded Svelte SPA, fosite (OAuth 2.1)
|
|
- Directory structure (Go standard layout):
|
|
```
|
|
synapbus/
|
|
├── cmd/synapbus/ # main.go entry point
|
|
├── internal/
|
|
│ ├── auth/ # OAuth 2.1, API keys, sessions
|
|
│ ├── messaging/ # core message engine
|
|
│ ├── channels/ # channel management
|
|
│ ├── agents/ # agent registry
|
|
│ ├── search/ # semantic search (embeddings + HNSW)
|
|
│ ├── storage/ # SQLite + migrations
|
|
│ ├── attachments/ # content-addressable FS
|
|
│ ├── mcp/ # MCP server (tools, transport)
|
|
│ ├── api/ # REST API handlers
|
|
│ ├── web/ # embedded Web UI (Svelte SPA)
|
|
│ └── trace/ # agent activity logging
|
|
├── web/ # Svelte source (built → internal/web/dist/)
|
|
├── schema/ # SQLite migrations
|
|
├── docs/ # documentation
|
|
├── .specify/ # speckit specs
|
|
└── Makefile
|
|
```
|
|
- Build commands: `make build`, `make test`, `make dev`, `make web` (build Svelte SPA)
|
|
- Run: `./synapbus serve --port 8080 --data ./data`
|
|
- Conventions: Go standard, `internal/` for non-public packages, table-driven tests, context propagation, structured logging (slog)
|
|
- Environment variables: `SYNAPBUS_PORT`, `SYNAPBUS_DATA_DIR`, `SYNAPBUS_EMBEDDING_PROVIDER` (openai/gemini/ollama), `SYNAPBUS_EMBEDDING_API_KEY`, `SYNAPBUS_OLLAMA_URL`
|
|
|
|
### 2. Create speckit constitution
|
|
|
|
Run `/speckit.constitution` and provide these architecture decisions:
|
|
|
|
**Principles:**
|
|
1. **Local-first, single binary** — everything in one Go binary, no external dependencies at runtime
|
|
2. **MCP-native** — agents interact exclusively through MCP protocol tools, REST API is internal only
|
|
3. **Pure Go, zero CGO** — all dependencies must be pure Go (modernc.org/sqlite, not mattn/go-sqlite3)
|
|
4. **Multi-tenant with ownership** — every agent has a human owner; owners control access and see traces
|
|
5. **Embedded OAuth 2.1** — authentication server built into SynapBus, not delegated externally
|
|
6. **Semantic-ready storage** — SQLite for relational data, HNSW for vector search, both embedded
|
|
7. **Swarm intelligence patterns** — first-class support for stigmergy, task auction, agent discovery
|
|
8. **Observable by default** — all agent actions traced, searchable, auditable by owners
|
|
9. **Progressive complexity** — start with basic messaging, layer on vectors/attachments/swarm later
|
|
10. **Web UI as first-class citizen** — embedded Svelte SPA, not an afterthought
|
|
|
|
**Technology decisions:**
|
|
- Go 1.23+ (single binary, cross-compilation)
|
|
- modernc.org/sqlite (pure Go SQLite, no CGO)
|
|
- TFMV/hnsw (pure Go HNSW vector index)
|
|
- mark3labs/mcp-go (MCP server library)
|
|
- go-chi/chi (HTTP router)
|
|
- ory/fosite (OAuth 2.1 framework)
|
|
- Svelte 5 + Tailwind (Web UI, embedded via go:embed)
|
|
- slog (structured logging)
|
|
- Content-addressable filesystem for attachments (SHA-256)
|
|
|
|
**Non-goals:**
|
|
- No PostgreSQL, Redis, or external DB dependency
|
|
- No framework lock-in (LangChain, CrewAI, etc.)
|
|
- No A2A protocol support (yet) — MCP only for v1
|
|
- No cloud-specific features — local-first always
|
|
|
|
### 3. Create specs for these features (use /speckit.specify for each):
|
|
|
|
**Spec 001: Core Messaging**
|
|
- Messages: send (DM or channel), read inbox, claim for processing, mark done/failed
|
|
- Conversations: threaded, with subjects, auto-created on first message
|
|
- Priority levels (1-10), status tracking (pending/processing/done/failed)
|
|
- Rich metadata (JSON) on messages for filtering
|
|
- Read/unread tracking per agent per conversation
|
|
- SQLite storage with migrations
|
|
- MCP tools: `send_message`, `read_inbox`, `claim_messages`, `mark_done`, `search_messages` (full-text initially)
|
|
|
|
**Spec 002: Agent Registry & Auth**
|
|
- Agent self-registration via MCP tool `register_agent`
|
|
- Each agent has: name (unique), display_name, type (ai/human), capabilities (JSON), owner_id
|
|
- API key authentication for agents (generated on registration, returned once)
|
|
- Agent CRUD: register, update capabilities, deregister (owner only)
|
|
- Owner-scoped access: agents can only see own messages + joined channels
|
|
- MCP tools: `register_agent`, `discover_agents`, `update_agent`, `deregister_agent`
|
|
- Agent capability cards (JSON schema describing what the agent can do)
|
|
|
|
**Spec 003: Human Auth (OAuth 2.1)**
|
|
- OAuth 2.1 authorization server embedded in SynapBus (using fosite)
|
|
- Local accounts: username + password (bcrypt hashed)
|
|
- Token endpoints: /oauth/authorize, /oauth/token, /oauth/introspect
|
|
- Grant types: authorization_code (Web UI), client_credentials (programmatic)
|
|
- Session management for Web UI (httponly cookies)
|
|
- User CRUD: create account, change password, list owned agents
|
|
- PKCE required for all authorization code flows
|
|
- Refresh token rotation
|
|
|
|
**Spec 004: Channels**
|
|
- Public channels: any registered agent can join
|
|
- Private channels: invite-only, managed by creator
|
|
- Channel metadata: name, description, topic, created_by
|
|
- Membership management: join, leave, invite, kick (owner only)
|
|
- Channel message broadcast: message sent to channel delivered to all members
|
|
- MCP tools: `create_channel`, `join_channel`, `leave_channel`, `list_channels`, `invite_to_channel`
|
|
|
|
**Spec 005: Web UI**
|
|
- Svelte 5 + Tailwind CSS embedded SPA
|
|
- Pages: Login, Dashboard (recent messages), Conversations (thread view), Channels, Agents, Settings
|
|
- Real-time updates via SSE
|
|
- Compose: send DM or channel message, select recipient from dropdown
|
|
- Search: full-text search across messages
|
|
- Agent management: view owned agents, their traces, revoke API keys
|
|
- Responsive, dark mode support
|
|
- Built with `make web`, embedded in Go binary via `go:embed`
|
|
|
|
**Spec 006: MCP Server**
|
|
- MCP server using mark3labs/mcp-go
|
|
- SSE transport (primary) + Streamable HTTP transport
|
|
- All messaging operations exposed as MCP tools
|
|
- Tool authentication: API key in MCP request headers
|
|
- Tool listing with JSON schema descriptions
|
|
- Health check endpoint
|
|
- Connection management: track connected agents
|
|
|
|
**Spec 007: Trace Logging & Observability**
|
|
- All agent actions logged: tool calls, messages sent/received, channel joins, errors
|
|
- Traces stored in SQLite with agent_name, action, details, timestamp
|
|
- Owner can view traces for their agents via Web UI
|
|
- Filterable by agent, action type, time range
|
|
- Exportable as JSON/CSV
|
|
- Optional Prometheus metrics endpoint (/metrics)
|
|
- Structured logging (slog) to stdout
|
|
|
|
**Spec 008: Semantic Search**
|
|
- Message embedding on ingest (async, configurable provider)
|
|
- Providers: OpenAI text-embedding-3-small, Gemini embedding, Ollama (local)
|
|
- HNSW vector index (TFMV/hnsw) for ANN search
|
|
- Combined search: vector similarity + metadata filters + full-text
|
|
- MCP tool: `search_messages` with query, filters, limit
|
|
- Incremental indexing: new messages embedded in background
|
|
- Fallback: full-text search if no embedding provider configured
|
|
|
|
**Spec 009: Attachments**
|
|
- Upload files up to 50MB per message
|
|
- Content-addressable storage: SHA-256 hash as filename, dedup
|
|
- Store in `{data_dir}/attachments/{hash[0:2]}/{hash[2:4]}/{hash}`
|
|
- Metadata in SQLite: hash, original_filename, size, mime_type, message_id
|
|
- MCP tools: `upload_attachment` (returns hash), `download_attachment` (by hash)
|
|
- Web UI: inline preview for images, download link for others
|
|
- Garbage collection: remove orphaned attachments
|
|
|
|
**Spec 010: Swarm Patterns**
|
|
- **Stigmergy (Blackboard)**: tagged messages on a shared channel that agents read and react to. Tags: `#finding`, `#task`, `#decision`, `#trace`
|
|
- **Task Auction**: `post_task` with requirements + deadline → agents `bid_task` with capabilities + time estimate → poster selects winner → task assigned
|
|
- **Agent Discovery**: `discover_agents` searches capability cards by keyword/semantic match
|
|
- Channel types: `standard` (chat), `blackboard` (stigmergy), `auction` (tasks)
|
|
- MCP tools: `post_task`, `bid_task`, `accept_bid`, `complete_task`
|
|
|
|
### 4. Generate tasks from specs
|
|
|
|
After creating all specs, run `/speckit.tasks` for each spec to generate implementation tasks.
|
|
|
|
### 5. Create initial project files
|
|
|
|
- `go.mod` with module `github.com/synapbus/synapbus`
|
|
- `Makefile` with targets: build, test, dev, web, clean, lint
|
|
- `cmd/synapbus/main.go` — cobra CLI with `serve` command (placeholder)
|
|
- `schema/001_initial.sql` — SQLite migration for agents, messages, conversations, channels, channel_members, inbox_state, traces, attachments
|
|
- `README.md` — project overview, installation, quick start
|
|
- `.gitignore` — Go + Node + data directory
|
|
- `LICENSE` — Apache 2.0
|
|
|
|
### 6. Push initial commit
|
|
|
|
Stage all files, commit with message "feat: initial SynapBus project scaffolding", push to `main` on origin.
|
|
|
|
---
|
|
|
|
**Key design constraints to keep in mind:**
|
|
- ZERO CGO — the binary must cross-compile cleanly for linux/amd64, darwin/arm64
|
|
- All storage in a single `--data` directory (SQLite DB file + attachments dir + vector index)
|
|
- MCP is THE interface for agents — REST API is for internal Web UI use only
|
|
- Every agent action must be traceable by the human owner
|
|
- OAuth 2.1 is built INTO the binary, not a separate service
|
|
- Web UI is built from Svelte source, embedded at compile time
|