# IronClaw โ†” OpenClaw Feature Parity Matrix This document tracks feature parity between IronClaw (Rust implementation) and OpenClaw (TypeScript reference implementation). Use this to coordinate work across developers. **Legend:** - โœ… Implemented - ๐Ÿšง Partial (in progress or incomplete) - โŒ Not implemented - ๐Ÿ”ฎ Planned (in scope but not started) - ๐Ÿšซ Out of scope (intentionally skipped) - โž– N/A (not applicable to Rust implementation) --- ## 1. Architecture | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Hub-and-spoke architecture | โœ… | โœ… | Web gateway as central hub | | WebSocket control plane | โœ… | โœ… | Gateway with WebSocket + SSE | | Single-user system | โœ… | โœ… | | | Multi-agent routing | โœ… | โŒ | Workspace isolation per-agent | | Session-based messaging | โœ… | โœ… | Per-sender sessions | | Loopback-first networking | โœ… | โœ… | HTTP binds to 0.0.0.0 but can be configured | ### Owner: _Unassigned_ --- ## 2. Gateway System | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Gateway control plane | โœ… | โœ… | Web gateway with 40+ API endpoints | | HTTP endpoints for Control UI | โœ… | โœ… | Web dashboard with chat, memory, jobs, logs, extensions | | Channel connection lifecycle | โœ… | โœ… | ChannelManager + WebSocket tracker | | Session management/routing | โœ… | โœ… | SessionManager exists | | Configuration hot-reload | โœ… | โŒ | | | Network modes (loopback/LAN/remote) | โœ… | ๐Ÿšง | HTTP only | | OpenAI-compatible HTTP API | โœ… | โœ… | /v1/chat/completions, per-request `model` override | | Canvas hosting | โœ… | โŒ | Agent-driven UI | | Gateway lock (PID-based) | โœ… | โŒ | | | launchd/systemd integration | โœ… | โŒ | | | Bonjour/mDNS discovery | โœ… | โŒ | | | Tailscale integration | โœ… | โŒ | | | Health check endpoints | โœ… | โœ… | /api/health + /api/gateway/status | | `doctor` diagnostics | โœ… | โŒ | | | Agent event broadcast | โœ… | ๐Ÿšง | SSE broadcast manager exists (SseManager) but tool/job-state events not fully wired | | Channel health monitor | โœ… | โŒ | Auto-restart with configurable interval | | Presence system | โœ… | โŒ | Beacons on connect, system presence for agents | | Trusted-proxy auth mode | โœ… | โŒ | Header-based auth for reverse proxies | | APNs push pipeline | โœ… | โŒ | Wake disconnected iOS nodes via push | | Oversized payload guard | โœ… | ๐Ÿšง | HTTP webhook has 64KB body limit + Content-Length check; no chat.history cap | | Pre-prompt context diagnostics | โœ… | โŒ | Context size logging before prompt | ### Owner: _Unassigned_ --- ## 3. Messaging Channels | Channel | OpenClaw | IronClaw | Priority | Notes | |---------|----------|----------|----------|-------| | CLI/TUI | โœ… | โœ… | - | Ratatui-based TUI | | HTTP webhook | โœ… | โœ… | - | axum with secret validation | | REPL (simple) | โœ… | โœ… | - | For testing | | WASM channels | โŒ | โœ… | - | IronClaw innovation | | WhatsApp | โœ… | โŒ | P1 | Baileys (Web), same-phone mode with echo detection | | Telegram | โœ… | โœ… | - | WASM channel(MTProto), DM pairing, caption, /start, bot_username | | Discord | โœ… | โŒ | P2 | discord.js, thread parent binding inheritance | | Signal | โœ… | โœ… | P2 | signal-cli daemonPC, SSE listener HTTP/JSON-R, user/group allowlists, DM pairing | | Slack | โœ… | โœ… | - | WASM tool | | iMessage | โœ… | โŒ | P3 | BlueBubbles or Linq recommended | | Linq | โœ… | โŒ | P3 | Real iMessage via API, no Mac required | | Feishu/Lark | โœ… | โŒ | P3 | Bitable create app/field tools | | LINE | โœ… | โŒ | P3 | | | WebChat | โœ… | โœ… | - | Web gateway chat | | Matrix | โœ… | โŒ | P3 | E2EE support | | Mattermost | โœ… | โŒ | P3 | Emoji reactions | | Google Chat | โœ… | โŒ | P3 | | | MS Teams | โœ… | โŒ | P3 | | | Twitch | โœ… | โŒ | P3 | | | Voice Call | โœ… | โŒ | P3 | Twilio/Telnyx, stale call reaper, pre-cached greeting | | Nostr | โœ… | โŒ | P3 | | ### Telegram-Specific Features (since Feb 2025) | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Forum topic creation | โœ… | โŒ | Create topics in forum groups | | channel_post support | โœ… | โŒ | Bot-to-bot communication | | User message reactions | โœ… | โŒ | Surface inbound reactions | | sendPoll | โœ… | โŒ | Poll creation via agent | | Cron/heartbeat topic targeting | โœ… | โŒ | Messages land in correct topic | ### Discord-Specific Features (since Feb 2025) | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Forwarded attachment downloads | โœ… | โŒ | Fetch media from forwarded messages | | Faster reaction state machine | โœ… | โŒ | Watchdog + debounce | | Thread parent binding inheritance | โœ… | โŒ | Threads inherit parent routing | ### Slack-Specific Features (since Feb 2025) | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Streaming draft replies | โœ… | โŒ | Partial replies via draft message updates | | Configurable stream modes | โœ… | โŒ | Per-channel stream behavior | | Thread ownership | โœ… | โŒ | Thread-level ownership tracking | ### Channel Features | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | DM pairing codes | โœ… | โœ… | `ironclaw pairing list/approve`, host APIs | | Allowlist/blocklist | โœ… | ๐Ÿšง | allow_from + pairing store | | Self-message bypass | โœ… | โŒ | Own messages skip pairing | | Mention-based activation | โœ… | โœ… | bot_username + respond_to_all_group_messages | | Per-group tool policies | โœ… | โŒ | Allow/deny specific tools | | Thread isolation | โœ… | โœ… | Separate sessions per thread | | Per-channel media limits | โœ… | โœ… | Attachment type in WIT; max 10 per msg, 20MB total, MIME allowlist | | Typing indicators | โœ… | ๐Ÿšง | TUI + Telegram typing/actionable status prompts; richer parity pending | | Per-channel ackReaction config | โœ… | โŒ | Customizable acknowledgement reactions | | Group session priming | โœ… | โŒ | Member roster injected for context | | Sender_id in trusted metadata | โœ… | โŒ | Exposed in system metadata | ### Owner: _Unassigned_ --- ## 4. CLI Commands | Command | OpenClaw | IronClaw | Priority | Notes | |---------|----------|----------|----------|-------| | `run` (agent) | โœ… | โœ… | - | Default command | | `tool install/list/remove` | โœ… | โœ… | - | WASM tools | | `gateway start/stop` | โœ… | โŒ | P2 | | | `onboard` (wizard) | โœ… | โœ… | - | Interactive setup | | `tui` | โœ… | โœ… | - | Ratatui TUI | | `config` | โœ… | โœ… | - | Read/write config | | `channels` | โœ… | โŒ | P2 | Channel management | | `models` | โœ… | ๐Ÿšง | - | Model selector in TUI | | `status` | โœ… | โœ… | - | System status (enriched session details) | | `agents` | โœ… | โŒ | P3 | Multi-agent management | | `sessions` | โœ… | โŒ | P3 | Session listing (shows subagent models) | | `memory` | โœ… | โœ… | - | Memory search CLI | | `skills` | โœ… | โœ… | - | Skills tools + web API endpoints (install, list, activate) | | `pairing` | โœ… | โœ… | - | list/approve, account selector | | `nodes` | โœ… | โŒ | P3 | Device management, remove/clear flows | | `plugins` | โœ… | โŒ | P3 | Plugin management | | `hooks` | โœ… | โœ… | P2 | Lifecycle hooks | | `cron` | โœ… | โŒ | P2 | Scheduled jobs (model/thinking fields in edit) | | `webhooks` | โœ… | โŒ | P3 | Webhook config | | `message send` | โœ… | โŒ | P2 | Send to channels | | `browser` | โœ… | โŒ | P3 | Browser automation | | `sandbox` | โœ… | โœ… | - | WASM sandbox | | `doctor` | โœ… | โŒ | P2 | Diagnostics | | `logs` | โœ… | โŒ | P3 | Query logs | | `update` | โœ… | โŒ | P3 | Self-update | | `completion` | โœ… | โœ… | - | Shell completion | | `/subagents spawn` | โœ… | โŒ | P3 | Spawn subagents from chat | | `/export-session` | โœ… | โŒ | P3 | Export current session transcript | ### Owner: _Unassigned_ --- ## 5. Agent System | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Pi agent runtime | โœ… | โž– | IronClaw uses custom runtime | | RPC-based execution | โœ… | โœ… | Orchestrator/worker pattern | | Multi-provider failover | โœ… | โœ… | `FailoverProvider` tries providers sequentially on retryable errors | | Per-sender sessions | โœ… | โœ… | | | Global sessions | โœ… | โŒ | Optional shared context | | Session pruning | โœ… | โŒ | Auto cleanup old sessions | | Context compaction | โœ… | โœ… | Auto summarization | | Post-compaction read audit | โœ… | โŒ | Layer 3: workspace rules appended to summaries | | Post-compaction context injection | โœ… | โŒ | Workspace context as system event | | Custom system prompts | โœ… | โœ… | Template variables, safety guardrails | | Skills (modular capabilities) | โœ… | โœ… | Prompt-based skills with trust gating, attenuation, activation criteria, catalog, selector | | Skill routing blocks | โœ… | ๐Ÿšง | ActivationCriteria (keywords, patterns, tags) but no "Use when / Don't use when" blocks | | Skill path compaction | โœ… | โŒ | ~ prefix to reduce prompt tokens | | Thinking modes (low/med/high) | โœ… | โŒ | Configurable reasoning depth | | Per-model thinkingDefault override | โœ… | โŒ | Override thinking level per model | | Block-level streaming | โœ… | โŒ | | | Tool-level streaming | โœ… | โŒ | | | Z.AI tool_stream | โœ… | โŒ | Real-time tool call streaming | | Plugin tools | โœ… | โœ… | WASM tools | | Tool policies (allow/deny) | โœ… | โœ… | | | Exec approvals (`/approve`) | โœ… | โœ… | TUI approval overlay | | Elevated mode | โœ… | โŒ | Privileged execution | | Subagent support | โœ… | โœ… | Task framework | | `/subagents spawn` command | โœ… | โŒ | Spawn from chat | | Auth profiles | โœ… | โŒ | Multiple auth strategies | | Generic API key rotation | โœ… | โŒ | Rotate keys across providers | | Stuck loop detection | โœ… | โŒ | Exponential backoff on stuck agent loops | | llms.txt discovery | โœ… | โŒ | Auto-discover site metadata | | Multiple images per tool call | โœ… | โŒ | Single tool call, multiple images | | URL allowlist (web_search/fetch) | โœ… | โŒ | Restrict web tool targets | | suppressToolErrors config | โœ… | โŒ | Hide tool errors from user | | Intent-first tool display | โœ… | โŒ | Details and exec summaries | | Transcript file size in status | โœ… | โŒ | Show size in session status | ### Owner: _Unassigned_ --- ## 6. Model & Provider Support | Provider | OpenClaw | IronClaw | Priority | Notes | |----------|----------|----------|----------|-------| | NEAR AI | โœ… | โœ… | - | Primary provider | | Anthropic (Claude) | โœ… | ๐Ÿšง | - | Via NEAR AI proxy; Opus 4.5, Sonnet 4, Sonnet 4.6 | | OpenAI | โœ… | ๐Ÿšง | - | Via NEAR AI proxy | | AWS Bedrock | โœ… | โŒ | P3 | | | Google Gemini | โœ… | โŒ | P3 | | | NVIDIA API | โœ… | โŒ | P3 | New provider | | OpenRouter | โœ… | โœ… | - | Via OpenAI-compatible provider (RigAdapter) | | Tinfoil | โŒ | โœ… | - | Private inference provider (IronClaw-only) | | OpenAI-compatible | โŒ | โœ… | - | Generic OpenAI-compatible endpoint (RigAdapter) | | Ollama (local) | โœ… | โœ… | - | via `rig::providers::ollama` (full support) | | Perplexity | โœ… | โŒ | P3 | Freshness parameter for web_search | | MiniMax | โœ… | โŒ | P3 | Regional endpoint selection | | GLM-5 | โœ… | โŒ | P3 | | | node-llama-cpp | โœ… | โž– | - | N/A for Rust | | llama.cpp (native) | โŒ | ๐Ÿ”ฎ | P3 | Rust bindings | ### Model Features | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Auto-discovery | โœ… | โŒ | | | Failover chains | โœ… | โœ… | `FailoverProvider` with configurable `fallback_model` | | Cooldown management | โœ… | โœ… | Lock-free per-provider cooldown in `FailoverProvider` | | Per-session model override | โœ… | โœ… | Model selector in TUI | | Model selection UI | โœ… | โœ… | TUI keyboard shortcut | | Per-model thinkingDefault | โœ… | โŒ | Override thinking level per model in config | | 1M context beta header | โœ… | โŒ | Anthropic extended context support | ### Owner: _Unassigned_ --- ## 7. Media Handling | Feature | OpenClaw | IronClaw | Priority | Notes | |---------|----------|----------|----------|-------| | WIT inbound-attachment type | N/A | โœ… | P1 | `inbound-attachment` record in channel-host (id, mime_type, filename, size_bytes, source_url, storage_key, extracted_text) | | WIT outbound attachment type | N/A | โœ… | P1 | `attachment` record in channel (filename, mime_type, data) on `agent-response` | | WIT on-broadcast export | N/A | โœ… | P1 | Proactive message sending without prior incoming message | | IncomingMessage attachments | N/A | โœ… | P1 | `IncomingAttachment` struct on `IncomingMessage`, populated from WASM channels | | OutgoingResponse attachments | N/A | โœ… | P1 | File paths on `OutgoingResponse`, read from disk and sent as WIT attachments | | Attachment security (size/MIME) | N/A | โœ… | P1 | Inbound: max 10, 20MB total, MIME allowlist. Outbound: 50MB total | | Telegram media parsing | โœ… | โœ… | P1 | Photo, document, audio, video, voice, sticker parsed and emitted as attachments | | Telegram media sending | โœ… | โœ… | P1 | sendPhoto/sendDocument multipart upload, auto photoโ†’document fallback >10MB | | Slack file parsing | โœ… | โœ… | P1 | `files` array from Events API parsed into attachments | | WhatsApp media parsing | โœ… | โœ… | P1 | Image, audio, video, document parsed with caption as extracted_text | | Discord attachment parsing | โœ… | โŒ | P2 | Discord interaction payloads don't include file attachments (needs message events) | | HTTP tool save_to | N/A | โœ… | P1 | Download binary files to /tmp/ for attachment sending (50MB limit, path traversal protection) | | Credential env var fallback | N/A | โœ… | P2 | Channels can use env vars (e.g., TELEGRAM_BOT_TOKEN) when secrets store not configured | | Image processing (Sharp) | โœ… | โŒ | P2 | Resize, format convert | | Configurable image resize dims | โœ… | โŒ | P2 | Per-agent dimension config | | Multiple images per tool call | โœ… | โŒ | P2 | Single tool invocation, multiple images | | Audio transcription | โœ… | โŒ | P2 | | | Video support | โœ… | โŒ | P3 | | | PDF parsing | โœ… | โŒ | P2 | pdfjs-dist | | MIME detection | โœ… | โœ… | P2 | MIME allowlist in host validates attachment types | | Media caching | โœ… | โŒ | P3 | | | Vision model integration | โœ… | โŒ | P2 | Image understanding | | TTS (Edge TTS) | โœ… | โŒ | P3 | Text-to-speech | | TTS (OpenAI) | โœ… | โŒ | P3 | | | Incremental TTS playback | โœ… | โŒ | P3 | iOS progressive playback | | Sticker-to-image | โœ… | โœ… | P3 | Telegram stickers emitted as image/webp attachments | ### Owner: _Unassigned_ --- ## 8. Plugin & Extension System | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Dynamic loading | โœ… | โœ… | WASM modules | | Manifest validation | โœ… | โœ… | WASM metadata | | HTTP path registration | โœ… | โŒ | Plugin routes | | Workspace-relative install | โœ… | โœ… | ~/.ironclaw/tools/ | | Channel plugins | โœ… | โœ… | WASM channels | | Auth plugins | โœ… | โŒ | | | Memory plugins | โœ… | โŒ | Custom backends | | Tool plugins | โœ… | โœ… | WASM tools | | Hook plugins | โœ… | โœ… | Declarative hooks from extension capabilities | | Provider plugins | โœ… | โŒ | | | Plugin CLI (`install`, `list`) | โœ… | โœ… | `tool` subcommand | | ClawHub registry | โœ… | โŒ | Discovery | | `before_agent_start` hook | โœ… | โŒ | modelOverride/providerOverride support | | `before_message_write` hook | โœ… | โŒ | Pre-write message interception | | `llm_input`/`llm_output` hooks | โœ… | โŒ | LLM payload inspection | ### Owner: _Unassigned_ --- ## 9. Configuration System | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Primary config file | โœ… `~/.openclaw/openclaw.json` | โœ… `.env` | Different formats | | JSON5 support | โœ… | โŒ | Comments, trailing commas | | YAML alternative | โœ… | โŒ | | | Environment variable interpolation | โœ… | โœ… | `${VAR}` | | Config validation/schema | โœ… | โœ… | Type-safe Config struct | | Hot-reload | โœ… | โŒ | | | Legacy migration | โœ… | โž– | | | State directory | โœ… `~/.openclaw-state/` | โœ… `~/.ironclaw/` | | | Credentials directory | โœ… | โœ… | Session files | | Full model compat fields in schema | โœ… | โŒ | pi-ai model compat exposed in config | ### Owner: _Unassigned_ --- ## 10. Memory & Knowledge System | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Vector memory | โœ… | โœ… | pgvector | | Session-based memory | โœ… | โœ… | | | Hybrid search (BM25 + vector) | โœ… | โœ… | RRF algorithm | | Temporal decay (hybrid search) | โœ… | โŒ | Opt-in time-based scoring factor | | MMR re-ranking | โœ… | โŒ | Maximal marginal relevance for result diversity | | LLM-based query expansion | โœ… | โŒ | Expand FTS queries via LLM | | OpenAI embeddings | โœ… | โœ… | | | Gemini embeddings | โœ… | โŒ | | | Local embeddings | โœ… | โŒ | | | SQLite-vec backend | โœ… | โŒ | IronClaw uses PostgreSQL | | LanceDB backend | โœ… | โŒ | Configurable auto-capture max length | | QMD backend | โœ… | โŒ | | | Atomic reindexing | โœ… | โœ… | | | Embeddings batching | โœ… | โœ… | `embed_batch` on EmbeddingProvider trait | | Citation support | โœ… | โŒ | | | Memory CLI commands | โœ… | โœ… | `memory search/read/write/tree/status` CLI subcommands | | Flexible path structure | โœ… | โœ… | Filesystem-like API | | Identity files (AGENTS.md, etc.) | โœ… | โœ… | | | Daily logs | โœ… | โœ… | | | Heartbeat checklist | โœ… | โœ… | HEARTBEAT.md | ### Owner: _Unassigned_ --- ## 11. Mobile Apps | Feature | OpenClaw | IronClaw | Priority | Notes | |---------|----------|----------|----------|-------| | iOS app (SwiftUI) | โœ… | ๐Ÿšซ | - | Out of scope initially | | Android app (Kotlin) | โœ… | ๐Ÿšซ | - | Out of scope initially | | Apple Watch companion | โœ… | ๐Ÿšซ | - | Send/receive messages MVP | | Gateway WebSocket client | โœ… | ๐Ÿšซ | - | | | Camera/photo access | โœ… | ๐Ÿšซ | - | | | Voice input | โœ… | ๐Ÿšซ | - | | | Push-to-talk | โœ… | ๐Ÿšซ | - | | | Location sharing | โœ… | ๐Ÿšซ | - | | | Node pairing | โœ… | ๐Ÿšซ | - | | | APNs push notifications | โœ… | ๐Ÿšซ | - | Wake disconnected nodes before invoke | | Share to OpenClaw (iOS) | โœ… | ๐Ÿšซ | - | iOS share sheet integration | | Background listening toggle | โœ… | ๐Ÿšซ | - | iOS background audio | ### Owner: _Unassigned_ (if ever prioritized) --- ## 12. macOS App | Feature | OpenClaw | IronClaw | Priority | Notes | |---------|----------|----------|----------|-------| | SwiftUI native app | โœ… | ๐Ÿšซ | - | Out of scope | | Menu bar presence | โœ… | ๐Ÿšซ | - | Animated menubar icon | | Bundled gateway | โœ… | ๐Ÿšซ | - | | | Canvas hosting | โœ… | ๐Ÿšซ | - | Agent-controlled panel with placement/resizing | | Voice wake | โœ… | ๐Ÿšซ | - | Overlay, mic picker, language selection, live meter | | Voice wake overlay | โœ… | ๐Ÿšซ | - | Partial transcripts, adaptive delays, dismiss animations | | Push-to-talk hotkey | โœ… | ๐Ÿšซ | - | System-wide hotkey | | Exec approval dialogs | โœ… | โœ… | - | TUI overlay | | iMessage integration | โœ… | ๐Ÿšซ | - | | | Instances tab | โœ… | ๐Ÿšซ | - | Presence beacons across instances | | Agent events debug window | โœ… | ๐Ÿšซ | - | Real-time event inspector | | Sparkle auto-updates | โœ… | ๐Ÿšซ | - | Appcast distribution | ### Owner: _Unassigned_ (if ever prioritized) --- ## 13. Web Interface | Feature | OpenClaw | IronClaw | Priority | Notes | |---------|----------|----------|----------|-------| | Control UI Dashboard | โœ… | โœ… | - | Web gateway with chat, memory, jobs, logs, extensions | | Channel status view | โœ… | ๐Ÿšง | P2 | Gateway status widget, full channel view pending | | Agent management | โœ… | โŒ | P3 | | | Model selection | โœ… | โœ… | - | TUI only | | Config editing | โœ… | โŒ | P3 | | | Debug/logs viewer | โœ… | โœ… | - | Real-time log streaming with level/target filters | | WebChat interface | โœ… | โœ… | - | Web gateway chat with SSE/WebSocket | | Canvas system (A2UI) | โœ… | โŒ | P3 | Agent-driven UI, improved asset resolution | | Control UI i18n | โœ… | โŒ | P3 | English, Chinese, Portuguese | | WebChat theme sync | โœ… | โŒ | P3 | Sync with system dark/light mode | | Partial output on abort | โœ… | โŒ | P2 | Preserve partial output when aborting | ### Owner: _Unassigned_ --- ## 14. Automation | Feature | OpenClaw | IronClaw | Priority | Notes | |---------|----------|----------|----------|-------| | Cron jobs | โœ… | โœ… | - | Routines with cron trigger | | Cron stagger controls | โœ… | โŒ | P3 | Default stagger for scheduled jobs | | Cron finished-run webhook | โœ… | โŒ | P3 | Webhook on job completion | | Timezone support | โœ… | โœ… | - | Via cron expressions | | One-shot/recurring jobs | โœ… | โœ… | - | Manual + cron triggers | | Channel health monitor | โœ… | โŒ | P2 | Auto-restart with configurable interval | | `beforeInbound` hook | โœ… | โœ… | P2 | | | `beforeOutbound` hook | โœ… | โœ… | P2 | | | `beforeToolCall` hook | โœ… | โœ… | P2 | | | `before_agent_start` hook | โœ… | โŒ | P2 | Model/provider override | | `before_message_write` hook | โœ… | โŒ | P2 | Pre-write interception | | `onMessage` hook | โœ… | โœ… | - | Routines with event trigger | | `onSessionStart` hook | โœ… | โœ… | P2 | | | `onSessionEnd` hook | โœ… | โœ… | P2 | | | `transcribeAudio` hook | โœ… | โŒ | P3 | | | `transformResponse` hook | โœ… | โœ… | P2 | | | `llm_input`/`llm_output` hooks | โœ… | โŒ | P3 | LLM payload inspection | | Bundled hooks | โœ… | โœ… | P2 | Audit + declarative rule/webhook hooks | | Plugin hooks | โœ… | โœ… | P3 | Registered from WASM `capabilities.json` | | Workspace hooks | โœ… | โœ… | P2 | `hooks/hooks.json` and `hooks/*.hook.json` | | Outbound webhooks | โœ… | โœ… | P2 | Fire-and-forget lifecycle event delivery | | Heartbeat system | โœ… | โœ… | - | Periodic execution | | Gmail pub/sub | โœ… | โŒ | P3 | | ### Owner: _Unassigned_ --- ## 15. Security Features | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Gateway token auth | โœ… | โœ… | Bearer token auth on web gateway | | Device pairing | โœ… | โŒ | | | Tailscale identity | โœ… | โŒ | | | Trusted-proxy auth | โœ… | โŒ | Header-based reverse proxy auth | | OAuth flows | โœ… | ๐Ÿšง | NEAR AI OAuth | | DM pairing verification | โœ… | โœ… | ironclaw pairing approve, host APIs | | Allowlist/blocklist | โœ… | ๐Ÿšง | allow_from + pairing store | | Per-group tool policies | โœ… | โŒ | | | Exec approvals | โœ… | โœ… | TUI overlay | | TLS 1.3 minimum | โœ… | โœ… | reqwest rustls | | SSRF protection | โœ… | โœ… | WASM allowlist | | SSRF IPv6 transition bypass block | โœ… | โŒ | Block IPv4-mapped IPv6 bypasses | | Cron webhook SSRF guard | โœ… | โŒ | SSRF checks on webhook delivery | | Loopback-first | โœ… | ๐Ÿšง | HTTP binds 0.0.0.0 | | Docker sandbox | โœ… | โœ… | Orchestrator/worker containers | | Podman support | โœ… | โŒ | Alternative to Docker | | WASM sandbox | โŒ | โœ… | IronClaw innovation | | Sandbox env sanitization | โœ… | ๐Ÿšง | Shell tool scrubs env vars (secret detection); docker container env sanitization partial | | Tool policies | โœ… | โœ… | | | Elevated mode | โœ… | โŒ | | | Safe bins allowlist | โœ… | โŒ | Hardened path trust | | LD*/DYLD* validation | โœ… | โŒ | | | Path traversal prevention | โœ… | โœ… | Including config includes (OC-06) | | Credential theft via env injection | โœ… | ๐Ÿšง | Shell env scrubbing + command injection detection; no full OC-09 defense | | Session file permissions (0o600) | โœ… | โœ… | Session token file set to 0o600 in llm/session.rs | | Skill download path restriction | โœ… | โŒ | Prevent arbitrary write targets | | Webhook signature verification | โœ… | โœ… | | | Media URL validation | โœ… | โŒ | | | Prompt injection defense | โœ… | โœ… | Pattern detection, sanitization | | Leak detection | โœ… | โœ… | Secret exfiltration | | Dangerous tool re-enable warning | โœ… | โŒ | Warn when gateway.tools.allow re-enables HTTP tools | ### Owner: _Unassigned_ --- ## 16. Development & Build System | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Primary language | TypeScript | Rust | Different ecosystems | | Build tool | tsdown | cargo | | | Type checking | TypeScript/tsgo | rustc | | | Linting | Oxlint | clippy | | | Formatting | Oxfmt | rustfmt | | | Package manager | pnpm | cargo | | | Test framework | Vitest | built-in | | | Coverage | V8 | tarpaulin/llvm-cov | | | CI/CD | GitHub Actions | GitHub Actions | | | Pre-commit hooks | prek | - | Consider adding | | Docker: Chromium + Xvfb | โœ… | โŒ | Optional browser in container | | Docker: init scripts | โœ… | โŒ | /openclaw-init.d/ support | | Browser: extraArgs config | โœ… | โŒ | Custom Chrome launch arguments | ### Owner: _Unassigned_ --- ## Implementation Priorities ### P0 - Core (Already Done) - โœ… TUI channel with approval overlays - โœ… HTTP webhook channel - โœ… DM pairing (ironclaw pairing list/approve, host APIs) - โœ… WASM tool sandbox - โœ… Workspace/memory with hybrid search + embeddings batching - โœ… Prompt injection defense - โœ… Heartbeat system - โœ… Session management - โœ… Context compaction - โœ… Model selection - โœ… Gateway control plane + WebSocket - โœ… Web Control UI (chat, memory, jobs, logs, extensions, routines) - โœ… WebChat channel (web gateway) - โœ… Slack channel (WASM tool) - โœ… Telegram channel (WASM tool, MTProto) - โœ… Docker sandbox (orchestrator/worker) - โœ… Cron job scheduling (routines) - โœ… CLI subcommands (onboard, config, status, memory) - โœ… Gateway token auth - โœ… Skills system (prompt-based with trust gating, attenuation, activation criteria) - โœ… Session file permissions (0o600) - โœ… Memory CLI commands (search, read, write, tree, status) - โœ… Shell env scrubbing + command injection detection - โœ… Tinfoil private inference provider - โœ… OpenAI-compatible / OpenRouter provider support ### P1 - High Priority - โŒ Slack channel (real implementation) - โœ… Telegram channel (WASM, DM pairing, caption, /start) - โŒ WhatsApp channel - โœ… Multi-provider failover (`FailoverProvider` with retryable error classification) - โœ… Hooks system (core lifecycle hooks + bundled/plugin/workspace hooks + outbound webhooks) ### P2 - Medium Priority - โŒ Media handling (images, PDFs) - โœ… Ollama/local model support (via rig::providers::ollama) - โŒ Configuration hot-reload - โŒ Webhook trigger endpoint in web gateway - โŒ Channel health monitor with auto-restart - โŒ Partial output preservation on abort ### P3 - Lower Priority - โŒ Discord channel - โŒ Matrix channel - โŒ Other messaging platforms - โŒ TTS/audio features - โŒ Video support - ๐Ÿšง Skills routing blocks (activation criteria exist, but no "Use when / Don't use when") - โŒ Plugin registry - โŒ Streaming (block/tool/Z.AI tool_stream) - โŒ Memory: temporal decay, MMR re-ranking, query expansion - โŒ Control UI i18n - โŒ Stuck loop detection --- ## How to Contribute 1. **Claim a section**: Edit this file and add your name/handle to the "Owner" field 2. **Create a tracking issue**: Link to GitHub issue for the feature area 3. **Update status**: Change โŒ to ๐Ÿšง when starting, โœ… when complete 4. **Add notes**: Document any design decisions or deviations ### Coordination - Each major section should have one owner to avoid conflicts - Owners can delegate sub-features to others - Update this file as part of your PR --- ## Deviations from OpenClaw IronClaw intentionally differs from OpenClaw in these ways: 1. **Rust vs TypeScript**: Native performance, memory safety, single binary distribution 2. **WASM sandbox vs Docker**: Lighter weight, faster startup, capability-based security 3. **PostgreSQL + libSQL vs SQLite**: Dual-backend (production PG + embedded libSQL for zero-dep local mode) 4. **NEAR AI focus**: Primary provider with session-based auth 5. **No mobile/desktop apps**: Focus on server-side and CLI initially 6. **WASM channels**: Novel extension mechanism not in OpenClaw 7. **Tinfoil private inference**: IronClaw-only provider for private/encrypted inference 8. **GitHub WASM tool**: Native GitHub integration as WASM tool 9. **Prompt-based skills**: Different approach than OpenClaw capability bundles (trust gating, attenuation) These are intentional architectural choices, not gaps to be filled.