@vodailoc/kilo-kit-mcp 1.1.0 → 1.1.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/.mcp/kilo-kit.codex-windows.toml +5 -0
- package/LICENSE +190 -190
- package/QUICKSTART.md +265 -255
- package/README.md +290 -266
- package/mcp/README.md +29 -5
- package/mcp/dist/server.js +1 -1
- package/mcp/package.json +1 -2
- package/package.json +3 -2
- package/skills/README.md +647 -647
- package/skills/SKILLS_INDEX.md +139 -139
- package/skills/ai-media/ai-multimodal/.env.example +97 -97
- package/skills/ai-media/ai-multimodal/SKILL.md +357 -357
- package/skills/ai-media/ai-multimodal/references/audio-processing.md +373 -373
- package/skills/ai-media/ai-multimodal/references/image-generation.md +558 -558
- package/skills/ai-media/ai-multimodal/references/video-analysis.md +502 -502
- package/skills/ai-media/ai-multimodal/references/vision-understanding.md +483 -483
- package/skills/ai-media/ai-multimodal/scripts/document_converter.py +395 -395
- package/skills/ai-media/ai-multimodal/scripts/gemini_batch_process.py +480 -480
- package/skills/ai-media/ai-multimodal/scripts/media_optimizer.py +506 -506
- package/skills/ai-media/ai-multimodal/scripts/requirements.txt +26 -26
- package/skills/ai-media/ai-multimodal/scripts/tests/requirements.txt +20 -20
- package/skills/ai-media/ai-multimodal/scripts/tests/test_document_converter.py +299 -299
- package/skills/ai-media/ai-multimodal/scripts/tests/test_gemini_batch_process.py +362 -362
- package/skills/ai-media/ai-multimodal/scripts/tests/test_media_optimizer.py +373 -373
- package/skills/ai-media/media-processing/SKILL.md +358 -358
- package/skills/ai-media/media-processing/references/ffmpeg-encoding.md +358 -358
- package/skills/ai-media/media-processing/references/ffmpeg-filters.md +503 -503
- package/skills/ai-media/media-processing/references/ffmpeg-streaming.md +403 -403
- package/skills/ai-media/media-processing/references/format-compatibility.md +375 -375
- package/skills/ai-media/media-processing/references/imagemagick-batch.md +612 -612
- package/skills/ai-media/media-processing/references/imagemagick-editing.md +623 -623
- package/skills/ai-media/media-processing/scripts/batch_resize.py +342 -342
- package/skills/ai-media/media-processing/scripts/media_convert.py +311 -311
- package/skills/ai-media/media-processing/scripts/requirements.txt +24 -24
- package/skills/ai-media/media-processing/scripts/tests/requirements.txt +2 -2
- package/skills/ai-media/media-processing/scripts/tests/test_batch_resize.py +372 -372
- package/skills/ai-media/media-processing/scripts/tests/test_media_convert.py +259 -259
- package/skills/ai-media/media-processing/scripts/tests/test_video_optimize.py +397 -397
- package/skills/ai-media/media-processing/scripts/video_optimize.py +414 -414
- package/skills/ai-media/screenshot/LICENSE.txt +201 -201
- package/skills/ai-media/screenshot/SKILL.md +267 -267
- package/skills/ai-media/screenshot/agents/openai.yaml +6 -6
- package/skills/ai-media/screenshot/assets/screenshot-small.svg +5 -5
- package/skills/ai-media/screenshot/scripts/ensure_macos_permissions.sh +54 -54
- package/skills/ai-media/screenshot/scripts/macos_display_info.swift +22 -22
- package/skills/ai-media/screenshot/scripts/macos_permissions.swift +40 -40
- package/skills/ai-media/screenshot/scripts/macos_window_info.swift +126 -126
- package/skills/ai-media/screenshot/scripts/take_screenshot.ps1 +163 -163
- package/skills/ai-media/screenshot/scripts/take_screenshot.py +585 -585
- package/skills/ai-media/sora/LICENSE.txt +201 -201
- package/skills/ai-media/sora/SKILL.md +153 -153
- package/skills/ai-media/sora/agents/openai.yaml +6 -6
- package/skills/ai-media/sora/assets/sora-small.svg +4 -4
- package/skills/ai-media/sora/references/cinematic-shots.md +53 -53
- package/skills/ai-media/sora/references/cli.md +248 -248
- package/skills/ai-media/sora/references/codex-network.md +28 -28
- package/skills/ai-media/sora/references/prompting.md +137 -137
- package/skills/ai-media/sora/references/sample-prompts.md +95 -95
- package/skills/ai-media/sora/references/social-ads.md +42 -42
- package/skills/ai-media/sora/references/troubleshooting.md +58 -58
- package/skills/ai-media/sora/references/video-api.md +45 -45
- package/skills/ai-media/sora/scripts/sora.py +970 -970
- package/skills/design/aesthetic/SKILL.md +121 -121
- package/skills/design/aesthetic/assets/design-guideline-template.md +163 -163
- package/skills/design/aesthetic/assets/design-story-template.md +135 -135
- package/skills/design/aesthetic/references/design-principles.md +62 -62
- package/skills/design/aesthetic/references/design-resources.md +75 -75
- package/skills/design/aesthetic/references/micro-interactions.md +53 -53
- package/skills/design/aesthetic/references/storytelling-design.md +50 -50
- package/skills/design/figma/LICENSE.txt +202 -202
- package/skills/design/figma/SKILL.md +42 -42
- package/skills/design/figma/agents/openai.yaml +14 -14
- package/skills/design/figma/assets/figma-small.svg +3 -3
- package/skills/design/figma/assets/icon.svg +28 -28
- package/skills/design/figma/references/figma-mcp-config.md +35 -35
- package/skills/design/figma/references/figma-tools-and-prompts.md +34 -34
- package/skills/design/figma-implement-design/LICENSE.txt +202 -202
- package/skills/design/figma-implement-design/SKILL.md +264 -264
- package/skills/design/figma-implement-design/agents/openai.yaml +14 -14
- package/skills/design/figma-implement-design/assets/figma-small.svg +3 -3
- package/skills/design/figma-implement-design/assets/icon.svg +28 -28
- package/skills/design/frontend-design/SKILL.md +41 -41
- package/skills/design/frontend-design/references/animejs.md +395 -395
- package/skills/design/ui-styling/LICENSE.txt +201 -201
- package/skills/design/ui-styling/SKILL.md +321 -321
- package/skills/design/ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/DMMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -94
- package/skills/design/ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Gloock-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Italiana-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Jura-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Lora-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Outfit-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Tektur-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -93
- package/skills/design/ui-styling/references/canvas-design-system.md +320 -320
- package/skills/design/ui-styling/references/shadcn-accessibility.md +471 -471
- package/skills/design/ui-styling/references/shadcn-components.md +424 -424
- package/skills/design/ui-styling/references/shadcn-theming.md +373 -373
- package/skills/design/ui-styling/references/tailwind-customization.md +483 -483
- package/skills/design/ui-styling/references/tailwind-responsive.md +382 -382
- package/skills/design/ui-styling/references/tailwind-utilities.md +455 -455
- package/skills/design/ui-styling/scripts/requirements.txt +17 -17
- package/skills/design/ui-styling/scripts/shadcn_add.py +292 -292
- package/skills/design/ui-styling/scripts/tailwind_config_gen.py +456 -456
- package/skills/design/ui-styling/scripts/tests/requirements.txt +3 -3
- package/skills/design/ui-styling/scripts/tests/test_shadcn_add.py +266 -266
- package/skills/design/ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -336
- package/skills/engineering/aspnet-core/LICENSE.txt +201 -201
- package/skills/engineering/aspnet-core/SKILL.md +61 -61
- package/skills/engineering/aspnet-core/agents/openai.yaml +5 -5
- package/skills/engineering/aspnet-core/references/_sections.md +40 -40
- package/skills/engineering/aspnet-core/references/apis-minimal-and-controllers.md +81 -81
- package/skills/engineering/aspnet-core/references/data-state-and-services.md +69 -69
- package/skills/engineering/aspnet-core/references/program-and-pipeline.md +103 -103
- package/skills/engineering/aspnet-core/references/realtime-grpc-and-background-work.md +58 -58
- package/skills/engineering/aspnet-core/references/security-and-identity.md +75 -75
- package/skills/engineering/aspnet-core/references/source-map.md +43 -43
- package/skills/engineering/aspnet-core/references/stack-selection.md +63 -63
- package/skills/engineering/aspnet-core/references/testing-performance-and-operations.md +92 -92
- package/skills/engineering/aspnet-core/references/ui-blazor.md +53 -53
- package/skills/engineering/aspnet-core/references/ui-mvc.md +56 -56
- package/skills/engineering/aspnet-core/references/ui-razor-pages.md +55 -55
- package/skills/engineering/aspnet-core/references/versioning-and-upgrades.md +51 -51
- package/skills/engineering/backend-development/SKILL.md +95 -95
- package/skills/engineering/backend-development/references/backend-api-design.md +495 -495
- package/skills/engineering/backend-development/references/backend-architecture.md +454 -454
- package/skills/engineering/backend-development/references/backend-authentication.md +338 -338
- package/skills/engineering/backend-development/references/backend-code-quality.md +659 -659
- package/skills/engineering/backend-development/references/backend-debugging.md +904 -904
- package/skills/engineering/backend-development/references/backend-devops.md +494 -494
- package/skills/engineering/backend-development/references/backend-mindset.md +387 -387
- package/skills/engineering/backend-development/references/backend-performance.md +397 -397
- package/skills/engineering/backend-development/references/backend-security.md +290 -290
- package/skills/engineering/backend-development/references/backend-technologies.md +256 -256
- package/skills/engineering/backend-development/references/backend-testing.md +429 -429
- package/skills/engineering/better-auth/SKILL.md +204 -204
- package/skills/engineering/better-auth/references/advanced-features.md +553 -553
- package/skills/engineering/better-auth/references/database-integration.md +577 -577
- package/skills/engineering/better-auth/references/email-password-auth.md +416 -416
- package/skills/engineering/better-auth/references/oauth-providers.md +430 -430
- package/skills/engineering/better-auth/scripts/better_auth_init.py +521 -521
- package/skills/engineering/better-auth/scripts/requirements.txt +15 -15
- package/skills/engineering/better-auth/scripts/tests/test_better_auth_init.py +421 -421
- package/skills/engineering/code-review/SKILL.md +140 -140
- package/skills/engineering/code-review/references/code-review-reception.md +208 -208
- package/skills/engineering/code-review/references/requesting-code-review.md +104 -104
- package/skills/engineering/code-review/references/verification-before-completion.md +138 -138
- package/skills/engineering/context-engineering/SKILL.md +86 -86
- package/skills/engineering/context-engineering/references/context-compression.md +84 -84
- package/skills/engineering/context-engineering/references/context-degradation.md +93 -93
- package/skills/engineering/context-engineering/references/context-fundamentals.md +75 -75
- package/skills/engineering/context-engineering/references/context-optimization.md +82 -82
- package/skills/engineering/context-engineering/references/evaluation.md +89 -89
- package/skills/engineering/context-engineering/references/memory-systems.md +88 -88
- package/skills/engineering/context-engineering/references/multi-agent-patterns.md +90 -90
- package/skills/engineering/context-engineering/references/project-development.md +97 -97
- package/skills/engineering/context-engineering/references/tool-design.md +86 -86
- package/skills/engineering/context-engineering/scripts/compression_evaluator.py +329 -329
- package/skills/engineering/context-engineering/scripts/context_analyzer.py +294 -294
- package/skills/engineering/databases/SKILL.md +232 -232
- package/skills/engineering/databases/references/mongodb-aggregation.md +447 -447
- package/skills/engineering/databases/references/mongodb-atlas.md +465 -465
- package/skills/engineering/databases/references/mongodb-crud.md +408 -408
- package/skills/engineering/databases/references/mongodb-indexing.md +442 -442
- package/skills/engineering/databases/references/postgresql-administration.md +594 -594
- package/skills/engineering/databases/references/postgresql-performance.md +527 -527
- package/skills/engineering/databases/references/postgresql-psql-cli.md +467 -467
- package/skills/engineering/databases/references/postgresql-queries.md +475 -475
- package/skills/engineering/databases/scripts/db_backup.py +502 -502
- package/skills/engineering/databases/scripts/db_migrate.py +414 -414
- package/skills/engineering/databases/scripts/db_performance_check.py +444 -444
- package/skills/engineering/databases/scripts/requirements.txt +20 -20
- package/skills/engineering/databases/scripts/tests/requirements.txt +4 -4
- package/skills/engineering/databases/scripts/tests/test_db_backup.py +340 -340
- package/skills/engineering/databases/scripts/tests/test_db_migrate.py +277 -277
- package/skills/engineering/databases/scripts/tests/test_db_performance_check.py +370 -370
- package/skills/engineering/diagnose/SKILL.md +117 -117
- package/skills/engineering/diagnose/scripts/hitl-loop.template.sh +41 -41
- package/skills/engineering/docs-seeker/SKILL.md +207 -207
- package/skills/engineering/docs-seeker/WORKFLOWS.md +505 -505
- package/skills/engineering/docs-seeker/references/best-practices.md +632 -632
- package/skills/engineering/docs-seeker/references/documentation-sources.md +461 -461
- package/skills/engineering/docs-seeker/references/error-handling.md +621 -621
- package/skills/engineering/docs-seeker/references/limitations.md +821 -821
- package/skills/engineering/docs-seeker/references/performance.md +574 -574
- package/skills/engineering/docs-seeker/references/tool-selection.md +262 -262
- package/skills/engineering/frontend-development/SKILL.md +398 -398
- package/skills/engineering/frontend-development/resources/common-patterns.md +330 -330
- package/skills/engineering/frontend-development/resources/complete-examples.md +871 -871
- package/skills/engineering/frontend-development/resources/component-patterns.md +501 -501
- package/skills/engineering/frontend-development/resources/data-fetching.md +766 -766
- package/skills/engineering/frontend-development/resources/file-organization.md +501 -501
- package/skills/engineering/frontend-development/resources/loading-and-error-states.md +500 -500
- package/skills/engineering/frontend-development/resources/performance.md +405 -405
- package/skills/engineering/frontend-development/resources/routing-guide.md +363 -363
- package/skills/engineering/frontend-development/resources/styling-guide.md +427 -427
- package/skills/engineering/frontend-development/resources/typescript-standards.md +417 -417
- package/skills/engineering/improve-codebase-architecture/DEEPENING.md +37 -37
- package/skills/engineering/improve-codebase-architecture/INTERFACE-DESIGN.md +44 -44
- package/skills/engineering/improve-codebase-architecture/LANGUAGE.md +53 -53
- package/skills/engineering/improve-codebase-architecture/SKILL.md +71 -71
- package/skills/engineering/openai-docs/LICENSE.txt +201 -201
- package/skills/engineering/openai-docs/SKILL.md +69 -69
- package/skills/engineering/openai-docs/agents/openai.yaml +14 -14
- package/skills/engineering/openai-docs/assets/openai-small.svg +3 -3
- package/skills/engineering/openai-docs/references/gpt-5p4-prompting-guide.md +433 -433
- package/skills/engineering/openai-docs/references/latest-model.md +35 -35
- package/skills/engineering/openai-docs/references/upgrading-to-gpt-5p4.md +164 -164
- package/skills/engineering/playwright/LICENSE.txt +201 -201
- package/skills/engineering/playwright/NOTICE.txt +14 -14
- package/skills/engineering/playwright/SKILL.md +147 -147
- package/skills/engineering/playwright/agents/openai.yaml +6 -6
- package/skills/engineering/playwright/assets/playwright-small.svg +3 -3
- package/skills/engineering/playwright/references/cli.md +116 -116
- package/skills/engineering/playwright/references/workflows.md +95 -95
- package/skills/engineering/playwright/scripts/playwright_cli.sh +25 -25
- package/skills/engineering/playwright-interactive/LICENSE.txt +201 -201
- package/skills/engineering/playwright-interactive/NOTICE.txt +13 -13
- package/skills/engineering/playwright-interactive/SKILL.md +689 -689
- package/skills/engineering/playwright-interactive/agents/openai.yaml +6 -6
- package/skills/engineering/playwright-interactive/assets/playwright-small.svg +3 -3
- package/skills/engineering/render-deploy/LICENSE.txt +201 -201
- package/skills/engineering/render-deploy/SKILL.md +479 -479
- package/skills/engineering/render-deploy/agents/openai.yaml +14 -14
- package/skills/engineering/render-deploy/assets/docker.yaml +62 -62
- package/skills/engineering/render-deploy/assets/go-api.yaml +35 -35
- package/skills/engineering/render-deploy/assets/nextjs-postgres.yaml +35 -35
- package/skills/engineering/render-deploy/assets/node-express.yaml +25 -25
- package/skills/engineering/render-deploy/assets/python-django.yaml +89 -89
- package/skills/engineering/render-deploy/assets/render-small.svg +3 -3
- package/skills/engineering/render-deploy/assets/static-site.yaml +54 -54
- package/skills/engineering/render-deploy/references/blueprint-spec.md +718 -718
- package/skills/engineering/render-deploy/references/codebase-analysis.md +49 -49
- package/skills/engineering/render-deploy/references/configuration-guide.md +603 -603
- package/skills/engineering/render-deploy/references/deployment-details.md +224 -224
- package/skills/engineering/render-deploy/references/direct-creation.md +113 -113
- package/skills/engineering/render-deploy/references/error-patterns.md +13 -13
- package/skills/engineering/render-deploy/references/post-deploy-checks.md +36 -36
- package/skills/engineering/render-deploy/references/runtimes.md +473 -473
- package/skills/engineering/render-deploy/references/service-types.md +450 -450
- package/skills/engineering/render-deploy/references/troubleshooting-basics.md +36 -36
- package/skills/engineering/repomix/SKILL.md +215 -215
- package/skills/engineering/repomix/references/configuration.md +211 -211
- package/skills/engineering/repomix/references/usage-patterns.md +232 -232
- package/skills/engineering/repomix/scripts/README.md +179 -179
- package/skills/engineering/repomix/scripts/repomix_batch.py +455 -455
- package/skills/engineering/repomix/scripts/repos.example.json +15 -15
- package/skills/engineering/repomix/scripts/requirements.txt +15 -15
- package/skills/engineering/repomix/scripts/tests/test_repomix_batch.py +531 -531
- package/skills/engineering/setup-matt-pocock-skills/SKILL.md +121 -121
- package/skills/engineering/setup-matt-pocock-skills/domain.md +51 -51
- package/skills/engineering/setup-matt-pocock-skills/issue-tracker-github.md +22 -22
- package/skills/engineering/setup-matt-pocock-skills/issue-tracker-gitlab.md +23 -23
- package/skills/engineering/setup-matt-pocock-skills/issue-tracker-local.md +19 -19
- package/skills/engineering/setup-matt-pocock-skills/triage-labels.md +15 -15
- package/skills/engineering/shopify/README.md +66 -66
- package/skills/engineering/shopify/SKILL.md +319 -319
- package/skills/engineering/shopify/references/app-development.md +470 -470
- package/skills/engineering/shopify/references/extensions.md +493 -493
- package/skills/engineering/shopify/references/themes.md +498 -498
- package/skills/engineering/shopify/scripts/requirements.txt +19 -19
- package/skills/engineering/shopify/scripts/shopify_init.py +423 -423
- package/skills/engineering/shopify/scripts/tests/test_shopify_init.py +385 -385
- package/skills/engineering/tdd/SKILL.md +109 -109
- package/skills/engineering/tdd/deep-modules.md +33 -33
- package/skills/engineering/tdd/interface-design.md +31 -31
- package/skills/engineering/tdd/mocking.md +59 -59
- package/skills/engineering/tdd/refactoring.md +10 -10
- package/skills/engineering/tdd/tests.md +61 -61
- package/skills/engineering/to-issues/SKILL.md +81 -81
- package/skills/engineering/to-prd/SKILL.md +74 -74
- package/skills/engineering/triage/AGENT-BRIEF.md +168 -168
- package/skills/engineering/triage/OUT-OF-SCOPE.md +101 -101
- package/skills/engineering/triage/SKILL.md +103 -103
- package/skills/engineering/web-frameworks/SKILL.md +324 -324
- package/skills/engineering/web-frameworks/references/nextjs-app-router.md +465 -465
- package/skills/engineering/web-frameworks/references/nextjs-data-fetching.md +459 -459
- package/skills/engineering/web-frameworks/references/nextjs-optimization.md +511 -511
- package/skills/engineering/web-frameworks/references/nextjs-server-components.md +495 -495
- package/skills/engineering/web-frameworks/references/remix-icon-integration.md +603 -603
- package/skills/engineering/web-frameworks/references/turborepo-caching.md +551 -551
- package/skills/engineering/web-frameworks/references/turborepo-pipelines.md +517 -517
- package/skills/engineering/web-frameworks/references/turborepo-setup.md +542 -542
- package/skills/engineering/web-frameworks/scripts/nextjs_init.py +547 -547
- package/skills/engineering/web-frameworks/scripts/requirements.txt +16 -16
- package/skills/engineering/web-frameworks/scripts/tests/requirements.txt +3 -3
- package/skills/engineering/web-frameworks/scripts/tests/test_nextjs_init.py +319 -319
- package/skills/engineering/web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -374
- package/skills/engineering/web-frameworks/scripts/turborepo_migrate.py +394 -394
- package/skills/engineering/write-a-skill/SKILL.md +117 -117
- package/skills/kilo-kit/SKILL.md +346 -346
- package/skills/kilo-kit/_template/SKILL.md +185 -185
- package/skills/kilo-kit/debugging/root-cause/SKILL.md +360 -360
- package/skills/kilo-kit/debugging/systematic/SKILL.md +339 -339
- package/skills/kilo-kit/debugging/verification/SKILL.md +424 -424
- package/skills/kilo-kit/development/backend/SKILL.md +540 -540
- package/skills/kilo-kit/development/security/SKILL.md +529 -529
- package/skills/kilo-kit/quality/code-review/SKILL.md +297 -297
- package/skills/kilo-kit/quality/testing/SKILL.md +540 -540
- package/skills/kilo-kit/references/output-formats.md +204 -204
- package/skills/kilo-kit/references/patterns.md +156 -156
- package/skills/kilo-kit/references/performance-benchmarks.md +90 -90
- package/skills/operations/chrome-devtools/SKILL.md +392 -392
- package/skills/operations/chrome-devtools/references/cdp-domains.md +694 -694
- package/skills/operations/chrome-devtools/references/performance-guide.md +940 -940
- package/skills/operations/chrome-devtools/references/puppeteer-reference.md +953 -953
- package/skills/operations/chrome-devtools/scripts/PERSISTENT-BROWSER.md +107 -107
- package/skills/operations/chrome-devtools/scripts/README.md +213 -213
- package/skills/operations/chrome-devtools/scripts/__tests__/selector.test.js +210 -210
- package/skills/operations/chrome-devtools/scripts/click.js +79 -79
- package/skills/operations/chrome-devtools/scripts/close-persistent.js +36 -36
- package/skills/operations/chrome-devtools/scripts/console.js +75 -75
- package/skills/operations/chrome-devtools/scripts/evaluate.js +49 -49
- package/skills/operations/chrome-devtools/scripts/fill.js +72 -72
- package/skills/operations/chrome-devtools/scripts/install-deps.sh +181 -181
- package/skills/operations/chrome-devtools/scripts/install.sh +83 -83
- package/skills/operations/chrome-devtools/scripts/launch-persistent.js +71 -71
- package/skills/operations/chrome-devtools/scripts/lib/browser.js +144 -144
- package/skills/operations/chrome-devtools/scripts/lib/selector.js +178 -178
- package/skills/operations/chrome-devtools/scripts/navigate.js +46 -46
- package/skills/operations/chrome-devtools/scripts/network.js +102 -102
- package/skills/operations/chrome-devtools/scripts/package-lock.json +1206 -1206
- package/skills/operations/chrome-devtools/scripts/package.json +15 -15
- package/skills/operations/chrome-devtools/scripts/performance.js +145 -145
- package/skills/operations/chrome-devtools/scripts/screenshot.js +180 -180
- package/skills/operations/chrome-devtools/scripts/snapshot.js +131 -131
- package/skills/operations/devops/.env.example +76 -76
- package/skills/operations/devops/SKILL.md +285 -285
- package/skills/operations/devops/references/browser-rendering.md +305 -305
- package/skills/operations/devops/references/cloudflare-d1-kv.md +123 -123
- package/skills/operations/devops/references/cloudflare-platform.md +271 -271
- package/skills/operations/devops/references/cloudflare-r2-storage.md +280 -280
- package/skills/operations/devops/references/cloudflare-workers-advanced.md +312 -312
- package/skills/operations/devops/references/cloudflare-workers-apis.md +309 -309
- package/skills/operations/devops/references/cloudflare-workers-basics.md +418 -418
- package/skills/operations/devops/references/docker-basics.md +297 -297
- package/skills/operations/devops/references/docker-compose.md +292 -292
- package/skills/operations/devops/references/gcloud-platform.md +297 -297
- package/skills/operations/devops/references/gcloud-services.md +304 -304
- package/skills/operations/devops/scripts/cloudflare_deploy.py +269 -269
- package/skills/operations/devops/scripts/docker_optimize.py +320 -320
- package/skills/operations/devops/scripts/requirements.txt +20 -20
- package/skills/operations/devops/scripts/tests/requirements.txt +3 -3
- package/skills/operations/devops/scripts/tests/test_cloudflare_deploy.py +285 -285
- package/skills/operations/devops/scripts/tests/test_docker_optimize.py +436 -436
- package/skills/operations/mcp-builder/LICENSE.txt +201 -201
- package/skills/operations/mcp-builder/SKILL.md +328 -328
- package/skills/operations/mcp-builder/reference/evaluation.md +601 -601
- package/skills/operations/mcp-builder/reference/mcp_best_practices.md +915 -915
- package/skills/operations/mcp-builder/reference/node_mcp_server.md +915 -915
- package/skills/operations/mcp-builder/reference/python_mcp_server.md +751 -751
- package/skills/operations/mcp-builder/scripts/connections.py +151 -151
- package/skills/operations/mcp-builder/scripts/evaluation.py +373 -373
- package/skills/operations/mcp-builder/scripts/example_evaluation.xml +22 -22
- package/skills/operations/mcp-builder/scripts/requirements.txt +2 -2
- package/skills/operations/mcp-management/README.md +219 -219
- package/skills/operations/mcp-management/SKILL.md +175 -175
- package/skills/operations/mcp-management/assets/tools.json +3043 -3043
- package/skills/operations/mcp-management/references/configuration.md +114 -114
- package/skills/operations/mcp-management/references/gemini-cli-integration.md +201 -201
- package/skills/operations/mcp-management/references/mcp-protocol.md +116 -116
- package/skills/operations/mcp-management/scripts/.env.example +10 -10
- package/skills/operations/mcp-management/scripts/cli.ts +155 -155
- package/skills/operations/mcp-management/scripts/dist/analyze-tools.js +70 -70
- package/skills/operations/mcp-management/scripts/dist/cli.js +131 -131
- package/skills/operations/mcp-management/scripts/dist/mcp-client.js +115 -115
- package/skills/operations/mcp-management/scripts/mcp-client.ts +163 -163
- package/skills/operations/mcp-management/scripts/package.json +18 -18
- package/skills/operations/mcp-management/scripts/tsconfig.json +15 -15
- package/skills/problem-solving/collision-zone-thinking/SKILL.md +62 -62
- package/skills/problem-solving/defense-in-depth/SKILL.md +130 -130
- package/skills/problem-solving/inversion-exercise/SKILL.md +58 -58
- package/skills/problem-solving/meta-pattern-recognition/SKILL.md +54 -54
- package/skills/problem-solving/root-cause-tracing/SKILL.md +177 -177
- package/skills/problem-solving/root-cause-tracing/find-polluter.sh +63 -63
- package/skills/problem-solving/scale-game/SKILL.md +63 -63
- package/skills/problem-solving/sequential-thinking/README.md +118 -118
- package/skills/problem-solving/sequential-thinking/SKILL.md +93 -93
- package/skills/problem-solving/sequential-thinking/references/advanced.md +122 -122
- package/skills/problem-solving/sequential-thinking/references/examples.md +274 -274
- package/skills/problem-solving/simplification-cascades/SKILL.md +76 -76
- package/skills/problem-solving/when-stuck/SKILL.md +88 -88
- package/skills/productivity/caveman/SKILL.md +49 -49
- package/skills/productivity/grill-me/SKILL.md +10 -10
- package/skills/productivity/grill-with-docs/ADR-FORMAT.md +47 -47
- package/skills/productivity/grill-with-docs/CONTEXT-FORMAT.md +77 -77
- package/skills/productivity/grill-with-docs/SKILL.md +88 -88
- package/skills/productivity/writing-skills/graphviz-conventions.dot +171 -171
- package/skills/productivity/zoom-out/SKILL.md +7 -7
- package/skills/writing-docs/doc/LICENSE.txt +201 -201
- package/skills/writing-docs/doc/SKILL.md +80 -80
- package/skills/writing-docs/doc/agents/openai.yaml +6 -6
- package/skills/writing-docs/doc/assets/doc-small.svg +3 -3
- package/skills/writing-docs/doc/scripts/render_docx.py +296 -296
- package/skills/writing-docs/docx/LICENSE.txt +30 -30
- package/skills/writing-docs/docx/SKILL.md +196 -196
- package/skills/writing-docs/docx/docx-js.md +349 -349
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -1499
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -146
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -1085
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -11
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -3081
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -23
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -185
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -287
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -1676
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -28
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -144
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -174
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -25
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -18
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -59
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -56
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -195
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -582
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -25
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -4439
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -570
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -509
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -12
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -108
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -96
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -3646
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -116
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -42
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -50
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -49
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -33
- package/skills/writing-docs/docx/ooxml/schemas/mce/mc.xsd +75 -75
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -560
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -67
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -14
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -20
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -13
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -4
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -8
- package/skills/writing-docs/docx/ooxml/scripts/pack.py +159 -159
- package/skills/writing-docs/docx/ooxml/scripts/unpack.py +29 -29
- package/skills/writing-docs/docx/ooxml/scripts/validate.py +69 -69
- package/skills/writing-docs/docx/ooxml/scripts/validation/__init__.py +15 -15
- package/skills/writing-docs/docx/ooxml/scripts/validation/base.py +951 -951
- package/skills/writing-docs/docx/ooxml/scripts/validation/docx.py +274 -274
- package/skills/writing-docs/docx/ooxml/scripts/validation/pptx.py +315 -315
- package/skills/writing-docs/docx/ooxml/scripts/validation/redlining.py +279 -279
- package/skills/writing-docs/docx/ooxml.md +609 -609
- package/skills/writing-docs/docx/scripts/__init__.py +1 -1
- package/skills/writing-docs/docx/scripts/document.py +1276 -1276
- package/skills/writing-docs/docx/scripts/templates/comments.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/commentsExtended.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/commentsExtensible.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/commentsIds.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/people.xml +2 -2
- package/skills/writing-docs/docx/scripts/utilities.py +374 -374
- package/skills/writing-docs/mermaidjs-v11/SKILL.md +115 -115
- package/skills/writing-docs/mermaidjs-v11/references/cli-usage.md +228 -228
- package/skills/writing-docs/mermaidjs-v11/references/configuration.md +232 -232
- package/skills/writing-docs/mermaidjs-v11/references/diagram-types.md +315 -315
- package/skills/writing-docs/mermaidjs-v11/references/examples.md +344 -344
- package/skills/writing-docs/mermaidjs-v11/references/integration.md +310 -310
- package/skills/writing-docs/pdf/LICENSE.txt +30 -30
- package/skills/writing-docs/pdf/SKILL.md +294 -294
- package/skills/writing-docs/pdf/forms.md +205 -205
- package/skills/writing-docs/pdf/reference.md +611 -611
- package/skills/writing-docs/pdf/scripts/check_bounding_boxes.py +70 -70
- package/skills/writing-docs/pdf/scripts/check_bounding_boxes_test.py +226 -226
- package/skills/writing-docs/pdf/scripts/check_fillable_fields.py +12 -12
- package/skills/writing-docs/pdf/scripts/convert_pdf_to_images.py +35 -35
- package/skills/writing-docs/pdf/scripts/create_validation_image.py +41 -41
- package/skills/writing-docs/pdf/scripts/extract_form_field_info.py +152 -152
- package/skills/writing-docs/pdf/scripts/fill_fillable_fields.py +114 -114
- package/skills/writing-docs/pdf/scripts/fill_pdf_form_with_annotations.py +107 -107
- package/skills/writing-docs/pptx/LICENSE.txt +30 -30
- package/skills/writing-docs/pptx/SKILL.md +483 -483
- package/skills/writing-docs/pptx/html2pptx.md +624 -624
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -1499
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -146
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -1085
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -11
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -3081
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -23
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -185
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -287
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -1676
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -28
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -144
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -174
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -25
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -18
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -59
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -56
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -195
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -582
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -25
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -4439
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -570
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -509
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -12
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -108
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -96
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -3646
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -116
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -42
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -50
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -49
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -33
- package/skills/writing-docs/pptx/ooxml/schemas/mce/mc.xsd +75 -75
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -560
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -67
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -14
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -20
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -13
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -4
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -8
- package/skills/writing-docs/pptx/ooxml/scripts/pack.py +159 -159
- package/skills/writing-docs/pptx/ooxml/scripts/unpack.py +29 -29
- package/skills/writing-docs/pptx/ooxml/scripts/validate.py +69 -69
- package/skills/writing-docs/pptx/ooxml/scripts/validation/__init__.py +15 -15
- package/skills/writing-docs/pptx/ooxml/scripts/validation/base.py +951 -951
- package/skills/writing-docs/pptx/ooxml/scripts/validation/docx.py +274 -274
- package/skills/writing-docs/pptx/ooxml/scripts/validation/pptx.py +315 -315
- package/skills/writing-docs/pptx/ooxml/scripts/validation/redlining.py +279 -279
- package/skills/writing-docs/pptx/ooxml.md +426 -426
- package/skills/writing-docs/pptx/scripts/html2pptx.js +978 -978
- package/skills/writing-docs/pptx/scripts/inventory.py +1020 -1020
- package/skills/writing-docs/pptx/scripts/rearrange.py +231 -231
- package/skills/writing-docs/pptx/scripts/replace.py +385 -385
- package/skills/writing-docs/pptx/scripts/thumbnail.py +450 -450
- package/skills/writing-docs/slides/LICENSE.txt +201 -201
- package/skills/writing-docs/slides/SKILL.md +71 -71
- package/skills/writing-docs/slides/agents/openai.yaml +6 -6
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/code.js +104 -104
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/image.js +333 -333
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/index.js +33 -33
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/latex.js +51 -51
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/layout.js +643 -643
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/layout_builders.js +358 -358
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/svg.js +36 -36
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/text.js +789 -789
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/util.js +24 -24
- package/skills/writing-docs/slides/assets/slides-small.svg +3 -3
- package/skills/writing-docs/slides/references/pptxgenjs-helpers.md +61 -61
- package/skills/writing-docs/slides/scripts/create_montage.py +300 -300
- package/skills/writing-docs/slides/scripts/detect_font.py +873 -873
- package/skills/writing-docs/slides/scripts/ensure_raster_image.py +202 -202
- package/skills/writing-docs/slides/scripts/render_slides.py +273 -273
- package/skills/writing-docs/slides/scripts/slides_test.py +201 -201
- package/skills/writing-docs/template-skill/SKILL.md +26 -26
- package/skills/writing-docs/xlsx/LICENSE.txt +30 -30
- package/skills/writing-docs/xlsx/SKILL.md +288 -288
- package/skills/writing-docs/xlsx/recalc.py +177 -177
- package/src/core/KILO_MASTER.md +448 -448
- package/src/tools/validate-skill.js +421 -421
|
@@ -1,529 +1,529 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: security-best-practices
|
|
3
|
-
description: >-
|
|
4
|
-
Security-focused development skill covering OWASP Top 10 and secure coding.
|
|
5
|
-
Use when implementing authentication, handling user data, or security review.
|
|
6
|
-
Keywords: security, auth, authentication, authorization, OWASP, XSS, SQL injection, CSRF, secure
|
|
7
|
-
version: 1.0.0
|
|
8
|
-
behaviors: [review_and_suggest, investigate_codebase, generate_with_validation]
|
|
9
|
-
dependencies: []
|
|
10
|
-
token_estimate:
|
|
11
|
-
min: 1500
|
|
12
|
-
typical: 3500
|
|
13
|
-
max: 8000
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
# 🔐 Security Best Practices Skill
|
|
17
|
-
|
|
18
|
-
> **Philosophy:** Security is not optional. Build it in from the start.
|
|
19
|
-
|
|
20
|
-
## When to Use
|
|
21
|
-
|
|
22
|
-
Use this skill when:
|
|
23
|
-
- Implementing authentication/authorization
|
|
24
|
-
- Handling user input
|
|
25
|
-
- Working with sensitive data
|
|
26
|
-
- Doing security code review
|
|
27
|
-
- Building user-facing features
|
|
28
|
-
- Setting up deployment/infrastructure
|
|
29
|
-
|
|
30
|
-
**Do NOT use this skill when:**
|
|
31
|
-
- Just formatting code
|
|
32
|
-
- Pure UI/styling changes
|
|
33
|
-
- No user data involved
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Prerequisites
|
|
38
|
-
|
|
39
|
-
Before starting:
|
|
40
|
-
- [ ] Understand what data you're handling
|
|
41
|
-
- [ ] Know your threat model (who might attack)
|
|
42
|
-
- [ ] Have access to codebase
|
|
43
|
-
- [ ] Understand the tech stack
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## OWASP Top 10 Quick Reference
|
|
48
|
-
|
|
49
|
-
### 1. Broken Access Control (A01:2021)
|
|
50
|
-
|
|
51
|
-
**What:** Users can access data/functions they shouldn't.
|
|
52
|
-
|
|
53
|
-
**Prevention:**
|
|
54
|
-
```typescript
|
|
55
|
-
// ❌ Bad: No authorization check
|
|
56
|
-
app.get('/users/:id', async (req, res) => {
|
|
57
|
-
const user = await db.users.findById(req.params.id);
|
|
58
|
-
res.json(user);
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
// ✅ Good: Check ownership
|
|
62
|
-
app.get('/users/:id', authorize(), async (req, res) => {
|
|
63
|
-
const user = await db.users.findById(req.params.id);
|
|
64
|
-
|
|
65
|
-
if (user.id !== req.user.id && req.user.role !== 'admin') {
|
|
66
|
-
throw new ForbiddenException();
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
res.json(user);
|
|
70
|
-
});
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
**Checklist:**
|
|
74
|
-
- [ ] Default deny (require explicit permission)
|
|
75
|
-
- [ ] Verify ownership of resources
|
|
76
|
-
- [ ] Role-based access control implemented
|
|
77
|
-
- [ ] Admin functions protected
|
|
78
|
-
- [ ] CORS configured correctly
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
### 2. Cryptographic Failures (A02:2021)
|
|
83
|
-
|
|
84
|
-
**What:** Weak crypto, exposed sensitive data.
|
|
85
|
-
|
|
86
|
-
**Prevention:**
|
|
87
|
-
```typescript
|
|
88
|
-
// ❌ Bad: Weak hashing
|
|
89
|
-
const hash = crypto.createHash('md5').update(password).digest('hex');
|
|
90
|
-
|
|
91
|
-
// ✅ Good: Strong hashing with bcrypt
|
|
92
|
-
const hash = await bcrypt.hash(password, 12);
|
|
93
|
-
|
|
94
|
-
// ❌ Bad: Hardcoded secrets
|
|
95
|
-
const API_KEY = "sk_live_abc123";
|
|
96
|
-
|
|
97
|
-
// ✅ Good: Environment variables
|
|
98
|
-
const API_KEY = process.env.API_KEY;
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
**Checklist:**
|
|
102
|
-
- [ ] Passwords hashed with bcrypt/argon2 (cost factor ≥12)
|
|
103
|
-
- [ ] Sensitive data encrypted at rest
|
|
104
|
-
- [ ] TLS/HTTPS enforced
|
|
105
|
-
- [ ] No hardcoded secrets
|
|
106
|
-
- [ ] Secrets in environment variables
|
|
107
|
-
- [ ] Old/weak algorithms avoided (MD5, SHA1)
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
### 3. Injection (A03:2021)
|
|
112
|
-
|
|
113
|
-
**What:** Malicious data executed as code/query.
|
|
114
|
-
|
|
115
|
-
**Prevention:**
|
|
116
|
-
```typescript
|
|
117
|
-
// ❌ Bad: SQL Injection
|
|
118
|
-
const query = `SELECT * FROM users WHERE email = '${email}'`;
|
|
119
|
-
|
|
120
|
-
// ✅ Good: Parameterized queries
|
|
121
|
-
const user = await db.query(
|
|
122
|
-
'SELECT * FROM users WHERE email = $1',
|
|
123
|
-
[email]
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
// ❌ Bad: Command injection
|
|
127
|
-
exec(`convert ${filename} output.png`);
|
|
128
|
-
|
|
129
|
-
// ✅ Good: Use library functions
|
|
130
|
-
await sharp(filename).toFile('output.png');
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
**Types to Prevent:**
|
|
134
|
-
- SQL Injection
|
|
135
|
-
- NoSQL Injection
|
|
136
|
-
- Command Injection
|
|
137
|
-
- LDAP Injection
|
|
138
|
-
- XPath Injection
|
|
139
|
-
|
|
140
|
-
**Checklist:**
|
|
141
|
-
- [ ] Use parameterized queries/ORM
|
|
142
|
-
- [ ] Validate and sanitize all input
|
|
143
|
-
- [ ] Escape output appropriately
|
|
144
|
-
- [ ] Avoid shell commands with user input
|
|
145
|
-
- [ ] Use allow-lists, not block-lists
|
|
146
|
-
|
|
147
|
-
---
|
|
148
|
-
|
|
149
|
-
### 4. Insecure Design (A04:2021)
|
|
150
|
-
|
|
151
|
-
**What:** Missing security in design phase.
|
|
152
|
-
|
|
153
|
-
**Prevention:**
|
|
154
|
-
```yaml
|
|
155
|
-
# Security design considerations
|
|
156
|
-
threat_modeling:
|
|
157
|
-
assets:
|
|
158
|
-
- User credentials
|
|
159
|
-
- Payment information
|
|
160
|
-
- Personal data
|
|
161
|
-
|
|
162
|
-
threats:
|
|
163
|
-
- Authentication bypass
|
|
164
|
-
- Data theft
|
|
165
|
-
- Privilege escalation
|
|
166
|
-
|
|
167
|
-
mitigations:
|
|
168
|
-
- MFA for sensitive operations
|
|
169
|
-
- Encryption at rest
|
|
170
|
-
- Audit logging
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
**Checklist:**
|
|
174
|
-
- [ ] Threat model created
|
|
175
|
-
- [ ] Security requirements documented
|
|
176
|
-
- [ ] Defense in depth applied
|
|
177
|
-
- [ ] Fail securely (safe defaults)
|
|
178
|
-
- [ ] Separation of duties
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
### 5. Security Misconfiguration (A05:2021)
|
|
183
|
-
|
|
184
|
-
**What:** Insecure settings, missing hardening.
|
|
185
|
-
|
|
186
|
-
**Prevention:**
|
|
187
|
-
```typescript
|
|
188
|
-
// ❌ Bad: Debugging enabled in production
|
|
189
|
-
app.use(express.errorHandler({ dumpExceptions: true }));
|
|
190
|
-
|
|
191
|
-
// ✅ Good: Production-safe error handling
|
|
192
|
-
if (process.env.NODE_ENV === 'production') {
|
|
193
|
-
app.use((err, req, res, next) => {
|
|
194
|
-
console.error(err); // Log internally
|
|
195
|
-
res.status(500).json({ message: 'Internal error' }); // Don't expose details
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
**Checklist:**
|
|
201
|
-
- [ ] Remove default credentials
|
|
202
|
-
- [ ] Disable debugging in production
|
|
203
|
-
- [ ] Remove unnecessary features/endpoints
|
|
204
|
-
- [ ] Security headers configured
|
|
205
|
-
- [ ] Error messages don't leak info
|
|
206
|
-
- [ ] File permissions correct
|
|
207
|
-
|
|
208
|
-
**Security Headers:**
|
|
209
|
-
```typescript
|
|
210
|
-
app.use(helmet());
|
|
211
|
-
// Or manually:
|
|
212
|
-
app.use((req, res, next) => {
|
|
213
|
-
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
214
|
-
res.setHeader('X-Frame-Options', 'DENY');
|
|
215
|
-
res.setHeader('X-XSS-Protection', '1; mode=block');
|
|
216
|
-
res.setHeader('Strict-Transport-Security', 'max-age=31536000');
|
|
217
|
-
res.setHeader('Content-Security-Policy', "default-src 'self'");
|
|
218
|
-
next();
|
|
219
|
-
});
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
### 6. Vulnerable Components (A06:2021)
|
|
225
|
-
|
|
226
|
-
**What:** Using libraries with known vulnerabilities.
|
|
227
|
-
|
|
228
|
-
**Prevention:**
|
|
229
|
-
```bash
|
|
230
|
-
# Check for vulnerabilities
|
|
231
|
-
npm audit
|
|
232
|
-
pip-audit
|
|
233
|
-
dotnet list package --vulnerable
|
|
234
|
-
|
|
235
|
-
# Fix vulnerabilities
|
|
236
|
-
npm audit fix
|
|
237
|
-
pip-audit --fix
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
**Checklist:**
|
|
241
|
-
- [ ] Dependencies up to date
|
|
242
|
-
- [ ] Security advisories monitored
|
|
243
|
-
- [ ] Automated vulnerability scanning
|
|
244
|
-
- [ ] Remove unused dependencies
|
|
245
|
-
- [ ] Only use trusted sources
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
### 7. Authentication Failures (A07:2021)
|
|
250
|
-
|
|
251
|
-
**What:** Broken login, session management.
|
|
252
|
-
|
|
253
|
-
**Prevention:**
|
|
254
|
-
```typescript
|
|
255
|
-
// Password requirements
|
|
256
|
-
const passwordPolicy = {
|
|
257
|
-
minLength: 12,
|
|
258
|
-
requireUppercase: true,
|
|
259
|
-
requireLowercase: true,
|
|
260
|
-
requireNumber: true,
|
|
261
|
-
requireSpecial: true,
|
|
262
|
-
preventCommon: true,
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
// Rate limiting login attempts
|
|
266
|
-
const loginLimiter = rateLimit({
|
|
267
|
-
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
268
|
-
max: 5, // 5 attempts
|
|
269
|
-
message: 'Too many login attempts'
|
|
270
|
-
});
|
|
271
|
-
|
|
272
|
-
// Session configuration
|
|
273
|
-
app.use(session({
|
|
274
|
-
secret: process.env.SESSION_SECRET,
|
|
275
|
-
resave: false,
|
|
276
|
-
saveUninitialized: false,
|
|
277
|
-
cookie: {
|
|
278
|
-
secure: true, // HTTPS only
|
|
279
|
-
httpOnly: true, // No JS access
|
|
280
|
-
sameSite: 'strict', // CSRF protection
|
|
281
|
-
maxAge: 3600000 // 1 hour
|
|
282
|
-
}
|
|
283
|
-
}));
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
**Checklist:**
|
|
287
|
-
- [ ] Strong password policy enforced
|
|
288
|
-
- [ ] Brute force protection (rate limiting)
|
|
289
|
-
- [ ] MFA available for sensitive accounts
|
|
290
|
-
- [ ] Secure password reset flow
|
|
291
|
-
- [ ] Sessions invalidated on logout
|
|
292
|
-
- [ ] Session timeout configured
|
|
293
|
-
|
|
294
|
-
---
|
|
295
|
-
|
|
296
|
-
### 8. Software Integrity Failures (A08:2021)
|
|
297
|
-
|
|
298
|
-
**What:** Insecure updates, CI/CD pipeline attacks.
|
|
299
|
-
|
|
300
|
-
**Prevention:**
|
|
301
|
-
```yaml
|
|
302
|
-
# Verify package integrity
|
|
303
|
-
package-lock.json # Lock versions
|
|
304
|
-
npm ci # Install exact versions
|
|
305
|
-
|
|
306
|
-
# CI/CD security
|
|
307
|
-
ci_security:
|
|
308
|
-
- Verify source code integrity
|
|
309
|
-
- Sign releases
|
|
310
|
-
- Secure deployment pipeline
|
|
311
|
-
- Review third-party actions
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
**Checklist:**
|
|
315
|
-
- [ ] Lock file used and committed
|
|
316
|
-
- [ ] Packages verified (checksums)
|
|
317
|
-
- [ ] CI/CD pipeline secured
|
|
318
|
-
- [ ] Code signing for releases
|
|
319
|
-
|
|
320
|
-
---
|
|
321
|
-
|
|
322
|
-
### 9. Logging Failures (A09:2021)
|
|
323
|
-
|
|
324
|
-
**What:** Insufficient logging for security events.
|
|
325
|
-
|
|
326
|
-
**Prevention:**
|
|
327
|
-
```typescript
|
|
328
|
-
// Security event logging
|
|
329
|
-
const securityLogger = {
|
|
330
|
-
loginSuccess: (userId: string, ip: string) => {
|
|
331
|
-
logger.info('LOGIN_SUCCESS', { userId, ip, timestamp: new Date() });
|
|
332
|
-
},
|
|
333
|
-
|
|
334
|
-
loginFailure: (email: string, ip: string, reason: string) => {
|
|
335
|
-
logger.warn('LOGIN_FAILURE', { email, ip, reason, timestamp: new Date() });
|
|
336
|
-
},
|
|
337
|
-
|
|
338
|
-
accessDenied: (userId: string, resource: string, ip: string) => {
|
|
339
|
-
logger.warn('ACCESS_DENIED', { userId, resource, ip, timestamp: new Date() });
|
|
340
|
-
},
|
|
341
|
-
|
|
342
|
-
suspiciousActivity: (details: object) => {
|
|
343
|
-
logger.error('SUSPICIOUS_ACTIVITY', { ...details, timestamp: new Date() });
|
|
344
|
-
}
|
|
345
|
-
};
|
|
346
|
-
|
|
347
|
-
// Log what to log
|
|
348
|
-
// ✅ Login attempts (success and failure)
|
|
349
|
-
// ✅ Access control failures
|
|
350
|
-
// ✅ Input validation failures
|
|
351
|
-
// ✅ Security configuration changes
|
|
352
|
-
// ✅ High-value transactions
|
|
353
|
-
|
|
354
|
-
// ❌ Don't log
|
|
355
|
-
// Passwords
|
|
356
|
-
// Session tokens
|
|
357
|
-
// Credit card numbers
|
|
358
|
-
// Personal data (unless necessary)
|
|
359
|
-
```
|
|
360
|
-
|
|
361
|
-
**Checklist:**
|
|
362
|
-
- [ ] Security events logged
|
|
363
|
-
- [ ] Log format is parseable
|
|
364
|
-
- [ ] Logs protected from tampering
|
|
365
|
-
- [ ] Sensitive data not logged
|
|
366
|
-
- [ ] Alerting on suspicious patterns
|
|
367
|
-
|
|
368
|
-
---
|
|
369
|
-
|
|
370
|
-
### 10. SSRF (A10:2021)
|
|
371
|
-
|
|
372
|
-
**What:** Server-Side Request Forgery.
|
|
373
|
-
|
|
374
|
-
**Prevention:**
|
|
375
|
-
```typescript
|
|
376
|
-
// ❌ Bad: User-controlled URL
|
|
377
|
-
const response = await fetch(req.body.url);
|
|
378
|
-
|
|
379
|
-
// ✅ Good: Validate and restrict
|
|
380
|
-
const ALLOWED_DOMAINS = ['api.example.com', 'cdn.example.com'];
|
|
381
|
-
|
|
382
|
-
async function fetchUrl(userUrl: string) {
|
|
383
|
-
const parsed = new URL(userUrl);
|
|
384
|
-
|
|
385
|
-
if (!ALLOWED_DOMAINS.includes(parsed.hostname)) {
|
|
386
|
-
throw new Error('Domain not allowed');
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
if (parsed.protocol !== 'https:') {
|
|
390
|
-
throw new Error('HTTPS required');
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
return fetch(userUrl);
|
|
394
|
-
}
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
**Checklist:**
|
|
398
|
-
- [ ] Validate user-supplied URLs
|
|
399
|
-
- [ ] Use allow-lists for domains
|
|
400
|
-
- [ ] Block internal/private IPs
|
|
401
|
-
- [ ] Disable HTTP redirects (or limit)
|
|
402
|
-
|
|
403
|
-
---
|
|
404
|
-
|
|
405
|
-
## Input Validation Patterns
|
|
406
|
-
|
|
407
|
-
### Universal Validation
|
|
408
|
-
|
|
409
|
-
```typescript
|
|
410
|
-
// Validation with Zod
|
|
411
|
-
const UserSchema = z.object({
|
|
412
|
-
email: z.string().email().toLowerCase().trim(),
|
|
413
|
-
password: z.string().min(12).max(128),
|
|
414
|
-
name: z.string().min(2).max(50).regex(/^[a-zA-Z\s]+$/),
|
|
415
|
-
age: z.number().int().min(13).max(120).optional(),
|
|
416
|
-
});
|
|
417
|
-
|
|
418
|
-
// Validation with class-validator
|
|
419
|
-
class CreateUserDto {
|
|
420
|
-
@IsEmail()
|
|
421
|
-
@Transform(({ value }) => value.toLowerCase().trim())
|
|
422
|
-
email: string;
|
|
423
|
-
|
|
424
|
-
@IsString()
|
|
425
|
-
@MinLength(12)
|
|
426
|
-
@MaxLength(128)
|
|
427
|
-
@Matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])/)
|
|
428
|
-
password: string;
|
|
429
|
-
|
|
430
|
-
@IsString()
|
|
431
|
-
@MinLength(2)
|
|
432
|
-
@MaxLength(50)
|
|
433
|
-
name: string;
|
|
434
|
-
}
|
|
435
|
-
```
|
|
436
|
-
|
|
437
|
-
### XSS Prevention
|
|
438
|
-
|
|
439
|
-
```typescript
|
|
440
|
-
// ❌ Bad: Raw HTML output
|
|
441
|
-
element.innerHTML = userInput;
|
|
442
|
-
|
|
443
|
-
// ✅ Good: Text content only
|
|
444
|
-
element.textContent = userInput;
|
|
445
|
-
|
|
446
|
-
// ✅ Good: Sanitize if HTML needed
|
|
447
|
-
import DOMPurify from 'dompurify';
|
|
448
|
-
element.innerHTML = DOMPurify.sanitize(userInput);
|
|
449
|
-
```
|
|
450
|
-
|
|
451
|
-
---
|
|
452
|
-
|
|
453
|
-
## Security Testing Checklist
|
|
454
|
-
|
|
455
|
-
```yaml
|
|
456
|
-
security_tests:
|
|
457
|
-
authentication:
|
|
458
|
-
- Test login with invalid credentials
|
|
459
|
-
- Test brute force protection
|
|
460
|
-
- Test session timeout
|
|
461
|
-
- Test logout clears session
|
|
462
|
-
- Test password reset flow
|
|
463
|
-
|
|
464
|
-
authorization:
|
|
465
|
-
- Test accessing other users' data
|
|
466
|
-
- Test admin functions as normal user
|
|
467
|
-
- Test direct object references
|
|
468
|
-
- Test privilege escalation
|
|
469
|
-
|
|
470
|
-
input_validation:
|
|
471
|
-
- Test SQL injection payloads
|
|
472
|
-
- Test XSS payloads
|
|
473
|
-
- Test command injection
|
|
474
|
-
- Test path traversal
|
|
475
|
-
- Test file upload restrictions
|
|
476
|
-
|
|
477
|
-
configuration:
|
|
478
|
-
- Test HTTPS enforcement
|
|
479
|
-
- Test security headers present
|
|
480
|
-
- Test error messages sanitized
|
|
481
|
-
- Test debugging disabled
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
---
|
|
485
|
-
|
|
486
|
-
## Guidelines
|
|
487
|
-
|
|
488
|
-
### DO ✅
|
|
489
|
-
- Validate all input
|
|
490
|
-
- Use parameterized queries
|
|
491
|
-
- Hash passwords with bcrypt/argon2
|
|
492
|
-
- Log security events
|
|
493
|
-
- Keep dependencies updated
|
|
494
|
-
- Apply principle of least privilege
|
|
495
|
-
|
|
496
|
-
### DON'T ❌
|
|
497
|
-
- Trust user input
|
|
498
|
-
- Store secrets in code
|
|
499
|
-
- Use weak cryptography
|
|
500
|
-
- Expose detailed errors
|
|
501
|
-
- Ignore security warnings
|
|
502
|
-
- Skip security testing
|
|
503
|
-
|
|
504
|
-
---
|
|
505
|
-
|
|
506
|
-
## Success Criteria
|
|
507
|
-
|
|
508
|
-
Before considering code secure:
|
|
509
|
-
|
|
510
|
-
- [ ] OWASP Top 10 addressed
|
|
511
|
-
- [ ] Input validation complete
|
|
512
|
-
- [ ] Authentication/authorization tested
|
|
513
|
-
- [ ] Secrets managed properly
|
|
514
|
-
- [ ] Security headers configured
|
|
515
|
-
- [ ] Dependencies audited
|
|
516
|
-
- [ ] Security logging in place
|
|
517
|
-
- [ ] Code reviewed for security
|
|
518
|
-
|
|
519
|
-
---
|
|
520
|
-
|
|
521
|
-
## Related Skills
|
|
522
|
-
|
|
523
|
-
- `skills/kilo-kit/development/backend/` - For API security
|
|
524
|
-
- `skills/kilo-kit/quality/code-review/` - For security review
|
|
525
|
-
- `skills/kilo-kit/debugging/root-cause/` - For security incident analysis
|
|
526
|
-
|
|
527
|
-
---
|
|
528
|
-
|
|
529
|
-
*Security Best Practices Skill v1.0.0 — Security is everyone's job*
|
|
1
|
+
---
|
|
2
|
+
name: security-best-practices
|
|
3
|
+
description: >-
|
|
4
|
+
Security-focused development skill covering OWASP Top 10 and secure coding.
|
|
5
|
+
Use when implementing authentication, handling user data, or security review.
|
|
6
|
+
Keywords: security, auth, authentication, authorization, OWASP, XSS, SQL injection, CSRF, secure
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
behaviors: [review_and_suggest, investigate_codebase, generate_with_validation]
|
|
9
|
+
dependencies: []
|
|
10
|
+
token_estimate:
|
|
11
|
+
min: 1500
|
|
12
|
+
typical: 3500
|
|
13
|
+
max: 8000
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# 🔐 Security Best Practices Skill
|
|
17
|
+
|
|
18
|
+
> **Philosophy:** Security is not optional. Build it in from the start.
|
|
19
|
+
|
|
20
|
+
## When to Use
|
|
21
|
+
|
|
22
|
+
Use this skill when:
|
|
23
|
+
- Implementing authentication/authorization
|
|
24
|
+
- Handling user input
|
|
25
|
+
- Working with sensitive data
|
|
26
|
+
- Doing security code review
|
|
27
|
+
- Building user-facing features
|
|
28
|
+
- Setting up deployment/infrastructure
|
|
29
|
+
|
|
30
|
+
**Do NOT use this skill when:**
|
|
31
|
+
- Just formatting code
|
|
32
|
+
- Pure UI/styling changes
|
|
33
|
+
- No user data involved
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Prerequisites
|
|
38
|
+
|
|
39
|
+
Before starting:
|
|
40
|
+
- [ ] Understand what data you're handling
|
|
41
|
+
- [ ] Know your threat model (who might attack)
|
|
42
|
+
- [ ] Have access to codebase
|
|
43
|
+
- [ ] Understand the tech stack
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## OWASP Top 10 Quick Reference
|
|
48
|
+
|
|
49
|
+
### 1. Broken Access Control (A01:2021)
|
|
50
|
+
|
|
51
|
+
**What:** Users can access data/functions they shouldn't.
|
|
52
|
+
|
|
53
|
+
**Prevention:**
|
|
54
|
+
```typescript
|
|
55
|
+
// ❌ Bad: No authorization check
|
|
56
|
+
app.get('/users/:id', async (req, res) => {
|
|
57
|
+
const user = await db.users.findById(req.params.id);
|
|
58
|
+
res.json(user);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// ✅ Good: Check ownership
|
|
62
|
+
app.get('/users/:id', authorize(), async (req, res) => {
|
|
63
|
+
const user = await db.users.findById(req.params.id);
|
|
64
|
+
|
|
65
|
+
if (user.id !== req.user.id && req.user.role !== 'admin') {
|
|
66
|
+
throw new ForbiddenException();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
res.json(user);
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Checklist:**
|
|
74
|
+
- [ ] Default deny (require explicit permission)
|
|
75
|
+
- [ ] Verify ownership of resources
|
|
76
|
+
- [ ] Role-based access control implemented
|
|
77
|
+
- [ ] Admin functions protected
|
|
78
|
+
- [ ] CORS configured correctly
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### 2. Cryptographic Failures (A02:2021)
|
|
83
|
+
|
|
84
|
+
**What:** Weak crypto, exposed sensitive data.
|
|
85
|
+
|
|
86
|
+
**Prevention:**
|
|
87
|
+
```typescript
|
|
88
|
+
// ❌ Bad: Weak hashing
|
|
89
|
+
const hash = crypto.createHash('md5').update(password).digest('hex');
|
|
90
|
+
|
|
91
|
+
// ✅ Good: Strong hashing with bcrypt
|
|
92
|
+
const hash = await bcrypt.hash(password, 12);
|
|
93
|
+
|
|
94
|
+
// ❌ Bad: Hardcoded secrets
|
|
95
|
+
const API_KEY = "sk_live_abc123";
|
|
96
|
+
|
|
97
|
+
// ✅ Good: Environment variables
|
|
98
|
+
const API_KEY = process.env.API_KEY;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Checklist:**
|
|
102
|
+
- [ ] Passwords hashed with bcrypt/argon2 (cost factor ≥12)
|
|
103
|
+
- [ ] Sensitive data encrypted at rest
|
|
104
|
+
- [ ] TLS/HTTPS enforced
|
|
105
|
+
- [ ] No hardcoded secrets
|
|
106
|
+
- [ ] Secrets in environment variables
|
|
107
|
+
- [ ] Old/weak algorithms avoided (MD5, SHA1)
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
### 3. Injection (A03:2021)
|
|
112
|
+
|
|
113
|
+
**What:** Malicious data executed as code/query.
|
|
114
|
+
|
|
115
|
+
**Prevention:**
|
|
116
|
+
```typescript
|
|
117
|
+
// ❌ Bad: SQL Injection
|
|
118
|
+
const query = `SELECT * FROM users WHERE email = '${email}'`;
|
|
119
|
+
|
|
120
|
+
// ✅ Good: Parameterized queries
|
|
121
|
+
const user = await db.query(
|
|
122
|
+
'SELECT * FROM users WHERE email = $1',
|
|
123
|
+
[email]
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
// ❌ Bad: Command injection
|
|
127
|
+
exec(`convert ${filename} output.png`);
|
|
128
|
+
|
|
129
|
+
// ✅ Good: Use library functions
|
|
130
|
+
await sharp(filename).toFile('output.png');
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Types to Prevent:**
|
|
134
|
+
- SQL Injection
|
|
135
|
+
- NoSQL Injection
|
|
136
|
+
- Command Injection
|
|
137
|
+
- LDAP Injection
|
|
138
|
+
- XPath Injection
|
|
139
|
+
|
|
140
|
+
**Checklist:**
|
|
141
|
+
- [ ] Use parameterized queries/ORM
|
|
142
|
+
- [ ] Validate and sanitize all input
|
|
143
|
+
- [ ] Escape output appropriately
|
|
144
|
+
- [ ] Avoid shell commands with user input
|
|
145
|
+
- [ ] Use allow-lists, not block-lists
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
### 4. Insecure Design (A04:2021)
|
|
150
|
+
|
|
151
|
+
**What:** Missing security in design phase.
|
|
152
|
+
|
|
153
|
+
**Prevention:**
|
|
154
|
+
```yaml
|
|
155
|
+
# Security design considerations
|
|
156
|
+
threat_modeling:
|
|
157
|
+
assets:
|
|
158
|
+
- User credentials
|
|
159
|
+
- Payment information
|
|
160
|
+
- Personal data
|
|
161
|
+
|
|
162
|
+
threats:
|
|
163
|
+
- Authentication bypass
|
|
164
|
+
- Data theft
|
|
165
|
+
- Privilege escalation
|
|
166
|
+
|
|
167
|
+
mitigations:
|
|
168
|
+
- MFA for sensitive operations
|
|
169
|
+
- Encryption at rest
|
|
170
|
+
- Audit logging
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Checklist:**
|
|
174
|
+
- [ ] Threat model created
|
|
175
|
+
- [ ] Security requirements documented
|
|
176
|
+
- [ ] Defense in depth applied
|
|
177
|
+
- [ ] Fail securely (safe defaults)
|
|
178
|
+
- [ ] Separation of duties
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
### 5. Security Misconfiguration (A05:2021)
|
|
183
|
+
|
|
184
|
+
**What:** Insecure settings, missing hardening.
|
|
185
|
+
|
|
186
|
+
**Prevention:**
|
|
187
|
+
```typescript
|
|
188
|
+
// ❌ Bad: Debugging enabled in production
|
|
189
|
+
app.use(express.errorHandler({ dumpExceptions: true }));
|
|
190
|
+
|
|
191
|
+
// ✅ Good: Production-safe error handling
|
|
192
|
+
if (process.env.NODE_ENV === 'production') {
|
|
193
|
+
app.use((err, req, res, next) => {
|
|
194
|
+
console.error(err); // Log internally
|
|
195
|
+
res.status(500).json({ message: 'Internal error' }); // Don't expose details
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Checklist:**
|
|
201
|
+
- [ ] Remove default credentials
|
|
202
|
+
- [ ] Disable debugging in production
|
|
203
|
+
- [ ] Remove unnecessary features/endpoints
|
|
204
|
+
- [ ] Security headers configured
|
|
205
|
+
- [ ] Error messages don't leak info
|
|
206
|
+
- [ ] File permissions correct
|
|
207
|
+
|
|
208
|
+
**Security Headers:**
|
|
209
|
+
```typescript
|
|
210
|
+
app.use(helmet());
|
|
211
|
+
// Or manually:
|
|
212
|
+
app.use((req, res, next) => {
|
|
213
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
214
|
+
res.setHeader('X-Frame-Options', 'DENY');
|
|
215
|
+
res.setHeader('X-XSS-Protection', '1; mode=block');
|
|
216
|
+
res.setHeader('Strict-Transport-Security', 'max-age=31536000');
|
|
217
|
+
res.setHeader('Content-Security-Policy', "default-src 'self'");
|
|
218
|
+
next();
|
|
219
|
+
});
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### 6. Vulnerable Components (A06:2021)
|
|
225
|
+
|
|
226
|
+
**What:** Using libraries with known vulnerabilities.
|
|
227
|
+
|
|
228
|
+
**Prevention:**
|
|
229
|
+
```bash
|
|
230
|
+
# Check for vulnerabilities
|
|
231
|
+
npm audit
|
|
232
|
+
pip-audit
|
|
233
|
+
dotnet list package --vulnerable
|
|
234
|
+
|
|
235
|
+
# Fix vulnerabilities
|
|
236
|
+
npm audit fix
|
|
237
|
+
pip-audit --fix
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
**Checklist:**
|
|
241
|
+
- [ ] Dependencies up to date
|
|
242
|
+
- [ ] Security advisories monitored
|
|
243
|
+
- [ ] Automated vulnerability scanning
|
|
244
|
+
- [ ] Remove unused dependencies
|
|
245
|
+
- [ ] Only use trusted sources
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
### 7. Authentication Failures (A07:2021)
|
|
250
|
+
|
|
251
|
+
**What:** Broken login, session management.
|
|
252
|
+
|
|
253
|
+
**Prevention:**
|
|
254
|
+
```typescript
|
|
255
|
+
// Password requirements
|
|
256
|
+
const passwordPolicy = {
|
|
257
|
+
minLength: 12,
|
|
258
|
+
requireUppercase: true,
|
|
259
|
+
requireLowercase: true,
|
|
260
|
+
requireNumber: true,
|
|
261
|
+
requireSpecial: true,
|
|
262
|
+
preventCommon: true,
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
// Rate limiting login attempts
|
|
266
|
+
const loginLimiter = rateLimit({
|
|
267
|
+
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
268
|
+
max: 5, // 5 attempts
|
|
269
|
+
message: 'Too many login attempts'
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
// Session configuration
|
|
273
|
+
app.use(session({
|
|
274
|
+
secret: process.env.SESSION_SECRET,
|
|
275
|
+
resave: false,
|
|
276
|
+
saveUninitialized: false,
|
|
277
|
+
cookie: {
|
|
278
|
+
secure: true, // HTTPS only
|
|
279
|
+
httpOnly: true, // No JS access
|
|
280
|
+
sameSite: 'strict', // CSRF protection
|
|
281
|
+
maxAge: 3600000 // 1 hour
|
|
282
|
+
}
|
|
283
|
+
}));
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**Checklist:**
|
|
287
|
+
- [ ] Strong password policy enforced
|
|
288
|
+
- [ ] Brute force protection (rate limiting)
|
|
289
|
+
- [ ] MFA available for sensitive accounts
|
|
290
|
+
- [ ] Secure password reset flow
|
|
291
|
+
- [ ] Sessions invalidated on logout
|
|
292
|
+
- [ ] Session timeout configured
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
### 8. Software Integrity Failures (A08:2021)
|
|
297
|
+
|
|
298
|
+
**What:** Insecure updates, CI/CD pipeline attacks.
|
|
299
|
+
|
|
300
|
+
**Prevention:**
|
|
301
|
+
```yaml
|
|
302
|
+
# Verify package integrity
|
|
303
|
+
package-lock.json # Lock versions
|
|
304
|
+
npm ci # Install exact versions
|
|
305
|
+
|
|
306
|
+
# CI/CD security
|
|
307
|
+
ci_security:
|
|
308
|
+
- Verify source code integrity
|
|
309
|
+
- Sign releases
|
|
310
|
+
- Secure deployment pipeline
|
|
311
|
+
- Review third-party actions
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
**Checklist:**
|
|
315
|
+
- [ ] Lock file used and committed
|
|
316
|
+
- [ ] Packages verified (checksums)
|
|
317
|
+
- [ ] CI/CD pipeline secured
|
|
318
|
+
- [ ] Code signing for releases
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
### 9. Logging Failures (A09:2021)
|
|
323
|
+
|
|
324
|
+
**What:** Insufficient logging for security events.
|
|
325
|
+
|
|
326
|
+
**Prevention:**
|
|
327
|
+
```typescript
|
|
328
|
+
// Security event logging
|
|
329
|
+
const securityLogger = {
|
|
330
|
+
loginSuccess: (userId: string, ip: string) => {
|
|
331
|
+
logger.info('LOGIN_SUCCESS', { userId, ip, timestamp: new Date() });
|
|
332
|
+
},
|
|
333
|
+
|
|
334
|
+
loginFailure: (email: string, ip: string, reason: string) => {
|
|
335
|
+
logger.warn('LOGIN_FAILURE', { email, ip, reason, timestamp: new Date() });
|
|
336
|
+
},
|
|
337
|
+
|
|
338
|
+
accessDenied: (userId: string, resource: string, ip: string) => {
|
|
339
|
+
logger.warn('ACCESS_DENIED', { userId, resource, ip, timestamp: new Date() });
|
|
340
|
+
},
|
|
341
|
+
|
|
342
|
+
suspiciousActivity: (details: object) => {
|
|
343
|
+
logger.error('SUSPICIOUS_ACTIVITY', { ...details, timestamp: new Date() });
|
|
344
|
+
}
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
// Log what to log
|
|
348
|
+
// ✅ Login attempts (success and failure)
|
|
349
|
+
// ✅ Access control failures
|
|
350
|
+
// ✅ Input validation failures
|
|
351
|
+
// ✅ Security configuration changes
|
|
352
|
+
// ✅ High-value transactions
|
|
353
|
+
|
|
354
|
+
// ❌ Don't log
|
|
355
|
+
// Passwords
|
|
356
|
+
// Session tokens
|
|
357
|
+
// Credit card numbers
|
|
358
|
+
// Personal data (unless necessary)
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
**Checklist:**
|
|
362
|
+
- [ ] Security events logged
|
|
363
|
+
- [ ] Log format is parseable
|
|
364
|
+
- [ ] Logs protected from tampering
|
|
365
|
+
- [ ] Sensitive data not logged
|
|
366
|
+
- [ ] Alerting on suspicious patterns
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
### 10. SSRF (A10:2021)
|
|
371
|
+
|
|
372
|
+
**What:** Server-Side Request Forgery.
|
|
373
|
+
|
|
374
|
+
**Prevention:**
|
|
375
|
+
```typescript
|
|
376
|
+
// ❌ Bad: User-controlled URL
|
|
377
|
+
const response = await fetch(req.body.url);
|
|
378
|
+
|
|
379
|
+
// ✅ Good: Validate and restrict
|
|
380
|
+
const ALLOWED_DOMAINS = ['api.example.com', 'cdn.example.com'];
|
|
381
|
+
|
|
382
|
+
async function fetchUrl(userUrl: string) {
|
|
383
|
+
const parsed = new URL(userUrl);
|
|
384
|
+
|
|
385
|
+
if (!ALLOWED_DOMAINS.includes(parsed.hostname)) {
|
|
386
|
+
throw new Error('Domain not allowed');
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
if (parsed.protocol !== 'https:') {
|
|
390
|
+
throw new Error('HTTPS required');
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
return fetch(userUrl);
|
|
394
|
+
}
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
**Checklist:**
|
|
398
|
+
- [ ] Validate user-supplied URLs
|
|
399
|
+
- [ ] Use allow-lists for domains
|
|
400
|
+
- [ ] Block internal/private IPs
|
|
401
|
+
- [ ] Disable HTTP redirects (or limit)
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## Input Validation Patterns
|
|
406
|
+
|
|
407
|
+
### Universal Validation
|
|
408
|
+
|
|
409
|
+
```typescript
|
|
410
|
+
// Validation with Zod
|
|
411
|
+
const UserSchema = z.object({
|
|
412
|
+
email: z.string().email().toLowerCase().trim(),
|
|
413
|
+
password: z.string().min(12).max(128),
|
|
414
|
+
name: z.string().min(2).max(50).regex(/^[a-zA-Z\s]+$/),
|
|
415
|
+
age: z.number().int().min(13).max(120).optional(),
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
// Validation with class-validator
|
|
419
|
+
class CreateUserDto {
|
|
420
|
+
@IsEmail()
|
|
421
|
+
@Transform(({ value }) => value.toLowerCase().trim())
|
|
422
|
+
email: string;
|
|
423
|
+
|
|
424
|
+
@IsString()
|
|
425
|
+
@MinLength(12)
|
|
426
|
+
@MaxLength(128)
|
|
427
|
+
@Matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])/)
|
|
428
|
+
password: string;
|
|
429
|
+
|
|
430
|
+
@IsString()
|
|
431
|
+
@MinLength(2)
|
|
432
|
+
@MaxLength(50)
|
|
433
|
+
name: string;
|
|
434
|
+
}
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### XSS Prevention
|
|
438
|
+
|
|
439
|
+
```typescript
|
|
440
|
+
// ❌ Bad: Raw HTML output
|
|
441
|
+
element.innerHTML = userInput;
|
|
442
|
+
|
|
443
|
+
// ✅ Good: Text content only
|
|
444
|
+
element.textContent = userInput;
|
|
445
|
+
|
|
446
|
+
// ✅ Good: Sanitize if HTML needed
|
|
447
|
+
import DOMPurify from 'dompurify';
|
|
448
|
+
element.innerHTML = DOMPurify.sanitize(userInput);
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
---
|
|
452
|
+
|
|
453
|
+
## Security Testing Checklist
|
|
454
|
+
|
|
455
|
+
```yaml
|
|
456
|
+
security_tests:
|
|
457
|
+
authentication:
|
|
458
|
+
- Test login with invalid credentials
|
|
459
|
+
- Test brute force protection
|
|
460
|
+
- Test session timeout
|
|
461
|
+
- Test logout clears session
|
|
462
|
+
- Test password reset flow
|
|
463
|
+
|
|
464
|
+
authorization:
|
|
465
|
+
- Test accessing other users' data
|
|
466
|
+
- Test admin functions as normal user
|
|
467
|
+
- Test direct object references
|
|
468
|
+
- Test privilege escalation
|
|
469
|
+
|
|
470
|
+
input_validation:
|
|
471
|
+
- Test SQL injection payloads
|
|
472
|
+
- Test XSS payloads
|
|
473
|
+
- Test command injection
|
|
474
|
+
- Test path traversal
|
|
475
|
+
- Test file upload restrictions
|
|
476
|
+
|
|
477
|
+
configuration:
|
|
478
|
+
- Test HTTPS enforcement
|
|
479
|
+
- Test security headers present
|
|
480
|
+
- Test error messages sanitized
|
|
481
|
+
- Test debugging disabled
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
---
|
|
485
|
+
|
|
486
|
+
## Guidelines
|
|
487
|
+
|
|
488
|
+
### DO ✅
|
|
489
|
+
- Validate all input
|
|
490
|
+
- Use parameterized queries
|
|
491
|
+
- Hash passwords with bcrypt/argon2
|
|
492
|
+
- Log security events
|
|
493
|
+
- Keep dependencies updated
|
|
494
|
+
- Apply principle of least privilege
|
|
495
|
+
|
|
496
|
+
### DON'T ❌
|
|
497
|
+
- Trust user input
|
|
498
|
+
- Store secrets in code
|
|
499
|
+
- Use weak cryptography
|
|
500
|
+
- Expose detailed errors
|
|
501
|
+
- Ignore security warnings
|
|
502
|
+
- Skip security testing
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
## Success Criteria
|
|
507
|
+
|
|
508
|
+
Before considering code secure:
|
|
509
|
+
|
|
510
|
+
- [ ] OWASP Top 10 addressed
|
|
511
|
+
- [ ] Input validation complete
|
|
512
|
+
- [ ] Authentication/authorization tested
|
|
513
|
+
- [ ] Secrets managed properly
|
|
514
|
+
- [ ] Security headers configured
|
|
515
|
+
- [ ] Dependencies audited
|
|
516
|
+
- [ ] Security logging in place
|
|
517
|
+
- [ ] Code reviewed for security
|
|
518
|
+
|
|
519
|
+
---
|
|
520
|
+
|
|
521
|
+
## Related Skills
|
|
522
|
+
|
|
523
|
+
- `skills/kilo-kit/development/backend/` - For API security
|
|
524
|
+
- `skills/kilo-kit/quality/code-review/` - For security review
|
|
525
|
+
- `skills/kilo-kit/debugging/root-cause/` - For security incident analysis
|
|
526
|
+
|
|
527
|
+
---
|
|
528
|
+
|
|
529
|
+
*Security Best Practices Skill v1.0.0 — Security is everyone's job*
|