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 +21 -0
- package/README.md +67 -16
- package/bin/cli.js +23 -0
- package/package.json +5 -2
- package/plugin/main.js +672 -16399
- package/plugin/manifest.json +1 -1
- package/plugin/styles.css +496 -2
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
|
-
|
|
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
|
-
|
|
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** —
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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",
|