neoagent 2.3.1-beta.90 → 2.3.1-beta.93

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.
Files changed (48) hide show
  1. package/.env.example +4 -0
  2. package/README.md +2 -2
  3. package/docs/automation.md +82 -41
  4. package/docs/capabilities.md +85 -91
  5. package/docs/configuration.md +86 -103
  6. package/docs/getting-started.md +37 -35
  7. package/docs/index.md +24 -30
  8. package/docs/integrations.md +46 -63
  9. package/docs/migration.md +41 -146
  10. package/docs/operations.md +23 -20
  11. package/docs/skills.md +20 -20
  12. package/docs/why-neoagent.md +15 -13
  13. package/extensions/chrome-browser/background.mjs +10 -2
  14. package/flutter_app/DESIGN_SYSTEM.md +166 -0
  15. package/flutter_app/lib/main_app_shell.dart +33 -15
  16. package/flutter_app/lib/main_chat.dart +4 -2
  17. package/flutter_app/lib/main_controller.dart +10 -2
  18. package/flutter_app/lib/main_devices.dart +80 -745
  19. package/flutter_app/lib/main_settings.dart +50 -0
  20. package/flutter_app/lib/main_shared.dart +10 -10
  21. package/flutter_app/lib/main_spacing.dart +15 -0
  22. package/flutter_app/lib/main_theme.dart +10 -0
  23. package/package.json +1 -1
  24. package/server/db/database.js +1 -1
  25. package/server/public/.last_build_id +1 -1
  26. package/server/public/assets/fonts/MaterialIcons-Regular.otf +0 -0
  27. package/server/public/flutter_bootstrap.js +1 -1
  28. package/server/public/main.dart.js +48503 -48389
  29. package/server/routes/agents.js +4 -1
  30. package/server/routes/auth.js +1 -4
  31. package/server/routes/memory.js +3 -3
  32. package/server/routes/settings.js +11 -2
  33. package/server/routes/skills.js +12 -0
  34. package/server/routes/tasks.js +22 -2
  35. package/server/services/ai/capabilityHealth.js +2 -3
  36. package/server/services/ai/toolRunner.js +12 -0
  37. package/server/services/android/controller.js +456 -2851
  38. package/server/services/memory/manager.js +18 -7
  39. package/server/services/messaging/manager.js +15 -1
  40. package/server/services/runtime/backends/local-vm.js +2 -136
  41. package/server/services/runtime/docker-vm-manager.js +392 -0
  42. package/server/services/runtime/manager.js +53 -38
  43. package/server/services/runtime/settings.js +12 -10
  44. package/server/services/runtime/validation.js +4 -1
  45. package/server/services/tasks/integration_runtime.js +1 -1
  46. package/server/services/tasks/task_repository.js +3 -6
  47. package/server/utils/deployment.js +8 -2
  48. package/server/services/runtime/qemu.js +0 -1118
@@ -1,62 +1,36 @@
1
1
  # Configuration
2
2
 
3
- NeoAgent keeps deployment secrets on the server. The default config file is `~/.neoagent/.env`; run `neoagent setup` to regenerate it interactively. You can move the runtime root by setting `NEOAGENT_HOME`.
3
+ NeoAgent reads server config from `~/.neoagent/.env`. Run `neoagent setup` to generate or update it interactively. Set `NEOAGENT_HOME` to move the runtime root.
4
4
 
5
- AI provider credentials, OAuth client secrets, and deployment controls are not configured through the public web client. The Flutter UI can select providers and models, but the secrets stay in server-side environment variables or in the local NeoAgent database where the app explicitly stores channel settings.
5
+ All AI provider credentials, OAuth client secrets, and deployment settings are server-side only never sent to the client or exposed in the UI.
6
6
 
7
- ## Core Variables
8
-
9
- | Variable | Default | Description |
10
- |---|---:|---|
11
- | `PORT` | `3333` | HTTP port for the NeoAgent server. |
12
- | `PUBLIC_URL` | optional | Public base URL used for OAuth callbacks and external links. |
13
- | `SESSION_SECRET` | required | Random string for session signing. Generate one with `openssl rand -hex 32`. |
14
- | `NODE_ENV` | `production` | Set to `development` to enable verbose logs. |
15
- | `SECURE_COOKIES` | `false` | Set `true` when NeoAgent is behind a TLS-terminating proxy. |
16
- | `TRUST_PROXY` | inferred from `PUBLIC_URL`/`SECURE_COOKIES` | Set `true` when NeoAgent runs behind Nginx, Caddy, Cloudflare, Fly, or another reverse proxy that sends `X-Forwarded-*` headers. |
17
- | `ALLOWED_ORIGINS` | none | Comma-separated CORS origins, for example `https://example.com`. |
18
- | `NEOAGENT_DEPLOYMENT_MODE` | `self_hosted` | `self_hosted` enables in-app update controls; `managed` hides operator-only controls for SaaS deployments. |
19
- | `NEOAGENT_RELEASE_CHANNEL` | `stable` | Release track used by the self-hosted updater. |
20
-
21
- ## Analytics
22
-
23
- NeoAgent can send anonymous Mixpanel usage events from the Flutter client. The events cover app startup, section navigation, auth success, backend setup, onboarding dismissal, chat sends, recording start/stop, task runs, update checks, and update triggers. They do not include message content, credentials, or other app data.
24
-
25
- Set `NEOAGENT_MIXPANEL_TOKEN` to your own public Mixpanel project token to enable analytics. Leave it blank to disable analytics entirely.
26
- When analytics is enabled, the web client shows a dismissible cookie-consent banner until the user accepts or declines.
27
-
28
- | Variable | Default | Description |
29
- |---|---:|---|
30
- | `NEOAGENT_MIXPANEL_TOKEN` | optional | Public Mixpanel project token used by the Flutter client. |
7
+ ## Minimal Config
31
8
 
32
- ## Service Email
9
+ ```dotenv
10
+ PORT=3333
11
+ SESSION_SECRET=change-me-to-something-random
12
+ ANTHROPIC_API_KEY=sk-ant-...
13
+ ```
33
14
 
34
- Service email is optional. When `NEOAGENT_EMAIL_FROM` and `NEOAGENT_EMAIL_SMTP_HOST` are set, NeoAgent uses SMTP for account security flows: signup confirmation, password reset, unusual login notifications, password change notifications, and email change notifications. Confirmation and reset links use the same `PUBLIC_URL` base as the other server-generated links.
15
+ Generate a session secret: `openssl rand -hex 32`
35
16
 
36
- This mailbox is only for the NeoAgent server. The agent cannot read, search, or send from it, and it is not exposed as a Gmail, Outlook, or messaging integration account. Configure Gmail/Outlook tools separately under official integrations if you want the agent to work with a mailbox.
17
+ ## Core Variables
37
18
 
38
19
  | Variable | Default | Description |
39
20
  |---|---:|---|
40
- | `NEOAGENT_EMAIL_REQUIRE_SIGNUP_CONFIRMATION` | `true` when enabled | Requires new signup email confirmation before sign-in. |
41
- | `NEOAGENT_EMAIL_REQUIRE_EMAIL_CHANGE_CONFIRMATION` | `true` when enabled | Requires account email changes to be confirmed by the new address. |
42
- | `NEOAGENT_EMAIL_NOTIFY_UNUSUAL_LOGIN` | `true` | Sends a security notice when a login uses a new device or network pattern. |
43
- | `NEOAGENT_EMAIL_NOTIFY_ACCOUNT_CHANGES` | `true` | Sends notices for password and email changes. |
44
- | `NEOAGENT_EMAIL_BRAND_NAME` | `NeoAgent` | Display name used by service email templates. |
45
- | `NEOAGENT_EMAIL_SUPPORT_URL` | optional | Optional operator support URL reserved for service email templates. |
46
- | `NEOAGENT_EMAIL_TOKEN_TTL_HOURS` | `24` | Confirmation link lifetime. |
47
- | `NEOAGENT_EMAIL_FROM` | required when enabled | Sender header, for example `NeoAgent <no-reply@example.com>`. |
48
- | `NEOAGENT_EMAIL_REPLY_TO` | optional | Reply-To header. |
49
- | `NEOAGENT_EMAIL_SMTP_HOST` | required when enabled | SMTP hostname. |
50
- | `NEOAGENT_EMAIL_SMTP_PORT` | `587` | SMTP port. |
51
- | `NEOAGENT_EMAIL_SMTP_SECURE` | `true` on port `465` | Use implicit TLS. |
52
- | `NEOAGENT_EMAIL_SMTP_REQUIRE_TLS` | `true` unless implicit TLS | Require STARTTLS for non-implicit-TLS SMTP. |
53
- | `NEOAGENT_EMAIL_SMTP_REJECT_UNAUTHORIZED` | `true` | Reject invalid TLS certificates. Keep enabled in production. |
54
- | `NEOAGENT_EMAIL_SMTP_USER` | optional | SMTP username. |
55
- | `NEOAGENT_EMAIL_SMTP_PASS` | optional | SMTP password or app password. |
21
+ | `PORT` | `3333` | HTTP port for the NeoAgent server |
22
+ | `PUBLIC_URL` | optional | Public base URL required for OAuth callbacks, messaging webhooks, and mobile access |
23
+ | `SESSION_SECRET` | required | Random string for session signing |
24
+ | `NODE_ENV` | `production` | Set to `development` for verbose logs |
25
+ | `SECURE_COOKIES` | `false` | Set `true` when behind a TLS-terminating proxy |
26
+ | `TRUST_PROXY` | inferred | Set `true` when behind Nginx, Caddy, Cloudflare, Fly, or any proxy sending `X-Forwarded-*` |
27
+ | `ALLOWED_ORIGINS` | none | Comma-separated CORS origins |
28
+ | `NEOAGENT_DEPLOYMENT_MODE` | `self_hosted` | `managed` hides operator-only controls for SaaS deployments |
29
+ | `NEOAGENT_RELEASE_CHANNEL` | `stable` | Release track followed by `neoagent update` |
56
30
 
57
31
  ## AI Providers
58
32
 
59
- At least one hosted-provider API key is required unless you only use local Ollama. The active provider and model routing are selected in the app, but credentials are read from server-side config.
33
+ At least one key is required unless you only use local Ollama.
60
34
 
61
35
  | Variable | Provider |
62
36
  |---|---|
@@ -65,95 +39,104 @@ At least one hosted-provider API key is required unless you only use local Ollam
65
39
  | `XAI_API_KEY` | Grok (xAI) |
66
40
  | `XAI_BASE_URL` | Optional xAI-compatible base URL override |
67
41
  | `GOOGLE_AI_KEY` | Gemini (Google) |
68
- | `MINIMAX_API_KEY` | MiniMax Code, including `MiniMax-M2.7` |
69
- | `BRAVE_SEARCH_API_KEY` | Brave Search API for the native `web_search` tool |
42
+ | `MINIMAX_API_KEY` | MiniMax (including `MiniMax-M2.7`) |
43
+ | `BRAVE_SEARCH_API_KEY` | Brave Search for the `web_search` tool |
70
44
  | `OPENAI_BASE_URL` | Optional OpenAI-compatible base URL override |
71
45
  | `ANTHROPIC_BASE_URL` | Optional Anthropic-compatible base URL override |
72
- | `DEEPGRAM_API_KEY` | Recordings transcription with Deepgram |
73
- | `DEEPGRAM_BASE_URL` | Optional Deepgram API base URL override |
74
- | `DEEPGRAM_MODEL` | Deepgram speech model override, defaults to `nova-3` |
75
- | `DEEPGRAM_LANGUAGE` | Deepgram language override, defaults to `multi` |
76
- | `OLLAMA_URL` | Local Ollama server, usually `http://localhost:11434` |
77
-
78
- Recording insight generation is controlled in app AI settings with `auto_recording_insights`. It uses the configured AI providers after Deepgram transcription has produced transcript text.
46
+ | `DEEPGRAM_API_KEY` | Recording transcription |
47
+ | `DEEPGRAM_BASE_URL` | Optional Deepgram base URL override |
48
+ | `DEEPGRAM_MODEL` | Deepgram speech model (default: `nova-3`) |
49
+ | `DEEPGRAM_LANGUAGE` | Deepgram language mode (default: `multi`) |
50
+ | `OLLAMA_URL` | Local Ollama server, e.g. `http://localhost:11434` |
79
51
 
80
52
  ## Official Integrations
81
53
 
82
- Official integrations use OAuth or provider-native account linking and expose structured tools to the agent. The built-in registry currently covers Google Workspace, Notion, Microsoft 365, Slack, Figma, Home Assistant, Trello, Weather, Spotify, and personal WhatsApp.
54
+ OAuth app credentials for structured agent tools. All callbacks default to `PUBLIC_URL + /api/integrations/oauth/callback`.
83
55
 
84
- All OAuth callbacks default to `PUBLIC_URL + /api/integrations/oauth/callback` unless you set a provider-specific redirect URI.
56
+ Home Assistant and Trello can be configured per-user in the Flutter UI without any server-side setup.
85
57
 
86
58
  | Variable | Description |
87
59
  |---|---|
88
- | `GOOGLE_OAUTH_CLIENT_ID` | Google Workspace OAuth client ID |
89
- | `GOOGLE_OAUTH_CLIENT_SECRET` | Google Workspace OAuth client secret |
90
- | `GOOGLE_OAUTH_REDIRECT_URI` | Optional Google Workspace OAuth callback URL |
91
- | `NOTION_OAUTH_CLIENT_ID` | Notion OAuth client ID |
92
- | `NOTION_OAUTH_CLIENT_SECRET` | Notion OAuth client secret |
60
+ | `GOOGLE_OAUTH_CLIENT_ID` | Google Workspace client ID |
61
+ | `GOOGLE_OAUTH_CLIENT_SECRET` | Google Workspace client secret |
62
+ | `GOOGLE_OAUTH_REDIRECT_URI` | Optional Google OAuth callback URL |
63
+ | `NOTION_OAUTH_CLIENT_ID` | Notion client ID |
64
+ | `NOTION_OAUTH_CLIENT_SECRET` | Notion client secret |
93
65
  | `NOTION_OAUTH_REDIRECT_URI` | Optional Notion OAuth callback URL |
94
- | `MICROSOFT_OAUTH_CLIENT_ID` | Microsoft 365 OAuth client ID |
95
- | `MICROSOFT_OAUTH_CLIENT_SECRET` | Microsoft 365 OAuth client secret |
96
- | `MICROSOFT_OAUTH_REDIRECT_URI` | Optional Microsoft 365 OAuth callback URL |
97
- | `MICROSOFT_OAUTH_TENANT_ID` | Optional Entra tenant selector, defaults to `common` |
98
- | `SLACK_OAUTH_CLIENT_ID` | Slack OAuth client ID |
99
- | `SLACK_OAUTH_CLIENT_SECRET` | Slack OAuth client secret |
66
+ | `MICROSOFT_OAUTH_CLIENT_ID` | Microsoft 365 client ID |
67
+ | `MICROSOFT_OAUTH_CLIENT_SECRET` | Microsoft 365 client secret |
68
+ | `MICROSOFT_OAUTH_REDIRECT_URI` | Optional Microsoft OAuth callback URL |
69
+ | `MICROSOFT_OAUTH_TENANT_ID` | Entra tenant selector (default: `common`) |
70
+ | `SLACK_OAUTH_CLIENT_ID` | Slack client ID |
71
+ | `SLACK_OAUTH_CLIENT_SECRET` | Slack client secret |
100
72
  | `SLACK_OAUTH_REDIRECT_URI` | Optional Slack OAuth callback URL |
101
- | `FIGMA_OAUTH_CLIENT_ID` | Figma OAuth client ID |
102
- | `FIGMA_OAUTH_CLIENT_SECRET` | Figma OAuth client secret |
73
+ | `FIGMA_OAUTH_CLIENT_ID` | Figma client ID |
74
+ | `FIGMA_OAUTH_CLIENT_SECRET` | Figma client secret |
103
75
  | `FIGMA_OAUTH_REDIRECT_URI` | Optional Figma OAuth callback URL |
104
- | `TRELLO_API_KEY` | Optional Trello Power-Up API key. If set, users only need to provide their personal token in Official Integrations. |
105
- | `SPOTIFY_OAUTH_CLIENT_ID` | Spotify OAuth client ID |
106
- | `SPOTIFY_OAUTH_CLIENT_SECRET` | Spotify OAuth client secret |
76
+ | `TRELLO_API_KEY` | Server-side Trello Power-Up key if set, users only need their personal token |
77
+ | `SPOTIFY_OAUTH_CLIENT_ID` | Spotify client ID |
78
+ | `SPOTIFY_OAUTH_CLIENT_SECRET` | Spotify client secret |
107
79
  | `SPOTIFY_OAUTH_REDIRECT_URI` | Optional Spotify OAuth callback URL |
108
80
 
109
- Home Assistant and Trello no longer require server-side setup. Each user can open Official Integrations and enter their own provider-specific credentials in the Flutter UI.
81
+ ## Messaging
110
82
 
111
- Trello integration is flexible: users can provide both API key and token in the UI, or if `TRELLO_API_KEY` is set as a server environment variable, users only need to authenticate with their personal token. Tokens are stored securely per user and are never added to server environment variables.
83
+ Messaging platform credentials (Telegram, Discord, WhatsApp, Slack, etc.) are configured through the Flutter app messaging tab not `.env`. The exception is Telnyx, which requires server-side webhook verification.
112
84
 
113
- Weather integration uses Open-Meteo public endpoints and does not require OAuth environment variables.
85
+ | Variable | Description |
86
+ |---|---|
87
+ | `TELNYX_WEBHOOK_TOKEN` | Telnyx webhook signature verification token |
114
88
 
115
- ## Messaging
89
+ Generic inbound webhook path: `PUBLIC_URL + /api/messaging/webhook/:platform`
116
90
 
117
- Messaging platform credentials are stored through the Flutter app messaging tab, not in `.env`. This includes Telegram, Discord, Slack, Google Chat, Microsoft Teams, Matrix, Signal, iMessage/BlueBubbles, IRC, Twitch, LINE, Mattermost, and the configurable webhook bridges. Use the app to set platform tokens, webhook URLs, inbound secrets, polling options, and access lists.
91
+ ## Service Email
118
92
 
119
- Generic inbound messaging callbacks use:
93
+ Optional. When configured, NeoAgent uses SMTP for account flows: signup confirmation, password reset, and security notifications. This mailbox is for the NeoAgent server only — it is not exposed as a Gmail or Outlook integration.
120
94
 
121
- ```text
122
- PUBLIC_URL + /api/messaging/webhook/:platform
123
- ```
95
+ | Variable | Default | Description |
96
+ |---|---:|---|
97
+ | `NEOAGENT_EMAIL_FROM` | required | Sender address, e.g. `NeoAgent <no-reply@example.com>` |
98
+ | `NEOAGENT_EMAIL_SMTP_HOST` | required | SMTP hostname |
99
+ | `NEOAGENT_EMAIL_SMTP_PORT` | `587` | SMTP port |
100
+ | `NEOAGENT_EMAIL_SMTP_USER` | optional | SMTP username |
101
+ | `NEOAGENT_EMAIL_SMTP_PASS` | optional | SMTP password or app password |
102
+ | `NEOAGENT_EMAIL_SMTP_SECURE` | `true` on port 465 | Use implicit TLS |
103
+ | `NEOAGENT_EMAIL_SMTP_REQUIRE_TLS` | `true` | Require STARTTLS |
104
+ | `NEOAGENT_EMAIL_SMTP_REJECT_UNAUTHORIZED` | `true` | Reject invalid TLS certs — keep enabled in production |
105
+ | `NEOAGENT_EMAIL_REPLY_TO` | optional | Reply-To header |
106
+ | `NEOAGENT_EMAIL_REQUIRE_SIGNUP_CONFIRMATION` | `true` | Require email confirmation before first sign-in |
107
+ | `NEOAGENT_EMAIL_REQUIRE_EMAIL_CHANGE_CONFIRMATION` | `true` | Require confirmation when changing account email |
108
+ | `NEOAGENT_EMAIL_NOTIFY_UNUSUAL_LOGIN` | `true` | Security notice for new device or network logins |
109
+ | `NEOAGENT_EMAIL_NOTIFY_ACCOUNT_CHANGES` | `true` | Notices for password and email changes |
110
+ | `NEOAGENT_EMAIL_BRAND_NAME` | `NeoAgent` | Display name in email templates |
111
+ | `NEOAGENT_EMAIL_SUPPORT_URL` | optional | Support link for email templates |
112
+ | `NEOAGENT_EMAIL_TOKEN_TTL_HOURS` | `24` | Confirmation link expiry |
124
113
 
125
- Telnyx webhook verification is configured through the environment.
114
+ ## Runtime Isolation
126
115
 
127
116
  | Variable | Description |
128
117
  |---|---|
129
- | `TELNYX_WEBHOOK_TOKEN` | Telnyx webhook signature verification token |
130
-
131
- ## Runtime Isolation
132
-
133
- Runtime profile and backend selection are stored in user settings, not normally in `.env`. The main profiles are `trusted-host` and `secure-vm`. CLI and Android tools may still follow the selected runtime profile, but browser control is always isolated: the non-extension browser backend runs in the VM, not on the host device.
118
+ | `NEOAGENT_VM_GUEST_TOKEN` | Required for `secure-vm` policy use 32+ characters, no placeholder values |
134
119
 
135
- Production policy can require the VM backend. In that case, set a strong `NEOAGENT_VM_GUEST_TOKEN` of at least 32 characters and avoid placeholder values.
120
+ Runtime profiles (`trusted-host`, `secure-vm`) are set in user settings, not `.env`. See [Capabilities: Runtime Modes](capabilities.md#runtime-modes).
136
121
 
137
- The VM backend requires QEMU on the host machine. It runs an x86_64 Ubuntu guest so the Android emulator can run in the same isolated runtime as the browser. On macOS, install QEMU with `brew install qemu`. On Ubuntu or Debian, install `qemu-system` and `qemu-utils` from apt before starting NeoAgent.
122
+ ## Analytics
138
123
 
139
- The app exposes two browser backend choices: VM and Chrome extension. VM uses the local isolated runtime. Chrome extension uses the paired extension connection on the remote machine instead of the server-local browser. To install only the extension on a remote machine, open NeoAgent, download `/api/browser-extension/download`, unzip it, load the folder through `chrome://extensions` with Developer mode enabled, then pair after logging in to NeoAgent. Unpacked Chrome extensions cannot replace themselves automatically; use the extension popup's update check to compare against the server bundle, then download and reload the latest ZIP when needed.
124
+ NeoAgent can send anonymous usage events to your own Mixpanel project. Events cover navigation and feature usage only no message content, credentials, or personal data.
140
125
 
141
- ## Secrets Guidance
126
+ | Variable | Description |
127
+ |---|---|
128
+ | `NEOAGENT_MIXPANEL_TOKEN` | Public Mixpanel project token — leave blank to disable analytics |
142
129
 
143
- Treat `SESSION_SECRET`, provider API keys, OAuth client secrets, service email SMTP credentials, messaging credentials, and Telnyx tokens as sensitive. Do not commit them, print them in logs, or expose them in client-side code. Store them in server-side environment variables or a secrets manager, restrict access to operators who need them, and rotate them immediately if you suspect exposure.
130
+ When analytics is enabled, the web client shows a cookie-consent banner until accepted or declined.
144
131
 
145
132
  ## Runtime Paths
146
133
 
147
- | Path | Purpose |
134
+ | Path | Contents |
148
135
  |---|---|
149
- | `~/.neoagent/.env` | Server config and deployment secrets |
150
- | `~/.neoagent/data/` | Database, sessions, update status, and logs |
151
- | `~/.neoagent/agent-data/` | Skills, memory, and daily data files |
136
+ | `~/.neoagent/.env` | Server config and secrets |
137
+ | `~/.neoagent/data/` | Database, sessions, logs, update status |
138
+ | `~/.neoagent/agent-data/` | Skills, memory, daily data |
152
139
 
153
- ## Minimal `.env` Example
140
+ ## Security
154
141
 
155
- ```dotenv
156
- PORT=3333
157
- SESSION_SECRET=change-me-to-something-random
158
- ANTHROPIC_API_KEY=sk-ant-...
159
- ```
142
+ Treat `SESSION_SECRET`, all API keys, OAuth client secrets, SMTP credentials, and messaging tokens as sensitive. Don't commit them, log them, or expose them in client code or screenshots. Rotate immediately if you suspect exposure.
@@ -1,31 +1,27 @@
1
1
  # Getting Started
2
2
 
3
- NeoAgent installs as a Node CLI and runs a self-hosted server with a bundled Flutter web client. The same server can be reached from the Android client when you point it at the deployed backend URL.
3
+ Install takes about 5 minutes. The first VM boot downloads and configures an Ubuntu guest image, which adds a few more minutes on first run.
4
4
 
5
5
  ## Requirements
6
6
 
7
- - Node.js 20 or newer.
8
- - QEMU for VM-backed browser and Android runs.
9
- - A reachable server URL if you want OAuth callbacks, mobile access, or messaging webhooks.
10
- - At least one hosted AI provider API key, unless you only use local Ollama.
11
- - Android Studio or a Flutter Android toolchain if you build the Android client yourself.
7
+ | | |
8
+ |---|---|
9
+ | Node.js | 20 or newer |
10
+ | QEMU | for VM-isolated browser and Android |
11
+ | AI provider key | Anthropic, OpenAI, Gemini, Grok, MiniMax, or local Ollama |
12
12
 
13
- ### QEMU Installation
13
+ No API key is required if you only use local Ollama.
14
14
 
15
- NeoAgent uses a per-user x86_64 VM for browser and Android execution. Install QEMU before starting the service:
15
+ ### Install QEMU
16
16
 
17
17
  ```bash
18
18
  # macOS
19
19
  brew install qemu
20
20
 
21
21
  # Ubuntu / Debian
22
- sudo apt-get update
23
- sudo apt-get install -y qemu-system qemu-utils
22
+ sudo apt-get update && sudo apt-get install -y qemu-system qemu-utils
24
23
  ```
25
24
 
26
- The first VM boot also downloads the Ubuntu base image and seeds the guest runtime automatically.
27
- That guest bootstrap installs the browser and Android runtime dependencies it needs, including Java and the emulator support packages.
28
-
29
25
  ## Install
30
26
 
31
27
  ```bash
@@ -33,49 +29,55 @@ npm install -g neoagent
33
29
  neoagent install
34
30
  ```
35
31
 
36
- `neoagent install` runs setup if `~/.neoagent/.env` does not exist, installs dependencies, builds or verifies the bundled web client, and starts the service through the host service manager when available.
37
-
38
- On macOS, NeoAgent uses a `launchd` user service. On Linux, it uses a `systemd --user` service. On unsupported platforms it falls back to a background Node process.
32
+ This runs setup (if no existing config), installs dependencies, and starts the service.
39
33
 
40
- ## Setup
34
+ Open **http://localhost:3333** in your browser when the install finishes.
41
35
 
42
- Run setup again whenever you need to regenerate server config:
36
+ ## First Run
43
37
 
44
- ```bash
45
- neoagent setup
46
- ```
38
+ 1. Create an account.
39
+ 2. Open **Settings → AI Providers** and add at least one API key.
40
+ 3. Send a message in **Chat** to confirm the agent responds.
47
41
 
48
- The setup flow asks for the server port, public URL, release channel, AI provider keys, Ollama URL, and official integration OAuth settings. Provider credentials live in server-side config, not in the web client.
42
+ Everything else integrations, messaging, tasks, Android control is configured inside the app.
49
43
 
50
44
  ## Service Commands
51
45
 
52
46
  ```bash
53
- neoagent status
47
+ neoagent status # check install root, config path, and service state
54
48
  neoagent start
55
49
  neoagent stop
56
50
  neoagent restart
57
- neoagent logs
51
+ neoagent logs # first stop when something behaves unexpectedly
52
+ ```
53
+
54
+ ## Re-running Setup
55
+
56
+ Run this to regenerate config or change provider keys:
57
+
58
+ ```bash
59
+ neoagent setup
58
60
  ```
59
61
 
60
- Use `neoagent status` to confirm the install root, config path, release channel, and service state. Use `neoagent logs` when the service starts but the UI or integrations do not behave as expected.
62
+ The wizard prompts for port, public URL, release channel, AI keys, Ollama URL, and OAuth credentials.
61
63
 
62
- ## Updates And Recovery
64
+ ## Updates and Recovery
63
65
 
64
66
  ```bash
65
- neoagent channel stable
66
- neoagent channel beta
67
- neoagent update
68
- neoagent fix
67
+ neoagent channel stable # switch to stable releases
68
+ neoagent channel beta # switch to prerelease builds
69
+ neoagent update # update to latest on the current channel
70
+ neoagent fix # reset after a broken install or self-edit
69
71
  ```
70
72
 
71
- `neoagent update` follows the configured release channel. `neoagent fix` is for recovery after a self-edit or broken local install. On git installs it backs up runtime data, saves local tracked changes, resets tracked source files, reinstalls dependencies, and restarts the service.
73
+ `neoagent fix` backs up runtime data, resets source files, reinstalls dependencies, and restarts the service. Use it when `neoagent setup && neoagent restart` hasn't resolved an issue.
72
74
 
73
75
  ## Runtime Paths
74
76
 
75
- | Path | Purpose |
77
+ | Path | Contents |
76
78
  |---|---|
77
79
  | `~/.neoagent/.env` | Server config and secrets |
78
- | `~/.neoagent/data/` | Database, sessions, update status, and logs |
79
- | `~/.neoagent/agent-data/` | Skills, memory, and daily data files |
80
+ | `~/.neoagent/data/` | Database, session data, logs |
81
+ | `~/.neoagent/agent-data/` | Skills, memory, daily data |
80
82
 
81
- Set `NEOAGENT_HOME` if you need to move the runtime root.
83
+ Set `NEOAGENT_HOME` to move the runtime root.
package/docs/index.md CHANGED
@@ -6,9 +6,7 @@ sidebar_label: Overview
6
6
 
7
7
  # NeoAgent
8
8
 
9
- NeoAgent is a self-hosted proactive AI agent with a bundled Flutter client for web and Android. It runs on your server, keeps credentials server-side, and gives you an operator UI for chat, runs, logs, tasks, skills, integrations, MCP, memory, Android control, recordings, Health Connect data, and settings.
10
-
11
- It is designed for people who want a focused personal automation server rather than a broad gateway platform. NeoAgent can run triggered tasks, control a browser, operate a server-attached Android emulator or device, manage files, remember long-term context, connect to hosted AI providers or local Ollama, search recordings, read synced health summaries, and send results through Telegram, Discord, WhatsApp, or Telnyx Voice.
9
+ Self-hosted AI agent server. Runs as a system service, keeps all credentials on your machine, and provides a full operator UI for chat, automation, Android device control, recordings, integrations, and memory.
12
10
 
13
11
  ## Quick Start
14
12
 
@@ -17,34 +15,30 @@ npm install -g neoagent
17
15
  neoagent install
18
16
  ```
19
17
 
20
- Open the server URL, sign in, configure providers and messaging, then create a task or chat run.
18
+ Opens at `http://localhost:3333` when complete. See [Getting Started](getting-started.md) for prerequisites and first-run steps.
21
19
 
22
- ## What NeoAgent Does
20
+ ## What You Can Do
23
21
 
24
- | Area | Capability |
22
+ | | |
25
23
  |---|---|
26
- | AI providers | OpenAI, Anthropic, xAI, Google, MiniMax Code, and local Ollama |
27
- | Operator UI | Chat, live runs, logs, tasks, skills, integrations, MCP, memory, devices, recordings, health, settings |
28
- | Automation | Triggered tasks, one-time runs, browser control, file access, CLI skills, subagents, and messaging delivery |
29
- | Android control | AI control of a server-attached Android emulator or device: screenshots, UI dumps, taps, typing, intents, APK installs, and ADB shell |
30
- | Recordings | Web and Android audio sessions with transcript search and AI insights |
31
- | Integrations | Google Workspace, Notion, Microsoft 365, Slack, Figma, and remote MCP servers |
32
- | Messaging | Telegram, Discord, WhatsApp text/media, and Telnyx Voice calls |
33
- | Outputs | Artifacts, Grok image generation, vision analysis, markdown tables, and Mermaid graphs |
34
- | Recovery | `neoagent status`, `neoagent logs`, `neoagent update`, release channels, and `neoagent fix` |
35
-
36
- ## Main Paths
37
-
38
- | Need | Start here |
24
+ | **Chat with tools** | Browse the web, run shell commands, read/write files, call APIs, generate images |
25
+ | **Automate** | Schedule tasks on cron, trigger from integrations or weather events, deliver results via messaging |
26
+ | **Control Android** | Screenshot, observe UI, tap, type, swipe, launch apps, install APKs, run `adb shell` |
27
+ | **Connect accounts** | Google Workspace, Microsoft 365, Notion, Slack, Figma, Home Assistant, Trello, Spotify |
28
+ | **Message anywhere** | Telegram, WhatsApp, Discord, Signal, Matrix, iMessage, Teams, Telnyx Voice, and more |
29
+ | **Record and transcribe** | Audio sessions from browser or Android, transcript search, AI-generated insights |
30
+ | **Remember** | Long-term semantic memory, session logs, core facts, daily summaries |
31
+
32
+ ## Documentation
33
+
34
+ | | |
39
35
  |---|---|
40
- | Install and first run | [Getting Started](getting-started.md) |
41
- | Full product surface | [Capabilities](capabilities.md) |
42
- | Android device control | [Capabilities: Android Control](capabilities.md#android-control) |
43
- | Recordings and transcripts | [Capabilities: Recordings](capabilities.md#recordings) |
44
- | Scheduled tasks | [Automation](automation.md) |
45
- | OAuth apps and messaging | [Integrations](integrations.md) |
46
- | Skills and MCP | [Skills](skills.md) |
47
- | Secrets and runtime settings | [Configuration](configuration.md) |
48
- | Logs, updates, and repair | [Operations](operations.md) |
49
- | OpenClaw comparison | [Why NeoAgent](why-neoagent.md) |
50
- | Migration from OpenClaw/Hermes | [Migration Guide](migration.md) |
36
+ | [Getting Started](getting-started.md) | Install, first run, service commands |
37
+ | [Capabilities](capabilities.md) | Full tool and feature inventory |
38
+ | [Configuration](configuration.md) | Environment variables, provider keys, OAuth setup |
39
+ | [Automation](automation.md) | Tasks, cron scheduling, integration triggers |
40
+ | [Integrations](integrations.md) | OAuth accounts and messaging platforms |
41
+ | [Skills](skills.md) | Built-in skills catalog, custom skills, MCP |
42
+ | [Operations](operations.md) | Updates, logs, recovery |
43
+ | [Why NeoAgent](why-neoagent.md) | Comparison with OpenClaw |
44
+ | [Migration](migration.md) | Migrate from OpenClaw or Hermes |
@@ -1,83 +1,66 @@
1
1
  # Integrations
2
2
 
3
- NeoAgent has two integration layers: official integrations for structured app tools, and messaging platforms for talking to the agent.
3
+ NeoAgent has two integration layers: official integrations for structured app tools, and messaging platforms for communicating with the agent.
4
4
 
5
5
  ## Official Integrations
6
6
 
7
- The built-in registry includes:
7
+ Structured OAuth-backed tools the agent can use in chat and automation. Connect accounts in the Flutter app under **Integrations**.
8
8
 
9
- | Provider | Use |
9
+ | Provider | What the agent can do |
10
10
  |---|---|
11
- | Google Workspace | Gmail, Calendar, Drive, Docs, and Sheets tools |
12
- | Notion | Search, pages, databases, blocks, comments, and raw Notion API requests |
13
- | Microsoft 365 | Outlook, Calendar, OneDrive, Teams, and Microsoft Graph requests |
14
- | Slack | Conversations, history, posting, search, user info, and Slack Web API requests |
15
- | Figma | Current user, files, nodes, rendered images, comments, and Figma REST requests |
16
- | Home Assistant | Entity/config reads, service calls, and Home Assistant REST API requests |
17
- | Trello | Boards, lists, cards, comments, search, and Trello REST API requests |
18
- | Weather | Keyless Open-Meteo current weather and forecast tools |
19
- | Spotify | Playback state, recently played, search, and playback controls |
11
+ | **Google Workspace** | Search and send Gmail, read/create Calendar events, Drive upload/download/share, Docs create/append, Sheets read/write |
12
+ | **Microsoft 365** | Outlook mail, Calendar, OneDrive, Teams messages, Graph API |
13
+ | **Notion** | Search pages, read/write databases and blocks, manage comments |
14
+ | **Slack** | Read and send messages, search conversations |
15
+ | **Figma** | Read files and nodes, get rendered images, manage comments |
16
+ | **Home Assistant** | Read entity state, call services |
17
+ | **Trello** | Manage boards, lists, cards, comments, and search |
18
+ | **Spotify** | Playback controls, search, queue management |
19
+ | **Weather** | Current conditions and forecasts no API key needed |
20
+ | **Personal WhatsApp** | Per-account read and send with isolated access |
20
21
 
21
- OAuth app credentials are configured through server environment variables for most providers. Home Assistant and Trello can also be configured per-user in the Flutter **Integrations** UI without any server-side setup. Account connections are created in the Flutter UI under **Integrations**. Connected tools are exposed to the agent as structured tools, so prefer them over browser automation when they can do the job.
22
+ ### Access Modes
22
23
 
23
- ### Per-Account Access Mode
24
+ Each connected account can be set to **Read/Write** (default) or **Read Only**. Read-only blocks all write operations server-side — sending, creating, updating, and deleting.
24
25
 
25
- Each connected official integration account can be configured per connection as:
26
+ ### OAuth Setup
26
27
 
27
- - `Read / Write` (default)
28
- - `Read Only`
28
+ Most providers require OAuth app credentials in server config before users can connect. See [Configuration: Official Integrations](configuration.md#official-integrations) for the required environment variables.
29
29
 
30
- When an account is set to `Read Only`, write operations are blocked for that connection (for example: sending email, posting messages, creating/updating/deleting resources, or write-method API requests).
30
+ Home Assistant and Trello can be configured per-user in the **Integrations** UI without any server-side setup.
31
31
 
32
- This setting is managed in the Flutter **Integrations** UI on each connected account row and is enforced server-side during tool execution.
32
+ The default OAuth callback URL is `PUBLIC_URL + /api/integrations/oauth/callback`.
33
33
 
34
- The default callback is:
35
-
36
- ```text
37
- PUBLIC_URL + /api/integrations/oauth/callback
38
- ```
39
-
40
- You can override it with provider-specific redirect URI variables listed in [Configuration](configuration.md).
34
+ **If an OAuth connection fails:**
35
+ 1. Confirm `PUBLIC_URL` is reachable by the provider
36
+ 2. Confirm the redirect URI in your OAuth app matches NeoAgent's callback URL
37
+ 3. Confirm the client ID and secret are set in server config
38
+ 4. Restart after changing environment variables: `neoagent restart`
41
39
 
42
40
  ## Messaging Platforms
43
41
 
44
- NeoAgent can talk through:
42
+ Channels through which users and the agent communicate. Configure credentials in the Flutter app under **Settings → Messaging** — not in `.env`.
45
43
 
46
44
  | Platform | Notes |
47
45
  |---|---|
48
- | WhatsApp | Messaging-platform bridge in app settings for talking to the agent; separate official personal WhatsApp integration for structured read/send tools |
49
- | Telegram | Bot token plus approved chats |
50
- | Discord | Bot token plus server or channel access |
51
- | Slack | Bot token sends plus Events API callbacks |
52
- | Google Chat | Space webhook sends plus app callback ingestion |
53
- | Microsoft Teams | Incoming webhook sends plus outgoing webhook ingestion |
54
- | Matrix | Homeserver access token with room send and polling |
55
- | Signal | signal-cli REST API bridge |
56
- | iMessage / BlueBubbles | BlueBubbles-compatible bridge for macOS-hosted iMessage |
57
- | IRC and Twitch | IRC-style channel connections |
58
- | LINE and Mattermost | Native send paths with webhook ingestion |
59
- | Feishu, Nextcloud Talk, Nostr, Synology Chat, Tlon, Zalo, Zalo Personal, WeChat, and WebChat | Configurable webhook bridges |
60
- | Telnyx Voice | Inbound and outbound calling with text-to-speech; tasks can call a number |
61
-
62
- Messaging channel credentials are configured through the Flutter app messaging tab (not `.env`) for channel setup and inbound callback routing. The generic inbound callback path is:
63
-
64
- ```text
65
- PUBLIC_URL + /api/messaging/webhook/:platform
66
- ```
67
-
68
- Use the per-platform inbound secret or native signature fields in the messaging tab for webhook callbacks.
69
-
70
- Telnyx exception: only the Telnyx voice webhook verification token stays in server environment variables as `TELNYX_WEBHOOK_TOKEN`, because webhook request verification is performed server-side. Other Telnyx and messaging channel credentials should be configured in the Flutter app messaging tab as part of channel/client configuration.
71
-
72
- ## Credentials
73
-
74
- Keep provider API keys, OAuth client secrets, and messaging tokens on the server. Do not put them in docs, skill files, client-side code, screenshots, or logs.
75
-
76
- If an OAuth provider fails to connect, check:
77
-
78
- - `PUBLIC_URL` is reachable by the provider.
79
- - The provider redirect URI matches NeoAgent's callback URL.
80
- - The provider client ID and client secret are set on the server.
81
- - The NeoAgent service was restarted after changing environment variables.
82
-
83
- See [Capabilities](capabilities.md) for examples of the structured tools exposed by each provider.
46
+ | **WhatsApp** | Messaging bridge for agent chat; separate official integration for structured read/send tools |
47
+ | **Telegram** | Bot token plus approved chat IDs |
48
+ | **Discord** | Bot token plus server or channel access |
49
+ | **Slack** | Bot token sends, Events API callbacks |
50
+ | **Google Chat** | Space webhook sends, app callback ingestion |
51
+ | **Microsoft Teams** | Incoming webhook sends, outgoing webhook ingestion |
52
+ | **Matrix** | Homeserver access token, room send, polling |
53
+ | **Signal** | signal-cli REST API bridge |
54
+ | **iMessage / BlueBubbles** | BlueBubbles-compatible bridge on a macOS host |
55
+ | **IRC and Twitch** | IRC-style channel connections |
56
+ | **LINE and Mattermost** | Native send, webhook ingestion |
57
+ | **Telnyx Voice** | Inbound and outbound calls with text-to-speech |
58
+ | **Webhook bridges** | Feishu, Nextcloud Talk, Nostr, Synology Chat, Tlon, Zalo, WeChat, WebChat |
59
+
60
+ Inbound webhook path: `PUBLIC_URL + /api/messaging/webhook/:platform`
61
+
62
+ `TELNYX_WEBHOOK_TOKEN` is the only messaging credential that goes in `.env` — all others are configured through the app messaging tab.
63
+
64
+ ## Security
65
+
66
+ Keep OAuth client secrets, bot tokens, and API keys on the server. Don't put them in skill files, task prompts, screenshots, or logs. Rotate immediately if a credential is exposed.