Always follow these rule files very carefully, as they have been crafted to ensure consistency and high-quality code.
Wait for the user to request git operations (commit, amend, revert). Each request grants permission for that operation only.
- ✅ Always wait for user to request a commit
- ❌ Be proactive about commits—user will always initiate
- ❌ After completing work, ask if user wants to commit
- ❌ Commit after finishing a task without being asked
- ❌ Run revert or amend to fix a mistake—let user decide
- ❌ Treat one commit request as permission for later commits
When working on tasks, follow any specific workflow instructions provided for your role. If no specific workflow is provided:
-
Understand the problem and requirements clearly.
-
Consult the relevant rule files before implementation.
-
Develop a clear implementation plan.
-
Follow established patterns and conventions.
-
Use MCP tools for building, testing, and formatting.
Always use MCP tools instead of running
dotnet build,dotnet test,dotnet format, or equivalentnpmandnpx playwrightcommands directly.Execution Order (mandatory):
- Run build first:
execute_command(command='build', backend=true, frontend=true) - Run remaining tools with
noBuild=true
Slow Operations:
- Aspire restart
- Backend format
- Backend lint
- End-to-end tests
Fast Operations:
- Frontend format, lint
- Backend test
Parallelization rule:
- If running only fast operations → run sequentially
- If running any slow operation → run EVERYTHING in parallel Task agents
Example: running all tools after build (do NOT use run_in_background):
Task(subagent_type: "general-purpose", prompt: "Restart Aspire: mcp__developer-cli__run()", run_in_background: false) Task(subagent_type: "general-purpose", prompt: "Test backend: mcp__developer-cli__execute_command(command='test', backend=true, noBuild=true)", run_in_background: false) Task(subagent_type: "general-purpose", prompt: "Format backend: mcp__developer-cli__execute_command(command='format', backend=true, noBuild=true)", run_in_background: false) Task(subagent_type: "general-purpose", prompt: "Lint backend: mcp__developer-cli__execute_command(command='lint', backend=true, noBuild=true)", run_in_background: false) Task(subagent_type: "general-purpose", prompt: "Run e2e: mcp__developer-cli__end_to_end(browser='chromium', waitForAspire=true)", run_in_background: false)Format, lint, and test run while Aspire starts. End-to-end tests use
waitForAspire=trueto wait until Aspire is ready.About Aspire: The run MCP tool starts the Aspire AppHost at https://localhost:9000. Restart it when the backend has changed, when frontend hot reload stops working, or when it is not running.
MCP Server Setup: See .mcp.json for MCP server configuration. For Claude Code, run
claude config set enableAllProjectMcpServers trueonce to enable project-scoped MCP servers. - Run build first:
Critical: If you do NOT see the mentioned developer-cli MCP tool, tell the user. Do NOT just ignore that you cannot find them, and fall back to other tools.
Whenever you see [CLI_ALIAS], replace it with the configured value.
CLI_ALIAS="pp"
Whenever you see [PRODUCT_MANAGEMENT_TOOL], replace it with the configured value.
PRODUCT_MANAGEMENT_TOOL="Linear"
Always consult the relevant rule files before each code change.
Please note that I often correct or even revert code you generated. If you notice that, take special care not to revert my changes.
Commit messages should be in imperative form, start with a capital letter, avoid ending punctuation, be a single line, and concisely describe changes and motivation.
Be very careful with comments, and add them only very sparingly. Never add comments about changes made (these belong in pull requests).
When using the Edit tool:
- The
new_stringmust be a minimal transformation ofold_string - Never remove, modify, or add comments unless that is the explicit task
- Never reformat code, fix whitespace, or "clean up" adjacent lines
- If you need to include surrounding context for uniqueness, copy it exactly
This is a mono repository with multiple self-contained systems (SCS), each being a small monolith. All SCSs follow the same structure.
- .github: GitHub workflows and other GitHub artifacts.
- application: Contains application code:
- account: An SCS for tenant and user management:
- back-office: An empty SCS that will be used to create tools for Support and System Admins:
- AppHost: Aspire project for orchestrating SCSs and Docker containers. Never run directly—typically running in watch mode.
- AppGateway: Main entry point using YARP as reverse proxy for all SCSs.
- shared-kernel: Reusable .NET backend shared by all SCSs.
- shared-webapp: Reusable frontend shared by all SCSs.
- cloud-infrastructure: Bash and Azure Bicep scripts (IaC).
- developer-cli: A .NET CLI tool for automating common developer tasks.