OmniNova Claw is a powerful, local-first AI agent platform built on the Novalclaw architecture. It combines a high-performance Rust core runtime with a modern Tauri + React desktop interface, giving you complete control over your AI agents, skills, and model providers.
Whether you're building complex agent workflows, managing multiple LLM providers (OpenAI, Anthropic, Gemini, DeepSeek, etc.), or deploying bots across various channels (Slack, Discord, WeChat, etc.), OmniNova Claw provides a unified, secure, and extensible foundation.
The Soul System gives your agent a unique identity and behavioral framework, deeply integrated with MBTI psychology.
- MBTI-Driven Personality: Architect your agent's cognition using MBTI types (e.g., INTJ for logical strategy, ENFP for creative empathy). The system translates these types into distinct reasoning patterns and communication styles.
- System Prompt: Define the core personality, tone, and constraints of your agent.
- Behavioral Control: Fine-tune interaction styles, context handling (
compact_context), and tool usage limits. - Adaptive Persona: Switch between different "Souls" (e.g., Coder, Researcher, Assistant) based on the task or channel.
OmniNova Claw implements a sophisticated cognitive architecture with three distinct memory layers:
- Working Memory (Short-term): Manages the immediate conversation context with intelligent token compression and sliding windows to maintain focus.
- Episodic Memory (Long-term): Stores and retrieves past interaction history, preserving the lineage of sessions and enabling the agent to recall previous contexts.
- Semantic/Skill Memory (Knowledge): A persistent knowledge base derived from loaded Skills (
SKILL.md) and external documents, allowing the agent to utilize specialized domain knowledge.
- Built-in Tools: File operations, Web Search, PDF reading, Git operations, Shell execution (sandboxed).
- Skills System: Extensible capability system compatible with OpenClaw skills. Load skills from
SKILL.mdor local directories. - ACP Protocol: Implements the Agent Control Protocol for standardized agent-tool interaction.
- Safety First: E-stop mechanism, tool policy enforcement, and dangerous command filtering.
- Multi-Provider Support: Seamlessly switch between OpenAI, Anthropic, Gemini, DeepSeek, Qwen, Ollama, and more.
- Omni-Channel: Connect your agents to Slack, Discord, Telegram, WeChat, Feishu, Lark, DingTalk, WhatsApp, Email, and Webhooks.
- Declarative Routing: Route messages to specific agents based on channel, user, or metadata without writing code.
- Cross-Platform: Native apps for macOS (Apple Silicon/Intel), Windows, and Linux.
- Visual Configuration: Configure providers, channels, and skills through an intuitive React-based UI.
- Local Gateway: Run the entire stack locally with a built-in HTTP gateway and daemon management.
- iOS client:
apps/omninova-ios/— SwiftUI + CallKit +SFSpeechRecognizer+ Call Directory Extension. XcodeGen-driven project generation wired into CI (simulator build). - Android client:
apps/omninova-android/— Kotlin + Jetpack Compose +CallScreeningService+InCallService+ foreground service (phoneCall|microphone). Supports auto-answer once the user grants default-dialer +ANSWER_PHONE_CALLS. - Spam detection: rule-driven (
skills/phone-call-assistant/spam_detection_rules.json), hot-loadable from the gateway. - Key-info extraction: lightweight on-device extractor + gateway-side LLM normalization via
key_info_extraction_schema.json. - Conversation logging: fully aligned with
conversation_log_schema.json; complete JSON is synced to the gateway after every call. - Skill-driven: all capabilities live in the
skills/phone-call-assistant/skill and are exposed to the agent asphone_call_assistant.*tools.
You do not need Tauri, Node.js, or desktop libraries such as libwebkit2gtk—only Rust. From the repo root omninovalclaw/:
cargo build -p omninova-core --release --bin omninova
cp target/release/omninova ~/.local/bin/ # or add target/release to PATH
omninova doctor
omninova setup # or omninova configure
omninova gateway run # foreground gateway (Ctrl+C to stop)Background service (equivalent to a long-running omninova gateway): commands below register the service using the current omninova binary—put it on a stable path (e.g. ~/.local/bin/omninova) before daemon install.
- Linux: systemd user unit (no root). Unit file:
~/.config/systemd/user/omninova-gateway.service. Logs:journalctl --user -u omninova-gateway.service.
omninova daemon install
omninova daemon status- macOS: launchd user agent. Plist:
~/Library/LaunchAgents/com.omninova.gateway.plist, labelcom.omninova.gateway. Default stdout/stderr:/tmp/omninova-gateway.out.logand/tmp/omninova-gateway.err.log.
omninova daemon install
omninova daemon status
launchctl list com.omninova.gateway # optional: see if loaded- Windows:
omninova daemon installregisters via Task Scheduler; useomninova daemon checkandomninova doctorfor details.
Config defaults to ~/.omninova/config.toml; override with OMNINOVA_CONFIG_DIR if needed. All other CLI commands (agent, skills, channels, etc.) work the same as with the desktop app.
- Rust: Latest stable version (
rustup update) - CLI-only / headless: Rust only; Node.js is not required.
- Desktop (Tauri) builds also require:
- Node.js: Version 22+ (
node -v)
- Node.js: Version 22+ (
- System dependencies (only for building or running the desktop app):
- Linux:
libwebkit2gtk-4.1-dev,libappindicator3-dev,librsvg2-dev - Windows: Microsoft Visual Studio C++ Build Tools
- Linux:
-
Clone the repository
git clone https://github.com/omninova/claw.git cd claw/omninovalclaw -
Install dependencies
# Install frontend dependencies cd apps/omninova-tauri npm install
-
Run in Development Mode
# Run Tauri app (Frontend + Rust Backend) npm run tauri dev -
Build for Production
You can build optimized binaries for specific platforms using the following commands:
# Windows (x64) npm run build:windows # macOS (Apple Silicon / M1/M2/M3) npm run build:macos:apple # macOS (Intel) npm run build:macos:intel # Linux (x64) npm run build:linux
Artifacts will be generated in
apps/omninova-tauri/src-tauri/target/release/bundle/.
Mobile targets live under apps/omninova-ios/ (SwiftUI) and apps/omninova-android/
(Kotlin/Compose). Both are wired into the CI workflow .github/workflows/release.yml.
iOS (requires macOS + Xcode 15+)
brew install xcodegen
cd apps/omninova-ios
xcodegen generate --spec project.yml
# Or via the bundled helper (CI-friendly, unsigned simulator build):
./scripts/build-ios.shHighlights:
CallManager.autoAnswer=truedispatchesCXAnswerCallActionthroughCXCallController.CallDirectoryExtensionconsumes a shared App Group JSON for static block/ID entries.SpamDetectorappliesskills/phone-call-assistant/spam_detection_rules.jsonheuristics.KeyInfoExtractordoes on-device extraction (name / org / phone / intent / summary / sentiment).
Android (requires JDK 17 + Android SDK 34)
cd apps/omninova-android
echo "sdk.dir=$ANDROID_SDK_ROOT" > local.properties
./gradlew assembleDebug # app/build/outputs/apk/debug/app-debug.apk
./gradlew assembleRelease # keystore required
# Or: ./scripts/build-android.shKey services:
OmniCallScreeningService— pre-ring allow/silence/reject via the skill rule set.OmniInCallService— auto-answers incoming calls when the app is the default dialer.CallAgentForegroundService— foreground service (phoneCall|microphone) running ASR → gateway → TTS.- Full session JSON is posted to
POST /api/webhookwhen the call ends.
From the Tauri project (optional convenience)
cd apps/omninova-tauri
npm run build:phone-agent:ios
npm run build:phone-agent:android
npm run build:phone-agent:android:releaseOmniNova Claw follows a modular workspace structure:
omninovalclaw/
├── skills/ # Bundled SKILL.md packs (import into workspace)
│ └── phone-call-assistant/ # Mobile phone-agent skill (spam rules + key-info schema)
├── apps/
│ ├── omninova-tauri/ # Desktop Frontend (React 19 + TypeScript) & Tauri Config
│ │ ├── src/ # UI Components (Setup, Chat, Console)
│ │ ├── src-tauri/ # Tauri Backend Entrypoint
│ │ └── public/ # Static Assets
│ ├── omninova-ios/ # iOS phone agent (SwiftUI + CallKit, XcodeGen project.yml)
│ └── omninova-android/ # Android phone agent (Kotlin + Compose, Gradle project)
├── crates/
│ └── omninova-core/ # Core Runtime Library
│ ├── agent/ # Agent Logic & Dispatcher
│ ├── skills/ # Skills System Implementation
│ ├── tools/ # Native Tools (PDF, Web, File, etc.)
│ ├── providers/ # LLM Provider Integrations
│ ├── channels/ # IM & Webhook Adapters
│ └── gateway/ # HTTP API Gateway
└── .github/workflows/ # CI/CD Pipelines (release.yml)
OmniNova Claw uses a config.toml file for configuration, which can be managed via the Desktop UI or edited manually.
- Config Location:
~/.omninova/config.toml(default) - Environment Variables: Can override config settings (e.g.,
OMNINOVA_OPENAI_API_KEY).
The Desktop App provides a Setup Wizard to easily configure:
- Providers: API Keys and Base URLs.
- Channels: Bot tokens and Webhook secrets.
- Skills: Enable/Disable Open Skills and set import paths. Bundled examples live under
skills/(e.g. financial-analysis, financial-valuation, quantitative-research, quantitative-backtest, penetration-assessment); runomninova skills import --from ./skillsfrom the repo root to copy them into the default skills directory. - Persona: Define your agent's system prompt and behavior.
We use GitHub Actions for automated cross-platform builds.
- Stable Releases: Tagged with
v*(e.g.,v0.1.0). - Platform Support:
- macOS (Universal/Apple Silicon)
.dmg - Windows (x64)
.msi - Linux (x64)
.AppImage/.deb
- macOS (Universal/Apple Silicon)
This project is licensed under the MIT License.
