Architecture β
Component View β
π Text version
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CHANNELS β
β βββββββββββββββββββββββ βββββββββββββββββββββββ β
β β User (Telegram/ β β User (Browser) β β
β β Discord) β β β β
β ββββββββββββ¬βββββββββββ ββββββββββββ¬βββββββββββ β
βββββββββββββββΌβββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GATEWAY Β· Fastify :18790 β
β βββββββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ β
β β Dashboard UI (Preact/Vite) ββββββββββΌββββ β β
β β β Dashboard API β β
β βββββββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ β
β β β β
β β /health /status /message β β
β β /model /cron/:id/run β β
β ββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CORE β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Agent ββββ Subagent ββββ Code Agents ββββ Cron β β
β β Runtime β β Pool β β (Claude/ β β Scheduler β β
β ββββββββ¬ββββββββ ββββββββββββββββ β Codex/Kimi) β ββββββββββββββββ β
β β ββββββββββββββββ β β
β β β β
β β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β βββββΊβ Audit Log β β Skills β β Heartbeat β β
β β ββββββββββββββββ β System β β Timer β β
β β ββββββββββββββββ ββββββββββββββββ β
β β β
β β ββββββββββββββββ β
β βββββΊβ Exec β β
β β Approval β β
β ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PROVIDERS β
β ββββββββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ β
β β Anthropic / OpenAI / Codex / Kimi β β MCP Servers (mcporter) β β
β β / MiniMax β β β β
β ββββββββββββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ~/.skimpyclaw/ (config, logs, memory, templates) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββRuntime Flow (Message Handling) β
π Text version
User Channel/API Agent Runtime Model API Tools
β β β β β
βββmessageβββββββββββββββββΊβ β β
β βββrunAgentTurn(agent, msg)βββΊβ β
β β βββbuild prompt β
β β βββload skills β
β β βββsanitize β
β β β β β
β β [Tools enabled] β
β β β β β
β β ββββββββββββββββ§βββββββββββ
β β β TOOL LOOP β
β β β ββchatWithToolsββββββββΊβ
β β β βββtool_use blocksββββββ
β β β ββexecuteToolβββββββββββΌβββΊ
β β β βββtool resultββββββββββΌβββ
β β βββββββββββββββββββββββββββ
β β β β β
β β βββfinal response β
β β β β
β β [Tools disabled] β
β β β β β
β β βββchatββββββββΊβ β
β β βββresponseβββββ β
β β β β β
β β βββappend to memory β
β β βββrecord audit β
β βββββββββββββββββ β β
βββreplyβββββββββββββββββββββ β β
β β β β βStartup Sequence β
π Text version
src/index.ts
β
βΌ
βββββββββββββββββββββββββββ
β loadConfig() β
βββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββ
β Load .env file β
βββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββ
β initProviders() β
β Anthropic + OpenAI β
β + Codex clients β
βββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββ
β createGateway() β
β + listen :18790 β
βββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββ
β initCron() β
β schedule jobs β
βββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββ
β initActiveChannel() β
β + startActiveChannel() β
βββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββ
β initHeartbeat() β
βββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββ
β Service running β
βββββββββββββββββββββββββββSource Layout β
text
src/
index.ts # App entrypoint with file logging setup
gateway.ts # Fastify server + top-level routes
agent.ts # Prompt assembly, model calls, tool loop, memory writes, Langfuse tracing
tools.ts # Tool registry, MCP auto-discovery, code agents (code_with_agent, code_with_team)
subagent.ts # Background task dispatch: retry, concurrency, disk registry
model-selection.ts # Shared model-selection contract (alias/provider-model/bare-id resolution)
file-lock.ts # In-memory file lock for concurrent subagent writes
audit.ts # Append-only audit log (trace/event model, JSONL storage)
cron.ts # Job scheduling + execution + cron logging
heartbeat.ts # Periodic health/attention checks
channels.ts # Active channel selection + proactive routing
telegram.ts # Telegram bot commands and message handling ( Grammy )
discord.ts # Discord bot commands and message handling ( discord.js )
voice.ts # Voice input/output (TTS/STT via multiple providers)
digests.ts # Daily digest generation for cron job article outputs
skills.ts # Skill loading, eligibility checks, and prompt injection
skills-types.ts # TypeScript types for skills system
exec-approval.ts # Human-in-the-loop exec approval flow with risk tiers
api.ts # Dashboard REST API under /api/dashboard/*
dashboard-frontend.ts # Dashboard static asset serving (Preact/Vite build)
security.ts # Auth, path validation, bash command blocklist, rate limiting
config.ts # Config loading with env var expansion
types.ts # All TypeScript interfaces and types
setup.ts # Interactive setup wizard
langfuse.ts # Observability integration with cost tracking
usage.ts # Token usage tracking and aggregation
service.ts # Runtime service management
cli.ts # CLI command definitions
cache.ts # TTL cache utility
sessions.ts # Session persistence for chat history
model-selection.ts # Shared model-selection contract for API/CLI/chat commands
digests.ts # Digest storage and management for cron job article outputs
doctor/ # Health check system
index.ts # Doctor entry point
checks.ts # Individual health checks
formatters.ts # Output formatting (text/JSON)
runner.ts # Check orchestration
types.ts # Doctor type definitions
templates/ # Default template markdown files copied during setup
SOUL.md # Core agent personality and principles
IDENTITY.md # Agent name, emoji, persona
USER.md # User context and preferences
TOOLS.md # Tool usage instructions
BOOT.md # Startup behavior
HEARTBEAT.md # Heartbeat check instructions
MEMORY.md # Memory management guidelines
AGENTS.md # Multi-agent coordination
BOOTSTRAP.md # Bootstrap instructions
web/dashboard/ # Preact/Vite dashboard frontend
src/
App.tsx # Main app component with routing
api/client.ts # API client for backend communication
components/ # Shared UI components
pages/ # Page components (Overview, Cron, Audit, Memory, Config, Skills, Digests, etc.)
dist/ # Compiled output + built dashboard assetsModel Provider Architecture β
Three provider paths in agent.ts:
- Anthropic β
chatWithTools()β standard Anthropic SDK with tool_use - Codex β
codexChat()β raw fetch tochatgpt.com/backend-api/codex/responses(ChatGPT backend) - OpenAI-compatible β
chat()via OpenAI SDK β includes OpenAI, Kimi, MiniMax, openrouter, groq, etc.
Both Anthropic and Codex share ExecuteToolContext for spawn_subagent and file locking.