* feat(webview): zero-injection CDP migration for 5 providers
Moves the per-provider webview scraping path off injected JS and onto
CDP for the cef runtime. The 5 migrated providers (whatsapp, telegram,
slack, discord, browserscan) now load with zero initialization_script;
their UA fingerprint, DOM chat-list scraping, and multi-account target
matching all run through the Chrome DevTools Protocol.
Shared infrastructure in new `cdp/` module: CdpConn, Snapshot walker
(generic DOMSnapshot.captureSnapshot), UaSpec + setUserAgentOverride
helper, per-account session opener that keeps a long-lived CDP session
attached so the UA override stays resident for the lifetime of the
webview. Webview opens at a data:text/html placeholder, CDP applies UA
override, then Page.navigate drives it to the real provider URL with a
`#openhuman-account-{id}` fragment used by all scanners for
multi-account disambiguation (replaces Telegram's title-marker JS).
Per-provider dom_snapshot.rs files for telegram/slack/discord replicate
the WhatsApp scraper pattern. Emit the same `webview:event` ingest
envelope the old recipes used so the frontend is unchanged.
Deferred (kept JS-injected, separate PRs):
- gmail/linkedin: no Rust scanner yet
- google-meet: 535-line lifecycle + captions recipe
- idb.rs `Runtime.callFunctionOn` serializer: audit listed as future work
Also removes the unused `webview_account_eval` Tauri command.
Wry builds retain the legacy ua_spoof.js + runtime.js + recipe.js path
where those files still exist (no wry-specific regressions introduced).
* fix(release): enable Ubuntu 22.04 platform support in release workflow
Uncommented and configured the Ubuntu 22.04 platform in the release workflow to support the x86_64-unknown-linux-gnu target. This change enhances cross-platform compatibility for the release process.
* fix(webview): address CodeRabbit review comments
- session.rs: boundary-check the `starts_with(real_url)` match so
`https://discord.com` can't accidentally match `https://discord.com.evil/…`
when deciding whether to skip Page.navigate.
- session.rs: drop unused `_app: AppHandle<R>` parameter from spawn_session
(and its generic R); update the webview_accounts call site accordingly.
- session.rs: document the non-graceful shutdown path (cancellation token
left as a follow-up).
- discord/slack/telegram scanners: import CDP_HOST/CDP_PORT from the shared
`cdp` module instead of redeclaring them. (whatsapp_scanner keeps its
locals — the module isn't cef-gated so it can't pull from cef-only cdp::.)
- webview_accounts/mod.rs: collapse the duplicate provider_is_supported
check with provider_url into one early-return.
- emulation.rs: add a TODO documenting when/how to refresh the hardcoded
Chrome UA fingerprint fields.
- discord/slack/telegram dom_snapshot: hash every row for change detection
(was capped at first 5–8 — a reorder past that limit wouldn't invalidate
the cache).
- discord_scanner/dom_snapshot: simplify is_channel_row (single
attr lookup); tighten the pure-unread-marker comment (dropped the
obsolete recipe.js cross-reference).
- slack_scanner/dom_snapshot: align find_badge with the Discord behavior
(empty badge text → Some(0), matching the marker-present-but-no-count
semantics).
Deferred (explicitly called out in the PR): shared CdpConn dedup across
scanners, shared DomScan/ChannelRow types across provider dom_snapshot
files, graceful session shutdown, table-driven scanner startup macro.
* fix(webview): CR round-2 — session teardown, exact target match, real-url validation
- cdp/session.rs: use exact equality for the per-account target match
(`t.title == marker || t.url.ends_with(&fragment)`), so
`…account-abc` can't be mistaken for `…account-abcdef`. Scanners
(whatsapp/telegram/slack/discord) also switched from `url.contains` to
`url.ends_with` on the fragment for the same reason.
- cdp/session.rs: `spawn_session` now returns `JoinHandle<()>`.
- webview_accounts: store the CDP session handle keyed by account_id in
`WebviewAccountsState.cdp_sessions`, abort any prior handle before
spawning a new one on re-open, and abort on close/purge so reopen
cycles don't stack live CDP loops.
- webview_accounts: validate `real_url_str` as a `Url` up front (was
only validating the placeholder), so a malformed `args.url` fails the
command instead of crashing the async session loop later.
- webview_accounts: `provider_is_supported` now derives from
`provider_url` (single canonical registry, no drift).
- telegram_scanner/dom_snapshot: row ids now always include `idx`, so
two chats with the same display name don't collide into one id.
* fix(webview): CR round-3 — scanner prefix, empty-rows emit, wry UA fallback
- DOM poll: drop `!scan.rows.is_empty()` guard in discord/slack/telegram
fast-ticks so the zero-unread transition (last chat read) still emits a
hash-change snapshot. Consumers lose the "clearing" state otherwise.
- webview_accounts: derive `scanner_url_prefix` from the validated
`real_url`'s origin (via `Url::origin().ascii_serialization()`), not
the static `provider_url(...)`. Debug `args.url` overrides and
alternate hosts now drive the scanner target match correctly.
- webview_accounts: cfg-split `build_init_script`. Under cef, migrated
providers return an empty script (zero injection, unchanged). Under
wry, migrated providers that fingerprint on `navigator.*` still ship
`ua_spoof.js` even though their recipe is gone — the previous early
return dropped the UA shim, which would regress Slack/Google login
gates on wry dev builds.
OpenHuman
The age of super intelligence is here. OpenHuman is your Personal AI super intelligence. Private, Simple and extremely powerful.
Discord • Reddit • X/Twitter • Docs
"The Tet. What a brilliant machine" — Morgan Freeman as he reminisces about alien superintelligence in the movie Oblivion
Early Beta — Under active development. Expect rough edges.
To install or get started, either download from the website over at tinyhumans.ai/openhuman or run
# For MacOS/Linux
curl -fsSL https://raw.githubusercontent.com/tinyhumansai/openhuman/main/scripts/install.sh | bash
# For Windows
irm https://raw.githubusercontent.com/tinyhumansai/openhuman/main/scripts/install.ps1 | iex
What is OpenHuman?
OpenHuman is an open-source agentic assistant that is designed to integrate with you in your daily life. Here's what makes OpenHuman special:
-
Simple, UI-first — A clean desktop experience and short onboarding paths so you can go from install to a working agent in a few clicks, without a config-first setup. You don't need a terminal to run OpenHuman.
-
One subscription, many providers — You only need one account to get access to many agentic APIs (AI Models, Search, Webhooks/Tunnels and other 3rd party APIs etc..), simplifying the experience to get a powerful agent going.
-
Rich Skills — Plug into Gmail, Slack, Notion, and the rest of your stack via rich, feature-backed skills. Connections are typically one click through setup wizards instead of wiring APIs by hand. Workflow data is kept on device, encrypted locally, and treated as yours: encryption and sensitive context stay on your machine. Webhooks give instant feedback into the agent when external systems or skills emit events, so the loop stays tight without constant polling.
-
Local knowledge base — Built from your data and your activity. How you work across tools, sessions, and connected services—so the agent gets rich, workflow-aware context, not a one-off chat transcript. Everything is stored on your machine and compounding over time without becoming a cloud dossier. Channels, skills and ongoing conversations feed the same loop so day-to-day context does not reset every session.
-
Local AI model — The Rust core exposes local AI paths (and the desktop bundle can ship local/bundled runners where applicable) for the workloads above—vision snippets, speech helpers, summarization, tooling—so sensitive steps can stay off the cloud when you choose.
-
Deep desktop integrations — OpenHuman is a native desktop assistant, not a web-only chat: memory-aware keyboard autocomplete, voice (STT listening and TTS replies), screen intelligence that understands what is on screen and feeds your local context, plus windowing and OS-level permissions—so the agent meets you on the machine, not trapped in a browser tab.
Architecture: docs/ARCHITECTURE.md. Contributor orientation: CONTRIBUTING.md. Running from source: docs/install.md.
Highlights
- Neocortex — local-first knowledge base that learns from your data and activity, compounding context across tools and sessions.
- The Subconscious — background self-learning loops that turn everyday usage into workflow-aware intelligence.
- Screen Intelligence — the agent sees what's on your screen and feeds it into your local context.
- Inline Autocomplete — memory-aware keyboard autocomplete anywhere on your desktop.
- Voice (STT + TTS) — speak to OpenHuman and hear it reply, natively on the desktop.
- Skills & Integrations — one-click skills for Gmail, Slack, Notion and the rest of your stack, with local encryption and webhooks for instant feedback.
- Messaging Channels — inbound/outbound across the channels you already use, routed through your agent.
- Teams & Organizations — shared workspaces for collaborating with an agent across a team.
- Rewards & Achievements — gamified progression as your agent grows with you.
- Privacy & Security — workflow data stays on device, encrypted locally, and treated as yours.
OpenHuman vs other agents
High-level comparison (products evolve—verify against each vendor). OpenHuman is built to minimize vendor sprawl, keep workflow knowledge on-device, and ship deep desktop features—not only chat.
| Claude Code/Cowork | OpenClaw | Hermes Agent | OpenHuman | |
|---|---|---|---|---|
| Open-source | 🚫 Proprietary | ✅ MIT | ✅ MIT | ✅ GNU |
| Simple to start | ✅ Desktop + CLI | ⚠️ Terminal-first | ⚠️ Terminal-first | ✅ Clean UI, minutes |
| Cost | ⚠️ Sub + add-ons | ⚠️ BYO models | ⚠️ BYO models | ✅ Local-friendly |
| Memory & KB | ✅ Chat-scoped | ⚠️ Plugin-reliant | ✅ Self-learning | 🚀 Local KB + learning |
| API sprawl | 🚫 Extra keys | 🚫 BYOK | 🚫 Multi-vendor | ✅ One account |
| Extensibility | ✅ MCP | ✅ SKILL.md | ✅ SKILL.md | 🚀 Rich Skills |
| Desktop integration | ⚠️ Basic | ⚠️ Light | ⚠️ Light | ✅ STT/TTS/screen/more |
Contributors Hall of Fame
Show some love and end up in the hall of fame
