obsidian-agent-fleet 0.4.5 → 0.9.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Denis Berekchiyan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -14,19 +14,25 @@ Agent Fleet is an Obsidian plugin that lets you build, configure, and run AI age
14
14
 
15
15
  🤖 **AI Agents** — Create specialized agents with system prompts, skills, permissions, heartbeat schedules, and memory. Each agent is a folder of markdown files you fully own and control.
16
16
 
17
- 💬 **Interactive Chat** — Dock a chat panel anywhere in Obsidian. Switch between agents. Attach documents and images. Send follow-up messages while the agent works.
17
+ 📚 **Wiki Keeper** — Turn any folder in your vault into a self-maintaining wiki. Drop sources into an inbox, point at existing note folders as passive watched sources, and a scoped keeper agent ingests them nightly into an interlinked `_topics/` tree with cross-references, citations, and a log. 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 to it. See the [Wiki Keeper Guide](WIKI_KEEPER_GUIDE.md).
18
18
 
19
- 📡 **Slack Channels** — Chat with your agents from Slack. Multi-agent routing via `@agent-name` prefix. Native "is thinking..." indicator via Slack Assistants API. Session persistence across restarts.
19
+ 💬 **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.
20
+
21
+ 📊 **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.
22
+
23
+ 📡 **Slack & Telegram** — Chat with your agents from Slack or Telegram. Multi-agent routing via `@agent-name` prefix or interactive buttons. Slack Assistants API with native "is thinking..." indicator. Telegram with inline keyboard agent picker and typing dots. Session persistence across restarts.
20
24
 
21
25
  💓 **Heartbeat** — Autonomous periodic agent runs. Define what an agent does when no one is asking — monitoring, reports, health checks — with results posted to Slack.
22
26
 
23
- 📋 **Task Board** — Kanban view with scheduling, priority, real-time progress tracking, and abort. Tasks run on cron schedules or on-demand.
27
+ 📋 **Task Board** — Kanban view with scheduling, priority, real-time progress tracking, and abort. Tasks run on cron schedules or on-demand. Per-task model override lets you route a simple nightly summary to Haiku while keeping the agent on Opus.
28
+
29
+ 🎛️ **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.
24
30
 
25
- 🔌 **MCP Integration** — Discover, authenticate, and inspect MCP servers. One-click OAuth 2.1 authentication. Assign MCP tools to specific agents.
31
+ 🔌 **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.
26
32
 
27
33
  🧠 **Agent Memory** — Agents persist context across sessions using `[REMEMBER]` tags stored as markdown.
28
34
 
29
- 📊 **Dashboard** — Overview with run charts, success rates, token/cost tracking, activity timeline, fleet status, and streaming output from active agents.
35
+ 📊 **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.
30
36
 
31
37
  ---
32
38
 
@@ -53,7 +59,7 @@ The installer automatically finds your Obsidian vaults and copies the plugin fil
53
59
 
54
60
  ### Requirements
55
61
 
56
- - **Obsidian** 1.6.0+ (desktop only)
62
+ - **Obsidian** 1.6.0+ (desktop — macOS, Windows, Linux)
57
63
  - **[Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)** — the engine behind all agent execution:
58
64
  ```bash
59
65
  npm install -g @anthropic-ai/claude-code
@@ -204,6 +210,29 @@ channel_context: |
204
210
 
205
211
  ---
206
212
 
213
+ ### Telegram
214
+
215
+ Chat with your agents from Telegram — simpler setup than Slack, no @mention required in DMs.
216
+
217
+ **Setup:**
218
+ 1. Create a bot via [@BotFather](https://t.me/botfather) — `/newbot`, pick a name and username, copy the token
219
+ 2. Add the token in Settings → Agent Fleet → Channel Credentials (type: Telegram)
220
+ 3. Create a channel via the dashboard or as `_fleet/channels/my-telegram.md`
221
+ 4. Message the bot in Telegram
222
+
223
+ **Features:**
224
+ - **Zero dependencies** — long-poll via HTTPS, no WebSocket, no SDK
225
+ - **Typing indicator** — `typing...` dots while the agent works (auto-refreshed every 4.5s)
226
+ - **Inline keyboard agent picker** — `/agents` command shows interactive buttons to switch agents
227
+ - **Slash command autocomplete** — commands registered automatically via `setMyCommands`
228
+ - **Agent name prefix** — replies show `[agent-name]` when multiple agents are configured
229
+ - **Group chat support** — add the bot to groups (disable privacy mode via BotFather for full access)
230
+ - **Forum topics** — enable Threaded Mode in BotFather for topic-based conversations
231
+ - **Session persistence** — conversations survive Obsidian restarts via `claude --resume`
232
+ - **4096-char message splitting** — long replies automatically chunked at paragraph boundaries
233
+
234
+ ---
235
+
207
236
  ### Interactive Chat
208
237
 
209
238
  The chat panel is a first-class Obsidian view — dock it in the sidebar, center, or any split.
@@ -246,7 +275,18 @@ A kanban view for managing agent tasks with five columns:
246
275
 
247
276
  ### MCP Servers
248
277
 
249
- Discover and manage all MCP (Model Context Protocol) servers configured in Claude Code.
278
+ Add, remove, authenticate, and manage MCP servers directly from the dashboard no terminal needed.
279
+
280
+ **Add Server UI:**
281
+ - Click **"Add Server"** on the MCP page to open the form
282
+ - **stdio** — command, arguments, environment variables
283
+ - **HTTP / SSE** — URL, API key (stored securely), custom headers
284
+ - Scope selection (user or local) — defaults to "user" so servers are visible across projects
285
+ - Servers appear immediately after adding, with tools auto-discovered
286
+
287
+ **Remove Server:**
288
+ - Open any server's detail slideover → click **"Remove Server"**
289
+ - Cleans up CLI registration and stored secrets in one step
250
290
 
251
291
  **Discovery:**
252
292
  - **stdio servers** — spawned and probed directly via JSON-RPC (~1-2s)
@@ -255,12 +295,14 @@ Discover and manage all MCP (Model Context Protocol) servers configured in Claud
255
295
 
256
296
  **OAuth 2.1 Authentication:**
257
297
 
258
- One-click browser-based auth for MCP servers:
298
+ One-click browser-based auth with unified CLI token injection:
259
299
  1. Click "Authenticate" on any server card
260
300
  2. Plugin discovers OAuth endpoints automatically
261
301
  3. Registers via Dynamic Client Registration
262
302
  4. Opens browser for approval (PKCE flow)
263
- 5. Tokens stored in plugin settings, auto-refresh
303
+ 5. Tokens stored securely in OS keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service)
304
+ 6. Token automatically injected into Claude CLI config — agents can use the server immediately without separate CLI authentication
305
+ 7. Background token refresh — expiring tokens are refreshed and re-injected automatically
264
306
 
265
307
  **Server Management:**
266
308
  - Enable/disable toggle per server (writes to Claude's settings)
@@ -379,13 +421,19 @@ Click any run in the dashboard to see full details in a slideover panel.
379
421
  |---------|---------|-------------|
380
422
  | Fleet Folder | `_fleet` | Root folder for all fleet data |
381
423
  | Claude CLI Path | `claude` | Path to Claude Code CLI |
382
- | Default Model | `default` | Default model for new agents |
424
+ | Default Model | `default` | Default model for new agents. Pick Default / Alias (opus/sonnet/haiku/opusplan) / Custom (manual ID for Bedrock/Vertex/etc.) |
383
425
  | AWS Region | `us-east-1` | For AWS Bedrock model support |
384
426
  | Max Concurrent Runs | `2` | Parallel task execution limit |
385
427
  | Run Log Retention | `30` days | Auto-cleanup old logs |
386
428
  | Catch Up Missed Tasks | `true` | Run overdue tasks on startup |
387
429
  | Notification Level | `all` | `all`, `failures-only`, `none` |
388
430
 
431
+ ### Security
432
+
433
+ 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.
434
+
435
+ Requires Obsidian 1.11.4+ for keychain support. On older versions, credentials remain in `data.json` with a console warning.
436
+
389
437
  ### Channel Settings
390
438
 
391
439
  | Setting | Default | Description |
@@ -422,8 +470,8 @@ Not necessarily. Agent Fleet works with your **Claude Max or Pro subscription**
422
470
  **Q: Does it work without internet?**
423
471
  No — agents need the Claude API to run. But all your data (agents, tasks, skills, memory) is local markdown.
424
472
 
425
- **Q: Can I use different models per agent?**
426
- Yes. Each agent has its own model setting. Supports Anthropic direct (Opus, Sonnet, Haiku) and AWS Bedrock models.
473
+ **Q: Can I use different models per agent or per task?**
474
+ 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.
427
475
 
428
476
  **Q: What happens if I delete the plugin?**
429
477
  Your `_fleet/` folder stays. All agents, tasks, skills, run logs, and memory are plain markdown files in your vault.
@@ -437,11 +485,14 @@ Yes. Each agent has persistent chat sessions that survive Obsidian restarts via
437
485
  **Q: Does the Slack bot work when Obsidian is closed?**
438
486
  No. The bot runs inside Obsidian via Socket Mode — when Obsidian is closed, the bot goes offline. Slack buffers messages briefly during short disconnects.
439
487
 
440
- **Q: Can I use multiple agents in Slack?**
441
- Yes. Type `@agent-name: message` to switch agents within a Slack thread. Each agent maintains its own session. Use `/agents` to see available agents.
488
+ **Q: Can I use multiple agents in Slack or Telegram?**
489
+ Yes. Type `@agent-name: message` to switch agents, or use `/agents` to get interactive buttons. Each agent maintains its own session. Works in both Slack and Telegram.
490
+
491
+ **Q: Which is easier to set up — Slack or Telegram?**
492
+ Telegram. Create a bot via @BotFather (30 seconds), paste the token, create a channel. Slack requires creating an app with Socket Mode, scopes, events, and reinstalls after scope changes.
442
493
 
443
494
  **Q: What is a heartbeat?**
444
- An autonomous periodic run — what an agent does on a schedule without user input. Configured via `HEARTBEAT.md` in the agent's folder. Results can be posted to a Slack channel automatically.
495
+ An autonomous periodic run — what an agent does on a schedule without user input. Configured via `HEARTBEAT.md` in the agent's folder. Results can be posted to Slack or Telegram automatically.
445
496
 
446
497
  ---
447
498
 
@@ -454,4 +505,4 @@ An autonomous periodic run — what an agent does on a schedule without user inp
454
505
 
455
506
  ---
456
507
 
457
- © 2026 Denis Berekchiyan. All rights reserved.
508
+ MIT License — © 2026 Denis Berekchiyan
package/bin/cli.js CHANGED
@@ -37,6 +37,29 @@ function getVaults() {
37
37
 
38
38
  function resolveClaudePath() {
39
39
  const { execSync } = require("child_process");
40
+
41
+ if (process.platform === "win32") {
42
+ // Windows: use `where` to find claude on PATH
43
+ try {
44
+ const result = execSync("where claude", {
45
+ encoding: "utf8",
46
+ timeout: 5000,
47
+ stdio: ["pipe", "pipe", "pipe"],
48
+ }).trim().split(/\r?\n/)[0];
49
+ if (result && fs.existsSync(result)) return result;
50
+ } catch { /* skip */ }
51
+ // Check common Windows install locations
52
+ const candidates = [
53
+ path.join(process.env.APPDATA || "", "Claude", "claude.exe"),
54
+ path.join(process.env.LOCALAPPDATA || "", "Claude", "claude.exe"),
55
+ ];
56
+ for (const c of candidates) {
57
+ if (fs.existsSync(c)) return c;
58
+ }
59
+ return null;
60
+ }
61
+
62
+ // macOS / Linux: use shell login to find claude via `which`
40
63
  const shells = ["/bin/zsh", "/bin/bash", "/bin/sh"];
41
64
  for (const shell of shells) {
42
65
  if (!fs.existsSync(shell)) continue;
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "obsidian-agent-fleet",
3
- "version": "0.4.5",
3
+ "version": "0.9.0",
4
4
  "description": "Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.",
5
+ "license": "MIT",
5
6
  "main": "plugin/main.js",
6
7
  "bin": {
7
8
  "agent-fleet": "bin/cli.js"
@@ -12,7 +13,9 @@
12
13
  "plugin/manifest.json",
13
14
  "plugin/styles.css",
14
15
  "README.md",
15
- "SLACK_SETUP.md"
16
+ "SLACK_SETUP.md",
17
+ "LICENSE",
18
+ "screenshot.png"
16
19
  ],
17
20
  "scripts": {
18
21
  "build": "node esbuild.config.mjs production",