release: v0.10.0 — Wiki Keeper compounding loop + permission management rebuild

See https://github.com/denberek/obsidian-agent-fleet/releases/tag/v0.10.0
for the full changelog.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Denis Berekchiyan 2026-04-26 20:05:30 -07:00
parent 831ec5e4ae
commit 3933719627
5 changed files with 298 additions and 227 deletions

View file

@ -14,7 +14,7 @@ Agent Fleet is an Obsidian plugin that lets you build, configure, and run AI age
🤖 **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.
📚 **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).
📚 **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).
💬 **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.

View file

@ -52,6 +52,10 @@ Every inbox source and every claim extracted from a watched file ends up cross-l
Filenames are slug-case (`vendor-x.md`, not `Vendor X.md`). Wikilinks (`[[_topics/vendor-x]]`) are how everything connects.
Each topic page also carries a fenced **`## Summary` block** at the top — a 37 bullet synthesis maintained by the `wiki-refresh` skill. As claims accrue, the summary regenerates so query-time reads don't need to scan the full claim history. The block is auto-managed; the rest of the page (claims history, contradictions, your own prose) is preserved as-is.
Dated bullets in `## Claims` carry a **source-type tag**`[doc]`, `[meeting]`, `[email]`, `[note]`, `[web]`, `[synthesis]`, `[other]` — so you can tell at a glance whether a claim came from a vetted contract or a casual meeting note.
### `index.md` and `log.md`
The keeper maintains two files at the scope root:
@ -62,7 +66,17 @@ Both files use fenced `<!-- wiki-keeper:begin --> ... <!-- wiki-keeper:end -->`
### Lint (weekly)
On a schedule you choose (Sundays at 9am by default), the keeper runs a weekly lint pass — finds orphan topic pages, stale events, unresolved contradictions, schema violations, missing cross-links. Deterministic fixes are auto-applied; judgment calls are listed in the log for your review. Never destructive.
On a schedule you choose (Sundays at 9am by default), the keeper runs a weekly lint pass — finds orphan topic pages, stale events, unresolved contradictions, schema violations, missing cross-links, bidirectional cross-link gaps, dedup candidates (similar topic pages with overlapping sources), and stale summaries (auto-chained to `wiki-refresh` for regeneration). Deterministic fixes are auto-applied; judgment calls are listed in the log for your review. Never destructive.
The dashboard's **Wiki Keepers** tab parses the latest lint report and renders Needs review items as actionable cards, so you don't have to scroll through `log.md` to find what wants your attention.
### Q&A compounding
Karpathy's central insight: a wiki should compound from queries, not just from sources. When you ask a Wiki Keeper a substantive question via chat or Slack, it does more than answer — it files the answer back into the wiki as both a synthesis page (`_topics/syntheses/YYYY-MM-DD-<question>.md`) and dated bullets on every cited topic page. Every meaningful Q&A leaves a per-topic trace, so the wiki gets richer the more you use it. (Toggle off via `file_substantive_answers: false` if you'd rather keep Q&A out of the wiki.)
### Failed-source quarantine
If an inbox file fails ingest 3 times in a row (corrupted PDF, missing skill, unparseable encoding), it's moved to `_sources/failed/` with a sidecar `.error.md` instead of being retried forever. The lint pass surfaces the quarantine count weekly so broken sources don't quietly drain your token budget.
---
@ -295,19 +309,21 @@ A whole-vault keeper:
your-vault/
├── _fleet/agents/wiki-keeper/
│ ├── agent.md
│ ├── config.md
│ ├── config.md (permission_mode + approval_required + wiki_keeper config)
│ ├── HEARTBEAT.md
│ ├── CONTEXT.md
│ └── permissions.json
│ ├── CONTEXT.md (the wiki schema document for this scope)
│ └── permissions.json (canonical allow/deny — runtime reads this only)
├── _sources/
│ ├── inbox/
│ └── archive/YYYY/MM/
│ ├── archive/YYYY/MM/
│ └── failed/ (created on demand — sidecar .error.md per file)
├── _topics/
│ ├── <your topic pages>
│ └── summaries/
│ ├── summaries/ (one per ingested inbox source)
│ └── syntheses/ (Q&A compounding output, when filed)
├── index.md
├── log.md
└── .wiki-keeper-state.json (hidden; mtime cache for watched folders)
└── .wiki-keeper-state.json (hidden; mtimes + content hashes + failure counts)
```
A project-scoped keeper:

488
main.js

File diff suppressed because one or more lines are too long

View file

@ -1,7 +1,7 @@
{
"id": "agent-fleet",
"name": "Agent Fleet",
"version": "0.9.2",
"version": "0.10.0",
"minAppVersion": "1.6.0",
"description": "File-backed AI agents, task scheduling, and inbox monitoring inside Obsidian.",
"author": "Denis Berekchiyan",

View file

@ -14,5 +14,6 @@
"0.8.2": "1.6.0",
"0.9.0": "1.6.0",
"0.9.1": "1.6.0",
"0.9.2": "1.6.0"
"0.9.2": "1.6.0",
"0.10.0": "1.6.0"
}