neoagent 2.4.4-beta.9 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,21 +1,52 @@
1
- # Why NeoAgent
1
+ # NeoAgent, OpenClaw, and Hermes
2
2
 
3
- NeoAgent is the right choice if you want a focused self-hosted agent with real Android device control, recordings, health data, and a practical operator UI. OpenClaw covers more platforms but is a different kind of product.
3
+ This page describes product emphasis, not a universal ranking. The projects
4
+ change quickly, and the right choice depends on the interfaces and operating
5
+ model you need.
4
6
 
5
- This comparison is based on the public [OpenClaw README](https://raw.githubusercontent.com/openclaw/openclaw/main/README.md) as of April 7, 2026 and the current NeoAgent repository.
7
+ The comparison was reviewed on June 14, 2026 against the public
8
+ [OpenClaw repository](https://github.com/openclaw/openclaw),
9
+ [Hermes Agent repository](https://github.com/NousResearch/hermes-agent), and
10
+ the current NeoAgent source.
6
11
 
7
- | | NeoAgent | OpenClaw |
8
- |---|---|---|
9
- | **Best for** | Personal automation server with Android control, recordings, and health data | Broad AI gateway with many channels, nodes, and companion surfaces |
10
- | **Setup** | `npm install -g neoagent && neoagent install` | `openclaw onboard` guided setup |
11
- | **Architecture** | Self-hosted Node server, SQLite, bundled web UI, server-side credentials | Gateway control plane with channels, optional nodes, wider platform surface |
12
- | **Android control** | Full AI control: screenshots, UI dumps, tap, swipe, type, intent launch, APK install, `adb shell` | Android node capabilities via the node ecosystem |
13
- | **Messaging** | 15+ platforms built-in Telegram, WhatsApp, Discord, Slack, Signal, Matrix, iMessage, Teams, IRC, LINE, Mattermost, Telnyx Voice, webhook bridges | Larger channel/node ecosystem |
14
- | **Operator UI** | Chat, runs, logs, tasks, skills, integrations, MCP, memory, devices, recordings, health, settings | Gateway, canvas, platform, node, and channel surfaces |
15
- | **Credentials** | All secrets server-side; channel settings stored through the app | Broader config surface across gateway, channels, and nodes |
16
- | **Automation** | Cron tasks, integration triggers, browser/CLI skills, MCP, subagents, recording search, health summaries, messaging delivery | Cron, webhooks, nodes, channel-specific actions |
17
- | **Recovery** | `neoagent status`, `neoagent logs`, `neoagent update`, `neoagent fix` | Doctor-style diagnostics plus channel/node tooling |
12
+ | Area | NeoAgent | OpenClaw | Hermes Agent |
13
+ |---|---|---|---|
14
+ | Primary experience | Operator UI backed by a self-hosted service | Gateway and assistant across channels, nodes, and companion surfaces | Terminal UI or messaging gateway |
15
+ | Persistent memory | Local structured facts, temporal updates, provenance, hybrid retrieval | Project-defined memory and plugin surfaces | Built-in Markdown memory with optional external memory providers |
16
+ | Android operation | Direct ADB control of a host-attached device or emulator | Android companion/node capabilities | Android and Termux-oriented capabilities |
17
+ | Desktop and browser | Isolated runtime, paired desktop companion, paired Chrome extension | Node and companion ecosystem | Local and remote execution backends |
18
+ | Multi-user administration | User accounts, admin interface, optional service email, per-user runtime | Gateway-centered deployment model | Primarily personal-agent configuration |
19
+ | Automation | Schedules, account events, weather events, webhooks, notification runs | Cron, hooks, webhooks, and channel/node events | Cron, gateway events, and tool-driven workflows |
20
+ | Interfaces | Web, Android, desktop, launcher, messaging, extension, wearable firmware | Broad channel, platform, node, and companion ecosystem | Terminal plus Telegram, Discord, Slack, WhatsApp, Signal, email, and other integrations |
21
+ | Migration into NeoAgent | Native importer target | Skills, memory files, and selected keys can be imported | Skills, memory files, and selected keys can be imported |
18
22
 
19
- **Choose NeoAgent** when you want the shortest path to a self-hosted proactive agent with Android control and a practical operator UI.
23
+ ## Choose NeoAgent when
20
24
 
21
- **Choose OpenClaw** when you need maximum channel coverage, a gateway/node architecture, or the larger companion-app ecosystem.
25
+ - You want a visual operator interface for agents, runs, memory, tasks,
26
+ accounts, devices, and administration.
27
+ - Direct Android control over ADB is central to the deployment.
28
+ - You want structured memory and integration ingestion without a separate
29
+ memory service.
30
+ - You need multiple users or specialist agents with separate state.
31
+ - Launcher mode, Health Connect, recordings, or the bundled device interfaces
32
+ are part of the use case.
33
+
34
+ ## Consider OpenClaw when
35
+
36
+ - Its larger gateway, node, channel, plugin, or companion ecosystem is the main
37
+ requirement.
38
+ - You need an existing OpenClaw-specific integration or community resource.
39
+ - Its distributed assistant architecture better matches your devices.
40
+
41
+ ## Consider Hermes when
42
+
43
+ - A terminal-first workflow is preferable.
44
+ - Its skill ecosystem, remote execution options, or model workflow fits the
45
+ task.
46
+ - Built-in Markdown memory or one of its external memory providers is already
47
+ part of your setup.
48
+
49
+ NeoAgent's memory architecture is documented in [Memory](memory.md). The
50
+ project does not claim superior recall without a reproducible, published
51
+ benchmark that records the dataset, models, retrieval settings, judge, token
52
+ budget, latency, and run artifacts.
@@ -890,7 +890,6 @@ p { margin: 0; text-wrap: pretty; }
890
890
  </nav>
891
891
  <div class="nav-right">
892
892
  <a class="signin" href="/app">Sign in</a>
893
- <a class="btn btn-primary" href="#cta">Get early access</a>
894
893
  </div>
895
894
  <button class="nav-toggle" aria-label="Menu">
896
895
  <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 6h18M3 12h18M3 18h18" stroke-linecap="round"></path></svg>
@@ -900,7 +899,6 @@ p { margin: 0; text-wrap: pretty; }
900
899
  <a href="#features">Features</a>
901
900
  <a href="#channels">Channels</a>
902
901
  <a href="#how">How it works</a>
903
- <a class="btn btn-primary" href="#cta">Get early access</a>
904
902
  </div>
905
903
  </header>
906
904
 
@@ -919,7 +917,6 @@ p { margin: 0; text-wrap: pretty; }
919
917
  </h1>
920
918
  <p class="lede">NeoAgent watches, listens, and acts across your devices, browser, voice, and messaging — one operator that quietly handles your digital world.</p>
921
919
  <div class="hero-actions">
922
- <a class="btn btn-primary btn-lg" href="#cta">Get early access</a>
923
920
  <a class="btn btn-soft btn-lg" href="#features">Explore features
924
921
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12h14M13 6l6 6-6 6" stroke-linecap="round" stroke-linejoin="round"></path></svg>
925
922
  </a>
@@ -1201,7 +1198,6 @@ p { margin: 0; text-wrap: pretty; }
1201
1198
  <h2>The agent that just <em>handles it.</em></h2>
1202
1199
  <p>Be first to put NeoAgent to work across your devices, channels, and life. We'll send your invite as spots open up.</p>
1203
1200
  <div class="hero-actions" style="justify-content:center;">
1204
- <a class="btn btn-primary btn-lg" href="#">Get early access</a>
1205
1201
  <a class="btn btn-soft btn-lg" href="#features">Explore features</a>
1206
1202
  </div>
1207
1203
  </div>
@@ -5,6 +5,7 @@ function withInstallEnv(extraEnv = {}) {
5
5
  return {
6
6
  ...process.env,
7
7
  PUPPETEER_SKIP_DOWNLOAD: process.env.PUPPETEER_SKIP_DOWNLOAD || 'true',
8
+ PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: process.env.PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD || '1',
8
9
  ...extraEnv,
9
10
  };
10
11
  }
package/lib/manager.js CHANGED
@@ -1593,7 +1593,12 @@ async function cmdInstall() {
1593
1593
  if (platform === 'macos' && commandExists('launchctl')) {
1594
1594
  installMacService();
1595
1595
  } else if (platform === 'linux' && commandExists('systemctl')) {
1596
- installLinuxService();
1596
+ try {
1597
+ installLinuxService();
1598
+ } catch (err) {
1599
+ logWarn(`systemd setup failed (${err.message}); falling back to detached process`);
1600
+ startFallback();
1601
+ }
1597
1602
  } else {
1598
1603
  startFallback();
1599
1604
  }
@@ -1730,7 +1735,12 @@ async function cmdFix() {
1730
1735
  if (platform === 'macos' && commandExists('launchctl')) {
1731
1736
  installMacService();
1732
1737
  } else if (platform === 'linux' && commandExists('systemctl')) {
1733
- installLinuxService();
1738
+ try {
1739
+ installLinuxService();
1740
+ } catch (err) {
1741
+ logWarn(`systemd setup failed (${err.message}); falling back to detached process`);
1742
+ startFallback();
1743
+ }
1734
1744
  } else {
1735
1745
  startFallback();
1736
1746
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neoagent",
3
- "version": "2.4.4-beta.9",
3
+ "version": "2.5.0",
4
4
  "description": "Proactive personal AI agent with no limits",
5
5
  "license": "AGPL-3.0-only",
6
6
  "main": "server/index.js",
@@ -35,7 +35,7 @@
35
35
  "dev:test": "./dev/test.sh",
36
36
  "docs:dev": "docusaurus start",
37
37
  "docs:build": "docusaurus build",
38
- "docs:preview": "docusaurus serve build",
38
+ "docs:preview": "docusaurus serve --dir build",
39
39
  "flutter:run:web": "cd flutter_app && flutter run -d chrome --dart-define=NEOAGENT_WEB_BUILD_ID=$(node ../scripts/web_build_id.js)",
40
40
  "flutter:build:web": "cd flutter_app && flutter build web --output ../server/public --dart-define=NEOAGENT_BACKEND_URL=${NEOAGENT_BACKEND_URL:-} --dart-define=NEOAGENT_WEB_BUILD_ID=$(node ../scripts/web_build_id.js)",
41
41
  "manage": "node bin/neoagent.js",
@@ -1 +1 @@
1
- 0f41f70b1fd6912f77560d7afb5426b8
1
+ 19c1d10149165130fbea47cda54945d1
@@ -37,6 +37,6 @@ _flutter.buildConfig = {"engineRevision":"77e2e94772b6eb43759e34ed1ad7da4674e19c
37
37
 
38
38
  _flutter.loader.load({
39
39
  serviceWorkerSettings: {
40
- serviceWorkerVersion: "881551279" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
40
+ serviceWorkerVersion: "1413531917" /* Flutter's service worker is deprecated and will be removed in a future Flutter release. */
41
41
  }
42
42
  });
@@ -134794,7 +134794,7 @@ r===$&&A.b()
134794
134794
  p.push(A.jQ(q,A.ja(!1,new A.a_(B.uG,A.d8(new A.cA(B.jt,new A.a7M(r,q),q),q,q),q),!1,B.H,!0),q,q,0,0,0,q))}r=!1
134795
134795
  if(!s.ay)if(!s.ch){r=s.e
134796
134796
  r===$&&A.b()
134797
- r=B.b.u("mqdvo69p-d0a2deb").length!==0&&r.b}if(r){r=s.d
134797
+ r=B.b.u("mqe7vfz7-dda61c3").length!==0&&r.b}if(r){r=s.d
134798
134798
  r===$&&A.b()
134799
134799
  r=r.aP&&!r.ai?84:0
134800
134800
  s=s.e
@@ -140506,7 +140506,7 @@ $S:0}
140506
140506
  A.a_5.prototype={}
140507
140507
  A.SP.prototype={
140508
140508
  nb(a){var s=this
140509
- if(B.b.u("mqdvo69p-d0a2deb").length===0||s.a!=null)return
140509
+ if(B.b.u("mqe7vfz7-dda61c3").length===0||s.a!=null)return
140510
140510
  s.AU()
140511
140511
  s.a=A.on(B.RH,new A.bc7(s))},
140512
140512
  AU(){var s=0,r=A.l(t.H),q,p=2,o=[],n=this,m,l,k,j,i,h,g,f
@@ -140524,7 +140524,7 @@ if(!t.f.b(k)){s=1
140524
140524
  break}i=J.a3(k,"buildId")
140525
140525
  h=i==null?null:B.b.u(J.p(i))
140526
140526
  j=h==null?"":h
140527
- if(J.bi(j)===0||J.d(j,"mqdvo69p-d0a2deb")){s=1
140527
+ if(J.bi(j)===0||J.d(j,"mqe7vfz7-dda61c3")){s=1
140528
140528
  break}n.b=!0
140529
140529
  n.F()
140530
140530
  p=2
@@ -140541,7 +140541,7 @@ case 2:return A.i(o.at(-1),r)}})
140541
140541
  return A.k($async$AU,r)},
140542
140542
  vE(){var s=0,r=A.l(t.H),q,p=2,o=[],n=this,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1
140543
140543
  var $async$vE=A.h(function(a2,a3){if(a2===1){o.push(a3)
140544
- s=p}for(;;)switch(s){case 0:if(B.b.u("mqdvo69p-d0a2deb").length===0||n.c){s=1
140544
+ s=p}for(;;)switch(s){case 0:if(B.b.u("mqe7vfz7-dda61c3").length===0||n.c){s=1
140545
140545
  break}n.c=!0
140546
140546
  n.F()
140547
140547
  p=4