Projects and home chats
A project is a folder you registered. Vixl does not invent a project from the current working directory. The fleet lives in personal ~/.vixl as projects.json and active-project.json. Paths are on .vixl layout.
Slugs are lowercase alphanumeric plus hyphens, unique in the fleet, and never _home_ (reserved for home chats). Duplicate folder names get -2, -3, and so on. Adding a folder that is already registered makes it active instead of inserting a second row.
Add and remove
Add a project from the sidebar. A native folder picker runs. Cancel is silent. A new folder appears in the sidebar. A folder that is already registered becomes active.
Adding a folder does not create <repo>/.vixl. That directory appears when something first writes config (MCP, settings, a skill, and so on).
Remove from sidebar drops the fleet row. If it was active, nothing is selected. The repo .vixl, chats, and graph indexes stay. Graphs can be deleted later in Settings.
If the registered folder is your user home directory, that project is personal only. Project-scope settings and MCP reads are empty, project-scope writes are refused, project file lists are empty, and the root is not treated as having project config. Skills, agents, rules, and AGENTS.md come from ~/.vixl only.
Home chats vs project chats
The home composer can send into a registered project or with Home. A project send creates a project chat. Home creates a home chat.
Home chats use slug _home_ and your user home directory as the workspace. They inject personal MCP, vendored command skills, and personal skills, agents, rules, and AGENTS.md from ~/.vixl. File @ search has no workspace on a home chat.
Project chats use that folder as the workspace. They merge personal and project config (project wins on collision for most keys). Skills and agents overlay by name, and the project file wins. Rules and AGENTS.md are included from both trees, personal first, then project. See The .vixl directory for the merge, and Context for what actually lands in the prompt.
The sidebar lists collapsible project rows plus a Home folder when home chats exist. New Agent goes to / and does not pick a project for you. The home picker does.
Project groups
A project group is a named set of two or more registered projects. The group lives in personal ~/.vixl/project-groups.json. It does not replace the member projects. Each member keeps its own folder, .vixl tree, and git repo.
Chats on a group bind to the group slug, not to one member. Routes look like /group/<slug> and /group/<slug>/chat/<id>. Chat files live under chats/<groupSlug>/<chatId>/. The workspace for that thread spans every member root.
The primary member is the first project in the group's member list. New group chats use that folder as the default workspace root for tools that need one (git repo, run_terminal cwd, and similar). File and search tools still see every member.
Agent paths must use a member slug prefix when more than one root is in play, for example api/src/index.ts. Unprefixed relative paths are rejected and the error lists the valid slugs. One git commit stays inside one repo. Never stage files across projects.
Create a project group from the home composer. Adding the same member set again reopens that group instead of inserting a second row. Group slugs share the uniqueness pool with project slugs and never use _home_.
Project page
Open a project from the sidebar to its page. Tabs, in order: Chats, MCP, Graph, Plans, Skills, Agents, Rules. These reuse the Settings section components with project scope. Personal copies of the same surfaces live under Settings.
Activating a project prefetches default language servers and starts the code graph. Starting a new Agent-mode chat from the project row needs a Default or Agent model in Settings.
Use the workbench for the editor, terminals, and plan tabs. Manage chats covers pin, fork, rename, and delete.