obsidian-agent-fleet 0.3.2 → 0.4.2

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,224 +1,157 @@
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, and connect to any MCP service — all from your vault.**
3
+ **File-backed AI agents, task scheduling, and interactive chat — all inside Obsidian.**
4
4
 
5
- ![Agent Fleet Dashboard](screenshot.png)
5
+ Agent Fleet lets you create, configure, and run AI agents directly from your Obsidian vault. Every agent, skill, task, and run log is a markdown file with YAML frontmatter. If the plugin disappears, your knowledge stays.
6
6
 
7
- ---
8
-
9
- ## What is Agent Fleet?
10
-
11
- Agent Fleet is an Obsidian plugin that lets you build, configure, and run AI agents directly from your vault. Agents are powered by **Claude Code CLI** — works with a Claude Max/Pro subscription or Anthropic API key. Every agent, skill, task, and run log is a markdown file. If the plugin disappears, your knowledge stays.
12
-
13
- ### Core Capabilities
14
-
15
- 🤖 **AI Agents** — Create specialized agents with system prompts, skills, permissions, and memory. Each agent is a folder of markdown files you fully own and control.
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.
7
+ ## Key Features
18
8
 
19
- 📋 **Task Board** — Kanban view with scheduling, priority, real-time progress tracking, and abort. Tasks run on cron schedules or on-demand.
9
+ - **Interactive Chat** — chat with agents in a side panel with streaming markdown responses
10
+ - **Session Persistence** — conversations survive panel close and Obsidian restarts via Claude CLI `--resume`
11
+ - **Task Scheduling** — cron-based recurring tasks, one-shot runs, and manual execution
12
+ - **Skill System** — reusable skill libraries that agents can share
13
+ - **Agent Memory** — persistent context across runs via `[REMEMBER]...[/REMEMBER]` tags
14
+ - **Live Dashboard** — overview with charts, run history, kanban board, and approval workflow
15
+ - **Lucide Icon Picker** — searchable icon selector for agent avatars (1,400+ icons)
16
+ - **18 Built-in Skills** — PDF, PPTX, DOCX, XLSX, Claude API, MCP Builder, Frontend Design, and more
17
+ - **Run Output** — rendered markdown with collapsible tool call summaries
20
18
 
21
- 🔌 **MCP Integration** — Discover, authenticate, and inspect MCP servers. One-click OAuth 2.1 authentication. Assign MCP tools to specific agents.
19
+ ## Requirements
22
20
 
23
- 🧠 **Agent Memory** Agents persist context across sessions using `[REMEMBER]` tags stored as markdown.
24
-
25
- 📊 **Dashboard** — Overview with run charts, success rates, activity timeline, fleet status, and streaming output from active agents.
26
-
27
- ---
21
+ - **Obsidian** 1.6.0 or later (desktop only)
22
+ - **[Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)** installed and authenticated
23
+ ```bash
24
+ npm install -g @anthropic-ai/claude-code
25
+ claude # authenticate on first run
26
+ ```
27
+ - **Claude Max subscription** or Anthropic API key (for Claude Code CLI)
28
28
 
29
- ## Quick Start
29
+ ## Installation
30
30
 
31
- ### Install
31
+ ### Via BRAT (recommended — auto-updates)
32
32
 
33
- **Via npm (recommended):**
34
- ```bash
35
- npm install -g obsidian-agent-fleet
36
- ```
37
- The installer automatically finds your Obsidian vaults and copies the plugin files.
33
+ 1. Install the [BRAT plugin](https://github.com/TfTHacker/obsidian42-brat) from Community Plugins
34
+ 2. Open BRAT settings → **Add Beta Plugin**
35
+ 3. Paste: `denberek/obsidian-agent-fleet`
36
+ 4. Enable **Agent Fleet** in Settings → Community Plugins
38
37
 
39
- **Via BRAT:**
40
- 1. Install the [BRAT plugin](https://github.com/TfTHacker/obsidian42-brat)
41
- 2. Add beta plugin: `denberek/obsidian-agent-fleet`
42
- 3. Enable Agent Fleet in Settings → Community Plugins
38
+ ### Manual Install
43
39
 
44
- **Manual:**
45
- 1. Download `main.js`, `manifest.json`, `styles.css` from the [latest release](https://github.com/denberek/obsidian-agent-fleet/releases)
46
- 2. Create `<vault>/.obsidian/plugins/agent-fleet/`
40
+ 1. Download `main.js`, `manifest.json`, and `styles.css` from the [latest release](https://github.com/denberek/obsidian-agent-fleet/releases)
41
+ 2. Create folder: `<your-vault>/.obsidian/plugins/agent-fleet/`
47
42
  3. Copy the 3 files into that folder
48
- 4. Restart Obsidian → Enable Agent Fleet
43
+ 4. Restart Obsidian → Settings → Community Plugins → Enable **Agent Fleet**
49
44
 
50
- ### Requirements
45
+ ## First Launch
51
46
 
52
- - **Obsidian** 1.6.0+ (desktop only)
53
- - **[Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code)** — the engine behind all agent execution:
54
- ```bash
55
- npm install -g @anthropic-ai/claude-code
56
- claude # authenticate on first run
57
- ```
58
- - **Claude subscription** (Max or Pro) or **Anthropic API key** — Claude Code works with your existing subscription, no separate API costs. If you're already paying for Claude, you're ready to go.
59
-
60
- ### First Launch
61
-
62
- On first launch, Agent Fleet creates a `_fleet/` folder in your vault:
47
+ On first launch, Agent Fleet creates a `_fleet/` folder in your vault root with:
63
48
 
64
49
  ```
65
50
  _fleet/
66
51
  ├── agents/
67
- │ └── fleet-orchestrator/ ← default agent (manages the fleet)
52
+ │ └── fleet-orchestrator/ ← default agent (knows how to manage the fleet)
68
53
  ├── skills/ ← 18 built-in skills
69
54
  ├── tasks/
70
55
  ├── runs/
71
56
  └── memory/
72
57
  ```
73
58
 
74
- The **Fleet Orchestrator** agent is ready — click Chat to ask it to create new agents, tasks, or skills.
75
-
76
- ### Update
77
-
78
- ```bash
79
- npm update -g obsidian-agent-fleet
80
- ```
81
-
82
- Or via BRAT: settings → check for updates.
59
+ The **Fleet Orchestrator** agent is ready to use — click **Chat** to ask it to create new agents, tasks, or skills.
83
60
 
84
- ---
85
-
86
- ## Features
61
+ ## How It Works
87
62
 
88
63
  ### Agents
89
64
 
90
- Agents are AI assistants with specific personalities, capabilities, and permissions. Each agent is a folder in `_fleet/agents/` containing markdown files:
91
-
92
- ```
93
- agents/my-agent/
94
- ├── agent.md ← Identity: name, description, system prompt
95
- ├── config.md ← Runtime: model, timeout, permissions
96
- ├── SKILLS.md ← Agent-specific skills
97
- └── CONTEXT.md ← Project context
98
- ```
65
+ Each agent is a folder in `_fleet/agents/<name>/` with these files:
99
66
 
100
- **What you can configure:**
101
-
102
- | Setting | Description |
103
- |---------|-------------|
104
- | **Name & Description** | Identity shown in the dashboard |
105
- | **Avatar** | Lucide icon picker (1,400+ icons) or emoji |
106
- | **System Prompt** | Core instructions that define the agent's behavior |
107
- | **Model** | Claude Opus 4.6, Sonnet 4.6, Haiku 4.5, Bedrock models, or custom |
108
- | **Adapter** | Claude Code (more adapters coming soon) |
109
- | **Working Directory** | Where the agent operates (defaults to vault root) |
110
- | **Timeout** | Max execution time in seconds |
111
- | **Permission Mode** | bypassPermissions, dontAsk, acceptEdits, or plan |
112
- | **Allow/Deny Lists** | Fine-grained tool control (e.g., allow `Bash(curl *)`, deny `Bash(rm -rf *)`) |
113
- | **Skills** | Shared skills from the skill library |
114
- | **MCP Servers** | Which MCP servers the agent can access |
115
- | **Memory** | Persistent context across sessions via `[REMEMBER]` tags |
116
-
117
- **Permission Modes:**
118
-
119
- | Mode | Behavior |
120
- |------|----------|
121
- | `bypassPermissions` | Auto-runs everything except deny list |
122
- | `dontAsk` | Only allow-listed commands run |
123
- | `acceptEdits` | File edits auto-approved, bash blocked unless allowed |
124
- | `plan` | Read-only — no writes, no commands |
67
+ | File | Purpose |
68
+ |------|---------|
69
+ | `agent.md` | Identity, description, system prompt, skill assignments |
70
+ | `config.md` | Model, timeout, permission mode, working directory |
71
+ | `CONTEXT.md` | Project-specific context (optional) |
72
+ | `SKILLS.md` | Agent-specific skills not shared with others (optional) |
73
+ | `permissions.json` | Claude Code allow/deny rules (optional) |
125
74
 
75
+ **Example `agent.md`:**
76
+ ```yaml
126
77
  ---
127
-
128
- ### Interactive Chat
129
-
130
- The chat panel is a first-class Obsidian view — dock it in the sidebar, center, or any split.
131
-
132
- **Features:**
133
- - **Agent Switcher** — dropdown to switch between agents instantly. Each agent has its own conversation.
134
- - **Session Persistence** — conversations survive Obsidian restarts via Claude CLI `--resume`
135
- - **Bidirectional Streaming** — send follow-up messages while the agent is working. Steer it mid-task.
136
- - **Document Attachment** — click + to attach the active document. Agent gets the full content; you see a compact pill.
137
- - **Image Paste & Drop** — paste from clipboard or drag images into chat. Saved to vault, passed to Claude.
138
- - **Stop Button** — + button becomes ■ while agent works. Click to abort.
139
- - **Streaming Markdown** — responses render in real-time with syntax highlighting
140
- - **Code Block Copy** — hover any code block for a copy button
141
- - **Tool Activity** — see which tools the agent is using in real-time
142
-
143
- **Keyboard shortcuts:**
144
- - `Ctrl+Enter` / `Cmd+Enter` — send message
145
- - Ribbon icon (💬) or command palette to open chat
146
-
78
+ name: site-monitor
79
+ description: Checks website uptime and alerts on failures
80
+ avatar: globe
81
+ enabled: true
82
+ tags: [monitoring]
83
+ skills:
84
+ - agent-fleet-system
147
85
  ---
148
86
 
149
- ### Task Board
150
-
151
- A kanban view for managing agent tasks with five columns:
87
+ You are a website monitoring agent. Check the specified URL,
88
+ report its HTTP status code, response time, and any errors.
89
+ ```
152
90
 
153
- | Column | Description |
154
- |--------|-------------|
155
- | **Backlog** | Tasks with no schedule, waiting to be run manually |
156
- | **Scheduled** | Tasks with a cron schedule, enabled and waiting |
157
- | **Running** | Currently executing — shows real-time progress bar tied to timeout |
158
- | **Done** | Completed today |
159
- | **Failed** | Failed, timed out, or cancelled today |
91
+ ### Skills
160
92
 
161
- **Task features:**
162
- - **Priority** — low / medium / high / critical (color-coded left border)
163
- - **Real-time Progress** — progress bar shows elapsed time vs timeout, updates every second
164
- - **Stop Button** — red ■ on running cards to abort (shows as "Cancelled", not "Failed")
165
- - **Cron Scheduling** — human-friendly picker (daily, weekdays, weekly, monthly, custom)
166
- - **Catch Up If Missed** — auto-run overdue tasks when Obsidian opens
167
- - **Run Now** — execute any task immediately regardless of schedule
168
- - **Drag & Drop** — move tasks between backlog and scheduled columns
93
+ Reusable instruction sets in `_fleet/skills/<name>/`:
169
94
 
170
- **Creating tasks:**
95
+ | File | Purpose |
96
+ |------|---------|
97
+ | `skill.md` | Core instructions and description |
98
+ | `tools.md` | CLI/API tool documentation (optional) |
99
+ | `references.md` | Background docs, conventions (optional) |
100
+ | `examples.md` | Few-shot examples (optional) |
171
101
 
172
- Full-page form with:
173
- 1. Title + Agent + Priority + Tags
174
- 2. Instructions (what the agent should do)
175
- 3. Optional schedule with frequency picker
176
- 4. "Catch up if missed" toggle for scheduled tasks
102
+ Agents reference skills by name in their `agent.md` frontmatter. Multiple agents can share the same skill.
177
103
 
178
- ---
104
+ ### Tasks
179
105
 
180
- ### MCP Servers
106
+ Scheduled or one-shot tasks in `_fleet/tasks/<name>.md`:
181
107
 
182
- Discover and manage all MCP (Model Context Protocol) servers configured in Claude Code.
108
+ ```yaml
109
+ ---
110
+ task_id: check-website
111
+ agent: site-monitor
112
+ schedule: "0 * * * *" # every hour
113
+ type: recurring
114
+ enabled: true
115
+ ---
183
116
 
184
- **Discovery:**
185
- - **stdio servers** — spawned and probed directly via JSON-RPC (~1-2s)
186
- - **HTTP/SSE servers** — probed with OAuth tokens for full tool schemas
187
- - **Plugin metadata** — descriptions from Claude's plugin directory
117
+ Check https://example.com — report status code and response time.
118
+ ```
188
119
 
189
- **OAuth 2.1 Authentication:**
120
+ **Task types:**
121
+ - `recurring` — runs on a cron schedule
122
+ - `once` — runs at a specific time (`run_at` field)
123
+ - `immediate` — runs once on creation
190
124
 
191
- One-click browser-based auth for MCP servers:
192
- 1. Click "Authenticate" on any server card
193
- 2. Plugin discovers OAuth endpoints automatically
194
- 3. Registers via Dynamic Client Registration
195
- 4. Opens browser for approval (PKCE flow)
196
- 5. Tokens stored in plugin settings, auto-refresh
125
+ ### Chat
197
126
 
198
- **Server Management:**
199
- - Enable/disable toggle per server (writes to Claude's settings)
200
- - Server cards show status, tool count, type, description
201
- - Detail slideover with full tool list, descriptions, input schemas, parameters
202
- - Assign MCP servers to specific agents in the agent editor
127
+ Click **Chat** on any agent to open an interactive conversation panel. Features:
203
128
 
204
- **Progress Indicator:**
205
- Animated loading during discovery with phase-specific feedback (scanning details → tools → done).
129
+ - **Streaming responses** — text appears in real-time as the agent works
130
+ - **Markdown rendering** headers, lists, code blocks, tables render properly
131
+ - **Tool activity indicator** — shows what the agent is doing ("Working… (Read)")
132
+ - **Collapsible tool summary** — "🔧 12 tool calls" after each response
133
+ - **Session persistence** — close and reopen, your conversation is still there
134
+ - **`--resume` sessions** — Claude CLI maintains full tool context between turns
135
+ - **New Chat** button to start fresh
206
136
 
207
- ---
137
+ ### Run History
208
138
 
209
- ### Skills
139
+ Every execution (scheduled or manual) is logged in `_fleet/runs/YYYY-MM-DD/` with:
140
+ - Status (success, failure, timeout, cancelled, pending_approval)
141
+ - Duration, token count, model used
142
+ - Full prompt and output
143
+ - Tools used with commands
210
144
 
211
- Reusable instruction sets that agents share. Each skill is a folder:
145
+ ### Agent Memory
212
146
 
147
+ When `memory: true` in config, agents can persist context using:
213
148
  ```
214
- skills/my-skill/
215
- ├── skill.md ← Core instructions
216
- ├── tools.md ← CLI/API tool documentation
217
- ├── references.md ← Background docs
218
- └── examples.md ← Few-shot examples
149
+ [REMEMBER]Something important to remember[/REMEMBER]
219
150
  ```
220
151
 
221
- **18 Built-in Skills:**
152
+ These entries are appended to `_fleet/memory/<agent-name>.md` and included in future prompts.
153
+
154
+ ## Built-in Skills
222
155
 
223
156
  | Skill | Description |
224
157
  |-------|-------------|
@@ -235,74 +168,21 @@ skills/my-skill/
235
168
  | `pptx` | Create, read, edit PowerPoint (.pptx) files |
236
169
  | `skill-creator` | Create, evaluate, and optimize skills |
237
170
  | `slack-gif-creator` | Animated GIFs optimized for Slack |
238
- | `taste-skill` | Senior UI/UX engineering for frontend design |
239
- | `frontend-slides` | HTML presentation creation |
240
- | And more... | |
241
-
242
- ---
243
-
244
- ### Dashboard
171
+ | `theme-factory` | Apply visual themes to artifacts |
172
+ | `web-artifacts-builder` | Multi-component HTML artifacts with React/Tailwind |
173
+ | `webapp-testing` | Test web apps with Playwright |
174
+ | `xlsx` | Create, read, edit spreadsheet files |
245
175
 
246
- The main overview with:
176
+ ## Dashboard
247
177
 
248
- - **Stat Cards** — active agents, runs today, tokens used, scheduled tasks
249
- - **Run Activity Chart** — 14-day bar chart with green (success), yellow (cancelled), red (failure)
250
- - **Success Rate Donut** — overall success percentage
251
- - **Active Agent Cards** — fixed-height streaming output from running agents with agent→task title
252
- - **Activity Timeline** — recent runs with status, duration, tokens
253
- - **Fleet Status** — agent list with quick-run capability
178
+ The dashboard provides:
254
179
 
255
- **Additional tabs:**
256
- - **Agents** — grid of agent cards with stats, toggle, edit, run
257
- - **Tasks Board** — kanban view (described above)
180
+ - **Overview** — agent status cards with run charts
181
+ - **Agents** — manage agents with enable/disable toggles
182
+ - **Tasks Board** — kanban view of pending, completed, and failed runs
258
183
  - **Run History** — searchable table of all executions
259
- - **Skills Library** — browse, create, and edit skills
260
- - **Approvals** — pending tool use approvals
261
- - **MCP Servers** — server discovery and management
262
-
263
- ---
264
-
265
- ### Agent Memory
266
-
267
- Agents persist context across sessions:
268
-
269
- 1. Agent includes `[REMEMBER]important context[/REMEMBER]` in its output
270
- 2. Extracted and appended to `_fleet/memory/<agent-name>.md`
271
- 3. Injected into the agent's prompt on every future run
272
- 4. The Fleet Orchestrator automatically includes memory instructions when creating new agents
273
-
274
- ---
275
-
276
- ### Run History
277
-
278
- Every execution is logged in `_fleet/runs/YYYY-MM-DD/`:
279
-
280
- ```yaml
281
- ---
282
- run_id: abc123
283
- agent: fleet-orchestrator
284
- task: daily-report
285
- status: success
286
- started: 2026-04-03T09:00:00
287
- completed: 2026-04-03T09:02:30
288
- duration_seconds: 150
289
- tokens_used: 4500
290
- model: claude-opus-4-6
291
- ---
292
-
293
- ## Prompt
294
- ...
295
-
296
- ## Output
297
- ...
298
-
299
- ## Tools Used
300
- ...
301
- ```
302
-
303
- Click any run in the dashboard to see full details in a slideover panel.
304
-
305
- ---
184
+ - **Skills Library** — browse and manage shared skills
185
+ - **Approvals** — review and approve/reject pending tool uses
306
186
 
307
187
  ## Configuration
308
188
 
@@ -312,56 +192,81 @@ Click any run in the dashboard to see full details in a slideover panel.
312
192
  |---------|---------|-------------|
313
193
  | Fleet Folder | `_fleet` | Root folder for all fleet data |
314
194
  | Claude CLI Path | `claude` | Path to Claude Code CLI |
315
- | Default Model | `default` | Default model for new agents |
316
- | AWS Region | `us-east-1` | For AWS Bedrock model support |
317
- | Max Concurrent Runs | `2` | Parallel task execution limit |
318
- | Run Log Retention | `30` days | Auto-cleanup old logs |
319
- | Catch Up Missed Tasks | `true` | Run overdue tasks on startup |
195
+ | Default Model | `default` | Default model for agents |
196
+ | Max Concurrent Runs | `3` | Parallel execution limit |
197
+ | Run Log Retention | `30` days | Auto-cleanup old run logs |
198
+ | Catch Up Missed Tasks | `true` | Run missed tasks on startup |
320
199
  | Notification Level | `all` | `all`, `failures-only`, `none` |
321
200
 
322
- ### File Structure
201
+ ### Agent Permission Modes
323
202
 
324
- All data lives in `_fleet/` as plain markdown:
203
+ | Mode | Behavior |
204
+ |------|----------|
205
+ | `bypassPermissions` | Auto-runs everything except deny list |
206
+ | `dontAsk` | Only allow-listed commands run |
207
+ | `acceptEdits` | File edits auto-approved |
208
+ | `plan` | Read-only, no execution |
209
+
210
+ ## Architecture
325
211
 
326
212
  ```
327
- _fleet/
328
- ├── agents/ Agent folders (agent.md, config.md, etc.)
329
- ├── skills/ Shared skill folders (skill.md, tools.md, etc.)
330
- ├── tasks/ Task files with frontmatter
331
- ├── runs/ Execution logs by date
332
- │ └── YYYY-MM-DD/
333
- ├── memory/ Agent memory files
334
- └── chat-images/ Images pasted into chat
213
+ src/
214
+ ├── main.ts Plugin entry point
215
+ ├── defaults.ts Embedded default agents + skills
216
+ ├── fleetRepository.ts File I/O and vault management
217
+ ├── types.ts TypeScript interfaces
218
+ ├── constants.ts View types and defaults
219
+ ├── settingsTab.ts Plugin settings UI
220
+ ├── services/
221
+ │ ├── chatSession.ts Interactive chat with --resume
222
+ │ ├── executionManager.ts Claude CLI process spawning
223
+ │ ├── fleetRuntime.ts Runtime state and orchestration
224
+ │ └── taskScheduler.ts Cron-based task scheduling
225
+ ├── views/
226
+ │ ├── dashboardView.ts Main dashboard (3700+ lines)
227
+ │ ├── agentsView.ts Sidebar agent list
228
+ │ ├── sidebarView.ts Navigation sidebar
229
+ │ └── inboxView.ts Inbox view
230
+ ├── modals/
231
+ │ ├── iconPickerModal.ts Lucide icon selector
232
+ │ ├── taskModal.ts Task creation
233
+ │ ├── createAgentModal.ts Agent creation wizard
234
+ │ └── confirmDeleteModal.ts Deletion confirmation
235
+ ├── components/
236
+ │ ├── chartRenderer.ts Bar and donut charts
237
+ │ ├── dragDrop.ts Drag and drop utilities
238
+ │ └── scheduleEditor.ts Cron schedule editor
239
+ └── utils/
240
+ ├── icons.ts Icon helper
241
+ └── markdown.ts Frontmatter parser
335
242
  ```
336
243
 
337
- Everything is searchable, version-controllable, and fully yours.
244
+ ## Development
338
245
 
339
- ---
340
-
341
- ## FAQ
342
-
343
- **Q: Do I need an API key?**
344
- Not necessarily. Agent Fleet works with your **Claude Max or Pro subscription** via Claude Code CLI. No separate API key or billing. If you prefer, you can also use an Anthropic API key directly.
246
+ ```bash
247
+ # Clone
248
+ git clone https://github.com/denberek/obsidian-agent-fleet.git
249
+ cd obsidian-agent-fleet
345
250
 
346
- **Q: Does it work without internet?**
347
- No — agents need the Claude API to run. But all your data (agents, tasks, skills, memory) is local markdown.
251
+ # Install dependencies
252
+ npm install
348
253
 
349
- **Q: Can I use different models per agent?**
350
- Yes. Each agent has its own model setting. Supports Anthropic direct (Opus, Sonnet, Haiku) and AWS Bedrock models.
254
+ # Development build (watches for changes)
255
+ npm run dev
351
256
 
352
- **Q: What happens if I delete the plugin?**
353
- Your `_fleet/` folder stays. All agents, tasks, skills, run logs, and memory are plain markdown files in your vault.
257
+ # Production build
258
+ npm run build
354
259
 
355
- **Q: Can multiple agents run at the same time?**
356
- Yes, up to `maxConcurrentRuns` (default 2). Additional tasks queue until a slot opens.
260
+ # Type check
261
+ npx tsc --noEmit
357
262
 
358
- **Q: Does the chat remember previous conversations?**
359
- Yes. Each agent has persistent chat sessions that survive Obsidian restarts via Claude CLI `--resume`.
263
+ # Run tests
264
+ npm test
360
265
 
361
- ---
266
+ # Symlink to vault for development
267
+ ln -s $(pwd) ~/path-to-vault/.obsidian/plugins/agent-fleet
268
+ ```
362
269
 
363
- ## Links
270
+ ## License
364
271
 
365
- - [Releases](https://github.com/denberek/obsidian-agent-fleet/releases)
366
- - [npm package](https://www.npmjs.com/package/obsidian-agent-fleet)
367
- - [Report Issues](https://github.com/denberek/obsidian-agent-fleet/issues)
272
+ MIT
package/bin/cli.js CHANGED
@@ -37,7 +37,6 @@ function getVaults() {
37
37
 
38
38
  function resolveClaudePath() {
39
39
  const { execSync } = require("child_process");
40
- // Try to resolve claude full path via login shell (picks up nvm/fnm/etc)
41
40
  const shells = ["/bin/zsh", "/bin/bash", "/bin/sh"];
42
41
  for (const shell of shells) {
43
42
  if (!fs.existsSync(shell)) continue;
@@ -57,14 +56,12 @@ function writePluginSettings(vaultPath, claudePath) {
57
56
  const dataPath = path.join(vaultPath, ".obsidian", "plugins", PLUGIN_ID, "data.json");
58
57
 
59
58
  let settings = {};
60
- // Preserve existing settings if they exist
61
59
  if (fs.existsSync(dataPath)) {
62
60
  try {
63
61
  settings = JSON.parse(fs.readFileSync(dataPath, "utf8"));
64
62
  } catch { /* start fresh */ }
65
63
  }
66
64
 
67
- // Only set claudeCliPath if we found it and user hasn't manually set one
68
65
  if (claudePath && (!settings.claudeCliPath || settings.claudeCliPath === "claude")) {
69
66
  settings.claudeCliPath = claudePath;
70
67
  }
@@ -75,10 +72,8 @@ function writePluginSettings(vaultPath, claudePath) {
75
72
  function installToVault(vaultPath) {
76
73
  const pluginDir = path.join(vaultPath, ".obsidian", "plugins", PLUGIN_ID);
77
74
 
78
- // Ensure directories exist
79
75
  fs.mkdirSync(pluginDir, { recursive: true });
80
76
 
81
- // Copy plugin files
82
77
  const files = ["main.js", "manifest.json", "styles.css"];
83
78
  for (const file of files) {
84
79
  const src = path.join(PLUGIN_DIR, file);
@@ -100,17 +95,16 @@ function main() {
100
95
  const vaults = getVaults();
101
96
 
102
97
  if (vaults.length === 0) {
103
- if (isAuto) return; // Silent fail for postinstall
98
+ if (isAuto) return;
104
99
  console.error("❌ No Obsidian vaults found.");
105
100
  console.error(" Make sure Obsidian is installed and has at least one vault.");
106
101
  console.error("");
107
102
  console.error(" Manual install:");
108
- console.error(" Copy the files from node_modules/agent-fleet/plugin/");
103
+ console.error(" Copy the files from node_modules/obsidian-agent-fleet/plugin/");
109
104
  console.error(" to <your-vault>/.obsidian/plugins/agent-fleet/");
110
105
  process.exit(1);
111
106
  }
112
107
 
113
- // Resolve Claude CLI full path
114
108
  const claudePath = resolveClaudePath();
115
109
  if (!isAuto) {
116
110
  if (claudePath) {
@@ -120,7 +114,6 @@ function main() {
120
114
  }
121
115
  }
122
116
 
123
- // Install to all vaults
124
117
  let installed = 0;
125
118
  for (const vault of vaults) {
126
119
  try {
package/package.json CHANGED
@@ -1,31 +1,36 @@
1
1
  {
2
2
  "name": "obsidian-agent-fleet",
3
- "version": "0.3.2",
4
- "description": "Agent Fleet for Obsidian \u2014 AI agents, task scheduling, and interactive chat",
5
- "author": "Denis Berekchiyan",
6
- "license": "UNLICENSED",
3
+ "version": "0.4.2",
4
+ "description": "Obsidian plugin for file-backed AI agents, task scheduling, channels (Slack), heartbeat, and interactive chat.",
5
+ "main": "plugin/main.js",
7
6
  "bin": {
8
- "obsidian-agent-fleet": "./bin/cli.js"
7
+ "agent-fleet": "bin/cli.js"
9
8
  },
10
9
  "files": [
11
- "bin/",
12
- "plugin/",
10
+ "bin/cli.js",
11
+ "plugin/main.js",
12
+ "plugin/manifest.json",
13
+ "plugin/styles.css",
13
14
  "README.md"
14
15
  ],
15
- "keywords": [
16
- "obsidian",
17
- "ai",
18
- "agent",
19
- "claude",
20
- "task",
21
- "automation"
22
- ],
23
- "repository": {
24
- "type": "git",
25
- "url": "https://github.com/denberek/obsidian-agent-fleet"
26
- },
27
- "homepage": "https://github.com/denberek/obsidian-agent-fleet",
28
16
  "scripts": {
29
- "postinstall": "node bin/cli.js install --auto 2>/dev/null || true"
17
+ "build": "node esbuild.config.mjs production",
18
+ "dev": "node esbuild.config.mjs",
19
+ "test": "vitest run",
20
+ "typecheck": "tsc --noEmit"
21
+ },
22
+ "devDependencies": {
23
+ "@types/node": "^24.5.2",
24
+ "@types/ws": "^8.18.1",
25
+ "builtin-modules": "^4.0.0",
26
+ "esbuild": "^0.25.9",
27
+ "obsidian": "^1.8.10",
28
+ "tslib": "^2.8.1",
29
+ "typescript": "^5.9.2",
30
+ "vitest": "^3.2.4"
31
+ },
32
+ "dependencies": {
33
+ "croner": "^8.1.2",
34
+ "ws": "^8.20.0"
30
35
  }
31
- }
36
+ }