openagent-framework 0.2.6__tar.gz → 0.2.7__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 (74) hide show
  1. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/PKG-INFO +24 -1
  2. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/docs/README.md +23 -0
  3. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/__init__.py +1 -1
  4. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/agent.py +16 -2
  5. openagent_framework-0.2.7/openagent/prompts.py +81 -0
  6. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/server.py +38 -18
  7. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent_framework.egg-info/PKG-INFO +24 -1
  8. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent_framework.egg-info/SOURCES.txt +1 -0
  9. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/pyproject.toml +1 -1
  10. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/bootstrap.py +0 -0
  11. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/channels/__init__.py +0 -0
  12. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/channels/base.py +0 -0
  13. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/channels/discord.py +0 -0
  14. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/channels/senders.py +0 -0
  15. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/channels/telegram.py +0 -0
  16. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/channels/whatsapp.py +0 -0
  17. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/cli.py +0 -0
  18. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/config.py +0 -0
  19. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcp/__init__.py +0 -0
  20. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcp/client.py +0 -0
  21. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcp/oauth.py +0 -0
  22. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/chrome-devtools/.gitignore +0 -0
  23. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/chrome-devtools/package.json +0 -0
  24. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/computer-control/.gitignore +0 -0
  25. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/computer-control/package.json +0 -0
  26. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/computer-control/src/index.ts +0 -0
  27. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/computer-control/src/main.ts +0 -0
  28. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/computer-control/src/tools/computer.ts +0 -0
  29. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/computer-control/src/tools/index.ts +0 -0
  30. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/computer-control/src/utils/response.ts +0 -0
  31. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/computer-control/src/xdotoolStringToKeys.ts +0 -0
  32. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/computer-control/tsconfig.json +0 -0
  33. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/editor/.gitignore +0 -0
  34. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/editor/package.json +0 -0
  35. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/editor/src/index.ts +0 -0
  36. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/editor/tsconfig.json +0 -0
  37. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/messaging/.gitignore +0 -0
  38. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/messaging/index.ts +0 -0
  39. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/messaging/package.json +0 -0
  40. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/messaging/tsconfig.json +0 -0
  41. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/shell/.gitignore +0 -0
  42. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/shell/package.json +0 -0
  43. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/shell/src/index.ts +0 -0
  44. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/shell/tsconfig.json +0 -0
  45. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/web-search/.gitignore +0 -0
  46. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/web-search/package.json +0 -0
  47. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/web-search/src/browser-pool.ts +0 -0
  48. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/web-search/src/content-extractor.ts +0 -0
  49. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/web-search/src/enhanced-content-extractor.ts +0 -0
  50. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/web-search/src/index.ts +0 -0
  51. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/web-search/src/rate-limiter.ts +0 -0
  52. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/web-search/src/search-engine.ts +0 -0
  53. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/web-search/src/types.ts +0 -0
  54. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/web-search/src/utils.ts +0 -0
  55. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/mcps/web-search/tsconfig.json +0 -0
  56. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/memory/__init__.py +0 -0
  57. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/memory/db.py +0 -0
  58. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/memory/manager.py +0 -0
  59. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/models/__init__.py +0 -0
  60. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/models/base.py +0 -0
  61. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/models/claude_api.py +0 -0
  62. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/models/claude_cli.py +0 -0
  63. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/models/zhipu.py +0 -0
  64. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/scheduler.py +0 -0
  65. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/service.py +0 -0
  66. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/services/__init__.py +0 -0
  67. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/services/base.py +0 -0
  68. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/services/manager.py +0 -0
  69. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent/services/syncthing.py +0 -0
  70. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent_framework.egg-info/dependency_links.txt +0 -0
  71. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent_framework.egg-info/entry_points.txt +0 -0
  72. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent_framework.egg-info/requires.txt +0 -0
  73. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/openagent_framework.egg-info/top_level.txt +0 -0
  74. {openagent_framework-0.2.6 → openagent_framework-0.2.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openagent-framework
3
- Version: 0.2.6
3
+ Version: 0.2.7
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
@@ -168,6 +168,29 @@ These are handled automatically by OpenAgent — you just write `openagent.yaml`
168
168
 
169
169
  ---
170
170
 
171
+ ## System prompt
172
+
173
+ OpenAgent injects a **framework-level system prompt** in front of your
174
+ user-defined `system_prompt` on every model call. It codifies guidelines
175
+ that apply to every deployment:
176
+
177
+ - How to use the memory vault (mcpvault tools, wikilinks, tags).
178
+ - Prefer MCP tools over `shell_exec` and ad-hoc scripts.
179
+ - Act autonomously under `permission_mode: bypass`; only stop for
180
+ ambiguous or irreversible actions.
181
+ - Be concise; lead with the answer, not the reasoning.
182
+
183
+ Your `system_prompt` in `openagent.yaml` should therefore stay **short
184
+ and project-specific** — just identity and a pointer to the memory
185
+ vault. Everything else (package names, host names, credentials,
186
+ procedures) belongs as `.md` notes inside the vault, where the agent
187
+ will find them via `search_notes`.
188
+
189
+ The framework prompt source lives at `openagent/prompts.py:FRAMEWORK_SYSTEM_PROMPT`
190
+ if you want to read or tweak the wording.
191
+
192
+ ---
193
+
171
194
  ## Memory
172
195
 
173
196
  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.
@@ -141,6 +141,29 @@ These are handled automatically by OpenAgent — you just write `openagent.yaml`
141
141
 
142
142
  ---
143
143
 
144
+ ## System prompt
145
+
146
+ OpenAgent injects a **framework-level system prompt** in front of your
147
+ user-defined `system_prompt` on every model call. It codifies guidelines
148
+ that apply to every deployment:
149
+
150
+ - How to use the memory vault (mcpvault tools, wikilinks, tags).
151
+ - Prefer MCP tools over `shell_exec` and ad-hoc scripts.
152
+ - Act autonomously under `permission_mode: bypass`; only stop for
153
+ ambiguous or irreversible actions.
154
+ - Be concise; lead with the answer, not the reasoning.
155
+
156
+ Your `system_prompt` in `openagent.yaml` should therefore stay **short
157
+ and project-specific** — just identity and a pointer to the memory
158
+ vault. Everything else (package names, host names, credentials,
159
+ procedures) belongs as `.md` notes inside the vault, where the agent
160
+ will find them via `search_notes`.
161
+
162
+ The framework prompt source lives at `openagent/prompts.py:FRAMEWORK_SYSTEM_PROMPT`
163
+ if you want to read or tweak the wording.
164
+
165
+ ---
166
+
144
167
  ## Memory
145
168
 
146
169
  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.
@@ -1,5 +1,5 @@
1
1
  from openagent.agent import Agent
2
2
  from openagent.config import load_config
3
3
 
4
- __version__ = "0.2.6"
4
+ __version__ = "0.2.7"
5
5
  __all__ = ["Agent", "load_config"]
@@ -8,6 +8,7 @@ from typing import Any, AsyncIterator, Callable, Awaitable
8
8
  from openagent.models.base import BaseModel, ModelResponse
9
9
  from openagent.memory.db import MemoryDB
10
10
  from openagent.mcp.client import MCPRegistry, MCPTools
11
+ from openagent.prompts import FRAMEWORK_SYSTEM_PROMPT
11
12
 
12
13
  logger = logging.getLogger(__name__)
13
14
 
@@ -192,7 +193,9 @@ class Agent:
192
193
  """Inner run logic, wrapped by run() for crash protection."""
193
194
  await _status("Loading context...")
194
195
 
195
- system = self.system_prompt
196
+ # Combine OpenAgent's framework-level guidelines with the user's
197
+ # project-specific system prompt from openagent.yaml.
198
+ system = self._combined_system_prompt()
196
199
 
197
200
  # Build messages
198
201
  if attachments:
@@ -244,6 +247,17 @@ class Agent:
244
247
 
245
248
  return response.content if response else "I wasn't able to complete the request."
246
249
 
250
+ def _combined_system_prompt(self) -> str:
251
+ """Prepend the framework-level prompt to the user's system prompt."""
252
+ user = (self.system_prompt or "").strip()
253
+ if not user:
254
+ return FRAMEWORK_SYSTEM_PROMPT
255
+ return (
256
+ FRAMEWORK_SYSTEM_PROMPT
257
+ + "\n\n── User-specific identity and project context ──\n\n"
258
+ + user
259
+ )
260
+
247
261
  async def stream_run(
248
262
  self,
249
263
  message: str,
@@ -256,7 +270,7 @@ class Agent:
256
270
 
257
271
  await self.initialize()
258
272
 
259
- system = self.system_prompt
273
+ system = self._combined_system_prompt()
260
274
  messages: list[dict[str, Any]] = [{"role": "user", "content": message}]
261
275
 
262
276
  async for chunk in self.model.stream(messages, system=system):
@@ -0,0 +1,81 @@
1
+ """Framework-level prompts injected into every OpenAgent conversation.
2
+
3
+ These are prepended to the user-supplied ``system_prompt`` from
4
+ ``openagent.yaml``. They codify the operating guidelines that apply to
5
+ every OpenAgent deployment regardless of project context: how to use the
6
+ memory vault, when to prefer MCP tools over shell, how autonomously to
7
+ act, etc. The user's config is expected to stay short and
8
+ project-specific (identity, key facts, pointers to memory).
9
+ """
10
+
11
+ FRAMEWORK_SYSTEM_PROMPT = """\
12
+ You are running inside OpenAgent, a persistent LLM agent framework with
13
+ long-term memory, scheduled tasks, and multi-channel connectivity. The
14
+ guidelines below apply to every conversation you handle and take
15
+ precedence over stylistic choices in the user-specific instructions
16
+ that follow later in this system prompt.
17
+
18
+ ## Your memory vault
19
+
20
+ Your long-term memory is a plain Obsidian-compatible markdown vault.
21
+ The files on disk ARE the database — you read and write them directly
22
+ via the `mcpvault` MCP. The same vault may be open in the user's
23
+ Obsidian desktop app (synced via Syncthing or similar), so treat it as
24
+ shared state that other writers can touch between your turns.
25
+
26
+ - Use mcpvault tools for every vault operation:
27
+ `list_notes`, `read_note`, `read_multiple_notes`, `search_notes`,
28
+ `write_note`, `patch_note`, `update_frontmatter`, `delete_note`,
29
+ `move_note`, `manage_tags`, `get_frontmatter`, `list_all_tags`,
30
+ `get_vault_stats`, `get_backlinks`.
31
+ - Do NOT shell out to `cat`, `grep`, `find`, `read_file`, or editor
32
+ commands to browse memory notes when mcpvault tools can do the same.
33
+ The MCP tools respect frontmatter, give structured results, and make
34
+ your trace legible to the user.
35
+ - When you learn something worth remembering during a conversation
36
+ (new credentials, a new deploy detail, a gotcha you solved, a
37
+ decision the user made), write it into the vault IN THAT SAME TURN.
38
+ Don't wait to be asked. Prefer short topical notes over one giant
39
+ file.
40
+ - Prefer `patch_note` for small edits — it preserves the rest of the
41
+ note and keeps diffs clean. Only use `write_note` (full rewrite) when
42
+ you are creating a note from scratch or restructuring it end-to-end.
43
+ - Cross-link related notes with `[[wikilink]]` syntax. If you write
44
+ note A about topic X and notes about topic Y already mention X,
45
+ search for them and add a backlink in A. The user navigates the
46
+ vault as a graph in Obsidian, so dense linking is high-value.
47
+ - Tag notes consistently in YAML frontmatter (`tags: [topic, area]`)
48
+ so `search_notes` and `list_all_tags` surface them together.
49
+ - Always check the vault first before claiming you don't know
50
+ something about the user's project.
51
+
52
+ ## Tool preference
53
+
54
+ - Prefer MCP tools over ad-hoc shell commands whenever an MCP covers
55
+ the task. MCPs give you structured I/O, better error messages, and a
56
+ clean trace the user can review.
57
+ - Drop to `shell_exec` only for operations no MCP offers — one-off
58
+ system admin, kernel-level debugging, compiling code, etc.
59
+ - Do NOT create throwaway helper scripts in the user's filesystem for
60
+ something a single MCP call could do. If you find yourself writing a
61
+ Python/Bash one-liner to work around a missing tool, stop and look
62
+ for an MCP first.
63
+
64
+ ## Acting autonomously
65
+
66
+ - In most deployments you run with `permission_mode: bypass` — tool
67
+ calls are pre-approved. Use that to complete tasks end-to-end without
68
+ asking the user to confirm every step.
69
+ - Stop to ask the user only when:
70
+ 1. Instructions are genuinely ambiguous and a wrong choice would be
71
+ hard to undo.
72
+ 2. An action is irreversible and high-risk (deleting prod data,
73
+ force-pushing main, sending money, messaging many people).
74
+ 3. You need information you physically cannot obtain (a private
75
+ judgement call, credentials that aren't in the vault, consent for
76
+ something the user hasn't authorized).
77
+ - If a tool call fails, read the error, try a different approach, and
78
+ only escalate after you've exhausted the obvious fixes.
79
+ - Be concise. Lead with the answer or the action, not the reasoning.
80
+ Don't restate the user's request before answering it.
81
+ """
@@ -33,28 +33,48 @@ AUTO_UPDATE_TASK_NAME = "auto-update"
33
33
 
34
34
  DREAM_MODE_PROMPT = """\
35
35
  You are running in Dream Mode — a nightly maintenance routine.
36
- Perform the following tasks and log a summary of each:
37
-
38
- 1. **Clean temp files**: List and remove files in /tmp that are older than 24 hours.
39
- Use `find /tmp -maxdepth 1 -type f -mtime +1 -delete` (or equivalent).
40
- Report how many files were removed and how much space was freed.
41
-
42
- 2. **Consolidate memory files**: Review all .md files in the knowledge/memories directory.
43
- - Identify and merge duplicate entries that cover the same topic.
44
- - Update any outdated information you can verify.
45
- - Remove empty or trivially short files (< 10 words) that add no value.
46
- Report what was merged, updated, or removed.
47
-
48
- 3. **System health check**: Check and report:
49
- - Disk usage (df -h) warn if any partition is above 85%.
50
- - Memory usage (free -m or vm_stat on macOS).
36
+ Perform these tasks and write a concise audit log at the end.
37
+
38
+ 1. **Clean temp files**: List and remove files in /tmp older than 24 hours.
39
+ Use `find /tmp -maxdepth 1 -type f -mtime +1 -delete` (or the OS
40
+ equivalent). Report how many files were removed and how much space
41
+ was freed.
42
+
43
+ 2. **Curate the memory vault (via the mcpvault MCP do NOT cat/grep
44
+ the .md files)**:
45
+ - Use `list_notes` and `search_notes` to survey the vault.
46
+ - Identify notes that cover the same topic and **merge duplicates**
47
+ into a single canonical note with `write_note` or `patch_note`,
48
+ then `delete_note` the redundant ones.
49
+ - Update any outdated information you can verify from the
50
+ environment (tool versions, paths, hosts that no longer exist,
51
+ etc.).
52
+ - Remove trivially short or empty notes (< 20 words) that add no
53
+ value.
54
+ - **Cross-link related notes with `[[wikilinks]]`**. For every note
55
+ you touch, search the vault for related topics and add backlinks
56
+ where the relationship is meaningful. If a group of notes shares a
57
+ theme, make sure each one links to the others. Prefer
58
+ `patch_note` to add links in place rather than rewriting whole
59
+ notes.
60
+ - Update frontmatter `tags:` so related notes share consistent
61
+ tags and surface together in future searches.
62
+ Report what was merged, updated, cross-linked, or removed.
63
+
64
+ 3. **System health check**:
65
+ - Disk usage (`df -h`) — warn if any partition is above 85%.
66
+ - Memory usage (`free -m` on Linux, `vm_stat` on macOS).
51
67
  - Top 5 processes by CPU usage.
52
68
  Report any anomalies or concerns.
53
69
 
54
- 4. **Log results**: Write a concise summary of everything done to a memory file
55
- named `dream-log-{date}.md` so there is an audit trail.
70
+ 4. **Log results**: Use `write_note` to save a concise summary under
71
+ `dream-logs/dream-log-YYYY-MM-DD.md` with frontmatter `type: dream-log`
72
+ and `date:` set to today, so there is an audit trail linkable from
73
+ other notes.
56
74
 
57
- Be thorough but non-destructive. When in doubt, skip rather than delete.
75
+ Be thorough but non-destructive. When in doubt, skip rather than
76
+ delete, and always use mcpvault tools instead of raw filesystem access
77
+ for anything under the memory vault.
58
78
  """
59
79
 
60
80
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openagent-framework
3
- Version: 0.2.6
3
+ Version: 0.2.7
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
@@ -168,6 +168,29 @@ These are handled automatically by OpenAgent — you just write `openagent.yaml`
168
168
 
169
169
  ---
170
170
 
171
+ ## System prompt
172
+
173
+ OpenAgent injects a **framework-level system prompt** in front of your
174
+ user-defined `system_prompt` on every model call. It codifies guidelines
175
+ that apply to every deployment:
176
+
177
+ - How to use the memory vault (mcpvault tools, wikilinks, tags).
178
+ - Prefer MCP tools over `shell_exec` and ad-hoc scripts.
179
+ - Act autonomously under `permission_mode: bypass`; only stop for
180
+ ambiguous or irreversible actions.
181
+ - Be concise; lead with the answer, not the reasoning.
182
+
183
+ Your `system_prompt` in `openagent.yaml` should therefore stay **short
184
+ and project-specific** — just identity and a pointer to the memory
185
+ vault. Everything else (package names, host names, credentials,
186
+ procedures) belongs as `.md` notes inside the vault, where the agent
187
+ will find them via `search_notes`.
188
+
189
+ The framework prompt source lives at `openagent/prompts.py:FRAMEWORK_SYSTEM_PROMPT`
190
+ if you want to read or tweak the wording.
191
+
192
+ ---
193
+
171
194
  ## Memory
172
195
 
173
196
  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.
@@ -5,6 +5,7 @@ openagent/agent.py
5
5
  openagent/bootstrap.py
6
6
  openagent/cli.py
7
7
  openagent/config.py
8
+ openagent/prompts.py
8
9
  openagent/scheduler.py
9
10
  openagent/server.py
10
11
  openagent/service.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "openagent-framework"
7
- version = "0.2.6"
7
+ version = "0.2.7"
8
8
  description = "Simplified LLM agent framework with MCP, memory, and multi-channel support"
9
9
  readme = "docs/README.md"
10
10
  requires-python = ">=3.11"