IronClaw
IronClaw turns its web app into a first-party notification channel
IronClaw proposes browser push with PWA installation, presence-based shared conversations across Slack and Telegram, and progressive Slack previews. The cluster moves the product from separate chat adapters toward one conversation with explicit presence, preview and notification semantics.
nearai/ironclaw PR #7398 is the inspected primary source: “feat(web-push): browser push notifications + PWA — the web app as a first-party notification channel.” The related records below were inspected as supporting context rather than independent confirmation.
The facts
- nearai/ironclaw PR #7398 was created 2026-08-08T22:27:36Z and was open at inspection; its title is “feat(web-push): browser push notifications + PWA — the web app as a first-party notification channel.” - nearai/ironclaw PR #7397 was created 2026-08-08T21:59:11Z and was open at inspection; its title is “Presence-based shared conversations for Slack & Telegram.” - nearai/ironclaw PR #7396 was created 2026-08-08T19:14:24Z and was open at inspection; its title is “feat(channels): add generic progressive previews for Slack.” - The repository reported 12597 stars, 1494 open issues, default branch main, and last push 2026-08-09T00:21:55Z. - The latest tagged-release baseline checked was ironclaw-v1.1.0 published 2026-08-06T08:39:11Z.
What changed
nearai/ironclaw PR #7398 reports: Summary Makes the web app a real, selectable notification route for automations — parity with Slack/Telegram: a new first-party **web-push channel extension** delivers W3C Web Push (RFC 8030 transport, RFC 8291 aes128gcm encryption, RFC 8292 VAPID) to the user's enrolled browsers, riding the existing two-lane delivery machinery unchanged (catalog target + ChannelAdapter + delivery coordinator + notification-channel set). The WebUI is now an installable **PWA**: root-scope service worker (/sw.js, push + notification-click deep links; the manifest and maskable icons already shipped), boot-time registration, and a per-browser enroll/disable flow on the automations page's notification-channels panel — the old "Notifications stay in the web app" always-on placeholder is replaced by a real, toggleable **Web app** row. New ironclaw_web_push domain crate owns subscription records (CAS filesystem store, per-user cap), RFC 8291 encryption (pinned to the RFC's Appendix A vector), VAPID key-material generation, and transport-free push request planning — zero new heavy dependencies (aws-lc-rs was already in the lockfile). One new **generic** egress credential-injection kind, vapid_authorization: the host computes Authorization: vapid t=…,k=… at the existing credential chokepoint, with the
nearai/ironclaw PR #7397 reports: Presence-based shared conversations for Slack & Telegram Follow-up to #7377** (now merged into main). This builds directly on that PR's acting-identity ladder (LoopRunContext::acting_user_id / acting_resource_scope) — which is exactly what makes owner ≠ actor a safe everyday run shape. Based on main. What changes for a user Today a channel has to be added to a per-extension allowlist (slack_allowed_channels / telegram_allowed_channels) before the bot will engage. This PR removes that gate entirely and replaces it with **presence**: if the bot is in the Slack channel or Telegram group, it will respond there. Being in the room *is* the admission — no settings, no allowlist. A pinged channel becomes a **shared conversation**: one canonical thread keyed by the conversation, not per-user. Everyone in the channel talks to the same IronClaw with the same context — exactly like a group chat with a person, rather than N private side-threads. The first person to engage owns the durable thread; each participant's turn *acts as* themselves (that's the #7377 foundation), so their own gates, auth, settings, and mounts apply
nearai/ironclaw PR #7396 reports: Summary Adds a channel-neutral progressive-preview contract and typed manifest capability. Keeps the existing ordinary final-message path as the only authoritative delivery. Maps the preview contract to Slack chat.startStream / chat.appendStream / chat.stopStream + delete. Routes model preview text through outbound policy and disables previews after the first failed update. Removes the append ledger, LCP-tail finalization, stream-specific final retries, and recovery matrix from the earlier implementation. Change Type [x] New feature [x] Refactor [x] Documentation Linked Issue Related #4491 Validation [x] cargo fmt --all -- --check [x] cargo clippy --all --benches --tests --examples --all-features -- -D warnings (equivalent warnings-denied all-targets run for every touched crate) [ ] cargo build (covered by clippy and test builds) [x] Relevant tests pass: extension contracts, Slack, Telegram, assistant policy contract, extension-host E2E, and architecture suites [ ] cargo test -p --features integration (not applicable: no database-backed or gated runtime-integration behavior changed) [ ] Manual testing (live Slack canary remains required before GA) [ ] review-pr / pr-shepherd --fix (not run) Test Strategy User behavior: Slack shows best-effort generated-text updates, removes
Why it matters
Cross-channel continuity is useful only if identity, visibility and duplicate delivery remain deterministic. Adding web push also makes permission state and revocation part of the runtime contract. The operator test is whether visible output, retained state and authority still describe the same event after retries, background work or restart.
Current
The primary record was open when captured on 2026-08-09. The tagged-release baseline was ironclaw-v1.1.0 published 2026-08-06T08:39:11Z. Repository metadata, full source bodies, current pull requests and issues, releases, Google News, Hacker News, Lobsters, Metamesh and the rendered ClawCharts row were inspected. ClawCharts selected the subject; it did not prove the claim.
Evidence
The primary URL is https://github.com/nearai/ironclaw/pull/7398. Supporting records are https://github.com/nearai/ironclaw/pull/7397 and https://github.com/nearai/ironclaw/pull/7396. Source bodies, timestamps and states are preserved in the daily evidence bundle. Test counts and reproductions remain attributed to their authors unless identified as independently rerun.
Source boundary
Open work is described as open, closed work as closed, and operator reports as reports. A pull request is evidence of proposed or reviewed direction, not proof of a shipped release. Search residue, package mirrors and historically published source spines were excluded.
Operator take
Bind subscriptions to authenticated users and conversation owners, test duplicate and offline delivery, and make presence expiry visible rather than inferred. Preserve a before-state receipt, make the smallest reversible change, and verify the original failure independently.
Caveat
Public project records are mutable. Status, scope and evidence can change after publication. This brief records the inspected state and does not authorize changes to a reader’s deployment.
Source inspected; source state, environment and release boundary remain explicit.