Documentation

Advanced config

advanced.yaml, embeddings, search, clustering, AI timeouts, and prompts for power users.

Everything in Settings has a sensible default. For the knobs that don’t belong in a Settings window, there is advanced.yaml:

~/Library/Containers/com.gisti.app/Data/Library/Application Support/com.gisti.app/advanced.yaml

Settings → Storage → Location opens that folder directly in Finder – easier than typing the path by hand. Create the file, add only the keys you want to change, restart Gisti. Missing keys keep their defaults.

Sections

embedding:
  modelId: mlx-community/Qwen3-Embedding-0.6B-4bit-DWQ
  queryInstruction: "Retrieve relevant documents and notes matching the search query"
  maxTokenLength: 1024
  maxBatchSize: 4
  gpuCacheLimitMb: 512
  maxTextLength: 4000
  indexBatchSize: 8
  indexBatchSleepMs: 200
  textChunkPreviewLength: 200

search:
  minSimilarity: 0.4      # semantic match threshold
  topK: 20                # candidates per search
  similarTopK: 5          # candidates for the "Similar" accordion
  similarMinSimilarity: 0.55
  topicsTopK: 50          # candidates feeding Topics clustering
  rrfK: 60                # Reciprocal Rank Fusion constant (hybrid search)
  debounceMs: 250
  itemTextCap: 16384      # per-item text length fed to the index

fuzzy:
  minWordLength: 4        # shorter words match exactly only
  maxEditDistance: 1      # typos tolerated per word
  exactMatchSkipThreshold: 20
  maxResults: 5

clustering:
  maxIterations: 30       # KMeans iteration cap
  maxTopics: 11           # upper bound for Topics mode
  minVectors: 4           # elements needed to form a topic
  labelCandidateCount: 20

aiTimeouts:
  summarizeSeconds: 60
  chatSeconds: 120
  titleSeconds: 30
  testSeconds: 10

aiLimits:
  summarizeInputMaxChars: 10000
  summarizeMaxTokens: 8192
  chatMaxTokens: 4096
  titleMaxTokens: 32
  attachmentTextMaxChars: 20000
  attachmentImageMaxDimension: 1568
  attachmentMaxFileBytes: 10485760
  attachmentImageMaxFileBytes: 52428800
  digestInputMaxChars: 20000     # char budget for the Gist-mode digest prompt
  digestItemsPerTypeMax: 50      # per-type item cap when sampling for the digest

clipboard:
  pollIntervalSeconds: 0.2
  maxTextLength: 5000000   # 0 disables the limit; longer copies are skipped, not truncated

peek:
  holdDelaySeconds: 0.30    # Force Touch hold before the preview appears
  fadeOutSeconds: 0.15
  pressureOpacityBase: 0.3  # opacity ramp while building up Force Touch pressure
  pressureOpacityGain: 0.58

snap:
  topOffset: 150            # px from the top edge when snapping the window

prompts:
  summarization: >
    You are a concise summarization assistant. ...
  dailyDigest: >
    Create a digest based on the following notes, clipboard items, ...
  digestSystem: >
    You are a digest assistant that summarizes a user's personal activity ...
  chatSystem: >
    You are a helpful AI assistant. Answer questions, discuss ideas, ...
  titleGeneration: >
    Generate a very short title (3-6 words) for a chat ...
Section What it controls
embedding MLX model id, query instruction, token/batch limits, GPU cache, indexing batches
search semantic thresholds, top-K, similar-items and Topics candidate counts, hybrid ranking (RRF), debounce, per-item text cap
fuzzy typo tolerance and result caps for text search
clustering Topics: max topics, KMeans iterations, label candidates
aiTimeouts per-request-type timeouts in seconds
aiLimits input/output size caps: summarize/chat/title token limits, attachment text/image/file caps, digest sampling budget
clipboard clipboard poll interval, max copied-text length
peek Force Touch preview: hold delay, fade-out, and pressure-opacity curve
snap window snapping: top-edge offset
prompts system prompts: summarization, daily digest, digest system prompt, chat, title generation