VixlVixl
Docs
Changelog
GitHub
Docs
Changelog
GitHub
  • Get Started

    • Overview
    • Philosophy
    • Installation
    • Set up providers and models
    • Add a project
    • Create a project group
    • Your first chat
  • Concepts

    • How Vixl works
    • Chat modes
    • Permissions and approvals
    • Projects and home chats
    • Models and roles
    • Context
    • Code graphs
    • The .vixl directory
  • Using Vixl

    • Manage chats
    • Queue and stop messages
    • Review and restore changes
    • Compact and hand off long chats
    • Export a transcript
    • Work with plans
    • Orchestrate sub-agents
    • Best practices
    • Use the workbench
    • Shortcuts and the command palette
  • Customize

    • Providers
    • Models
    • MCP servers
    • Skills
    • Custom agents
    • Rules and AGENTS.md
    • Language servers
    • Appearance
    • Permission settings
  • Reference

    • settings.json
    • mcp.json
    • Custom agent frontmatter
    • SKILL.md format
    • Keyboard shortcuts
    • Chat statuses
    • .vixl layout
    • Managed components
  • Resources

    • Troubleshooting
    • FAQ
    • Privacy
    • Comparison
    • Roadmap
    • Brand and press
    • Changelog

.vixl layout

Vixl keeps two config trees: personal ~/.vixl and project <repo>/.vixl. API keys are in the OS keychain, not in either tree. Merge rules: The .vixl directory.

Personal directory

Personal config is ~/.vixl on every platform (on Windows, %USERPROFILE%\.vixl), created if missing.

Do not commit this tree. It is machine-local.

PathWhatCommit
settings.jsonTheme, models, provider refs, permissions, MCP trust, sandbox, auto-title, workbench duplicate-tab, workspace trust, LSP auto-download. See settings.jsonNo
mcp.jsonPersonal MCP servers. See mcp.jsonNo
lsp.jsonLanguage server enable, disable, and command overrides (personal only)No
lsp/<id>/<version>/Managed language server installsNo
runtime/node/Portable Node used to run npm language serversNo
vixl.sqliteChats, messages, usage, pins, workbench tabs and prefs, editor view stateNo
chats/<projectSlug>/<chatId>/Per-chat directory. File checkpoints live under file-checkpoints/No
projects.jsonFleet registryNo
project-groups.jsonFleet project groups (member slugs, CSV default names)No
active-project.jsonLast active project idNo
graphs/<sha256>/Per-project CodeGraph store (codegraph.db, meta.json, _preload.cjs). The folder name is the SHA-256 hex of the canonical project rootNo
agents/Personal custom agents ({slug}.md)No
skills/Personal skills ({slug}/SKILL.md)No
plans/Personal plans ({id}/PLAN.md). Frontmatter: Work with plansNo
rules/Personal rules, injected on home chats and before project rules on project chats. .md or .mdcNo
AGENTS.mdPersonal always-on instructions. Injected on home chats, and first on project chats (agents.md is accepted if uppercase is missing)No

Home chats use slug _home_ and the user home directory as workspace. Chat files for those threads are under chats/_home_/<chatId>/. /create-skill, /create-rule, and /create-agent on a home chat write into this personal tree.

A workspace root equal to the user home directory is this same directory. Vixl does not keep a second project tree there: project-scope settings and MCP reads are empty, project-scope writes are refused, project file lists are empty, and that root is not treated as having project config.

JSON writes are allowed only under the personal .vixl or any path with a .vixl ancestor. Parent .. is rejected.

Project directory

Project config is <repo>/.vixl. Resolution:

  1. If the opened root is the user home directory, resolve {home}/.vixl and stop. That path is the personal root, and project scope for it stays empty.
  2. Use {root}/.vixl if that directory exists (even skills-only, no settings.json).
  3. Else walk up to 8 parents.
  4. Stop at $HOME / %USERPROFILE%. Do not select {home}/.vixl while walking from a folder under home.
  5. Fall back to {root}/.vixl if no ancestor .vixl is found (it may not exist yet).

Adding a project does not create this folder. It appears when config is first written.

Vixl treats a project as having config only when the resolved directory exists and contains mcp.json or settings.json. A skills-only .vixl still resolves as the project dir. The user home directory never counts as having project config.

This tree is meant to be committed. Removing a project from the sidebar drops the fleet row only. It does not delete <repo>/.vixl, chats, or graph indexes.

PathWhatCommit
settings.jsonOverrides except providers.*, models.*, lsp.*. Same schema as personalYes
mcp.jsonProject MCP servers (same-id override). Use ${input:...} for secrets; do not put plaintext tokens hereYes, if it has no secrets
agents/Project custom agents ({slug}.md)Yes
skills/Project skills ({slug}/SKILL.md)Yes
plans/Project plans ({id}/PLAN.md). Frontmatter: Work with plansYes
rules/Project rules, injected after personal rules on project chats. .md or .mdcYes
AGENTS.mdProject always-on instructions, concatenated after personal AGENTS.md on project chats (agents.md fallback)Yes

Plans from create_plan write .vixl/plans/<id>/PLAN.md. The id is {slug}-{YYYY-MM-DD-HHMMSS}.

SQLite

vixl.sqlite is always under the personal directory. Deleting a chat deletes the chat row (messages, usage, and related rows cascade) and removes chats/<slug>/<id>/. See Privacy.

Secrets that are not in .vixl

On Linux without Secret Service, secrets fall back to secrets-vault.json in the app config directory (mode 0600), not inside .vixl. macOS and Windows use the OS keychain. Details: Providers.

CodeGraph would otherwise write {project}/.codegraph. Vixl redirects that onto the personal graphs/ store and treats an in-repo .codegraph folder as leftover. See Managed components.

Edit this page
Last Updated: 10/16/26, 8:17 PM
Prev
Chat statuses
Next
Managed components