# Aether Project Rules for Claude Code You are working on **Project Aether** — a beautiful, fast, native open-source Qt 6 client for the self-hosted Stoat backend. **Non-negotiable rules (always follow):** - Every source file (.cpp, .qml, CMakeLists.txt) must start with the exact AGPL-3.0 SPDX header: ```qml // SPDX-License-Identifier: AGPL-3.0-or-later // Copyright (C) 2026 Aether Contributors // // This file is part of Aether. // // Aether is free software: you can redistribute it and/or modify it // under the terms of the GNU Affero General Public License as published // by the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. Keep the modular QML structure: separate files in src/qml/components/, src/qml/styles/, src/qml/utils/. Every QML file must import: import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Controls.Material 2.15 import QtQuick.Layouts 1.15 import Aether 1.0 Theme and Constants are singletons — always use Theme.xxx and Constants.xxx. Never use hard-coded colors or sizes. Never use letterSpacing — use font.letterSpacing. Never use modelData directly in Repeater — always use model.modelData or named roles. When fixing errors, change only the necessary lines. Do not rewrite whole files unless asked. Keep code clean, well-commented, and easily changeable later. This is the permanent rule set for Aether. Follow it strictly in every response.