Used by Claude skills and agents to adapt recommendations to this project's conventions.
- Node.js 22+ (see
.nvmrc) - TypeScript 5.7 with strict mode
- ES Modules (
"type": "module", NodeNext resolution)
- npm (no yarn, no pnpm, no bun)
- No root
package.json— each package manages its own dependencies - Shared package linked via
"@mcp/shared": "file:../Shared"in each package
| Purpose | Library | Notes |
|---|---|---|
| LLM integration | Vercel AI SDK (ai, @ai-sdk/groq, @ai-sdk/openai) |
ReAct via maxSteps |
| Input validation | Zod | All tool inputs, all configs |
| HTTP server | Express 4 | All MCP HTTP endpoints |
| MCP protocol | @modelcontextprotocol/sdk |
Stdio and HTTP transports |
| Database | better-sqlite3 + sqlite-vec | Memorizer, Filer grants |
| Testing | Vitest 3 | Shared base config at root |
| Dev runner | tsx | Watch mode for development |
| Job scheduling | Inngest | Cron jobs, background tasks |
| Browser automation | Playwright (@playwright/mcp) |
Browser-MCP |
| Telegram | GramJS (MTProto) | Real-time messaging |
- Groq — default cloud provider (fast, cheap)
- LM Studio — local, OpenAI-compatible
- Ollama — local, flexible (also used for embeddings)
- Strict TypeScript — avoid
ascasting, prefer type guards and narrowing - Zod schemas co-located with tool definitions
StandardResponse<T>return type for all tool handlersregisterTool()from@mcp/sharedfor all tool registrations.jsextensions in all import paths (ESM requirement)- stderr for all logging (stdout reserved for MCP JSON-RPC)
- Integration tests preferred over unit tests
- Graceful degradation: tests skip when services unavailable
MCPTestClientfrom@mcp/shared/Testingfor MCP integration- 30-second timeout default
- Process-level isolation: each MCP runs as its own process
- Stdio transport by default (Orchestrator spawns MCPs as child processes)
- Auto-discovery via
hexa-puffsmanifest inpackage.json - Guardian wraps MCPs for security scanning (decorator pattern)
- Lazy-spawn agents: started on first message, idle-killed after inactivity