@heytherevibin/skillforge 0.2.1
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/CHANGELOG.md +16 -0
- package/CODE_OF_CONDUCT.md +34 -0
- package/CONTRIBUTING.md +38 -0
- package/LICENSE +21 -0
- package/README.md +337 -0
- package/RELEASING.md +93 -0
- package/SECURITY.md +31 -0
- package/STRATEGY.md +26 -0
- package/bin/cli.js +547 -0
- package/lib/packs.js +184 -0
- package/package.json +38 -0
- package/python/app/__init__.py +0 -0
- package/python/app/__pycache__/__init__.cpython-312.pyc +0 -0
- package/python/app/__pycache__/auth.cpython-312.pyc +0 -0
- package/python/app/__pycache__/main.cpython-312.pyc +0 -0
- package/python/app/auth.py +63 -0
- package/python/app/cli.py +78 -0
- package/python/app/db_paths.py +26 -0
- package/python/app/events_cli.py +175 -0
- package/python/app/main.py +647 -0
- package/python/app/materialize.py +138 -0
- package/python/app/mcp_server.py +610 -0
- package/python/app/route_cli.py +117 -0
- package/python/requirements-dev.txt +1 -0
- package/python/requirements.txt +7 -0
- package/python/tests/test_db_paths.py +41 -0
- package/skills/accessibility/SKILL.md +145 -0
- package/skills/agent-architecture-audit/SKILL.md +256 -0
- package/skills/agent-eval/SKILL.md +144 -0
- package/skills/agent-harness-construction/SKILL.md +72 -0
- package/skills/agent-introspection-debugging/SKILL.md +152 -0
- package/skills/agent-payment-x402/SKILL.md +224 -0
- package/skills/agent-sort/SKILL.md +214 -0
- package/skills/agentic-engineering/SKILL.md +62 -0
- package/skills/agentic-os/SKILL.md +386 -0
- package/skills/ai-first-engineering/SKILL.md +50 -0
- package/skills/ai-regression-testing/SKILL.md +384 -0
- package/skills/android-clean-architecture/SKILL.md +338 -0
- package/skills/angular-developer/SKILL.md +153 -0
- package/skills/angular-developer/references/angular-animations.md +160 -0
- package/skills/angular-developer/references/angular-aria.md +410 -0
- package/skills/angular-developer/references/cli.md +86 -0
- package/skills/angular-developer/references/component-harnesses.md +59 -0
- package/skills/angular-developer/references/component-styling.md +91 -0
- package/skills/angular-developer/references/components.md +117 -0
- package/skills/angular-developer/references/creating-services.md +97 -0
- package/skills/angular-developer/references/data-resolvers.md +69 -0
- package/skills/angular-developer/references/define-routes.md +67 -0
- package/skills/angular-developer/references/defining-providers.md +72 -0
- package/skills/angular-developer/references/di-fundamentals.md +120 -0
- package/skills/angular-developer/references/e2e-testing.md +56 -0
- package/skills/angular-developer/references/effects.md +83 -0
- package/skills/angular-developer/references/hierarchical-injectors.md +43 -0
- package/skills/angular-developer/references/host-elements.md +80 -0
- package/skills/angular-developer/references/injection-context.md +63 -0
- package/skills/angular-developer/references/inputs.md +101 -0
- package/skills/angular-developer/references/linked-signal.md +59 -0
- package/skills/angular-developer/references/loading-strategies.md +61 -0
- package/skills/angular-developer/references/mcp.md +108 -0
- package/skills/angular-developer/references/navigate-to-routes.md +69 -0
- package/skills/angular-developer/references/outputs.md +86 -0
- package/skills/angular-developer/references/reactive-forms.md +122 -0
- package/skills/angular-developer/references/rendering-strategies.md +44 -0
- package/skills/angular-developer/references/resource.md +77 -0
- package/skills/angular-developer/references/route-animations.md +56 -0
- package/skills/angular-developer/references/route-guards.md +52 -0
- package/skills/angular-developer/references/router-lifecycle.md +45 -0
- package/skills/angular-developer/references/router-testing.md +87 -0
- package/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
- package/skills/angular-developer/references/signal-forms.md +795 -0
- package/skills/angular-developer/references/signals-overview.md +94 -0
- package/skills/angular-developer/references/tailwind-css.md +69 -0
- package/skills/angular-developer/references/template-driven-forms.md +114 -0
- package/skills/angular-developer/references/testing-fundamentals.md +65 -0
- package/skills/api-connector-builder/SKILL.md +120 -0
- package/skills/api-design/SKILL.md +522 -0
- package/skills/architecture-decision-records/SKILL.md +178 -0
- package/skills/article-writing/SKILL.md +78 -0
- package/skills/automation-audit-ops/SKILL.md +141 -0
- package/skills/autonomous-agent-harness/SKILL.md +272 -0
- package/skills/autonomous-loops/SKILL.md +609 -0
- package/skills/backend-patterns/SKILL.md +560 -0
- package/skills/benchmark/SKILL.md +92 -0
- package/skills/blueprint/SKILL.md +104 -0
- package/skills/browser-qa/SKILL.md +86 -0
- package/skills/bun-runtime/SKILL.md +83 -0
- package/skills/canary-watch/SKILL.md +98 -0
- package/skills/carrier-relationship-management/SKILL.md +211 -0
- package/skills/cisco-ios-patterns/SKILL.md +163 -0
- package/skills/ck/SKILL.md +147 -0
- package/skills/ck/commands/forget.mjs +44 -0
- package/skills/ck/commands/info.mjs +24 -0
- package/skills/ck/commands/init.mjs +143 -0
- package/skills/ck/commands/list.mjs +40 -0
- package/skills/ck/commands/migrate.mjs +202 -0
- package/skills/ck/commands/resume.mjs +36 -0
- package/skills/ck/commands/save.mjs +210 -0
- package/skills/ck/commands/shared.mjs +387 -0
- package/skills/ck/hooks/session-start.mjs +224 -0
- package/skills/claude-devfleet/SKILL.md +103 -0
- package/skills/click-path-audit/SKILL.md +244 -0
- package/skills/clickhouse-io/SKILL.md +438 -0
- package/skills/code-tour/SKILL.md +235 -0
- package/skills/codebase-onboarding/SKILL.md +232 -0
- package/skills/coding-standards/SKILL.md +548 -0
- package/skills/compose-multiplatform-patterns/SKILL.md +298 -0
- package/skills/connections-optimizer/SKILL.md +188 -0
- package/skills/content-engine/SKILL.md +126 -0
- package/skills/content-hash-cache-pattern/SKILL.md +160 -0
- package/skills/context-budget/SKILL.md +134 -0
- package/skills/continuous-agent-loop/SKILL.md +44 -0
- package/skills/continuous-learning/SKILL.md +129 -0
- package/skills/continuous-learning/config.json +18 -0
- package/skills/continuous-learning/evaluate-session.sh +69 -0
- package/skills/continuous-learning-v2/SKILL.md +358 -0
- package/skills/continuous-learning-v2/agents/observer-loop.sh +322 -0
- package/skills/continuous-learning-v2/agents/observer.md +198 -0
- package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
- package/skills/continuous-learning-v2/config.json +8 -0
- package/skills/continuous-learning-v2/hooks/observe.sh +476 -0
- package/skills/continuous-learning-v2/scripts/detect-project.sh +288 -0
- package/skills/continuous-learning-v2/scripts/instinct-cli.py +1519 -0
- package/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
- package/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
- package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -0
- package/skills/cost-aware-llm-pipeline/SKILL.md +182 -0
- package/skills/cost-tracking/SKILL.md +147 -0
- package/skills/council/SKILL.md +202 -0
- package/skills/cpp-coding-standards/SKILL.md +722 -0
- package/skills/cpp-testing/SKILL.md +323 -0
- package/skills/crosspost/SKILL.md +110 -0
- package/skills/csharp-testing/SKILL.md +320 -0
- package/skills/customer-billing-ops/SKILL.md +139 -0
- package/skills/customs-trade-compliance/SKILL.md +262 -0
- package/skills/dart-flutter-patterns/SKILL.md +562 -0
- package/skills/dashboard-builder/SKILL.md +108 -0
- package/skills/data-scraper-agent/SKILL.md +764 -0
- package/skills/database-migrations/SKILL.md +428 -0
- package/skills/deep-research/SKILL.md +158 -0
- package/skills/defi-amm-security/SKILL.md +166 -0
- package/skills/deployment-patterns/SKILL.md +426 -0
- package/skills/design-system/SKILL.md +81 -0
- package/skills/django-celery/SKILL.md +456 -0
- package/skills/django-patterns/SKILL.md +733 -0
- package/skills/django-security/SKILL.md +592 -0
- package/skills/django-tdd/SKILL.md +728 -0
- package/skills/django-verification/SKILL.md +468 -0
- package/skills/dmux-workflows/SKILL.md +190 -0
- package/skills/docker-patterns/SKILL.md +363 -0
- package/skills/documentation-lookup/SKILL.md +89 -0
- package/skills/dotnet-patterns/SKILL.md +320 -0
- package/skills/e2e-testing/SKILL.md +325 -0
- package/skills/email-ops/SKILL.md +120 -0
- package/skills/energy-procurement/SKILL.md +227 -0
- package/skills/enterprise-agent-ops/SKILL.md +49 -0
- package/skills/error-handling/SKILL.md +375 -0
- package/skills/eval-harness/SKILL.md +269 -0
- package/skills/evm-token-decimals/SKILL.md +130 -0
- package/skills/exa-search/SKILL.md +106 -0
- package/skills/fal-ai-media/SKILL.md +287 -0
- package/skills/fastapi-patterns/SKILL.md +327 -0
- package/skills/finance-billing-ops/SKILL.md +126 -0
- package/skills/flox-environments/SKILL.md +496 -0
- package/skills/flutter-dart-code-review/SKILL.md +434 -0
- package/skills/foundation-models-on-device/SKILL.md +243 -0
- package/skills/frontend-design-direction/SKILL.md +92 -0
- package/skills/frontend-patterns/SKILL.md +641 -0
- package/skills/frontend-slides/SKILL.md +183 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/skills/frontend-slides/animation-patterns.md +122 -0
- package/skills/frontend-slides/html-template.md +419 -0
- package/skills/frontend-slides/scripts/export-pdf.sh +418 -0
- package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/skills/frontend-slides/viewport-base.css +153 -0
- package/skills/fsharp-testing/SKILL.md +279 -0
- package/skills/gan-style-harness/SKILL.md +278 -0
- package/skills/gateguard/SKILL.md +125 -0
- package/skills/git-workflow/SKILL.md +714 -0
- package/skills/github-ops/SKILL.md +143 -0
- package/skills/golang-patterns/SKILL.md +673 -0
- package/skills/golang-testing/SKILL.md +719 -0
- package/skills/google-workspace-ops/SKILL.md +94 -0
- package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
- package/skills/healthcare-emr-patterns/SKILL.md +159 -0
- package/skills/healthcare-eval-harness/SKILL.md +207 -0
- package/skills/healthcare-phi-compliance/SKILL.md +145 -0
- package/skills/hermes-imports/SKILL.md +87 -0
- package/skills/hexagonal-architecture/SKILL.md +275 -0
- package/skills/hipaa-compliance/SKILL.md +78 -0
- package/skills/homelab-network-readiness/SKILL.md +169 -0
- package/skills/homelab-network-setup/SKILL.md +129 -0
- package/skills/homelab-pihole-dns/SKILL.md +274 -0
- package/skills/homelab-vlan-segmentation/SKILL.md +311 -0
- package/skills/homelab-wireguard-vpn/SKILL.md +305 -0
- package/skills/hookify-rules/SKILL.md +128 -0
- package/skills/inventory-demand-planning/SKILL.md +246 -0
- package/skills/investor-materials/SKILL.md +95 -0
- package/skills/investor-outreach/SKILL.md +90 -0
- package/skills/ios-icon-gen/SKILL.md +157 -0
- package/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
- package/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
- package/skills/iterative-retrieval/SKILL.md +209 -0
- package/skills/java-coding-standards/SKILL.md +382 -0
- package/skills/jira-integration/SKILL.md +292 -0
- package/skills/jpa-patterns/SKILL.md +150 -0
- package/skills/knowledge-ops/SKILL.md +153 -0
- package/skills/kotlin-coroutines-flows/SKILL.md +283 -0
- package/skills/kotlin-exposed-patterns/SKILL.md +718 -0
- package/skills/kotlin-ktor-patterns/SKILL.md +688 -0
- package/skills/kotlin-patterns/SKILL.md +710 -0
- package/skills/kotlin-testing/SKILL.md +823 -0
- package/skills/laravel-patterns/SKILL.md +414 -0
- package/skills/laravel-plugin-discovery/SKILL.md +228 -0
- package/skills/laravel-security/SKILL.md +284 -0
- package/skills/laravel-tdd/SKILL.md +282 -0
- package/skills/laravel-verification/SKILL.md +178 -0
- package/skills/lead-intelligence/SKILL.md +320 -0
- package/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
- package/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
- package/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
- package/skills/lead-intelligence/agents/signal-scorer.md +60 -0
- package/skills/liquid-glass-design/SKILL.md +279 -0
- package/skills/llm-trading-agent-security/SKILL.md +146 -0
- package/skills/logistics-exception-management/SKILL.md +221 -0
- package/skills/make-interfaces-feel-better/SKILL.md +151 -0
- package/skills/manim-video/SKILL.md +88 -0
- package/skills/manim-video/assets/network_graph_scene.py +52 -0
- package/skills/market-research/SKILL.md +74 -0
- package/skills/mcp-server-patterns/SKILL.md +68 -0
- package/skills/messages-ops/SKILL.md +103 -0
- package/skills/mle-workflow/SKILL.md +345 -0
- package/skills/motion-advanced/SKILL.md +596 -0
- package/skills/motion-foundations/SKILL.md +299 -0
- package/skills/motion-patterns/SKILL.md +435 -0
- package/skills/motion-ui/SKILL.md +574 -0
- package/skills/mysql-patterns/SKILL.md +411 -0
- package/skills/nanoclaw-repl/SKILL.md +32 -0
- package/skills/nestjs-patterns/SKILL.md +229 -0
- package/skills/netmiko-ssh-automation/SKILL.md +173 -0
- package/skills/network-bgp-diagnostics/SKILL.md +167 -0
- package/skills/network-config-validation/SKILL.md +210 -0
- package/skills/network-interface-health/SKILL.md +152 -0
- package/skills/nextjs-turbopack/SKILL.md +43 -0
- package/skills/nodejs-keccak256/SKILL.md +102 -0
- package/skills/nutrient-document-processing/SKILL.md +166 -0
- package/skills/nuxt4-patterns/SKILL.md +99 -0
- package/skills/openclaw-persona-forge/SKILL.md +288 -0
- package/skills/openclaw-persona-forge/gacha.py +224 -0
- package/skills/openclaw-persona-forge/gacha.sh +5 -0
- package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
- package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
- package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
- package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
- package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
- package/skills/openclaw-persona-forge/references/output-template.md +166 -0
- package/skills/opensource-pipeline/SKILL.md +254 -0
- package/skills/perl-patterns/SKILL.md +503 -0
- package/skills/perl-security/SKILL.md +502 -0
- package/skills/perl-testing/SKILL.md +474 -0
- package/skills/plan-orchestrate/SKILL.md +253 -0
- package/skills/plankton-code-quality/SKILL.md +236 -0
- package/skills/postgres-patterns/SKILL.md +146 -0
- package/skills/product-capability/SKILL.md +140 -0
- package/skills/product-lens/SKILL.md +91 -0
- package/skills/production-audit/SKILL.md +206 -0
- package/skills/production-scheduling/SKILL.md +237 -0
- package/skills/project-flow-ops/SKILL.md +110 -0
- package/skills/prompt-optimizer/SKILL.md +398 -0
- package/skills/python-patterns/SKILL.md +749 -0
- package/skills/python-testing/SKILL.md +815 -0
- package/skills/pytorch-patterns/SKILL.md +395 -0
- package/skills/quality-nonconformance/SKILL.md +259 -0
- package/skills/quarkus-patterns/SKILL.md +721 -0
- package/skills/quarkus-security/SKILL.md +466 -0
- package/skills/quarkus-tdd/SKILL.md +810 -0
- package/skills/quarkus-verification/SKILL.md +478 -0
- package/skills/ralphinho-rfc-pipeline/SKILL.md +66 -0
- package/skills/redis-patterns/SKILL.md +402 -0
- package/skills/regex-vs-llm-structured-text/SKILL.md +219 -0
- package/skills/remotion-video-creation/SKILL.md +43 -0
- package/skills/remotion-video-creation/rules/3d.md +86 -0
- package/skills/remotion-video-creation/rules/animations.md +29 -0
- package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
- package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
- package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/skills/remotion-video-creation/rules/assets.md +78 -0
- package/skills/remotion-video-creation/rules/audio.md +172 -0
- package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
- package/skills/remotion-video-creation/rules/can-decode.md +75 -0
- package/skills/remotion-video-creation/rules/charts.md +58 -0
- package/skills/remotion-video-creation/rules/compositions.md +146 -0
- package/skills/remotion-video-creation/rules/display-captions.md +126 -0
- package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
- package/skills/remotion-video-creation/rules/fonts.md +152 -0
- package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
- package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
- package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
- package/skills/remotion-video-creation/rules/gifs.md +138 -0
- package/skills/remotion-video-creation/rules/images.md +130 -0
- package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
- package/skills/remotion-video-creation/rules/lottie.md +67 -0
- package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
- package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
- package/skills/remotion-video-creation/rules/sequencing.md +106 -0
- package/skills/remotion-video-creation/rules/tailwind.md +11 -0
- package/skills/remotion-video-creation/rules/text-animations.md +20 -0
- package/skills/remotion-video-creation/rules/timing.md +179 -0
- package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
- package/skills/remotion-video-creation/rules/transitions.md +122 -0
- package/skills/remotion-video-creation/rules/trimming.md +52 -0
- package/skills/remotion-video-creation/rules/videos.md +171 -0
- package/skills/repo-scan/SKILL.md +78 -0
- package/skills/research-ops/SKILL.md +111 -0
- package/skills/returns-reverse-logistics/SKILL.md +239 -0
- package/skills/rules-distill/SKILL.md +263 -0
- package/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/skills/rust-patterns/SKILL.md +498 -0
- package/skills/rust-testing/SKILL.md +499 -0
- package/skills/safety-guard/SKILL.md +74 -0
- package/skills/santa-method/SKILL.md +306 -0
- package/skills/scientific-db-pubmed-database/SKILL.md +175 -0
- package/skills/scientific-db-uspto-database/SKILL.md +177 -0
- package/skills/scientific-pkg-gget/SKILL.md +166 -0
- package/skills/scientific-thinking-literature-review/SKILL.md +192 -0
- package/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
- package/skills/search-first/SKILL.md +181 -0
- package/skills/security-bounty-hunter/SKILL.md +99 -0
- package/skills/security-review/SKILL.md +502 -0
- package/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/skills/seo/SKILL.md +153 -0
- package/skills/skill-comply/SKILL.md +57 -0
- package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/skills/skill-comply/prompts/classifier.md +24 -0
- package/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/skills/skill-comply/pyproject.toml +15 -0
- package/skills/skill-comply/scripts/__init__.py +0 -0
- package/skills/skill-comply/scripts/classifier.py +85 -0
- package/skills/skill-comply/scripts/grader.py +124 -0
- package/skills/skill-comply/scripts/parser.py +107 -0
- package/skills/skill-comply/scripts/report.py +170 -0
- package/skills/skill-comply/scripts/run.py +127 -0
- package/skills/skill-comply/scripts/runner.py +186 -0
- package/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/skills/skill-comply/scripts/utils.py +13 -0
- package/skills/skill-comply/tests/test_grader.py +197 -0
- package/skills/skill-comply/tests/test_parser.py +90 -0
- package/skills/skill-comply/tests/test_runner.py +172 -0
- package/skills/skill-scout/SKILL.md +139 -0
- package/skills/skill-stocktake/SKILL.md +193 -0
- package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/skills/social-graph-ranker/SKILL.md +153 -0
- package/skills/springboot-patterns/SKILL.md +313 -0
- package/skills/springboot-security/SKILL.md +271 -0
- package/skills/springboot-tdd/SKILL.md +157 -0
- package/skills/springboot-verification/SKILL.md +230 -0
- package/skills/strategic-compact/SKILL.md +129 -0
- package/skills/strategic-compact/suggest-compact.sh +54 -0
- package/skills/swift-actor-persistence/SKILL.md +142 -0
- package/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/skills/swift-protocol-di-testing/SKILL.md +189 -0
- package/skills/swiftui-patterns/SKILL.md +259 -0
- package/skills/tdd-workflow/SKILL.md +462 -0
- package/skills/team-builder/SKILL.md +166 -0
- package/skills/terminal-ops/SKILL.md +108 -0
- package/skills/tinystruct-patterns/SKILL.md +130 -0
- package/skills/tinystruct-patterns/references/architecture.md +77 -0
- package/skills/tinystruct-patterns/references/data-handling.md +35 -0
- package/skills/tinystruct-patterns/references/routing.md +57 -0
- package/skills/tinystruct-patterns/references/system-usage.md +74 -0
- package/skills/tinystruct-patterns/references/testing.md +59 -0
- package/skills/token-budget-advisor/SKILL.md +133 -0
- package/skills/ui-demo/SKILL.md +464 -0
- package/skills/ui-to-vue/SKILL.md +134 -0
- package/skills/unified-notifications-ops/SKILL.md +186 -0
- package/skills/verification-loop/SKILL.md +125 -0
- package/skills/video-editing/SKILL.md +309 -0
- package/skills/videodb/SKILL.md +373 -0
- package/skills/videodb/reference/api-reference.md +550 -0
- package/skills/videodb/reference/capture-reference.md +407 -0
- package/skills/videodb/reference/capture.md +101 -0
- package/skills/videodb/reference/editor.md +443 -0
- package/skills/videodb/reference/generative.md +331 -0
- package/skills/videodb/reference/rtstream-reference.md +564 -0
- package/skills/videodb/reference/rtstream.md +65 -0
- package/skills/videodb/reference/search.md +230 -0
- package/skills/videodb/reference/streaming.md +406 -0
- package/skills/videodb/reference/use-cases.md +118 -0
- package/skills/videodb/scripts/ws_listener.py +282 -0
- package/skills/visa-doc-translate/README.md +86 -0
- package/skills/visa-doc-translate/SKILL.md +117 -0
- package/skills/vite-patterns/SKILL.md +448 -0
- package/skills/windows-desktop-e2e/SKILL.md +787 -0
- package/skills/workspace-surface-audit/SKILL.md +124 -0
- package/skills/x-api/SKILL.md +233 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hexagonal-architecture
|
|
3
|
+
description: Design, implement, and refactor Ports & Adapters systems with clear domain boundaries, dependency inversion, and testable use-case orchestration across TypeScript, Java, Kotlin, and Go services.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Hexagonal Architecture
|
|
7
|
+
|
|
8
|
+
Hexagonal architecture (Ports and Adapters) keeps business logic independent from frameworks, transport, and persistence details. The core app depends on abstract ports, and adapters implement those ports at the edges.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- Building new features where long-term maintainability and testability matter.
|
|
13
|
+
- Refactoring layered or framework-heavy code where domain logic is mixed with I/O concerns.
|
|
14
|
+
- Supporting multiple interfaces for the same use case (HTTP, CLI, queue workers, cron jobs).
|
|
15
|
+
- Replacing infrastructure (database, external APIs, message bus) without rewriting business rules.
|
|
16
|
+
|
|
17
|
+
Use this skill when the request involves boundaries, domain-centric design, refactoring tightly coupled services, or decoupling application logic from specific libraries.
|
|
18
|
+
|
|
19
|
+
## Core Concepts
|
|
20
|
+
|
|
21
|
+
- **Domain model**: Business rules and entities/value objects. No framework imports.
|
|
22
|
+
- **Use cases (application layer)**: Orchestrate domain behavior and workflow steps.
|
|
23
|
+
- **Inbound ports**: Contracts describing what the application can do (commands/queries/use-case interfaces).
|
|
24
|
+
- **Outbound ports**: Contracts for dependencies the application needs (repositories, gateways, event publishers, clock, UUID, etc.).
|
|
25
|
+
- **Adapters**: Infrastructure and delivery implementations of ports (HTTP controllers, DB repositories, queue consumers, SDK wrappers).
|
|
26
|
+
- **Composition root**: Single wiring location where concrete adapters are bound to use cases.
|
|
27
|
+
|
|
28
|
+
Outbound port interfaces usually live in the application layer (or in domain only when the abstraction is truly domain-level), while infrastructure adapters implement them.
|
|
29
|
+
|
|
30
|
+
Dependency direction is always inward:
|
|
31
|
+
|
|
32
|
+
- Adapters -> application/domain
|
|
33
|
+
- Application -> port interfaces (inbound/outbound contracts)
|
|
34
|
+
- Domain -> domain-only abstractions (no framework or infrastructure dependencies)
|
|
35
|
+
- Domain -> nothing external
|
|
36
|
+
|
|
37
|
+
## How It Works
|
|
38
|
+
|
|
39
|
+
### Step 1: Model a use case boundary
|
|
40
|
+
|
|
41
|
+
Define a single use case with a clear input and output DTO. Keep transport details (Express `req`, GraphQL `context`, job payload wrappers) outside this boundary.
|
|
42
|
+
|
|
43
|
+
### Step 2: Define outbound ports first
|
|
44
|
+
|
|
45
|
+
Identify every side effect as a port:
|
|
46
|
+
|
|
47
|
+
- persistence (`UserRepositoryPort`)
|
|
48
|
+
- external calls (`BillingGatewayPort`)
|
|
49
|
+
- cross-cutting (`LoggerPort`, `ClockPort`)
|
|
50
|
+
|
|
51
|
+
Ports should model capabilities, not technologies.
|
|
52
|
+
|
|
53
|
+
### Step 3: Implement the use case with pure orchestration
|
|
54
|
+
|
|
55
|
+
Use case class/function receives ports via constructor/arguments. It validates application-level invariants, coordinates domain rules, and returns plain data structures.
|
|
56
|
+
|
|
57
|
+
### Step 4: Build adapters at the edge
|
|
58
|
+
|
|
59
|
+
- Inbound adapter converts protocol input to use-case input.
|
|
60
|
+
- Outbound adapter maps app contracts to concrete APIs/ORM/query builders.
|
|
61
|
+
- Mapping stays in adapters, not inside use cases.
|
|
62
|
+
|
|
63
|
+
### Step 5: Wire everything in a composition root
|
|
64
|
+
|
|
65
|
+
Instantiate adapters, then inject them into use cases. Keep this wiring centralized to avoid hidden service-locator behavior.
|
|
66
|
+
|
|
67
|
+
### Step 6: Test per boundary
|
|
68
|
+
|
|
69
|
+
- Unit test use cases with fake ports.
|
|
70
|
+
- Integration test adapters with real infra dependencies.
|
|
71
|
+
- E2E test user-facing flows through inbound adapters.
|
|
72
|
+
|
|
73
|
+
## Architecture Diagram
|
|
74
|
+
|
|
75
|
+
```mermaid
|
|
76
|
+
flowchart LR
|
|
77
|
+
Client["Client (HTTP/CLI/Worker)"] --> InboundAdapter["Inbound Adapter"]
|
|
78
|
+
InboundAdapter -->|"calls"| UseCase["UseCase (Application Layer)"]
|
|
79
|
+
UseCase -->|"uses"| OutboundPort["OutboundPort (Interface)"]
|
|
80
|
+
OutboundAdapter["Outbound Adapter"] -->|"implements"| OutboundPort
|
|
81
|
+
OutboundAdapter --> ExternalSystem["DB/API/Queue"]
|
|
82
|
+
UseCase --> DomainModel["DomainModel"]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Suggested Module Layout
|
|
86
|
+
|
|
87
|
+
Use feature-first organization with explicit boundaries:
|
|
88
|
+
|
|
89
|
+
```text
|
|
90
|
+
src/
|
|
91
|
+
features/
|
|
92
|
+
orders/
|
|
93
|
+
domain/
|
|
94
|
+
Order.ts
|
|
95
|
+
OrderPolicy.ts
|
|
96
|
+
application/
|
|
97
|
+
ports/
|
|
98
|
+
inbound/
|
|
99
|
+
CreateOrder.ts
|
|
100
|
+
outbound/
|
|
101
|
+
OrderRepositoryPort.ts
|
|
102
|
+
PaymentGatewayPort.ts
|
|
103
|
+
use-cases/
|
|
104
|
+
CreateOrderUseCase.ts
|
|
105
|
+
adapters/
|
|
106
|
+
inbound/
|
|
107
|
+
http/
|
|
108
|
+
createOrderRoute.ts
|
|
109
|
+
outbound/
|
|
110
|
+
postgres/
|
|
111
|
+
PostgresOrderRepository.ts
|
|
112
|
+
stripe/
|
|
113
|
+
StripePaymentGateway.ts
|
|
114
|
+
composition/
|
|
115
|
+
ordersContainer.ts
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## TypeScript Example
|
|
119
|
+
|
|
120
|
+
### Port definitions
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
export interface OrderRepositoryPort {
|
|
124
|
+
save(order: Order): Promise<void>;
|
|
125
|
+
findById(orderId: string): Promise<Order | null>;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export interface PaymentGatewayPort {
|
|
129
|
+
authorize(input: { orderId: string; amountCents: number }): Promise<{ authorizationId: string }>;
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Use case
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
type CreateOrderInput = {
|
|
137
|
+
orderId: string;
|
|
138
|
+
amountCents: number;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
type CreateOrderOutput = {
|
|
142
|
+
orderId: string;
|
|
143
|
+
authorizationId: string;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
export class CreateOrderUseCase {
|
|
147
|
+
constructor(
|
|
148
|
+
private readonly orderRepository: OrderRepositoryPort,
|
|
149
|
+
private readonly paymentGateway: PaymentGatewayPort
|
|
150
|
+
) {}
|
|
151
|
+
|
|
152
|
+
async execute(input: CreateOrderInput): Promise<CreateOrderOutput> {
|
|
153
|
+
const order = Order.create({ id: input.orderId, amountCents: input.amountCents });
|
|
154
|
+
|
|
155
|
+
const auth = await this.paymentGateway.authorize({
|
|
156
|
+
orderId: order.id,
|
|
157
|
+
amountCents: order.amountCents,
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
// markAuthorized returns a new Order instance; it does not mutate in place.
|
|
161
|
+
const authorizedOrder = order.markAuthorized(auth.authorizationId);
|
|
162
|
+
await this.orderRepository.save(authorizedOrder);
|
|
163
|
+
|
|
164
|
+
return {
|
|
165
|
+
orderId: order.id,
|
|
166
|
+
authorizationId: auth.authorizationId,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Outbound adapter
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
export class PostgresOrderRepository implements OrderRepositoryPort {
|
|
176
|
+
constructor(private readonly db: SqlClient) {}
|
|
177
|
+
|
|
178
|
+
async save(order: Order): Promise<void> {
|
|
179
|
+
await this.db.query(
|
|
180
|
+
"insert into orders (id, amount_cents, status, authorization_id) values ($1, $2, $3, $4)",
|
|
181
|
+
[order.id, order.amountCents, order.status, order.authorizationId]
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
async findById(orderId: string): Promise<Order | null> {
|
|
186
|
+
const row = await this.db.oneOrNone("select * from orders where id = $1", [orderId]);
|
|
187
|
+
return row ? Order.rehydrate(row) : null;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Composition root
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
export const buildCreateOrderUseCase = (deps: { db: SqlClient; stripe: StripeClient }) => {
|
|
196
|
+
const orderRepository = new PostgresOrderRepository(deps.db);
|
|
197
|
+
const paymentGateway = new StripePaymentGateway(deps.stripe);
|
|
198
|
+
|
|
199
|
+
return new CreateOrderUseCase(orderRepository, paymentGateway);
|
|
200
|
+
};
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Multi-Language Mapping
|
|
204
|
+
|
|
205
|
+
Use the same boundary rules across ecosystems; only syntax and wiring style change.
|
|
206
|
+
|
|
207
|
+
- **TypeScript/JavaScript**
|
|
208
|
+
- Ports: `application/ports/*` as interfaces/types.
|
|
209
|
+
- Use cases: classes/functions with constructor/argument injection.
|
|
210
|
+
- Adapters: `adapters/inbound/*`, `adapters/outbound/*`.
|
|
211
|
+
- Composition: explicit factory/container module (no hidden globals).
|
|
212
|
+
- **Java**
|
|
213
|
+
- Packages: `domain`, `application.port.in`, `application.port.out`, `application.usecase`, `adapter.in`, `adapter.out`.
|
|
214
|
+
- Ports: interfaces in `application.port.*`.
|
|
215
|
+
- Use cases: plain classes (Spring `@Service` is optional, not required).
|
|
216
|
+
- Composition: Spring config or manual wiring class; keep wiring out of domain/use-case classes.
|
|
217
|
+
- **Kotlin**
|
|
218
|
+
- Modules/packages mirror the Java split (`domain`, `application.port`, `application.usecase`, `adapter`).
|
|
219
|
+
- Ports: Kotlin interfaces.
|
|
220
|
+
- Use cases: classes with constructor injection (Koin/Dagger/Spring/manual).
|
|
221
|
+
- Composition: module definitions or dedicated composition functions; avoid service locator patterns.
|
|
222
|
+
- **Go**
|
|
223
|
+
- Packages: `internal/<feature>/domain`, `application`, `ports`, `adapters/inbound`, `adapters/outbound`.
|
|
224
|
+
- Ports: small interfaces owned by the consuming application package.
|
|
225
|
+
- Use cases: structs with interface fields plus explicit `New...` constructors.
|
|
226
|
+
- Composition: wire in `cmd/<app>/main.go` (or dedicated wiring package), keep constructors explicit.
|
|
227
|
+
|
|
228
|
+
## Anti-Patterns to Avoid
|
|
229
|
+
|
|
230
|
+
- Domain entities importing ORM models, web framework types, or SDK clients.
|
|
231
|
+
- Use cases reading directly from `req`, `res`, or queue metadata.
|
|
232
|
+
- Returning database rows directly from use cases without domain/application mapping.
|
|
233
|
+
- Letting adapters call each other directly instead of flowing through use-case ports.
|
|
234
|
+
- Spreading dependency wiring across many files with hidden global singletons.
|
|
235
|
+
|
|
236
|
+
## Migration Playbook
|
|
237
|
+
|
|
238
|
+
1. Pick one vertical slice (single endpoint/job) with frequent change pain.
|
|
239
|
+
2. Extract a use-case boundary with explicit input/output types.
|
|
240
|
+
3. Introduce outbound ports around existing infrastructure calls.
|
|
241
|
+
4. Move orchestration logic from controllers/services into the use case.
|
|
242
|
+
5. Keep old adapters, but make them delegate to the new use case.
|
|
243
|
+
6. Add tests around the new boundary (unit + adapter integration).
|
|
244
|
+
7. Repeat slice-by-slice; avoid full rewrites.
|
|
245
|
+
|
|
246
|
+
### Refactoring Existing Systems
|
|
247
|
+
|
|
248
|
+
- **Strangler approach**: keep current endpoints, route one use case at a time through new ports/adapters.
|
|
249
|
+
- **No big-bang rewrites**: migrate per feature slice and preserve behavior with characterization tests.
|
|
250
|
+
- **Facade first**: wrap legacy services behind outbound ports before replacing internals.
|
|
251
|
+
- **Composition freeze**: centralize wiring early so new dependencies do not leak into domain/use-case layers.
|
|
252
|
+
- **Slice selection rule**: prioritize high-churn, low-blast-radius flows first.
|
|
253
|
+
- **Rollback path**: keep a reversible toggle or route switch per migrated slice until production behavior is verified.
|
|
254
|
+
|
|
255
|
+
## Testing Guidance (Same Hexagonal Boundaries)
|
|
256
|
+
|
|
257
|
+
- **Domain tests**: test entities/value objects as pure business rules (no mocks, no framework setup).
|
|
258
|
+
- **Use-case unit tests**: test orchestration with fakes/stubs for outbound ports; assert business outcomes and port interactions.
|
|
259
|
+
- **Outbound adapter contract tests**: define shared contract suites at port level and run them against each adapter implementation.
|
|
260
|
+
- **Inbound adapter tests**: verify protocol mapping (HTTP/CLI/queue payload to use-case input and output/error mapping back to protocol).
|
|
261
|
+
- **Adapter integration tests**: run against real infrastructure (DB/API/queue) for serialization, schema/query behavior, retries, and timeouts.
|
|
262
|
+
- **End-to-end tests**: cover critical user journeys through inbound adapter -> use case -> outbound adapter.
|
|
263
|
+
- **Refactor safety**: add characterization tests before extraction; keep them until new boundary behavior is stable and equivalent.
|
|
264
|
+
|
|
265
|
+
## Best Practices Checklist
|
|
266
|
+
|
|
267
|
+
- Domain and use-case layers import only internal types and ports.
|
|
268
|
+
- Every external dependency is represented by an outbound port.
|
|
269
|
+
- Validation occurs at boundaries (inbound adapter + use-case invariants).
|
|
270
|
+
- Use immutable transformations (return new values/entities instead of mutating shared state).
|
|
271
|
+
- Errors are translated across boundaries (infra errors -> application/domain errors).
|
|
272
|
+
- Composition root is explicit and easy to audit.
|
|
273
|
+
- Use cases are testable with simple in-memory fakes for ports.
|
|
274
|
+
- Refactoring starts from one vertical slice with behavior-preserving tests.
|
|
275
|
+
- Language/framework specifics stay in adapters, never in domain rules.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hipaa-compliance
|
|
3
|
+
description: HIPAA-specific entrypoint for healthcare privacy and security work. Use when a task is explicitly framed around HIPAA, PHI handling, covered entities, BAAs, breach posture, or US healthcare compliance requirements.
|
|
4
|
+
origin: the toolset direct-port adaptation
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# HIPAA Compliance
|
|
9
|
+
|
|
10
|
+
Use this as the HIPAA-specific entrypoint when a task is clearly about US healthcare compliance. This skill intentionally stays thin and canonical:
|
|
11
|
+
|
|
12
|
+
- `healthcare-phi-compliance` remains the primary implementation skill for PHI/PII handling, data classification, audit logging, encryption, and leak prevention.
|
|
13
|
+
- `healthcare-reviewer` remains the specialized reviewer when code, architecture, or product behavior needs a healthcare-aware second pass.
|
|
14
|
+
- `security-review` still applies for general auth, input-handling, secrets, API, and deployment hardening.
|
|
15
|
+
|
|
16
|
+
## When to Use
|
|
17
|
+
|
|
18
|
+
- The request explicitly mentions HIPAA, PHI, covered entities, business associates, or BAAs
|
|
19
|
+
- Building or reviewing US healthcare software that stores, processes, exports, or transmits PHI
|
|
20
|
+
- Assessing whether logging, analytics, LLM prompts, storage, or support workflows create HIPAA exposure
|
|
21
|
+
- Designing patient-facing or clinician-facing systems where minimum necessary access and auditability matter
|
|
22
|
+
|
|
23
|
+
## How It Works
|
|
24
|
+
|
|
25
|
+
Treat HIPAA as an overlay on top of the broader healthcare privacy skill:
|
|
26
|
+
|
|
27
|
+
1. Start with `healthcare-phi-compliance` for the concrete implementation rules.
|
|
28
|
+
2. Apply HIPAA-specific decision gates:
|
|
29
|
+
- Is this data PHI?
|
|
30
|
+
- Is this actor a covered entity or business associate?
|
|
31
|
+
- Does a vendor or model provider require a BAA before touching the data?
|
|
32
|
+
- Is access limited to the minimum necessary scope?
|
|
33
|
+
- Are read/write/export events auditable?
|
|
34
|
+
3. Escalate to `healthcare-reviewer` if the task affects patient safety, clinical workflows, or regulated production architecture.
|
|
35
|
+
|
|
36
|
+
## HIPAA-Specific Guardrails
|
|
37
|
+
|
|
38
|
+
- Never place PHI in logs, analytics events, crash reports, prompts, or client-visible error strings.
|
|
39
|
+
- Never expose PHI in URLs, browser storage, screenshots, or copied example payloads.
|
|
40
|
+
- Require authenticated access, scoped authorization, and audit trails for PHI reads and writes.
|
|
41
|
+
- Treat third-party SaaS, observability, support tooling, and LLM providers as blocked-by-default until BAA status and data boundaries are clear.
|
|
42
|
+
- Follow minimum necessary access: the right user should only see the smallest PHI slice needed for the task.
|
|
43
|
+
- Prefer opaque internal IDs over names, MRNs, phone numbers, addresses, or other identifiers.
|
|
44
|
+
|
|
45
|
+
## Examples
|
|
46
|
+
|
|
47
|
+
### Example 1: Product request framed as HIPAA
|
|
48
|
+
|
|
49
|
+
User request:
|
|
50
|
+
|
|
51
|
+
> Add AI-generated visit summaries to our clinician dashboard. We serve US clinics and need to stay HIPAA compliant.
|
|
52
|
+
|
|
53
|
+
Response pattern:
|
|
54
|
+
|
|
55
|
+
- Activate `hipaa-compliance`
|
|
56
|
+
- Use `healthcare-phi-compliance` to review PHI movement, logging, storage, and prompt boundaries
|
|
57
|
+
- Verify whether the summarization provider is covered by a BAA before any PHI is sent
|
|
58
|
+
- Escalate to `healthcare-reviewer` if the summaries influence clinical decisions
|
|
59
|
+
|
|
60
|
+
### Example 2: Vendor/tooling decision
|
|
61
|
+
|
|
62
|
+
User request:
|
|
63
|
+
|
|
64
|
+
> Can we send support transcripts and patient messages into our analytics stack?
|
|
65
|
+
|
|
66
|
+
Response pattern:
|
|
67
|
+
|
|
68
|
+
- Assume those messages may contain PHI
|
|
69
|
+
- Block the design unless the analytics vendor is approved for HIPAA-bound workloads and the data path is minimized
|
|
70
|
+
- Require redaction or a non-PHI event model when possible
|
|
71
|
+
|
|
72
|
+
## Related Skills
|
|
73
|
+
|
|
74
|
+
- `healthcare-phi-compliance`
|
|
75
|
+
- `healthcare-reviewer`
|
|
76
|
+
- `healthcare-emr-patterns`
|
|
77
|
+
- `healthcare-eval-harness`
|
|
78
|
+
- `security-review`
|
|
@@ -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`
|