claudecode-omc 5.6.4 → 5.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.local/commands/code-review.md +416 -0
- package/.local/commands/pr.md +250 -0
- package/.local/commands/prp-pr.md +244 -0
- package/.local/guidelines/CLAUDE.md +47 -0
- package/.local/skills/prompt-optimizer/SKILL.md +23 -4
- package/bundled/manifest.json +4 -4
- package/bundled/upstream/anthropic-skills/skills/algorithmic-art/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/brand-guidelines/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/canvas-design/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/SKILL.md +120 -58
- package/bundled/upstream/anthropic-skills/skills/claude-api/curl/examples.md +9 -9
- package/bundled/upstream/anthropic-skills/skills/claude-api/curl/managed-agents.md +336 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/go/managed-agents/README.md +561 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/java/claude-api.md +2 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/java/managed-agents/README.md +442 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/php/claude-api.md +10 -10
- package/bundled/upstream/anthropic-skills/skills/claude-api/php/managed-agents/README.md +435 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/README.md +16 -16
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/batches.md +3 -3
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/files-api.md +3 -3
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/streaming.md +7 -7
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/claude-api/tool-use.md +19 -19
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/managed-agents/README.md +332 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/claude-api.md +4 -4
- package/bundled/upstream/anthropic-skills/skills/claude-api/ruby/managed-agents/README.md +389 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/agent-design.md +101 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/error-codes.md +11 -4
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/live-sources.md +60 -48
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-api-reference.md +372 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-client-patterns.md +209 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-core.md +220 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-environments.md +211 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-events.md +195 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-memory.md +197 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-multiagent.md +99 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-onboarding.md +114 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-outcomes.md +106 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-overview.md +67 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-tools.md +315 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/managed-agents-webhooks.md +110 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/model-migration.md +779 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/models.md +16 -14
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/prompt-caching.md +45 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/shared/tool-use-concepts.md +28 -6
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/README.md +15 -15
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/batches.md +2 -2
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/files-api.md +1 -1
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/streaming.md +5 -5
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/claude-api/tool-use.md +15 -15
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/managed-agents/README.md +359 -0
- package/bundled/upstream/anthropic-skills/skills/internal-comms/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/mcp-builder/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/skill-creator/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/slack-gif-creator/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/theme-factory/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/web-artifacts-builder/LICENSE.txt +1 -1
- package/bundled/upstream/anthropic-skills/skills/webapp-testing/LICENSE.txt +1 -1
- package/bundled/upstream/ecc/.omc-source/bundle.json +2 -3
- package/bundled/upstream/ecc/.omc-source/manifests/.claude-plugin/marketplace.json +4 -4
- package/bundled/upstream/ecc/agents/a11y-architect.md +10 -2
- package/bundled/upstream/ecc/agents/architect.md +9 -0
- package/bundled/upstream/ecc/agents/build-error-resolver.md +9 -0
- package/bundled/upstream/ecc/agents/chief-of-staff.md +9 -0
- package/bundled/upstream/ecc/agents/code-architect.md +9 -0
- package/bundled/upstream/ecc/agents/code-explorer.md +10 -1
- package/bundled/upstream/ecc/agents/code-reviewer.md +87 -1
- package/bundled/upstream/ecc/agents/code-simplifier.md +9 -0
- package/bundled/upstream/ecc/agents/comment-analyzer.md +10 -1
- package/bundled/upstream/ecc/agents/conversation-analyzer.md +9 -0
- package/bundled/upstream/ecc/agents/cpp-build-resolver.md +9 -0
- package/bundled/upstream/ecc/agents/cpp-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/csharp-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/dart-build-resolver.md +9 -0
- package/bundled/upstream/ecc/agents/database-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/django-build-resolver.md +252 -0
- package/bundled/upstream/ecc/agents/django-reviewer.md +169 -0
- package/bundled/upstream/ecc/agents/doc-updater.md +9 -0
- package/bundled/upstream/ecc/agents/docs-lookup.md +9 -0
- package/bundled/upstream/ecc/agents/e2e-runner.md +9 -0
- package/bundled/upstream/ecc/agents/fastapi-reviewer.md +79 -0
- package/bundled/upstream/ecc/agents/flutter-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/fsharp-reviewer.md +109 -0
- package/bundled/upstream/ecc/agents/gan-evaluator.md +9 -0
- package/bundled/upstream/ecc/agents/gan-generator.md +9 -0
- package/bundled/upstream/ecc/agents/gan-planner.md +9 -0
- package/bundled/upstream/ecc/agents/go-build-resolver.md +9 -0
- package/bundled/upstream/ecc/agents/go-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/harmonyos-app-resolver.md +182 -0
- package/bundled/upstream/ecc/agents/harness-optimizer.md +9 -0
- package/bundled/upstream/ecc/agents/healthcare-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/homelab-architect.md +107 -0
- package/bundled/upstream/ecc/agents/java-build-resolver.md +133 -11
- package/bundled/upstream/ecc/agents/java-reviewer.md +130 -32
- package/bundled/upstream/ecc/agents/kotlin-build-resolver.md +9 -0
- package/bundled/upstream/ecc/agents/kotlin-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/loop-operator.md +9 -0
- package/bundled/upstream/ecc/agents/mle-reviewer.md +162 -0
- package/bundled/upstream/ecc/agents/network-architect.md +106 -0
- package/bundled/upstream/ecc/agents/network-config-reviewer.md +106 -0
- package/bundled/upstream/ecc/agents/network-troubleshooter.md +128 -0
- package/bundled/upstream/ecc/agents/opensource-forker.md +9 -0
- package/bundled/upstream/ecc/agents/opensource-packager.md +9 -0
- package/bundled/upstream/ecc/agents/opensource-sanitizer.md +9 -0
- package/bundled/upstream/ecc/agents/performance-optimizer.md +9 -0
- package/bundled/upstream/ecc/agents/planner.md +9 -0
- package/bundled/upstream/ecc/agents/pr-test-analyzer.md +9 -0
- package/bundled/upstream/ecc/agents/python-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/pytorch-build-resolver.md +12 -3
- package/bundled/upstream/ecc/agents/refactor-cleaner.md +9 -0
- package/bundled/upstream/ecc/agents/rust-build-resolver.md +9 -0
- package/bundled/upstream/ecc/agents/rust-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/security-reviewer.md +9 -0
- package/bundled/upstream/ecc/agents/seo-specialist.md +10 -1
- package/bundled/upstream/ecc/agents/silent-failure-hunter.md +9 -0
- package/bundled/upstream/ecc/agents/swift-build-resolver.md +170 -0
- package/bundled/upstream/ecc/agents/swift-reviewer.md +116 -0
- package/bundled/upstream/ecc/agents/tdd-guide.md +9 -0
- package/bundled/upstream/ecc/agents/type-design-analyzer.md +10 -1
- package/bundled/upstream/ecc/agents/typescript-reviewer.md +9 -0
- package/bundled/upstream/ecc/commands/auto-update.md +28 -0
- package/bundled/upstream/ecc/commands/build-fix.md +4 -0
- package/bundled/upstream/ecc/commands/checkpoint.md +4 -0
- package/bundled/upstream/ecc/commands/code-review.md +3 -3
- package/bundled/upstream/ecc/commands/cost-report.md +107 -0
- package/bundled/upstream/ecc/commands/cpp-build.md +1 -1
- package/bundled/upstream/ecc/commands/cpp-test.md +1 -1
- package/bundled/upstream/ecc/commands/ecc-guide.md +93 -0
- package/bundled/upstream/ecc/commands/fastapi-review.md +39 -0
- package/bundled/upstream/ecc/commands/flutter-build.md +1 -1
- package/bundled/upstream/ecc/commands/flutter-test.md +1 -1
- package/bundled/upstream/ecc/commands/gan-build.md +4 -0
- package/bundled/upstream/ecc/commands/gan-design.md +4 -0
- package/bundled/upstream/ecc/commands/go-build.md +1 -1
- package/bundled/upstream/ecc/commands/go-test.md +1 -1
- package/bundled/upstream/ecc/commands/harness-audit.md +4 -0
- package/bundled/upstream/ecc/commands/jira.md +2 -2
- package/bundled/upstream/ecc/commands/kotlin-build.md +1 -1
- package/bundled/upstream/ecc/commands/kotlin-test.md +1 -1
- package/bundled/upstream/ecc/commands/learn.md +4 -0
- package/bundled/upstream/ecc/commands/loop-start.md +4 -0
- package/bundled/upstream/ecc/commands/loop-status.md +54 -1
- package/bundled/upstream/ecc/commands/model-route.md +4 -0
- package/bundled/upstream/ecc/commands/multi-backend.md +4 -0
- package/bundled/upstream/ecc/commands/multi-execute.md +4 -0
- package/bundled/upstream/ecc/commands/multi-frontend.md +4 -0
- package/bundled/upstream/ecc/commands/multi-plan.md +4 -0
- package/bundled/upstream/ecc/commands/multi-workflow.md +4 -0
- package/bundled/upstream/ecc/commands/plan-prd.md +160 -0
- package/bundled/upstream/ecc/commands/plan.md +96 -13
- package/bundled/upstream/ecc/commands/pm2.md +4 -0
- package/bundled/upstream/ecc/commands/pr.md +184 -0
- package/bundled/upstream/ecc/commands/project-init.md +86 -0
- package/bundled/upstream/ecc/commands/python-review.md +1 -1
- package/bundled/upstream/ecc/commands/quality-gate.md +4 -0
- package/bundled/upstream/ecc/commands/refactor-clean.md +4 -0
- package/bundled/upstream/ecc/commands/rust-build.md +1 -1
- package/bundled/upstream/ecc/commands/rust-test.md +1 -1
- package/bundled/upstream/ecc/commands/security-scan.md +92 -0
- package/bundled/upstream/ecc/commands/sessions.md +6 -6
- package/bundled/upstream/ecc/commands/skill-health.md +3 -3
- package/bundled/upstream/ecc/commands/test-coverage.md +4 -0
- package/bundled/upstream/ecc/commands/update-codemaps.md +4 -0
- package/bundled/upstream/ecc/commands/update-docs.md +4 -0
- package/bundled/upstream/ecc/skills/accessibility/SKILL.md +1 -1
- package/bundled/upstream/ecc/skills/agent-architecture-audit/SKILL.md +256 -0
- package/bundled/upstream/ecc/skills/agent-payment-x402/SKILL.md +49 -3
- package/bundled/upstream/ecc/skills/agentic-os/SKILL.md +387 -0
- package/bundled/upstream/ecc/skills/angular-developer/SKILL.md +154 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/angular-animations.md +160 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/angular-aria.md +410 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/cli.md +86 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/component-harnesses.md +59 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/component-styling.md +91 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/components.md +117 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/creating-services.md +97 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/data-resolvers.md +69 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/define-routes.md +67 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/defining-providers.md +72 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/e2e-testing.md +56 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/effects.md +83 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/host-elements.md +80 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/injection-context.md +63 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/inputs.md +101 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/linked-signal.md +59 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/loading-strategies.md +61 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/mcp.md +108 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/outputs.md +86 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/reactive-forms.md +122 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/resource.md +77 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/route-animations.md +56 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/route-guards.md +52 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/router-testing.md +87 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/signal-forms.md +795 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/signals-overview.md +94 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/tailwind-css.md +69 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/bundled/upstream/ecc/skills/angular-developer/references/testing-fundamentals.md +65 -0
- package/bundled/upstream/ecc/skills/autonomous-agent-harness/SKILL.md +6 -0
- package/bundled/upstream/ecc/skills/backend-patterns/SKILL.md +8 -45
- package/bundled/upstream/ecc/skills/cisco-ios-patterns/SKILL.md +163 -0
- package/bundled/upstream/ecc/skills/configure-ecc/SKILL.md +31 -14
- package/bundled/upstream/ecc/skills/continuous-learning/SKILL.md +10 -2
- package/bundled/upstream/ecc/skills/continuous-learning-v2/SKILL.md +19 -5
- package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +44 -4
- package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer.md +4 -4
- package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/start-observer.sh +5 -1
- package/bundled/upstream/ecc/skills/continuous-learning-v2/hooks/observe.sh +21 -5
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/detect-project.sh +58 -13
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +97 -4
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +34 -0
- package/bundled/upstream/ecc/skills/cost-tracking/SKILL.md +147 -0
- package/bundled/upstream/ecc/skills/deep-research/SKILL.md +4 -0
- package/bundled/upstream/ecc/skills/defi-amm-security/SKILL.md +6 -0
- package/bundled/upstream/ecc/skills/django-celery/SKILL.md +457 -0
- package/bundled/upstream/ecc/skills/ecc-guide/SKILL.md +189 -0
- package/bundled/upstream/ecc/skills/error-handling/SKILL.md +376 -0
- package/bundled/upstream/ecc/skills/exa-search/SKILL.md +4 -0
- package/bundled/upstream/ecc/skills/fal-ai-media/SKILL.md +4 -0
- package/bundled/upstream/ecc/skills/fastapi-patterns/SKILL.md +327 -0
- package/bundled/upstream/ecc/skills/flox-environments/SKILL.md +496 -0
- package/bundled/upstream/ecc/skills/frontend-design-direction/SKILL.md +92 -0
- package/bundled/upstream/ecc/skills/frontend-slides/animation-patterns.md +122 -0
- package/bundled/upstream/ecc/skills/frontend-slides/html-template.md +419 -0
- package/bundled/upstream/ecc/skills/frontend-slides/scripts/export-pdf.sh +418 -0
- package/bundled/upstream/ecc/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/bundled/upstream/ecc/skills/frontend-slides/viewport-base.css +153 -0
- package/bundled/upstream/ecc/skills/fsharp-testing/SKILL.md +280 -0
- package/bundled/upstream/ecc/skills/gateguard/SKILL.md +4 -0
- package/bundled/upstream/ecc/skills/hermes-imports/SKILL.md +88 -0
- package/bundled/upstream/ecc/skills/homelab-network-readiness/SKILL.md +169 -0
- package/bundled/upstream/ecc/skills/homelab-network-setup/SKILL.md +129 -0
- package/bundled/upstream/ecc/skills/homelab-pihole-dns/SKILL.md +274 -0
- package/bundled/upstream/ecc/skills/homelab-vlan-segmentation/SKILL.md +311 -0
- package/bundled/upstream/ecc/skills/homelab-wireguard-vpn/SKILL.md +305 -0
- package/bundled/upstream/ecc/skills/ios-icon-gen/SKILL.md +157 -0
- package/bundled/upstream/ecc/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
- package/bundled/upstream/ecc/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
- package/bundled/upstream/ecc/skills/java-coding-standards/SKILL.md +241 -5
- package/bundled/upstream/ecc/skills/make-interfaces-feel-better/SKILL.md +151 -0
- package/bundled/upstream/ecc/skills/mle-workflow/SKILL.md +346 -0
- package/bundled/upstream/ecc/skills/motion-advanced/SKILL.md +596 -0
- package/bundled/upstream/ecc/skills/motion-foundations/SKILL.md +299 -0
- package/bundled/upstream/ecc/skills/motion-patterns/SKILL.md +435 -0
- package/bundled/upstream/ecc/skills/motion-ui/SKILL.md +575 -0
- package/bundled/upstream/ecc/skills/mysql-patterns/SKILL.md +412 -0
- package/bundled/upstream/ecc/skills/netmiko-ssh-automation/SKILL.md +173 -0
- package/bundled/upstream/ecc/skills/network-bgp-diagnostics/SKILL.md +167 -0
- package/bundled/upstream/ecc/skills/network-config-validation/SKILL.md +210 -0
- package/bundled/upstream/ecc/skills/network-interface-health/SKILL.md +152 -0
- package/bundled/upstream/ecc/skills/openclaw-persona-forge/SKILL.md +1 -9
- package/bundled/upstream/ecc/skills/plan-orchestrate/SKILL.md +262 -0
- package/bundled/upstream/ecc/skills/prisma-patterns/SKILL.md +371 -0
- package/bundled/upstream/ecc/skills/production-audit/SKILL.md +206 -0
- package/bundled/upstream/ecc/skills/prompt-optimizer/SKILL.md +24 -400
- package/bundled/upstream/ecc/skills/quarkus-patterns/SKILL.md +722 -0
- package/bundled/upstream/ecc/skills/quarkus-security/SKILL.md +467 -0
- package/bundled/upstream/ecc/skills/quarkus-tdd/SKILL.md +811 -0
- package/bundled/upstream/ecc/skills/quarkus-verification/SKILL.md +479 -0
- package/bundled/upstream/ecc/skills/redis-patterns/SKILL.md +403 -0
- package/bundled/upstream/ecc/skills/scientific-db-pubmed-database/SKILL.md +175 -0
- package/bundled/upstream/ecc/skills/scientific-db-uspto-database/SKILL.md +177 -0
- package/bundled/upstream/ecc/skills/scientific-pkg-gget/SKILL.md +166 -0
- package/bundled/upstream/ecc/skills/scientific-thinking-literature-review/SKILL.md +192 -0
- package/bundled/upstream/ecc/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
- package/bundled/upstream/ecc/skills/search-first/SKILL.md +23 -2
- package/bundled/upstream/ecc/skills/security-review/SKILL.md +10 -2
- package/bundled/upstream/ecc/skills/skill-comply/scripts/runner.py +28 -3
- package/bundled/upstream/ecc/skills/skill-comply/tests/test_runner.py +172 -0
- package/bundled/upstream/ecc/skills/skill-scout/SKILL.md +140 -0
- package/bundled/upstream/ecc/skills/skill-stocktake/SKILL.md +1 -0
- package/bundled/upstream/ecc/skills/strategic-compact/SKILL.md +2 -2
- package/bundled/upstream/ecc/skills/tinystruct-patterns/SKILL.md +203 -0
- package/bundled/upstream/ecc/skills/tinystruct-patterns/references/architecture.md +90 -0
- package/bundled/upstream/ecc/skills/tinystruct-patterns/references/data-handling.md +60 -0
- package/bundled/upstream/ecc/skills/tinystruct-patterns/references/database.md +99 -0
- package/bundled/upstream/ecc/skills/tinystruct-patterns/references/routing.md +64 -0
- package/bundled/upstream/ecc/skills/tinystruct-patterns/references/system-usage.md +97 -0
- package/bundled/upstream/ecc/skills/tinystruct-patterns/references/testing.md +72 -0
- package/bundled/upstream/ecc/skills/ui-to-vue/SKILL.md +134 -0
- package/bundled/upstream/ecc/skills/vite-patterns/SKILL.md +449 -0
- package/bundled/upstream/ecc/skills/windows-desktop-e2e/SKILL.md +788 -0
- package/bundled/upstream/ecc/skills/x-api/SKILL.md +4 -0
- package/bundled/upstream/oh-my-claudecode/.omc-source/bundle.json +20 -0
- package/bundled/upstream/oh-my-claudecode/agents/analyst.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/architect.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/code-reviewer.md +26 -7
- package/bundled/upstream/oh-my-claudecode/agents/critic.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/debugger.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/designer.md +14 -1
- package/bundled/upstream/oh-my-claudecode/agents/document-specialist.md +1 -1
- package/bundled/upstream/oh-my-claudecode/agents/executor.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/explore.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/git-master.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/planner.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/qa-tester.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/scientist.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/security-reviewer.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/test-engineer.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/tracer.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/verifier.md +2 -1
- package/bundled/upstream/oh-my-claudecode/agents/writer.md +2 -1
- package/bundled/upstream/oh-my-claudecode/skills/AGENTS.md +4 -3
- package/bundled/upstream/oh-my-claudecode/skills/ai-slop-cleaner/SKILL.md +12 -0
- package/bundled/upstream/oh-my-claudecode/skills/deep-dive/SKILL.md +69 -13
- package/bundled/upstream/oh-my-claudecode/skills/deep-interview/SKILL.md +176 -63
- package/bundled/upstream/oh-my-claudecode/skills/learner/SKILL.md +3 -1
- package/bundled/upstream/oh-my-claudecode/skills/omc-doctor/SKILL.md +22 -3
- package/bundled/upstream/oh-my-claudecode/skills/omc-reference/SKILL.md +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/01-install-claude-md.md +2 -2
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/02-configure.md +45 -2
- package/bundled/upstream/oh-my-claudecode/skills/omc-setup/phases/03-integrations.md +46 -5
- package/bundled/upstream/oh-my-claudecode/skills/plan/SKILL.md +19 -17
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/config.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/parse.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/azure-devops.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/bitbucket.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/gitea.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/github.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/gitlab.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/interface.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/providers/jira.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/session.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/tmux.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/lib/worktree.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/psm.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/project-session-manager/tests/test-psm-prompt-injection.sh +1 -1
- package/bundled/upstream/oh-my-claudecode/skills/ralph/SKILL.md +8 -8
- package/bundled/upstream/oh-my-claudecode/skills/ralplan/SKILL.md +9 -5
- package/bundled/upstream/oh-my-claudecode/skills/skill/SKILL.md +6 -6
- package/bundled/upstream/oh-my-claudecode/skills/skillify/SKILL.md +19 -3
- package/bundled/upstream/oh-my-claudecode/skills/trace/SKILL.md +3 -1
- package/bundled/upstream/oh-my-claudecode/skills/ultrawork/SKILL.md +20 -7
- package/bundled/upstream/superpowers/.omc-source/bundle.json +21 -0
- package/bundled/upstream/superpowers/hooks/hooks-cursor.json +1 -1
- package/bundled/upstream/superpowers/skills/executing-plans/SKILL.md +1 -1
- package/bundled/upstream/superpowers/skills/finishing-a-development-branch/SKILL.md +93 -42
- package/bundled/upstream/superpowers/skills/requesting-code-review/SKILL.md +7 -9
- package/bundled/upstream/superpowers/skills/requesting-code-review/code-reviewer.md +107 -85
- package/bundled/upstream/superpowers/skills/subagent-driven-development/SKILL.md +3 -1
- package/bundled/upstream/superpowers/skills/subagent-driven-development/code-quality-reviewer-prompt.md +2 -3
- package/bundled/upstream/superpowers/skills/systematic-debugging/CREATION-LOG.md +1 -1
- package/bundled/upstream/superpowers/skills/systematic-debugging/root-cause-tracing.md +1 -1
- package/bundled/upstream/superpowers/skills/using-git-worktrees/SKILL.md +95 -98
- package/bundled/upstream/superpowers/skills/using-superpowers/references/codex-tools.md +7 -48
- package/bundled/upstream/superpowers/skills/using-superpowers/references/copilot-tools.md +1 -11
- package/bundled/upstream/superpowers/skills/using-superpowers/references/gemini-tools.md +21 -3
- package/bundled/upstream/superpowers/skills/writing-plans/SKILL.md +1 -1
- package/package.json +1 -1
- package/src/cli/index.js +1 -0
- package/src/cli/setup.js +9 -0
- package/src/cli/skill-index.js +209 -0
- package/src/cli/skill.js +4 -0
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/agent-sdk/README.md +0 -355
- package/bundled/upstream/anthropic-skills/skills/claude-api/python/agent-sdk/patterns.md +0 -359
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/agent-sdk/README.md +0 -297
- package/bundled/upstream/anthropic-skills/skills/claude-api/typescript/agent-sdk/patterns.md +0 -209
- package/bundled/upstream/ecc/commands/agent-sort.md +0 -23
- package/bundled/upstream/ecc/commands/claw.md +0 -23
- package/bundled/upstream/ecc/commands/context-budget.md +0 -23
- package/bundled/upstream/ecc/commands/devfleet.md +0 -23
- package/bundled/upstream/ecc/commands/docs.md +0 -23
- package/bundled/upstream/ecc/commands/e2e.md +0 -268
- package/bundled/upstream/ecc/commands/eval.md +0 -23
- package/bundled/upstream/ecc/commands/orchestrate.md +0 -135
- package/bundled/upstream/ecc/commands/prompt-optimize.md +0 -23
- package/bundled/upstream/ecc/commands/rules-distill.md +0 -20
- package/bundled/upstream/ecc/commands/tdd.md +0 -231
- package/bundled/upstream/ecc/commands/verify.md +0 -23
- package/bundled/upstream/ecc/skills/claude-api/SKILL.md +0 -337
- package/bundled/upstream/ecc/skills/frontend-design/SKILL.md +0 -145
- package/bundled/upstream/superpowers/agents/code-reviewer.md +0 -48
- package/bundled/upstream/superpowers/commands/brainstorm.md +0 -5
- package/bundled/upstream/superpowers/commands/execute-plan.md +0 -5
- package/bundled/upstream/superpowers/commands/write-plan.md +0 -5
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fsharp-testing
|
|
3
|
+
description: F# testing patterns with xUnit, FsUnit, Unquote, FsCheck property-based testing, integration tests, and test organization best practices.
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# F# Testing Patterns
|
|
8
|
+
|
|
9
|
+
Comprehensive testing patterns for F# applications using xUnit, FsUnit, Unquote, FsCheck, and modern .NET testing practices.
|
|
10
|
+
|
|
11
|
+
## When to Activate
|
|
12
|
+
|
|
13
|
+
- Writing new tests for F# code
|
|
14
|
+
- Reviewing test quality and coverage
|
|
15
|
+
- Setting up test infrastructure for F# projects
|
|
16
|
+
- Debugging flaky or slow tests
|
|
17
|
+
|
|
18
|
+
## Test Framework Stack
|
|
19
|
+
|
|
20
|
+
| Tool | Purpose |
|
|
21
|
+
|---|---|
|
|
22
|
+
| **xUnit** | Test framework (standard .NET ecosystem choice) |
|
|
23
|
+
| **FsUnit.xUnit** | F#-friendly assertion syntax for xUnit |
|
|
24
|
+
| **Unquote** | Assertion library using F# quotations for clear failure messages |
|
|
25
|
+
| **FsCheck.xUnit** | Property-based testing integrated with xUnit |
|
|
26
|
+
| **NSubstitute** | Mocking .NET dependencies |
|
|
27
|
+
| **Testcontainers** | Real infrastructure in integration tests |
|
|
28
|
+
| **WebApplicationFactory** | ASP.NET Core integration tests |
|
|
29
|
+
|
|
30
|
+
## Unit Tests with xUnit + FsUnit
|
|
31
|
+
|
|
32
|
+
### Basic Test Structure
|
|
33
|
+
|
|
34
|
+
```fsharp
|
|
35
|
+
module OrderServiceTests
|
|
36
|
+
|
|
37
|
+
open Xunit
|
|
38
|
+
open FsUnit.Xunit
|
|
39
|
+
|
|
40
|
+
[<Fact>]
|
|
41
|
+
let ``create sets status to Pending`` () =
|
|
42
|
+
let order = Order.create "cust-1" [ validItem ]
|
|
43
|
+
order.Status |> should equal Pending
|
|
44
|
+
|
|
45
|
+
[<Fact>]
|
|
46
|
+
let ``confirm changes status to Confirmed`` () =
|
|
47
|
+
let order = Order.create "cust-1" [ validItem ]
|
|
48
|
+
let confirmed = Order.confirm order
|
|
49
|
+
confirmed.Status |> should be (ofCase <@ Confirmed @>)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Assertions with Unquote
|
|
53
|
+
|
|
54
|
+
Unquote uses F# quotations so failure messages show the full expression that failed, not just "expected X got Y".
|
|
55
|
+
|
|
56
|
+
```fsharp
|
|
57
|
+
module OrderValidationTests
|
|
58
|
+
|
|
59
|
+
open Xunit
|
|
60
|
+
open Swensen.Unquote
|
|
61
|
+
|
|
62
|
+
[<Fact>]
|
|
63
|
+
let ``PlaceOrder returns success when request is valid`` () =
|
|
64
|
+
let request = { CustomerId = "cust-123"; Items = [ validItem ] }
|
|
65
|
+
let result = OrderService.placeOrder request
|
|
66
|
+
test <@ Result.isOk result @>
|
|
67
|
+
|
|
68
|
+
[<Fact>]
|
|
69
|
+
let ``order total sums item prices`` () =
|
|
70
|
+
let items = [ { Sku = "A"; Quantity = 2; Price = 10m }
|
|
71
|
+
{ Sku = "B"; Quantity = 1; Price = 5m } ]
|
|
72
|
+
let total = Order.calculateTotal items
|
|
73
|
+
test <@ total = 25m @>
|
|
74
|
+
|
|
75
|
+
[<Fact>]
|
|
76
|
+
let ``validated email rejects empty input`` () =
|
|
77
|
+
let result = ValidatedEmail.create ""
|
|
78
|
+
test <@ Result.isError result @>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Async Tests
|
|
82
|
+
|
|
83
|
+
```fsharp
|
|
84
|
+
[<Fact>]
|
|
85
|
+
let ``PlaceOrder returns success when request is valid`` () = task {
|
|
86
|
+
let deps = createTestDeps ()
|
|
87
|
+
let request = { CustomerId = "cust-123"; Items = [ validItem ] }
|
|
88
|
+
|
|
89
|
+
let! result = OrderService.placeOrder deps request
|
|
90
|
+
|
|
91
|
+
test <@ Result.isOk result @>
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
[<Fact>]
|
|
95
|
+
let ``PlaceOrder returns error when items are empty`` () = task {
|
|
96
|
+
let deps = createTestDeps ()
|
|
97
|
+
let request = { CustomerId = "cust-123"; Items = [] }
|
|
98
|
+
|
|
99
|
+
let! result = OrderService.placeOrder deps request
|
|
100
|
+
|
|
101
|
+
test <@ Result.isError result @>
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Parameterized Tests with Theory
|
|
106
|
+
|
|
107
|
+
```fsharp
|
|
108
|
+
[<Theory>]
|
|
109
|
+
[<InlineData("")>]
|
|
110
|
+
[<InlineData(" ")>]
|
|
111
|
+
let ``PlaceOrder rejects empty customer ID`` (customerId: string) =
|
|
112
|
+
let request = { CustomerId = customerId; Items = [ validItem ] }
|
|
113
|
+
let result = OrderService.placeOrder request
|
|
114
|
+
result |> should be (ofCase <@ Error @>)
|
|
115
|
+
|
|
116
|
+
[<Theory>]
|
|
117
|
+
[<InlineData("", false)>]
|
|
118
|
+
[<InlineData("a", false)>]
|
|
119
|
+
[<InlineData("user@example.com", true)>]
|
|
120
|
+
[<InlineData("user+tag@example.co.uk", true)>]
|
|
121
|
+
let ``IsValidEmail returns expected result`` (email: string, expected: bool) =
|
|
122
|
+
test <@ EmailValidator.isValid email = expected @>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Property-Based Testing with FsCheck
|
|
126
|
+
|
|
127
|
+
### Using FsCheck.xUnit
|
|
128
|
+
|
|
129
|
+
```fsharp
|
|
130
|
+
open FsCheck
|
|
131
|
+
open FsCheck.Xunit
|
|
132
|
+
|
|
133
|
+
[<Property>]
|
|
134
|
+
let ``order total is always non-negative`` (items: NonEmptyList<PositiveInt * decimal>) =
|
|
135
|
+
let orderItems =
|
|
136
|
+
items.Get
|
|
137
|
+
|> List.map (fun (qty, price) ->
|
|
138
|
+
{ Sku = "SKU"; Quantity = qty.Get; Price = abs price })
|
|
139
|
+
let total = Order.calculateTotal orderItems
|
|
140
|
+
total >= 0m
|
|
141
|
+
|
|
142
|
+
[<Property>]
|
|
143
|
+
let ``serialization roundtrips`` (order: Order) =
|
|
144
|
+
let json = JsonSerializer.Serialize order
|
|
145
|
+
let deserialized = JsonSerializer.Deserialize<Order> json
|
|
146
|
+
deserialized = order
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Custom Generators
|
|
150
|
+
|
|
151
|
+
```fsharp
|
|
152
|
+
type OrderGenerators =
|
|
153
|
+
static member ValidEmail () =
|
|
154
|
+
gen {
|
|
155
|
+
let! user = Gen.elements [ "alice"; "bob"; "carol" ]
|
|
156
|
+
let! domain = Gen.elements [ "example.com"; "test.org" ]
|
|
157
|
+
return $"{user}@{domain}"
|
|
158
|
+
}
|
|
159
|
+
|> Arb.fromGen
|
|
160
|
+
|
|
161
|
+
[<Property(Arbitrary = [| typeof<OrderGenerators> |])>]
|
|
162
|
+
let ``valid emails pass validation`` (email: string) =
|
|
163
|
+
EmailValidator.isValid email
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Mocking Dependencies
|
|
167
|
+
|
|
168
|
+
### Function Stubs (Preferred)
|
|
169
|
+
|
|
170
|
+
```fsharp
|
|
171
|
+
let createTestDeps () =
|
|
172
|
+
let mutable savedOrders = []
|
|
173
|
+
{ FindOrder = fun id -> task { return Map.tryFind id testData }
|
|
174
|
+
SaveOrder = fun order -> task { savedOrders <- order :: savedOrders }
|
|
175
|
+
SendNotification = fun _ -> Task.CompletedTask }
|
|
176
|
+
|
|
177
|
+
[<Fact>]
|
|
178
|
+
let ``PlaceOrder saves the confirmed order`` () = task {
|
|
179
|
+
let mutable saved = []
|
|
180
|
+
let deps =
|
|
181
|
+
{ createTestDeps () with
|
|
182
|
+
SaveOrder = fun order -> task { saved <- order :: saved } }
|
|
183
|
+
|
|
184
|
+
let! _ = OrderService.placeOrder deps validRequest
|
|
185
|
+
|
|
186
|
+
test <@ saved.Length = 1 @>
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### NSubstitute for .NET Interfaces
|
|
191
|
+
|
|
192
|
+
```fsharp
|
|
193
|
+
open NSubstitute
|
|
194
|
+
|
|
195
|
+
[<Fact>]
|
|
196
|
+
let ``calls repository with correct ID`` () = task {
|
|
197
|
+
let repo = Substitute.For<IOrderRepository>()
|
|
198
|
+
repo.FindByIdAsync(Arg.Any<Guid>(), Arg.Any<CancellationToken>())
|
|
199
|
+
.Returns(Task.FromResult(Some testOrder))
|
|
200
|
+
|
|
201
|
+
let service = OrderService(repo)
|
|
202
|
+
let! _ = service.GetOrder(testOrder.Id, CancellationToken.None)
|
|
203
|
+
|
|
204
|
+
do! repo.Received(1).FindByIdAsync(testOrder.Id, Arg.Any<CancellationToken>())
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## ASP.NET Core Integration Tests
|
|
209
|
+
|
|
210
|
+
```fsharp
|
|
211
|
+
type OrderApiTests (factory: WebApplicationFactory<Program>) =
|
|
212
|
+
interface IClassFixture<WebApplicationFactory<Program>>
|
|
213
|
+
|
|
214
|
+
let client =
|
|
215
|
+
factory.WithWebHostBuilder(fun builder ->
|
|
216
|
+
builder.ConfigureServices(fun services ->
|
|
217
|
+
services.RemoveAll<DbContextOptions<AppDbContext>>() |> ignore
|
|
218
|
+
services.AddDbContext<AppDbContext>(fun options ->
|
|
219
|
+
options.UseInMemoryDatabase("TestDb") |> ignore) |> ignore))
|
|
220
|
+
.CreateClient()
|
|
221
|
+
|
|
222
|
+
[<Fact>]
|
|
223
|
+
member _.``GET order returns 404 when not found`` () = task {
|
|
224
|
+
let! response = client.GetAsync($"/api/orders/{Guid.NewGuid()}")
|
|
225
|
+
test <@ response.StatusCode = HttpStatusCode.NotFound @>
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## Test Organization
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
tests/
|
|
233
|
+
MyApp.Tests/
|
|
234
|
+
Unit/
|
|
235
|
+
OrderServiceTests.fs
|
|
236
|
+
PaymentServiceTests.fs
|
|
237
|
+
Integration/
|
|
238
|
+
OrderApiTests.fs
|
|
239
|
+
OrderRepositoryTests.fs
|
|
240
|
+
Properties/
|
|
241
|
+
OrderPropertyTests.fs
|
|
242
|
+
Helpers/
|
|
243
|
+
TestData.fs
|
|
244
|
+
TestDeps.fs
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Common Anti-Patterns
|
|
248
|
+
|
|
249
|
+
| Anti-Pattern | Fix |
|
|
250
|
+
|---|---|
|
|
251
|
+
| Testing implementation details | Test behavior and outcomes |
|
|
252
|
+
| Mutable shared test state | Fresh state per test |
|
|
253
|
+
| `Thread.Sleep` in async tests | Use `Task.Delay` with timeout, or polling helpers |
|
|
254
|
+
| Asserting on `sprintf` output | Assert on typed values and pattern matches |
|
|
255
|
+
| Ignoring `CancellationToken` | Always pass and verify cancellation |
|
|
256
|
+
| Skipping property-based tests | Use FsCheck for any function with clear invariants |
|
|
257
|
+
|
|
258
|
+
## Related Skills
|
|
259
|
+
|
|
260
|
+
- `dotnet-patterns` - Idiomatic .NET patterns, dependency injection, and architecture
|
|
261
|
+
- `csharp-testing` - C# testing patterns (shared infrastructure like WebApplicationFactory and Testcontainers applies to F# too)
|
|
262
|
+
|
|
263
|
+
## Running Tests
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
# Run all tests
|
|
267
|
+
dotnet test
|
|
268
|
+
|
|
269
|
+
# Run with coverage
|
|
270
|
+
dotnet test --collect:"XPlat Code Coverage"
|
|
271
|
+
|
|
272
|
+
# Run specific project
|
|
273
|
+
dotnet test tests/MyApp.Tests/
|
|
274
|
+
|
|
275
|
+
# Filter by test name
|
|
276
|
+
dotnet test --filter "FullyQualifiedName~OrderService"
|
|
277
|
+
|
|
278
|
+
# Watch mode during development
|
|
279
|
+
dotnet watch test --project tests/MyApp.Tests/
|
|
280
|
+
```
|
|
@@ -94,6 +94,10 @@ Triggers on: `rm -rf`, `git reset --hard`, `git push --force`, `drop table`, etc
|
|
|
94
94
|
|
|
95
95
|
The hook at `scripts/hooks/gateguard-fact-force.js` is included in this plugin. Enable it via hooks.json.
|
|
96
96
|
|
|
97
|
+
If GateGuard blocks setup or repair work, start the session with
|
|
98
|
+
`ECC_GATEGUARD=off`. For hook-level control, keep using
|
|
99
|
+
`ECC_DISABLED_HOOKS` with the GateGuard hook ID.
|
|
100
|
+
|
|
97
101
|
### Option B: Full package with config
|
|
98
102
|
|
|
99
103
|
```bash
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hermes-imports
|
|
3
|
+
description: Convert local Hermes operator workflows into sanitized ECC skills and release-pack artifacts. Use when preparing a Hermes workflow for public ECC reuse without leaking private workspace state, credentials, or local-only paths.
|
|
4
|
+
origin: ECC
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Hermes Imports
|
|
8
|
+
|
|
9
|
+
Use this skill when turning a repeated Hermes workflow into something safe to ship in ECC.
|
|
10
|
+
|
|
11
|
+
Hermes is the operator shell. ECC is the reusable workflow layer. Imports should move stable patterns from Hermes into ECC without moving private state.
|
|
12
|
+
|
|
13
|
+
## When To Use
|
|
14
|
+
|
|
15
|
+
- A Hermes workflow has repeated enough times to become reusable.
|
|
16
|
+
- A local operator prompt should become a public ECC skill.
|
|
17
|
+
- A launch, content, research, or engineering workflow needs sanitized handoff docs.
|
|
18
|
+
- A workflow mentions local paths, credentials, personal datasets, or private account names that must be removed before publication.
|
|
19
|
+
|
|
20
|
+
## Import Rules
|
|
21
|
+
|
|
22
|
+
- Convert local paths to repo-relative paths or placeholders.
|
|
23
|
+
- Replace live account names with role labels such as `operator`, `default profile`, or `workspace owner`.
|
|
24
|
+
- Describe credential requirements by provider name only.
|
|
25
|
+
- Keep examples narrow and operational.
|
|
26
|
+
- Do not ship raw workspace exports, tokens, OAuth files, health data, CRM data, or finance data.
|
|
27
|
+
- If the workflow requires private state to make sense, keep it local.
|
|
28
|
+
|
|
29
|
+
## Sanitization Checklist
|
|
30
|
+
|
|
31
|
+
Before committing an imported workflow, scan for:
|
|
32
|
+
|
|
33
|
+
- absolute paths such as `/Users/...`
|
|
34
|
+
- `~/.hermes` paths unless the doc is explicitly explaining local setup
|
|
35
|
+
- API keys, tokens, cookies, OAuth files, or bearer strings
|
|
36
|
+
- phone numbers, private email addresses, and personal contact graphs
|
|
37
|
+
- client names, family names, or account names that are not already public
|
|
38
|
+
- revenue, health, or CRM details
|
|
39
|
+
- raw logs that include tool output from private systems
|
|
40
|
+
|
|
41
|
+
## Conversion Pattern
|
|
42
|
+
|
|
43
|
+
1. Identify the repeatable operator loop.
|
|
44
|
+
2. Strip private inputs and outputs.
|
|
45
|
+
3. Rewrite local paths as repo-relative examples.
|
|
46
|
+
4. Turn one-off instructions into a `When To Use` section and a short process.
|
|
47
|
+
5. Add concrete output requirements.
|
|
48
|
+
6. Run a secret and local-path scan before opening a PR.
|
|
49
|
+
|
|
50
|
+
## Example: Launch Handoff
|
|
51
|
+
|
|
52
|
+
Local Hermes prompt:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
Read my local workspace files and finalize launch copy.
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
ECC-safe version:
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
Use the public release pack under docs/releases/<version>/.
|
|
62
|
+
Return one X thread, one LinkedIn post, one recording checklist, and the missing assets list.
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Example: Quiet-Hours Operator Job
|
|
66
|
+
|
|
67
|
+
Local Hermes job:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
Run my private inbox, finance, and content checks overnight.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
ECC-safe version:
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
Describe the scheduler policy, the quiet-hours window, the escalation rules, and the categories of checks. Do not include private data sources or credentials.
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Output Contract
|
|
80
|
+
|
|
81
|
+
Return:
|
|
82
|
+
|
|
83
|
+
- candidate ECC skill name
|
|
84
|
+
- sanitized workflow summary
|
|
85
|
+
- required public inputs
|
|
86
|
+
- private inputs removed
|
|
87
|
+
- remaining risks
|
|
88
|
+
- files that should be created or updated
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: homelab-network-readiness
|
|
3
|
+
description: Readiness checklist for homelab VLAN segmentation, local DNS filtering, and WireGuard-style remote access before changing router, firewall, DHCP, or VPN configuration.
|
|
4
|
+
origin: community
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Homelab Network Readiness
|
|
8
|
+
|
|
9
|
+
Use this skill before changing a home or small-lab network that mixes VLANs,
|
|
10
|
+
Pi-hole or another local DNS resolver, firewall rules, and remote VPN access.
|
|
11
|
+
|
|
12
|
+
This is a planning and review skill. Do not turn it into copy-paste router,
|
|
13
|
+
firewall, or VPN configuration unless the target platform, current topology,
|
|
14
|
+
rollback path, console access, and maintenance window are all known.
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
- Preparing to split a flat network into trusted, IoT, guest, server, or
|
|
19
|
+
management VLANs.
|
|
20
|
+
- Moving DHCP clients to Pi-hole, AdGuard Home, Unbound, or another local DNS
|
|
21
|
+
resolver.
|
|
22
|
+
- Adding WireGuard, Tailscale, ZeroTier, OpenVPN, or router-native VPN access.
|
|
23
|
+
- Reviewing whether a homelab change can lock the operator out of the gateway,
|
|
24
|
+
switch, access point, DNS server, or VPN server.
|
|
25
|
+
- Turning an informal home-network idea into a staged migration plan with
|
|
26
|
+
validation evidence.
|
|
27
|
+
|
|
28
|
+
## Safety Rules
|
|
29
|
+
|
|
30
|
+
- Keep the first answer read-only: inventory, risks, staged plan, validation,
|
|
31
|
+
and rollback.
|
|
32
|
+
- Do not expose gateway admin panels, DNS resolvers, SSH, NAS consoles, or VPN
|
|
33
|
+
management UIs directly to the public internet.
|
|
34
|
+
- Do not provide firewall, NAT, VLAN, DHCP, or VPN commands without a confirmed
|
|
35
|
+
platform and a rollback procedure.
|
|
36
|
+
- Require out-of-band or same-room console access before changing management
|
|
37
|
+
VLANs, trunk ports, firewall default policies, or DHCP/DNS settings.
|
|
38
|
+
- Keep a working path back to the internet before pointing the whole network at
|
|
39
|
+
a new DNS resolver or VPN route.
|
|
40
|
+
- Treat IoT, guest, camera, and lab-server networks as different trust zones
|
|
41
|
+
until the operator explicitly chooses otherwise.
|
|
42
|
+
|
|
43
|
+
## Required Inventory
|
|
44
|
+
|
|
45
|
+
Collect this before giving implementation steps:
|
|
46
|
+
|
|
47
|
+
| Area | Questions |
|
|
48
|
+
| --- | --- |
|
|
49
|
+
| Internet edge | What is the modem or ONT? Is the ISP router bridged or still routing? |
|
|
50
|
+
| Gateway | What routes, firewalls, handles DHCP, and terminates VPNs? |
|
|
51
|
+
| Switching | Which switch ports are uplinks, access ports, trunks, or unmanaged? |
|
|
52
|
+
| Wi-Fi | Which SSIDs map to which networks, and are APs wired or mesh? |
|
|
53
|
+
| Addressing | What subnets exist today, and which ranges conflict with VPN sites? |
|
|
54
|
+
| DNS/DHCP | Which service currently hands out leases and resolver addresses? |
|
|
55
|
+
| Management | How will the operator reach the gateway, switch, and AP after changes? |
|
|
56
|
+
| Recovery | What can be reverted locally if DNS, DHCP, VLANs, or VPN routes break? |
|
|
57
|
+
|
|
58
|
+
## VLAN And Trust-Zone Plan
|
|
59
|
+
|
|
60
|
+
Start with intent rather than vendor syntax.
|
|
61
|
+
|
|
62
|
+
| Zone | Typical contents | Default policy |
|
|
63
|
+
| --- | --- | --- |
|
|
64
|
+
| Trusted | Laptops, phones, admin workstations | Can reach shared services and management only when needed |
|
|
65
|
+
| Servers | NAS, Home Assistant, lab hosts, DNS resolver | Accepts narrow inbound flows from trusted clients |
|
|
66
|
+
| IoT | TVs, smart plugs, cameras, speakers | Internet access plus explicit exceptions only |
|
|
67
|
+
| Guest | Visitor devices | Internet-only, no LAN reachability |
|
|
68
|
+
| Management | Gateway, switches, APs, controllers | Reachable only from trusted admin devices |
|
|
69
|
+
| VPN | Remote clients | Same or narrower access than trusted clients |
|
|
70
|
+
|
|
71
|
+
Before recommending VLAN IDs or subnets, confirm:
|
|
72
|
+
|
|
73
|
+
1. The gateway supports inter-VLAN routing and firewall rules.
|
|
74
|
+
2. The switch supports the required tagged and untagged port behavior.
|
|
75
|
+
3. The APs can map SSIDs to VLANs.
|
|
76
|
+
4. The operator knows which port they are connected through during the change.
|
|
77
|
+
5. The management network remains reachable after trunk and SSID changes.
|
|
78
|
+
|
|
79
|
+
## DNS Filtering Readiness
|
|
80
|
+
|
|
81
|
+
Pi-hole or another local resolver should be introduced as a dependency, not as a
|
|
82
|
+
single point of failure.
|
|
83
|
+
|
|
84
|
+
1. Give the resolver a reserved address before using it in DHCP options.
|
|
85
|
+
2. Confirm it can resolve public DNS and local `home.arpa` names.
|
|
86
|
+
3. Keep the gateway or a second resolver available as a temporary fallback.
|
|
87
|
+
4. Test one client or one VLAN before changing every DHCP scope.
|
|
88
|
+
5. Document which networks may bypass filtering and why.
|
|
89
|
+
6. Check that blocking rules do not break captive portals, work VPNs, firmware
|
|
90
|
+
updates, or medical/security devices.
|
|
91
|
+
|
|
92
|
+
Useful validation evidence:
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
Client gets expected DHCP lease
|
|
96
|
+
Client receives expected DNS resolver
|
|
97
|
+
Public DNS lookup succeeds
|
|
98
|
+
Local home.arpa lookup succeeds
|
|
99
|
+
Blocked test domain is blocked only where intended
|
|
100
|
+
Gateway and DNS admin interfaces are not reachable from guest or IoT networks
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Remote Access Readiness
|
|
104
|
+
|
|
105
|
+
For WireGuard-style access, decide what the VPN is allowed to reach before
|
|
106
|
+
generating keys or opening ports.
|
|
107
|
+
|
|
108
|
+
| Mode | Use when | Risk notes |
|
|
109
|
+
| --- | --- | --- |
|
|
110
|
+
| Split tunnel to one subnet | Remote admin for NAS or lab hosts | Keep route list narrow |
|
|
111
|
+
| Split tunnel to trusted services | Access selected apps by IP or DNS | Requires precise firewall rules |
|
|
112
|
+
| Full tunnel | Untrusted networks or travel | More bandwidth and DNS responsibility |
|
|
113
|
+
| Overlay VPN | Simpler remote access with identity controls | Still needs ACL review |
|
|
114
|
+
|
|
115
|
+
Do not recommend port forwarding until the operator confirms:
|
|
116
|
+
|
|
117
|
+
- The VPN endpoint is patched and actively maintained.
|
|
118
|
+
- The forwarded port goes only to the VPN service, not an admin UI.
|
|
119
|
+
- Dynamic DNS, public IP behavior, and ISP CGNAT status are understood.
|
|
120
|
+
- Peer keys can be revoked without rebuilding the whole network.
|
|
121
|
+
- Logs or connection status can verify who connected and when.
|
|
122
|
+
|
|
123
|
+
## Change Sequence
|
|
124
|
+
|
|
125
|
+
Prefer small, reversible changes:
|
|
126
|
+
|
|
127
|
+
1. Snapshot the current topology, IP plan, DHCP settings, DNS settings, and
|
|
128
|
+
firewall rules.
|
|
129
|
+
2. Reserve infrastructure addresses for gateway, DNS, controller, APs, NAS, and
|
|
130
|
+
VPN endpoint.
|
|
131
|
+
3. Create the new zone or VLAN without moving critical devices.
|
|
132
|
+
4. Move one test client and validate DHCP, DNS, routing, internet, and block
|
|
133
|
+
behavior.
|
|
134
|
+
5. Add narrow firewall exceptions for required flows.
|
|
135
|
+
6. Move one low-risk device group.
|
|
136
|
+
7. Add VPN access with the narrowest route and firewall policy that satisfies
|
|
137
|
+
the use case.
|
|
138
|
+
8. Document final state, known exceptions, and rollback commands or UI steps.
|
|
139
|
+
|
|
140
|
+
## Review Checklist
|
|
141
|
+
|
|
142
|
+
- Each network has a reason to exist and a clear trust boundary.
|
|
143
|
+
- No management interface is reachable from guest, IoT, or the public internet.
|
|
144
|
+
- DNS failure does not take down the operator's ability to recover locally.
|
|
145
|
+
- DHCP scope changes were tested on one client before broad rollout.
|
|
146
|
+
- VPN clients receive only the routes and DNS settings they need.
|
|
147
|
+
- Firewall rules are default-deny between zones, with named exceptions.
|
|
148
|
+
- The operator can still reach gateway, switch, AP, DNS, and VPN admin surfaces.
|
|
149
|
+
- Rollback is documented in the same vocabulary as the chosen platform UI or
|
|
150
|
+
CLI.
|
|
151
|
+
|
|
152
|
+
## Anti-Patterns
|
|
153
|
+
|
|
154
|
+
- Segmenting networks before knowing which switch ports and SSIDs carry which
|
|
155
|
+
VLANs.
|
|
156
|
+
- Moving the admin workstation off the only reachable management network.
|
|
157
|
+
- Pointing all DHCP scopes at a Pi-hole before testing fallback DNS.
|
|
158
|
+
- Publishing NAS, DNS, router, or hypervisor management directly to the
|
|
159
|
+
internet.
|
|
160
|
+
- Treating VPN access as equivalent to full trusted-LAN access.
|
|
161
|
+
- Adding allow-all firewall rules temporarily and forgetting to remove them.
|
|
162
|
+
- Copying commands from another vendor or firmware version without checking the
|
|
163
|
+
exact platform syntax.
|
|
164
|
+
|
|
165
|
+
## See Also
|
|
166
|
+
|
|
167
|
+
- Skill: `homelab-network-setup`
|
|
168
|
+
- Skill: `network-config-validation`
|
|
169
|
+
- Skill: `network-interface-health`
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: homelab-network-setup
|
|
3
|
+
description: Practical home and homelab network planning for gateways, switches, access points, IP ranges, DHCP reservations, DNS, cabling, and common beginner mistakes.
|
|
4
|
+
origin: community
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Homelab Network Setup
|
|
8
|
+
|
|
9
|
+
Use this skill to design a home or small-lab network that can grow without
|
|
10
|
+
needing a full rebuild.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- Planning a new home network or redesigning an ISP-router-only setup.
|
|
15
|
+
- Choosing gateway, switch, and access point roles.
|
|
16
|
+
- Designing IP ranges, DHCP scopes, static reservations, and DNS.
|
|
17
|
+
- Preparing for future VLANs, Pi-hole, NAS, lab servers, or VPN access.
|
|
18
|
+
- Troubleshooting a new network that has double NAT, unstable Wi-Fi, or changing
|
|
19
|
+
server addresses.
|
|
20
|
+
|
|
21
|
+
## How It Works
|
|
22
|
+
|
|
23
|
+
Start by separating device roles:
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
Internet
|
|
27
|
+
|
|
|
28
|
+
Modem or ONT
|
|
29
|
+
|
|
|
30
|
+
Gateway or router NAT, firewall, DHCP, DNS, inter-VLAN routing
|
|
31
|
+
|
|
|
32
|
+
Managed switch wired clients, AP uplinks, optional VLAN trunks
|
|
33
|
+
|
|
|
34
|
+
Access points Wi-Fi only; ideally wired backhaul
|
|
35
|
+
Servers and NAS stable addresses, DNS names, monitoring
|
|
36
|
+
Clients and IoT DHCP pools, isolated later if VLANs are available
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Pick a gateway that matches the operator, not just the feature checklist:
|
|
40
|
+
|
|
41
|
+
| Option | Best fit | Notes |
|
|
42
|
+
| --- | --- | --- |
|
|
43
|
+
| ISP router | Basic internet only | Limited control and often poor VLAN support |
|
|
44
|
+
| UniFi gateway | Managed home network | Good UI, ecosystem lock-in |
|
|
45
|
+
| OPNsense or pfSense | Flexible homelab | Strong VLAN, firewall, VPN, and DNS control |
|
|
46
|
+
| MikroTik | Advanced network users | Powerful, but easy to misconfigure |
|
|
47
|
+
| Linux router | Tinkerers | Document rollback before using as primary gateway |
|
|
48
|
+
|
|
49
|
+
## IP Plan
|
|
50
|
+
|
|
51
|
+
Avoid the most common default, `192.168.1.0/24`, when you expect to use VPNs.
|
|
52
|
+
It often conflicts with hotels, offices, and ISP routers.
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
Example small homelab plan:
|
|
56
|
+
|
|
57
|
+
192.168.10.0/24 trusted clients
|
|
58
|
+
192.168.20.0/24 IoT and media devices
|
|
59
|
+
192.168.30.0/24 servers and NAS
|
|
60
|
+
192.168.40.0/24 guest Wi-Fi
|
|
61
|
+
192.168.99.0/24 network management
|
|
62
|
+
|
|
63
|
+
Gateway convention: .1
|
|
64
|
+
Infrastructure reservations: .2 through .49
|
|
65
|
+
Dynamic DHCP pool: .50 through .240
|
|
66
|
+
Spare room: .241 through .254
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Use `home.arpa` for local names. It is reserved for home networks and avoids the
|
|
70
|
+
leakage/conflict problems of ad hoc names like `home.lan`.
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
nas.home.arpa
|
|
74
|
+
pihole.home.arpa
|
|
75
|
+
gateway.home.arpa
|
|
76
|
+
switch-01.home.arpa
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## DHCP And DNS
|
|
80
|
+
|
|
81
|
+
- Use DHCP reservations for anything you SSH into, bookmark, monitor, or expose
|
|
82
|
+
as a service.
|
|
83
|
+
- Hand out the gateway as DNS until a local resolver is intentionally deployed.
|
|
84
|
+
- If using Pi-hole or another DNS filter, give it a reservation first, then point
|
|
85
|
+
DHCP DNS options at that address.
|
|
86
|
+
- Keep a small static/reserved range per subnet so replacements do not collide
|
|
87
|
+
with dynamic leases.
|
|
88
|
+
|
|
89
|
+
## Cabling And Wi-Fi
|
|
90
|
+
|
|
91
|
+
- Prefer wired AP backhaul over mesh when you can run Ethernet.
|
|
92
|
+
- Use a PoE switch for APs and cameras if the budget allows it.
|
|
93
|
+
- Label both ends of each cable and keep a simple port map.
|
|
94
|
+
- Put the gateway, switch, DNS server, and NAS on UPS power if outages are common.
|
|
95
|
+
|
|
96
|
+
## Examples
|
|
97
|
+
|
|
98
|
+
### Beginner Upgrade
|
|
99
|
+
|
|
100
|
+
Goal: Keep the ISP router but stabilize a small lab.
|
|
101
|
+
|
|
102
|
+
1. Set DHCP reservations for NAS, Pi, and any SSH hosts.
|
|
103
|
+
2. Move local names to `home.arpa`.
|
|
104
|
+
3. Disable duplicate DHCP servers on secondary routers or APs.
|
|
105
|
+
4. Wire the main AP instead of relying on wireless backhaul.
|
|
106
|
+
|
|
107
|
+
### VLAN-Ready Plan
|
|
108
|
+
|
|
109
|
+
Goal: Prepare for future segmentation without enabling it immediately.
|
|
110
|
+
|
|
111
|
+
1. Choose non-overlapping /24 ranges for trusted, IoT, servers, guest, and
|
|
112
|
+
management.
|
|
113
|
+
2. Reserve .1 for the gateway and .2-.49 for infrastructure on every subnet.
|
|
114
|
+
3. Buy a gateway and switch that support VLANs and inter-VLAN firewall rules.
|
|
115
|
+
4. Document which SSIDs and switch ports will eventually map to each network.
|
|
116
|
+
|
|
117
|
+
## Anti-Patterns
|
|
118
|
+
|
|
119
|
+
- Double NAT without a reason or documentation.
|
|
120
|
+
- Using `192.168.1.0/24` when VPN access is planned.
|
|
121
|
+
- Dynamic addresses for NAS, Pi-hole, Home Assistant, or other service hosts.
|
|
122
|
+
- Consumer routers repurposed as APs while their DHCP servers are still enabled.
|
|
123
|
+
- Flat networks with cameras, smart plugs, laptops, and servers all sharing the
|
|
124
|
+
same trust boundary.
|
|
125
|
+
|
|
126
|
+
## See Also
|
|
127
|
+
|
|
128
|
+
- Skill: `network-interface-health`
|
|
129
|
+
- Skill: `network-config-validation`
|