obsidian-agent-fleet 0.11.0 → 0.13.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.
package/README.md CHANGED
@@ -30,9 +30,9 @@ Agent Fleet is an Obsidian plugin that lets you build, configure, and run AI age
30
30
 
31
31
  🎛️ **Model picker** — Choose between aliases (`opus` / `sonnet` / `haiku` / `opusplan` — backend-agnostic), pinned IDs, or Bedrock/Vertex/Foundry formats. One place to configure: settings default, per-agent, or per-task override. Runs log both the requested alias and the concrete resolved model.
32
32
 
33
- 🔌 **MCP Integration** — Add, remove, authenticate, and inspect MCP servers from the dashboard. One-click OAuth 2.1 with automatic CLI token injection agents can use authenticated servers immediately.
33
+ 🔌 **MCP Integration** — Register an MCP server **once** and it's available to **any** agent on **either** adapter (Claude Code or Codex). Servers live in a fleet-owned registry (`_fleet/mcp/`) and are projected into each run; your native `~/.claude.json` and `~/.codex/config.toml` are never modified. One-click OAuth 2.1 (or a static bearer token), stored in your OS keychain and projected to both backends.
34
34
 
35
- 🧠 **Agent Memory** — Agents persist context across sessions using `[REMEMBER]` tags stored as markdown.
35
+ 🧠 **Agent Memory** — A two-tier, self-curating memory (curated working set + append-only ground truth) that agents write via a `remember` tool or `[REMEMBER]` tags, on both Claude and Codex. An optional nightly **reflection** consolidates it and can propose new skills from recurring patterns (approval-gated).
36
36
 
37
37
  📊 **Dashboard** — Overview with run charts, success rates, token/cost tracking, activity timeline, fleet status, streaming output from active agents, and focused run-detail panels that lead with the final result and hide the full reasoning transcript behind a toggle.
38
38
 
@@ -135,7 +135,7 @@ agents/my-agent/
135
135
  | **Allow/Deny Lists** | Fine-grained tool control (e.g., allow `Bash(curl *)`, deny `Bash(rm -rf *)`). Enforced on both backends — Claude Code natively, Codex via execpolicy command rules (see [Backends](#backends)) |
136
136
  | **Skills** | Shared skills from the skill library |
137
137
  | **MCP Servers** | Which MCP servers the agent can access |
138
- | **Memory** | Persistent context across sessions via `[REMEMBER]` tags |
138
+ | **Memory** | Two-tier self-curating memory: `remember` tool / `[REMEMBER]` tags → working set + raw archive, with optional nightly reflection |
139
139
  | **Heartbeat** | Autonomous periodic run with schedule and instruction |
140
140
 
141
141
  **Permission Modes:**
@@ -160,7 +160,7 @@ Each agent runs on one of two CLI backends, selected by the **Adapter** field in
160
160
  | Models | `opus` / `sonnet` / `haiku` / `opusplan` aliases, pinned IDs, Bedrock/Vertex/Foundry | Codex slugs (e.g. `gpt-5.5-codex`) + free-text |
161
161
  | Permission rules | Native — `.claude/settings.local.json` | execpolicy command rules via per-agent `CODEX_HOME` overlay |
162
162
  | File/network sandbox | Permission Mode | Permission Mode (`workspace-write` / `read-only`); `codex exec` forces approval policy `never` |
163
- | MCP servers | Claude's registry | Codex's `~/.codex/config.toml`, scoped per agent |
163
+ | MCP servers | Fleet registry (`_fleet/mcp/`), projected via `--mcp-config` | Fleet registry (`_fleet/mcp/`), projected via `-c mcp_servers.*` |
164
164
 
165
165
  Everything else — chat, tasks, heartbeat, Slack/Telegram channels, memory, run logs, model picker — works identically on both. The picker switches its alias list based on the selected adapter; free-text remains the escape hatch for any model ID.
166
166
 
@@ -311,40 +311,32 @@ A kanban view for managing agent tasks with five columns:
311
311
 
312
312
  ### MCP Servers
313
313
 
314
- Add, remove, authenticate, and manage MCP servers directly from the dashboardno terminal needed.
314
+ Register an MCP server **once** and it works for **any** agent on **either** adapter (Claude Code or Codex). Servers are a fleet-owned registry one markdown file per server under `_fleet/mcp/<name>.md` — and are *projected* into each run at spawn time (Claude via `--mcp-config`, Codex via `-c mcp_servers.*`). Your native `~/.claude.json` and `~/.codex/config.toml` are **read-only**; Agent Fleet never modifies them.
315
+
316
+ **One-time import.** On first load, your existing Claude and Codex MCP servers are imported into the registry (a server configured in both becomes one entry, marked `imported`), and any bearer tokens found are moved into your OS keychain. Idempotent.
315
317
 
316
318
  **Add Server UI:**
317
319
  - Click **"Add Server"** on the MCP page to open the form
318
320
  - **stdio** — command, arguments, environment variables
319
- - **HTTP / SSE** — URL, API key (stored securely), custom headers
320
- - Scope selection (user or local) — defaults to "user" so servers are visible across projects
321
- - Servers appear immediately after adding, with tools auto-discovered
322
-
323
- **Remove Server:**
324
- - Open any server's detail slideover → click **"Remove Server"**
325
- - Cleans up CLI registration and stored secrets in one step
321
+ - **HTTP / SSE** — URL, custom headers, and authentication: none, a static **bearer token** (stored in the keychain), or **OAuth** (authenticate after saving)
322
+ - Servers are written to `_fleet/mcp/`; secrets never touch the vault
326
323
 
327
- **Discovery:**
328
- - **stdio servers** spawned and probed directly via JSON-RPC (~1-2s)
329
- - **HTTP/SSE servers** probed with OAuth tokens for full tool schemas
330
- - **Plugin metadata** descriptions from Claude's plugin directory
324
+ **Server Management:**
325
+ - Enable/disable toggle per server (writes the registry file's frontmatter)
326
+ - Per-server **"Probe tools"** action — stdio servers are spawned and probed via JSON-RPC; HTTP/SSE servers are probed with the stored token
327
+ - Detail slideover with transport, auth state, and the discovered tool list
328
+ - **Remove Server** trashes the registry file and clears any stored token
329
+ - Grant servers to specific agents in the agent editor — leave an agent's list empty to grant every enabled server
331
330
 
332
331
  **OAuth 2.1 Authentication:**
333
332
 
334
- One-click browser-based auth with unified CLI token injection:
335
- 1. Click "Authenticate" on any server card
336
- 2. Plugin discovers OAuth endpoints automatically
337
- 3. Registers via Dynamic Client Registration
338
- 4. Opens browser for approval (PKCE flow)
339
- 5. Tokens stored securely in OS keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service)
340
- 6. Token automatically injected into Claude CLI config agents can use the server immediately without separate CLI authentication
341
- 7. Background token refresh — expiring tokens are refreshed and re-injected automatically
342
-
343
- **Server Management:**
344
- - Enable/disable toggle per server (writes to Claude's settings)
345
- - Server cards show status, tool count, type, description
346
- - Detail slideover with full tool list, descriptions, input schemas, parameters
347
- - Assign MCP servers to specific agents in the agent editor
333
+ One-click browser-based auth, projected to both backends:
334
+ 1. Click "Authenticate" on any HTTP/SSE server card
335
+ 2. Plugin discovers OAuth endpoints automatically and registers via Dynamic Client Registration (PKCE flow)
336
+ 3. Opens browser for approval
337
+ 4. Tokens stored securely in the OS keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service)
338
+ 5. The token is projected into each run — to Claude as an `Authorization` header, to Codex via `bearer_token_env_var` (passed through the spawn environment, never written to argv or any config file)
339
+ 6. Background token refresh expiring tokens are refreshed automatically, and the next run picks up the fresh token
348
340
 
349
341
  ---
350
342
 
@@ -407,12 +399,20 @@ The main overview with:
407
399
 
408
400
  ### Agent Memory
409
401
 
410
- Agents persist context across sessions:
402
+ A two-tier, self-curating memory that works on **task, heartbeat, and chat** runs and on **both Claude Code and Codex** backends. Per agent, under `_fleet/memory/<agent>/`:
403
+
404
+ - **`working.md`** — curated, **token-budgeted** memory (`memory_token_budget`, default 1500) injected into every run, organized into Preferences (pinned) / Procedures / Observations / Recent.
405
+ - **`raw/<date>.md`** — append-only ground-truth log of everything captured (never injected), so summaries can always be re-derived.
406
+
407
+ **How an agent records something** (two channels, same sink):
408
+ 1. The **`remember` tool** — `remember(fact, pin?, section?)`, auto-enabled for memory agents (preferred, structured).
409
+ 2. The **`[REMEMBER] … [/REMEMBER]`** text tag as a fallback (`[REMEMBER:pin]` for standing preferences).
410
+
411
+ Captures land in `working.md` immediately, so the next run/turn sees them. Memory is agent-scoped (shared across all conversations, including channels).
412
+
413
+ **Reflection ("dreaming")** — enable `reflection_enabled` and a nightly run (`reflection_schedule`, default `0 3 * * *`) consolidates memory from the raw log: dedups, resolves contradictions, summarizes from ground truth to fit the budget, and keeps pinned preferences. With `reflection_propose_skills`, recurring friction becomes an approval-gated **skill proposal** in the Inbox. A failed reflection never wipes memory. Trigger manually with **Reflect now** on the agent.
411
414
 
412
- 1. Agent includes `[REMEMBER]important context[/REMEMBER]` in its output
413
- 2. Extracted and appended to `_fleet/memory/<agent-name>.md`
414
- 3. Injected into the agent's prompt on every future run
415
- 4. Memory is agent-scoped — shared across all conversations including Slack channels
415
+ > Legacy single-file memory (`_fleet/memory/<agent>.md`) is migrated automatically. `memory_max_entries` is superseded by `memory_token_budget`.
416
416
 
417
417
  ---
418
418
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-agent-fleet",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.",
5
5
  "license": "MIT",
6
6
  "main": "plugin/main.js",