# 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) **Last reviewed against OpenClaw PRs:** 2026-05-02 (merged 2026-03-11 through 2026-04-30, OpenClaw releases 2026.3.11 โ†’ 2026.4.30) --- ## 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 | โœ… | โœ… | Explicit instance owner scope for persistent routines, secrets, jobs, settings, extensions, and workspace memory | | Multi-agent routing | โœ… | โŒ | Workspace isolation per-agent | | Session-based messaging | โœ… | โœ… | Owner scope is separate from sender identity and conversation scope | | 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 + /healthz + /readyz, with channel-backed readiness probes | | `doctor` diagnostics | โœ… | ๐Ÿšง | 16 checks: settings, LLM, DB, embeddings, routines, gateway, MCP, skills, secrets, service, Docker daemon, tunnel binaries | | Agent event broadcast | โœ… | ๐Ÿšง | SSE broadcast manager exists (SseManager). Reborn has a transport-neutral projection EventStreamManager with access/admission/rebase/lag/redaction contracts, product-safe capability activity events plus bounded display-preview events, live thinking projection updates, and the local-dev WebUI serve path now wires it into `/events` and `/ws` through the WebUI product facade; local-dev WebUI also persists terminal tool previews as ordered transcript items and includes their timeline message ids on live preview events. Production durable/live fanout remains follow-up work. | | 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; `trustedProxy.allowLoopback` for same-host reverse proxies | | APNs push pipeline | โœ… | โŒ | Wake disconnected iOS nodes via push; iOS push relay with App Attest verification | | Oversized payload guard | โœ… | ๐Ÿšง | HTTP webhook has 64KB body limit + Content-Length check; no chat.history cap | | Pre-prompt context diagnostics | โœ… | ๐Ÿšง | Token breakdown logged before LLM call (conversational dispatcher path); other LLM entry points not yet covered | | OpenAI-compat `/v1/models`, `/v1/embeddings` | โœ… | โŒ | Discovery + embeddings on top of `/v1/chat/completions` | | Outbound proxy routing | โœ… | โŒ | `proxy.enabled` + `proxy.proxyUrl`/`OPENCLAW_PROXY_URL` with strict http forward-proxy validation, loopback bypass; `openclaw proxy validate` | | Diagnostics export bundle | โœ… | โŒ | Sanitized logs/status/health/config/stability snapshots for bug reports | | Startup diagnostics timeline | โœ… | โŒ | Opt-in lifecycle/plugin-load phase tracing | | Event-loop readiness in `/readyz` | โœ… | โŒ | Event-loop delay (p99/max), utilization, CPU ratio, `degraded` flag | | OpenTelemetry exporter pipeline | โœ… | โŒ | Bundled `diagnostics-otel` plugin: model-call, tool, exec, outbound, context-assembly, memory pressure, harness lifecycle spans/metrics; W3C traceparent propagation; signal-specific OTLP endpoints | | Prometheus exporter | โœ… | โŒ | Bundled `diagnostics-prometheus` plugin with protected scrape route | | Stability snapshots / payload-free liveness | โœ… | โŒ | Default-on stability recording, event-loop delay/CPU snapshots in stability bundles | ### 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; host resolves owner scope vs sender identity | | WhatsApp | โœ… | โŒ | P1 | Baileys (Web), same-phone mode with echo detection | | Telegram | โœ… | โœ… | - | WASM channel(MTProto), polling-first setup, DM pairing, caption, manifest-declared `/start`, bot_username, DM topics, web/UI ownership claim flow, owner-scoped persistence | | Discord | โœ… | ๐Ÿšง | P2 | Gateway `MESSAGE_CREATE` intake restored via websocket queue + WASM poll; Gateway DMs now respect pairing; thread parent binding inheritance and reply/thread parity still incomplete | | 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 | WASM channel with Event Subscription v2.0; Bitable/Docx tools planned | | WeCom | โœ… | ๐Ÿšง | P2 | Standalone WASM channel focused on WeCom intelligent bot WebSocket inbound/outbound, pairing, group sessions, inbound media hydration, and direct Bot media upload/send; self-built app callback + Agent API deferred | | LINE | โœ… | โŒ | P3 | | | WeChat (iLink bot) | โœ… | ๐Ÿšง | P2 | Packaged extension-first channel, single-account DM flow with QR login, typing, image send/receive, inbound file/voice/video handling, outbound image/video/file media, and SILK-to-WAV voice fallback; multi-account remains deferred | | WebChat | โœ… | โœ… | - | Web gateway chat | | Matrix | โœ… | โŒ | P3 | E2EE support | | Mattermost | โœ… | โŒ | P3 | Emoji reactions, interactive buttons, model picker | | Google Chat | โœ… | โŒ | P3 | | | MS Teams | โœ… | โŒ | P3 | | | Twitch | โœ… | โŒ | P3 | | | Voice Call | โœ… | โŒ | P3 | Twilio/Telnyx/Plivo, stale call reaper, `voicecall setup`/`smoke`, `openclaw_agent_consult` realtime tool, agent-scoped voice agents, dedicated STT/TTS providers (Deepgram, ElevenLabs, Mistral, OpenAI/xAI realtime) | | Google Meet | โœ… | โŒ | P3 | Bundled participant plugin: Google OAuth, explicit URL joins, Chrome+Twilio realtime transports, paired chrome-node support, attendance/artifact exports, calendar-backed exports, `googlemeet doctor` | | Yuanbao (Tencent) | โœ… | โŒ | P3 | External plugin (`openclaw-plugin-yuanbao`) for WebSocket bot DMs and group chats | | WeCom | โœ… | โŒ | P3 | Official external plugin pinned to npm release | | Nostr | โœ… | โŒ | P3 | | ### Telegram-Specific Features (since Feb 2025) | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Forum topic creation | โœ… | โŒ | Create topics in forum groups; `message thread create` CLI; learns human topic names from service messages | | 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; cron `--thread-id`, explicit `:topic:` precedence | | DM topics support | โœ… | โŒ | Agent/topic bindings in DMs and agent-scoped SessionKeys | | Persistent ACP topic binding | โœ… | โŒ | ACP harness sessions can pin to Telegram forum or DM topics | | sendVoice (voice note replies) | โœ… | โœ… | audio/ogg attachments sent as voice notes; prerequisite for TTS (#90) | | Native quote replies + retry | โœ… | โŒ | `reply_parameters.quote` with fallback when `QUOTE_TEXT_INVALID` | | Polling stall watchdog + liveness | โœ… | โŒ | Configurable `pollingStallThresholdMs`, status/doctor warnings, dedicated `getUpdates` confirmation | | HTML mode + chunking | โœ… | โŒ | Long HTML messages chunked, plain-text fallback | | Photo dimension preflight | โœ… | โŒ | Falls back to document send when photo dims invalid | | Webhook-mode setWebhook recovery | โœ… | โŒ | Retries `setWebhook` after recoverable network failures | ### 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 | | Persistent components/forms across restarts | โœ… | โŒ | Active buttons/selects/forms keep working across Gateway restarts until expiry | | `autoArchiveDuration` per-channel | โœ… | โŒ | 1h/1d/3d/1w archive duration for auto-created threads | | Auto thread name generation | โœ… | โŒ | LLM-generated concise titles (`autoThreadName: "generated"`) | | Voice channel responses | โœ… | โŒ | `channels.discord.voice.model` LLM override; voice mode auto-rejoin after RESUMED | | CJK reply chunking | โœ… | โŒ | Splits long CJK replies at punctuation/code-point-safe boundaries | ### 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 | โœ… | ๐Ÿšง | Reply participation memory is restart-stable and TTL-bounded; once the bot joins a thread, follow-ups inherit channel visibility. Full thread-level ownership tracking is still missing | | Download-file action | โœ… | โŒ | On-demand attachment downloads via message actions | | App Home tab views | โœ… | โŒ | Default Home view on `app_home_opened`, included in setup manifests | | Persistent thread participation | โœ… | โŒ | Bot-participated threads tracked across restarts | | Block Kit limit hardening | โœ… | โŒ | Auto-truncates buttons/selects/values, drops oversized link URLs while preserving valid blocks | | Socket Mode pong tuning | โœ… | โŒ | `clientPingTimeout`, `serverPingTimeout`, `pingPongLoggingEnabled` | | Native model picker (`/models`) | โœ… | โŒ | Provider/model chooser via interactive components | ### Mattermost-Specific Features (since Mar 2026) | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Interactive buttons | โœ… | โŒ | Clickable message buttons with signed callback flow; slash callback validation hardened | | Interactive model picker | โœ… | โŒ | In-channel provider/model chooser | | `replyToMode` thread reply control | โœ… | โŒ | Top-level posts can start thread-scoped sessions; `all`/`first`/never modes | | Streaming draft preview | โœ… | โŒ | Thinking, tool activity, partial reply text streamed into a single draft post | | WebSocket ping/pong keepalives | โœ… | โŒ | Stale TCP drops reconnect instead of leaving monitoring idle | | DM-vs-channel routing fixes | โœ… | โŒ | DM replies stay top-level; channel/group reply roots preserved | ### Feishu/Lark-Specific Features (since Mar 2026) | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Doc/table actions | โœ… | โŒ | `feishu_doc` supports tables, positional insert, color_text, image upload, and file upload | | Rich-text embedded media extraction | โœ… | โŒ | Pull video/media attachments from post messages | | Native interactive cards | โœ… | โŒ | Outgoing replies sent as native cards with clickable buttons | | Schema 2.0 card action callbacks | โœ… | โŒ | Accept new `context.open_chat_id` shape | | Streaming cards | โœ… | โŒ | Single live card per turn with throttled edits, topic-thread streaming | | WebSocket retry/backoff | โœ… | โŒ | Monitor-owned reconnects after SDK retry exhaustion | | Voice-note transcription | โœ… | โŒ | Inbound voice via shared media audio path | | Bitable placeholder cleanup | โœ… | โŒ | Remove default-valued rows in create-app cleanup | ### QQBot-Specific Features (since Mar 2026) | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Engine architecture rewrite | โœ… | โŒ | Self-contained engine with QR onboarding, native `/bot-approve`, per-account resource stacks, credential backup/restore | | Group chat full support | โœ… | โŒ | History tracking, @-mention gating, activation modes, per-group config, FIFO queue | | C2C `stream_messages` | โœ… | โŒ | StreamingController lifecycle manager | | Chunked media upload | โœ… | โŒ | Unified `sendMedia` for large files | ### BlueBubbles-Specific Features (since Mar 2026) | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Persistent inbound GUID dedupe | โœ… | โŒ | File-backed cache survives restart, 7-12x cron-duplicate fix | | Catchup replay | โœ… | โŒ | Per-account cursor + `/api/v1/message/query?after=` pass on restart | | Reply-context API fallback | โœ… | โŒ | Opt-in fetch for reply-context cache misses | | TTS opus-in-CAF voice memos | โœ… | โŒ | Pre-transcoded native voice-memo bubbles via `tts.voice.preferAudioFileFormat` | | Per-group `systemPrompt` injection | โœ… | โŒ | Group-specific behavioral instructions with `*` wildcard | | Per-message catchup retry ceiling | โœ… | โŒ | `catchup.maxFailureRetries` to skip persistently failing messages | ### Channel Features | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | DM pairing codes | โœ… | โœ… | `ironclaw pairing list/approve`, host APIs | | Allowlist/blocklist | โœ… | ๐Ÿšง | `allow_from` + pairing store + hardened command/group allowlists | | 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/topic | | Per-channel media limits | โœ… | ๐Ÿšง | Caption support plus `mediaMaxMb` enforcement for WhatsApp, Telegram, and Discord | | Typing indicators | โœ… | ๐Ÿšง | TUI + channel typing, with configurable silence timeout; richer parity pending | | Per-channel ackReaction config | โœ… | โŒ | Customizable acknowledgement reactions/scopes | | Group session priming | โœ… | โŒ | Member roster injected for context | | Sender_id in trusted metadata | โœ… | โŒ | Exposed in system metadata | | Per-group `systemPrompt` injection | โœ… | โŒ | Per-group/per-direct system prompts injected via `GroupSystemPrompt` (Telegram, Discord, WhatsApp, BlueBubbles) | | Visible reply enforcement | โœ… | โŒ | `messages.visibleReplies` requires output via `message(action=send)`; group-scope override available | | Active-run steering queue | โœ… | โŒ | `messages.queue` `steer` mode (default) drains queued messages at next model boundary; `queue` legacy one-at-a-time | | Tool-progress streaming into previews | โœ… | โŒ | Tool progress shown in live preview edits (Discord/Slack/Telegram/Mattermost/Matrix) | | `dmPolicy="open"` semantics | โœ… | ๐Ÿšง | Public open-DM only with effective wildcard; pairing-store senders no longer count for DM audits (OpenClaw fixed across all channels) | ### 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 plus validate/path helpers | | `backup` | โœ… | โŒ | P3 | Create/verify local backup archives | | `channels` | โœ… | ๐Ÿšง | P2 | Reborn `channels list` stays visible in `--help`/completions but exits nonzero as unimplemented (stub disabled); `enable`/`disable`/`status` deferred pending config source unification | | `models` | โœ… | ๐Ÿšง | P1 | Reborn now uses a shared composition provider-admin facade for CLI `models list []` (`--verbose`, `--json`), `models status`, `models set `, `models set-provider [--model model]`, plus Product Workflow typed `model set-provider ...` parsing without touching v1 state. Remaining: live model fetching, OAuth/API-key login flows, and wiring the provider-admin ProductCommandService into product surfaces. | | `status` | โœ… | โœ… | - | System status (enriched session details) | | `agents` | โœ… | โŒ | P3 | Multi-agent management | | `sessions` | โœ… | โŒ | P3 | Session listing (shows subagent models) | | `memory` | โœ… | โœ… | - | Memory search CLI | | `skills` | โœ… | โœ… | - | CLI subcommands (list, search, info) + agent tools + web API endpoints | | `pairing` | โœ… | โœ… | - | list/approve, account selector | | `nodes` | โœ… | โŒ | P3 | Device management, remove/clear flows | | `plugins` | โœ… | โŒ | P3 | Plugin management | | `hooks` | โœ… | ๐Ÿšง | P2 | Reborn `hooks list` stays visible in `--help`/completions but exits nonzero as unimplemented (stub disabled); v1 `hooks list` supports bundled + plugin discovery, `--verbose`, `--json` | | `cron` | โœ… | ๐Ÿšง | P2 | list/create/edit/enable/disable/delete/history; TODO: `cron run`, model/thinking fields | | `webhooks` | โœ… | โŒ | P3 | Webhook config | | `message send` | โœ… | โŒ | P2 | Send to channels | | `browser` | โœ… | โŒ | P3 | Browser automation | | `sandbox` | โœ… | โœ… | - | WASM sandbox | | `doctor` | โœ… | ๐Ÿšง | P2 | 16 subsystem checks | | `logs` | โœ… | ๐Ÿšง | P3 | Reborn CLI `logs` stays visible but exits nonzero as unimplemented (stub disabled). v1: `logs` (gateway.log tail), `--follow` (SSE live stream), `--level` (get/set). WebUI v2 exposes bounded in-memory log projection at `/api/webchat/v2/logs` for non-operators and `/api/webchat/v2/operator/logs` for operators, both with level/target and run/thread/turn/tool/source scoped filters. No DB-persisted log history. | | `traces` | โž– | ๐Ÿšง | - |
  • IronClaw-native Trace Commons client MVP, not an OpenClaw parity feature.
  • Local opt-in capture, redaction, queueing, queue-status diagnostics, scoped web APIs, revocation, and periodic credit notices.
  • CLI opt-in writes the runtime/web user-scope policy that autonomous capture reads, and credentialed submit/status/revoke calls use bounded no-redirect HTTP.
  • Authenticated web paths are user-scoped and keep ingestion endpoint/credential settings out of user-managed policy updates.
  • Private TraceDAO server ingest/review/export/audit/retention/vector/credit infrastructure now lives in the standalone `tracedao-server` repository, with IronClaw retaining CLI/client integration wrappers.
| | `update` | โœ… | โŒ | P3 | Self-update; `OPENCLAW_NO_AUTO_UPDATE=1` kill-switch | | `completion` | โœ… | โœ… | - | Shell completion | | `migrate` | โœ… | โŒ | P3 | Bundled importers for Claude Code, Claude Desktop, Hermes (config, MCP servers, skills, command prompts, model providers, credentials) | | `proxy validate` | โœ… | โŒ | P3 | Verify effective proxy config, reachability, allow/deny destinations | | `plugins registry` | โœ… | โŒ | P3 | Inspect persisted plugin registry; `--refresh` repair | | `plugins deps` | โœ… | โŒ | P3 | Inspect/repair bundled plugin runtime dependencies | | `infer model run --gateway` | โœ… | โŒ | P3 | Raw model probes via Gateway; image `--file` + `--prompt` + `--timeout-ms` overrides | | `infer image describe`/`describe-many` | โœ… | โŒ | P3 | Custom vision prompts/timeouts | | `qa` (suite/telegram/credentials) | โœ… | โŒ | P3 | QA Lab CI runner with `--allow-failures` opt-out | | `voicecall setup`/`smoke`/`continue` | โœ… | โŒ | P3 | Voice call provider readiness, dry-run smoke, gateway-delegated continue | | `googlemeet doctor`/`recover-tab` | โœ… | โŒ | P3 | Meet OAuth/browser-state diagnostics, tab recovery | | `matrix verify`/`encryption setup` | โœ… | โŒ | P3 | E2EE setup, recovery key rotation, cross-signing trust | | `nodes remove` | โœ… | โŒ | P3 | Remove stale gateway-owned node pairing records | | `nodes list` (paired view) | โœ… | โŒ | P3 | Default paired-node view with pending fallback | | `cron run` / `cron edit --thread-id` | โœ… | ๐Ÿšง | P2 | Already partial; OpenClaw added cron stagger, finished-run webhook, `--failure-alert-include-skipped` | | `sessions export-trajectory` | โœ… | โŒ | P3 | Per-run trajectory bundles with redacted transcripts/runtime events/prompts | | `/subagents spawn` | โœ… | โŒ | P3 | Spawn subagents from chat | | `/export-session` | โœ… | โŒ | P3 | Export current session transcript | | `/export-trajectory` (chat) | โœ… | โŒ | P3 | Per-run exec-approved trajectory bundle, owner-only delivery | | `/diagnostics` (owner-only) | โœ… | โŒ | P3 | Owner-only diagnostics export with sensitive-data preamble | | `/codex computer-use status/install` | โœ… | โŒ | P3 | Codex desktop control setup with marketplace discovery | | `/dock-*` route switches | โœ… | โŒ | P3 | Switch active session reply route through `session.identityLinks` | | `--container` / `OPENCLAW_CONTAINER` | โœ… | โŒ | P3 | Run process commands inside running Docker/Podman container | Trace Commons incremental note: reviewer quarantine and active-learning queues now surface prioritization metadata, including `review_age_hours`, `review_escalation_state`, and `review_escalation_reasons`, so CLI non-JSON output can show SLA pressure and escalation causes during triage. DB-backed review leases now let reviewer/admin principals claim, release, claim the next available tenant-scoped quarantined trace, or claim a bounded prioritized batch through `POST /v1/review/leases/claim-next`, `POST /v1/review/leases/claim-batch`, `ironclaw traces review-lease-claim-next`, and `ironclaw traces review-lease-claim-batch`, using review escalation/SLA priority ordering before writing DB lease state and typed claim/release audit rows; they also expose lease assignment metadata in review queues, support `all`, `mine`, `available`, `active`, and `expired` lease filters in API/CLI/web operator queues, and block other reviewers from finalizing while a lease is active. Analytics can now suppress aggregate cells below a configured minimum count while reporting the suppression threshold and number of hidden buckets. Tenant token entries can now carry optional RFC3339 `expires_at`/`expires` attributes, and the ingest service can accept optional HS256 signed tenant claims that bind tenant id, actor principal, role, issuer/audience when configured, allowed consent scopes/uses, and expiry without enumerating every bearer token; claim allow-lists now constrain submission, replay exports, benchmark/ranker dataset generation, process-evaluation workers, and utility-credit jobs. Operator docs now pin production asymmetric upload-claim governance to managed issuer/key rotation with EdDSA/Ed25519, leaving static tokens and HS256 claims as internal bridge paths, and `TRACE_COMMONS_REQUIRE_EDDSA_SIGNED_TOKENS` now rejects those bridge credentials on every authenticated route when enabled. Keyed signed-token secrets and EdDSA public-key files support `kid`-selected rotation, deployments can cap signed-claim lifetimes by requiring `iat` and bounding `exp - iat`, require JWT IDs before accepting signed claims, emergency-denylist signed-claim JWT IDs by `jti`, and config status exposes only key/EdDSA-key/denylist/max-TTL/JTI-policy counts plus the EdDSA-required auth gate while submitted audit rows record only the safe auth method plus hashed principal. Retention maintenance also honors `TRACE_COMMONS_LEGAL_HOLD_RETENTION_POLICIES` so configured policy classes are skipped for new expiration and purge passes, and DB-backed maintenance runs now write durable retention job/item ledger rows for resumable expire/purge/revoke bookkeeping with admin-only API plus CLI and web-operator reads for tenant-scoped jobs and per-submission lifecycle items. Maintenance DB reconciliation now runs after the retention ledger write and reports DB retention job/item counts plus current-run retention job or item-count gaps as promotion blockers. Process-evaluation workers have a CLI submit helper for `POST /v1/workers/process-evaluation`, store bounded rubric metadata under the `process_evaluation` worker kind, mirror typed hash/count-only audit metadata, can optionally append idempotent `training_utility` delayed credit for the evaluated accepted submission using an external reference, preserve separate DB derived rows per evaluator version while feeding content-free process-evaluation analytics by label, rating, and score band without double-counting DB-backed submissions, and now require tenant policy or signed-claim evaluation-use ABAC before reading or labeling accepted trace bodies. Utility-credit workers now also require the source trace plus tenant policy or signed claim to allow the requested regression/evaluation, model-training, or ranking-training utility use before appending delayed credit. Object-primary envelope writes now use unique encrypted artifact object ids per logical snapshot so review/process-evaluation writes do not overwrite ciphertext behind older submitted-envelope object refs, terminal-trace status sync can explain retained-but-excluded delayed ledger rows without exposing them through contributor credit-event reads, web enqueue/submit and CLI queue writes reject crafted requests/envelopes that try to include message text or tool payloads disallowed by the standing policy, DB stores now reject derived rows, vector entries, and export manifest items whose object, derived, or vector refs do not belong to the same tenant/submission, periodic local credit notices now include delayed ledger deltas plus credit-event counts and a scoped durable retry outbox with safe delivery attempt hashes, CLI status sync resets credit notices when delayed-credit explanations change even without a numeric delta, and autonomous runtime capture skips ineligible current traces instead of leaving held queue files while preserving queue flush/credit notices. This push also adds local autonomous queue diagnostics/status surfaces: CLI `traces queue-status` reports readiness, bearer-token environment presence, queue/held counts, retry/manual-review/policy hold counts, next retry time, durable flush/status-sync telemetry, retryable submission failure counters, last compaction reclaimed count, duplicate envelopes removed, orphan hold sidecars removed, malformed envelopes quarantined, sanitized held-reason counts, safe queue warning aggregates, warning severity, production-promotion blocking flags, safe recommended actions, sanitized failure classes, and local credit summaries; authenticated web `/api/traces/queue-status` reports scoped queue/held diagnostics plus the same durable telemetry, and `/api/traces/credit-notice` marks due notices. Due credit notices now carry local acknowledge/snooze state: CLI `traces credit --notice --ack` and authenticated `POST /api/traces/credit-notice` acknowledgement suppress the current credit fingerprint until credit changes, while `--snooze-hours` and the matching web action suppress it until a bounded deadline without exposing trace bodies or explanation text in the fingerprint. The agent loop now runs a periodic Trace Commons queue worker for opted-in owner/active-user scopes, stores retryable submission failures as typed redacted sidecars with capped backoff, skips retry-held envelopes until due, records durable scoped telemetry for queue/status-sync attempts, writes queue JSON through atomic temp-file replacement, compacts duplicate queued contribution envelopes and orphan held sidecars before submission, quarantines malformed active queue files locally instead of blocking later valid uploads, and broadcasts returned credit notices. Diagnostics warn on schema-version, consent-policy, redaction-pipeline, trace-card-redaction-pipeline, and malformed-envelope mismatches without raw bodies or raw observed mismatch values, and classify local failures into sanitized Endpoint, Credential, Network, NetworkOffline, NetworkDns, NetworkTimeout, NetworkConnectionRefused, HttpRejection, Policy, Queue, StatusSync, Submission, and Unknown buckets. EdDSA/Ed25519 public-key verification is available through default or `kid`-selected key config and JSON/file/guarded-HTTPS keysets with optional activation windows, with safe total/active/inactive/managed EdDSA config-status counts; managed EdDSA-required mode now accepts only active managed-keyset claims with issuer/audience checks. Autonomous clients can refresh short-lived EdDSA upload claims from guarded HTTPS issuers for queue flush, explicit submit, status sync, and remote revoke calls, and ingestion services now refresh guarded HTTPS issuer-managed Ed25519 keysets live with last-good preservation and optional max-stale fail-closed enforcement. Trace Commons hardening note: required DB mirror mode, object refs, PostgreSQL/libSQL storage, RLS diagnostics, and encrypted artifact storage now live in the public `zmanian/tracedao-server` repo rather than Ironclaw's shared DB abstraction. Ironclaw retains local-first trace contribution capture, upload-claim fetching/validation, queue/status/credit notice behavior, and client-facing CLI/web helpers behind the Reborn-aligned `TraceClientHost` product facade for local redaction, queueing, status sync, and credit-notice delivery. Trace Commons production-boundary note: PostgreSQL/libSQL now include a durable tenant-scoped revocation-propagation ledger for downstream invalidation and retry work across object refs, exports, vectors, derived artifacts, benchmark/ranker artifacts, credit settlements, and physical delete receipts. The revocation worker can now reverse exact tenant-scoped delayed-credit settlements with deterministic negative ledger rows, verify and physically delete exact service-local encrypted submitted/review envelope, vector worker-intermediate, benchmark artifact, and ranker export provenance object payloads for tenant-scoped object-ref items, mark matching object refs deleted, and upsert durable physical-delete receipt rows with evidence hashes, while marking unsupported stores and artifact kinds as skipped. Export call sites for replay, benchmark, and ranker slices now create and validate short-lived tenant/principal/purpose/dataset-kind access grants before producing artifacts. `TRACE_COMMONS_OBJECT_STORE=remote_service` parses production remote object-store intent but deliberately fails closed behind a disabled service-owned provider instead of falling back to plaintext files. Local autonomous status sync now keeps append-only safe history events and sanitizes server-returned credit explanations before periodic credit notices persist them, and local credit notice delivery now drains a scoped retry outbox so channel failures leave retry state instead of consuming the notice. Trace Commons revocation-worker note: the ingest service now recognizes a scoped `revocation_worker` role and exposes `POST /v1/workers/revocation-propagation` for DB-backed propagation runs. The worker claims due tenant-scoped ledger items, performs idempotent metadata/vector/export invalidation actions, reverses exact delayed-credit settlement targets with deterministic audit-safe ledger rows, physically deletes hash-verified service-local submitted/review envelope, vector worker-intermediate, benchmark artifact, and ranker export provenance payloads for exact object-ref targets, records durable physical-delete receipt items after successful or already-recorded service-local payload deletion, records unsupported physical-delete stores/artifact kinds as explicit skipped items, preserves other tenants' due work, and emits safe audit counts. Trace Commons vector-lifecycle note: vector indexing now writes deterministic local redacted-summary feature embeddings into encrypted service-local `WorkerIntermediate` vector payload objects while keeping relational vector rows metadata-only. PostgreSQL/libSQL storage can invalidate one vector entry for a tenant/submission/vector id, revocation propagation requires a vector-entry target for vector invalidation instead of broad accidental invalidation, and service-local vector payload deletes verify the encrypted object as a vector artifact before marking the object ref deleted and recording a physical-delete receipt. Trace Commons export-job note: replay dataset, benchmark conversion, ranker-candidate, and ranker-pair export call sites now mirror their short-lived one-shot access grants plus running/complete export job lifecycle rows into the PostgreSQL/libSQL DB control plane. Required DB mirror mode now fails closed if a durable export job cannot be started or completed, replay exports now mark already-started DB job rows `failed` when metadata or required object-ref body reads fail before publication, benchmark/ranker exports do the same for metadata/source collection, source object-ref revalidation, and source-read audit failures before artifact publication, and tests cover tenant-scoped grant/job persistence plus replay and benchmark/ranker failure terminalization. Trace Commons worker-export note: export-worker automation now has dedicated replay and ranker export routes, `GET|POST /v1/workers/replay-export`, `GET|POST /v1/workers/ranker/training-candidates`, and `GET|POST /v1/workers/ranker/training-pairs`, plus matching CLI helpers. These routes reuse the same consent/use ABAC, access-grant, export-job, source-hash, audit, and delayed-credit behavior as the reviewer/admin routes while keeping scheduled automation off reviewer endpoints. Trace Commons export-control observability note: admins can now list tenant-scoped durable export access grants and export jobs through `GET /v1/admin/export/access-grants` and `GET /v1/admin/export/jobs`, with status and dataset-kind filters plus matching CLI helpers. `GET /v1/admin/operational-summary` and `ironclaw traces operational-summary` now add an admin-only, tenant-scoped aggregate rollout view for submission status/risk, review SLA pressure, DB export manifests/jobs, retention jobs, vector coverage, and delayed-credit totals. Reads are DB-backed where applicable, admin-only, tenant-scoped, and audited without exposing trace bodies. Trace Commons tenant-access grant note: PostgreSQL/libSQL now include a durable tenant-scoped `trace_tenant_access_grants` storage surface for issuer-authorized principals, roles, consent scopes, allowed uses, issuer/audience/subject attribution, status, expiry, revocation metadata, and safe metadata. Admin-token routes and CLI helpers can create, list, and revoke the current tenant's grants while writing safe hash/count-only grant-update audit metadata, and the local `tenant-principal-ref` CLI helper derives stored static-token or signed-claim principal refs without printing raw credentials. `TRACE_COMMONS_REQUIRE_TENANT_ACCESS_GRANTS=true` now fails closed on trace submission, contributor credit/status readback, reviewer/audit reads, review mutations, dataset/export paths, non-revocation worker mutations, maintenance, and admin ledger/observability reads unless the authenticated tenant/principal has an active exact-role grant. Signed EdDSA/Ed25519 claims must also match any issuer, audience, and JWT `sub` subject bindings configured on the grant before scope/use narrowing is applied, while static-token bridge grants ignore those signed-claim-only bindings. Grant consent/use allow-lists intersect with static-token or EdDSA claim allow-lists and cannot upgrade the request role; revocation/self-delete, revocation propagation, config-status, tenant-policy admin, and grant-management routes stay available for deprovisioning and recovery. Trace Commons issuer/TenantCtx note: the server-side `zmanian/tracedao-server` split now owns the standalone EdDSA/Ed25519-only `tracedao-upload-claim-issuer` binary that signs short-lived contributor upload claims, authenticates workload JWTs with EdDSA only, enforces workload issuer/audience/expiry plus consent/use narrowing, optionally connects to PostgreSQL/libSQL from deployment config to require DB-backed contributor tenant-access grants using the same signed-principal hash shape as ingest, rejects RSA key material, and publishes the ingest-compatible `kid`/`public_key_pem` keyset shape. The ingest compatibility layer also now fails closed when file-backed submission metadata, derived rows, credit ledger rows, audit rows, revocation tombstones, replay manifests, export provenance, or benchmark artifacts are read from one authenticated tenant directory but carry a different embedded tenant id or tenant storage ref; service-local object-ref reads/deletes also verify tenant key refs, encrypted benchmark artifact reads verify the decrypted body tenant, and vector payload deletes verify the encrypted payload body's tenant storage ref before physical deletion. ### 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; oversized `sessions.json` rotation removed; entry/age caps enforced at load | | Context compaction | โœ… | โœ… | Auto summarization with deterministic retention-boundary secret redaction and fail-closed residual checks | | Compaction model override | โœ… | โŒ | Use a dedicated provider/model for summarization only; `agents.defaults.compaction.memoryFlush.model` exact override | | Compaction mid-turn precheck | โœ… | โŒ | `agents.defaults.compaction.midTurnPrecheck` triggers before next tool call instead of end-of-turn | | Post-compaction read audit | โœ… | โŒ | Layer 3: workspace rules appended to summaries | | Post-compaction context injection | โœ… | โŒ | Workspace context as system event | | Compaction start/end notices | โœ… | โŒ | Opt-in lifecycle notices during compaction | | Custom system prompts | โœ… | โœ… | Template variables, safety guardrails | | Skills (modular capabilities) | โœ… | โœ… | Prompt-based skills with trust gating, attenuation, activation criteria, catalog, selector; Reborn local-dev now uses catalog/list-first model-selected activation before loading full skill context | | Skill Workshop plugin | โœ… | โŒ | Captures reusable workflow corrections as pending or auto-applied workspace skills, threshold-based reviewer | | Grouped skill directories | โœ… | โœ… | `skills///SKILL.md` discovery | | Skill installer metadata | โœ… | โŒ | One-click install recipes (npm/pip), API key entry, source metadata | | 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 (off/minimal/low/medium/high/xhigh/adaptive/max) | โœ… | ๐Ÿšง | thinkingConfig for Gemini models; no per-level control yet; Anthropic Opus 4.7 `xhigh`+`adaptive`+`max`; DeepSeek V4 `xhigh`/`max` | | Per-model thinkingDefault override | โœ… | โŒ | Override thinking level per model; Anthropic Claude 4.6/4.7 defaults to adaptive | | Adaptiveโ†’provider thinking maps | โœ… | โŒ | `/think adaptive` maps to Gemini dynamic thinking, Anthropic adaptive, OpenAI flex | | Native Codex app-server runtime | โœ… | โž– | New embedded Codex harness with PreToolUse/PostToolUse/PermissionRequest relay; replaces ACP for `codex/*` models | | Codex Computer Use | โœ… | โŒ | Desktop control setup with marketplace discovery, fail-closed MCP checks | | Codex hooks bridge | โœ… | โŒ | Codex-native tool hooks โ†’ OpenClaw plugin hooks/approvals | | Codex sub-agent metadata | โœ… | โŒ | Native Codex sub-agent session metadata without nested gateway patch | | Codex context-engine integration | โœ… | โŒ | Bootstrap, assembly, post-turn maintenance, engine-owned compaction in Codex sessions | | Active Memory plugin | โœ… | โŒ | Dedicated memory sub-agent right before main reply; configurable message/recent/full context modes; partial-recall on timeout; per-conversation `allowedChatIds`/`deniedChatIds` filters | | Inferred follow-up commitments | โœ… | โŒ | Opt-in hidden batched extraction with per-agent/per-channel scoping, heartbeat delivery, CLI management; `commitments.enabled`/`maxPerDay` | | `sessions_yield` | โœ… | โŒ | Orchestrators end current turn immediately, skip queued tool work, carry hidden follow-up payload to next turn | | Subagent forked context | โœ… | โŒ | Optional inherit-requester-transcript for native `sessions_spawn` | | `agents.defaults.contextInjection: "never"` | โœ… | โŒ | Disable workspace bootstrap injection per-agent | | `agents.defaults.experimental.localModelLean` | โœ… | โŒ | Drop heavyweight default tools for weaker local models | | `agents.files.get/set` workspace tools | โœ… | ๐Ÿšง | First-party scoped read/write/list/glob/grep/apply_patch capabilities exist through Reborn HostRuntime; OpenClaw-compatible `agents.files.*` aliases and realpath-via-fd hardening still pending | | Trajectory export | โœ… | ๐Ÿšง | QA-only and disabled by default: setting `IRONCLAW_REBORN_REGRESSION_ARTIFACT_EXPORT=true` lets WebChat v2 download caller-owned, deterministically redacted artifacts for one exact run (`ironclaw.run_artifact.v1`) or a complete multi-run thread (`ironclaw.thread_artifact.v1`), including replay metadata and bounded scoped logs; full-thread exports fail closed with `413` when the documented message/byte budget is exceeded; default-on local capture and full event/artifact parity remain follow-up | | Block-level streaming | โœ… | โŒ | | | Tool-level streaming | โœ… | โŒ | | | Z.AI tool_stream | โœ… | โŒ | Real-time tool call streaming | | Plugin tools | โœ… | โœ… | WASM tools | | GSuite WASM tools | โœ… | ๐Ÿšง | Reborn bundles operation-level Google Drive/Docs/Sheets/Slides WASM packages with host-mediated HTTP egress, product-auth scoped bearer injection, and manifest-declared Google OAuth setup metadata; full live-recorded parity remains follow-up | | Hosted MCP extensions | โœ… | ๐Ÿšง | Reborn composes host-mediated MCP runtime, bundles the current Notion MCP supported tool set, wires Notion ProductAuth OAuth exchange/refresh, can use Reborn ProductAuth DCR OAuth setup through the host callback origin, and can activate hosted MCP packages with live `tools/list` schema discovery through host-staged product-auth credentials | | NEAR AI MCP extension | โœ… | ๐Ÿšง | Host-bundled Reborn MCP extension exposes `nearai.web_search` via host-mediated HTTP and `llm_nearai_api_key`; local-dev startup now auto-seeds product-auth and activates the bundled MCP extension when `NEARAI_BASE_URL` plus `NEARAI_API_KEY` are configured, runtime credential resolution treats that seeded account as host-managed for the bundled `nearai` requester across WebUI SSO users in the same tenant/agent scope, with project-scoped host credentials limited to their project and tenant/agent-level host credentials covering project-scoped runtime calls, without exposing it to other requesters/providers, and WebChat v2 no longer projects that host-managed credential as extension setup work while NEAR remains a static supported-tool adapter | | Tool policies (allow/deny) | โœ… | โœ… | Reborn now stores scoped persistent `AlwaysAllow` approval policies for manifest-allow capabilities and replays them at the current sandbox scope; WebChat v2 exposes authenticated caller-scoped tool approval settings at `/api/webchat/v2/settings/tools` so regular multi-user sessions do not need operator config access; product-facing revoke paths remain follow-up while the policy-store revoke interface is available | | Exec approvals (`/approve`) | โœ… | โœ… | TUI approval overlay | | Tool inventory cache | โœ… | โŒ | Coalesced effective-tool inventory cache with channel-registry invalidation | | Pending exec approval `errorMessage` cleanup | โœ… | โŒ | Failed restart-interrupted approval-pending sessions instead of replaying stale ids | | Elevated mode | โœ… | โŒ | Privileged execution | | Subagent support | โœ… | โœ… | Task framework; spawn-by-account-aware bindings, model overrides preserved; Reborn `spawn_subagent` is blocking-only while background delivery is deferred (#4147) | | `/subagents spawn` command | โœ… | โŒ | Spawn from chat | | Auth profiles | โœ… | โŒ | Multiple auth strategies; replaceDefaultModels migration semantics | | Generic API key rotation | โœ… | โŒ | Rotate keys across providers | | Stuck loop detection | โœ… | โŒ | Exponential backoff on stuck agent loops; unknown-tool guard default-on | | llms.txt discovery | โœ… | โŒ | Auto-discover site metadata | | Multiple images per tool call | โœ… | โŒ | Single tool call, multiple images | | Web search extension | โœ… | ๐Ÿšง | Host-bundled `web-access` extension provides no-config Exa MCP search and saved-result content retrieval; Brave backend and generic fetch parity still pending | | 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 | | Stuck-session recovery | โœ… | โŒ | Conservative recovery releases stale lanes while preserving active embedded runs/replies | | `Runner:` in `/status` | โœ… | โŒ | Reports embedded Pi/CLI-backed/ACP harness in session status | | Voice Wake routing | โœ… | โŒ | Wake phrases can target named agent or session via gateway routing APIs | ### Owner: _Unassigned_ --- ## 6. Model & Provider Support | Provider | OpenClaw | IronClaw | Priority | Notes | |----------|----------|----------|----------|-------| | NEAR AI | โœ… | โœ… | - | Primary provider | | Anthropic (Claude) | โœ… | ๐Ÿšง | - | Via NEAR AI proxy; Opus 4.7 (default, adaptive+xhigh+max), Opus 4.6, Sonnet 4.6 | | OpenAI | โœ… | ๐Ÿšง | - | Via NEAR AI proxy; GPT-5.5 default, GPT-5.4-pro forward-compat, Codex OAuth, Responses API; image generation (`gpt-image-2`) via Codex OAuth | | OpenAI Codex (native app-server) | โœ… | โž– | - | App-server >=0.125.0 with native MCP hooks, dynamic tools, approval relay | | AWS Bedrock | โœ… | โœ… | - | Native Converse API; Claude Opus 4.7 thinking profile (xhigh/adaptive/max); IAM bearer token refresh for Mantle | | Google Gemini | โœ… | โœ… | - | OAuth (PKCE + S256), function calling, thinkingConfig, generationConfig; TTS (`gemini-embedding-2-preview`); image gen native API; ADC-backed Vertex | | Google Gemini Live (realtime) | โœ… | โŒ | - | Realtime voice provider for Voice Call/Google Meet, bidirectional audio + function calls | | io.net | โœ… | โœ… | P3 | Via `ionet` adapter | | Mistral | โœ… | โœ… | P3 | Via `mistral` adapter; Voice Call streaming STT | | Yandex AI Studio | โœ… | โœ… | P3 | Via `yandex` adapter | | Cloudflare Workers AI | โœ… | โœ… | P3 | Via `cloudflare` adapter | | NVIDIA API | โœ… | โœ… | P3 | Via `nvidia` adapter; OpenClaw added bundled provider with API-key onboarding, static catalog, literal model-ref picker, NIM string-content compat | | OpenRouter | โœ… | โœ… | - | Via OpenAI-compatible provider; OpenClaw added native video generation, `openrouter:auto`/`openrouter:free` aliases, Hunter/Healer Alpha, free-model fallback for `models scan` | | Tinfoil | โŒ | โœ… | - | Private inference provider (IronClaw-only) | | OpenAI-compatible | โŒ | โœ… | - | Generic OpenAI-compatible endpoint (RigAdapter); OpenAI-style image inputs default missing `image_url.detail` to `auto` | | GitHub Copilot | โœ… | โœ… | - | Dedicated provider with OAuth token exchange; default Opus model is `claude-opus-4.7`; GUI/RPC wizard device-code auth; `gpt-5.4` xhigh thinking | | Ollama (local) | โœ… | โœ… | - | OpenClaw added Cloud + Local + cloud-only modes, browser sign-in, signed `/api/experimental/web_search`, `params.num_ctx`/`params.think`/`params.keep_alive`, `/api/show` capability detection | | Perplexity | โœ… | โŒ | P3 | Freshness parameter for web_search | | MiniMax | โœ… | โŒ | P3 | Regional endpoint selection; portal OAuth + Token Plan + `MINIMAX_API_KEY`; image-01, music-2.6, video; `MiniMax-VL-01` for vision | | GLM-5 | โœ… | โœ… | P3 | Via Z.AI provider (`zai`) using OpenAI-compatible chat completions | | Tencent Cloud (TokenHub) | โœ… | โŒ | P3 | Bundled provider; Hy3 catalog with tiered pricing | | DeepInfra | โœ… | โŒ | P3 | Bundled provider with `DEEPINFRA_API_KEY`, dynamic OpenAI-compatible discovery, image gen/edit, image/audio understanding, TTS, text-to-video, embeddings | | Cerebras | โœ… | โŒ | P3 | Bundled plugin with onboarding, static catalog, manifest endpoint metadata | | Z.AI / GLM-5 | โœ… | โœ… | - | OpenClaw added bundled GLM catalog/auth in plugin manifest, `params.preserveThinking` for `reasoning_content` replay | | Qwen / Model Studio | โœ… | โŒ | P3 | Standard DashScope endpoints (CN + global) + Coding Plan; vLLM Qwen thinking controls | | DeepSeek | โœ… | โŒ | P3 | V4 Pro/V4 Flash bundled, V4 Flash onboarding default, native `xhigh`/`max` thinking levels, `reasoning_content` replay support | | Moonshot / Kimi | โœ… | โŒ | P3 | Kimi K2.6 default; native Anthropic-format tool calls; CN API endpoint support; `kimi-coding` web search via `KIMI_API_KEY` | | xAI | โœ… | โŒ | P3 | Image gen (`grok-imagine-image`/`pro`), reference-image edits, six TTS voices (MP3/WAV/PCM/G.711), `grok-stt` audio transcription, realtime STT for Voice Call | | Tencent Yuanbao | โœ… | โŒ | P3 | External plugin (`openclaw-plugin-yuanbao`) for chat | | Vercel AI Gateway | โœ… | โŒ | P3 | Provider-owned thinking levels for trusted upstream refs | | Codex/OpenAI image generation | โœ… | โŒ | P2 | `gpt-image-2`/`gpt-image-1.5` via Codex OAuth or API key; multipart reference-image edits; Azure deployment-scoped image URLs | | OpenRouter image/video generation | โœ… | โŒ | P3 | Image gen + reference edits; native video generation through `video_generate` | | MiniMax music/video | โœ… | โŒ | P3 | `music-2.6`, `video_generate`, `MiniMax-portal` registration | | Google Veo (video gen) | โœ… | โŒ | P3 | Direct MLDev `video.uri` downloads; REST `predictLongRunning` fallback | | fal Seedance 2.0 | โœ… | โŒ | P3 | Reference-to-video with multi-image/video/audio input | | Comfy (image/video/music) | โœ… | โŒ | P3 | `plugins.entries.comfy.config` workflow + cloud auth | | node-llama-cpp | โœ… | โž– | - | OpenClaw made it optional (no longer auto-installed); local embeddings now opt-in | | llama.cpp (native) | โŒ | ๐Ÿ”ฎ | P3 | Rust bindings | ### Model Features | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Auto-discovery | โœ… | โŒ | Manifest-backed `modelCatalog` with aliases/suppressions; cold installed-index fast path | | 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; OpenClaw added Quick Settings, mobile-aware picker | | Per-model thinkingDefault | โœ… | โŒ | Override thinking level per model in config | | 1M context support | โœ… | โŒ | Anthropic extended context beta + OpenAI Codex GPT-5.4 1M context; Claude Opus 4.7 + claude-cli normalized to 1M | | Fast mode (`/fast`) | โœ… | โŒ | Anthropic `service_tier` + OpenAI `gpt-5.4-fast`; `/fast` toggle, TUI/Control UI/ACP, per-model defaults | | Tiered model pricing | โœ… | โŒ | Pricing tiers from cached catalogs (Moonshot Kimi K2.6/K2.5, Hy3) for usage reports | | `models scan` (free-model fallback) | โœ… | โŒ | Public OpenRouter free-model metadata when no `OPENROUTER_API_KEY` | | Model catalog stale cache fallback | โœ… | โŒ | Serve last successful catalog while stale reloads refresh in background | | `models.pricing.enabled` | โœ… | โŒ | Skip startup OpenRouter/LiteLLM pricing-catalog fetches for offline installs | | Auth status card | โœ… | โŒ | OAuth token health + provider rate-limit pressure with `models.authStatus` RPC | | Model fallback metadata | โœ… | โŒ | `model.fallback_step` trajectory events with from/to + chain position + final outcome | | `prompt_cache_key` opt-in | โœ… | โŒ | `compat.supportsPromptCacheKey` per-provider opt-in | | Replay normalization | โœ… | โŒ | Repair displaced/missing tool results, Anthropic/Bedrock thinking signature stripping, OpenAI Responses orphaned reasoning, Codex aborted-output replay | ### TTS / STT / Realtime Voice | Feature | OpenClaw | IronClaw | Priority | Notes | |---------|----------|----------|----------|-------| | TTS (Microsoft / Edge) | โœ… | โŒ | P3 | Auto-enabled bundled provider; legacy `messages.tts.providers.edge` voices | | TTS (OpenAI) | โœ… | โŒ | P3 | OpenAI-compatible `/audio/speech` | | TTS (ElevenLabs v3) | โœ… | โŒ | P3 | `eleven_v3` model surfaced; PCM telephony | | TTS (Google Gemini) | โœ… | โŒ | P3 | `audioProfile` + `speakerName` prompt control; PCM-to-Opus voice notes | | TTS (Azure Speech) | โœ… | โŒ | P3 | Bundled provider, Speech-resource auth, SSML, native Ogg/Opus | | TTS (Inworld) | โœ… | โŒ | P3 | Streaming synthesis, voice-note + PCM telephony | | TTS (Volcengine/BytePlus Seed Speech) | โœ… | โŒ | P3 | Bundled provider, Ogg/Opus voice notes, MP3 file output | | TTS (Xiaomi MiMo) | โœ… | โŒ | P3 | MP3/WAV + voice-note Opus transcoding | | TTS (Local CLI) | โœ… | โŒ | P3 | Bundled local command speech provider with file/stdout/Opus/PCM | | TTS (Gradium) | โœ… | โŒ | P3 | Bundled TTS provider with voice-note + telephony output | | TTS (OpenRouter) | โœ… | โŒ | P3 | OpenAI-compatible `/audio/speech` via `OPENROUTER_API_KEY` | | TTS (xAI) | โœ… | โŒ | P3 | Six grok voices, MP3/WAV/PCM/G.711 | | TTS (DeepInfra) | โœ… | โŒ | P3 | Bundled provider | | TTS (MiniMax) | โœ… | โŒ | P3 | Portal OAuth + Token Plan; HD model ids | | TTS (Tinfoil/local MLX) | โœ… | โŒ | P3 | macOS Talk experimental MLX provider | | TTS personas | โœ… | โŒ | P3 | Provider-aware personas with deterministic provider binding, `/tts persona`, Gemini `audio-profile-v1`, OpenAI instructions | | Auto-TTS controls | โœ… | โŒ | P3 | `/tts latest`, `/tts chat on\|off\|default`; per-account/per-agent overrides | | Talk Mode (browser realtime) | โœ… | โŒ | P3 | OpenAI Realtime + Google Live WebRTC/WS; ephemeral client secrets; `openclaw_agent_consult` handoff | | STT (OpenAI Realtime) | โœ… | โŒ | P3 | Voice Call streaming transcription | | STT (xAI realtime) | โœ… | โŒ | P3 | Voice Call streaming via `grok-stt` | | STT (Deepgram) | โœ… | โŒ | P3 | Voice Call streaming | | STT (ElevenLabs Scribe v2) | โœ… | โŒ | P3 | Batch + streaming inbound transcription | | STT (Mistral) | โœ… | โŒ | P3 | Voice Call streaming | | STT (SenseAudio) | โœ… | โŒ | P3 | Bundled batch audio transcription via `tools.media.audio` | | STT (local Whisper CLI) | โœ… | โŒ | P3 | Configured/key-backed STT preferred over auto-detected local Whisper | ### Owner: _Unassigned_ --- ## 7. Media Handling | Feature | OpenClaw | IronClaw | Priority | Notes | |---------|----------|----------|----------|-------| | 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 | Multiple providers (see TTS/STT subsection in Section 6) | | Video support | โœ… | โŒ | P3 | OpenRouter native video gen, MiniMax video, Google Veo, fal Seedance, OpenAI Sora | | PDF analysis tool | โœ… | โŒ | P2 | Native Anthropic/Gemini path with text/image extraction fallback; bundled `document-extract` plugin owns `pdfjs-dist` | | PDF parsing | โœ… | ๐Ÿšง | P2 | Uploaded document attachments and Reborn `builtin.read_file` parse PDFs via `pdf-extract`; no `pdfjs-dist` fallback path | | MIME detection | โœ… | โŒ | P2 | Bounded MIME sniff + ZIP archive preflight | | Media caching | โœ… | โŒ | P3 | | | Vision model integration | โœ… | โŒ | P2 | Image understanding; `agents.defaults.imageModel`, Codex app-server image turns, configured-provider exact match | | Image generation | โœ… | โŒ | P2 | OpenAI `gpt-image-2` / `gpt-image-1.5`, OpenRouter, Gemini, MiniMax `image-01`; quality + format + background hints | | Music generation | โœ… | โŒ | P3 | MiniMax `music-2.6`, fal, video-to-music workflows | | Multimodal memory indexing | โœ… | โŒ | P3 | Image + audio indexing for `memorySearch.extraPaths` via Gemini `gemini-embedding-2-preview` | | Audio-as-voice routing | โœ… | โŒ | P2 | `[[audio_as_voice]]` directives on text tool-result `MEDIA:` payloads | | TTS providers | โœ… | โŒ | P2 | See TTS/STT subsection in Section 6 | | Incremental TTS playback | โœ… | โŒ | P3 | iOS progressive playback | | Sticker-to-image | โœ… | โŒ | P3 | Telegram stickers | | Per-channel media limits | โœ… | ๐Ÿšง | P2 | `mediaMaxMb` enforcement (already in Section 3); Signal `getAttachment` honors `mediaMaxMb` with base64 headroom | ### Owner: _Unassigned_ --- ## 8. Plugin & Extension System | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Dynamic loading | โœ… | โœ… | WASM modules | | Manifest validation | โœ… | โœ… | WASM metadata; `modelCatalog`, `channelConfigs`, `setup.providers`, `setup.requiresRuntime`, `activation.onStartup` contracts | | HTTP path registration | โœ… | โŒ | Plugin routes | | Workspace-relative install | โœ… | โœ… | ~/.ironclaw/tools/ | | Channel plugins | โœ… | โœ… | WASM channels | | Auth plugins | โœ… | โŒ | | | Memory plugins | โœ… | โŒ | Custom backends + selectable memory slot | | Context-engine plugins | โœ… | โŒ | Custom context management + subagent/context hooks; `info.id` slot match enforced | | Tool plugins | โœ… | โœ… | WASM tools | | Hook plugins | โœ… | โœ… | Declarative hooks from extension capabilities | | Provider plugins | โœ… | โŒ | Manifest-backed catalogs/aliases/suppressions; setup auth metadata | | Plugin CLI (`install`, `list`) | โœ… | โœ… | `tool` subcommand | | ClawHub registry | โœ… | โŒ | Discovery; install scope `--profile`, `npm:` install prefix to skip ClawHub lookup, `clawhub:` install records | | `git:` plugin installs | โœ… | โŒ | First-class `git:` install with ref checkout, commit metadata, `plugins update` for git sources | | `before_agent_start` hook | โœ… | โŒ | modelOverride/providerOverride support | | `before_agent_finalize` hook | โœ… | โŒ | New finalize hook with run/message/sender/session/trace correlation | | `before_message_write` hook | โœ… | โŒ | Pre-write message interception | | `before_dispatch` hook | โœ… | โŒ | Canonical inbound metadata; route handled replies through normal final delivery | | `before_compaction`/`after_compaction` hooks | โœ… | โŒ | Codex-native compaction lifecycle | | `llm_input`/`llm_output` hooks | โœ… | โŒ | LLM payload inspection (Codex app-server included) | | `model_call_started`/`ended` hooks | โœ… | โŒ | Metadata-only, no prompts/responses/headers/raw provider request IDs | | `cron_changed` hook | โœ… | โŒ | Typed cron lifecycle observer | | `gateway_start` hook context | โœ… | โŒ | Startup config, workspace dir, live cron getter | | `agent_end` observation hooks | โœ… | โŒ | 30s timeout for non-settling hooks | | Plugin SDK state store | โœ… | โŒ | SQLite-backed `api.runtime.state.openKeyedStore` for restart-safe keyed registries with TTL/eviction | | Plugin SDK Codex extensions | โœ… | โŒ | Async `tool_result` middleware, `after_tool_call` for Codex tool runs | | Persisted plugin registry | โœ… | โŒ | Cold registry index, `openclaw plugins registry` inspection, `--refresh` repair | | `plugins deps --repair` | โœ… | โŒ | Bundled runtime-deps inspect + repair without rerunning plugin runtime | | Plugin install conflict-aware writes | โœ… | โŒ | Install/uninstall config writes are conflict-aware; managed plugin files removed only after config commit | | Plugin compatibility registry | โœ… | โŒ | Central deprecation registry with dated owners + replacements + 3-month removal targets | | Layered runtime-deps roots | โœ… | โŒ | `OPENCLAW_PLUGIN_STAGE_DIR` resolves read-only preinstalled deps before installing missing deps | | Bundled provider catalogs in manifest | โœ… | โŒ | DeepInfra, Cerebras, Mistral, Moonshot, DeepSeek, Tencent, StepFun, Venice, Fireworks, Together, Groq, Qianfan, Xiaomi, BytePlus, Volcano Engine, NVIDIA | ### 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 + `openclaw config validate`; OpenClaw added top-3 issue surface for `config.set/patch/apply` | | Hot-reload | โœ… | โŒ | Many plugins now re-read live runtime config (memory-lancedb, active-memory, github-copilot, ollama, openai, amazon-bedrock, codex, skill-workshop, diffs, gateway-tool); `OPENCLAW_NO_AUTO_UPDATE=1` kill-switch | | Legacy migration | โœ… | โž– | OpenClaw dropped automatic migrations older than two months | | State directory | โœ… `~/.openclaw-state/` | โœ… `~/.ironclaw/` | | | Credentials directory | โœ… | โœ… | Session files | | Full model compat fields in schema | โœ… | โŒ | pi-ai model compat exposed in config | | `models.pricing.enabled` | โœ… | โŒ | Skip OpenRouter/LiteLLM pricing fetches for offline installs | | `agents.list[].contextTokens` | โœ… | โŒ | Per-agent context window override | | `gateway.handshakeTimeoutMs` | โœ… | โŒ | Tunable WebSocket pre-auth handshake budget | | `--profile ` | โœ… | โŒ | Plugin install destinations resolve from active profile state dir | | Config recovery on clobber | โœ… | โŒ | Restore last-known-good config on critical clobber signatures (missing metadata, missing `gateway.mode`, sharp size drops); foreground/service notices include rejected paths | | Modular `$include` files | โœ… | โŒ | Single-file top-level includes for isolated mutations; `plugins install`/`update` updates `plugins.json5` instead of flattening | | `config set --merge`/`--replace` | โœ… | โŒ | Additive vs intentional clobber for provider model maps | | Wrapper-based service install | โœ… | โœ… (Reborn) | `--wrapper`/`OPENCLAW_WRAPPER` validated executable LaunchAgent/systemd wrappers; Reborn's `ironclaw service install` covers launchd (macOS)/systemd (Linux) with a webui-token-file fallback and atomic install + rollback on failure | ### Owner: _Unassigned_ --- ## 10. Memory & Knowledge System | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Vector memory | โœ… | โœ… | pgvector | | Session-based memory | โœ… | โœ… | | | Hybrid search (BM25 + vector) | โœ… | โœ… | RRF algorithm; vectorScore + textScore exposed alongside combined score | | 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 | โœ… | โœ… | | | Bedrock embeddings | โŒ | โœ… | Reuses Bedrock region/profile auth for Titan Text Embeddings V2 | | Gemini embeddings | โœ… | โŒ | `gemini-embedding-2-preview` with configurable output dimensions, automatic reindex on dim change | | GitHub Copilot embeddings | โœ… | โŒ | Provider with token refresh, payload validation, remote overrides | | Ollama embeddings | โœ… | โœ… | OpenClaw moved to `/api/embed` with batched `input`; per-host cache keys; non-batch concurrency knob | | Local embeddings | โœ… | โŒ | `node-llama-cpp` now optional install | | Asymmetric embedding endpoints | โœ… | โŒ | `inputType`/`queryInputType`/`documentInputType` for retrieval prefixes (Ollama: `nomic-embed-text`, `qwen3-embedding`, `mxbai-embed-large`) | | SQLite-vec backend | โœ… | โŒ | IronClaw uses PostgreSQL; bundled-plugin runtime-deps mirror sqlite-vec | | LanceDB backend | โœ… | โŒ | Configurable auto-capture max length; cloud storage support; OpenAI-compatible float embeddings, ZhiPu/DashScope normalization | | QMD backend | โœ… | โŒ | Multi-collection `-c` filters, `--mask` collection patterns, opt-in `memory.qmd.update.startup` | | Active Memory plugin | โœ… | โŒ | Memory sub-agent before main reply; partial recall on timeout; `allowedChatIds`/`deniedChatIds`; visible status fields | | Memory wiki (people-aware) | โœ… | โŒ | Canonical aliases, person cards, relationship graphs, privacy/provenance reports, search modes (find-person/route-question/source-evidence/raw-claim) | | Dreaming (REM cycles) | โœ… | โŒ | `## Light Sleep`/`## REM Sleep` phase blocks; `dreaming.storage.mode = "separate"` default; `dreaming.model` override | | `recallMaxChars` cap | โœ… | โŒ | Bound recall embedding queries for small Ollama embedding models | | `corpus=sessions` ranking | โœ… | โŒ | Session transcript hits with visibility/agent-to-agent policy | | Atomic reindexing | โœ… | โœ… | | | Embeddings batching | โœ… | โœ… | `embed_batch` on EmbeddingProvider trait | | Citation support | โœ… | โŒ | | | Memory CLI commands | โœ… | โœ… | `memory search/read/write/tree/status` CLI subcommands | | `openclaw ltm list` | โœ… | โŒ | Real LanceDB LTM rows with `--limit`/createdAt ordering | | Flexible path structure | โœ… | โœ… | Filesystem-like API | | Identity files (AGENTS.md, etc.) | โœ… | โœ… | | | Daily logs | โœ… | โœ… | | | Heartbeat checklist | โœ… | โœ… | HEARTBEAT.md | | Hybrid post-compaction reindex | โœ… | โŒ | `agents.defaults.compaction.postIndexSync`; `memorySearch.sync.sessions.postCompactionForce` | ### 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; modular Overview/Chat/Config/Agent/Session views, command palette, mobile bottom tabs | | Channel status view | โœ… | ๐Ÿšง | P2 | Gateway status widget, full channel view pending | | Agent management | โœ… | โŒ | P3 | Agent Tool Access panel with compact live-tool chips, collapsible groups, per-tool toggles | | Model selection | โœ… | โœ… | - | TUI only | | Config editing | โœ… | โŒ | P3 | Raw config pending-changes diff panel with redacted reveal | | Debug/logs viewer | โœ… | โœ… | - | Real-time log streaming with level/target filters | | WebChat interface | โœ… | โœ… | - | Web gateway chat with SSE/WebSocket; Reborn serves canonical SPA routes at `/chat`, `/settings`, and `/extensions`, while legacy `/v2/*` browser URLs temporarily redirect to root equivalents and `/api/webchat/v2/*` stays unchanged | | Canvas system (A2UI) | โœ… | โŒ | P3 | Agent-driven UI, improved asset resolution; macOS canvas hosts pushed A2UI without auto-reload | | Control UI i18n | โœ… | โŒ | P3 | English, Chinese, Portuguese; expanded with Persian (fa), Dutch (nl), Vietnamese (vi), Italian (it), Arabic (ar), Thai (th), Traditional Chinese (zh-TW) | | WebChat theme sync | โœ… | โŒ | P3 | Sync with system dark/light mode | | Partial output on abort | โœ… | โŒ | P2 | Preserve partial output when aborting | | PWA + Web Push | โœ… | โŒ | P3 | PWA install + Web Push notifications for Gateway chat | | Talk Mode (browser realtime voice) | โœ… | โŒ | P3 | OpenAI Realtime + Google Live WebSocket; Gateway-minted ephemeral secrets; backend realtime relay | | Steer queued messages | โœ… | โŒ | P3 | Steer action on queued messages injects follow-up into active run without retyping | | Quick Settings dashboard | โœ… | โŒ | P3 | Refreshed grid + presets + quick-create flows + assistant avatar overrides | | Markdown preview dialog | โœ… | โŒ | P3 | Lazy markdown preview + `@create-markdown/preview` v2 system theme | | Cron job dashboard | โœ… | โŒ | P3 | Cron prompts/run summaries as sanitized markdown | | Personal identity (operator) | โœ… | โŒ | P3 | Browser-local operator name + avatar through shared chat/avatar path | | Trajectory export UI | โœ… | โŒ | P3 | Owner-private export approval flow | | Restart-impacting Dreaming confirm | โœ… | โŒ | P3 | Restart warning before applying Dreaming mode changes | | Mobile chat settings sheet | โœ… | โŒ | P3 | Persists mobile state through Lit-managed view-state | ### Owner: _Unassigned_ --- ## 14. Automation | Feature | OpenClaw | IronClaw | Priority | Notes | |---------|----------|----------|----------|-------| | Cron jobs | โœ… | โœ… | - | Routines with cron trigger; runtime state split into `jobs-state.json`; `sessionTarget: "current"`/`session:` bindings | | Reborn scheduled trigger loop | โž– | ๐Ÿšง | P2 | Reborn-native trigger persistence, backend parity, atomic fire claim/update APIs, poller core, caller-level harness, first-party `trigger_*` capabilities, and composition-owned worker lifecycle are in progress; automation panel runs now link canonical thread ids; trigger-owned threads are openable, watchable, approvable, and cancelable by automation owners via automation-visibility authorization; scoped pause/resume/rename/delete state transitions are available through first-party capabilities and WebUI v2 controls; first-class one-shot triggers (`TriggerSchedule::Once`, `schedule.kind = once`) are implemented (completion is derived from the schedule; the old year-pinned-cron + `completion_policy` workaround was removed); run-scoped source-inherited and explicit external result targets are durably sealed and revalidated before delivery, including paired Telegram DMs enumerated through the generic channel target registry; remaining follow-ups: legacy pre-fix rows without a stored thread_id remain unopenable, production readiness policy, active-run retention/tombstone semantics, and production jitter source selection | | Per-job model fallback override | โœ… | โŒ | P2 | `payload.fallbacks` overrides agent-level fallbacks | | Cron stagger controls | โœ… | โŒ | P3 | Default stagger for scheduled jobs | | Cron finished-run webhook | โœ… | โŒ | P3 | Webhook on job completion | | `--thread-id` cron CLI | โœ… | ๐Ÿšง | P2 | Telegram forum topic delivery for scheduled announcements | | `failureAlert.includeSkipped` | โœ… | โŒ | P3 | Persistently skipped jobs alert without counting skips as exec errors | | `delivery.threadId` (gateway cron schemas) | โœ… | โŒ | P2 | Telegram forum topics + threaded channel destinations | | Cron `nested` lane | โœ… | โŒ | P3 | `cron.maxConcurrentRuns` applies to dedicated `cron-nested` lane; non-cron flows keep their own lane | | Cron stuck-session timeout | โœ… | โŒ | P3 | Aborts/cleans timed-out isolated turns before recording timeout | | Timezone support | โœ… | โœ… | - | Via cron expressions; `--at` honors local wall-clock time across DST | | One-shot/recurring jobs | โœ… | โœ… | - | Manual + cron triggers; Reborn one-shot uses first-class `TriggerSchedule::Once` (`schedule.kind = once`); completion is derived from the schedule | | 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_agent_finalize` hook | โœ… | โŒ | P2 | Run/message/sender/session/trace correlation | | `before_message_write` hook | โœ… | โŒ | P2 | Pre-write interception | | `before_dispatch` hook | โœ… | โŒ | P2 | Canonical inbound metadata; idempotency-key dedupe for hook agent deliveries | | `before_compaction`/`after_compaction` | โœ… | โŒ | P3 | Codex-native compaction lifecycle | | `onMessage` hook | โœ… | โœ… | - | Routines with event trigger | | Structured system-event routines | โœ… | โœ… | P2 | `system_event` trigger + `event_emit` tool for event-driven automation | | `onSessionStart` hook | โœ… | โœ… | P2 | | | `onSessionEnd` hook | โœ… | โœ… | P2 | | | `transcribeAudio` hook | โœ… | โŒ | P3 | | | `transformResponse` hook | โœ… | โœ… | P2 | | | `llm_input`/`llm_output` hooks | โœ… | โŒ | P3 | LLM payload inspection (Codex app-server included) | | `model_call_started`/`ended` hooks | โœ… | โŒ | P3 | Metadata-only model/provider call telemetry | | `cron_changed` hook | โœ… | โŒ | P3 | Typed gateway-owned cron lifecycle observer | | Cron `jobId` hook context | โœ… | โŒ | P3 | Hook context carries originating job id | | 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`; realpath-fail-closed | | Outbound webhooks | โœ… | โœ… | P2 | Fire-and-forget lifecycle event delivery | | Heartbeat system | โœ… | โœ… | - | Periodic execution; `heartbeat.skipWhenBusy` for nested lane pressure; deferred under cron load | | Gmail pub/sub | โœ… | โŒ | P3 | | | Inferred follow-up commitments | โœ… | โŒ | P3 | Heartbeat-delivered reminders; opt-in batched extraction | **State migration (v1/engine-v2 โ†’ Reborn):** `crates/ironclaw_reborn_migration` converts persisted automations. Cron routines and cron missions convert to Reborn `TriggerRecord`s (mission threads land under `ThreadScope.mission_id`). Because Reborn's `TriggerSourceKind` is `Schedule`-only, **event / system-event / webhook / manual routines and non-cron mission cadences have no `TriggerRecord` target** and are recorded in the migration manifest rather than converted โ€” even where the runtime supports the *behavior* via hooks/`event_emit`, the durable automation row does not carry over. Guardrails, notify config, run counters, `routine_runs` history (no public run-history insert), and mission-only fields (focus/approach/success-criteria) likewise have no target. See the crate's CLAUDE.md for the full mapping + gap catalog. ### Owner: _Unassigned_ --- ## 15. Security Features | Feature | OpenClaw | IronClaw | Notes | |---------|----------|----------|-------| | Gateway token auth | โœ… | โœ… | Bearer token auth on web gateway; per-request resolution for `secrets.reload`; method-specific least-privilege scopes for CLI Gateway calls | | Device pairing | โœ… | โŒ | Single-use bootstrap setup codes; metadata-upgrade auto-approval for shared-secret loopback; scope/role/metadata pairing approval flows | | Tailscale identity | โœ… | โŒ | Tailscale-authenticated Control UI bypass for browser device identity | | Trusted-proxy auth | โœ… | โŒ | Header-based reverse proxy auth; `trustedProxy.allowLoopback` | | OAuth flows | โœ… | ๐Ÿšง | NEAR AI OAuth + Gemini OAuth (PKCE, S256) + hosted extension/MCP OAuth broker; external auth-proxy rollout still pending; OpenClaw added bootstrap-token redemption scope allowlist. Reborn `serve` now has browser SSO login for WebChat v2 (Google + GitHub; Google PKCE S256, state CSRF, cleartext-redirect guard), with fail-closed verified-email-domain admission and per-user identity binding (distinct OAuth identity โ†’ distinct user, stateless tenant-bound HMAC session). Local-dev trigger polling also seeds admitted WebUI SSO users into trigger-fire access when enabled | | DM pairing verification | โœ… | โœ… | ironclaw pairing approve, host APIs | | Allowlist/blocklist | โœ… | ๐Ÿšง | allow_from + pairing store; canonical `dmPolicy="open"` only with effective wildcard across all channels | | Per-group tool policies | โœ… | โŒ | Group-id validation against session/spawned context before applying group-scoped tool policies | | Exec approvals | โœ… | โœ… | TUI overlay; `allow-once` idempotent grace; PATH-resolved basenames; secret redaction in approval prompts; Unicode normalization + zero-width stripping | | Owner allowlists | โœ… | โŒ | `commands.ownerAllowFrom` bootstrapped from first approved DM pairing; channel-prefixed entries scoped to matching providers | | TLS 1.3 minimum | โœ… | โœ… | reqwest rustls | | SSRF protection | โœ… | โœ… | WASM allowlist; OpenClaw extended SSRF guard to BlueBubbles, Synology Chat, LINE, QQBot direct-upload, Tlon uploads, browser tabs/snapshots, voice-call Twilio webhooks, web fetch (incl. `fc00::/7` opt-in) | | 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; opt-in `sandbox.docker.gpus` passthrough; Reborn defines a typed `SandboxProcessPlan` contract (`ironclaw_process_sandbox`) with plan validation only โ€” no production execution backend is wired for it yet | | Podman support | โœ… | โŒ | `--container` accepts both Docker + Podman | | WASM sandbox | โŒ | โœ… | IronClaw innovation | | Sandbox env sanitization | โœ… | ๐Ÿšง | Shell tool scrubs env vars (secret detection); Reborn process sandbox rejects sensitive raw env values in plans and uses placeholders for brokered credentials, but production secure-capture and MITM transport wiring remain partial | | `OPENCLAW_*` env block | โœ… | โŒ | Untrusted workspace `.env` cannot inject OpenClaw runtime-control vars | | Workspace `.env` injection blocks | โœ… | โŒ | Block `CLOUDSDK_PYTHON`, ambient Homebrew, Windows system PATH vars, `MINIMAX_API_HOST`, `npm_execpath` | | Tool policies | โœ… | โœ… | | | Elevated mode | โœ… | โŒ | | | Safe bins allowlist | โœ… | โŒ | Hardened path trust; non-user-writable absolute helpers for CLI/ffmpeg/OpenSSL | | LD*/DYLD* validation | โœ… | โŒ | Block Mercurial/Rust/Make env redirects in host exec sanitization | | Path traversal prevention | โœ… | โœ… | Including config includes (OC-06) + workspace-only tool mounts; `realpath`-via-fd safety on agents.files.get/set | | 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 | โœ… | โŒ | Validated download roots prevent arbitrary write targets | | Skill installer metadata validation | โœ… | โŒ | Strict per-PM regex allowlists; URL protocol allowlist; sanitize metadata for terminal output | | Webhook signature verification | โœ… | โœ… | Padded timing-safe compare even on wrong-length signatures (Nextcloud Talk, Feishu, LINE, Zalo) | | Media URL validation | โœ… | โŒ | Reject non-HTTP(S) inbound attachment URLs; reject remote-host `file://` URLs in webchat embedding path | | Prompt injection defense | โœ… | โœ… | Pattern detection, sanitization; OpenClaw added chat-template special-token stripping (Qwen/ChatML, Llama, Gemma, Mistral, Phi, GPT-OSS) | | Internal scaffolding stripping | โœ… | โŒ | ``/`` stripped at final delivery boundary | | Leak detection | โœ… | โœ… | Secret exfiltration; complete and malformed private-key blocks within one message are bounded for safe value redaction, while cross-message matches fail closed | | Dangerous tool re-enable warning | โœ… | โŒ | Warn when gateway.tools.allow re-enables HTTP tools | | OpenGrep static analysis | โœ… | โŒ | Bundled rulepack + source-rule compiler + provenance check; PR/full scan workflows + SARIF upload to GitHub Code Scanning | | Logging redaction expansion | โœ… | โŒ | Tencent/Alibaba/HuggingFace/Replicate API keys; payment credential field names; `sk-*`/Bearer/Authorization tokens at console + file sinks | | Trace context propagation | โœ… | โŒ | W3C `traceparent` from trusted model-call context; replaces caller-supplied values | | Forwarded-header IP detection | โœ… | โŒ | Treat any `Forwarded`/`X-Forwarded-*`/`X-Real-IP` as proxied before pairing locality checks | | Trusted-content sanitization | โœ… | โŒ | Group/channel names rendered through fenced untrusted-metadata JSON; vCard/contact/location free-text neutralization | | Per-tool MCP loopback policy | โœ… | โŒ | Owner-only tool visibility derived from authenticated owner-vs-non-owner bearers; no caller-controlled owner header | | Mobile pairing TLS requirement | โœ… | โŒ | Plaintext `ws://` only on loopback; `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS` for trusted private nets | | Webhook auth rate-limit | โœ… | โŒ | Pre-auth `429` for bad webhook secrets (Zalo, etc.) | ### 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): Slack mounts as a generic extension channel surface (the bespoke host-beta serve lane โ€” `serve_slack` / `with_slack_channel_routes` โ€” was removed) with Slack Events API signing, extension-card personal OAuth setup that binds Slack `authed_user.id` to the authenticated Reborn user, DM/app-mention routing through Product Workflow/Reborn, final-reply delivery, admin-managed allowed-channel picker, durable WebUI channel-route assignment APIs, provider-side default outbound target inventory for shared channels and explicitly provisioned personal DMs, and one unified host-bundled `slack` extension manifest (provider `slack`) declaring both the Slack channel surface and the user-scoped tool surfaces; DMs execute as the OAuth-bound actor, while shared channel turns route to allowed dynamic or static channel subjects and fail closed for unrouted channels in admin-managed mode; broader production install/setup hardening remains follow-up. - โœ… Telegram channel (WASM, polling-first setup, 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 - โœ… Tool-driven webhook ingress (`/webhook/tools/{tool}` -> host-verified + tool-normalized `system_event` routines) - โŒ Channel health monitor with auto-restart - โŒ Partial output preservation on abort ### P3 - Lower Priority - โŒ Discord channel - โŒ Matrix channel - โŒ Other messaging platforms (Yuanbao, WeCom, Google Meet, Voice Call) - โŒ TTS/audio features (12+ providers added in OpenClaw; see Section 6 TTS/STT subsection) - โŒ Video support (OpenRouter/MiniMax/Veo/fal/Sora) - ๐Ÿšง Skills routing blocks (activation criteria exist, but no "Use when / Don't use when") - โŒ Plugin registry / persisted plugin index / `git:` installs - โŒ Streaming (block/tool/Z.AI tool_stream) - โŒ Memory: temporal decay, MMR re-ranking, query expansion, multimodal indexing, people-aware wiki - โŒ Control UI i18n (now 12+ locales upstream) - โŒ Stuck loop detection - โŒ Codex native app-server runtime + Computer Use - โŒ Talk Mode / realtime voice (browser + backend) - โŒ OpenTelemetry diagnostics + Prometheus exporter - โŒ Active Memory + Skill Workshop; ๐Ÿšง Trajectory export (caller-owned, redacted single-run export; full parity remains pending) - โŒ Outbound proxy routing + `proxy validate` - โŒ `migrate` (Claude/Hermes import) --- ## 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.