From arcforge
Manages Obsidian vaults: ingests notes/URLs/text, queries knowledge, audits links/orphans/drift, initializes/registers vaults with domain presets like wiki or project-tracker.
npx claudepluginhub gregoryho/arcforge --plugin arcforgehelp | ingest <url|text> [--batch] [--link] [--vault=<name>] | query <question> [--vault=<name>] | audit [link|lint|grow] [--vault=<name>] | init-vault <path> --name <name> [--preset=<minimal|llm-wiki|news|project-tracker>] | register <path> --name <name> [--default] | list-vaults | unregister <name> | set-default <name>This skill uses the workspace's default tool permissions.
A **vault interface**: the skill resolves which Obsidian vault to operate on, reads that vault's paired contract (`AGENTS.md` runtime contract + `SCHEMA.md` domain schema), and dispatches the requested action. Different vaults serve different domains — wiki / news / project tracker / journal / etc. The skill stays domain-agnostic; presets bootstrap new vaults into a chosen domain.
evals/evals.jsonpresets/README.mdpresets/llm-wiki/AGENTS.mdpresets/llm-wiki/SCHEMA.mdpresets/minimal/AGENTS.mdpresets/minimal/SCHEMA.mdpresets/news/AGENTS.mdpresets/news/SCHEMA.mdpresets/project-tracker/AGENTS.mdpresets/project-tracker/SCHEMA.mdreferences/audit-checks.mdreferences/bootstrap-workflow.mdreferences/delegation.mdreferences/domain-contract-orientation.mdreferences/mode-audit.mdreferences/mode-ingest.mdreferences/mode-query.mdreferences/obsidian-cli-quirks.mdreferences/output-formats.mdreferences/page-templates.mdMandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
A vault interface: the skill resolves which Obsidian vault to operate on, reads that vault's paired contract (AGENTS.md runtime contract + SCHEMA.md domain schema), and dispatches the requested action. Different vaults serve different domains — wiki / news / project tracker / journal / etc. The skill stays domain-agnostic; presets bootstrap new vaults into a chosen domain.
The skill owns: vault resolution + registry, init-vault bootstrap workflow, generic ingest/query/audit pipelines, mechanical primitives (sha256 hashing, LINK/LINT/GROW algorithms, search routing). Each vault's AGENTS.md + SCHEMA.md owns: types, thresholds, taxonomy, language policy, citation rules.
Three universal vault actions. Pick from user intent:
| User Intent | Mode | Pipeline |
|---|---|---|
| Create, save, capture, ingest, "file this back" | ingest | Classify → Confirm → Create → Visuals → Index → Propagate → Log |
| Ask, search, "what do I know about", query | query | Orient → Search → Read → Synthesize → (File Back) |
| Audit, link, lint, grow, "check my vault" | audit | LINK → LINT → GROW |
Bare invocation (no mode argument, no clear intent) — do not ask "which mode?" blindly. Run Domain Contract Orientation first, then respond with what this vault is and what's available. See references/output-formats.md for the exact orientation response shape.
Only ask "ingest / query / audit?" when the user's intent words exist but are ambiguous (e.g., "I want to do something with my vault").
If the argument is help, display this summary and stop:
arc-maintaining-obsidian — vault interface for Obsidian-based knowledge bases
REGISTRY-LEVEL (manage the vault registry; vault-agnostic):
help Print this help
list-vaults Show registered vaults
init-vault <path> --name <name> [--preset=<name>]
Bootstrap a new vault from a preset:
minimal | llm-wiki | news | project-tracker
register <path> --name <name> Register existing vault [--default sets default]
unregister <name> Remove from registry (files untouched)
set-default <name> Change default vault
VAULT-LEVEL (operate on a resolved vault; respect --vault=<name>):
ingest <url|text> [--batch] [--link] Create notes from sources
query <question> Search & synthesize from vault
audit [link|lint|grow] Vault health (LINK + LINT + GROW + vault-declared)
GLOBAL FLAG (any vault-level mode):
--vault=<name> Override vault auto-resolution
BARE INVOKE (no mode):
Run Domain Contract Orientation, then respond with what this vault is
(name, scope, declared types, last activity) and ask what to do.
All references/ and presets/ paths in this file are skill-relative. The Skill harness injects the absolute base directory at every invocation (look for Base directory for this skill: <abs-path> in your context). Construct absolute paths by prepending that base. The skill never relies on the user's CWD.
Every vault-level mode runs Domain Contract Orientation first, then loads the mode-specific mechanism reference. The gate is the unified jump table — references load on demand, not eagerly.
| Mode | Order |
|---|---|
| init-vault | Exception: read references/bootstrap-workflow.md first because no vault contract exists yet; that workflow authors the contract and registers via ${ARCFORGE_ROOT}/scripts/cli.js obsidian register. |
| Ingest | Resolve vault → read references/domain-contract-orientation.md → load references/page-templates.md for Raw Source / sha256 / extraction mechanisms if AGENTS.md adopts them → at the Visuals step, load references/visuals-decision-tree.md. |
| Query | Resolve vault → orientation → references/search-strategies.md for route selection and output adaptation. |
| Audit | Resolve vault → orientation → references/audit-checks.md for LINK / LINT / GROW mechanics; apply vault-declared domain policy from SCHEMA.md. |
| Any mode | First obsidian-cli call → load references/obsidian-cli-quirks.md once. End of mode → references/output-formats.md for completion / blocked templates. |
The references/ files describe mechanism; vault AGENTS.md + SCHEMA.md describe domain. The vault contract wins where they overlap.
The skill supports multiple registered vaults. Resolution cascades:
explicit --vault → active Obsidian → session cache → registry default → ask the user. Once resolved, the choice is sticky for the session. Read references/vault-resolution.md for the full cascade rules + first-run state + Obsidian-not-running fallback.
Before any vault-level mode, read <vault>/AGENTS.md (runtime contract) and <vault>/SCHEMA.md (domain schema). Both are sticky for the session — re-read only on --reload-contract or mtime change. index.md and log.md (last 5 lines for orientation, last 30 for log audits) load on demand per mode. Missing AGENTS.md or SCHEMA.md blocks mutating modes (ingest / audit) with an explicit suggestion to run init-vault or author the contract manually. Read references/domain-contract-orientation.md for read-order details, sticky-session rules, and the missing-file matrix.
The vault registry lives at ~/.arcforge/obsidian-vaults.json. The skill manages this file end-to-end through ${ARCFORGE_ROOT}/scripts/cli.js obsidian <subcommand> — never hand-edit, never construct JSON manually. Subcommands: register, unregister, set-default, list-vaults. The CLI applies first-becomes-default, atomic write, and file locking. Schema, behavior table, and rationale in references/registry-maintenance.md.
When the user runs init-vault <path> --name <name> (with or without --preset=<name>), the skill drives an 11-step conversation: validate → pick preset → ask minimal questions → author AGENTS.md + SCHEMA.md from the preset (do not copy verbatim) → seed index/log → register via the CLI → advertise commands.
Read references/bootstrap-workflow.md before running any step. That file owns the full workflow including a worked example showing how "author from preset" plays out. Presets are one-shot authoring guidance, not stamping templates.
Available presets: minimal, llm-wiki, news, project-tracker. Each ships its paired starter under presets/<name>/AGENTS.md + presets/<name>/SCHEMA.md.
Generic pattern (vault AGENTS.md / SCHEMA.md may extend or replace):
Raw/ and format-specific folders) — Immutable originals when the vault adopts the Raw Source pattern. The LLM reads but never modifies these.When a Raw Source is ingested, the original stays where it is; a new typed note is created with source_url pointing back. Knowledge flows Raw → Wiki as text. See references/page-templates.md for the Raw Source frontmatter schema, sha256 hashing rule, extraction methods, and Paper URL chain.
After every operation, append to <vault>/log.md:
## [YYYY-MM-DD] <operation> | <detail>
Operations: create | [type] | [filename], query | [question summary], audit | [scope], drift | [filename], init-vault | preset=<preset>. log.md is the contractual operation log; obsidian-cli daily:append is an optional best-effort dual-write — see references/obsidian-cli-quirks.md for plugin-detection rules and SIGPIPE caveat.
Generic tool-routing table (filesystem baseline, optional QMD acceleration, optional Obsidian runtime, delegated diagram tools). Read references/delegation.md for the full routing table + first-search route selection + filesystem-as-contractual-baseline rationale.
Classify → Confirm → Create → Visuals → Index → Propagate → Log
Per-step operational detail (Classify rules, Raw Source two-write protocol, Visuals decision tree, Propagate scope guard + contradiction detection, Special Modes — Query-as-Ingest / --batch / --link) is in references/mode-ingest.md. Read it before running any ingest. Pull in references/page-templates.md if the vault's AGENTS.md declares raw_source: adopted.
Key invariants:
sha256). Skipping the raw save loses re-extraction ability.Orient → Search → Read → Synthesize → (File Back)
Per-step detail in references/mode-query.md. Search route selection + output format adaptation in references/search-strategies.md.
Key invariants:
[[Like-This]]. Provenance follows sources: arrays.LINK → LINT → GROW
Per-step detail in references/mode-audit.md. Mechanical primitives (schema compliance, orphan / untyped / tag checks, Source Drift via sha256, EVOLVE patterns, GROW Internal/External gap detection, vault-declared LINT extensibility) in references/audit-checks.md.
Key invariants:
_audits/audit-YYYY-MM-DD-<scope>.md.Completion and blocked-message templates live in references/output-formats.md. Print verbatim with substitutions filled in so users scan many sessions quickly.