Skip to content

feat(import): note-vault importers — obsidian, joplin, notes, keep, markdown folders #612

Description

@plind-junior

What you're trying to do

people arrive with years of notes already written — obsidian vaults, joplin
archives, apple notes and google keep exports, plain markdown folders — and
vouch has nothing to say to them. a fresh KB starts empty and stays empty until
someone does enough work in it.

ditto imports all of the above plus chatgpt / claude / gemini / perplexity
exports (heyditto.ai/docs/importing-your-memory), deduping on stable source ids
so re-importing the same export is safe, up to 200 MiB.

vouch has chatgpt_import.py, codex_rollout.py, vouch ingest and the inbox
folder drop. the gap is note vaults — and note vaults are where vouch has an
advantage ditto structurally cannot match: every note is a file with byte
offsets, so imported knowledge can be receipt-backed and citable rather than
paraphrased into an embedding.

What you've tried

  • vouch ingest <file> → works per-file; no vault semantics (frontmatter,
    wikilinks, folder structure), no idempotent re-run.
  • inbox folder drop → registers and proposes per file, but dropping a
    10,000-note vault into it is not a migration story.
  • vouch import-chatgpt → the shape to copy, one source only.

Suggested shape

vouch import obsidian <vault>
vouch import joplin <path|.jex>
vouch import notes|keep <export>
vouch import md <folder>
  • one source per note; note title and path preserved; frontmatter carried into
    source metadata; wikilinks become relation proposals where the target
    resolves.
  • stable source ids derived from the origin's own identifier, so re-running
    an import updates rather than duplicates — the property that makes this safe
    to run repeatedly, and the one ditto calls out explicitly.
  • claims proposed through the existing selection knob (feat(extract): ingest selection knob + keep dotted numbers intact #541) so a large vault
    does not produce ten thousand pending claims; --max-claims applies.
  • everything lands PENDING. an import is a proposal firehose, not a write.

Compatibility considerations

additive; new CLI subcommands, no kb.* method, no schema change beyond a
stable-id field on sources (nullable, back-compatible).

scale is the real question: a big vault needs a batched, resumable import and a
sane review story on the other side — a triage view over "everything from this
import" is probably a precondition for it being usable, not a nice-to-have.

sibling of #431 (conversation-export importers) — same vouch import <kind>
surface, different sources. worth landing the surface once.

Alternatives

  • document "convert your vault to markdown and use the inbox" — technically
    true, and nobody will.
  • an obsidian plugin that writes into vouch — pushes the gate to the wrong side
    of the boundary.

part of the ditto-style track — see .superpowers/DITTO-STYLE-PLAN.md (T4.1).

Metadata

Metadata

Assignees

No one assigned

    Labels

    clicommand line interfaceenhancementNew feature or requeststoragekb storage, migrations, schemas, and proposals

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions