obsidian-agent-fleet 0.12.0 → 0.13.4

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
@@ -1,6 +1,6 @@
1
1
  # Agent Fleet for Obsidian
2
2
 
3
- **Turn Obsidian into an AI-powered command center. Create autonomous agents, schedule tasks, chat in real-time, connect via Slack, and hook into any MCP service — all from your vault.**
3
+ **Turn Obsidian into an AI-powered command center. Create autonomous agents on Claude Code or OpenAI Codex, schedule tasks, chat in real-time, connect via Slack or Telegram, and hook into any MCP service — all from your vault.**
4
4
 
5
5
  ![Agent Fleet Dashboard](screenshot.png)
6
6
 
@@ -18,7 +18,7 @@ Agent Fleet is an Obsidian plugin that lets you build, configure, and run AI age
18
18
 
19
19
  📚 **Wiki Keeper** — Turn any folder in your vault into a self-maintaining wiki in the spirit of Karpathy's "LLM wiki" pattern. Drop sources into an inbox, point at existing note folders as passive watched sources, and a scoped keeper agent ingests them into an interlinked `_topics/` tree with cross-references, citations, and a log. Each topic page carries a refreshable `## Summary` block synthesized from its claims history, so query-time reads stay cheap as the wiki grows. Substantive Q&A answers compound back into the wiki — both as filed synthesis pages and as dated bullets on every cited topic. Weekly lint surfaces orphans, contradictions, dedup candidates, and stale summaries; the dashboard's Wiki Keepers tab renders the review queue. Scales from one whole-vault keeper to many project-scoped instances; any other agent (e.g. a PM agent) can reference a keeper's scope and query or contribute. See the [Wiki Keeper Guide](WIKI_KEEPER_GUIDE.md).
20
20
 
21
- 💬 **Interactive Chat** — Dock a chat panel anywhere in Obsidian. Switch between agents. Attach documents and images. Send follow-up messages while the agent works. **Inline threads** under any assistant reply let you tangent without polluting the main thread — each thread has its own Claude session, its own context, its own stats.
21
+ 💬 **Interactive Chat** — Dock a chat panel anywhere in Obsidian. Switch between agents. Attach documents and images. Send follow-up messages while the agent works. **Inline threads** under any assistant reply let you tangent without polluting the main thread — each thread has its own backend session, its own context, its own stats.
22
22
 
23
23
  📊 **Live chat stats** — Compact terminal-style strip under the composer shows the model and a context-usage bar so you always know where you stand on context.
24
24
 
@@ -30,7 +30,7 @@ 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
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
 
@@ -61,7 +61,7 @@ The installer automatically finds your Obsidian vaults and copies the plugin fil
61
61
 
62
62
  ### Requirements
63
63
 
64
- - **Obsidian** 1.6.0+ (desktop — macOS, Windows, Linux)
64
+ - **Obsidian** 1.11.4+ (desktop — macOS, Windows, Linux)
65
65
  - **At least one CLI backend** — install whichever engine(s) your agents will use:
66
66
  - **[Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)** (default):
67
67
  ```bash
@@ -86,9 +86,10 @@ On first launch, Agent Fleet creates a `_fleet/` folder in your vault:
86
86
  _fleet/
87
87
  ├── agents/
88
88
  │ └── fleet-orchestrator/ ← default agent (manages the fleet)
89
- ├── skills/ ← 18 built-in skills
89
+ ├── skills/ ← 22 built-in skills
90
90
  ├── tasks/
91
91
  ├── channels/
92
+ ├── mcp/ ← registered MCP servers (one file each)
92
93
  ├── runs/
93
94
  └── memory/
94
95
  ```
@@ -127,7 +128,7 @@ agents/my-agent/
127
128
  | **Name & Description** | Identity shown in the dashboard |
128
129
  | **Avatar** | Lucide icon picker (1,400+ icons) or emoji |
129
130
  | **System Prompt** | Core instructions that define the agent's behavior |
130
- | **Model** | Claude Opus 4.6, Sonnet 4.6, Haiku 4.5, Bedrock models, or custom |
131
+ | **Model** | Backend-aware picker Claude aliases (`opus`/`sonnet`/`haiku`/`opusplan`), pinned IDs, Bedrock/Vertex/Foundry, or Codex slugs; free-text for anything else |
131
132
  | **Adapter** | Claude Code or OpenAI Codex — set per agent |
132
133
  | **Working Directory** | Where the agent operates (defaults to vault root) |
133
134
  | **Timeout** | Max execution time in seconds |
@@ -160,7 +161,7 @@ Each agent runs on one of two CLI backends, selected by the **Adapter** field in
160
161
  | Models | `opus` / `sonnet` / `haiku` / `opusplan` aliases, pinned IDs, Bedrock/Vertex/Foundry | Codex slugs (e.g. `gpt-5.5-codex`) + free-text |
161
162
  | Permission rules | Native — `.claude/settings.local.json` | execpolicy command rules via per-agent `CODEX_HOME` overlay |
162
163
  | 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 |
164
+ | MCP servers | Fleet registry (`_fleet/mcp/`), projected via `--mcp-config` | Fleet registry (`_fleet/mcp/`), projected via `-c mcp_servers.*` |
164
165
 
165
166
  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
167
 
@@ -203,7 +204,7 @@ If everything is healthy, respond with a one-line "all clear".
203
204
 
204
205
  ### Slack Channels
205
206
 
206
- Chat with your agents from Slack — every message flows through the same Claude CLI session pipeline, with full tool use, session persistence, and agent memory.
207
+ Chat with your agents from Slack — every message flows through the same chat-session pipeline as the in-app panel (Claude Code or Codex), with full tool use, session persistence, and agent memory.
207
208
 
208
209
  > **📖 [Step-by-step Slack setup guide →](SLACK_SETUP.md)** — complete walkthrough from creating the Slack app to sending your first message.
209
210
 
@@ -236,7 +237,7 @@ channel_context: |
236
237
  - **Socket Mode** — outbound WebSocket, works behind NAT/firewalls, no public URL needed
237
238
  - **Slack Assistants API** — native "is thinking..." indicator, threaded conversations, thread titles
238
239
  - **Multi-agent routing** — type `@agent-name: message` to switch agents mid-thread. Each agent gets its own isolated session. `/agents` slash command lists available agents.
239
- - **Session persistence** — conversations survive Obsidian restarts via `claude --resume`
240
+ - **Session persistence** — conversations survive Obsidian restarts via the backend's resume (Claude `--resume` / Codex `exec resume`)
240
241
  - **Idle hibernation** — subprocess eviction after configurable idle time, transparent resume on next message
241
242
  - **Allowlist** — only approved Slack users (by user ID) can reach the bot
242
243
  - **Rate limiting** — per-conversation sliding window to prevent budget burn
@@ -264,7 +265,7 @@ Chat with your agents from Telegram — simpler setup than Slack, no @mention re
264
265
  - **Agent name prefix** — replies show `[agent-name]` when multiple agents are configured
265
266
  - **Group chat support** — add the bot to groups (disable privacy mode via BotFather for full access)
266
267
  - **Forum topics** — enable Threaded Mode in BotFather for topic-based conversations
267
- - **Session persistence** — conversations survive Obsidian restarts via `claude --resume`
268
+ - **Session persistence** — conversations survive Obsidian restarts via the backend's resume (Claude `--resume` / Codex `exec resume`)
268
269
  - **4096-char message splitting** — long replies automatically chunked at paragraph boundaries
269
270
 
270
271
  ---
@@ -275,10 +276,10 @@ The chat panel is a first-class Obsidian view — dock it in the sidebar, center
275
276
 
276
277
  **Features:**
277
278
  - **Agent Switcher** — dropdown to switch between agents instantly. Each agent has its own conversation.
278
- - **Session Persistence** — conversations survive Obsidian restarts via Claude CLI `--resume`
279
+ - **Session Persistence** — conversations survive Obsidian restarts via the backend's resume (Claude `--resume` / Codex `exec resume`)
279
280
  - **Bidirectional Streaming** — send follow-up messages while the agent is working. Steer it mid-task.
280
281
  - **Document Attachment** — click + to attach the active document. Agent gets the full content; you see a compact pill.
281
- - **Image Paste & Drop** — paste from clipboard or drag images into chat. Saved to vault, passed to Claude.
282
+ - **Image Paste & Drop** — paste from clipboard or drag images into chat. Saved to vault, passed to the agent.
282
283
  - **Stop Button** — + button becomes ■ while agent works. Click to abort.
283
284
  - **Streaming Markdown** — responses render in real-time with syntax highlighting
284
285
  - **Code Block Copy** — hover any code block for a copy button
@@ -311,40 +312,32 @@ A kanban view for managing agent tasks with five columns:
311
312
 
312
313
  ### MCP Servers
313
314
 
314
- Add, remove, authenticate, and manage MCP servers directly from the dashboardno terminal needed.
315
+ 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.
316
+
317
+ **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
318
 
316
319
  **Add Server UI:**
317
320
  - Click **"Add Server"** on the MCP page to open the form
318
321
  - **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
322
+ - **HTTP / SSE** — URL, custom headers, and authentication: none, a static **bearer token** (stored in the keychain), or **OAuth** (authenticate after saving)
323
+ - Servers are written to `_fleet/mcp/`; secrets never touch the vault
326
324
 
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
325
+ **Server Management:**
326
+ - Enable/disable toggle per server (writes the registry file's frontmatter)
327
+ - Per-server **"Probe tools"** action — stdio servers are spawned and probed via JSON-RPC; HTTP/SSE servers are probed with the stored token
328
+ - Detail slideover with transport, auth state, and the discovered tool list
329
+ - **Remove Server** trashes the registry file and clears any stored token
330
+ - Grant servers to specific agents in the agent editor — leave an agent's list empty to grant every enabled server
331
331
 
332
332
  **OAuth 2.1 Authentication:**
333
333
 
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
334
+ One-click browser-based auth, projected to both backends:
335
+ 1. Click "Authenticate" on any HTTP/SSE server card
336
+ 2. Plugin discovers OAuth endpoints automatically and registers via Dynamic Client Registration (PKCE flow)
337
+ 3. Opens browser for approval
338
+ 4. Tokens stored securely in the OS keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service)
339
+ 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)
340
+ 6. Background token refresh expiring tokens are refreshed automatically, and the next run picks up the fresh token
348
341
 
349
342
  ---
350
343
 
@@ -360,14 +353,14 @@ skills/my-skill/
360
353
  └── examples.md ← Few-shot examples
361
354
  ```
362
355
 
363
- **18 Built-in Skills:**
356
+ **22 Built-in Skills:**
364
357
 
365
358
  | Skill | Description |
366
359
  |-------|-------------|
367
360
  | `agent-fleet-system` | Full knowledge of the Agent Fleet plugin |
368
361
  | `algorithmic-art` | Generative art with p5.js |
369
362
  | `canvas-design` | Visual art, posters, static designs as PNG/PDF |
370
- | `claude-api` | Build apps with Claude API and Anthropic SDKs |
363
+ | `claude-api` | Build apps with the Claude API and Anthropic SDKs |
371
364
  | `doc-coauthoring` | Structured co-authoring workflow for documentation |
372
365
  | `docx` | Create, read, edit Word (.docx) files |
373
366
  | `frontend-design` | Production-grade web UIs and components |
@@ -378,8 +371,14 @@ skills/my-skill/
378
371
  | `skill-creator` | Create, evaluate, and optimize skills |
379
372
  | `slack-gif-creator` | Animated GIFs optimized for Slack |
380
373
  | `taste-skill` | Senior UI/UX engineering for frontend design |
381
- | `frontend-slides` | HTML presentation creation |
382
- | And more... | |
374
+ | `theme-factory` | Apply visual themes (colors, fonts) to slides, docs, HTML |
375
+ | `web-artifacts-builder` | Multi-component HTML artifacts with React, Tailwind, shadcn/ui |
376
+ | `webapp-testing` | Test local web apps with Playwright — UI checks, screenshots |
377
+ | `xlsx` | Create, read, edit spreadsheets (.xlsx, .csv, .tsv) |
378
+ | `wiki-ingest` | Ingest sources into a scoped Wiki Keeper wiki |
379
+ | `wiki-query` | Answer a question strictly from wiki content |
380
+ | `wiki-refresh` | Regenerate topic-page `## Summary` blocks from claim history |
381
+ | `wiki-lint` | Weekly Wiki Keeper health check (orphans, stale pages, missing links) |
383
382
 
384
383
  ---
385
384
 
@@ -439,7 +438,7 @@ completed: 2026-04-03T09:02:30
439
438
  duration_seconds: 150
440
439
  tokens_used: 4500
441
440
  cost_usd: 0.07
442
- model: claude-opus-4-6
441
+ model: claude-opus-4-8
443
442
  tags: [heartbeat]
444
443
  ---
445
444
 
@@ -464,25 +463,28 @@ Click any run in the dashboard to see full details in a slideover panel.
464
463
  | Setting | Default | Description |
465
464
  |---------|---------|-------------|
466
465
  | Fleet Folder | `_fleet` | Root folder for all fleet data |
467
- | Claude CLI Path | `claude` | Path to Claude Code CLI |
466
+ | Claude CLI Path | `claude` | Path to the Claude Code CLI |
467
+ | Codex CLI Path | `codex` | Path to the OpenAI Codex CLI (used by `codex` agents) |
468
468
  | Default Model | `default` | Default model for new agents. Pick Default / Alias (opus/sonnet/haiku/opusplan) / Custom (manual ID for Bedrock/Vertex/etc.) |
469
469
  | AWS Region | `us-east-1` | For AWS Bedrock model support |
470
470
  | Max Concurrent Runs | `2` | Parallel task execution limit |
471
471
  | Run Log Retention | `30` days | Auto-cleanup old logs |
472
472
  | Catch Up Missed Tasks | `true` | Run overdue tasks on startup |
473
473
  | Notification Level | `all` | `all`, `failures-only`, `none` |
474
+ | Status Bar | `true` | Show the fleet status indicator in Obsidian's status bar |
475
+ | Chat Watchdog Timeout | `10` min | Kill a chat turn after this much silence from the CLI |
474
476
 
475
477
  ### Security
476
478
 
477
- All secrets — MCP OAuth tokens, API keys, and channel credentials (Slack/Telegram) — are stored in your OS keychain via Obsidian's SecretStorage API. On first load after updating to v0.6.0, existing plaintext credentials are automatically migrated from `data.json` to the keychain and the plaintext copies are cleared.
479
+ All secrets — MCP OAuth/bearer tokens and channel credentials (Slack/Telegram) — are stored in your OS keychain via Obsidian's SecretStorage API, never in the vault or in your native `~/.claude.json` / `~/.codex/config.toml`. Existing plaintext credentials are migrated from `data.json` to the keychain automatically on first load and the plaintext copies are cleared.
478
480
 
479
- Requires Obsidian 1.11.4+ for keychain support. On older versions, credentials remain in `data.json` with a console warning.
481
+ Keychain storage uses Obsidian's SecretStorage API (Obsidian 1.11.4+, the minimum supported version).
480
482
 
481
483
  ### Channel Settings
482
484
 
483
485
  | Setting | Default | Description |
484
486
  |---------|---------|-------------|
485
- | Max Concurrent Sessions | `5` | Live claude subprocesses across all channels |
487
+ | Max Concurrent Sessions | `5` | Live agent chat sessions across all channels |
486
488
  | Idle Timeout | `15` min | Hibernate sessions after inactivity |
487
489
  | Rate Limit | `20` msgs / `5` min | Per-conversation sliding window |
488
490
 
@@ -495,10 +497,11 @@ _fleet/
495
497
  ├── agents/ Agent folders (agent.md, config.md, HEARTBEAT.md, etc.)
496
498
  ├── skills/ Shared skill folders (skill.md, tools.md, etc.)
497
499
  ├── tasks/ Task files with frontmatter
498
- ├── channels/ Channel bindings (Slack, etc.)
500
+ ├── channels/ Channel bindings (Slack, Telegram)
501
+ ├── mcp/ Registered MCP servers (one markdown file each)
499
502
  ├── runs/ Execution logs by date
500
503
  │ └── YYYY-MM-DD/
501
- ├── memory/ Agent memory files
504
+ ├── memory/ Per-agent memory (working.md + raw/ archive)
502
505
  └── chat-images/ Images pasted into chat
503
506
  ```
504
507
 
@@ -515,10 +518,10 @@ Not necessarily. Agent Fleet works with your **Claude Max or Pro subscription**
515
518
  Yes. Set an agent's **Adapter** to `OpenAI Codex` and it runs on the `@openai/codex` CLI (ChatGPT plan or OpenAI API key) instead of Claude Code. You can mix freely — some agents on Claude, others on Codex — in the same fleet. Chat, tasks, heartbeat, channels, and memory all work the same. See [Backends](#backends) for the per-backend differences (notably how command permission rules are enforced and that Codex runs report no dollar cost).
516
519
 
517
520
  **Q: Does it work without internet?**
518
- No — agents need the Claude API to run. But all your data (agents, tasks, skills, memory) is local markdown.
521
+ No — agents need their CLI backend (Claude Code or OpenAI Codex) to reach its API. But all your data (agents, tasks, skills, memory) is local markdown.
519
522
 
520
523
  **Q: Can I use different models per agent or per task?**
521
- Yes. Each agent has its own model setting, and you can override it per task (e.g. keep the agent on Opus but run a simple nightly summary task on Haiku to cut cost). Supports Anthropic direct, AWS Bedrock, Google Vertex, Foundry, and Mantle. Aliases `opus` / `sonnet` / `haiku` / `opusplan` work on every backend pick those unless you need a pinned version. Resolution order: task → agent → settings → Claude CLI default.
524
+ Yes. Each agent has its own model setting, and you can override it per task (e.g. keep the agent on Opus but run a simple nightly summary task on Haiku to cut cost). Supports Anthropic direct, AWS Bedrock, Google Vertex, Foundry, and Mantle. Claude aliases `opus` / `sonnet` / `haiku` / `opusplan` cover the Claude backend; Codex agents use Codex slugs (a Claude-shaped default is ignored on Codex and vice-versa). Resolution order: task → agent → settings → the backend's own CLI default.
522
525
 
523
526
  **Q: What happens if I delete the plugin?**
524
527
  Your `_fleet/` folder stays. All agents, tasks, skills, run logs, and memory are plain markdown files in your vault.
@@ -527,7 +530,7 @@ Your `_fleet/` folder stays. All agents, tasks, skills, run logs, and memory are
527
530
  Yes, up to `maxConcurrentRuns` (default 2). Additional tasks queue until a slot opens.
528
531
 
529
532
  **Q: Does the chat remember previous conversations?**
530
- Yes. Each agent has persistent chat sessions that survive Obsidian restarts via Claude CLI `--resume`.
533
+ Yes. Each agent has persistent chat sessions that survive Obsidian restarts via the backend's session resume (Claude `--resume` / Codex `exec resume`).
531
534
 
532
535
  **Q: Does the Slack bot work when Obsidian is closed?**
533
536
  No. The bot runs inside Obsidian via Socket Mode — when Obsidian is closed, the bot goes offline. Slack buffers messages briefly during short disconnects.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-agent-fleet",
3
- "version": "0.12.0",
3
+ "version": "0.13.4",
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",
@@ -27,7 +27,6 @@
27
27
  "devDependencies": {
28
28
  "@types/node": "^24.5.2",
29
29
  "@types/ws": "^8.18.1",
30
- "builtin-modules": "^4.0.0",
31
30
  "esbuild": "^0.25.9",
32
31
  "obsidian": "^1.8.10",
33
32
  "tslib": "^2.8.1",