Documentation

Install, configure, and use vaultctl.

Installation

Docker (Server)

Run the REST API server in Docker:

# Build the image from source
docker build -f packages/server/Dockerfile -t vaultctl .

# Run
docker run -d \
  --name vaultctl \
  -p 3000:3000 \
  -v /path/to/your/vault:/vault \
  -e VAULT_PATH=/vault \
  -e AUTH_USER=admin \
  -e AUTH_PASSWORD=<your-secure-password> \
  vaultctl

Native macOS App

Download Vaultctl.app from the releases page. Code-signed with Developer ID and notarized by Apple.

From Source

Clone the repository from GitHub and build:

git clone <repo-url>
cd vaultctl
npm install && npm run build
alias vaultctl="node $(pwd)/packages/cli/dist/index.js"

Verify

vaultctl --version
vaultctl info
npm run test  # 466 tests across 33 files

Configuration

Set the vault path via CLI (recommended):

vaultctl config set vault /path/to/your/vault

This writes the absolute path to ~/.vaultctlrc. You can also use an environment variable:

VAULT_PATH=/path/to/vault vaultctl health

Expected folder structure (PARA method):

00_Inbox/        # Uncategorized notes
01_Projects/     # Active projects
02_Areas/        # Ongoing responsibilities
03_Resources/    # Reference material
04_Archive/      # Completed/inactive

CLI Reference

All commands accept --json for machine-readable output.

Core

vaultctl read <path>Read note content and metadata
vaultctl search <query>Full-text search
vaultctl infoVault statistics
vaultctl healthRun all 9 health checks
vaultctl health --fixAuto-fix fixable issues

Intelligence

vaultctl enrich <path>AI-enrich a note (summary, links, patterns)
vaultctl similar <path>Find similar notes
vaultctl intelligenceCross-vault pattern detection

Temporal

vaultctl timelineChronological vault activity
vaultctl dailyDaily summary
vaultctl weeklyWeekly summary with stats
vaultctl reviewNotes needing attention

Schema

vaultctl schema showShow current schema
vaultctl schema diffDeclaration vs reality
vaultctl schema impact --add-field <f> --type <t>Simulate a schema change

Management

vaultctl tagsAll tags with counts
vaultctl rebuildRebuild search index
vaultctl brief <project>Generate project brief

REST API

Base URL: http://localhost:3333/api/v1/

GET /api/v1/knowledgeList/search knowledge nodes (?q=, ?type=, ?status=)
GET /api/v1/knowledge/:idRead a specific note by ID
PUT /api/v1/knowledge/:idCreate or update a note
DELETE /api/v1/knowledge/:idSoft-delete (archive) a note
GET /api/v1/healthHealth check results
POST /api/v1/health/fixAuto-fix health issues
GET /api/v1/graphKnowledge graph (nodes + edges)
GET /api/v1/tagsTag listing with counts
GET /api/v1/schema/diffSchema declaration vs code enforcer
POST /api/v1/schema/impactSimulate schema change impact
POST /api/v1/enrich/*AI-enrich a note
GET /api/v1/eventsSSE event stream
POST /api/v1/chatAI chat (streaming SSE)

SSE stream at /api/v1/events emits vault:activity on mutations.

MCP Server

MCP server for Claude Code, Claude Desktop, or any MCP-compatible client.

Configuration

// ~/.claude.json
{
  "mcpServers": {
    "vaultctl": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/vaultctl/packages/mcp/dist/index.js"],
      "env": { "VAULTCTL_PATH": "/path/to/your/vault" }
    }
  }
}

Tools (25)

knowledge_query, knowledge_read, knowledge_write, knowledge_timeline, health_check, health_fix, enrich, find_similar, suggest_links, intelligence_patterns, note_create, review_queue, daily_summary, weekly_summary, project_brief, session_start, session_end, session_decision, tags_list, stats, schema, schema_diff, schema_impact, index_rebuild, config_get

Health Engine

9 schema-driven validators. Type-specific rules declared in _meta/schema.yaml.

frontmatter-existsYAML frontmatter present and parseable
universal-fieldsRequired universal fields present (type, created, updated, tags, status, summary, source_ai, confidence)
type-fieldsType-specific required fields present
type-folderNote type matches its PARA folder
namingFile naming conventions followed
broken-linksAll [[wikilinks]] resolve to existing notes
stalenessOverdue deadlines, stale inbox, active notes in archive
contentNote body has meaningful content
sync-artifactsNo sync conflict artifacts (Syncthing, git)

Schema Governance

Declare schema in _meta/schema.yaml, validate with schema diff, simulate changes with schema impact.

Declaration

noteTypes:
  project:
    requiredFields: [status, tags, created]
    folder: 01_Projects
    statuses: [active, paused, completed]
  concept:
    requiredFields: [tags, created]
    folder: 03_Resources
    statuses: [active, paused, completed, archived, someday, draft]

globalRules:
  maxOrphans: 5
  maxStaleDays: 90
  requiredTags: [type]

Diff

$ vaultctl schema diff

  Type 'project':
    ✗ 2 notes missing 'status' field
    ✗ 1 note in wrong folder

  Type 'concept':
    ✓ All notes compliant

  Global:
    ✗ 3 orphans (max: 5) ✓
    ✗ 12 stale notes (max: 90 days)

Impact simulation

$ vaultctl schema impact --add-field priority --type project --required

  Impact: 15 of 23 project notes would fail
  Missing 'priority': 15 notes
  Already compliant: 8 notes

Native macOS App

SwiftUI app using JavaScriptCore to run @vaultctl/core natively.

Features

  • Dashboard with vault stats and recent activity
  • Note browser with full-text search
  • Inline markdown editor with wikilink autocomplete
  • Force-directed knowledge graph with clustering
  • Calendar with year heatmap and streaks
  • Health dashboard with fix actions
  • AI enrichment panel
  • Inbox triage and batch categorization

Build from source

cd packages/native
swift build -c release
bash scripts/build-app.sh  # signs + notarizes
cp -R build/Vaultctl.app /Applications/

Note Structure

Markdown files with optional YAML frontmatter. Core parses frontmatter for metadata and body for wikilinks.

Frontmatter fields

typeNote type (11 built-in: project, area, resource, person, concept, meeting, daily, decision, tool, inbox, context)
statusLifecycle: active, paused, completed, archived, someday, draft
tagsArray for faceted search
createdISO date (YYYY-MM-DD)
updatedISO date, auto-updated on modification
summaryShort description (manual or AI-generated)
source_aiContent provenance: 'manual', 'claude', etc. (string)
confidenceConfidence level (high, medium, low)

AI Enrichment

Uses the Anthropic API (Claude). Set ANTHROPIC_API_KEY as an environment variable. All AI features are opt-in.

  • Summary generation: Concise summary from note body
  • Link suggestions: Notes that should be wikilinked
  • Pattern detection: Hub notes, clusters, knowledge gaps
  • Similar notes: Related notes by content similarity

No data sent to any API unless you explicitly run an enrichment command or use the MCP server with an AI assistant.

Claude Code Integration

vaultctl is designed to work as the knowledge backbone for Claude Code sessions. A full integration guide covers MCP setup, CLAUDE.md patterns, skills, memory tiers, and session workflows.