From OctoMesh Skills
Drives OctoMesh local development through the octo-tools PowerShell cmdlets — building repos in dependency order, starting and stopping services (always non-interactively for agents via Start-Octo -nonInteractive $true / Stop-Octo), managing Docker or local kind Kubernetes infrastructure, syncing and branching git repos, NuGet package propagation, certificates, and octo-cli context/auth setup. Use it for any OctoMesh dev-environment or DevOps task. Trigger on build, compile, dotnet build, start services, stop services, Start-Octo, Stop-Octo, Invoke-BuildAll, Invoke-Build, infrastructure, docker compose, kind, Kubernetes, Install-OctoKubernetes, Deploy-OctoOperator, git sync, pull repos, push repos, Get-AllGitRepStatus, branch management, test branch, NuGet packages, clean build, kill dotnet, certificates, clone repos, register context, login local/staging/production, infrastructure backup, or any OctoMesh PowerShell cmdlet name.
How this skill is triggered — by the user, by Claude, or both
Slash command
/octo-claude-skills:octo-devtoolsThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Single entry point for OctoMesh development operations: `/octo-devtools <natural language>`
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 — chains into interactive Start-Octo. Do NOT use from an agent session (see safety rules) | Interactive |
Invoke-BuildZenonPlug | Build Zenon plug-in | Mutating (local) |
| Cmdlet | Description | Safety |
|---|---|---|
Start-Octo | Start OctoMesh services. From an agent always pass -nonInteractive $true | Mutating (interactive only when -nonInteractive is not set) |
Stop-Octo | Stop services started in non-interactive mode (writes a .octo-stop signal file) | Mutating |
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 |
Backup-OctoInfrastructure | Back up infra Docker volumes (Mongo + CrateDB) | Mutating (local) |
Restore-OctoInfrastructure | Restore infra volumes from a named backup | Destructive |
Get-OctoInfrastructureBackup | List available infra backups | Read-only |
Remove-OctoInfrastructureBackup | Delete a named infra backup | Destructive |
An alternative to the docker-compose infra: MongoDB / RabbitMQ / CrateDB, the CRDs, and the Communication Operator run inside a local kind cluster (the .NET services still run as host processes via Start-Octo). The two infra modes share the same host ports and CANNOT run at the same time — Install-OctoKubernetes refuses to start while docker-compose infra containers are up. Full runbook: C:\dev\meshmakers\octo-tools\kubernetes\README.md; from-scratch setup: C:\dev\meshmakers\octo-tools\kubernetes\QUICKSTART.md.
| Cmdlet | Description | Safety |
|---|---|---|
Install-OctoKubernetes | Create kind cluster + CRDs + in-cluster infra + ingress-nginx/cert-manager, then deploy the operator | Mutating |
Deploy-OctoOperator | (Re)deploy the Communication Operator from the dev registry (:main-latest) | Mutating |
Get-OctoKubernetesStatus | Show pods, Helm releases, and host-port reachability | Read-only |
Uninstall-OctoKubernetes | Delete the kind cluster and ALL its data (Mongo + CrateDB PVCs) | Destructive |
Import-OctoImageToKind | Load a locally-built image into the kind node | Mutating |
Add-OctoLocalCaTrust / Remove-OctoLocalCaTrust | Trust / untrust the local root CA in the OS store | Mutating (Destructive for Remove) |
| 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 |
|---|---|---|
Register-OctoCliContext | Recommended — register a named octo-cli context for any installation (local, test-2, staging-1, prod-1, prod-2) | Mutating |
Invoke-OctoCliLoginLocal | Log in to local environment (-tenantId, -includeReporting) | Mutating |
Invoke-OctoCliLoginTest2 | Log in to test-2 environment | Mutating |
Invoke-OctoCliLoginStaging | Legacy — old *.meshmakers.cloud domains; prefer Register-OctoCliContext -Installation staging-1 | Mutating |
Invoke-OctoCliLoginProduction | Legacy — old *.meshmakers.cloud domains; prefer Register-OctoCliContext -Installation prod-1/prod-2 | Mutating |
Invoke-OctoCliReconfigureLogLevel | Reconfigure service log levels (3 mandatory params) | Mutating |
Invoke-SetDebugConfiguration | Register the Admin Panel debug OAuth client + scopes (run after local login) | Mutating |
Register-AiBastion | Register an Anthropic subscription token on a tenant (device-code OAuth) | Mutating (remote) |
Get-AiBastionStatus | Read current AI Bastion lease metadata for a tenant | Read-only |
| Cmdlet | Description | Safety |
|---|---|---|
New-RootCertificate | Generate root CA certificate | Mutating |
New-ServerCertificate | Generate server certificate | Mutating |
New-AspNetDeveloperCertificate | Set up ASP.NET dev HTTPS cert | Mutating |
Test-AspNetDeveloperCertificate | Check the ASP.NET dev cert status | Read-only |
Remove-AspNetDeveloperCertificate | Remove the ASP.NET dev cert | Destructive |
| Cmdlet | Description | Safety |
|---|---|---|
Join-KubeConfigs | Merge kubeconfig files | Mutating |
Remove-KubeConfig | Delete a named context/cluster/user from ~/.kube/config (interactive prompt) | Destructive |
Invoke-MongoPortForward | Port-forward MongoDB from K8s | Mutating |
| Cmdlet | Description | Safety |
|---|---|---|
Compare-CkVersions | Diff CK model (ckModel.yaml) versions between two branch checkouts | Read-only |
Compare-Pipelines | Diff local pipeline YAML against the deployed versions in a tenant | Read-only |
Get-BranchAvailability | List repos where a given branch exists on remote | Read-only |
| Cmdlet | Description | Safety |
|---|---|---|
Sync-YamlTemplates | Sync CI/CD YAML templates | Mutating |
Update-MeshmakerVersion | Bump version numbers | Mutating |
Get-AllGitRepStatus, Get-OctoInfrastructureStatus, Get-OctoKubernetesStatus, Get-OctoInfrastructureBackup, Find-AllGitRepos, Compare-BranchStatus, Compare-CkVersions, Compare-Pipelines, Get-BranchAvailability, Test-AspNetDeveloperCertificate, Get-AiBastionStatus
Invoke-BuildAll, Invoke-Build, Invoke-BuildFrontend, Invoke-Publish, Invoke-BuildZenonPlug, Start-OctoInfrastructure, Stop-OctoInfrastructure, Install-OctoInfrastructure, Backup-OctoInfrastructure, Install-OctoKubernetes, Deploy-OctoOperator, Import-OctoImageToKind, Add-OctoLocalCaTrust, Sync-AllGitRepos, Sync-GitRepo, Invoke-CloneMainRepos, Sync-AllSubmodules, New-TestBranch, Sync-TestBranch, Invoke-SwitchAllBranches, Copy-AllNuGetPackages, Copy-NuGetPackages, Sync-NuGetPackages, Register-OctoCliContext, Invoke-OctoCliLogin*, Invoke-OctoCliReconfigureLogLevel, Invoke-SetDebugConfiguration, New-RootCertificate, New-ServerCertificate, New-AspNetDeveloperCertificate, Join-KubeConfigs, Invoke-MongoPortForward, Sync-YamlTemplates, Update-MeshmakerVersion, Invoke-KillDotnet, Stop-Octo
Push-AllGitRepos, Push-GitRepo, Register-AiBastion (writes a token to a remote tenant — see note below)
Remove-BinAndObjFolders, Remove-GlobalNuGetPackages, Invoke-CleanAllGitRepos, Uninstall-OctoInfrastructure, Restore-OctoInfrastructure, Remove-OctoInfrastructureBackup, Uninstall-OctoKubernetes, Remove-KubeConfig, Remove-TestBranch, Invoke-CleanupInfraContainerDisks, Remove-AspNetDeveloperCertificate, Remove-OctoLocalCaTrust
Start-Octo blocks the session waiting for a keypress only when -nonInteractive is not set. When Claude (or any agent / CI job) starts services it MUST ALWAYS run:
Start-Octo -nonInteractive $true -configuration DebugL
In this mode Start-Octo blocks until a service fails or a .octo-stop signal file appears — it never waits for a keypress. Stop the services from another invocation with:
Stop-Octo
Stop-Octo is a standalone cmdlet that writes the .octo-stop signal file (it has a -branch parameter mirroring Start-Octo/Install-OctoKubernetes). This non-interactive start + Stop-Octo pair is a firm repo convention — never start services interactively from an agent session.
NEVER use Invoke-BuildAndStartOcto from an agent session — it chains into the interactive Start-Octo (no -nonInteractive pass-through) and will block the session indefinitely. Build with Invoke-BuildAll, then start with Start-Octo -nonInteractive $true instead.
Interactive blocking applies to Start-Octo (without -nonInteractive $true) and Invoke-BuildAndStartOcto. If a human explicitly asks for an interactive foreground run, warn first:
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.
Register-AiBastion drives the Anthropic device-code OAuth flow and POSTs the token to the AI Adapter's POST /{tenantId}/v1/credentials/register. The bearer token comes from -BearerToken or $env:OCTO_BASTION_TOKEN; token material is held in memory only and zeroed in a finally block. Never echo, log, or persist the bearer token or the device-code output.
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-Octo -nonInteractive $true -configuration DebugL (agent default; never block the session)Stop-OctoStart-OctoInfrastructureStop-OctoInfrastructureGet-OctoInfrastructureStatusBackup-OctoInfrastructure (stop infra first)Restore-OctoInfrastructure -Name <name> / Get-OctoInfrastructureBackupInstall-OctoKubernetes (refuses if docker-compose infra is up)Deploy-OctoOperatorGet-OctoKubernetesStatusUninstall-OctoKubernetes (destructive — confirm)Remove-BinAndObjFolders + Invoke-BuildAll -configuration DebugLInvoke-OctoCliLoginLocal (or Register-OctoCliContext -Installation local -TenantId <tenant>)Register-OctoCliContext -Installation staging-1|prod-1|prod-2 -TenantId <tenant>Compare-CkVersions <otherBranch>New-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 -nonInteractive $true and stop with Stop-Octo. Never run Invoke-BuildAndStartOcto from an agent session. Only warn about session blocking if a human explicitly requests an interactive foreground run.npx claudepluginhub meshmakers/octo-claude-skills --plugin octo-claude-skillsGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.