This skill should be used when the user asks about building OctoMesh repositories, starting or stopping services, managing Docker infrastructure, syncing git repositories, creating or managing test branches, managing NuGet packages, cleaning build artifacts, or any development workflow task. Trigger on mentions of build, compile, dotnet build, start services, stop services, infrastructure, docker compose, git sync, pull repos, push repos, branch management, test branch, NuGet packages, clean build, kill dotnet, certificates, clone repos, git status across repos, or development environment setup. Also trigger when user mentions Invoke-BuildAll, Invoke-Build, Start-Octo, Start-OctoInfrastructure, Sync-AllGitRepos, Get-AllGitRepStatus, or any OctoMesh PowerShell commandlet name.
Single entry point for OctoMesh development operations: /octo-devtools <natural language>
Claude translates the user's intent into the appropriate PowerShell cmdlet from octo-tools/modules/profile.ps1 — with safety checks for destructive operations and warnings for interactive/session-blocking commands.
pwsh) must be installed and on PATHocto-tools/ with modules/profile.ps1All commands are executed through the wrapper script, which loads the OctoMesh profile automatically:
bash "${CLAUDE_PLUGIN_ROOT}/skills/octo-devtools/scripts/run_pwsh.sh" '<PowerShell command>'
CRITICAL — quoting and path examples:
bash "${CLAUDE_PLUGIN_ROOT}/skills/octo-devtools/scripts/run_pwsh.sh" 'Get-AllGitRepStatus'bash "${CLAUDE_PLUGIN_ROOT}/skills/octo-devtools/scripts/run_pwsh.sh" 'Invoke-BuildAll -configuration DebugL -excludeFrontend $true'bash "..." "Invoke-BuildAll -excludeFrontend $true" (double quotes — bash eats $true!)pwsh -Command "Get-AllGitRepStatus" (profile not loaded!)cd ... && bash scripts/run_pwsh.sh '...' (causes permission prompts!)Always use single quotes around the PowerShell command argument so that PowerShell variables like $true and $false are not consumed by bash.
OctoMesh is a monorepo where repos produce NuGet packages consumed by downstream repos. The build system handles copying these NuGet packages between repos automatically — but ONLY when using Invoke-BuildAll.
Invoke-BuildAll (DEFAULT CHOICE)Use Invoke-BuildAll whenever building after code changes that could affect NuGet packages, or when unsure. This is the safe default. It builds repos in dependency order AND copies NuGet packages to the shared nuget/ folder between each step.
# Full build (all repos including frontends)
Invoke-BuildAll -configuration DebugL
# Backend only — skips Angular frontends (saves significant time)
Invoke-BuildAll -configuration DebugL -excludeFrontend $true
# Core repos only — skips optional/additional repos AND frontends
Invoke-BuildAll -configuration DebugL -excludeFrontend $true -excludeAdditional $true
Use Invoke-BuildAll for:
Sync-AllGitRepos)Invoke-Build is safe (SINGLE REPO, NO NUGET IMPACT)Invoke-Build builds one repo in isolation. It does NOT handle NuGet package propagation.
Invoke-Build is ONLY appropriate when:
octo-asset-repo-services, octo-identity-services)nuget/ folder# Safe: editing a controller in asset repo services
Invoke-Build -repositoryPath ./octo-asset-repo-services -configuration DebugL
NEVER use Invoke-Build to propagate NuGet changes. Do not attempt to manually chain Invoke-Build + Copy-NuGetPackages to replicate what Invoke-BuildAll does — use Invoke-BuildAll with the appropriate exclusion flags instead.
For full parameter details, read references/command-reference.md in this skill directory.
For common multi-step workflows, read references/workflows.md in this skill directory.
| Cmdlet | Description | Safety |
|---|---|---|
Invoke-BuildAll | Build repos in dependency order WITH NuGet propagation — use this by default | Mutating (local) |
Invoke-Build | Build a single repo WITHOUT NuGet handling — only for isolated service changes | Mutating (local) |
Invoke-BuildFrontend | Build Angular frontends | Mutating (local) |
Invoke-Publish | Publish a .NET project | Mutating (local) |
Invoke-BuildAndStartOcto | Build all + start services | Interactive |
Invoke-BuildZenonPlug | Build Zenon plug-in | Mutating (local) |
| Cmdlet | Description | Safety |
|---|---|---|
Start-Octo | Start all OctoMesh services | Interactive |
Start-OctoInfrastructure | Start Docker containers (MongoDB, RabbitMQ, CrateDB) | Mutating |
Stop-OctoInfrastructure | Stop Docker containers | Mutating |
| Cmdlet | Description | Safety |
|---|---|---|
Install-OctoInfrastructure | First-time Docker setup | Mutating |
Uninstall-OctoInfrastructure | Remove Docker containers + volumes | Destructive |
Get-OctoInfrastructureStatus | Show container status | Read-only |
Invoke-CleanupInfraContainerDisks | Clean unused Docker disk space | Destructive |
| Cmdlet | Description | Safety |
|---|---|---|
Sync-AllGitRepos | Pull all repos (rebase) | Mutating |
Sync-GitRepo | Pull a single repo | Mutating |
Push-AllGitRepos | Push all repos to remote | Mutating (remote) |
Push-GitRepo | Push a single repo | Mutating (remote) |
Get-AllGitRepStatus | Git status across all repos | Read-only |
Find-AllGitRepos | Discover all repos in workspace | Read-only |
Invoke-CloneMainRepos | Clone all main repos | Mutating |
Sync-AllSubmodules | Sync git submodules | Mutating |
Invoke-CleanAllGitRepos | Clean all repos (remove untracked) | Destructive |
| Cmdlet | Description | Safety |
|---|---|---|
New-TestBranch | Create test branch across all repos | Mutating |
Remove-TestBranch | Delete test branch from all repos | Destructive |
Sync-TestBranch | Merge base into test branch | Mutating |
Invoke-SwitchAllBranches | Switch all repos to a branch | Mutating |
Compare-BranchStatus | Compare branch status | Read-only |
| Cmdlet | Description | Safety |
|---|---|---|
Copy-AllNuGetPackages | Copy NuGet packages to shared folder | Mutating (local) |
Copy-NuGetPackages | Copy packages from specific directory | Mutating (local) |
Sync-NuGetPackages | Synchronize NuGet cache | Mutating (local) |
Remove-GlobalNuGetPackages | Clear global NuGet cache | Destructive |
| Cmdlet | Description | Safety |
|---|---|---|
Invoke-KillDotnet | Kill all dotnet processes | Mutating |
Remove-BinAndObjFolders | Delete all bin/ and obj/ folders | Destructive |
| Cmdlet | Description | Safety |
|---|---|---|
Invoke-OctoCliLoginLocal | Log in to local environment | Mutating |
Invoke-OctoCliLoginTest2 | Log in to test-2 environment | Mutating |
Invoke-OctoCliLoginStaging | Log in to staging environment | Mutating |
Invoke-OctoCliLoginProduction | Log in to production environment | Mutating |
Invoke-OctoCliReconfigureLogLevel | Reconfigure service log levels | Mutating |
| Cmdlet | Description | Safety |
|---|---|---|
New-RootCertificate | Generate root CA certificate | Mutating |
New-ServerCertificate | Generate server certificate | Mutating |
AspNetDeveloperCertificate | Set up ASP.NET dev HTTPS cert | Mutating |
| Cmdlet | Description | Safety |
|---|---|---|
Join-KubeConfigs | Merge kubeconfig files | Mutating |
Invoke-MongoPortForward | Port-forward MongoDB from K8s | Mutating |
| Cmdlet | Description | Safety |
|---|---|---|
Sync-YamlTemplates | Sync CI/CD YAML templates | Mutating |
Update-MeshmakerVersion | Bump version numbers | Mutating |
Get-AllGitRepStatus, Get-OctoInfrastructureStatus, Find-AllGitRepos, Compare-BranchStatus
Invoke-BuildAll, Invoke-Build, Invoke-BuildFrontend, Invoke-Publish, Start-OctoInfrastructure, Stop-OctoInfrastructure, Install-OctoInfrastructure, Sync-AllGitRepos, Sync-GitRepo, Invoke-CloneMainRepos, Sync-AllSubmodules, New-TestBranch, Sync-TestBranch, Invoke-SwitchAllBranches, Copy-AllNuGetPackages, Copy-NuGetPackages, Sync-NuGetPackages, Invoke-OctoCliLogin*, New-RootCertificate, New-ServerCertificate, AspNetDeveloperCertificate, Join-KubeConfigs, Invoke-MongoPortForward, Sync-YamlTemplates, Update-MeshmakerVersion, Invoke-KillDotnet
Push-AllGitRepos, Push-GitRepo
Remove-BinAndObjFolders, Remove-GlobalNuGetPackages, Invoke-CleanAllGitRepos, Uninstall-OctoInfrastructure, Remove-TestBranch, Invoke-CleanupInfraContainerDisks
Start-Octo, Invoke-BuildAndStartOcto — these commands block the terminal session until services are stopped via keypress. Always display this warning before executing:
Warning: This command will block the current session until you press a key to stop the services. The session will not be available for other commands while services are running.
Invoke-BuildAll -configuration DebugLInvoke-BuildAll -configuration DebugL -excludeFrontend $trueInvoke-BuildAll -configuration DebugL -excludeFrontend $true -excludeAdditional $trueInvoke-Build -repositoryPath ./octo-asset-repo-services -configuration DebugL (only if no NuGet changes!)Sync-AllGitRepos then Invoke-BuildAll -configuration DebugLGet-AllGitRepStatusSync-AllGitReposPush-AllGitRepos (confirm first!)Start-OctoInfrastructureStop-OctoInfrastructureGet-OctoInfrastructureStatusRemove-BinAndObjFolders + Invoke-BuildAll -configuration DebugLInvoke-OctoCliLoginLocalNew-TestBranch with user-provided version + descriptionAlways use -configuration DebugL for build commands unless the user explicitly specifies a different configuration. This is the standard local development configuration.
When the user asks to build, default to Invoke-BuildAll with exclusion flags to limit scope — do NOT attempt to manually orchestrate Invoke-Build calls in dependency order or manually copy NuGet packages. The Invoke-BuildAll script already handles the correct build order and NuGet propagation. Only use Invoke-Build for a single service repo where no NuGet packages are affected.
When the user describes a high-level goal (e.g., "set up a fresh dev environment"), suggest the appropriate multi-step workflow from references/workflows.md and offer to execute it step by step.
Start-Octo and Invoke-BuildAndStartOcto, display blocking warning