vaultspec-core CLI referenceLink to vaultspec-core CLI reference
Complete command-line interface (CLI) reference for vaultspec-core. See the
framework manual for workflows and concepts.
ContentsLink to Contents
Entry points - invoking the CLI and the MCP server.
Global options - flags accepted across commands.
Outcome vocabulary - the words and glyphs that report results.
JSON output envelope - the shape of
--jsonoutput.Surface provenance - what is on this branch and not yet in a release.
Command index - every command, grouped, with a one-line summary.
Settings resolution - the one rung order every setting resolves through.
Workspace commands - install, uninstall, and sync.
Vault commands - create, query, and edit vault documents and plans.
Spec commands - manage rules, skills, agents, hooks, triggers, MCPs, and the system prompt.
Migration commands - inspect and run schema migrations.
Config commands - read and write local project settings.
Environment variables - the
VAULTSPEC_settings.
Entry pointsLink to Entry points
vaultspec-core- Workspace management, vault operations, resource sync.vaultspec-core-mcp- Console script that launches the stdio Model Context Protocol (MCP) server.uv run --no-sync python -P -m vaultspec_core.mcp_server.app- Module invocation of the MCP server (avoids binary locking on Windows;--no-synckeeps a client connect from mutating the environment;-Pkeeps the working directory offsys.path). See MCP reference.
Global optionsLink to Global options
These options apply at the top level unless noted. --debug and --version are
top-level only. --target is accepted by target-aware workspace commands,
vaultspec-core vault ..., vaultspec-core spec ..., and
vaultspec-core migrations .... --json is command-specific and appears only on
commands that support JavaScript Object Notation (JSON) output.
--target DIR(-t, default discovered) - Target workspace directory. OverridesVAULTSPEC_TARGET_DIR. With neither set, the root is discovered from the working directory: the.gt/container root, then the worktree root, then the repository root, and the working directory itself only when none of those is found.--debug(-d, default off) - Enable DEBUG-level logging (top-level flag).--verbose(-v, default off) - Enable INFO-level logging (top-level flag).--debugoutranks it when both are given.--version(-V) - Print version and exit (top-level flag).
Outcome vocabularyLink to Outcome vocabulary
Commands that change files report what happened to each one with the same set of words,
so results read the same no matter which command ran. The sync-style commands -
vaultspec-core install, vaultspec-core sync, the
vaultspec-core spec <resource> sync commands, and vaultspec-core migrations run -
print one line per file, each marked with its glyph, then a count of each outcome. With
--json, those per-file outcomes appear under data.items, and the envelope’s
top-level status is the outcome for the whole run.
created(+) - A new file or directory was written.updated(~) - An existing file was changed.unchanged(=) - The file already matched its source, so nothing was written.removed(-) - An existing file was deleted.restored(*) - A file was reset to its original version.skipped(s) - A file was left untouched because a rule or precondition excluded it; the reason is always reported.failed(x) - A write was attempted and failed.
A --json status of mixed means one run produced more than one outcome. unchanged
is a successful no-op, not a failure. Only failed stops a pipeline.
JSON output envelopeLink to JSON output envelope
Every command that accepts --json emits one uniform envelope, so a consumer parses one
shape regardless of which command produced it:
Captured output
{
"schema": "vaultspec.<command>.v1",
"status": "<outcome word>",
"data": { },
"hints": { }
}
schema(required) - Namespaced identifier of the command plus a monotonic version integer.status(required) - The canonical outcome word for the whole invocation (one of the seven words above, ormixed).data(required) - The command-specific payload. Read-only commands report their content here under stable keys.hints(optional) - Structured next-step guidance. Absent when no hint applies; its presence never changesstatus.
The schema value follows the convention vaultspec.<dotted-command-path>.v1 - for
example vaultspec.sync.v1, vaultspec.vault.stats.v1, or
vaultspec.spec.rules.add.v1. Every schema is at version v1 except
vaultspec.vault.graph.v2, documented with vaultspec-core vault graph below. Adding
new keys under data is additive and does not bump the version; renaming or removing a
key bumps the integer (v2, …). Schema bumps are recorded in the release notes.
Failures under --json emit the same envelope with the fixed schema
vaultspec.error.v1 and status set to failed; data.message carries the
human-readable reason and data.hint carries remediation guidance when one is
available. A status of failed always pairs with a non-zero exit code.
Under --json, stdout contains only the envelope; diagnostics go to stderr. Output is
compact by default. For indentation, see
environment variables. Use the top-level status field to
check success.
Surface provenanceLink to Surface provenance
The block below compares this reference with the latest published release at the time it
was generated: what it lists is documented here and absent from that release. It is
computed from the surface recorded from that release’s published distribution, so it
covers every affected command rather than the ones somebody remembered. The record is
written after publication, from the release’s own distribution, through
vaultspec-core spec reference snapshot --record, and never by hand. Run
vaultspec-core spec reference generate to refresh the block; do not hand-edit between
the markers.
Measured against 0.3.5, the latest published release when this reference was
generated: every command, flag, and tool documented here is in it.
Command indexLink to Command index
Every vaultspec-core command with its arguments. Run any command with --help for its
full options.
Top-level commandsLink to Command index, Top-level commands
vaultspec-core install- Install Vaultspec resources for the selected providers.vaultspec-core uninstall- Remove the vaultspec framework from the target directory.vaultspec-core sync- Sync rules, skills, agents, configs, system prompts, and MCPs.vaultspec-core commit-gate- Check the files a commit stages, in one read-only process.vaultspec-core doctor- Diagnose overall workspace and vault health.vaultspec-core status- Orient in a vaultspec vault: rollup, or a grounding trace for a target.
VaultLink to Command index, Vault
vaultspec-core vault set-body- Replace only the body prose of a document, keeping its frontmatter.vaultspec-core vault set-frontmatter- Edit selected frontmatter fields, keeping the body byte-for-byte.vaultspec-core vault edit- Set body and/or frontmatter in one atomic write (single round-trip).vaultspec-core vault rename- Rename a document’s file and re-point incoming related references.vaultspec-core vault search- Ask the vault a question and read the passages that answer it.vaultspec-core vault add- Create a new .vault/ document from a template.vaultspec-core vault stats- Show vault statistics and metrics.vaultspec-core vault list- List vault documents, optionally filtered by type.vaultspec-core vault graph- Render the vault document graph.vaultspec-core vault repair- Run the operator repair pipeline for vault content.
FeatureLink to Vault, Feature
vaultspec-core vault feature list- List all feature tags in the vault.vaultspec-core vault feature index- Generate or update feature index documents.vaultspec-core vault feature archive- Archive all documents for a feature tag.vaultspec-core vault feature unarchive- Restore all archived documents for a feature tag.vaultspec-core vault feature rename- Atomically rename a feature tag across every vault surface.
CheckLink to Vault, Check
vaultspec-core vault check all- Run all vault health checks.vaultspec-core vault check body-links- Find wiki-links and markdown path links in document body text.vaultspec-core vault check exec-mapping- Pair ledger rows with plan Steps and flag closed Steps without evidence.vaultspec-core vault check body-sections- Check document bodies carry the sections their template mandates.vaultspec-core vault check annotations- Find generated template annotations in vault documents.vaultspec-core vault check markdown- Check and optionally fix markdown hygiene (whitespace, blank runs, newline).vaultspec-core vault check placeholders- Find unreplaced {…} template placeholders in document body prose.vaultspec-core vault check dangling- Find wiki-links in related: frontmatter that resolve to no document.vaultspec-core vault check orphans- Find documents with no incoming wiki-links.vaultspec-core vault check frontmatter- Validate document frontmatter against vault schema.vaultspec-core vault check modified-stamp- Validate and reconcile the modified recency stamp on every document.vaultspec-core vault check links- Check wiki-links follow Obsidian convention (no .md extension).vaultspec-core vault check features- Check feature tag completeness - missing doc types.vaultspec-core vault check references- Check for missing cross-references within features.vaultspec-core vault check schema- Check ADR evidence links and active plans’ linked decision status.vaultspec-core vault check adr-status- Validate ADR status against the canonical taxonomy.vaultspec-core vault check code-boundary- Scan source files for references to the project’s own vault records.vaultspec-core vault check structure- Check vault directory structure and filename conventions.vaultspec-core vault check rename-integrity- Check name/filename integrity for rules, skills, and agents.vaultspec-core vault check encoding- Surface .vault/ documents that are not valid UTF-8 (detection only).vaultspec-core vault check feature-rename-integrity- Surface exec folders whose feature disagrees with their records’ tag.vaultspec-core vault check foreign- Warn about files the framework did not place inside managed roots.
SanitizeLink to Vault, Sanitize
vaultspec-core vault sanitize annotations- Strip generated template annotations from vault documents.
RuleLink to Vault, Rule
vaultspec-core vault rule promote- Promote an audit finding to a team-shared rule.
AdrLink to Vault, Adr
vaultspec-core vault adr crossref- Find the ADRs a decision should cross-reference, within fixed bounds.vaultspec-core vault adr supersede- Supersede an old ADR with a new ADR.
PlanLink to Vault, Plan
vaultspec-core vault plan status- Report plan health, structure, and completion.vaultspec-core vault plan check- Validate convention compliance; with--fix, apply autofixes.vaultspec-core vault plan query- Filter Step rows by container scope and open/closed predicate.vaultspec-core vault plan step toggle- Flip the Step’s checkbox state.vaultspec-core vault plan step check- Mark the Step closed (idempotent).vaultspec-core vault plan step uncheck- Mark the Step open (idempotent).vaultspec-core vault plan step add- Append a new Step at the next-available canonical id.vaultspec-core vault plan step insert- Insert a Step at a named position relative to an existing anchor.vaultspec-core vault plan step edit- Edit the Step’s action and / or scope without changing its identifier.vaultspec-core vault plan step move- Re-parent and / or re-position a Step per the move-flag precedence rule.vaultspec-core vault plan step remove- Remove a Step; its identifier is retired and never reused.vaultspec-core vault plan phase add- Append a new Phase at the next-available canonical id.vaultspec-core vault plan phase insert- Insert a Phase at a named position; parent Wave inferred from anchor.vaultspec-core vault plan phase edit- Edit the Phase’s title and / or intent paragraph in place.vaultspec-core vault plan phase move- Re-parent and / or re-position a Phase.vaultspec-core vault plan phase renumber- Reassign a Phase’s canonical id; descendant Step display paths recompute.vaultspec-core vault plan phase remove- Remove a Phase; descendant Step ids cascade-retire.vaultspec-core vault plan wave add- Append a new Wave at the next-available canonical id (L3+ only).vaultspec-core vault plan wave insert- Insert a Wave at a named position relative to an existing anchor.vaultspec-core vault plan wave edit- Edit the Wave’s title and / or intent paragraph in place.vaultspec-core vault plan wave move- Re-position a Wave in document order.vaultspec-core vault plan wave remove- Remove a Wave; descendant Phase and Step ids cascade-retire.vaultspec-core vault plan epic intent show- Print the Epic intent paragraph (L4 plans only).vaultspec-core vault plan epic intent edit- Replace the Epic intent paragraph (L4 plans only).vaultspec-core vault plan tier show- Print the plan’s declared tier.vaultspec-core vault plan tier promote- Promote the plan tier transitively (L1 -> … -> L4).vaultspec-core vault plan tier demote- Demote the plan tier; refuses multi-child collapse without--force.vaultspec-core vault plan trailer emit- Print a well-formed commit-linkage trailer line.vaultspec-core vault plan trailer validate- Validate the commit-linkage trailers in a commit-message file.
LinkLink to Vault, Link
vaultspec-core vault link list- List related: edges in the vault document graph.vaultspec-core vault link add- Add a related: edge from src to dst.vaultspec-core vault link remove- Remove a related: edge from src to dst.
ExecLink to Vault, Exec
vaultspec-core vault exec relink- Relink one execution record to a live Step in its existing parent plan.vaultspec-core vault exec retire- Archive one record only when its current Step is retired by its parent plan.vaultspec-core vault exec detach- Remove a Step claim only when it resolves to neither a live nor retired Step.vaultspec-core vault exec log- Append a Step’s rows to its plan’s ledger.vaultspec-core vault exec fold- Fold a feature’s per-Step execution records into its plan’s ledger.
ArchiveLink to Vault, Archive
vaultspec-core vault archive documents- Archive exactly the documents named in a UTF-8 manifest.vaultspec-core vault archive restore- Restore exactly the archived documents named in a UTF-8 manifest.
SpecLink to Command index, Spec
vaultspec-core spec doctor- Diagnose workspace health and report issues.
RulesLink to Spec, Rules
vaultspec-core spec rules list- List all available rules.vaultspec-core spec rules add- Add a new custom rule source under .vaultspec/.vaultspec-core spec rules show- Display a rule’s content.vaultspec-core spec rules edit- Open a rule in the configured editor.vaultspec-core spec rules remove- Delete a rule.vaultspec-core spec rules rename- Rename an existing rule atomically.vaultspec-core spec rules sync- Sync only rule files; use vaultspec-core sync for complete refresh.vaultspec-core spec rules restore- Restore a rule to its snapshotted original.vaultspec-core spec rules status- Report rules sync status against provider destinations.
SkillsLink to Spec, Skills
vaultspec-core spec skills list- List all available skills.vaultspec-core spec skills add- Add a new skill.vaultspec-core spec skills show- Display a skill’s content.vaultspec-core spec skills edit- Open a skill in the configured editor.vaultspec-core spec skills remove- Delete a skill.vaultspec-core spec skills rename- Rename an existing skill atomically.vaultspec-core spec skills sync- Sync only skill files; use vaultspec-core sync for complete refresh.vaultspec-core spec skills restore- Restore a skill to its snapshotted original.vaultspec-core spec skills status- Report skills sync status against provider destinations.
AgentsLink to Spec, Agents
vaultspec-core spec agents list- List all available agents.vaultspec-core spec agents add- Add a new agent definition.vaultspec-core spec agents show- Display an agent’s content.vaultspec-core spec agents edit- Open an agent in the configured editor.vaultspec-core spec agents remove- Delete an agent definition.vaultspec-core spec agents rename- Rename an existing agent definition atomically.vaultspec-core spec agents sync- Sync only agent files; use vaultspec-core sync for complete refresh.vaultspec-core spec agents restore- Restore an agent to its snapshotted original.vaultspec-core spec agents status- Report agents sync status against provider destinations.
SystemLink to Spec, System
vaultspec-core spec system show- Display system prompt parts and targets.vaultspec-core spec system sync- Sync only system prompts; use vaultspec-core sync for complete refresh.
HooksLink to Spec, Hooks
vaultspec-core spec hooks list- List this workspace’s hooks and the providers they render into.vaultspec-core spec hooks show- Show one hook’s source file.vaultspec-core spec hooks status- Report parse errors and events no installed provider can run.vaultspec-core spec hooks sync- Render this workspace’s hooks into each provider’s native config.vaultspec-core spec hooks trust- Approve this workspace’s hooks to be rendered into your agents’ configs.vaultspec-core spec hooks add- Deprecated - use ‘spec triggers add’; this alias goes next release.vaultspec-core spec hooks run- Deprecated - use ‘spec triggers run’; this alias goes next release.
TriggersLink to Spec, Triggers
vaultspec-core spec triggers list- List this workspace’s lifecycle triggers.vaultspec-core spec triggers add- Add a new lifecycle trigger under .vaultspec/triggers/.vaultspec-core spec triggers show- Display a trigger’s source file.vaultspec-core spec triggers edit- Open a trigger in the configured editor.vaultspec-core spec triggers rename- Rename an existing trigger atomically.vaultspec-core spec triggers remove- Delete a trigger.vaultspec-core spec triggers status- Report trigger parse errors and unsupported events.vaultspec-core spec triggers run- Fire this workspace’s triggers for one lifecycle event.vaultspec-core spec triggers trust- Approve this workspace’s triggers to run their shell commands as you.
PrecommitLink to Spec, Precommit
vaultspec-core spec precommit disable- Decline vaultspec-managed .pre-commit-config.yaml scaffolding.vaultspec-core spec precommit enable- Restore vaultspec-managed .pre-commit-config.yaml scaffolding.vaultspec-core spec precommit migrate- Transplant the canonical vaultspec hooks into prek.toml.
GitignoreLink to Spec, Gitignore
vaultspec-core spec gitignore disable- Decline the vaultspec-managed .gitignore block for the whole project.vaultspec-core spec gitignore enable- Restore the vaultspec-managed .gitignore block for the whole project.
GitattributesLink to Spec, Gitattributes
vaultspec-core spec gitattributes disable- Decline the vaultspec-managed .gitattributes block for the whole project.vaultspec-core spec gitattributes enable- Restore the vaultspec-managed .gitattributes block for the whole project.
McpsLink to Spec, Mcps
vaultspec-core spec mcps list- List canonical MCP server definitions.vaultspec-core spec mcps status- Inspect provider-native MCP enrollment status.vaultspec-core spec mcps add- Add or replace a canonical MCP server definition.vaultspec-core spec mcps remove- Remove a canonical MCP server definition.vaultspec-core spec mcps sync- Reconcile canonical definitions into provider-native enrollment.vaultspec-core spec mcps trust- Approve exact MCP commands for enrollment after reviewing them at a terminal.vaultspec-core spec mcps uninstall- Remove Vaultspec-owned provider-native MCP enrollment.
ReferenceLink to Spec, Reference
vaultspec-core spec reference generate- Regenerate the generator-owned regions of the bundled CLI reference.vaultspec-core spec reference snapshot- Record or report the published command and MCP tool surface.
MigrationsLink to Command index, Migrations
vaultspec-core migrations status- Show registered migrations and which entries are pending.vaultspec-core migrations run- Run pending schema migrations and bump the manifest version.
ConfigLink to Command index, Config
vaultspec-core config get- Read a local configuration value.vaultspec-core config set- Write a local configuration value.vaultspec-core config unset- Clear a local configuration entry.vaultspec-core config list- Enumerate all known configuration entries and current values.
ProjectLink to Command index, Project
vaultspec-core project context- Read local work and optional GitHub state; propose a bounded attention order.
ReviewLink to Command index, Review
vaultspec-core review context- Read a diff and explicit source locators; optionally rank supporting passages.
Workspace commandsLink to Workspace commands
installLink to Workspace commands, install
Usage synopsis
vaultspec-core install [OPTIONS] [PROVIDER]
Deploy the vaultspec framework into the target directory.
ArgumentsLink to install, Arguments
PROVIDER(defaultall) -all,core,claude,gemini,antigravity,codex.
OptionsLink to install, Options
--upgrade(default off) - Refresh everything install owns, idempotently: re-scaffolds any missing directory, runs pending migrations, re-infers the provisioning mode for a legacy workspace that declares none, syncs, and migrates the MCP launch shape.--dry-run(default off) - Preview without writing.--force(default off) - Overwrite existing installation.--skip(default[]) - Skip specific sync passes (repeatable).--mode(default auto) - Select generated hook and MCP launchers:toolusesuvx;dependencyanddevuseuv run --no-sync. Selection order: explicit--mode, saved mode in.vaultspec/workspace.json, dependency detection inpyproject.toml, thentool. This option doesn’t change package dependency declarations.--env NAME- Import a supported variable from the process environment. Repeatable.--env NAME=VALUEsupplies a non-secret setting directly. Secret values on the command line are refused; import them by name or file.--env-file PATH- Import supported names from a UTF-8 dotenv file (maximum 64 KiB). Explicit--enventries override file entries; the last repeated entry wins.--no-hints(default off) - Suppress next-step advisory hints.--json(default off) - Emit machine-readable output.
core installs .vaultspec/ only, without any provider config.
Exit codes: 0 success, 1 failure, 2 completed with a required step skipped. The
three are shared by every vaultspec package’s install surface; core has no step that
reports 2 today.
Local environment provisioningLink to install, Local environment provisioning
Usage synopsis
vaultspec-core install --env VAULTSPEC_CORE_TYPESAFE_API_KEY
vaultspec-core install --upgrade --env-file /private/vaultspec.env --env VAULTSPEC_NO_HINTS=1
The first command imports an already exported key without putting its value in shell
history. Only supplied keys replace existing values. Installation, adoption, upgrade,
--force, and sync preserve unmentioned settings; a failed install does not replace
them. Existing installations still require --upgrade or --force. Dry runs report
names and planned outcomes without writing. Outputs never show imported values.
Values already present in the process environment affect this invocation but are not
saved to the project unless you import them explicitly. Core validates --env and
--env-file before provisioning. After a real install or upgrade returns without
errors, Core merges supplied values into .vaultspec/.env; a dry run reports outcomes
without writing. An import does not change the current process environment or the
target, provider, or launch mode already selected for this command; stored values are
available to later Core commands. The final report can already reflect imported
VAULTSPEC_JSON_PRETTY and VAULTSPEC_NO_HINTS settings.
Values are stored in .vaultspec/.env, outside the vault. The installer establishes
mandatory ignore rules, refuses tracked or redirected storage paths, and writes
atomically with owner-only permissions (a restricted DACL on Windows). Ignore protection
remains required when managed-block maintenance is disabled. The commit gate rejects
force-added local environment files. Full framework uninstall removes this local store.
Protect the original import file separately; installation never rewrites it.
Supported imports are VAULTSPEC_CORE_TYPESAFE_API_KEY, VAULTSPEC_IO_BUFFER_SIZE,
VAULTSPEC_TERMINAL_OUTPUT_LIMIT, VAULTSPEC_LOCK_TIMEOUT_SECONDS,
VAULTSPEC_JSON_PRETTY, and VAULTSPEC_NO_HINTS. Other names are refused. Dotenv
imports support comments, export, and single-line quoted or unquoted values, with no
variable interpolation or shell evaluation. Double-quoted backslashes and quotes may be
escaped.
For persistable settings, .vaultspec/.env is the third rung of the
settings resolution order: after explicit command options and
the process environment, before the trusted workspace-root .env credential fallback,
persisted configuration, derived and external defaults, and shipped defaults. A blank
value is unset in the store as everywhere else, and falls through. Both CLI and MCP use
this resolver, scoped to the selected workspace; file and environment changes refresh
its cache. Local settings work in all install modes, while the root .env fallback
keeps the trust restrictions described under settings resolution. Provisioning does not
copy secrets into generated MCP configuration or change the parent shell’s environment.
A running MCP server keeps its inherited process environment until restarted, and that
environment continues to override local file edits.
ExamplesLink to install, Examples
Install the framework for all supported provider layers in the current directory:
Command
vaultspec-core install all
uninstallLink to Workspace commands, uninstall
Usage synopsis
vaultspec-core uninstall [OPTIONS] [PROVIDER]
Remove the vaultspec framework from the target directory.
ArgumentsLink to uninstall, Arguments
PROVIDER(defaultall) -all,core,claude,gemini,antigravity,codex.
OptionsLink to uninstall, Options
--remove-vault(default off) - Also remove.vault/.--dry-run(default off) - Preview without deleting.--force(default off) - Required to execute (uninstall is destructive).--skip(default[]) - Skip specific removal passes (repeatable).--json(default off) - Emit machine-readable output.
.vault/ is preserved by default. --remove-vault deletes it; commit or back up its
records first.
Exit codes: 0 success, 1 failure, 2 completed with a required step skipped. The
three are shared by every vaultspec package’s install surface; core has no step that
reports 2 today.
ExamplesLink to uninstall, Examples
Preview removal while keeping feature records:
Command
vaultspec-core uninstall all --dry-run
After reviewing the preview, remove the harness and keep feature records:
Command
vaultspec-core uninstall all --force
syncLink to Workspace commands, sync
Usage synopsis
vaultspec-core sync [OPTIONS] [PROVIDER]
Authoritative complete sync from .vaultspec/ to enrolled provider outputs: rules,
skills, agents, system prompts, provider config stubs, and MCP entries. After editing or
adding framework source files, this is the normal propagation command.
ArgumentsLink to sync, Arguments
PROVIDER(defaultall) -all,claude,gemini,antigravity,codex.
core is not a valid sync target because sync reads from .vaultspec/. Use
vaultspec-core install --upgrade or vaultspec-core install --force for
framework/provider scaffolding repair, not as the normal propagation path after source
edits.
OptionsLink to sync, Options
--dry-run(default off) - Preview changes without writing.--force(default off) - Prune stale files and overwrite user-authored content.--skip(default[]) - Skip specific sync passes (repeatable).--json(default off) - Emit machine-readable output.
ExamplesLink to sync, Examples
Synchronize modified rule and agent source files to all provider workspaces:
Command
vaultspec-core sync all
commit-gateLink to Workspace commands, commit-gate
Usage synopsis
vaultspec-core commit-gate [OPTIONS] [PATHS]...
The read-only check the generated pre-commit hook runs. It checks each staged vault
document with the checkers that judge a document on its own, and blocks only on errors
the commit introduces: an error the document’s committed version already carries is
printed as advisory and does not block. It also blocks staged per-machine files, such as
the install manifest, snapshots, lock sentinels, and local vault caches, and every
.env or .env.* file other than an .env.example template. It never writes, and it
never runs the whole-vault checks; vaultspec-core vault check all remains the
corpus-wide gate for CI and explicit runs.
ArgumentsLink to commit-gate, Arguments
PATHS(optional) - Files to check, relative to the workspace root. The hook passes the staged files; with none given, the staged files are read from git.
OptionsLink to commit-gate, Options
--target DIR(-t, default discovered) - Check a directory other than the current one.--json(default off) - Output as JSON.
Exit codes: 0 = nothing blocks, 1 = something blocks.
ExamplesLink to commit-gate, Examples
Check what is staged right now, the way the commit hook will:
Command
vaultspec-core commit-gateCheck two documents explicitly and capture the result for a script:
Command
vaultspec-core commit-gate .vault/adr/2026-02-04-auth-adr.md .vault/plan/2026-02-04-auth-plan.md --json
doctorLink to Workspace commands, doctor
Usage synopsis
vaultspec-core doctor [OPTIONS]
Diagnose overall workspace and vault health. This is the single health command: it runs
the workspace diagnosis of vaultspec-core spec doctor and the full vault sweep of
vaultspec-core vault check all, then reports both under one exit code. Reach for it
when you want a yes-or-no answer about the whole project; reach for the two narrower
commands when you already know which half you are investigating.
OptionsLink to doctor, Options
--target DIR(-t, default discovered) - Diagnose a directory other than the current one.--json(default off) - Output as JSON.
Exit codes: 0 = all ok, 1 = warnings, 2 = errors.
Not every line the diagnosis prints is weighed. The tool-server configuration line, the
process registry, and stale package seeds are reported for your attention and do not
raise the code, so a run can print warn and still exit 0. Do not infer failure from
the word warn in the output: read the exit code, or read status under --json. The
conditions that do raise it are the framework layout, the provider directories, the
builtins, .gitignore and .gitattributes, migrations, the pre-commit hooks, rename
integrity, vault content, and an install-mode or version-floor mismatch on any declared
package.
ExamplesLink to doctor, Examples
Check the health of the whole project, framework and vault together:
Command
vaultspec-core doctorDiagnose another checkout and capture the result for a script:
Command
vaultspec-core doctor --target ../other-project --json
Vault commandsLink to Vault commands
Group command: vaultspec-core vault [OPTIONS] COMMAND [ARGS]...
vaultspec-core vault addLink to Vault commands, vaultspec-core vault add
Usage synopsis
vaultspec-core vault add [OPTIONS] DOC_TYPE
Create a new .vault/ document from a template.
ArgumentsLink to vaultspec-core vault add, Arguments
DOC_TYPE-adr,audit,exec,plan,reference,research.
OptionsLink to vaultspec-core vault add, Options
--feature TAG(-f) - Feature tag (kebab-case, lowercase letters, digits, hyphens). Required.--date DATE(default today) - Override date (ISO 8601, e.g., YYYY-MM-DD).--title TITLE- Document title.--topic TOPIC- Kebab-case filename infix that distinguishes a second document of the same type for one feature, producing{date}-{feature}-{topic}-{type}.md. Only valid foradr,audit,reference, andresearch.--related DOC(-r) - Related document(s). Accepts path, filename, stem, or[[wiki-link]]. Repeatable.--tags TAG- Accepts only the document’s required directory and feature tags. Repeatable; duplicates are ignored. Other tags are rejected before writing, including with--forceor--dry-run. Omit this option for ordinary creation.--force(default off) - Overwrite an existing document at the resolved path.--dry-run(default off) - Preview without writing files.--json(default off) - Emit machine-readable JSON output in standard envelope.--tier TIER(default L1) - Plan tier (L1,L2,L3,L4). Ignored for non-plan types.--no-hints(default off) - Suppress next-step advisory hints.
exec is not a scaffold type. vaultspec-core vault add exec exits 1 with the message
“execution is logged with vault exec log”; the ledger is the only execution artifact and
vaultspec-core vault exec log its only writer.
vaultspec-core vault editLink to Vault commands, vaultspec-core vault edit
Usage synopsis
vaultspec-core vault edit [OPTIONS] REF
Set body and/or frontmatter in one atomic write. This is the primary editing surface for
a scaffolded document: the body channel (--body-file or --body-stdin) and the
frontmatter flags are applied together in a single write with a single validation pass,
so a document never lands on disk with new prose and stale metadata. At least one edit -
a body channel or a frontmatter flag - must be supplied.
--expected-blob-hash requires the full 40-character hash of the document version you
reviewed. Compute it with git hash-object --no-filters <document-path>. The write is
refused if the file’s raw bytes have changed. After a conflict, reread the document
before computing a new hash.
ArgumentsLink to vaultspec-core vault edit, Arguments
REF- Document to edit. Accepts stem, filename, path, or[[wiki-link]]. Required.
OptionsLink to vaultspec-core vault edit, Options
--body-file FILE- Read the new body text from this file.--body-stdin(default off) - Read the new body text from stdin.--date DATE- Set the date field (YYYY-MM-DD).--tags TAG- Set the tags list. Repeatable; replaces the whole list.--related DOC(-r) - Set the related list. Repeatable; replaces the whole list. Each input is resolved to[[wiki-link]]form.--expected-blob-hash HASH- Refuse the write unless the on-disk blob OID matches.--check/--no-check(default--check) - Run conformance checks before writing.--dry-run(default off) - Preview without writing.--json(default off) - Output as JSON.--target DIR(-t, default discovered) - Target directory.
ExamplesLink to vaultspec-core vault edit, Examples
Replace a document’s prose and relink it in one write:
Command
vaultspec-core vault edit 2026-05-17-test-feature-research --body-file draft.md --related 2026-05-17-test-feature-adr
Pipe generated prose in and preview the result before committing to it:
Command
cat draft.md | vaultspec-core vault edit 2026-05-17-test-feature-research --body-stdin --dry-run
vaultspec-core vault set-bodyLink to Vault commands, vaultspec-core vault set-body
Usage synopsis
vaultspec-core vault set-body [OPTIONS] REF
Replace a document’s body prose and update modified and body_hash. With --check
(the default), the proposed content is validated first and the write is refused if any
diagnostic is an error.
Use this when the metadata is already right and you only want to swap the prose; use
vaultspec-core vault edit when the same change also touches frontmatter.
ArgumentsLink to vaultspec-core vault set-body, Arguments
REF- Document to edit. Accepts stem, filename, path, or[[wiki-link]]. Required.
OptionsLink to vaultspec-core vault set-body, Options
--body-file FILE- Read the new body text from this file.--body-stdin(default off) - Read the new body text from stdin.--expected-blob-hash HASH- Refuse the write unless the on-disk blob OID matches.--check/--no-check(default--check) - Run conformance checks before writing.--dry-run(default off) - Preview without writing.--json(default off) - Output as JSON.--target DIR(-t, default discovered) - Target directory.
ExamplesLink to vaultspec-core vault set-body, Examples
Swap in a rewritten body from a file:
Command
vaultspec-core vault set-body 2026-05-17-test-feature-research --body-file rewrite.md
To reject stale writes, use --expected-blob-hash.
vaultspec-core vault set-frontmatterLink to Vault commands, vaultspec-core vault set-frontmatter
Usage synopsis
vaultspec-core vault set-frontmatter [OPTIONS] REF
Edit selected frontmatter fields, keeping the body byte for byte. Only the fields you
pass are changed and every other key is preserved. The proposed metadata is validated
before writing and the write is refused on any violation, so a malformed tag set or date
never reaches disk. The modified: stamp is refreshed automatically.
There is no --title flag: a document’s title is its body heading, not a frontmatter
field. Both --tags and --related replace the whole list rather than appending, so
pass every value you want to keep. To add or drop a single edge instead, use
vaultspec-core vault link add and vaultspec-core vault link remove.
ArgumentsLink to vaultspec-core vault set-frontmatter, Arguments
REF- Document to edit. Accepts stem, filename, path, or[[wiki-link]]. Required.
OptionsLink to vaultspec-core vault set-frontmatter, Options
--date DATE- Set the date field (YYYY-MM-DD).--tags TAG- Set the tags list. Repeatable; replaces the whole list.--related DOC(-r) - Set the related list. Repeatable; replaces the whole list. Each input is resolved to[[wiki-link]]form.--expected-blob-hash HASH- Refuse the write unless the on-disk blob OID matches.--dry-run(default off) - Preview without writing.--json(default off) - Output as JSON.--target DIR(-t, default discovered) - Target directory.
ExamplesLink to vaultspec-core vault set-frontmatter, Examples
Repoint a document’s related list at its governing decision record:
Command
vaultspec-core vault set-frontmatter 2026-05-17-test-feature-plan --related 2026-05-17-test-feature-adr
Correct a document’s date without touching a word of its prose:
Command
vaultspec-core vault set-frontmatter 2026-05-17-test-feature-plan --date 2026-05-18
vaultspec-core vault renameLink to Vault commands, vaultspec-core vault rename
Usage synopsis
vaultspec-core vault rename [OPTIONS] REF
Rename a document’s file and re-point incoming references. The document is renamed to
<--to>.md in the same directory, every other document’s related: [[old-stem]] entry
is rewritten to the new stem, and the modified: stamp is refreshed. Pre-checks for
blob hash, stem grammar, and filename collision run before anything is written, and the
renamed document’s conformance diagnostics come back with the result.
This renames one document. To rename a whole feature - its documents, its exec folder,
its tags, and its index - use vaultspec-core vault feature rename.
ArgumentsLink to vaultspec-core vault rename, Arguments
REF- Document to rename. Accepts stem, filename, path, or[[wiki-link]]. Required.
OptionsLink to vaultspec-core vault rename, Options
--to STEM- New identity-bearing stem (filename without.md). Required.--expected-blob-hash HASH- Refuse the rename unless the on-disk blob OID matches.--check/--no-check(default--check) - Report conformance checks on the renamed document.--dry-run(default off) - Preview without writing.--json(default off) - Output as JSON.--target DIR(-t, default discovered) - Target directory.
ExamplesLink to vaultspec-core vault rename, Examples
Give a document a clearer stem and fix every link that pointed at it:
Command
vaultspec-core vault rename 2026-05-17-test-feature-research --to 2026-05-17-test-feature-intake-research
See which documents a rename would rewrite before running it:
Command
vaultspec-core vault rename 2026-05-17-test-feature-research --to 2026-05-17-test-feature-intake-research --dry-run
vaultspec-core statusLink to Vault commands, vaultspec-core status
Usage synopsis
vaultspec-core status [OPTIONS] [TARGET]
Orient in a vaultspec vault: rollup or a grounding trace for a target. This is the top-level zeroth move. Read-only - it never writes and produces no artifact.
Rollup mode (no TARGET): reports plans in flight, each with a one-line overview
(tier, completed waves and phases, step completion, and the next open step); plans
recently completed; recent changes grouped by type with ledgers collapsed per feature;
active features; and vault totals. Outcome semantics: always unchanged (read-only
verb). Advisory hints point at the targeted form and at vaultspec-core spec doctor for
framework health.
The rollup’s Discovery section says which vault search to reach for. First it says
whether hosted vault search (vaultspec-core vault search) is configured and whether
the key came from the environment, provisioned local_env, or workspace dotenv. It
then shows whether the vaultspec-rag companion is provisioned, which decides the next
step a declined vault search names. Both lines report configuration, not liveness: a
configured key can still be rejected when a search runs, and a provisioned companion can
still be down. Under --json they are data.hosted_search (configured, source) and
data.companion (package, signal, mode, version, floor, health_authority;
the key is absent when the probe failed).
Targeted mode (TARGET is a plan stem, plan path, or feature handle): renders the
grounding trace - a plan-line header, then each step (display path, checkbox state, a
cursor on the next open step) mapped to its evidence: ledger N rows plus the last
verify: result for a step with ledger rows, no rows for an open step without any, or
unlinked for a closed step without any. Exec documents that reference the plan but
name no step are listed as unlinked records. Grounding documents are grouped by type
beneath the step list. A feature handle traces every plan under that feature.
vaultspec-core status is orientation, not auditing: it describes what exists without
judging conformance. Use vaultspec-core vault check to audit and
vaultspec-core spec doctor for framework health.
OptionsLink to vaultspec-core status, Options
--limit N(default10) - Recently modified documents to show, per type.--since N- Show documents modified within the last N days.--paths(default off) - Show each referenced document’s path (targeted mode).--verbose-exec(default off) - List ledgers instead of collapsing them per feature.--json(default off) - Emit machine-readable output (vaultspec.vault.status.v1).--no-hints(default off) - Suppress next-step advisory hints.
--limit and --since apply only in rollup mode. --since switches from a last-N
count to a day-window query.
ExamplesLink to vaultspec-core status, Examples
Get a vault-wide orientation rollup (in-flight plans and recent changes):
Command
vaultspec-core statusTrace a specific plan to its ledger rows and grounding documents:
Command
vaultspec-core status 2026-05-17-test-feature-plan
Show only documents modified in the last 7 days:
Command
vaultspec-core status --since 7
vaultspec-core vault listLink to Vault commands, vaultspec-core vault list
Usage synopsis
vaultspec-core vault list [OPTIONS] [DOC_TYPE]
List vault documents.
ArgumentsLink to vaultspec-core vault list, Arguments
DOC_TYPE- Filter by document type.
OptionsLink to vaultspec-core vault list, Options
--feature TAG(-f) - Filter by feature tag.--date DATE- Filter by date.--json(default off) - Emit machine-readable output.--limit N(default 50) - Maximum documents to return.--offset N(default 0) - Documents to skip, for paging.
ExamplesLink to vaultspec-core vault list, Examples
List all plans in the vault for a specific feature:
Command
vaultspec-core vault list plan --feature test-feature
vaultspec-core vault statsLink to Vault commands, vaultspec-core vault stats
Usage synopsis
vaultspec-core vault stats [OPTIONS]
Show vault statistics and document counts.
OptionsLink to vaultspec-core vault stats, Options
--feature TAG(-f) - Filter by feature tag.--date DATE- Filter by date.--type TYPE- Filter by document type.--invalid(default off) - Show only documents with invalid links.--orphaned(default off) - Show only orphaned documents.--json(default off) - Emit machine-readable output.
ExamplesLink to vaultspec-core vault stats, Examples
Display vault-wide statistics with details for orphaned and invalid-link documents:
Command
vaultspec-core vault stats --invalid --orphaned
vaultspec-core vault searchLink to Vault commands, vaultspec-core vault search
Usage synopsis
vaultspec-core vault search [OPTIONS] QUERY
Ask the vault a question in plain language and read the passages that answer it. Hosted
search ranks the vault’s records against the question and quotes, for each ranked
record, the passage that answers it with its line range. It reads the vault from disk on
every search, so there is no index to build or refresh. The same search backs the MCP
search tool.
Hosted search is enabled by a TypeSafe key in VAULTSPEC_CORE_TYPESAFE_API_KEY (see
environment variables). Every search sends the question and
vault text to the TypeSafe API. Without a key the command sends nothing and reports
not configured. When a configured search fails, it reports unavailable with the
reason and returns no partial ranking. Either way it prints one sentence: why hosted
search did not rank, then the search to run instead. That is a vaultspec-rag vault
search over the requested record types when the workspace provisions vaultspec-rag,
otherwise vaultspec-core vault list (MCP: find), with the type when one was
requested, and grep of .vault/. Provisioning is read from the workspace configuration;
core never calls vaultspec-rag. Hosted search covers the vault only; code search is
vaultspec-rag’s. vaultspec-core status shows whether a key is configured and where
it came from. The key itself never appears in any output.
Output starts with a verdict: answered, or nothing in the vault answers this. When
the provider would not read some records in full, the verdict reads
no record that was read answers this instead, and the next line gives the number of
those records. The ranked records follow, best first. Each record line gives its rank,
record name, type, path:first-last line range, and the section the passage sits under.
The passage follows: at most 700 bytes of whole lines, with ... marking a passage that
goes on past the line range shown. A second passage (also ..., 300 bytes) appears when
the answer spans two. A ! note flags a record that may contradict an assumption in the
question. The page ends with the hit count and, when the ranking holds more records than
were shown, the number withheld.
ArgumentsLink to vaultspec-core vault search, Arguments
QUERY- The question to ask, in plain language. Must not be blank; at most 2,000 characters.
OptionsLink to vaultspec-core vault search, Options
--type TYPE- Search only records of this type:adr,audit,exec,plan,reference, orresearch. Repeat the flag to search several types. Generated feature indexes are never searched. By default every type is searched.--feature TAG(-f) - Search only this feature’s records.--date DATE- Search only records with this exact date (YYYY-MM-DD).--limit N(default4) - Maximum ranked records to return, from1to11. The most a search ranks is 11, so--limit 11returns the whole ranking. There is no--offset.--json(default off) - Emit machine-readable output (vaultspec.vault.search.v1).
The type, feature, and date filters are applied before anything is sent: a record they exclude never leaves the machine.
Under --json, data carries the same fields as the MCP search result. data.status
is ok, not_configured, or unavailable, and every reply carries answered and the
hits. An ok reply adds verdict (answered, nothing_answers, or
none_read_answers, the three verdicts above) and the window fields returned,
total, and truncated. Each hit carries: path, type, feature, date, title,
score, answers (the probability that the record states the answer),
premise_conflict, each score to three decimal places, blob_hash, and an excerpt
with section, line_start, line_end, text, and truncated. line_end is the
last line text holds, and truncated marks a passage that goes on past it. A
supporting excerpt is present only when the answer spans two passages. The
not_configured and unavailable replies carry a next_step (kind rag_search or
listing, the types it covers, and the command to run, where <intent> stands for
your question and the --feature and --date filters are kept when the search had
them) and a remediation sentence that words it, and unavailable also carries its
reason: credential_rejected, content_rejected, rate_limited, transport,
deadline, invalid_response, or request_too_large. usage reports the requests,
tokens, and time a search spent, and unscored, the number of records the provider
would not read in full. answered is false for the whole vault only when unscored
is 0. The JSON carries non-ASCII text as UTF-8 rather than \u escapes.
Exit codes:
0- The search ran (envelopestatusunchanged), whether or not anything answers. Also0when hosted search is not configured (envelopestatusskipped). That is the default state without a key, and the reply is the search to run instead, not a failure.1- Hosted search is configured but did not finish (envelopestatusfailed), or the workspace cannot be read.2- Invalid input: a blank or overlongQUERY, an unsearchable--type, or a--limitoutside1..11. Nothing is read or sent.
ExamplesLink to vaultspec-core vault search, Examples
Ask why a decision was taken:
Command
vaultspec-core vault search "why does core never call vaultspec-rag"
Search only one feature’s decisions and read the whole ranking:
Command
vaultspec-core vault search "which variable enrols hosted search" --type adr --feature hosted-search --limit 11
Script against the verdict and the excerpts:
Command
vaultspec-core vault search "what is the default page size" --json
vaultspec-core vault graphLink to Vault commands, vaultspec-core vault graph
Usage synopsis
vaultspec-core vault graph [OPTIONS]
Outputs a hierarchical tree grouped by feature and type.
OptionsLink to vaultspec-core vault graph, Options
--feature TAG(-f) - Scope to a single feature.--json(default off) - Output as networkx node-link JSON.--metrics(-m, default off) - Show aggregate graph metrics.--ascii(default off) - Render ASCII topology.--body(default off) - Include document body in JSON output.--node STEM- Scope JSON to a node’s local (ego) neighbourhood.--depth N(default 1) - Ego-graph radius in hops; only used with –node.--derived/--no-derived(default off) - Include the derived relatedness edge set in JSON.--derived-limit N(default none) - Maximum derived edges to return. The per-node fan-out cap bounds edges per node, not the total.--derived-offset N(default 0) - Derived edges to skip, for paging.--ref REF- Read the vault corpus from this git ref (branch, tag, or commit) through the object database, without checking it out into the working tree.
The --json payload (schema vaultspec.vault.graph.v2) carries typed weighted explicit
edges (kind, multiplicity, weight), node-size hints (pagerank, in_degree), and
a separate derived_edges array of implicit relatedness edges kept out of the canonical
edges array. A missing --node stem exits 1 with a failed envelope.
ExamplesLink to vaultspec-core vault graph, Examples
Visualize the vault hierarchy and structure as an ASCII tree scoped to a feature:
Command
vaultspec-core vault graph --feature test-feature --ascii
vaultspec-core vault repairLink to Vault commands, vaultspec-core vault repair
Usage synopsis
vaultspec-core vault repair [OPTIONS]
Run the operator repair pipeline for .vault/ content. This is the guided recovery
surface for degraded vaults. It reports preflight and migration state, runs the health
checks, applies supported mechanical fixes unless --dry-run is set, refreshes
generated feature indexes unless --no-index is set, rebuilds graph state, and runs a
postcheck pass.
vaultspec-core vault repair is broader than vaultspec-core vault check all --fix.
The check-level fixer remains available for compatibility, but it does not own generated
index refresh, post-fix graph rebuild, root-cause grouping, or final delta reporting. It
also strips standalone annotation comments during the fix phase. Inline HTML comments
embedded in prose are preserved.
OptionsLink to vaultspec-core vault repair, Options
--dry-run(default off) - Preview repair actions without writing.--include-index/--no-index(default on) - Refresh generated feature indexes during repair.--feature TAG(-f) - Scope repair and index refresh to one feature.--verbose(-v, default off) - Show INFO-level diagnostics and detailed paths.--json(default off) - Emit machine-readable phase and summary payloads.
PhasesLink to vaultspec-core vault repair, Phases
preflight- Report migration status and platform path behavior, name every document the pending migrations are about to remove, then apply them.check- Run the current vault health suite without mutation.fix- Apply supported safe check-level fixes, or report planned fixes.index- Refresh or preview generated.vault/index/<feature>.index.mdfiles.postcheck- Rebuild graph state and rerun checks after mutation.summary- Report changed files, generated indexes, unresolved work, root causes.
Dry-run mode never writes generated indexes or check fixes. If migrations are pending, dry-run reports that state rather than entering the index-refresh path, which converges the workspace before it writes.
The preflight phase lists the documents pending migrations would remove before it
runs them, and reports where their copies went afterwards. See
where deleted documents go: a repair on a stale workspace
is the run with the most pending destructive entries, and every document it removes is
copied to .vault/.trash/ first.
ExamplesLink to vaultspec-core vault repair, Examples
Scan and apply all safe automatic repairs to a degraded vault:
Command
vaultspec-core vault repair
vaultspec-core vault sanitize annotationsLink to Vault commands, vaultspec-core vault sanitize annotations
Usage synopsis
vaultspec-core vault sanitize annotations [OPTIONS]
Strip generated template annotations from .vault/ documents. Template hydration keeps
agent-facing instructions in newly created documents; this command removes those
instructions only when explicitly requested. Use --dry-run to see which files would be
stripped without mutating the vault. The sanitizer removes YAML frontmatter comment
directives, standalone HTML comment blocks, and malformed standalone <-- ... -->
annotation blocks. It preserves fenced examples, inline HTML comments embedded in prose,
and machine-owned comments such as retired plan markers.
OptionsLink to vaultspec-core vault sanitize annotations, Options
--feature TAG(-f) - Sanitize documents for one feature.--dry-run(default off) - Preview annotation removals.--verbose(-v, default off) - Show stripped files.--json(default off) - Emit machine-readable check payloads.--limit N(default 50) - Maximum findings to return.--offset N(default 0) - Findings to skip, for paging.
ExamplesLink to vaultspec-core vault sanitize annotations, Examples
Strip all default template instructions and annotations from a feature’s documents:
Command
vaultspec-core vault sanitize annotations --feature test-feature
vaultspec-core vault feature listLink to Vault commands, vaultspec-core vault feature list
Usage synopsis
vaultspec-core vault feature list [OPTIONS]
List all feature tags in the vault.
OptionsLink to vaultspec-core vault feature list, Options
--date DATE- Filter by date.--orphaned(default off) - Show only features with no incoming links.--type TYPE- Filter by document type.--stale-days N- Show only features whose latest activity is older than N days.--json(default off) - Emit machine-readable output.--limit N(default 50) - Maximum features to return.--offset N(default 0) - Features to skip, for paging.
ExamplesLink to vaultspec-core vault feature list, Examples
List all active feature tags in the vault:
Command
vaultspec-core vault feature list
vaultspec-core vault feature indexLink to Vault commands, vaultspec-core vault feature index
Usage synopsis
vaultspec-core vault feature index [OPTIONS]
Generate or update <feature>.index.md files in .vault/index/. Each index links to
every document sharing that feature tag, making implicit feature clusters explicit in
the graph. Indexes carry the #index directory tag plus the feature tag and are
auto-managed.
OptionsLink to vaultspec-core vault feature index, Options
--feature TAG(-f) - Generate index for a specific feature.--json(default off) - Emit machine-readable output.
ExamplesLink to vaultspec-core vault feature index, Examples
Rebuild or generate the index document for a specific feature:
Command
vaultspec-core vault feature index --feature test-feature
vaultspec-core vault feature archiveLink to Vault commands, vaultspec-core vault feature archive
Usage synopsis
vaultspec-core vault feature archive [OPTIONS] FEATURE_TAG
Move all documents for a feature tag to the archive.
OptionsLink to vaultspec-core vault feature archive, Options
--dry-run(default off) - Preview planned changes.--no-hints(default off) - Suppress next-step advisory hints.--json(default off) - Emit machine-readable output.--target(-t) - Target directory (defaults to the discovered workspace root).
ExamplesLink to vaultspec-core vault feature archive, Examples
Archive all documents for a completed feature tag:
Command
vaultspec-core vault feature archive test-feature
vaultspec-core vault feature unarchiveLink to Vault commands, vaultspec-core vault feature unarchive
Usage synopsis
vaultspec-core vault feature unarchive [OPTIONS] FEATURE_TAG
Restore all archived documents for a feature tag.
OptionsLink to vaultspec-core vault feature unarchive, Options
--dry-run(default off) - Preview planned changes.--json(default off) - Emit machine-readable output.--target(-t) - Target directory (defaults to the discovered workspace root).
ExamplesLink to vaultspec-core vault feature unarchive, Examples
Restore and unarchive all documents for a previously archived feature:
Command
vaultspec-core vault feature unarchive test-feature
vaultspec-core vault archive documentsLink to Vault commands, vaultspec-core vault archive documents
Usage synopsis
vaultspec-core vault archive documents [OPTIONS]
Archive exactly the live vault documents listed in a UTF-8 manifest. Each line must be a
repository-relative .vault/*.md path. The command validates every source and
destination before it moves anything, so a bad line cannot produce a partial archive.
OptionsLink to vaultspec-core vault archive documents, Options
--manifest PATH- Required UTF-8 manifest of repository-relative vault Markdown paths, one per line.--dry-run(default off) - Validate and show the archive destinations without writing.--json(default off) - Emit the standard machine-readable result envelope.
ExamplesLink to vaultspec-core vault archive documents, Examples
Preview the archival of explicitly selected historical records:
Command
vaultspec-core vault archive documents --manifest .vault/archive-manifest.txt --dry-run
vaultspec-core vault archive restoreLink to Vault commands, vaultspec-core vault archive restore
Usage synopsis
vaultspec-core vault archive restore [OPTIONS]
Bring archived documents back into the live vault. Each manifest line must be a
repository-relative .vault/_archive/*.md path. This is the inverse of
vaultspec-core vault archive documents: every source and destination is validated
before anything moves, so a bad line cannot produce a partial restore.
OptionsLink to vaultspec-core vault archive restore, Options
--manifest PATH- Required UTF-8 manifest of repository-relative archived Markdown paths, one per line.--dry-run(default off) - Validate and show the restore destinations without writing.--deduplicate-identical(default off) - When an archived document already has a live counterpart with byte-identical content, drop the archived copy instead of failing on the collision. Documents whose contents differ are still reported as conflicts.--json(default off) - Emit the standard machine-readable result envelope.
ExamplesLink to vaultspec-core vault archive restore, Examples
Preview restoring a set of archived records:
Command
vaultspec-core vault archive restore --manifest .vault/restore-manifest.txt --dry-run
Restore, clearing archived copies that already match the live document:
Command
vaultspec-core vault archive restore --manifest .vault/restore-manifest.txt --deduplicate-identical
vaultspec-core vault exec relinkLink to Vault commands, vaultspec-core vault exec relink
Usage synopsis
vaultspec-core vault exec relink [OPTIONS]
Relink one execution record to a live Step in its existing parent plan. The record body is preserved; only the validated Step mapping can change.
OptionsLink to vaultspec-core vault exec relink, Options
--record PATH- Required live execution-record path.--step STEP- Required live Step identifier or display path in the parent plan.--dry-run(default off) - Preview the recovery without writing.--json(default off) - Emit the standard machine-readable result envelope.
vaultspec-core vault exec retireLink to Vault commands, vaultspec-core vault exec retire
Usage synopsis
vaultspec-core vault exec retire [OPTIONS]
Archive one execution record only when its current Step is retired by its parent plan.
OptionsLink to vaultspec-core vault exec retire, Options
--record PATH- Required live execution-record path.--dry-run(default off) - Preview the recovery without writing.--json(default off) - Emit the standard machine-readable result envelope.
vaultspec-core vault exec detachLink to Vault commands, vaultspec-core vault exec detach
Usage synopsis
vaultspec-core vault exec detach [OPTIONS]
Remove one record’s Step claim only when it resolves to neither a live nor a retired Step.
OptionsLink to vaultspec-core vault exec detach, Options
--record PATH- Required live execution-record path.--dry-run(default off) - Preview the recovery without writing.--json(default off) - Emit the standard machine-readable result envelope.
vaultspec-core vault exec foldLink to Vault commands, vaultspec-core vault exec fold
Usage synopsis
vaultspec-core vault exec fold [OPTIONS]
Fold a feature’s per-Step execution records, from before 0.1.74, into its plan’s ledger. The folded records are removed once the ledger carrying their content is on disk; the upgrade migration runs the same fold on its own.
A body-v1 record’s ## Scope paths become rows carrying the T (touched) operation,
because that schema never recorded whether a path was added, modified, or deleted and
none is invented; T stays distinguishable from a natively logged A/M/D/R. A
body-v2 record’s ## Changes rows fold with their operations and verify: line
intact, and its ## Notes lines are carried under the Step id. A flat
<date>-<feature>-exec.md record carrying a step_id folds too. Other prose is
discarded; it is recoverable from the commit preceding the fold, since .vault/ is
tracked, but no forward command undoes it.
A Phase Summary is removed once every Step of its Phase has rows in the ledger, and left
intact otherwise. A record with no step_id cannot be attributed to a Step and is left
intact.
OptionsLink to vaultspec-core vault exec fold, Options
--feature FEATURE- Required feature tag, with or without a leading#.--dry-run(default off) - Report the fold plan without writing.--force(default off) - Required to apply; the fold removes records.--json(default off) - Emit the standard machine-readable result envelope.
vaultspec-core vault exec logLink to Vault commands, vaultspec-core vault exec log
Usage synopsis
vaultspec-core vault exec log [OPTIONS]
Append one Step’s rows to its plan’s ledger, creating the ledger on first use. The
ledger is one document per plan and the only execution artifact; it is append-only:
existing rows are never rewritten, and re-logging an identical row is idempotent rather
than duplicating it. Concurrent appends to one ledger are serialised by an advisory
lock, and the managed .gitattributes block declares merge=union on ledgers so two
branches appending different Steps merge without a conflict.
OptionsLink to vaultspec-core vault exec log, Options
--feature FEATURE- Required feature tag, with or without a leading#.--related PLAN_STEM- Required stem of the parent plan this ledger records.--step STEP- Required canonical Step identifier or display path being logged.--row SPEC- Row to append, repeatable.A:pathadded,M:pathmodified,D:pathdeleted,R:old->newrenamed. The verb never infers an operation from disk state.--verify SPEC- A check that ran, as<command>=passor<command>=fail, repeatable; each is written as its ownverify:row.--by PERSONA- The persona that closed the Step; written as aby:row.--note TEXT- Exception note, repeatable; written as a## Notesline under the Step id, the section created on first use.--dry-run(default off) - Resolve and report the target ledger without writing.--json(default off) - Emit the standard machine-readable result envelope.
vaultspec-core vault feature renameLink to Vault commands, vaultspec-core vault feature rename
Usage synopsis
vaultspec-core vault feature rename [OPTIONS] OLD_FEATURE NEW_FEATURE
Atomically rename a feature tag across every vault surface. The rename rewrites document
filenames, the exec folder and the execution-record filenames inside it, the #feature
frontmatter tag, related: wiki-links, and the regenerated feature index. Free-form
body prose is never touched, so a sentence that happens to mention the old name stays as
you wrote it.
The apply phase keeps a reverse journal. If anything fails part way through, the changes
made so far are rolled back to the pre-rename state, so the vault is never left half
renamed. By default the command refuses when the target feature already exists;
--force merges the source feature into it, and per-file path collisions still refuse.
Preview first with --dry-run - this command touches many files at once.
ArgumentsLink to vaultspec-core vault feature rename, Arguments
OLD_FEATURE- Current feature tag to rename. Required.NEW_FEATURE- New feature tag name. Required.
OptionsLink to vaultspec-core vault feature rename, Options
--dry-run(default off) - Preview planned changes without writing.--force(default off) - Merge the source into an existing target feature.--json(default off) - Output as JSON.--no-hints(default off) - Suppress next-step advisory hints.--target DIR(-t, default discovered) - Target directory.
ExamplesLink to vaultspec-core vault feature rename, Examples
Preview the full set of files a feature rename would rewrite:
Command
vaultspec-core vault feature rename test-feature editor-demo --dry-run
Fold one feature’s documents into another existing feature:
Command
vaultspec-core vault feature rename test-feature editor-demo --force
vaultspec-core vault adr supersedeLink to Vault commands, vaultspec-core vault adr supersede
Usage synopsis
vaultspec-core vault adr supersede [OPTIONS] OLD_ADR
Supersede an old ADR with a new ADR.
ArgumentsLink to vaultspec-core vault adr supersede, Arguments
OLD_ADR- Old ADR stem to supersede.
OptionsLink to vaultspec-core vault adr supersede, Options
--by- New ADR stem that supersedes the old one.--dry-run(default off) - Preview without writing.--json(default off) - Output as JSON.--target(-t) - Target directory (defaults to the discovered workspace root).
ExamplesLink to vaultspec-core vault adr supersede, Examples
Supersede an outdated ADR with a newly created one:
Command
vaultspec-core vault adr supersede 2026-05-17-old-adr-stem --by 2026-05-26-new-adr-stem
vaultspec-core vault adr crossrefLink to Vault commands, vaultspec-core vault adr crossref
Usage synopsis
vaultspec-core vault adr crossref [OPTIONS] [REFS]...
Find the ADRs a decision should cross-reference. Every other ADR is ranked locally;
hosted judgments evaluate a bounded shortlist. The reply lists suggested links and
declared links judged weak. With --apply, the new links are written into the source’s
related: field. The same backend serves the MCP crossref tool.
The judgment runs in three stages, each with a fixed ceiling, so a run’s cost does not grow with the size of the vault:
Every other ADR is ranked by code alone: the code identifiers the two decisions share (module and file paths, CLI verbs, configuration variables) and the overlap between the source’s decision text and each candidate’s feature, title, and opening line. Nothing is sent.
The best 192 candidates are put to hosted search as Choice questions of at most 32 options each.
The best 32 of the combined ranking, plus up to 8 declared links outside them, are judged in pairs.
A source costs at most 46 requests under a 15-second deadline. A sweep takes at most 50 sources, or 52 when it must settle a refusal, and 300 seconds, and the vault may hold at most 5,000 ADRs.
Cross-referencing uses the hosted-search key in VAULTSPEC_CORE_TYPESAFE_API_KEY (see
environment variables) and sends ADR text to the TypeSafe API.
Without a key it sends nothing, reports that it is not configured, and names the search
to run instead: the vaultspec-rag search when rag is provisioned, the ADR listing
otherwise.
Output lists each source, then its verdicts. A link verdict means the source should
link that ADR; it is marked new, declared, or written. A weak verdict is a link
the source already declares, judged below the threshold. Weak links are listed for a
reader to check and are never removed. Each verdict also carries an advisory relation:
supersedes, refines, depends_on, conflicts, shared_artifact, topic_only, or
unrelated. It tells an author which pairs to read in full; it does not decide
anything.
ArgumentsLink to vaultspec-core vault adr crossref, Arguments
REFS- ADRs to cross-reference: a stem, filename, path, or[[wiki-link]]. One ADR is judged on its own; several make a sweep.
OptionsLink to vaultspec-core vault adr crossref, Options
--feature TAG(-f) - Sweep this feature’s ADRs.--all(default off) - Sweep non-retired ADRs, including proposals. Superseded, rejected, and deprecated ADRs are skipped unless named.--isolated(default off) - Sweep only ADRs that link no other ADR. Combines with--featureto narrow further;--allstands alone.--after STEM- Resume a sweep after this ADR: thenext_aftera previous sweep reported, with the same selector. Sweeps run in stem order and store no state. An ADR the provider refuses to read is held open while the sweep judges on, past its source limit by up to two more ADRs if it must: a later ADR the provider reads shows the refusal was that ADR’s own, and the sweep moves past both. A refusal no read settles, three refusals in a row, or any other failure stops the sweep withstoppedset and the cursor before the first refusal still open, so resuming retries from there.--max-sources N(default10) - Most ADRs one sweep judges, from1to50.--body-file PATH- Judge proposed body prose for one existing ADR without changing it. Use this for an amendment before replacing accepted text. Omit frontmatter; no sweep options or--applymay accompany it. The result marks the source asdraft.--apply(default off) - Write each newlinkverdict into the source’srelated:, as each source finishes, without reading them first. Nothing is removed, and no candidate is written to. To add only the links you have read and confirmed, run without--applyand usevaultspec-core vault link add.--json(default off) - Emit machine-readable output (vaultspec.vault.adr.crossref.v1).--target(-t) - Target directory (defaults to the discovered workspace root).
Under --json, data.sources holds one entry per source judged, with its status
(ok, not_configured, or unavailable), its verdicts (stem, kind, score,
relation, status, declared, and applied when written), and the counts links,
written, and verdicts_total. A reply carries at most 80 verdict rows; a source whose
rows were cut has truncated set. A source also carries unjudged_declared when some
declared links were beyond the judged ceiling, write_failed for links --apply could
not write, and, when it was not judged, its reason, next_step, and remediation.
data also carries the totals judged, links, and written, the number of sources
remaining, next_after when sources remain and one was processed (without it, a
resume starts from the beginning), stopped when a sweep ended early, and usage when
anything was sent.
Each judged source includes coverage: corpus, pool, and judged candidate counts,
source_truncated, and candidates_truncated. Each returned candidate whose input was
clipped has input_truncated. Decision and constraint sections receive space before
context can consume the 6,000-character budget; other sections are retained within that
bound. Read relevant full records when input was clipped. An ok response means the
bounded judgment completed, not that every conflict was excluded.
Exit codes:
0- Every source taken was judged (envelopestatusunchanged, orupdatedwhen--applywrote links), or hosted search is not configured (envelopestatusskipped).1- A link--applyjudged could not be written, or hosted search is configured but a source could not be judged (envelopestatusfailed). The reply says where to resume.2- Invalid input: no source or sweep option, aREFSentry or--aftervalue that is not an ADR of this vault,REFScombined with--feature,--isolated, or--all,--allcombined with--featureor--isolated, an empty--feature, a vault with more than 5,000 ADRs, or--max-sourcesoutside1..50.
ExamplesLink to vaultspec-core vault adr crossref, Examples
Check a newly drafted ADR before presenting it:
Command
vaultspec-core vault adr crossref 2026-05-26-new-adr-stem
Review the ADRs that link nothing yet, ten at a time:
Command
vaultspec-core vault adr crossref --isolated vaultspec-core vault adr crossref --isolated --after 2026-05-17-last-judged-adr-stem
vaultspec-core vault rule promoteLink to Vault commands, vaultspec-core vault rule promote
Usage synopsis
vaultspec-core vault rule promote [OPTIONS]
Promote an audit finding to a project-level rule.
OptionsLink to vaultspec-core vault rule promote, Options
--from- Audit stem to promote from. Required.--as- Kebab-case name of the promoted rule. Required.--force(default off) - Overwrite existing rule source.--dry-run(default off) - Preview without writing.--json(default off) - Output as JSON.--target(-t) - Target directory (defaults to the discovered workspace root).
ExamplesLink to vaultspec-core vault rule promote, Examples
Promote a specific finding from an audit file into a project-shared rule:
Command
vaultspec-core vault rule promote --from 2026-05-17-feature-audit --as project-rule-name
vaultspec-core vault checkLink to Vault commands, vaultspec-core vault check
Usage synopsis
vaultspec-core vault check [OPTIONS] COMMAND [ARGS]...
Run health checks on .vault/. Exits with code 1 if errors are found.
SubcommandsLink to vaultspec-core vault check, Subcommands
all(--fix: partial,--feature: yes) - Run every check in sequence.structure(--fix: yes,--feature: no) - Check vault directory structure and filename conventions.frontmatter(--fix: yes,--feature: yes) - Validate document frontmatter against vault schema.modified-stamp(--fix: yes,--feature: yes) - Validate and reconcile themodified:recency stamp on every document.annotations(--fix: yes,--feature: yes) - Find generated template annotations in vault documents.markdown(--fix: yes,--feature: yes) - Check and optionally fix markdown hygiene (whitespace, blank runs, trailing newline).links(--fix: yes,--feature: yes) - Check wiki-links follow Obsidian convention (no.mdextension).dangling(--fix: yes,--feature: yes) - Findrelated:frontmatter wiki-links that resolve to no document.body-links(--fix: yes,--feature: yes) - Find wiki-links and markdown path links in document body text.placeholders(--fix: no,--feature: yes) - Find unreplaced{...}template placeholders in document body prose.orphans(--fix: no,--feature: yes) - Find documents with no incoming wiki-links.features(--fix: no,--feature: yes) - Check feature tag completeness - missing doc types.exec-mapping(--fix: no,--feature: yes) - Pair ledger rows with plan Steps: a per-Step record or a closed Step with no row in an existing ledger is an error; a closed Step with no row in a plan without a ledger, or a row for an unknown Step, is a warning; a row for a still-open Step is info (work in flight); a row for a retired Step is clean.body-sections(--fix: no,--feature: yes) - Check document bodies carry the sections their template mandates.feature-rename-integrity(--fix: no,--feature: yes) - Surface exec folders whose feature disagrees with their records’ tag.references(--fix: compatibility-only,--feature: yes) - Report missing cross-references without selecting evidence or decision links.schema(--fix: compatibility-only,--feature: yes) - Check ADR links to Research, Reference, or Audit evidence and the status of decisions linked by active approved plans. Decision-free plans may have no ADR links.adr-status(--fix: yes,--feature: yes) - Validate ADR status against the canonical taxonomy. Warn about legacy declarations even alongside a canonical H1, and mismatches between superseded status and successor metadata. Repairs only quote a known token; missing or conflicting authority requires inspection.rename-integrity(--fix: yes,--feature: no) - Check name/filename integrity for rules, skills, and agents.encoding(--fix: no,--feature: yes) - Surface.vault/documents that are not valid UTF-8 (detection only).code-boundary(--fix: no,--feature: yes) - Scan source files for references to the project’s own vault records (opt-in; findings are advisory).foreign(--fix: no,--feature: no) - Warn about files the framework did not place inside the managed.vaultspec/or.vault/trees (detection only; findings are warnings, never errors).
compatibility-only means the flag is accepted but performs no repairs: evidence and
authority links need an explicit choice. yes = fully supported, partial = only the
sub-checks that accept --fix apply fixes (all dispatches to every check it runs),
no = flag rejected with error. all runs twenty of the twenty-one checks above:
code-boundary is opt-in and runs only when named, so an exit-0 all makes no claim
about it. structure does not support --feature filtering.
Use vaultspec-core vault repair when the operator goal is end-to-end recovery with
generated index refresh, post-fix validation, and a final delta report.
ExamplesLink to vaultspec-core vault check, Examples
Run all vault health checks to verify link integrity and directory structure:
Command
vaultspec-core vault check all
Audit and automatically repair dangling wiki-links:
Command
vaultspec-core vault check dangling --fix
Check feature completeness for a specific feature tag:
Command
vaultspec-core vault check features --feature test-feature
Scan for and report any generated template instructions or annotations:
Command
vaultspec-core vault check annotations --feature test-feature
Verify Obsidian-style wiki links in body text resolved against the vault:
Command
vaultspec-core vault check body-links
Audit rule, skill, and agent filenames for matching name tags:
Command
vaultspec-core vault check rename-integrity
Find all unreferenced (orphaned) documents in the vault:
Command
vaultspec-core vault check orphans
Validate document frontmatter fields against required templates:
Command
vaultspec-core vault check frontmatter --fix
Check wiki-link formats (ensuring no .md file extensions are used):
Command
vaultspec-core vault check links
Enforce architectural schema dependency rules:
Command
vaultspec-core vault check schema
Verify all external references are valid and up to date:
Command
vaultspec-core vault check references
Check directory structure and naming conventions for rules, skills, and agents:
Command
vaultspec-core vault check structure
vaultspec-core vault planLink to Vault commands, vaultspec-core vault plan
Usage synopsis
vaultspec-core vault plan [OPTIONS] COMMAND [ARGS]...
Inspect and manipulate plan documents per the plan-hardening convention. Plans declare a
complexity tier (L1, L2, L3, L4) in frontmatter and are structured as
Epic > Wave > Phase > Step. Every mutating operation goes through this surface.
Canonical identifiers (S##, P##, W##) remain append-only and gap-no-reuse.
vaultspec-core vault plan check flags hand-edits to checkbox glyphs or display paths.
ExamplesLink to vaultspec-core vault plan, Examples
Query all open steps in a plan:
Command
vaultspec-core vault plan query .vault/plan/2026-05-17-test-feature-plan.md --open
Append a Step to Phase P01 of an L2 plan:
Command
vaultspec-core vault plan step add --phase P01 --action "Implement login authentication handler" --scope "src/auth.py" .vault/plan/2026-05-17-test-feature-plan.md
Toggle completion checkbox of a step:
Command
vaultspec-core vault plan step toggle .vault/plan/2026-05-17-test-feature-plan.md S01
Renumber a phase to resolve duplicate identifier conflicts:
Command
vaultspec-core vault plan phase renumber --to P02 .vault/plan/2026-05-17-test-feature-plan.md P01
Validate the formatting and structure of an existing plan file:
Command
vaultspec-core vault plan check .vault/plan/2026-05-17-test-feature-plan.md
Mark a plan step completed (idempotent check):
Command
vaultspec-core vault plan step check .vault/plan/2026-05-17-test-feature-plan.md S01
Mark a plan step incomplete (idempotent uncheck):
Command
vaultspec-core vault plan step uncheck .vault/plan/2026-05-17-test-feature-plan.md S01
Insert a new step before an existing anchor step:
Command
vaultspec-core vault plan step insert --action "Validate input arguments" --before S02 .vault/plan/2026-05-17-test-feature-plan.md
Edit an existing step’s action prose and code scope:
Command
vaultspec-core vault plan step edit --action "New auth handler" --scope "src/auth.py" .vault/plan/2026-05-17-test-feature-plan.md S01
Move a step to a different phase inside the plan:
Command
vaultspec-core vault plan step move --to-phase P02 .vault/plan/2026-05-17-test-feature-plan.md S01
Retire a plan step permanently:
Command
vaultspec-core vault plan step remove .vault/plan/2026-05-17-test-feature-plan.md S01
Append a new phase to the current wave of a plan:
Command
vaultspec-core vault plan phase add --title "Authentication Layer" --intent "Set up secure login/signup" .vault/plan/2026-05-17-test-feature-plan.md
Insert a phase before an existing anchor phase:
Command
vaultspec-core vault plan phase insert --title "Database Setup" --before P02 .vault/plan/2026-05-17-test-feature-plan.md
Edit a phase’s title or intent prose in place:
Command
vaultspec-core vault plan phase edit --title "Updated Auth Setup" .vault/plan/2026-05-17-test-feature-plan.md P01
Move a phase to a different wave in the plan:
Command
vaultspec-core vault plan phase move --to-wave W02 .vault/plan/2026-05-17-test-feature-plan.md P01
Retire a phase along with all of its descendant steps:
Command
vaultspec-core vault plan phase remove .vault/plan/2026-05-17-test-feature-plan.md P01
Append a new wave to a plan:
Command
vaultspec-core vault plan wave add --title "Advanced Features" --intent "Add full-text search" .vault/plan/2026-05-17-test-feature-plan.md
Insert a wave after an existing anchor wave:
Command
vaultspec-core vault plan wave insert --title "Optimization Wave" --after W01 .vault/plan/2026-05-17-test-feature-plan.md
Edit a wave’s title or intent prose in place:
Command
vaultspec-core vault plan wave edit --title "Updated Core Wave" .vault/plan/2026-05-17-test-feature-plan.md W01
Move a wave to reposition it within the plan:
Command
vaultspec-core vault plan wave move --after W02 .vault/plan/2026-05-17-test-feature-plan.md W01
Retire a wave along with all of its descendant phases and steps:
Command
vaultspec-core vault plan wave remove .vault/plan/2026-05-17-test-feature-plan.md W01
Display the plan’s high-level Epic intent paragraph:
Command
vaultspec-core vault plan epic intent show .vault/plan/2026-05-17-test-feature-plan.md
Update the plan’s Epic intent paragraph:
Command
vaultspec-core vault plan epic intent edit --text "Epic intent text associating PM issues" .vault/plan/2026-05-17-test-feature-plan.md
Display the plan’s current complexity tier:
Command
vaultspec-core vault plan tier show .vault/plan/2026-05-17-test-feature-plan.md
Promote a plan’s complexity tier to L4:
Command
vaultspec-core vault plan tier promote --target L4 --epic-intent "Epic goal" .vault/plan/2026-05-17-test-feature-plan.md
Demote a plan’s complexity tier to L1:
Command
vaultspec-core vault plan tier demote --target L1 --force .vault/plan/2026-05-17-test-feature-plan.md
Read commandsLink to vaultspec-core vault plan, Read commands
status- Report plan health, structure, and completion.--jsonemits a machine-readable payload.check- Validate convention compliance; with--fix, apply autofixable transformations.query- Filter Step rows by--phase/--wavescope and--open/--closedpredicate.
vaultspec-core vault plan check exits 1 when at least one ERROR-severity finding is
present.
vaultspec-core vault plan statusLink to vaultspec-core vault plan, vaultspec-core vault plan status
Usage synopsis
vaultspec-core vault plan status [OPTIONS] PATH
Report plan health, structure, completion percentages, and identify missing execution records.
ArgumentsLink to vaultspec-core vault plan status, Arguments
PATH- Path to the.vault/plan/...-plan.mdplan file.
OptionsLink to vaultspec-core vault plan status, Options
--json(default off) - Emit machine-readable status payload.
General OutputLink to vaultspec-core vault plan status, General Output
When run without --json, the command renders a console summary displaying:
Plan Path & Complexity Tier: Declared level (
L1toL4).Container Counts: Total count of Epic, Waves, Phases, and Steps.
Completion Status: Checked vs. unchecked steps and total progress percentage.
Ledger Coverage (exec-missing)Link to vaultspec-core vault plan status, Ledger Coverage (exec-missing)
The status command pairs every checked step with the plan’s ledger:
If a step is checked (
[x]) in the plan but the ledger has no row naming it, the CLI generates a yellow warning block:Captured output
! exec-missing: checked steps lacking execution records: S01, S02
This warning does not block execution or raise exit codes; the command still exits with code
0.
Machine-Readable Output (--json)Link to vaultspec-core vault plan status, Machine-Readable Output (--json)
When passed --json, the output utilizes the uniform vaultspec.vault.plan.status.v1
schema envelope:
Captured output
{
"schema": "vaultspec.vault.plan.status.v1",
"status": "unchanged",
"data": {
"path": ".vault/plan/2026-05-17-test-feature-plan.md",
"tier": "L2",
"waves": 0,
"phases": 1,
"steps": 5,
"checked_steps": 2,
"completion_pct": 40.0,
"exec_missing_ids": ["S01", "S02"]
}
}
ExamplesLink to vaultspec-core vault plan status, Examples
Check the progress and ledger coverage of a plan:
Command
vaultspec-core vault plan status .vault/plan/2026-05-17-test-feature-plan.md
Step commandsLink to vaultspec-core vault plan, Step commands
add- Append a Step at the next-availableS##. Requires--actionand--scope. At L2 and above, also supply--phase; omit it at L1.insert- Insert at a named position with--before/--after; parent inferred from anchor.edit- Replace--action,--scope, or both without changing the canonical identifier.move- Re-parent (--to-phase), re-position (--before/--after), or both.remove- Retire the Step’s canonical id permanently; the next-available counter skips it.check- Mark the Step closed ([x]); idempotent.uncheck- Mark the Step open ([ ]); idempotent.toggle- Flip the Step’s checkbox state.
Phase commandsLink to vaultspec-core vault plan, Phase commands
add- Append a Phase at the next-availableP##. Requires--titleand--intent.insert- Insert at a named position with--before/--after.edit- Replace--title,--intent, or both in place.move- Re-parent (--to-wave), re-position (--before/--after), or both.renumber- Remediate a duplicated id via--to <P##>; refuses live / retired collisions.remove- Retire the Phase plus every descendant Step (cascading retirement).
phase renumber is the audited remediation surface for collisions inherited from legacy
plans. One example is a writer who treated P## as Wave-scoped rather than
per-document. The verb retires the old id so it cannot be reused, then recomputes every
descendant Step’s display path against the new parent canonical id.
Wave commandsLink to vaultspec-core vault plan, Wave commands
Identical shape to Phase, but the parent is implicit (Epic frame). Only
--before/--after re-position. No --to-epic flag exists. Wave operations require
L3 or L4.
Epic intent (L4 only)Link to vaultspec-core vault plan, Epic intent (L4 only)
intent show- Print the Epic intent paragraph.intent edit- Replace the Epic intent paragraph;--textmust declare the project-management (PM) association.
Tier commandsLink to vaultspec-core vault plan, Tier commands
show- Print the plan’s declared tier.promote- Advance the tier transitively, for example L1 -> L4 in one call. Synthesized containers use--phase-title/--phase-intent/--wave-title/--wave-intent/--epic-intentfor placeholders.demote- Step the tier down. Refuses with an error when the collapsing layer holds more than one container; pass--forceto retire the dropped ids and proceed.
Move-flag precedenceLink to vaultspec-core vault plan, Move-flag precedence
step move and phase move accept the re-parent flag (--to-phase / --to-wave) and
the position flags (--before / --after) independently or together:
Re-parent flag alone re-parents and appends to the destination tail.
Position flag alone re-positions within the current parent; the anchor must share that parent.
Both flags re-parent and position the item; the anchor must reside in the destination post-move.
A self-referential move (step move S01 --before S01) is rejected with the relevant
Move{Step,Phase,Wave}Error.
Identifier retirementLink to vaultspec-core vault plan, Identifier retirement
remove, multi-step demotion, and Wave / Phase removal all add the retired canonical id
to a hidden <!-- RETIRED: ... --> ledger embedded in the plan body. next_available_*
consults this ledger so retired identifiers are never reused, even across
parse / serialize round-trips invoked by --fix.
Trailer commandsLink to vaultspec-core vault plan, Trailer commands
emit- Print a well-formedVaultspec-SteporVaultspec-Featurecommit-linkage trailer line. Takes exactly one of--step(a Step or Phase display path, e.g.W01.P02.S06orP02) or--feature(a kebab-case feature tag, leading#optional).validate- Validate the commit-linkage trailers found in a commit-message file. Always exits0.
The commit-linkage trailer is an opt-in, advisory convention (per the accepted
commit-linkage ADR): a malformed or absent trailer never blocks a commit and never
fails a core command. validate reports each malformed trailer to stderr and always
exits 0, which makes it safe to wire up as a commit-msg-stage pre-commit hook. Teams
that want the check add a local hook entry to their .pre-commit-config.yaml; teams
that do not are unaffected:
File contents
- repo: local
hooks:
- id: vaultspec-plan-trailer
name: Validate vaultspec commit-linkage trailers
language: system
stages: [commit-msg]
entry: uv run vaultspec-core vault plan trailer validate
At the commit-msg stage, pre-commit passes the path to the commit-message file (for
example .git/COMMIT_EDITMSG) as the hook’s positional argument, which lines up with
validate’s MESSAGE_FILE argument - no extra flag is needed. Add uv’s --no-sync
flag to the uv run wrapper when the environment is already resolved and the hook
should skip the dependency check.
ExamplesLink to Trailer commands, Examples
Emit a Step trailer for a commit template:
Command
vaultspec-core vault plan trailer emit --step P02.S06
Emit a feature trailer:
Command
vaultspec-core vault plan trailer emit --feature commit-linkage
Validate a commit message file directly:
Command
vaultspec-core vault plan trailer validate .git/COMMIT_EDITMSG
vaultspec-core vault link listLink to Vault commands, vaultspec-core vault link list
Usage synopsis
vaultspec-core vault link list [OPTIONS] [SRC]
List related: edges in the vault document graph. Without SRC every edge in the graph
is listed. Given a SRC, the listing is scoped to that document: its out-links, meaning
the edges it declares, and its in-links, meaning the edges other documents point at it.
That in-link view is the quick way to answer “what would break if I retired this
document?”.
Use --feature to restrict the listing to edges whose source carries a given feature
tag. For a whole-graph picture rather than an edge list, use
vaultspec-core vault graph.
ArgumentsLink to vaultspec-core vault link list, Arguments
SRC(optional) - Scope the listing to edges from or to this document. Accepts stem, filename, path, or[[wiki-link]].
OptionsLink to vaultspec-core vault link list, Options
--feature TAG(-f) - Filter edges whose source has this feature tag.--json(default off) - Output as JSON.--target DIR(-t, default discovered) - Target directory.
ExamplesLink to vaultspec-core vault link list, Examples
See everything one document links to and everything that links back to it:
Command
vaultspec-core vault link list 2026-05-17-test-feature-adr
List only the edges declared by one feature’s documents:
Command
vaultspec-core vault link list --feature test-feature
vaultspec-core vault link addLink to Vault commands, vaultspec-core vault link add
Usage synopsis
vaultspec-core vault link add [OPTIONS] SRC DST
Add a related: edge from SRC to DST. Both arguments are resolved to document stems
and the edge is written into the source document’s related: frontmatter as a
[[wiki-link]]. Adding an edge that already exists is reported as unchanged, so the
command is safe to re-run.
By default a dangling edge - one whose target resolves to no real document - is refused;
pass --force when you deliberately want to link ahead to a document you have not
scaffolded yet. The command exits 0 when the edge was added or already existed, and
1 when either argument fails to resolve or a dangling edge is refused.
ArgumentsLink to vaultspec-core vault link add, Arguments
SRC- Source document to add the edge from. Accepts stem, filename, path, or[[wiki-link]]. Required.DST- Target document to link to. Accepts stem, filename, path, or[[wiki-link]]. Required.
OptionsLink to vaultspec-core vault link add, Options
--dry-run(default off) - Preview the change without writing.--force(default off) - Allow creating a dangling edge whose target is not a real document.--json(default off) - Output as JSON.--target DIR(-t, default discovered) - Target directory.
ExamplesLink to vaultspec-core vault link add, Examples
Link a plan to the decision record it carries out:
Command
vaultspec-core vault link add 2026-05-17-test-feature-plan 2026-05-17-test-feature-adr
Check what a link would write before writing it:
Command
vaultspec-core vault link add 2026-05-17-test-feature-plan 2026-05-17-test-feature-adr --dry-run
vaultspec-core vault link removeLink to Vault commands, vaultspec-core vault link remove
Usage synopsis
vaultspec-core vault link remove [OPTIONS] SRC DST
Remove a related: edge from SRC to DST. Only the source document is rewritten; the
target is left untouched. Removing an edge that does not exist is reported as unchanged
rather than as an error, so the command is safe to re-run and safe to script. It exits
0 on success or on a no-op, and 1 when either argument fails to resolve or the write
fails.
ArgumentsLink to vaultspec-core vault link remove, Arguments
SRC- Source document to remove the edge from. Accepts stem, filename, path, or[[wiki-link]]. Required.DST- Target document to unlink. Accepts stem, filename, path, or[[wiki-link]]. Required.
OptionsLink to vaultspec-core vault link remove, Options
--dry-run(default off) - Preview the change without writing.--json(default off) - Output as JSON.--target DIR(-t, default discovered) - Target directory.
ExamplesLink to vaultspec-core vault link remove, Examples
Drop a stale link between two documents:
Command
vaultspec-core vault link remove 2026-05-17-test-feature-plan 2026-05-17-old-adr-stem
Spec commandsLink to Spec commands
Group command: vaultspec-core spec [OPTIONS] COMMAND [ARGS]...
Spec subcommands that operate on a workspace accept --target / -t DIR. --json is
command-specific and appears only on commands that support machine-readable output.
vaultspec-core spec doctorLink to Spec commands, vaultspec-core spec doctor
Usage synopsis
vaultspec-core spec doctor [OPTIONS]
Run diagnostic collectors across the framework, providers, builtins, .gitignore, vault
content, and configuration files. Reports findings and exits with the highest severity
observed. The vault content row is read-only; when generated template annotations are
present, doctor reports a warning and points to
vaultspec-core vault sanitize annotations. Unreadable vault markdown files are
reported as warnings and are not modified.
OptionsLink to vaultspec-core spec doctor, Options
--target DIR(-t, default discovered) - Diagnose a directory other than the current one.--json(default off) - Emit the diagnosis as JSON.--gate-errors(default off) - Exit0on warnings and fail (exit2) only on errors. Intended for the pre-commit gate, where warning-level provider-mirror lag is an expected steady state that must not block a commit.
Exit codes: 0 = all ok, 1 = warnings, 2 = errors.
Not every line the diagnosis prints is weighed. The tool-server configuration line, the
process registry, and stale package seeds are reported for your attention and do not
raise the code, so a run can print warn and still exit 0. Do not infer failure from
the word warn in the output: read the exit code, or read status under --json. The
conditions that do raise it are the framework layout, the provider directories, the
builtins, .gitignore and .gitattributes, migrations, the pre-commit hooks, rename
integrity, vault content, and an install-mode or version-floor mismatch on any declared
package.
ExamplesLink to vaultspec-core spec doctor, Examples
Diagnose overall workspace health across configuration, git, and vault:
Command
vaultspec-core spec doctor
vaultspec-core spec rules / vaultspec-core spec skills / vaultspec-core spec agentsLink to Spec commands, vaultspec-core spec rules / vaultspec-core spec skills / vaultspec-core spec agents
Create, read, update, and delete (CRUD) operations for framework resources. All three groups share the same subcommand structure.
Usage synopsis
vaultspec-core spec rules [OPTIONS] COMMAND [ARGS]...
vaultspec-core spec skills [OPTIONS] COMMAND [ARGS]...
vaultspec-core spec agents [OPTIONS] COMMAND [ARGS]...
SubcommandsLink to vaultspec-core spec rules / vaultspec-core spec skills / vaultspec-core spec agents, Subcommands
list- List all resources.add NAME [--body BODY] [--from-file FILE] [--force] [--dry-run]- Create a resource.skills addandagents addalso accept--description TEXTfor the resource’s frontmatter summary, andskills addadditionally accepts--template NAMEto scaffold from a named template instead of an empty body.show NAME- Print resource content to stdout.edit NAME [--editor EDITOR]- Open in configured editor. Resolution order: –editor flag, local config, VAULTSPEC_EDITOR, VISUAL, EDITOR, vi. See which editors are accepted.remove NAME [--yes|--force](-y) - Delete a resource. Prompts unless confirmed.rename OLD_NAME NEW_NAME- Rename a resource.sync(--dry-run,--force) - Resource-scoped sync; use top-levelvaultspec-core syncfor a complete provider refresh.restore FILENAME- Restore to snapshotted original.status(--json) - Report dry-run sync with prune enabled, returning missing/drifted/stale status.
edit accepts the --editor option to override the editor binary for this invocation.
add accepts the unified --body flag for direct content or --from-file to read from
a file. Rules carry no description, so rules add has no --description; only skills
support --template.
Which editors are acceptedLink to vaultspec-core spec rules / vaultspec-core spec skills / vaultspec-core spec agents, Which editors are accepted
The editor setting names a command that is executed, so it is validated before anything is launched. Two rules apply to every source.
The command must be a program name or path followed by plain arguments. Arguments are
expected and supported - code --wait and subl -n -w are both fine, and a quoted path
containing spaces is fine - but shell metacharacters (;, &, |, `, $, %,
(, )), quoting syntax and control characters are refused. The editor is launched
directly rather than through a shell, so those characters have no meaning here.
The program itself must be a known text editor when the value arrives through the
--editor flag or through the project-local editor config key. Those two travel: a
flag can be composed by automation, and .vaultspec/config.toml is committed with the
workspace, so cloning a repository is enough to inherit its value. Roughly eighty
editors are recognised, including vi, vim, nvim, nano, micro, emacs,
helix, code, codium, cursor, zed, subl, kate, gedit, notepad, and the
JetBrains launchers. A rejection message lists the full set.
The VAULTSPEC_EDITOR, VISUAL and EDITOR environment variables are not limited
to that set. Setting an environment variable for a process already requires the ability
to run code as that user, so screening it would protect nothing while stranding anyone
whose editor is not recognised. If your editor is refused by the flag or the config key,
set it in the environment instead:
Command
export VAULTSPEC_EDITOR="/opt/my-editor --wait"
An editor named by a source that is simply not installed is skipped, and resolution continues down the ladder as before; only a value that resolves and is then refused stops the command, so the reason is never silently swallowed.
Editing is interactive by definition. A command invoked through the MCP gateway’s
invoke tool has no terminal attached, so no editor is opened for it from any source,
and the gateway refuses --editor outright rather than passing it through.
vaultspec-core spec <resource> sync commands are narrow maintenance surfaces. They do
not guarantee that provider-facing config stubs such as AGENTS.md, CLAUDE.md,
GEMINI.md, or .codex/config.toml have been fully refreshed. Run
vaultspec-core sync after source-side changes when the goal is a complete
provider-facing workspace.
ExamplesLink to vaultspec-core spec rules / vaultspec-core spec skills / vaultspec-core spec agents, Examples
List all rules, skills, or agents configured in the current project:
Command
vaultspec-core spec rules list
Create a new custom project-level rule:
Command
vaultspec-core spec rules add enforce-newline --body "All workspace source files must end with a single trailing newline."
Create a new custom skill from a local template:
Command
vaultspec-core spec skills add unit-test-runner --description "Run python pytest suite" --template "templates/skill_template.md"
Create a new custom agent persona:
Command
vaultspec-core spec agents add database_expert --description "An expert database optimization agent"
Display the content of a project rule:
Command
vaultspec-core spec rules show enforce-newline
Edit a project skill using a specified editor command:
Command
vaultspec-core spec skills edit unit-test-runner --editor zed
Delete a project agent persona:
Command
vaultspec-core spec agents remove database_expert --force
Rename a project-level rule atomically:
Command
vaultspec-core spec rules rename old-rule-name new-rule-name
Synchronize local rules changes to enrolled provider output stubs:
Command
vaultspec-core spec rules sync
Report parsing and synchronization status of project skills:
Command
vaultspec-core spec skills status
Restore a default rule to its original snapshotted version:
Command
vaultspec-core spec rules restore enforce-newline.builtin.md
vaultspec-core spec systemLink to Spec commands, vaultspec-core spec system
Usage synopsis
vaultspec-core spec system [OPTIONS] COMMAND [ARGS]...
SubcommandsLink to vaultspec-core spec system, Subcommands
show(--json) - Display system prompt parts and generation targets.sync(--dry-run,--force,--json) - Resource-scoped system prompt sync.
ExamplesLink to vaultspec-core spec system, Examples
Display assembled system prompt configuration and composition:
Command
vaultspec-core spec system show
Synchronize system prompts and stubs to provider workspaces:
Command
vaultspec-core spec system sync
vaultspec-core spec hooksLink to Spec commands, vaultspec-core spec hooks
Usage synopsis
vaultspec-core spec hooks [OPTIONS] COMMAND [ARGS]...
Agent-runtime hooks: shell commands your coding agent runs when something happens in a
session. Authored once in .vaultspec/hooks/ and rendered into each installed
provider’s native hook config. For the file format, the canonical events and each
provider’s spelling, see agent-runtime hooks.
This group does not manage vaultspec’s own lifecycle events. Those are triggers, and they are a separate directory, a separate command group, and a separate approval.
SubcommandsLink to vaultspec-core spec hooks, Subcommands
list(--json) - List this workspace’s hooks and the providers they render into.show NAME- Show one hook’s source file.status(--json) - Report parse errors and events no installed provider can run.sync(--dry-run,--force) - Render this workspace’s hooks into each provider’s native config.trust [NAME] [--revoke] [--json]- Approve this workspace’s hooks to be rendered into your agents’ configs, or withdraw that approval.
There is no hook add: a hook is a file you write in .vaultspec/hooks/, like a rule
or a skill.
add [NAME] [--event EVENT] [--command COMMAND] [--force] [--json]- Deprecated. Creates a trigger, not a hook, and is kept only so a caller of the pre-split name reaches what it meant. Usevaultspec-core spec triggers add.run EVENT [--json]- Deprecated. Fires a trigger, not a hook. Usevaultspec-core spec triggers run.
Both print a deprecation line naming the replacement, and both are removed one release
from now. They are listed rather than hidden because the operator reading --help to
find where add went is exactly the person who needs to be told.
Hook trustLink to vaultspec-core spec hooks, Hook trust
A hook file declares a shell command, and .vaultspec/hooks/ is shared through git like
the rest of your project policy, so a hook definition arrives with every clone and every
pull. That makes the file itself the wrong place to record whether its command may run:
anyone who can open a pull request could otherwise also grant themselves execution on
every machine that clones the branch.
A rendered hook raises the stakes over a trigger, because it runs inside your agent’s session on every matching tool call rather than once per sync.
vaultspec-core therefore treats a workspace’s hooks as untrusted until an operator says
otherwise, and records that decision outside the workspace - in the machine-global
VaultSpec home, ~/.vaultspec/hook-trust.json. Nothing a checkout, an archive, or a
clone carries can put an entry there. That file keeps its name from before hooks and
triggers were separated; its entries are keyed by resolved path, so the two systems’
approvals never collide.
Approval is per file and pinned to that file’s exact contents. Editing a hook, or
pulling a change to one, drops the approval until you grant it again, so a hook you
approved last month cannot quietly become a different command this month. It also means
a trusted hook stops running the moment its file changes, which is the intended trade: a
second vaultspec-core spec hooks trust after an intentional edit is cheaper than an
unnoticed one.
Anywhere without an operator - CI (
CIis set),--jsonoutput, redirected input,VAULTSPEC_NON_INTERACTIVE, or an MCP tool call - the hooks are skipped and the reason is written to stderr. There is no flag that auto-approves, because a flag a script can pass is a flag a repository can talk a script into passing.The refusal lives in the renderer, not in the prompt, so every route into it is gated and not only the ones that can ask. A hook with no source file on disk is refused for the same reason: nothing about it can be matched against the ledger.
You are asked before a sync that would render and before
vaultspec-core install --upgrade. A fresh install renders nothing, so it does not ask.Declining costs only the hooks. The sync itself still completes.
Revoking works end to end: the next sync omits the withdrawn hook and removes the entry it had written, rather than leaving it behind.
vaultspec-core spec hooks listshows atrustcolumn, so an enabled hook that is not running never has to be a mystery.The gateway’s
invoketool cannot reachvaultspec-core spec hooks sync,vaultspec-core spec hooks trust,vaultspec-core sync, orvaultspec-core installat all; they are denied at the MCP surface.
vaultspec-core spec hooks trust approves provider hooks only. When the workspace also
has unapproved triggers, it says so and names the verb that approves those, because the
two grants are separate.
ExamplesLink to vaultspec-core spec hooks, Examples
List this workspace’s hooks and where each one renders:
Command
vaultspec-core spec hooks list
See which declared events no installed provider can run:
Command
vaultspec-core spec hooks status
Approve this workspace’s hooks, then render them:
Command
vaultspec-core spec hooks trust vaultspec-core spec hooks sync
Preview a render without writing:
Command
vaultspec-core spec hooks sync --dry-run
Withdraw approval; the next sync removes what it rendered:
Command
vaultspec-core spec hooks trust --revoke
vaultspec-core spec triggersLink to Spec commands, vaultspec-core spec triggers
Usage synopsis
vaultspec-core spec triggers [OPTIONS] COMMAND [ARGS]...
Lifecycle triggers: shell commands bound to vaultspec’s own events, fired by the CLI
rather than by your agent. Source files live in .vaultspec/triggers/.
One event fires today, config.synced, after an all-provider vaultspec-core sync
completes. Two earlier events were declared but never emitted and have been retired; a
trigger bound to one is now reported rather than silently ignored.
SubcommandsLink to vaultspec-core spec triggers, Subcommands
list(--json) - List this workspace’s lifecycle triggers.add [NAME] [--event EVENT] [--command CMD] [--body BODY] [--from-file FILE] [--force] [--dry-run]- Add a new trigger.--eventdefaults toconfig.synced.show NAME- Display a trigger’s source file.edit NAME [--editor EDITOR]- Open a trigger in the configured editor.rename OLD_NAME NEW_NAME- Rename an existing trigger atomically.remove NAME [--yes|--force]- Delete a trigger.status(--json) - Report trigger parse errors and unsupported events.run EVENT [--path PATH]- Fire this workspace’s triggers for one lifecycle event.trust [NAME] [--revoke] [--json]- Approve this workspace’s triggers to run their shell commands as you, or withdraw that approval.
Trigger trustLink to vaultspec-core spec triggers, Trigger trust
Triggers carry the same consent model as hooks, for the same reason and through the same
machine-global ledger: a trigger file arrives with every clone, so approval is recorded
outside the workspace and pinned to each file’s contents. vaultspec-core sync and
vaultspec-core spec triggers run show you each untrusted trigger’s command and offer
to remember your approval, but only at an interactive terminal.
Approval is keyed by resolved path. Upgrading from a version that kept triggers in
.vaultspec/hooks/ relocates them, which drops their approval - run
vaultspec-core spec triggers trust once to restore it. The migration says so when it
moves them.
The gateway’s invoke tool cannot reach vaultspec-core spec triggers add,
vaultspec-core spec triggers run, or vaultspec-core spec triggers trust.
ExamplesLink to vaultspec-core spec triggers, Examples
Add a trigger that checks the vault after every sync:
Command
vaultspec-core spec triggers add post-sync-check --command "vaultspec-core vault check all"
List this workspace’s triggers and their trust state:
Command
vaultspec-core spec triggers list
Fire the triggers bound to the sync event:
Command
vaultspec-core spec triggers run config.synced
Report parse errors and events that no longer exist:
Command
vaultspec-core spec triggers status
Rename a trigger, then withdraw its approval:
Command
vaultspec-core spec triggers rename post-sync-check vault-gate vaultspec-core spec triggers trust vault-gate --revoke
vaultspec-core spec gitignoreLink to Spec commands, vaultspec-core spec gitignore
Usage synopsis
vaultspec-core spec gitignore [OPTIONS] COMMAND [ARGS]...
SubcommandsLink to vaultspec-core spec gitignore, Subcommands
disable(--json) - Decline the vaultspec-managed.gitignoreblock for the whole project.enable(--json) - Allow management of the.gitignoreblock for the whole project.
disable records blocks.gitignore = false in .vaultspec/workspace.json; commit this
file to share the policy. enable clears that override. Neither command edits
.gitignore; remove an existing managed block yourself if needed.
Install and upgrade create or restore the managed block unless project policy disables
it. Ordinary sync leaves a manually removed block absent on that machine. To restore it,
enable management and run vaultspec-core install.
Both commands exit zero when the requested policy already holds.
OptionsLink to vaultspec-core spec gitignore, Options
--json(default off) - Emit the result as JSON.--target DIR(-t, default discovered) - Act on a directory other than the current one.
ExamplesLink to vaultspec-core spec gitignore, Examples
Decline the block for the whole project:
Command
vaultspec-core spec gitignore disable
Resume managing it:
Command
vaultspec-core spec gitignore enable
vaultspec-core spec gitattributesLink to Spec commands, vaultspec-core spec gitattributes
Usage synopsis
vaultspec-core spec gitattributes [OPTIONS] COMMAND [ARGS]...
SubcommandsLink to vaultspec-core spec gitattributes, Subcommands
disable(--json) - Decline the vaultspec-managed.gitattributesblock for the whole project.enable(--json) - Allow management of the.gitattributesblock for the whole project.
These controls share the
availability and policy behavior of vaultspec-core spec gitignore,
using blocks.gitattributes in .vaultspec/workspace.json. The
default entries control line endings and
union merging of execution ledgers.
OptionsLink to vaultspec-core spec gitattributes, Options
--json(default off) - Emit the result as JSON.--target DIR(-t, default discovered) - Act on a directory other than the current one.
ExamplesLink to vaultspec-core spec gitattributes, Examples
Disable managed Git attributes for the project:
Command
vaultspec-core spec gitattributes disable
Resume managing it:
Command
vaultspec-core spec gitattributes enable
vaultspec-core spec precommitLink to Spec commands, vaultspec-core spec precommit
Usage synopsis
vaultspec-core spec precommit [OPTIONS] COMMAND [ARGS]...
SubcommandsLink to vaultspec-core spec precommit, Subcommands
disable(--json) - Decline vaultspec-managed.pre-commit-config.yamlscaffolding.enable(--json) - Restore vaultspec-managed.pre-commit-config.yamlscaffolding.migrate(--remove-yaml,--dry-run,--json) - Transplant the canonical vaultspec hooks intoprek.toml.
disable records hooks.pre_commit = false in .vaultspec/workspace.json to stop YAML
scaffolding. Commit this file to share the policy; enable clears the override. Neither
command changes existing configuration or uninstalls an active Git hook.
Install and upgrade can recreate missing YAML unless --skip precommit, project policy,
or an owning prek.toml prevents scaffolding. Ordinary sync leaves manually deleted
YAML absent. After enabling management, run vaultspec-core install to restore it.
With this policy disabled, reconciled ignore entries include /.pre-commit-config.yaml.
Ignoring a file does not untrack an existing committed copy. Both policy commands exit
zero when the requested state already holds.
When prek.toml owns the hook boundary, sync no longer scaffolds
.pre-commit-config.yaml and prek silently ignores it. migrate renders the canonical
hook set into a vaultspec-managed block inside prek.toml. It is idempotent -
re-running with the hooks already present is a no-op - and the superseded YAML config is
never deleted unless --remove-yaml is passed and the canonical hooks are verified
present in prek.toml.
OptionsLink to vaultspec-core spec precommit, Options
--remove-yaml(default off,migrateonly) - Also delete the superseded.pre-commit-config.yamlonce the canonical hooks are verifiably present inprek.toml.--dry-run(default off,migrateonly) - Preview without writing.--json(default off) - Emit the result as JSON.
ExamplesLink to vaultspec-core spec precommit, Examples
Stop vaultspec from ever writing the hook config again:
Command
vaultspec-core spec precommit disable
Restore managed scaffolding:
Command
vaultspec-core spec precommit enable
Preview the transplant without writing:
Command
vaultspec-core spec precommit migrate --dry-run
Transplant hooks, then remove the superseded YAML:
Command
vaultspec-core spec precommit migrate --remove-yaml
vaultspec-core spec mcpsLink to Spec commands, vaultspec-core spec mcps
Usage synopsis
vaultspec-core spec mcps [OPTIONS] COMMAND [ARGS]...
Manage canonical MCP server definitions in .vaultspec/mcps/*.json and reconcile them
into provider-native enrollment files. Provider targets are all, claude,
antigravity, and codex; scopes are project, local, and user. Unsupported
provider/scope combinations fail instead of writing to a substitute location. Use
top-level vaultspec-core sync for a complete refresh across all provider-facing
outputs.
SubcommandsLink to vaultspec-core spec mcps, Subcommands
vaultspec-core spec mcps list- List all registered MCP server definitions.vaultspec-core spec mcps trust [PROVIDER](--scope SCOPE,--target PATH,--source-from-cwd,--revoke) - Approve exact MCP commands after review and confirmation at an interactive terminal.--source-from-cwdapproves definitions from the current working directory for a top-levelvaultspec-core syncinvocation with a--targetdestination.--revokewithdraws existing grants; uninstall removes deployed entries.vaultspec-core spec mcps status [PROVIDER](--scope SCOPE,--json,--target PATH) - Inspect enrollment and ownership state without starting or probing MCP servers.vaultspec-core spec mcps add --name NAME [--config JSON] [--force]- Add a new custom MCP server definition.vaultspec-core spec mcps remove NAME [--force]- Remove an MCP server definition (--forceskips confirmation).vaultspec-core spec mcps sync [PROVIDER](--scope SCOPE,--dry-run,--force,--prune,--json,--target PATH) - Reconcile canonical definitions into provider-native enrollment.vaultspec-core spec mcps uninstall [PROVIDER](--scope SCOPE,--dry-run,--force,--json,--target PATH) - Remove only vaultspec-owned provider-native enrollment.
vaultspec-core spec mcps status exits 0 only when MCP config status is ok,
otherwise 1. It checks config health only and does not start or probe MCP server
processes. The default provider is all and the default scope is project. --force
on sync explicitly adopts or replaces same-name external enrollment; --prune removes
owned enrollment whose canonical source was deleted. uninstall preserves canonical
definitions and externally owned host entries.
ExamplesLink to vaultspec-core spec mcps, Examples
Verify the health and synchronization status of MCP server definitions:
Command
vaultspec-core spec mcps status
List all registered MCP server definitions:
Command
vaultspec-core spec mcps list
Sync registered MCP definitions to deployment files:
Command
vaultspec-core spec mcps sync
Inspect Codex project enrollment:
Command
vaultspec-core spec mcps status codex --scope project
Preview removal of vaultspec-owned Claude user enrollment:
Command
vaultspec-core spec mcps uninstall claude --scope user --dry-run
Register a new custom MCP server definition:
Command
vaultspec-core spec mcps add --name sqlite-mcp --config "{\"command\": \"npx\", \"args\": [\"@modelcontextprotocol/server-sqlite\"]}"
Remove a registered MCP server definition:
Command
vaultspec-core spec mcps remove sqlite-mcp --force
vaultspec-core spec referenceLink to Spec commands, vaultspec-core spec reference
Usage synopsis
vaultspec-core spec reference generate [OPTIONS]
Regenerate the generator-owned regions of the bundled machine-facing CLI reference
(src/vaultspec_core/builtins/reference/cli.md) from the live Typer command surface.
The reference is a hybrid of hand-written prose and generator-owned zones delimited by
vaultspec:generated HTML-comment markers; this verb rewrites only the managed zones
and leaves the prose untouched.
--check(default off) - Render in memory, diff against the committed file, exit non-zero on mismatch without writing.--json(default off) - Emit machine-readable output.
Default (write) mode rewrites the bundled reference in place when the managed regions
have drifted. --check mode is the CI and pre-commit entry point: it renders into
memory, prints a unified diff on mismatch, and exits non-zero, leaving the file
untouched (exit 0 when already in sync).
Refresh the bundled reference after a command or flag change:
Command
vaultspec-core spec reference generate
Verify the bundled reference is up to date (CI gate):
Command
vaultspec-core spec reference generate --check
Usage synopsis
vaultspec-core spec reference snapshot [OPTIONS]
Maintain src/vaultspec_core/builtins/reference/published-surface.json, the record of
the command and MCP tool surface of the latest published release - not a draft, not a
prerelease. The generated unreleased-surface regions of these documents are the
difference between that record and the live surface, which is why no version caveat in
them is hand-written.
--emit(default off) - Print this build’s own surface as a snapshot document to stdout and write nothing.--verify FILE- Compare a surface document (from--emit) against the committed record; exit non-zero when they differ.--record FILE- Write a surface document (from--emit, run inside the latest published release’s distribution) as the committed record; requires--development.--development(default off) - Explicitly authorize recording from a trusted development invocation. MCP callers cannot authorize reference maintenance.--json(default off) - Emit machine-readable output.
The record is never captured from a source tree. After publication, the release’s own
distribution is installed in isolation and read back with --emit, and --record
writes that document; a malformed document is refused and the record left untouched.
--verify proves the committed record is what that distribution exposes. Without a mode
flag the verb only reports the recorded version and counts. The three modes are mutually
exclusive.
Report what the committed record holds:
Command
vaultspec-core spec reference snapshot
Read a published distribution’s own surface back, in an isolated install:
Command
uv run --isolated --no-project --with vaultspec-core \ vaultspec-core spec reference snapshot --emit > surface.json
Record that surface as the committed record:
Command
vaultspec-core spec reference snapshot --record surface.json --development
Prove the committed record matches a published distribution:
Command
vaultspec-core spec reference snapshot --verify surface.json
Migration commandsLink to Migration commands
Group command: vaultspec-core migrations [OPTIONS] COMMAND [ARGS]...
Every migration subcommand also accepts the global --target / -t DIR and --json
flags.
The migration registry runs every entry whose target version exceeds the workspace
manifest’s vaultspec_version, then bumps the manifest version on success. Migrations
are idempotent, and because they relocate, rewrite, and delete tracked .vault/
documents they only run for a caller that asked to change the workspace:
vaultspec-core install --upgrade,vaultspec-core migrations run, andvaultspec-core vault repairrun the whole registry - converging is what you invoked them for.vaultspec-core vault add,vaultspec-core vault feature indexand the MCPcreatetool run only the entries that decide where their own write lands. Writing a document into a stale layout is what leaves one feature with two tracked indexes, so they fix that; they never rewrite or delete a document you did not name.
That second rule is deliberately narrow. A verb that writes one document has no standing to rewrite forty-seven others, so returning to a long-untouched workspace and adding one ADR converges the layout and leaves everything else exactly where it was. The entries that fold and remove documents wait for one of the three commands above.
Every other command, including every read (vaultspec-core vault list,
vaultspec-core vault graph, vaultspec-core vault check, and the MCP query tools),
leaves the workspace exactly as it finds it.
Anything left pending is reported rather than silently deferred: any command that
observes a stale workspace logs a warning naming the outstanding entries. Run
vaultspec-core migrations status to see them, and vaultspec-core migrations run to
apply them - it names every document it is about to remove and asks before it does.
Where deleted documents goLink to Migration commands, Where deleted documents go
Some migrations remove .vault/ documents - the execution-record folds replace a folder
of per-Step records with one ledger, and that consolidation is not expressible as an
additive rewrite. Before any of them unlinks a file, a byte-identical copy of it is
written to:
Captured output
.vault/.trash/<YYYYMMDD-HHMMSS>-<migration>/<the document's path under .vault/>
Each snapshot directory also carries a RESTORE.txt naming every copy’s original
location, so a file can be identified by the path it had rather than by its name alone.
How long they stay: forever. Nothing in vaultspec ever deletes a snapshot. A safety net that expires on a timer is not a safety net, and for a document authored since the last commit - or in a workspace whose
.vault/is not in git at all - the snapshot is the only copy that exists. The directory is listed in the managed.gitignoreblock, so it never enters the repository. Delete it yourself when you have decided the documents are not coming back;.vault/.trash/is always safe to remove in whole or in part.How to get one back: copy it. There is no restore command, because a snapshot is a plain directory of unmodified files and copying one back is the whole operation. Read
RESTORE.txtfor the destination, then:Command
cp .vault/.trash/20260517-120000-exec_ledger_only/exec/2026-05-17-demo/2026-05-17-demo-P01-S01.md .vault/exec/2026-05-17-demo/
If the copy cannot be written, nothing is deleted. A full disk or an unwritable
.vault/fails the migration before the first unlink and leaves the manifest version alone, so the next run re-attempts. Deleting because the backup failed is the one outcome worse than not deleting.
Preview a deletion before it happens with vaultspec-core migrations run --dry-run,
which enumerates every path the run would remove and changes nothing. The list comes
from the same planner the real run applies, so it is the run rather than a description
of one.
vaultspec-core migrations statusLink to Migration commands, vaultspec-core migrations status
Usage synopsis
vaultspec-core migrations status [OPTIONS]
List registered migrations and which entries are pending against the current workspace manifest. Read-only; never mutates.
OptionsLink to vaultspec-core migrations status, Options
--target DIR(-t, default discovered) - Inspect a workspace other than the current directory.--json(default off) - Emit status, registered list, and pending list as JSON.
Exit codes: 0 when up to date or workspace has no manifest, 1 when migrations are
pending.
ExamplesLink to vaultspec-core migrations status, Examples
List all registered schema migrations and check for pending entries:
Command
vaultspec-core migrations status
vaultspec-core migrations runLink to Migration commands, vaultspec-core migrations run
Usage synopsis
vaultspec-core migrations run [OPTIONS]
Apply every pending migration in version order and bump the manifest’s
vaultspec_version. A migration that fails stops the run and leaves the manifest
unchanged so the next invocation re-attempts it.
OptionsLink to vaultspec-core migrations run, Options
--target DIR(-t, default discovered) - Migrate a workspace other than the current directory.--dry-run(default off) - List every document the pending migrations would delete and change nothing.--yes(-y, default off) - Skip the confirmation prompt for deletions.--json(default off) - Emit per-entry summaries and counts as JSON.
When the pending migrations would delete documents, an interactive terminal is asked to
confirm unless --yes is passed. Non-interactive callers - CI, --json, the MCP
server, a piped or closed stdin - are warned and proceed rather than waiting for input:
the registry also runs from vaultspec-core install --upgrade,
vaultspec-core vault repair, and the authoring verbs that let the schema decide where
they write (vaultspec-core vault add, vaultspec-core vault feature index, and the
MCP create tool), so refusing here would only push a blocked script onto a trigger
that asks nothing at all. Either way, every removed document is copied into
.vault/.trash/ first.
Exit codes: 0 on success (including the no-pending no-op and every dry run), 1 if
any migration failed or an operator declined the deletion.
ExamplesLink to vaultspec-core migrations run, Examples
Preview every document the pending migrations would delete:
Command
vaultspec-core migrations run --dry-run
Execute all pending schema migrations and upgrade the workspace:
Command
vaultspec-core migrations run --yes
Config commandsLink to Config commands
Group command: vaultspec-core config [OPTIONS] COMMAND [ARGS]...
Manage local project configuration settings stored in .vaultspec/config.toml at the
workspace root.
Every config subcommand also accepts the global --target / -t DIR and --json flags.
vaultspec-core config getLink to Config commands, vaultspec-core config get
Usage synopsis
vaultspec-core config get [OPTIONS] KEY
Read a local configuration value.
OptionsLink to vaultspec-core config get, Options
--json(default off) - Emit machine-readable output.
ExamplesLink to vaultspec-core config get, Examples
Retrieve the local project-level editor setting:
Command
vaultspec-core config get editor
vaultspec-core config setLink to Config commands, vaultspec-core config set
Usage synopsis
vaultspec-core config set [OPTIONS] KEY VALUE
Write a local configuration value. Supported keys: editor.
The editor value is validated on write and again every time it is used, so a file
written by an older version or edited by hand cannot slip past the check. See
which editors are accepted. Reading and clearing keep
working on a value the edit path refuses - vaultspec-core config get editor,
vaultspec-core config list, and vaultspec-core config unset editor are all
unaffected - so an inherited setting can always be inspected and removed.
OptionsLink to vaultspec-core config set, Options
--json(default off) - Emit machine-readable output.
ExamplesLink to vaultspec-core config set, Examples
Configure the local project-level editor command to Zed:
Command
vaultspec-core config set editor zed
vaultspec-core config unsetLink to Config commands, vaultspec-core config unset
Usage synopsis
vaultspec-core config unset [OPTIONS] KEY
Clear a local configuration entry.
OptionsLink to vaultspec-core config unset, Options
--json(default off) - Emit machine-readable output.
ExamplesLink to vaultspec-core config unset, Examples
Clear the local project-level editor configuration:
Command
vaultspec-core config unset editor
vaultspec-core config listLink to Config commands, vaultspec-core config list
Usage synopsis
vaultspec-core config list [OPTIONS]
Enumerate all known configuration entries and current values.
OptionsLink to vaultspec-core config list, Options
--json(default off) - Emit machine-readable output.
ExamplesLink to vaultspec-core config list, Examples
Enumerate all local project-level configuration settings and values:
Command
vaultspec-core config list
Project coordinationLink to Project coordination
vaultspec-core project contextLink to Project coordination, vaultspec-core project context
Usage synopsis
vaultspec-core project context [OPTIONS] OBJECTIVE
Collect recent Git activity, branches, worktrees, and optional GitHub issues and PRs to
propose a bounded attention order for the developer’s objective. The command reads
project state without changing repositories or trackers. Missing sources are reported as
incomplete coverage. A configured TypeSafe key enables optional ranking; without a key,
with --no-hosted, or after a service failure, deterministic ordering is used.
ArgumentsLink to vaultspec-core project context, Arguments
OBJECTIVE- The developer outcome to prioritize.
OptionsLink to vaultspec-core project context, Options
--repo OWNER/REPO- Read issues and PRs from this GitHub repository usinggh.--previous FILE- Reuse unchanged judgments from a previous JSON result for up to one hour. Input is limited to 64,000 bytes.--limit INTEGER(default5, range1..10) - Maximum attention items returned.--no-hosted- Disable hosted ranking even when a key is configured.--target DIR(-t, default cwd) - Project directory to inspect.--json- Emit structured observations, coverage, ordering, and available usage.
ExamplesLink to vaultspec-core project context, Examples
Command
vaultspec-core project context "Finish the release and unblock active PRs" --no-hosted
vaultspec-core project context "Prioritize today's work" --repo owner/project --json
Review contextLink to Review context
vaultspec-core review contextLink to Review context, vaultspec-core review context
Command
vaultspec-core review context "Preserve caller contracts" --base main --candidate src/caller.py:20-70 --candidate tests/test_service.py:1-80 --json
Select supporting passages from an explicit Git review scope. This command reads
repository state without running checks or producing a review verdict. A configured
VAULTSPEC_CORE_TYPESAFE_API_KEY opts into sending the objective, bounded diff and
candidate passages to TypeSafe. Missing credentials, rejected keys, timeouts and service
failures preserve the supplied discovery order.
Arguments and optionsLink to vaultspec-core review context, Arguments and options
OBJECTIVE- Review behavior or constraint, 1..1,000 UTF-8 bytes.--base REF- Required base commit reference.--candidate PATH[:START-END]- Required tracked, repository-relative locator; repeat for 1..12 passages. A single line can usePATH:LINE.--head REF- Read the target commit and its candidate content. Without this flag, read tracked working-tree changes, including staged changes. Untracked files are excluded and working-tree reads are not atomic.--limit INTEGER- Return up to this many passages; default 3, range 1..6.--previous FILE- Reuse identical-input judgments from a JSON result up to 128,000 bytes for at most one hour. A key must remain enrolled. Statusreuseddoes not claim current service connectivity.--no-hosted- Disable hosted selection even with a configured key.--target DIR(-t, default cwd) - Git repository root.--json- Return thevaultspec.review.context.v1envelope.
Each candidate is at most 120 lines and 4,000 UTF-8 bytes from a file up to 1 MB. Larger passages need narrower locators. Collection has a shared 10-second budget; hosted selection makes one batch with a 15-second budget. A diff exceeding 24,000 bytes or involving environment/private-key paths disables hosted selection. Candidate environment stores, conventional key files, symlinks and paths outside the repository are excluded. These path protections are not general secret scanning.
The result carries verbatim selected passages and hashes, unselected locators,
exclusions, diff scope, hosted status, usage and a reusable judgment. Source text is not
rewritten by the model. Candidate exclusions and hosted failure exit 0 with reasons;
invalid input or an unavailable Git scope exits 2. The existing MCP discover/invoke
gateway exposes the same command; repeatable candidate flags accept a JSON array.
Keep the full diff and governing decisions in the review. Expand omitted context when needed, share selections across reviewers, and reuse applicable verification results. Ranking is optional supporting evidence, not proof of correctness or complete coverage.
Settings resolutionLink to Settings resolution
One order holds for every setting, in every process kind (CLI, MCP server, and any package that imports vaultspec-core’s public resolvers). Earlier rungs win:
Invocation - a CLI flag or an explicit programmatic override for that call.
Session environment - the process’s own environment. For a setting the framework shares, a companion package’s scoped name is read first -
VAULTSPEC_<PKG>_ROOT,VAULTSPEC_<PKG>_LOG_LEVEL,VAULTSPEC_<PKG>_STDIO_WATCHDOGand falls back to the framework name behind it -
VAULTSPEC_TARGET_DIR,VAULTSPEC_LOG_LEVEL,VAULTSPEC_STDIO_WATCHDOG- when it supplies nothing. A credential never chains.
Project store -
.vaultspec/.env, for the persistable settings only, written only by an explicit import; see local environment provisioning.Workspace
.env- credentials only, under the gate below.Persisted configuration - the single store that owns the key:
.vaultspec/config.tomlor.vaultspec/workspace.json.Derived and external defaults -
pyproject.tomlmode detection, or a third-party convention with a product equivalent, such asVISUALthenEDITOR.The shipped default, declared once in the table below.
The workspace .env is <workspace root>/.env. It is never found by walking up from
the working directory or from where the package is installed, and no variant
(.env.local and the like) is read. It supplies a credential - today only
VAULTSPEC_CORE_TYPESAFE_API_KEY - one name at a time, and only when both hold: the
running interpreter lives inside the workspace (its project virtual environment), and
the owning package’s own resolved install mode for that workspace is dependency or
dev. A uvx invocation or a globally installed tool (such as a uv tool, a pipx
install, or a release binary) pointed at a fresh clone never reads that repository’s
.env.
No .env file is ever committed, this one or any other: dotenv files hold secrets. The
managed .gitignore block ignores every .env and .env.* file at any depth, leaving
only .env.example templates committable; the commit gate refuses one that is
force-added; and vaultspec-core doctor warns when the Git index already tracks one. An
ignore rule cannot untrack a file, so a tracked .env needs git rm --cached and every
secret it held rotated.
Booleans read one vocabulary: 1, true, yes or on against 0, false, no or
off, case-folded and stripped. A blank value is unset, not off, and falls through to
the next rung. An invalid value for a product-owned variable refuses the process and
names the variable, the value and the expected shape. The stdio watchdog is the one
protective switch that instead warns and stays armed: refusing to start is not a safer
outcome than running guarded.
Environment variablesLink to Environment variables
vaultspec-core owns the VAULTSPEC_ variables below and honours a few external
conventions, listed after them. Environment variables override the default and are
overridden by the invocation.
VAULTSPEC_TARGET_DIR(path, default discovered) - Root workspace directory (where.vault/and.vaultspec/live), for every process kind: the CLI, the MCP server, and any importing package. Equivalent to--targeton the CLI. Ranked below an explicit--targetand above discovery from the working directory; a directory that does not exist is refused rather than discovered past.VAULTSPEC_DOCS_DIR(str, default.vault) - Vault directory name.VAULTSPEC_INDEX_DIR(str, defaultindex) - Name of the subdirectory inside the vault that holds the auto-generated feature indexes (<feature>.index.md).VAULTSPEC_FRAMEWORK_DIR(str, default.vaultspec) - Framework directory name.VAULTSPEC_CLAUDE_DIR(str, default.claude) - Claude tool directory name.VAULTSPEC_GEMINI_DIR(str, default.gemini) - Gemini tool directory name.VAULTSPEC_ANTIGRAVITY_DIR(str, default.agents) - Antigravity directory name.VAULTSPEC_IO_BUFFER_SIZE(int, default8192) - I/O read buffer size in bytes.VAULTSPEC_TERMINAL_OUTPUT_LIMIT(int, default1000000) - Subprocess stdout capture limit in bytes.VAULTSPEC_LOCK_TIMEOUT_SECONDS(float, default120.0) - Total seconds a single advisory-lock acquisition may wait before failing with a diagnosable timeout instead of blocking indefinitely. Covers the in-process and cross-process layers combined. Raise it if a large corpus or a slow network volume makes legitimate contention exceed the budget.VAULTSPEC_EDITOR(str, unset by default) - Editor command every surface that opens an editor consults - the edit verbs (vaultspec-core spec {rules|skills|agents} edit) and interactive creation of a rule, skill, agent, or trigger alike. Read after the--editorflag and before the project config key,VISUALandEDITOR;viis the last rung when none of them answers. Unlike the flag and the config key, an editor named in the environment is not restricted to the recognised set; see which editors are accepted.VAULTSPEC_CORE_TYPESAFE_API_KEY(secret, unset by default) - TypeSafe API key for hosted vault search (vaultspec-core vault searchand the MCPsearchtool), ADR wording checks, and optional project and review context ranking. Read from the process environment, then the provisioned.vaultspec/.envproject store. A workspace-root.envsupplies it only when both omit it, and then only under the credential gate above. Only this one variable is read from that file. Blank counts as unset at every source. The genericTYPESAFE_API_KEYdoes not enable it. The key never appears in output;vaultspec-core statusreports only whether one is configured and from which source.VAULTSPEC_LOG_LEVEL(str, defaultWARNINGfor the CLI,INFOfor the MCP server)Root log level when neither
--debugnor--verboseis given, for exampleDEBUG,INFO, orWARNING. An unknown name is refused.
VAULTSPEC_JSON_PRETTY(bool, unset by default) - Indents--jsonoutput. A true word turns it on; unset, blank or a false word leaves the envelope one compact line.VAULTSPEC_NO_HINTS(bool, unset by default) - Set to a true word to drop theNext actionsblock the commands print after their report. Equivalent to--no-hints. Unset, blank or a false word leaves the hints in place.VAULTSPEC_NON_INTERACTIVE(bool, unset by default) - Set to a true word to declare that no operator is watching: repository triggers awaiting approval are skipped instead of prompted for. OutranksCIin both directions, so a wrapper script running under CI with somebody watching can say so withVAULTSPEC_NON_INTERACTIVE=0.VAULTSPEC_STDIO_WATCHDOG(bool, unset by default; armed) - Lifetime watchdog for the MCP server, on by default. A false word disables it, which leaves the server to exit on stdin EOF alone. Unset, blank, or an unrecognised word leaves it armed: it is a protective switch, so a typo warns rather than turning the guard off. Read byvaultspec-core-mcprather than by the CLI; see the MCP reference.VAULTSPEC_MCP_GATEWAY_INVOCATION(str, unset by default) - Internal, set by vaultspec-core itself: the MCP invoke gateway sets it on every CLI process it spawns. Any non-empty value marks the process as having no terminal, so it refuses to open an editor. Not an operator setting.
vaultspec-core also honours these external variables. It does not own them.
CI(presence) - Set by CI systems. Same effect asVAULTSPEC_NON_INTERACTIVE.NO_COLOR(non-empty string) - Set to any non-empty value to disable colour in console output, as the no-color.org convention defines it. Set but empty is not a request for monochrome output.GIT_INDEX_FILE(presence) - Set by git for every commit hook it runs. While it is set, commands print noNext actionsblock and no--fixsuggestion for a finding, because hook output is often acted on without review.COLUMNS(int) - Console width. When unset, the width is read from the terminal once at startup.VISUAL,EDITOR(str) - Editor commands the edit verbs consult afterVAULTSPEC_EDITORand the project config key, in that order.CLAUDE_CONFIG_DIR(path, default home directory) - Claude Code’s configuration home, whose.claude.jsonholds user-scope MCP servers.CODEX_HOME(path, default~/.codex) - Codex’s home, whoseconfig.tomlholds user-scope MCP servers.
See alsoLink to See also
Framework manual - Development workflow, skills, and customization.
MCP reference - MCP server tools, setup, and configuration.
For bug reports and feature requests, open an issue on the vaultspec-core issue tracker.