Command line

mindin --help and mindin <command> --help print every option. The commands for tools that drive agents (task, log, snapshot, status) are in Agent commands.

Setting up a machine

mindin setup                            # asks where the vault lives, in a terminal
mindin setup --folder ~/vault
mindin setup --s3 <bucket> --endpoint <url> [--prefix <prefix>] [--region <region>]
mindin setup --server <url> [--vault <slug>] [--no-browser]
mindin about [--json]                   # name, version and the commands for tools

setup saves the choice in mindin/config.toml under XDG_CONFIG_HOME (default ~/.config/mindin/config.toml), as a [vault] table with kind set to folder, s3 or server. A folder must exist; asked in a terminal, setup offers to create it. --s3 reads the bucket's keys from S3_ACCESS_KEY and S3_SECRET_KEY, or asks for them in a terminal, and keeps them in credentials.json next to the config, readable only by you, never in config.toml. --server signs the machine in with login unless it holds a key already. Running setup again replaces the choice.

about --json prints the contract tools read.

mindin serve --transport stdio          # the default, also with no subcommand
mindin serve --transport http --host 0.0.0.0 --port 8765
mindin init [--preset default|para|simple|journal|custom] [--force]
mindin sync [--rebuild]                 # refresh the index; --rebuild reads every note again
mindin embed-worker [--listen 127.0.0.1:7400] [--model <name>]  # the model in its own process
mindin search "bokning" --limit 5       # the same ranking, from a shell
mindin context [--path ~/projects/myapp] # what a session in this repo starts with
mindin read Projects/myapp-idea.md [--body] [--raw]
mindin lint [--kind orphans] [--write Log/lint.md] [--park-stale]
mindin backlog [--area myapp] [--priority high] [--paths] [--all]
mindin changelog myapp 2026-08 --repo-path ~/projects/myapp [--write]
mindin changelog --all                  # this month, and last month during its first week
mindin hook session-start | stop        # the Claude Code hooks, JSON on stdin

serve --host defaults to 127.0.0.1 and --port to 8765. embed-worker is described in Search by meaning. Through a server, sync only says that the server keeps the index.

Signing in to a server

mindin login [<url>] [--vault <slug>] [--name laptop] [--no-browser]
mindin whoami [<url>]
mindin logout [<url>] [--vault <slug>]
mindin vault list | use <slug> [--dir <folder>] [--url <url>] | drop --dir <folder> [--url <url>]

Without <url> or --url they take VAULT_SERVER_URL. See Sign a machine in.

On the server's machine

mindin accounts list | invite <email> | suspend <account> | activate <account>
mindin accounts delete <account> --yes
mindin accounts vaults <account>
mindin accounts add-vault <account> <name> [--slug <slug>] [--preset <layout> | --shared]
mindin accounts rename-vault <account> <slug> [--name <name>] [--slug <slug>]
mindin accounts members <owner> <slug>
mindin accounts add-member | remove-member <owner> <slug> <email>
mindin accounts import <account> [--vault <slug>] (--from-path <dir> | --from-s3-bucket <bucket> [--from-s3-prefix <prefix>] [--from-s3-endpoint <url>] [--from-s3-region <region>]) --operator <name> --reason <text>
mindin support files <account> [--vault <slug>] --operator <name> --reason <text>
mindin support read <account> <path> [--vault <slug>] --operator <name> --reason <text>
mindin master-key generate | status | rewrap

See Manage accounts, Support access and import and Back up and rotate keys.

Output

In a terminal, search, context, read, backlog and lint print for a person:

  • search shows each note's title with its kind and age, its path below it, and the matching text with wikilinks unwrapped; ≈ meaning marks a note found by meaning rather than by its words.
  • backlog is one row per idea with its priority, area and age; --paths adds each note's path, and past 20 ideas the list is grouped by priority and ends with how many more there are, which --all shows.
  • read turns the frontmatter into a title and one line (kind, area, status, age, tags) above the text.
  • context sums up what the session-start hook gives an agent for the repo you stand in, or for --path: the system note, the commits newer than it, open tasks, the backlog, traps and the last log line.
  • lint counts the findings per kind with a plain explanation, and --kind lists one kind.

Rows are cut at the terminal's width, and a path is always printed whole so you can copy it.

In a pipe, a script or a hook, and with --plain, every command prints plain lines, and context prints what the session-start hook prints. read --raw prints the file exactly as stored, and read --body only the text after the frontmatter. NO_COLOR=1 keeps the layout without colour.

lint

lint reads every note and reports broken_frontmatter, missing_required (per field), invalid_field, missing_area, unknown_tags (only with a strict vocabulary), unresolved_links, orphans (no inbound wikilink; log and archive ignored), stale_active, done_not_closed, archive_status_mismatch, duplicate_stems and superseded_target_missing.

--write <path> also keeps the report as a note. --park-stale parks stale task notes; see Run lint every week.

changelog

changelog <repo> <period> prints the log lines, the git commits grouped by day, and the repo's notes dated inside the period (YYYY or YYYY-MM), each day whole from midnight to midnight. --repo-path is the git checkout to read commits from.

With --write it keeps that as a period page, Log/<repo>-<period>.md, between the markers <!-- changelog:generated --> and <!-- /changelog:generated -->. Prose above the markers, such as a summary written at month end, is left alone, and the page's status follows the calendar. --all does it for every repo the session-start hook has seen on this machine, and the stop hook runs that once a day, so the pages stay current without a cron. Through a server, the commits are read on this machine and the page is written on the server.

Where commands find the vault

Every command, the stdio server included, takes the first of these that names a vault:

  1. The environment (Configuration).
  2. mindin's own config, written by setup.
  3. The Claude Code plugin's saved user config.

status says which one decided, in source: env, config or plugin. The plugin's config is pluginConfigs["vault@<marketplace>"].options in $CLAUDE_CONFIG_DIR/settings.json (default ~/.claude/settings.json), mapping vault_path, s3_endpoint, s3_bucket, s3_access_key, s3_secret_key, s3_prefix, s3_region and vault_server_url to their variables, with the secrets from Claude Code's credentials store when they are kept there.