Add architecture diagram showing Hub-Agent-Client relationship and document how Profile config.json integrates with tools configuration. Mark Phase 2 as complete. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> |
||
|---|---|---|
| .github/workflows | ||
| apps | ||
| packages | ||
| scripts | ||
| skills | ||
| src | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| CLAUDE.md | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| tsconfig.json | ||
| turbo.json | ||
| vitest.config.ts | ||
Super Multica
A multi-component architecture for distributed agent systems.
Project Structure
src/
├── agent/ # Core agent module
│ ├── context-window/ # Token-aware context management
│ ├── profile/ # Agent profile management
│ ├── session/ # Session persistence with compaction
│ ├── skills/ # Modular skill system
│ └── tools/ # Agent tools
│ └── web/ # Web fetch and search tools
├── gateway/ # WebSocket gateway for distributed communication
├── hub/ # Multi-agent coordination hub
├── client/ # Client library
├── console/ # NestJS console application
└── shared/ # Shared types and gateway SDK
└── gateway-sdk/ # Gateway client SDK
apps/
└── web/ # Next.js web application
packages/
└── sdk/ # SDK package for external use
skills/ # Bundled skills (commit, code-review)
Getting Started
pnpm install
Environment Configuration
The Agent requires LLM provider credentials. Copy the example and fill in your values:
cp .env.example .env
# Edit .env with your API keys
Example .env for OpenAI:
export LLM_PROVIDER=openai
export OPENAI_API_KEY=sk-xxx
export OPENAI_BASE_URL=https://api.openai.com/v1
export OPENAI_MODEL=gpt-4o
Load the environment before starting services that use the Agent:
# Hub Console (requires LLM env vars)
source .env && pnpm dev:console
# Agent CLI
source .env && pnpm agent:cli "hello"
# Gateway (no LLM env vars needed)
pnpm dev:gateway
See .env.example for all supported providers (OpenAI, Anthropic, DeepSeek, Kimi, Groq, Mistral, etc.).
Configuration Priority
Each setting is resolved in order (first match wins):
- CLI argument —
--provider,--model,--api-key,--base-url - Environment variable —
LLM_PROVIDER,OPENAI_MODEL,OPENAI_API_KEY,OPENAI_BASE_URL, etc. - Session metadata — restored from previous session
- Default —
kimi-codingprovider withkimi-k2-thinkingmodel
Agent CLI
Use the agent module directly from the CLI for isolated testing.
# New sessions get a UUIDv7 ID (shown on start)
pnpm agent:cli "hello"
# [session: 019c0b0a-b111-765c-8bbd-f4149beac9c4]
# Continue a session
pnpm agent:cli --session 019c0b0a-b111-765c-8bbd-f4149beac9c4 "what did I say?"
# Or use a custom session name
pnpm agent:cli --session demo "remember my name is Alice"
pnpm agent:cli --session demo "what's my name?"
# Override provider/model
pnpm agent:cli --provider openai --model gpt-4o-mini "hi"
# Use an agent profile
pnpm agent:cli --profile my-agent "hello"
# Set thinking level
pnpm agent:cli --thinking high "solve this complex problem"
Sessions
Sessions persist conversation history to ~/.super-multica/sessions/<id>/. Each session includes:
session.jsonl- Message history in JSONL formatmeta.json- Session metadata (provider, model, thinking level)
Sessions use UUIDv7 for IDs by default, providing time-ordered unique identifiers.
Context Window Management
The agent automatically manages context windows to prevent token overflow:
- Token-aware compaction - Tracks token usage and compacts when approaching limits
- Compaction modes:
tokens(default),count(legacy),summary(LLM-generated) - Configurable safety margins - Ensures space for responses
- Minimum message preservation - Keeps recent context intact
Agent Profiles
Agent profiles define identity, personality, tools, and memory for an agent. Profiles are stored as markdown files in ~/.super-multica/agent-profiles/<id>/.
Profile CLI
# Create a new profile with default templates
pnpm agent:profile new my-agent
# List all profiles
pnpm agent:profile list
# Show profile contents
pnpm agent:profile show my-agent
# Open profile directory in file manager
pnpm agent:profile edit my-agent
Profile Structure
Each profile contains:
identity.md- Agent name and rolesoul.md- Personality and behavioral constraintstools.md- Tool usage instructionsmemory.md- Persistent knowledgebootstrap.md- Initial conversation context
Skills
Skills are modular capabilities that extend agent functionality through SKILL.md definition files. For complete documentation, see Skills System Documentation.
Key Features
- Multi-source loading - Bundled, user-installed, plugin-based, and profile-specific skills
- GitHub installation -
pnpm skills:cli add owner/repoto install from GitHub - Slash command invocation -
/skill-name argsin interactive mode - Eligibility filtering - Auto-filter by platform, binaries, and environment
- Hot reload - File watcher for development
- Plugin system - Auto-discover skills from npm packages with
multica.plugin.json
Quick Start
# List all skills
pnpm skills:cli list
# Install skills from GitHub
pnpm skills:cli add anthropics/skills
# Check skill status with diagnostics
pnpm skills:cli status
pnpm skills:cli status pdf -v
# Remove installed skills
pnpm skills:cli remove skills
Built-in Skills
Located in /skills/:
- commit - Git commit helper following conventional commits
- code-review - Code review assistance
- skill-creator - Create and manage custom skills (meta-skill for self-extension)
Creating Custom Skills
The agent can create new skills to extend its own capabilities. Simply ask the agent to create a skill:
User: Create a skill that helps me format JSON
Agent: [Creates ~/.super-multica/skills/json-formatter/SKILL.md]
Skills are automatically loaded via hot-reload. See the skill-creator SKILL.md for the complete guide.
Agent Tools
exec
Execute short-lived shell commands and return output. Commands running longer than the timeout are automatically backgrounded.
exec({ command: "ls -la", cwd: "/path/to/dir", timeoutMs: 30000 })
process
Manage long-running background processes (servers, watchers, daemons). Output is buffered (up to 64KB) and terminated processes are automatically cleaned up after 1 hour.
# Start a background process (returns immediately with process ID)
process({ action: "start", command: "npm run dev" })
# Check process status
process({ action: "status", id: "<process-id>" })
# Read process output
process({ action: "output", id: "<process-id>" })
# Stop a process
process({ action: "stop", id: "<process-id>" })
# Clean up terminated processes
process({ action: "cleanup" })
glob
Pattern-based file discovery using fast-glob.
glob({ pattern: "**/*.ts", cwd: "/path/to/dir" })
web_fetch
Fetch and extract content from URLs with intelligent content extraction.
# Basic fetch (returns markdown)
web_fetch({ url: "https://example.com" })
# With options
web_fetch({
url: "https://example.com",
outputFormat: "markdown", # or "text"
extractor: "readability" # or "turndown" for full page
})
Features: SSRF protection, response caching, max 50KB output.
web_search
Search the web using Brave or Perplexity AI.
# Basic search
web_search({ query: "typescript best practices" })
# With provider options
web_search({
query: "latest AI news",
provider: "brave", # or "perplexity"
count: 5,
freshness: "pw" # past week (Brave: pd/pw/pm/py)
})
Distributed Architecture
Gateway
The WebSocket gateway enables distributed multi-agent communication:
- Real-time message passing between agents
- Streaming support for long-running operations
- RPC-style request/response patterns
Hub
The Hub manages multiple agents and gateway connections:
- Agent lifecycle management
- Communication channel coordination
- Device identification and tracking
Scripts
Agent Commands
pnpm agent:cli- Run the agent CLI for module-level testingpnpm agent:interactive- Interactive REPL modepnpm agent:profile- Manage agent profiles
Development
pnpm dev- Run full stack in development modepnpm dev:gateway- Run gateway onlypnpm dev:console- Run console onlypnpm dev:web- Run web app only
Build & Test
pnpm build- Build for productionpnpm build:sdk- Build SDK packagepnpm start- Run production buildpnpm typecheck- Type check without emitting