obsidian-agent-fleet 0.3.1 → 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 +174 -269
- package/bin/cli.js +2 -9
- package/package.json +27 -22
- package/plugin/main.js +11005 -4507
- package/plugin/manifest.json +1 -1
- package/plugin/styles.css +97 -1
package/README.md
CHANGED
|
@@ -1,224 +1,157 @@
|
|
|
1
1
|
# Agent Fleet for Obsidian
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**File-backed AI agents, task scheduling, and interactive chat — all inside Obsidian.**
|
|
4
4
|
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
|
|
19
|
+
## Requirements
|
|
22
20
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
##
|
|
29
|
+
## Installation
|
|
30
30
|
|
|
31
|
-
###
|
|
31
|
+
### Via BRAT (recommended — auto-updates)
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
45
|
-
|
|
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
|
-
|
|
45
|
+
## First Launch
|
|
51
46
|
|
|
52
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
|
103
|
-
|
|
104
|
-
|
|
|
105
|
-
|
|
|
106
|
-
|
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
-
|
|
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
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
106
|
+
Scheduled or one-shot tasks in `_fleet/tasks/<name>.md`:
|
|
181
107
|
|
|
182
|
-
|
|
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
|
-
|
|
185
|
-
|
|
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
|
-
**
|
|
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
|
-
|
|
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
|
-
**
|
|
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
|
-
**
|
|
205
|
-
|
|
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
|
-
|
|
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
|
-
|
|
145
|
+
### Agent Memory
|
|
212
146
|
|
|
147
|
+
When `memory: true` in config, agents can persist context using:
|
|
213
148
|
```
|
|
214
|
-
|
|
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
|
-
|
|
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
|
-
| `
|
|
239
|
-
| `
|
|
240
|
-
|
|
|
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
|
-
|
|
176
|
+
## Dashboard
|
|
247
177
|
|
|
248
|
-
|
|
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
|
-
**
|
|
256
|
-
- **Agents** —
|
|
257
|
-
- **Tasks Board** — kanban view
|
|
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
|
|
260
|
-
- **Approvals** — pending tool
|
|
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
|
|
316
|
-
|
|
|
317
|
-
|
|
|
318
|
-
|
|
|
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
|
-
###
|
|
201
|
+
### Agent Permission Modes
|
|
323
202
|
|
|
324
|
-
|
|
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
|
-
|
|
328
|
-
├──
|
|
329
|
-
├──
|
|
330
|
-
├──
|
|
331
|
-
├──
|
|
332
|
-
|
|
333
|
-
├──
|
|
334
|
-
|
|
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
|
-
|
|
244
|
+
## Development
|
|
338
245
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
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
|
-
|
|
347
|
-
|
|
251
|
+
# Install dependencies
|
|
252
|
+
npm install
|
|
348
253
|
|
|
349
|
-
|
|
350
|
-
|
|
254
|
+
# Development build (watches for changes)
|
|
255
|
+
npm run dev
|
|
351
256
|
|
|
352
|
-
|
|
353
|
-
|
|
257
|
+
# Production build
|
|
258
|
+
npm run build
|
|
354
259
|
|
|
355
|
-
|
|
356
|
-
|
|
260
|
+
# Type check
|
|
261
|
+
npx tsc --noEmit
|
|
357
262
|
|
|
358
|
-
|
|
359
|
-
|
|
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
|
-
##
|
|
270
|
+
## License
|
|
364
271
|
|
|
365
|
-
|
|
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;
|
|
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.
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
+
}
|