openagent-framework 0.2.4__tar.gz → 0.2.5__tar.gz

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 (73) hide show
  1. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/PKG-INFO +190 -69
  2. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/docs/README.md +189 -68
  3. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/__init__.py +1 -1
  4. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/agent.py +26 -1
  5. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/services/obsidian.py +14 -5
  6. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent_framework.egg-info/PKG-INFO +190 -69
  7. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/pyproject.toml +1 -1
  8. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/bootstrap.py +0 -0
  9. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/channels/__init__.py +0 -0
  10. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/channels/base.py +0 -0
  11. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/channels/discord.py +0 -0
  12. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/channels/senders.py +0 -0
  13. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/channels/telegram.py +0 -0
  14. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/channels/whatsapp.py +0 -0
  15. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/cli.py +0 -0
  16. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/config.py +0 -0
  17. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcp/__init__.py +0 -0
  18. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcp/client.py +0 -0
  19. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcp/oauth.py +0 -0
  20. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/chrome-devtools/.gitignore +0 -0
  21. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/chrome-devtools/package.json +0 -0
  22. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/computer-control/.gitignore +0 -0
  23. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/computer-control/package.json +0 -0
  24. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/computer-control/src/index.ts +0 -0
  25. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/computer-control/src/main.ts +0 -0
  26. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/computer-control/src/tools/computer.ts +0 -0
  27. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/computer-control/src/tools/index.ts +0 -0
  28. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/computer-control/src/utils/response.ts +0 -0
  29. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/computer-control/src/xdotoolStringToKeys.ts +0 -0
  30. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/computer-control/tsconfig.json +0 -0
  31. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/editor/.gitignore +0 -0
  32. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/editor/package.json +0 -0
  33. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/editor/src/index.ts +0 -0
  34. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/editor/tsconfig.json +0 -0
  35. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/messaging/.gitignore +0 -0
  36. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/messaging/index.ts +0 -0
  37. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/messaging/package.json +0 -0
  38. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/messaging/tsconfig.json +0 -0
  39. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/shell/.gitignore +0 -0
  40. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/shell/package.json +0 -0
  41. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/shell/src/index.ts +0 -0
  42. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/shell/tsconfig.json +0 -0
  43. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/web-search/.gitignore +0 -0
  44. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/web-search/package.json +0 -0
  45. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/web-search/src/browser-pool.ts +0 -0
  46. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/web-search/src/content-extractor.ts +0 -0
  47. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/web-search/src/enhanced-content-extractor.ts +0 -0
  48. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/web-search/src/index.ts +0 -0
  49. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/web-search/src/rate-limiter.ts +0 -0
  50. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/web-search/src/search-engine.ts +0 -0
  51. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/web-search/src/types.ts +0 -0
  52. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/web-search/src/utils.ts +0 -0
  53. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/mcps/web-search/tsconfig.json +0 -0
  54. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/memory/__init__.py +0 -0
  55. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/memory/db.py +0 -0
  56. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/memory/manager.py +0 -0
  57. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/models/__init__.py +0 -0
  58. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/models/base.py +0 -0
  59. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/models/claude_api.py +0 -0
  60. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/models/claude_cli.py +0 -0
  61. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/models/zhipu.py +0 -0
  62. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/scheduler.py +0 -0
  63. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/server.py +0 -0
  64. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/service.py +0 -0
  65. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/services/__init__.py +0 -0
  66. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/services/base.py +0 -0
  67. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent/services/manager.py +0 -0
  68. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent_framework.egg-info/SOURCES.txt +0 -0
  69. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent_framework.egg-info/dependency_links.txt +0 -0
  70. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent_framework.egg-info/entry_points.txt +0 -0
  71. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent_framework.egg-info/requires.txt +0 -0
  72. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/openagent_framework.egg-info/top_level.txt +0 -0
  73. {openagent_framework-0.2.4 → openagent_framework-0.2.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openagent-framework
3
- Version: 0.2.4
3
+ Version: 0.2.5
4
4
  Summary: Simplified LLM agent framework with MCP, memory, and multi-channel support
5
5
  License-Expression: MIT
6
6
  Requires-Python: >=3.11
@@ -170,36 +170,73 @@ These are handled automatically by OpenAgent — you just write `openagent.yaml`
170
170
 
171
171
  ## Memory
172
172
 
173
- Dual memory system: quick facts in SQLite + detailed knowledge in Obsidian-compatible `.md` files.
173
+ OpenAgent's long-term memory is a plain **Obsidian-compatible markdown vault**. The agent reads and writes `.md` files directly via the [`mcpvault`](https://www.npmjs.com/package/@bitbonsai/mcpvault) MCP — no custom index, no full-text engine, no proprietary format. The files on disk *are* the database.
174
+
175
+ Session history (the per-conversation message log) is handled separately by the Claude Agent SDK's `resume=session_id`; OpenAgent no longer keeps it in SQLite. The SQLite file is only used for scheduled tasks.
174
176
 
175
177
  ### Configuration
176
178
 
177
179
  ```yaml
178
180
  memory:
179
- db_path: "./openagent.db" # SQLite: sessions, messages, facts, scheduled tasks
180
- knowledge_dir: "./memories" # Obsidian-compatible .md files (FTS5 indexed)
181
- auto_extract: true # auto-extract facts + knowledge from conversations
181
+ db_path: "./openagent.db" # SQLite scheduled tasks only
182
+ vault_path: "./memories" # Obsidian markdown vault
182
183
  ```
183
184
 
184
- ### How It Works
185
+ ### How it works
185
186
 
186
- - **Session history**: every message stored immediately in SQLite
187
- - **Quick facts**: short preferences extracted automatically SQLite
188
- - **Knowledge base**: detailed docs `.md` files with YAML frontmatter, `[[wikilinks]]`, tags
189
- - **Hybrid search**: FTS5 snippets injected into context (compact, not full files)
190
- - **Obsidian-compatible**: open `memories/` in Obsidian for graph view
187
+ - The agent writes notes as `.md` files inside `vault_path/`
188
+ - MCPVault exposes `list_notes`, `read_note`, `write_note`, `search_notes`, `get_backlinks`, etc.
189
+ - Open the same `memories/` folder in Obsidian desktop and you get graph view, backlinks and plugin support for free
190
+ - Or enable the built-in **Obsidian web** service (see [Services](#services)) to run Obsidian desktop *inside a browser*, directly on the VPS
191
191
 
192
- ### Memory File Format
192
+ ### Memory file format
193
193
 
194
194
  ```markdown
195
195
  ---
196
- topic: deploy
196
+ title: Deploy Wardrobe Service
197
+ type: reference
197
198
  tags: [k8s, wardrobe, ovh]
198
- links: [[server-architecture]]
199
- created: 2026-04-07T12:00:00
199
+ created: 2026-04-07
200
200
  ---
201
+
201
202
  # Deploy Wardrobe Service
203
+
202
204
  rsync + docker build + k3s import...
205
+ See also: [[server-architecture]]
206
+ ```
207
+
208
+ `[[wikilinks]]`, tags and YAML frontmatter are standard Obsidian conventions. Nothing is OpenAgent-specific.
209
+
210
+ ---
211
+
212
+ ## Services
213
+
214
+ Auxiliary services run alongside the agent and are managed by the same lifecycle (`openagent serve` starts them, shutdown stops them). Each service is a plug-in — currently there's one built-in, `obsidian_web`, and the same pattern can host a VNC server, a Caddy reverse proxy, or anything else that needs to live next to the agent.
215
+
216
+ ### Obsidian web (built-in)
217
+
218
+ Runs the real Obsidian desktop app inside a Docker container (`lscr.io/linuxserver/obsidian`) with KasmVNC as the web frontend. The `memories/` vault is mounted read/write into the container, so any note the agent writes is visible immediately in the UI, and vice versa.
219
+
220
+ ```yaml
221
+ services:
222
+ obsidian_web:
223
+ enabled: true
224
+ port: 8200
225
+ username: admin
226
+ password: ${OBSIDIAN_PASSWORD} # required
227
+ vault_path: /home/ubuntu/OpenAgent/memories
228
+ ```
229
+
230
+ Access: `http://<host>:8200` → KasmVNC login → full Obsidian desktop. Graph view, plugins, themes all work. The container uses `--restart=unless-stopped`, so it survives agent crashes too.
231
+
232
+ Requires Docker on the host. `openagent setup --full` installs Docker on Linux automatically and pulls the image for you.
233
+
234
+ Manual control:
235
+
236
+ ```bash
237
+ openagent services status # check every configured aux service
238
+ openagent services start
239
+ openagent services stop
203
240
  ```
204
241
 
205
242
  ---
@@ -284,75 +321,119 @@ openagent task disable <id>
284
321
 
285
322
  ---
286
323
 
287
- ## Auto-Start (System Service)
324
+ ## Doctor & Setup
325
+
326
+ `openagent doctor` checks the environment and reports missing pieces. `openagent setup` installs them — Docker, OS service, aux service images — as far as each platform allows.
288
327
 
289
328
  ```bash
290
- openagent install # register as system service
291
- openagent uninstall # remove
292
- openagent status # check if running
329
+ openagent doctor # environment report, non-destructive
330
+ openagent setup # register OpenAgent as an OS service (default)
331
+ openagent setup --with-docker # also install Docker where automatable
332
+ openagent setup --pull-images # also pre-pull images for every enabled aux service
333
+ openagent setup --full # everything: Docker + OS service + image pulls
334
+ openagent install # alias for `setup --full`
293
335
  ```
294
336
 
295
- - **macOS**: launchd (`~/Library/LaunchAgents/`)
296
- - **Linux**: systemd user unit (`~/.config/systemd/user/`)
297
- - **Windows**: Task Scheduler
337
+ Platform support for automatic Docker install:
338
+
339
+ | Platform | Docker install | Notes |
340
+ |---|---|---|
341
+ | Linux (apt / dnf / pacman / zypper / apk) | **Fully automated** | Requires sudo. Enables the systemd unit and adds the current user to the `docker` group. |
342
+ | macOS | `brew install --cask docker` | Docker Desktop is a GUI app; you still have to launch it once to accept the EULA. |
343
+ | Windows | `winget install Docker.DockerDesktop` | Reboot required afterwards. |
344
+
345
+ `openagent setup --full` is idempotent: running it on an already-configured machine will just verify and move on.
346
+
347
+ ### OS service
348
+
349
+ `openagent setup` registers OpenAgent as a platform-native service so it auto-starts on boot and auto-restarts on crash:
350
+
351
+ - **Linux** — systemd user unit at `~/.config/systemd/user/openagent.service`, with `Restart=always` and `SuccessExitStatus=75` so the auto-updater's exit code 75 triggers a clean restart. You also want `loginctl enable-linger <user>` so the service survives logout on a headless VPS.
352
+ - **macOS** — launchd plist at `~/Library/LaunchAgents/com.openagent.serve.plist`, with `KeepAlive` / `SuccessfulExit=false`.
353
+ - **Windows** — `.bat` wrapper + Task Scheduler entry (`ONLOGON`, with an internal restart loop).
354
+
355
+ ```bash
356
+ # Linux
357
+ systemctl --user status openagent
358
+ journalctl --user -u openagent -f
359
+
360
+ # macOS
361
+ launchctl list com.openagent.serve
362
+
363
+ # uninstall (any platform)
364
+ openagent uninstall
365
+ ```
298
366
 
299
367
  ---
300
368
 
301
- ## VPS Deployment
369
+ ## Auto-update
370
+
371
+ OpenAgent can check PyPI on a schedule and upgrade itself in place.
372
+
373
+ ```yaml
374
+ auto_update:
375
+ enabled: true
376
+ mode: auto # auto | notify | manual
377
+ check_interval: "17 */6 * * *" # every 6h at minute :17
378
+ ```
302
379
 
303
- For deploying on a VPS (the primary use case):
380
+ Modes:
381
+ - `auto` — pip upgrade + notify (if messaging MCP is configured) + exit with code 75. The OS service manager (systemd / launchd / Task Scheduler) catches the exit and restarts the process with the new code already installed.
382
+ - `notify` — pip upgrade + notify, but don't restart. New code takes effect on the next manual restart.
383
+ - `manual` — pip upgrade only. No notification, no restart.
304
384
 
305
- ### 1. Install
385
+ Requires `auto_update.enabled: true` **and** an OS service supervising the process — otherwise exit 75 just kills it.
386
+
387
+ Manual update at any time:
306
388
 
307
389
  ```bash
308
- pip install openagent-framework[all]
390
+ openagent update # check PyPI, upgrade if newer
309
391
  ```
310
392
 
311
- ### 2. Create config
393
+ ---
394
+
395
+ ## Dream mode
396
+
397
+ Dream mode is a built-in nightly maintenance task. When enabled, it runs a prompt that cleans `/tmp`, consolidates duplicate memory files, runs a system health check, and writes an audit log into the vault.
312
398
 
313
399
  ```yaml
314
- # openagent.yaml — single file, all config
315
- name: my-agent
316
- model:
317
- provider: claude-cli
318
- permission_mode: bypass
319
- memory:
320
- db_path: ./openagent.db
321
- knowledge_dir: ./memories
322
- mcp_defaults: true
323
- mcp:
324
- - name: github
325
- command: ["github-mcp-server", "stdio"]
326
- env:
327
- GITHUB_PERSONAL_ACCESS_TOKEN: ${GITHUB_TOKEN}
328
- channels:
329
- telegram:
330
- token: ${TELEGRAM_BOT_TOKEN}
331
- allowed_users: ["YOUR_TELEGRAM_ID"]
332
- scheduler:
400
+ dream_mode:
333
401
  enabled: true
334
- tasks: []
402
+ time: "3:00" # local time, converted to cron
403
+ # or:
404
+ # cron: "0 3 * * *"
335
405
  ```
336
406
 
337
- ### 3. Start
407
+ ---
408
+
409
+ ## VPS Deployment
410
+
411
+ For a fresh Linux VPS, the whole setup is three commands:
338
412
 
339
413
  ```bash
340
- # Foreground
341
- openagent serve
414
+ # 1. Install
415
+ pip install 'openagent-framework[all]'
342
416
 
343
- # Background (recommended for VPS)
344
- screen -dmS openagent bash -c 'openagent serve > openagent.log 2>&1'
417
+ # 2. Create openagent.yaml (see the YAML reference below)
418
+ # 3. One-shot setup: Docker + systemd service + image pulls
419
+ openagent setup --full
420
+ ```
421
+
422
+ `openagent setup --full` leaves you with a running systemd user service, the Obsidian web UI (if enabled) on its configured port, and auto-update ready to pick up future releases from PyPI. After that you only interact with systemd:
345
423
 
346
- # Or use the bundled scripts
347
- ./start.sh # kills old instance, waits for Telegram cooldown, starts in screen
348
- ./stop.sh # clean stop
424
+ ```bash
425
+ systemctl --user restart openagent
426
+ systemctl --user stop openagent
427
+ systemctl --user start openagent
428
+ journalctl --user -u openagent -f # live logs
429
+ tail -f ~/.openagent/logs/openagent.out.log # stdout log
349
430
  ```
350
431
 
351
- ### 4. Upgrade
432
+ Upgrading manually (rarely needed if `auto_update.enabled: true`):
352
433
 
353
434
  ```bash
354
- pip install --upgrade openagent-framework[all]
355
- ./stop.sh && ./start.sh
435
+ pip install --upgrade 'openagent-framework[all]'
436
+ systemctl --user restart openagent
356
437
  ```
357
438
 
358
439
  The agent cannot modify its own code — only `openagent.yaml` and `memories/` are writable.
@@ -393,9 +474,8 @@ mcp: # user MCPs (merged on top of defaults)
393
474
  oauth: true # enables OAuth flow for first-time auth
394
475
 
395
476
  memory:
396
- db_path: "./openagent.db"
397
- knowledge_dir: "./memories"
398
- auto_extract: true
477
+ db_path: "./openagent.db" # SQLite: scheduled tasks only
478
+ vault_path: "./memories" # Obsidian markdown vault
399
479
 
400
480
  channels:
401
481
  telegram:
@@ -407,12 +487,29 @@ channels:
407
487
  green_api_id: ${GREEN_API_ID}
408
488
  green_api_token: ${GREEN_API_TOKEN}
409
489
 
490
+ services:
491
+ obsidian_web:
492
+ enabled: true
493
+ port: 8200
494
+ username: admin
495
+ password: ${OBSIDIAN_PASSWORD}
496
+ vault_path: ./memories
497
+
410
498
  scheduler:
411
499
  enabled: true
412
500
  tasks:
413
501
  - name: health-check
414
502
  cron: "*/30 * * * *"
415
503
  prompt: "Check services and alert if down."
504
+
505
+ dream_mode:
506
+ enabled: true
507
+ time: "3:00" # local time (converted to cron)
508
+
509
+ auto_update:
510
+ enabled: true
511
+ mode: auto # auto | notify | manual
512
+ check_interval: "17 */6 * * *"
416
513
  ```
417
514
 
418
515
  Environment variables are substituted using `${VAR_NAME}` syntax.
@@ -422,21 +519,45 @@ Environment variables are substituted using `${VAR_NAME}` syntax.
422
519
  ## CLI Reference
423
520
 
424
521
  ```bash
522
+ # Chat / serve
425
523
  openagent chat # interactive chat
426
- openagent chat -m zhipu # use specific provider
524
+ openagent chat -m zhipu # use a specific provider
427
525
  openagent chat --model-id glm-4-flash # override model ID
428
526
  openagent chat -s session-123 # resume session
429
- openagent serve # start all channels + scheduler
430
- openagent serve -ch telegram # start specific channel
527
+ openagent serve # start agent + channels + scheduler + aux services
528
+ openagent serve -ch telegram # only a specific channel
529
+
530
+ # Doctor & setup
531
+ openagent doctor # environment report
532
+ openagent setup # install as OS service only
533
+ openagent setup --with-docker # + install Docker (Linux automated, Mac/Win brew/winget)
534
+ openagent setup --pull-images # + pre-pull images for enabled aux services
535
+ openagent setup --full # everything (same as `install`)
536
+ openagent install # alias of `setup --full`
537
+ openagent uninstall # remove the OS service
538
+ openagent status # OS service status
539
+
540
+ # Auxiliary services
541
+ openagent services status # report each aux service (Obsidian web, ...)
542
+ openagent services start
543
+ openagent services stop
544
+
545
+ # Scheduled tasks
431
546
  openagent task add -n "name" -c "cron" -p "prompt"
432
547
  openagent task list
433
548
  openagent task remove <id>
549
+ openagent task enable <id>
550
+ openagent task disable <id>
551
+
552
+ # Updates
553
+ openagent update # manual pip upgrade from PyPI
554
+
555
+ # MCP
434
556
  openagent mcp list # list connected MCP tools
435
- openagent install # install as system service
436
- openagent uninstall # remove system service
437
- openagent status # check service status
438
- openagent -c custom.yaml serve # use custom config file
439
- openagent -v serve # verbose/debug mode
557
+
558
+ # Globals
559
+ openagent -c custom.yaml serve # custom config file
560
+ openagent -v serve # verbose/debug logging
440
561
  ```
441
562
 
442
563
  ---