# ⚠ ALLOWLIST, NOT A DENYLIST — deny everything, then re-include what is ours. # # This directory is SillyTavern's live user data, not a curated export. It holds # chat logs, an empty-but-arming `secrets.json`, caches, thumbnails and whatever # a future version decides to write here. A denylist protects only the files # someone remembered; an allowlist means a new file is invisible until a human # names it. # # ⚠ THE ONE THAT MATTERS: `secrets.json` is currently EMPTY, because API keys go # through LiteLLM with a placeholder. It arms itself the moment any key is typed # into the UI, and this repo is public. It must never become trackable by # accident, which under a denylist it eventually would. # 1. deny everything /* # 2. re-include the artifacts worth versioning !.gitignore !README.md !st-export.py !/worlds/ !/characters/ !/QuickReplies/ !/OpenAI Settings/ !/User Avatars/ !/_text/ # 3. drop SillyTavern's STOCK content — it is regenerated on startup # ⚠ Seraphina's expression pack alone is 3.6 MiB of PNG, and none of it is # world-building. The stock lorebook `worlds/Eldoria.json` is KEPT on purpose: # 8 KB of readable JSON is a useful worked example of lorebook structure. /characters/default_* /characters/Seraphina/ # 4. inside those, still keep the junk out # ⚠ Backup files, including ones left by operational fixes — `Default.json.bak-squashfix` # was created while debugging the heretic 400 and was staged on the first pass. **/*.bak-* **/*.bak **/.DS_Store **/Thumbs.db # ⚠ NOT TRACKED, DELIBERATELY: # secrets.json API keys — see above # settings.json every UI preference, rewritten on any change; personas # are extracted from it into _text/personas.json instead # chats/, group chats/ the sessions themselves — personal, and churn hard # backups/, thumbnails/, vectors/, stats.json, content.log, image-metadata.json # themes/, movingUI/, reasoning/, extensions/, assets/, backgrounds/ # instruct/, context/, sysprompt/ 85 stock templates that ship with the app, # and are INERT in Chat Completion mode anyway