Summary
Extract vault-agent into its own repository (laurigates/vault-agent), the same way git-repo-agent was extracted in #1017. vault-agent is a standalone Claude Agent SDK / Typer CLI that lives in this monorepo but is not a Claude Code plugin (absent from marketplace.json and release-please). Extracting it enables clean uvx vault-agent / uv tool install vault-agent, independent versioning, and PyPI publishing.
This is the direct sibling of #1017 — reuse the proven template there (laurigates/git-repo-agent, PR #1, and this repo's sync workflow PR #1972).
Motivation
Same rationale as #1017:
uvx vault-agent / uv tool install vault-agent without a claude-plugins checkout.
- Clearer separation of concerns and independent release cadence for a self-contained CLI.
- Consistency with
git-repo-agent, now extracted.
Current coupling
vault-agent/src/vault_agent/prompts/compiler.py reads Obsidian-plugin skills from the monorepo at runtime:
_REPO_ROOT = _MODULE_DIR.parent.parent.parent # vault-agent/
_PLUGINS_ROOT = _REPO_ROOT.parent # claude-plugins/
# sources: obsidian-plugin/skills/vault-{frontmatter,tags,templates,wikilinks,orphans,stubs,mocs}/SKILL.md
This is ADR-0005 ("skill-source-obsidian-plugin") — analogous to git-repo-agent's compiler reading its sibling plugins.
Key difference from #1017: git-repo-agent had already solved the standalone-install problem (ADR-009: a compiler fallback that ships pre-compiled generated/ artifacts). vault-agent has not — its compiler.py has no standalone mode and no committed src/vault_agent/prompts/generated/. So the extraction has an extra Phase 0 prerequisite that git-repo-agent did not.
Proposed approach
Mirror #1017's phased, verify-before-remove cutover (per this repo's tool-migration-cutover rule), with the added Phase 0:
Phase 0 — standalone-install prompt fallback (prerequisite; the ADR-009 analog)
Phase 1 — stand up the standalone repo
Phase 2 — cross-repo sync
Phase 3 — remove from the monorepo (after Phases 1–2 verified)
Owner actions (manual, mirror #1017)
References
Summary
Extract
vault-agentinto its own repository (laurigates/vault-agent), the same waygit-repo-agentwas extracted in #1017.vault-agentis a standalone Claude Agent SDK / Typer CLI that lives in this monorepo but is not a Claude Code plugin (absent frommarketplace.jsonand release-please). Extracting it enables cleanuvx vault-agent/uv tool install vault-agent, independent versioning, and PyPI publishing.This is the direct sibling of #1017 — reuse the proven template there (
laurigates/git-repo-agent, PR #1, and this repo's sync workflow PR #1972).Motivation
Same rationale as #1017:
uvx vault-agent/uv tool install vault-agentwithout aclaude-pluginscheckout.git-repo-agent, now extracted.Current coupling
vault-agent/src/vault_agent/prompts/compiler.pyreads Obsidian-plugin skills from the monorepo at runtime:This is ADR-0005 ("skill-source-obsidian-plugin") — analogous to
git-repo-agent's compiler reading its sibling plugins.Key difference from #1017:
git-repo-agenthad already solved the standalone-install problem (ADR-009: a compiler fallback that ships pre-compiledgenerated/artifacts).vault-agenthas not — itscompiler.pyhas no standalone mode and no committedsrc/vault_agent/prompts/generated/. So the extraction has an extra Phase 0 prerequisite thatgit-repo-agentdid not.Proposed approach
Mirror #1017's phased, verify-before-remove cutover (per this repo's
tool-migration-cutoverrule), with the added Phase 0:Phase 0 — standalone-install prompt fallback (prerequisite; the ADR-009 analog)
compiler.py: monorepo (dev) mode live-compiles from siblingobsidian-plugin/skills/*/SKILL.md; standalone (installed) mode reads pre-compiled artifacts fromsrc/vault_agent/prompts/generated/when siblings are absent (per-skill selection).generated/artifacts; add ascripts/compile_prompts.py --checkdrift check.tests/test_compiler_standalone.pysimulating standalone mode (empty_PLUGINS_ROOT).Phase 1 — stand up the standalone repo
git subtree split --prefix=vault-agent.pyproject.toml: MITlicense, project URLs, PyPI classifiers/keywords (keeprequires-python >= 3.13), widen theuv_buildconstraint.ci.yml): ruff +pytest+ a build & standalone-CLI smoke. Configure a git identity +init.defaultBranch mainif any test shells out to real git (git-repo-agent's tests did; check vault-agent'stest_worktree.py).publish.yml: PyPI Trusted Publishing (OIDC) on a GitHub Release.uv tool install -e ./vault-agent.uv build+uv run --isolated --no-project --with dist/*.whl vault-agent --helpworks with noclaude-pluginsparent.Phase 2 — cross-repo sync
sync-vault-agent-prompts.ymlworkflow in this repo (mirror ci: cross-repo prompt-sync workflow for git-repo-agent #1972): regenerategenerated/onobsidian-plugin/skills/*/SKILL.mdchanges → open a PR onvault-agent. Needs aVAULT_AGENT_SYNC_TOKENsecret.Phase 3 — remove from the monorepo (after Phases 1–2 verified)
vault-agent/with a pointer README..claude/rules/agent-cli-worktree-safety.md(vault-agent/**glob + thetest_worktree.pymirror reference),.claude/rules/typer-cli-completion.md(vault-agent/**glob), and theversion-pinning.mdsibling-repo follow-up note.Owner actions (manual, mirror #1017)
vault-agent(workflowpublish.yml, environmentpypi).VAULT_AGENT_SYNC_TOKENsecret (contents + PR write onvault-agent).References
git-repo-agentextraction this mirrors.laurigates/git-repo-agent— the proven layout (ADR-009 fallback,publish.yml, CI git-identity +init.defaultBranchfix, standalone-verify).